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);
|
}
|
}
|
}
|