package org.jbpm.gd.jpdl.xml; import java.beans.PropertyChangeEvent; import java.util.HashMap; import java.util.Map; import org.jbpm.gd.common.model.SemanticElement; import org.jbpm.gd.common.xml.XmlAdapter; import org.jbpm.gd.jpdl.model.Action; import org.jbpm.gd.jpdl.model.CancelTimer; import org.jbpm.gd.jpdl.model.CreateTimer; import org.jbpm.gd.jpdl.model.Event; import org.jbpm.gd.jpdl.model.MailAction; import org.jbpm.gd.jpdl.model.Script; public class EventDomAdapter extends XmlAdapter { private static HashMap NODE_TYPES = null; private static String[] CHILD_ELEMENTS = { "action-element" }; protected String[] getChildElements() { return CHILD_ELEMENTS; } protected Map getNodeTypes() { if (NODE_TYPES == null) { NODE_TYPES = new HashMap(); NODE_TYPES.put("action", "action-element"); NODE_TYPES.put("script", "action-element"); NODE_TYPES.put("create-timer", "action-element"); NODE_TYPES.put("cancel-timer", "action-element"); NODE_TYPES.put("mail", "action-element"); } return NODE_TYPES; } public void initialize(SemanticElement jpdlElement) { super.initialize(jpdlElement); Event event = (Event)jpdlElement; event.setType(getAttribute("type")); event.addPropertyChangeListener(this); } protected void initialize() { super.initialize(); Event event = (Event)getSemanticElement(); if (event != null) { setAttribute("type", event.getType()); addElements(event.getActionElements()); } } protected void doPropertyChange(PropertyChangeEvent evt) { if ("actionElementAdd".equals(evt.getPropertyName())) { addElement((SemanticElement)evt.getNewValue()); } else if ("actionElementRemove".equals(evt.getPropertyName())) { removeElement((SemanticElement)evt.getOldValue()); } else if ("actionAdd".equals(evt.getPropertyName())) { addElement((SemanticElement)evt.getNewValue()); } else if ("actionRemove".equals(evt.getPropertyName())) { removeElement((SemanticElement)evt.getOldValue()); } else if ("scriptAdd".equals(evt.getPropertyName())) { addElement((SemanticElement)evt.getNewValue()); } else if ("scriptRemove".equals(evt.getPropertyName())) { removeElement((SemanticElement)evt.getOldValue()); } else if ("createTimerAdd".equals(evt.getPropertyName())) { addElement((SemanticElement)evt.getNewValue()); } else if ("createTimerRemove".equals(evt.getPropertyName())) { removeElement((SemanticElement)evt.getOldValue()); } else if ("cancelTimerAdd".equals(evt.getPropertyName())) { addElement((SemanticElement)evt.getNewValue()); } else if ("cancelTimerRemove".equals(evt.getPropertyName())) { removeElement((SemanticElement)evt.getOldValue()); } else if ("mailAdd".equals(evt.getPropertyName())) { addElement((SemanticElement)evt.getNewValue()); } else if ("mailRemove".equals(evt.getPropertyName())) { removeElement((SemanticElement)evt.getOldValue()); } else if ("type".equals(evt.getPropertyName())) { setAttribute("type", (String)evt.getNewValue()); } } protected void doModelUpdate(String name, String newValue) { Event event = (Event)getSemanticElement(); if ("type".equals(name)) { event.setType(newValue); } } protected void doModelAdd(XmlAdapter child) { String type = child.getElementType(); SemanticElement jpdlElement = createSemanticElementFor(child); child.initialize(jpdlElement); Event event = (Event)getSemanticElement(); if ("action".equals(type)) { event.addActionElement((Action)jpdlElement); } else if ("script".equals(type)) { event.addActionElement((Script)jpdlElement); } else if ("create-timer".equals(type)) { event.addActionElement((CreateTimer)jpdlElement); } else if ("cancel-timer".equals(type)) { event.addActionElement((CancelTimer)jpdlElement); } else if ("mail".equals(type)) { event.addActionElement((MailAction)jpdlElement); } } protected void doModelRemove(XmlAdapter child) { String type = child.getElementType(); Event event = (Event)getSemanticElement(); if ("action".equals(type)) { event.removeActionElement((Action)child.getSemanticElement()); } else if ("script".equals(type)) { event.removeActionElement((Script)child.getSemanticElement()); } else if ("create-timer".equals(type)) { event.removeActionElement((CreateTimer)child.getSemanticElement()); } else if ("cancel-timer".equals(type)) { event.removeActionElement((CancelTimer)child.getSemanticElement()); } else if ("mail".equals(type)) { event.removeActionElement((MailAction)child.getSemanticElement()); } } }