package org.jbpm.gd.jpdl.notation;
import java.beans.PropertyChangeEvent;
import org.jbpm.gd.common.notation.Edge;
import org.jbpm.gd.common.notation.Node;
import org.jbpm.gd.common.notation.NodeContainer;
import org.jbpm.gd.common.notation.RootContainer;
import org.jbpm.gd.jpdl.model.NodeElement;
import org.jbpm.gd.jpdl.model.ProcessDefinition;
public class JpdlEdge extends Edge {
// public Label getLabel() {
// Label result = super.getLabel();
// if (result == null) {
// result = (Label)getFactory().create("org.jbpm.gd.jpdl.label");
// addPropertyChangeListener(result);
// setLabel(result);
// }
// return result;
// }
// public void setSemanticElement(SemanticElement semanticElement) {
// super.setSemanticElement(semanticElement);
// getLabel().setSemanticElement(semanticElement);
// }
//
private RootContainer getRootContainer() {
Node source = getSource();
if (source == null) return null;
NodeContainer container = source.getContainer();
while (container != null && container instanceof Node) {
container = ((Node)container).getContainer();
}
return (RootContainer)container;
}
public void propertyChange(PropertyChangeEvent evt) {
String eventName = evt.getPropertyName();
if (eventName.equals("to")) {
if (getSource() == null)
return;
RootContainer rootContainer = getRootContainer();
if (rootContainer == null) return;
ProcessDefinition processDefinition = (ProcessDefinition)rootContainer.getSemanticElement();
if (processDefinition == null) return;
NodeElement newTarget = processDefinition
.getNodeElementByName((String) evt.getNewValue());
NodeElement oldTarget = processDefinition
.getNodeElementByName((String) evt.getOldValue());
if (oldTarget != null) {
Node oldTargetNode = (Node) getRegisteredNotationElementFor(oldTarget);
if (oldTargetNode != null) {
oldTargetNode.removeArrivingEdge(this);
}
}
if (newTarget != null) {
Node targetNode = (Node) getRegisteredNotationElementFor(newTarget);
if (targetNode != null) {
targetNode.addArrivingEdge(this);
}
}
getSource().propertyChange(
new PropertyChangeEvent(this, "leavingEdgeRefresh", null,
null));
} else {
super.propertyChange(evt);
}
}
}