/** * @author liuchunxia */ package net.ms.designer.editors.workflow.policies; import net.ms.designer.editors.workflow.commands.BendPointCommand; import net.ms.designer.editors.workflow.commands.CreateBendPointCommand; import net.ms.designer.editors.workflow.commands.DeleteBendPointCommand; import net.ms.designer.editors.workflow.commands.MoveBendPointCommand; import net.ms.designer.editors.workflow.models.Wire; import org.eclipse.draw2d.Connection; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.draw2d.geometry.Point; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.commands.Command; import org.eclipse.gef.editpolicies.BendpointEditPolicy; import org.eclipse.gef.requests.BendpointRequest; public class WireEndpointEditPolicy extends org.eclipse.gef.editpolicies.ConnectionEndpointEditPolicy { protected void addSelectionHandles(){ super.addSelectionHandles(); getConnectionFigure().setLineWidth(2); } protected PolylineConnection getConnectionFigure(){ return (PolylineConnection)((GraphicalEditPart)getHost()).getFigure(); } protected void removeSelectionHandles(){ super.removeSelectionHandles(); getConnectionFigure().setLineWidth(0); } protected Command getCreateBendpointCommand(BendpointRequest request) { // //System.out.println("com.example.policies.ConnectionBendPointEditPolicy.getCreateBendpointCommand(BendpointRequest request)"); CreateBendPointCommand cmd = new CreateBendPointCommand(); Point p = request.getLocation(); Connection conn = getConnection(); conn.translateToRelative(p); Point ref1 = getConnection().getSourceAnchor().getReferencePoint(); Point ref2 = getConnection().getTargetAnchor().getReferencePoint(); conn.translateToRelative(ref1); conn.translateToRelative(ref2); cmd.setRelativeDimensions(p.getDifference(ref1), p.getDifference(ref2)); cmd.setWire((Wire) request.getSource() .getModel()); cmd.setIndex(request.getIndex()); return cmd; } protected Command getDeleteBendpointCommand(BendpointRequest request) { // //System.out.println("com.example.policies.ConnectionBendPointEditPolicy.getDeleteBendpointCommand(BendpointRequest request)"); BendPointCommand cmd = new DeleteBendPointCommand(); Point p = request.getLocation(); cmd.setWire((Wire) request.getSource().getModel()); cmd.setIndex(request.getIndex()); return cmd; } protected Command getMoveBendpointCommand(BendpointRequest request) { // //System.out.println("com.example.policies.ConnectionBendPointEditPolicy.getMoveBendpointCommand(BendpointRequest request)"); MoveBendPointCommand cmd = new MoveBendPointCommand(); Point p = request.getLocation(); Connection conn = getConnection(); conn.translateToRelative(p); Point ref1 = getConnection().getSourceAnchor().getReferencePoint(); Point ref2 = getConnection().getTargetAnchor().getReferencePoint(); conn.translateToRelative(ref1); conn.translateToRelative(ref2); cmd.setRelativeDimensions(p.getDifference(ref1), p.getDifference(ref2)); cmd.setWire((Wire) request.getSource() .getModel()); cmd.setIndex(request.getIndex()); return cmd; } }