package net.ms.designer.editors.workflow.editparts; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Iterator; import java.util.List; import net.ms.designer.editors.workflow.figures.NodeFigure; import net.ms.designer.editors.workflow.models.Wire; import net.ms.designer.editors.workflow.models.WorkflowDiagram; import net.ms.designer.editors.workflow.models.WorkflowSubPart; import net.ms.designer.editors.workflow.policies.NodeGraphicalNodeEditPolicy; import net.ms.designer.editors.workflow.policies.WorkflowElementEditPolicy; import net.ms.designer.editors.workflow.policies.WorkflowPropertyEditPolicy; import org.eclipse.draw2d.ChopboxAnchor; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.AccessibleEditPart; import org.eclipse.gef.ConnectionEditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalEditPart; import org.eclipse.gef.NodeEditPart; import org.eclipse.gef.Request; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; abstract public class WorkflowEditPart extends AbstractGraphicalEditPart implements NodeEditPart, PropertyChangeListener { private AccessibleEditPart acc; public void activate(){ if (isActive()) return; super.activate(); getWorkflowSubpart().addPropertyChangeListener(this); } public void createEditPolicies(){ installEditPolicy(EditPolicy.LAYOUT_ROLE,new WorkflowPropertyEditPolicy()); refreshStatus(); } abstract protected AccessibleEditPart createAccessible(); public void deactivate(){ if (!isActive()) return; super.deactivate(); getWorkflowSubpart().removePropertyChangeListener(this); } protected AccessibleEditPart getAccessibleEditPart() { if (acc == null) acc = createAccessible(); return acc; } protected WorkflowSubPart getWorkflowSubpart(){ return (WorkflowSubPart)getModel(); } protected List getModelInputs(){ return getWorkflowSubpart().getInputs(); } protected List getModelOutputs(){ return getWorkflowSubpart().getOutputs(); } protected NodeFigure getNodeFigure(){ return (NodeFigure) getFigure(); } public ConnectionAnchor getSourceConnectionAnchor(ConnectionEditPart connEditPart) { return new ChopboxAnchor(getFigure()); } public ConnectionAnchor getSourceConnectionAnchor(Request request) { return new ChopboxAnchor(getFigure()); } public ConnectionAnchor getTargetConnectionAnchor(ConnectionEditPart connEditPart) { return new ChopboxAnchor(getFigure()); } public ConnectionAnchor getTargetConnectionAnchor(Request request) { return new ChopboxAnchor(getFigure()); } public void propertyChange(PropertyChangeEvent evt){ String prop = evt.getPropertyName(); if (WorkflowDiagram.PROP_CHILDREN.equals(prop)) refreshChildren(); else if (WorkflowSubPart.INPUTS.equals(prop)) refreshTargetConnections(); else if (WorkflowSubPart.OUTPUTS.equals(prop)) refreshSourceConnections(); else if(WorkflowDiagram.STATUS.equals(prop)) this.refreshStatus(); else if (prop.equals(WorkflowSubPart.ID_SIZE) || prop.equals(WorkflowSubPart.ID_LOCATION) ||prop.equals(WorkflowSubPart.PRO_NAME) ) refreshVisuals(); } /** * Updates the visual aspect of this. */ protected void refreshVisuals() { // //System.out.println("base"); // //System.out.println("Model,109"); Point loc = getWorkflowSubpart().getLocation(); // //System.out.println("loc:"+loc); // //System.out.println("Model,111"); Dimension size= getWorkflowSubpart().getSize(); // //System.out.println("Model,113"); Rectangle r = new Rectangle(loc ,size); // //System.out.println("Model,115"); ((NodeFigure) this.getFigure()).setText(((WorkflowSubPart) this.getModel()).getName()); // //System.out.println("Model,117"); ((GraphicalEditPart) getParent()).setLayoutConstraint( this, getFigure(), r); // //System.out.println("Model,122"); // //System.out.println("Model,123"); // //System.out.println("Model,124"+getModel()); } private void refreshStatus(){ String i = ((WorkflowSubPart)getModel()).getNodeStatus(); if(((WorkflowSubPart)getModel()).ifEditAble()) { installEditPolicy(EditPolicy.COMPONENT_ROLE, new WorkflowElementEditPolicy()); installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new WorkflowElementEditPolicy()); installEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE, new NodeGraphicalNodeEditPolicy()); } else { removeEditPolicy(EditPolicy.COMPONENT_ROLE); removeEditPolicy(EditPolicy.GRAPHICAL_NODE_ROLE); } IRefreshStatus(); refreshWireSource(new Long(i)); } abstract protected void IRefreshStatus(); public void refreshWireSource(Long i1){ List l = getWorkflowSubpart().getInputs(); for(Iterator i = l.iterator();i.hasNext();){ Wire temp = (Wire)i.next(); temp.setNodeStatus(i1.toString()); } } public List getMoreChildren() { return ((WorkflowDiagram)this.getModel()).getChildren(); } }