
org.yaoqiang.graph.shape.EventShape Maven / Gradle / Ivy
package org.yaoqiang.graph.shape;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;
import java.util.Map;
import org.yaoqiang.bpmn.model.elements.events.EndEvent;
import org.yaoqiang.bpmn.model.elements.events.Event;
import org.yaoqiang.bpmn.model.elements.events.EventDefinitions;
import org.yaoqiang.bpmn.model.elements.events.IntermediateCatchEvent;
import org.yaoqiang.bpmn.model.elements.events.StartEvent;
import org.yaoqiang.bpmn.model.elements.events.ThrowEvent;
import org.yaoqiang.graph.model.GraphModel;
import org.yaoqiang.util.Constants;
import com.mxgraph.canvas.mxGraphics2DCanvas;
import com.mxgraph.model.mxICell;
import com.mxgraph.shape.mxBasicShape;
import com.mxgraph.util.mxConstants;
import com.mxgraph.util.mxUtils;
import com.mxgraph.view.mxCellState;
/**
* EventShape
*
* @author Shi Yaoqiang([email protected])
*/
public class EventShape extends mxBasicShape {
public void paintShape(mxGraphics2DCanvas canvas, mxCellState state) {
Map style = state.getStyle();
String styleName = ((mxICell) state.getCell()).getStyle();
GraphModel model = (GraphModel) state.getView().getGraph().getModel();
Event event = null;
Object value = ((mxICell)state.getCell()).getValue();
if (value instanceof String) {
if (styleName.startsWith("start")) {
event = new StartEvent((String) value);
} else if (styleName.startsWith("end")) {
event = new EndEvent((String) value);
} else if (styleName.startsWith("intermediate")) {
event = new IntermediateCatchEvent((String) value);
}
} else if (value instanceof Event) {
event = (Event) value;
}
EventDefinitions eventDefinitions = event.getEventDefinitions();
if (model.isNonInterruptingEvent(event)) {
style.put(mxConstants.STYLE_DASHED, "1");
canvas.getGraphics().setStroke(canvas.createStroke(style));
}
super.paintShape(canvas, state);
double scale = canvas.getScale();
int imgWidth = (int) (mxUtils.getInt(style, mxConstants.STYLE_IMAGE_WIDTH, mxConstants.DEFAULT_IMAGESIZE) * scale);
int imgHeight = (int) (mxUtils.getInt(style, mxConstants.STYLE_IMAGE_HEIGHT, mxConstants.DEFAULT_IMAGESIZE) * scale);
Rectangle imageBounds = state.getRectangle();
imageBounds.setRect(imageBounds.getX() + (imageBounds.getWidth() - imgWidth) / 2, imageBounds.getY() + (imageBounds.getHeight() - imgHeight) / 2,
imgWidth, imgHeight);
String image = null;
if (styleName.equals("startMultipleEvent") || styleName.equals("intermediateMultipleEvent")) {
image = Constants.SHAPE_MARKER + "event_multiple.png";
} else if (styleName.equals("intermediateMultipleThrowEvent") || styleName.equals("endMultipleEvent")) {
image = Constants.SHAPE_MARKER + "event_multiple_throwing.png";
} else if (styleName.equals("startParallelMultipleEvent") || styleName.equals("intermediateParallelMultipleEvent")) {
image = Constants.SHAPE_MARKER + "event_parallel_multiple.png";
} else {
if (eventDefinitions.size() == 1) {
String suffix = "";
if (event instanceof ThrowEvent) {
suffix = "_throwing";
}
String eventDef = event.getEventDefinition().toName();
image = Constants.SHAPE_MARKER + "event_" + eventDef.substring(0, eventDef.indexOf("EventDefinition")) + suffix + ".png";
}
}
canvas.drawImage(imageBounds, image);
if (styleName.startsWith("intermediate")) {
int inset = (int) Math.round((mxUtils.getFloat(style, mxConstants.STYLE_STROKEWIDTH, 1) + 3) * canvas.getScale());
Rectangle rect = state.getRectangle();
int x = rect.x + inset;
int y = rect.y + inset;
int w = rect.width - 2 * inset;
int h = rect.height - 2 * inset;
canvas.getGraphics().drawOval(x, y, w, h);
}
}
public Shape createShape(mxGraphics2DCanvas canvas, mxCellState state) {
Rectangle rect = state.getRectangle();
return new Ellipse2D.Float(rect.x, rect.y, rect.width, rect.height);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy