kimi
2020-05-27 c007f0ca1785db093d48f4846cda82fe8e955765
src/main/java/com/highdatas/mdm/process/canvas/ProcessDiagramCanvas.java
@@ -1,129 +1,129 @@
package com.highdatas.mdm.process.canvas;
import org.activiti.bpmn.model.AssociationDirection;
import org.activiti.bpmn.model.GraphicInfo;
import org.activiti.image.impl.DefaultProcessDiagramCanvas;
import java.awt.*;
import java.awt.geom.Line2D.Double;
import java.awt.geom.RoundRectangle2D;
public class ProcessDiagramCanvas extends DefaultProcessDiagramCanvas {
   protected static Color HIGHLIGHT_COLOR = new Color(62,173,252);
   private static Color RUNNING_COLOR = Color.RED;
   private static Color HISTORY_COLOR = Color.GREEN;
   protected static int ICON_PADDING = 3;
   private String annotationFontName;
   public ProcessDiagramCanvas(int width, int height, int minX, int minY,
         String imageType) {
      super(width, height, minX, minY, imageType);
      this.activityFontName = "宋体";
      this.labelFontName = "宋体";
      this.annotationFontName = "宋体";
      initialize(imageType);
   }
   @Override
   public void drawHighLight(int x, int y, int width, int height) {
      Paint originalPaint = g.getPaint();
      Stroke originalStroke = g.getStroke();
      g.setPaint(HIGHLIGHT_COLOR);
      g.setStroke(THICK_TASK_BORDER_STROKE);
      RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20);
      g.draw(rect);
      g.setPaint(originalPaint);
      g.setStroke(originalStroke);
   }
   @Override
    public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor)
     {
       Paint originalPaint = this.g.getPaint();
       Stroke originalStroke = this.g.getStroke();
       this.g.setPaint(CONNECTION_COLOR);
       if (connectionType.equals("association")) {
         this.g.setStroke(ASSOCIATION_STROKE);
       } else if (highLighted) {
         this.g.setPaint(HIGHLIGHT_COLOR);
         this.g.setStroke(HIGHLIGHT_FLOW_STROKE);
       }
       for (int i = 1; i < xPoints.length; ++i) {
         Integer sourceX = Integer.valueOf(xPoints[(i - 1)]);
         Integer sourceY = Integer.valueOf(yPoints[(i - 1)]);
         Integer targetX = Integer.valueOf(xPoints[i]);
         Integer targetY = Integer.valueOf(yPoints[i]);
         // e.g.(0,0) --->  (10,20)     (0,20)  (10,20)
         Double line1 = new Double(sourceX.intValue(), sourceY.intValue(), sourceX.intValue(), targetY.intValue());
         Double line2 = new Double(sourceX.intValue(), targetY.intValue(), targetX.intValue(), targetY.intValue());
         //Line2D.Double line = new Line2D.Double(sourceX.intValue(), sourceY.intValue(), targetX.intValue(), targetY.intValue());
         this.g.draw(line1);
         this.g.draw(line2);
       }
       Double line;
       if (isDefault) {
         line = new Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);
         drawDefaultSequenceFlowIndicator(line, scaleFactor);
       }
       if (conditional) {
         line = new Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);
         drawConditionalSequenceFlowIndicator(line, scaleFactor);
       }
       if ((associationDirection.equals(AssociationDirection.ONE)) || (associationDirection.equals(AssociationDirection.BOTH))) {
         line = new Double(xPoints[(xPoints.length - 2)], yPoints[(xPoints.length - 2)], xPoints[(xPoints.length - 1)], yPoints[(xPoints.length - 1)]);
         drawArrowHead(line, scaleFactor);
       }
       if (associationDirection.equals(AssociationDirection.BOTH)) {
         line = new Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]);
         drawArrowHead(line, scaleFactor);
       }
       this.g.setPaint(originalPaint);
       this.g.setStroke(originalStroke);
     }
   @Override
   protected void drawTask(String name, GraphicInfo graphicInfo, boolean thickBorder){
       Paint originalPaint = this.g.getPaint();
       int x = (int)graphicInfo.getX();
       int y = (int)graphicInfo.getY();
       int width = (int)graphicInfo.getWidth();
       int height = (int)graphicInfo.getHeight();
       this.g.setPaint(TASK_BOX_COLOR);
       int arcR = 6;
       if (thickBorder) {
         arcR = 3;
       }
       RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 10, 10);
       this.g.fill(rect);
       this.g.setPaint(TASK_BORDER_COLOR);
       if (thickBorder) {
         Stroke originalStroke = this.g.getStroke();
         this.g.setStroke(THICK_TASK_BORDER_STROKE);
         this.g.draw(rect);
         this.g.setStroke(originalStroke);
       } else {
         this.g.draw(rect);
       }
       this.g.setPaint(originalPaint);
       if ((name != null) && (name.length() > 0)) {
         int boxWidth = width - 6;
         int boxHeight = height - 16 - ICON_PADDING - ICON_PADDING - 12 - 2 - 2;
         int boxX = x + width / 2 - (boxWidth / 2);
         int boxY = y + height / 2 - (boxHeight / 2) + ICON_PADDING + ICON_PADDING - 2 - 2;
         drawMultilineCentredText(name, boxX, boxY, boxWidth, boxHeight);
       }
     }
}
package com.highdatas.mdm.process.canvas;
import org.activiti.bpmn.model.AssociationDirection;
import org.activiti.bpmn.model.GraphicInfo;
import org.activiti.image.impl.DefaultProcessDiagramCanvas;
import java.awt.*;
import java.awt.geom.Line2D.Double;
import java.awt.geom.RoundRectangle2D;
public class ProcessDiagramCanvas extends DefaultProcessDiagramCanvas {
   protected static Color HIGHLIGHT_COLOR = new Color(62,173,252);
   private static Color RUNNING_COLOR = Color.RED;
   private static Color HISTORY_COLOR = Color.GREEN;
   protected static int ICON_PADDING = 3;
   private String annotationFontName;
   public ProcessDiagramCanvas(int width, int height, int minX, int minY,
         String imageType) {
      super(width, height, minX, minY, imageType);
      this.activityFontName = "宋体";
      this.labelFontName = "宋体";
      this.annotationFontName = "宋体";
      initialize(imageType);
   }
   @Override
   public void drawHighLight(int x, int y, int width, int height) {
      Paint originalPaint = g.getPaint();
      Stroke originalStroke = g.getStroke();
      g.setPaint(HIGHLIGHT_COLOR);
      g.setStroke(THICK_TASK_BORDER_STROKE);
      RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 20, 20);
      g.draw(rect);
      g.setPaint(originalPaint);
      g.setStroke(originalStroke);
   }
   @Override
    public void drawConnection(int[] xPoints, int[] yPoints, boolean conditional, boolean isDefault, String connectionType, AssociationDirection associationDirection, boolean highLighted, double scaleFactor)
     {
       Paint originalPaint = this.g.getPaint();
       Stroke originalStroke = this.g.getStroke();
       this.g.setPaint(CONNECTION_COLOR);
       if (connectionType.equals("association")) {
         this.g.setStroke(ASSOCIATION_STROKE);
       } else if (highLighted) {
         this.g.setPaint(HIGHLIGHT_COLOR);
         this.g.setStroke(HIGHLIGHT_FLOW_STROKE);
       }
       for (int i = 1; i < xPoints.length; ++i) {
         Integer sourceX = Integer.valueOf(xPoints[(i - 1)]);
         Integer sourceY = Integer.valueOf(yPoints[(i - 1)]);
         Integer targetX = Integer.valueOf(xPoints[i]);
         Integer targetY = Integer.valueOf(yPoints[i]);
         // e.g.(0,0) --->  (10,20)     (0,20)  (10,20)
         Double line1 = new Double(sourceX.intValue(), sourceY.intValue(), sourceX.intValue(), targetY.intValue());
         Double line2 = new Double(sourceX.intValue(), targetY.intValue(), targetX.intValue(), targetY.intValue());
         //Line2D.Double line = new Line2D.Double(sourceX.intValue(), sourceY.intValue(), targetX.intValue(), targetY.intValue());
         this.g.draw(line1);
         this.g.draw(line2);
       }
       Double line;
       if (isDefault) {
         line = new Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);
         drawDefaultSequenceFlowIndicator(line, scaleFactor);
       }
       if (conditional) {
         line = new Double(xPoints[0], yPoints[0], xPoints[1], yPoints[1]);
         drawConditionalSequenceFlowIndicator(line, scaleFactor);
       }
       if ((associationDirection.equals(AssociationDirection.ONE)) || (associationDirection.equals(AssociationDirection.BOTH))) {
         line = new Double(xPoints[(xPoints.length - 2)], yPoints[(xPoints.length - 2)], xPoints[(xPoints.length - 1)], yPoints[(xPoints.length - 1)]);
         drawArrowHead(line, scaleFactor);
       }
       if (associationDirection.equals(AssociationDirection.BOTH)) {
         line = new Double(xPoints[1], yPoints[1], xPoints[0], yPoints[0]);
         drawArrowHead(line, scaleFactor);
       }
       this.g.setPaint(originalPaint);
       this.g.setStroke(originalStroke);
     }
   @Override
   protected void drawTask(String name, GraphicInfo graphicInfo, boolean thickBorder){
       Paint originalPaint = this.g.getPaint();
       int x = (int)graphicInfo.getX();
       int y = (int)graphicInfo.getY();
       int width = (int)graphicInfo.getWidth();
       int height = (int)graphicInfo.getHeight();
       this.g.setPaint(TASK_BOX_COLOR);
       int arcR = 6;
       if (thickBorder) {
         arcR = 3;
       }
       RoundRectangle2D rect = new RoundRectangle2D.Double(x, y, width, height, 10, 10);
       this.g.fill(rect);
       this.g.setPaint(TASK_BORDER_COLOR);
       if (thickBorder) {
         Stroke originalStroke = this.g.getStroke();
         this.g.setStroke(THICK_TASK_BORDER_STROKE);
         this.g.draw(rect);
         this.g.setStroke(originalStroke);
       } else {
         this.g.draw(rect);
       }
       this.g.setPaint(originalPaint);
       if ((name != null) && (name.length() > 0)) {
         int boxWidth = width - 6;
         int boxHeight = height - 16 - ICON_PADDING - ICON_PADDING - 12 - 2 - 2;
         int boxX = x + width / 2 - (boxWidth / 2);
         int boxY = y + height / 2 - (boxHeight / 2) + ICON_PADDING + ICON_PADDING - 2 - 2;
         drawMultilineCentredText(name, boxX, boxY, boxWidth, boxHeight);
       }
     }
}