package net.ms.designer.editors.componentdetail.editparts; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; import net.ms.designer.editors.componentdetail.figures.FigureFactory; import net.ms.designer.editors.componentdetail.models.Messages; import net.ms.designer.editors.componentdetail.models.Wire; import net.ms.designer.editors.componentdetail.models.WireBendPoint; import net.ms.designer.editors.componentdetail.policies.WireEditPolicy; import net.ms.designer.editors.workflow.policies.WireEndpointEditPolicy; import org.eclipse.draw2d.ChopboxAnchor; import org.eclipse.draw2d.Connection; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.ManhattanConnectionRouter; import org.eclipse.draw2d.PolygonDecoration; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.draw2d.RelativeBendpoint; import org.eclipse.gef.AccessibleEditPart; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.NodeEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.editparts.AbstractConnectionEditPart; import org.eclipse.swt.accessibility.AccessibleEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; /** * @author lili * @version 1.1.0 *defind the WireEditPart,it can deal with the wire connection */ public class WireEditPart extends AbstractConnectionEditPart implements PropertyChangeListener,NodeEditPart { AccessibleEditPart acc; public static final Color alive = new Color(Display.getDefault(), 0, 74, 168), dead = new Color(Display.getDefault(), 0, 0, 0); //defind the color /* * ���� Javadoc�� * @see org.eclipse.gef.EditPart#activate() */ public void activate() { super.activate(); getWire().addPropertyChangeListener(this); } /* * ���� Javadoc�� * @see org.eclipse.gef.editparts.AbstractConnectionEditPart#activateFigure() */ public void activateFigure() { super.activateFigure(); getFigure().addPropertyChangeListener( Connection.PROPERTY_CONNECTION_ROUTER, this); } /** * Adds extra EditPolicies as required. */ protected void createEditPolicies() { installEditPolicy(EditPolicy.CONNECTION_ENDPOINTS_ROLE, new WireEndpointEditPolicy()); // installEditPolicy(EditPolicy.COMPONENT_ROLE, new ConnectionEditPolicy()); refreshBendpointEditPolicy(); installEditPolicy(EditPolicy.CONNECTION_ROLE, new WireEditPolicy()); } private void refreshBendpointEditPolicy() { if (getConnectionFigure().getConnectionRouter() instanceof ManhattanConnectionRouter) installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, null); else installEditPolicy(EditPolicy.CONNECTION_BENDPOINTS_ROLE, new WireBendpointEditPolicy()); } /* * ���� Javadoc�� * @see org.eclipse.gef.editparts.AbstractGraphicalEditPart#createFigure() */ protected IFigure createFigure() { if (getWire() == null) return null; PolylineConnection connx = FigureFactory .createNewBendableWire(getWire()); connx.setTargetDecoration(new PolygonDecoration()); return connx; } /* * ���� Javadoc�� * @see org.eclipse.gef.EditPart#deactivate() */ public void deactivate() { getWire().removePropertyChangeListener(this); super.deactivate(); } /* * ���� Javadoc�� * @see org.eclipse.gef.editparts.AbstractConnectionEditPart#deactivateFigure() */ public void deactivateFigure() { getFigure().removePropertyChangeListener( Connection.PROPERTY_CONNECTION_ROUTER, this); super.deactivateFigure(); } public AccessibleEditPart getAccessibleEditPart() { if (acc == null) acc = new AccessibleGraphicalEditPart() { public void getName(AccessibleEvent e) { e.result = null; } }; return acc; } /** * @return return the model of wire */ protected Wire getWire() { return (Wire) getModel(); } /** * @return return the figure of wire */ protected IFigure getWireFigure() { return (PolylineConnection) getFigure(); } /* * ���� Javadoc�� * @see java.beans.PropertyChangeListener#propertyChange(java.beans.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { String property = event.getPropertyName(); if (Connection.PROPERTY_CONNECTION_ROUTER.equals(property)) // refreshBendpoints(); // refreshBendpointEditPolicy(); // } // if ("value".equals(property)) //$NON-NLS-1$ refreshVisuals(); } /* * ���� Javadoc�� * @see org.eclipse.gef.editparts.AbstractEditPart#refreshVisuals() */ protected void refreshVisuals() { refreshBendpoints(); if (getWire().getValue()) getWireFigure().setForegroundColor(alive); else getWireFigure().setForegroundColor(dead); } protected void refreshBendpoints() { if (getConnectionFigure().getConnectionRouter() instanceof ManhattanConnectionRouter) return; List modelConstraint = getWire().getBendpoints(); List figureConstraint = new ArrayList(); for (int i = 0; i < modelConstraint.size(); i++) { WireBendPoint wbp = (WireBendPoint) modelConstraint.get(i); RelativeBendpoint rbp = new RelativeBendpoint(getConnectionFigure()); rbp.setRelativeDimensions(wbp.getFirstRelativeDimension(), wbp .getSecondRelativeDimension()); rbp.setWeight((i + 1) / ((float) modelConstraint.size() + 1)); figureConstraint.add(rbp); } getConnectionFigure().setRoutingConstraint(figureConstraint); } public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connection) { // //System.out.println("com.example.parts.NodePart.getSourceConnectionAnchor(ConnectionEditPart connection)"); return new ChopboxAnchor(getFigure()); } public ConnectionAnchor getSourceConnectionAnchor(Request request) { // //System.out.println("com.example.parts.NodePart.getSourceConnectionAnchor(Request request)"); return new ChopboxAnchor(getFigure()); } public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connection) { // //System.out.println("com.example.parts.NodePart.getTargetConnectionAnchor(ConnectionEditPart connection)"); return new ChopboxAnchor(getFigure()); } public ConnectionAnchor getTargetConnectionAnchor(Request request) { // //System.out.println("com.example.parts.NodePart.getTargetConnectionAnchor(Request request)"); return new ChopboxAnchor(getFigure()); } public void setSelected(int value) { super.setSelected(value); if (value != EditPart.SELECTED_NONE) ((PolylineConnection) getFigure()).setLineWidth(2); else ((PolylineConnection) getFigure()).setLineWidth(1); } }