package org.jbpm.gd.pf.notation; import java.beans.PropertyChangeEvent; import java.util.List; import org.jbpm.gd.common.editor.CreationFactory; import org.jbpm.gd.common.model.SemanticElement; import org.jbpm.gd.common.notation.Edge; import org.jbpm.gd.common.notation.Node; import org.jbpm.gd.pf.model.NodeElement; import org.jbpm.gd.pf.model.PageFlowDefinition; import org.jbpm.gd.pf.model.Transition; public class PageFlowNode extends Node { public void propertyChange(PropertyChangeEvent evt) { String eventName = evt.getPropertyName(); if (eventName.equals("name")) { firePropertyChange(evt.getPropertyName(), evt.getOldValue(), evt.getNewValue()); List edges = getArrivingEdges(); for (int i = 0; i < edges.size(); i++) { Edge edge = (Edge)edges.get(i); ((SemanticElement)edge.getSemanticElement()).removePropertyChangeListener(edge); ((Transition)edge.getSemanticElement()).setTo((String)evt.getNewValue()); ((SemanticElement)edge.getSemanticElement()).addPropertyChangeListener(edge); } } else if (eventName.equals("transitionAdd")) { Transition transition = (Transition)evt.getNewValue(); Edge edge = (Edge)getRegisteredNotationElementFor(transition); if (edge == null) { CreationFactory factory = new CreationFactory(transition, getFactory()); edge = (Edge)factory.getNewObject(); } addLeavingEdge(edge); transition.addPropertyChangeListener(edge); Node targetNode = getDestinationNode(transition.getTo()); if (targetNode != null) { targetNode.addArrivingEdge(edge); } } else if (eventName.equals("transitionRemove")) { Transition transition = (Transition)evt.getOldValue(); Edge edge = (Edge)getRegisteredNotationElementFor(transition); if (edge != null) { Node targetNode = edge.getTarget(); if (targetNode != null) { transition.removePropertyChangeListener(edge); targetNode.removeArrivingEdge(edge); } removeLeavingEdge(edge); } } else { super.propertyChange(evt); } } private Node getDestinationNode(String to) { NodeElement nodeElement = ((PageFlowDefinition)getContainer().getSemanticElement()).getNodeElementByName(to); return (Node)getRegisteredNotationElementFor(nodeElement); } }