package org.jbpm.gd.pf.part; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartFactory; import org.jbpm.gd.common.command.AbstractEdgeDeleteCommand; import org.jbpm.gd.common.command.AbstractNodeCreateCommand; import org.jbpm.gd.common.command.AbstractNodeDeleteCommand; import org.jbpm.gd.common.notation.Edge; import org.jbpm.gd.common.notation.Label; import org.jbpm.gd.common.notation.Node; import org.jbpm.gd.common.notation.RootContainer; import org.jbpm.gd.common.part.EdgeGraphicalEditPart; import org.jbpm.gd.common.part.NodeGraphicalEditPart; import org.jbpm.gd.common.part.RootContainerGraphicalEditPart; import org.jbpm.gd.common.part.LabelGraphicalEditPart; import org.jbpm.gd.common.policy.ComponentEditPolicy; import org.jbpm.gd.common.policy.ConnectionEditPolicy; import org.jbpm.gd.common.policy.GraphicalNodeEditPolicy; import org.jbpm.gd.common.policy.XYLayoutEditPolicy; import org.jbpm.gd.pf.command.EdgeDeleteCommand; import org.jbpm.gd.pf.command.NodeCreateCommand; import org.jbpm.gd.pf.command.NodeDeleteCommand; import org.jbpm.gd.pf.policy.NodeGraphicalNodeEditPolicy; public class PageFlowGraphicalEditPartFactory implements EditPartFactory { public EditPart createEditPart(EditPart context, Object model) { if (model == null) return null; if (model instanceof RootContainer) { return createRootContainerGraphicalEditPart(model); } else if (model instanceof Node){ return createNodeGraphicalEditPart(model); } else if (model instanceof Edge) { return createEdgeGraphicalEditPart(model); } else if (model instanceof Label) { return createLabelGraphicalEditPart(model); } return null; } private EditPart createNodeGraphicalEditPart(Object model) { return new NodeGraphicalEditPart((Node)model) { protected ComponentEditPolicy createComponentEditPolicy() { return new ComponentEditPolicy() { protected AbstractNodeDeleteCommand createDeleteCommand() { return new NodeDeleteCommand(); } }; } protected GraphicalNodeEditPolicy createGraphicalNodeEditPolicy() { return new NodeGraphicalNodeEditPolicy(); } }; } private EditPart createLabelGraphicalEditPart(Object model) { return new LabelGraphicalEditPart((Label)model); } private EditPart createRootContainerGraphicalEditPart(Object model) { return new RootContainerGraphicalEditPart((RootContainer)model) { protected XYLayoutEditPolicy createLayoutEditPolicy() { return new XYLayoutEditPolicy() { protected AbstractNodeCreateCommand createNodeCreateCommand() { return new NodeCreateCommand(); } }; } }; } private EditPart createEdgeGraphicalEditPart(Object model) { return new EdgeGraphicalEditPart((Edge)model) { protected ConnectionEditPolicy getConnectionEditPolicy() { return new ConnectionEditPolicy() { protected AbstractEdgeDeleteCommand createDeleteCommand() { return new EdgeDeleteCommand(); } }; } }; } }