All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.yaoqiang.graph.shape.EventShape Maven / Gradle / Ivy

There is a newer version: 2.2.18
Show newest version
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