activiti-image-generator
创始人
2024-01-31 15:47:42

activiti-image-generator

  • 目录
    • 概述
      • 需求:
    • 设计思路
    • 实现思路分析
      • 1.ActivitiImageException
      • 2.ProcessDiagramGenerator
      • 3.ProcessDiagramSVGGraphics2D
      • 4.ProcessDiagramDOMGroupManager
      • 5.DefaultProcessDiagramGenerator
  • 参考资料和推荐阅读

Survive by day and develop by night.
talk for import biz , show your perfect code,full busy,skip hardness,make a better result,wait for change,challenge Survive.
happy for hardess to solve denpendies.

目录

在这里插入图片描述

概述

ProcessDiagramSVGGraphics2D是一个非常常见的需求。

需求:

设计思路

实现思路分析

1.ActivitiImageException

在这里插入图片描述

2.ProcessDiagramGenerator

public interface ProcessDiagramGenerator {/*** Generates a diagram of the given process definition, using the diagram interchange information of the process.* If there is no interchange information available, an ActivitiInterchangeInfoNotFoundException is thrown.* @param bpmnModel bpmn model to get diagram for* @param highLightedActivities activities to highlight* @param highLightedFlows flows to highlight* @param activityFontName override the default activity font* @param labelFontName override the default label font*/InputStream generateDiagram(BpmnModel bpmnModel,List highLightedActivities,List highLightedFlows,String activityFontName,String labelFontName,String annotationFontName);/*** Generates a diagram of the given process definition, using the diagram interchange information of the process,* or the default diagram image, if generateDefaultDiagram param is true.* @param bpmnModel bpmn model to get diagram for* @param highLightedActivities activities to highlight* @param highLightedFlows flows to highlight* @param activityFontName override the default activity font* @param labelFontName override the default label font* @param generateDefaultDiagram true if a default diagram should be generated if there is no graphic info available*/InputStream generateDiagram(BpmnModel bpmnModel,List highLightedActivities,List highLightedFlows,String activityFontName,String labelFontName,String annotationFontName,boolean generateDefaultDiagram);/*** Generates a diagram of the given process definition, using the diagram interchange information of the process,* or the default diagram image, if generateDefaultDiagram param is true.* @param bpmnModel bpmn model to get diagram for* @param highLightedActivities activities to highlight* @param highLightedFlows flows to highlight* @param currentActivities current activities to highlight* @param erroredActivities errored activities to highlight* @param activityFontName override the default activity font* @param labelFontName override the default label font* @param generateDefaultDiagram true if a default diagram should be generated if there is no graphic info available* @param defaultDiagramImageFileName override the default diagram image file name*/InputStream generateDiagram(BpmnModel bpmnModel,List highLightedActivities,List highLightedFlows,List currentActivities,List erroredActivities,String activityFontName,String labelFontName,String annotationFontName,boolean generateDefaultDiagram,String defaultDiagramImageFileName);/*** Generates a diagram of the given process definition, using the diagram interchange information of the process.* If there is no interchange information available, an ActivitiInterchangeInfoNotFoundException is thrown.* @param bpmnModel bpmn model to get diagram for* @param highLightedActivities activities to highlight* @param highLightedFlows flows to highlight*/InputStream generateDiagram(BpmnModel bpmnModel,List highLightedActivities,List highLightedFlows);/*** Generates a diagram of the given process definition, using the diagram interchange information of the process.* If there is no interchange information available, an ActivitiInterchangeInfoNotFoundException is thrown.* @param bpmnModel bpmn model to get diagram for* @param highLightedActivities activities to highlight*/InputStream generateDiagram(BpmnModel bpmnModel,List highLightedActivities);/*** Generates a diagram of the given process definition, using the diagram interchange information of the process.* If there is no interchange information available, an ActivitiInterchangeInfoNotFoundException is thrown.* @param bpmnModel bpmn model to get diagram for*/InputStream generateDiagram(BpmnModel bpmnModel,String activityFontName,String labelFontName,String annotationFontName);String getDefaultActivityFontName();String getDefaultLabelFontName();String getDefaultAnnotationFontName();String getDefaultDiagramImageFileName();
}

3.ProcessDiagramSVGGraphics2D

public class ProcessDiagramSVGGraphics2D extends SVGGraphics2D {public ProcessDiagramSVGGraphics2D(Document domFactory) {super(domFactory);this.setDOMGroupManager(new ProcessDiagramDOMGroupManager(this.getGraphicContext(),this.getDOMTreeManager()));}@Overridepublic void setRenderingHints(@SuppressWarnings("rawtypes") Map hints) {super.setRenderingHints(hints);}@Overridepublic void addRenderingHints(@SuppressWarnings("rawtypes") Map hints) {super.addRenderingHints(hints);}public void setCurrentGroupId(String id) {this.getExtendDOMGroupManager().setCurrentGroupId(id);}public ProcessDiagramDOMGroupManager getExtendDOMGroupManager() {return (ProcessDiagramDOMGroupManager) super.getDOMGroupManager();}
}

4.ProcessDiagramDOMGroupManager

public class ProcessDiagramDOMGroupManager extends DOMGroupManager {public ProcessDiagramDOMGroupManager(GraphicContext gc,DOMTreeManager domTreeManager) {super(gc,domTreeManager);}public void setCurrentGroupId(String id) {this.currentGroup.setAttribute("id",id);}
}

5.DefaultProcessDiagramGenerator

public class DefaultProcessDiagramGenerator implements ProcessDiagramGenerator {private static final String DEFAULT_ACTIVITY_FONT_NAME = "Arial";private static final String DEFAULT_LABEL_FONT_NAME = "Arial";private static final String DEFAULT_ANNOTATION_FONT_NAME = "Arial";private static final String DEFAULT_DIAGRAM_IMAGE_FILE_NAME = "/image/na.svg";protected Map, ActivityDrawInstruction> activityDrawInstructions = new HashMap, ActivityDrawInstruction>();protected Map, ArtifactDrawInstruction> artifactDrawInstructions = new HashMap, ArtifactDrawInstruction>();@Overridepublic String getDefaultActivityFontName() {return DEFAULT_ACTIVITY_FONT_NAME;}@Overridepublic String getDefaultLabelFontName() {return DEFAULT_LABEL_FONT_NAME;}@Overridepublic String getDefaultAnnotationFontName() {return DEFAULT_ANNOTATION_FONT_NAME;}@Overridepublic String getDefaultDiagramImageFileName() {return DEFAULT_DIAGRAM_IMAGE_FILE_NAME;}// The instructions on how to draw a certain construct is// created statically and stored in a map for performance.public DefaultProcessDiagramGenerator() {// start eventactivityDrawInstructions.put(StartEvent.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());StartEvent startEvent = (StartEvent) flowNode;if (startEvent.getEventDefinitions() != null && !startEvent.getEventDefinitions().isEmpty()) {EventDefinition eventDefinition = startEvent.getEventDefinitions().get(0);if (eventDefinition instanceof TimerEventDefinition) {processDiagramCanvas.drawTimerStartEvent(flowNode.getId(),graphicInfo);} else if (eventDefinition instanceof ErrorEventDefinition) {processDiagramCanvas.drawErrorStartEvent(flowNode.getId(),graphicInfo);} else if (eventDefinition instanceof SignalEventDefinition) {processDiagramCanvas.drawSignalStartEvent(flowNode.getId(),graphicInfo);} else if (eventDefinition instanceof MessageEventDefinition) {processDiagramCanvas.drawMessageStartEvent(flowNode.getId(),graphicInfo);} else {processDiagramCanvas.drawNoneStartEvent(flowNode.getId(),graphicInfo);}} else {processDiagramCanvas.drawNoneStartEvent(flowNode.getId(),graphicInfo);}}});// signal catchactivityDrawInstructions.put(IntermediateCatchEvent.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());IntermediateCatchEvent intermediateCatchEvent = (IntermediateCatchEvent) flowNode;if (intermediateCatchEvent.getEventDefinitions() != null && !intermediateCatchEvent.getEventDefinitions().isEmpty()) {if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) {processDiagramCanvas.drawCatchingSignalEvent(flowNode.getId(),flowNode.getName(),graphicInfo,true);} else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof TimerEventDefinition) {processDiagramCanvas.drawCatchingTimerEvent(flowNode.getId(),flowNode.getName(),graphicInfo,true);} else if (intermediateCatchEvent.getEventDefinitions().get(0) instanceof MessageEventDefinition) {processDiagramCanvas.drawCatchingMessageEvent(flowNode.getId(),flowNode.getName(),graphicInfo,true);}}}});// signal throwactivityDrawInstructions.put(ThrowEvent.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());ThrowEvent throwEvent = (ThrowEvent) flowNode;if (throwEvent.getEventDefinitions() != null && !throwEvent.getEventDefinitions().isEmpty()) {if (throwEvent.getEventDefinitions().get(0) instanceof SignalEventDefinition) {processDiagramCanvas.drawThrowingSignalEvent(flowNode.getId(),graphicInfo);} else if (throwEvent.getEventDefinitions().get(0) instanceof CompensateEventDefinition) {processDiagramCanvas.drawThrowingCompensateEvent(flowNode.getId(),graphicInfo);} else {processDiagramCanvas.drawThrowingNoneEvent(flowNode.getId(),graphicInfo);}} else {processDiagramCanvas.drawThrowingNoneEvent(flowNode.getId(),graphicInfo);}}});// end eventactivityDrawInstructions.put(EndEvent.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());EndEvent endEvent = (EndEvent) flowNode;if (endEvent.getEventDefinitions() != null && !endEvent.getEventDefinitions().isEmpty()) {if (endEvent.getEventDefinitions().get(0) instanceof ErrorEventDefinition) {processDiagramCanvas.drawErrorEndEvent(flowNode.getId(),flowNode.getName(),graphicInfo);} else {processDiagramCanvas.drawNoneEndEvent(flowNode.getId(),flowNode.getName(),graphicInfo);}} else {processDiagramCanvas.drawNoneEndEvent(flowNode.getId(),flowNode.getName(),graphicInfo);}}});// taskactivityDrawInstructions.put(Task.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// user taskactivityDrawInstructions.put(UserTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawUserTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// script taskactivityDrawInstructions.put(ScriptTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawScriptTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// service taskactivityDrawInstructions.put(ServiceTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());ServiceTask serviceTask = (ServiceTask) flowNode;processDiagramCanvas.drawServiceTask(flowNode.getId(),serviceTask.getName(),graphicInfo);}});// receive taskactivityDrawInstructions.put(ReceiveTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawReceiveTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// send taskactivityDrawInstructions.put(SendTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawSendTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// manual taskactivityDrawInstructions.put(ManualTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawManualTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// businessRuleTask taskactivityDrawInstructions.put(BusinessRuleTask.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawBusinessRuleTask(flowNode.getId(),flowNode.getName(),graphicInfo);}});// exclusive gatewayactivityDrawInstructions.put(ExclusiveGateway.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawExclusiveGateway(flowNode.getId(),graphicInfo);}});// inclusive gatewayactivityDrawInstructions.put(InclusiveGateway.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawInclusiveGateway(flowNode.getId(),graphicInfo);}});// parallel gatewayactivityDrawInstructions.put(ParallelGateway.class,new ActivityDrawInstruction() {@Overridepublic void draw(DefaultProcessDiagramCanvas processDiagramCanvas,BpmnModel bpmnModel,FlowNode flowNode) {GraphicInfo graphicInfo = bpmnModel.getGraphicInfo(flowNode.getId());processDiagramCanvas.drawParallelGateway(flowNode.getId(),graphicInfo);}});

在这里插入图片描述

参考资料和推荐阅读

[1]. www.acitivte.org

欢迎阅读,各位老铁,如果对你有帮助,点个赞加个关注呗!~

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
音响没声音怎么回事 音响听着听... 目前专业音响设备种类繁多,这么多设备在使用当中难免会有一些各种各样的故障,有些是设备本身的故障(硬故...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
ppt插入pdf ppt根据页... PPT目录页的实际内容,往往只有几行字,怎么摆都感觉有点单薄。因此我做了这个按钮,点一下,自动识别内...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...