Author: bobtarling Date: 2010-11-22 03:44:37-0800 New Revision: 18857 Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/CreateDiagramElementAction.java trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ModePlaceDiagramElement.java trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java
Log: Create the diagram toolbars create buttons from the XML file Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/CreateDiagramElementAction.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/CreateDiagramElementAction.java?view=diff&pathrev=18857&r1=18856&r2=18857 ============================================================================== --- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/CreateDiagramElementAction.java (original) +++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/CreateDiagramElementAction.java 2010-11-22 03:44:37-0800 @@ -16,6 +16,7 @@ import java.awt.event.ActionEvent; import org.argouml.application.helpers.ResourceLoaderWrapper; import org.argouml.ui.UndoableAction; +import org.argouml.uml.diagram.ArgoDiagram; import org.tigris.gef.base.Globals; import org.tigris.gef.base.Mode; @@ -23,10 +24,12 @@ final Object metaType; final String style; + final ArgoDiagram diagram; - CreateDiagramElementAction(Object metaType, String style, String name) { + CreateDiagramElementAction(Object metaType, String style, String name, ArgoDiagram diagram) { super(name, ResourceLoaderWrapper.lookupIconResource( ResourceLoaderWrapper.getImageBinding(name))); + this.diagram = diagram; this.metaType = metaType; this.style = style; } @@ -34,7 +37,7 @@ public void actionPerformed(ActionEvent e) { super.actionPerformed(e); - Mode placeMode = new ModePlaceDiagramElement(metaType, style, "Click to place diagram element"); + Mode placeMode = new ModePlaceDiagramElement(diagram, metaType, style, "Click to place diagram element"); Globals.mode(placeMode, false); } } Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ModePlaceDiagramElement.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ModePlaceDiagramElement.java?view=diff&pathrev=18857&r1=18856&r2=18857 ============================================================================== --- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ModePlaceDiagramElement.java (original) +++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/ModePlaceDiagramElement.java 2010-11-22 03:44:37-0800 @@ -9,7 +9,9 @@ import java.util.Iterator; import java.util.List; +import org.apache.log4j.Logger; import org.argouml.model.Model; +import org.argouml.uml.diagram.ArgoDiagram; import org.argouml.uml.diagram.DiagramSettings; import org.tigris.gef.base.FigModifyingModeImpl; import org.tigris.gef.base.Globals; @@ -25,9 +27,11 @@ public class ModePlaceDiagramElement extends FigModifyingModeImpl { + private static final Logger LOG = Logger.getLogger(ModePlaceDiagramElement.class); private final Object metaType; private final String style; private final String instructions; + private final ArgoDiagram diagram; private Object modelElement; private GraphNode graphNode; @@ -36,9 +40,11 @@ private static final int HEIGHT = 25; public ModePlaceDiagramElement( + ArgoDiagram diagram, Object metaType, String style, String instructions) { + this.diagram = diagram; this.metaType = metaType; this.style = style; if (instructions == null) { @@ -56,20 +62,20 @@ return Cursor.getPredefinedCursor(Cursor.CROSSHAIR_CURSOR); } - // ////////////////////////////////////////////////////////////// - // event handlers - - /** Move the perpective along with the mouse. */ public void mousePressed(MouseEvent me) { if (me.isConsumed()) { return; } UndoManager.getInstance().addMementoLock(this); + // TODO: Something might go wrong during processing. We don't really + // want to create the model element until the user releases the mouse + // in the place expected. modelElement = Model.getUmlFactory().buildNode(metaType); + // start(); editor = Globals.curEditor(); Layer lay = editor.getLayerManager().getActiveLayer(); - graphNode = createDiagramElement(lay, modelElement, null); + graphNode = createDiagramElement(lay, modelElement, diagram.getDiagramSettings()); mouseMoved(me); me.consume(); } @@ -115,15 +121,14 @@ return; } - MutableGraphModel mgm = - (MutableGraphModel) editor.getGraphModel(); - if (mgm.canAddNode(modelElement)) { - UndoManager.getInstance().startChain(); - editor.add((Fig) graphNode); - mgm.addNode(modelElement); + LOG.info("Mouse released"); + MutableGraphModel mgm = (MutableGraphModel) editor.getGraphModel(); + UndoManager.getInstance().startChain(); + editor.add((Fig) graphNode); + mgm.addNode(modelElement); - editor.getSelectionManager().select((Fig) graphNode); - } + editor.getSelectionManager().select((Fig) graphNode); + LOG.info("The diagram element " + graphNode + " was added"); done(); me.consume(); } Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java?view=diff&pathrev=18857&r1=18856&r2=18857 ============================================================================== --- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java (original) +++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java 2010-11-22 03:44:37-0800 @@ -43,11 +43,18 @@ import org.xml.sax.InputSource; import org.xml.sax.SAXException; +/** + * Diagram class for UML2 Activity Diagram + * @author Bob Tarling + */ public class UMLActivityDiagram extends BaseDiagram implements ActivityDiagram { private static final Logger LOG = Logger .getLogger(UMLActivityDiagram.class); + private Map<String, Class<?>> metaTypeByName; + private Map<Class<?>, String> nameByMetaType; + UMLActivityDiagram(Object activity) { super(activity); } @@ -90,36 +97,6 @@ }; } - private Map<String, Class<?>> metaTypeByName; - private Map<Class<?>, String> nameByMetaType; - private List<Object> getCreateDiagramElementActions() { - try { - final Document doc = getDocument(); - final NodeList nl = doc.getDocumentElement().getChildNodes(); - for (int i = 0; i < nl.getLength(); ++i) { - final Node n = nl.item(i); - if (n.getNodeName().equals("classes")) { - final int size = n.getChildNodes().getLength(); - nameByMetaType = new HashMap<Class<?>, String>(size); - metaTypeByName = new HashMap<String, Class<?>>(size); - populateClassMaps((Element) n, nameByMetaType, metaTypeByName); - } else if (n.getNodeName().equals("toolbar")) { - List<Object> actions = getToolbarActions((Element) n); - return actions; - } - } - } catch (DOMException e) { - LOG.error("", e); - } catch (IOException e) { - LOG.error("", e); - } catch (ParserConfigurationException e) { - LOG.error("", e); - } catch (SAXException e) { - LOG.error("", e); - } - return null; - } - private List<Object> getToolbarActions(Element toolbarNode) { List<Object> toolbarActions = new ArrayList<Object>(); final NodeList nl = toolbarNode.getElementsByTagName("*"); @@ -129,13 +106,18 @@ String style = itemNode.getNodeName(); if (style.equals("dropdown")) { o = getToolbarActions(itemNode); + } else if (style.equals("poly-edge")) { + final String type = itemNode.getAttribute("type"); + final Class<?> metaType = metaTypeByName.get(type); + o = getCreateEdgeAction(metaType); } else { - String type = itemNode.getAttribute("type"); - Class<?> metaType = metaTypeByName.get(type); + final String type = itemNode.getAttribute("type"); + final Class<?> metaType = metaTypeByName.get(type); o = new CreateDiagramElementAction( metaType, style, - Model.getMetaTypes().getName(metaType)); + Model.getMetaTypes().getName(metaType), + this); } toolbarActions.add(o); } @@ -164,11 +146,21 @@ } } - - private Document getDocument() throws IOException, DOMException, ParserConfigurationException, SAXException { + /** + * Get the diagram definition XML document + * @return + * @throws IOException + * @throws DOMException + * @throws ParserConfigurationException + * @throws SAXException + */ + private Document getDocument() + throws IOException, DOMException, + ParserConfigurationException, SAXException { final String filename; filename = "org/argouml/activity2/diagram/diagram.xml"; - InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(filename); + InputStream inputStream = + this.getClass().getClassLoader().getResourceAsStream(filename); InputSource inputSource = new InputSource(inputStream); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); @@ -177,9 +169,31 @@ @Override protected Object[] getUmlActions() { - Object[] actions = super.getUmlActions(); - getCreateDiagramElementActions(); - return actions; + try { + final Document doc = getDocument(); + final NodeList nl = doc.getDocumentElement().getChildNodes(); + for (int i = 0; i < nl.getLength(); ++i) { + final Node n = nl.item(i); + if (n.getNodeName().equals("classes")) { + final int size = n.getChildNodes().getLength(); + nameByMetaType = new HashMap<Class<?>, String>(size); + metaTypeByName = new HashMap<String, Class<?>>(size); + populateClassMaps((Element) n, nameByMetaType, metaTypeByName); + } else if (n.getNodeName().equals("toolbar")) { + List<Object> actions = getToolbarActions((Element) n); + return actions.toArray(); + } + } + } catch (DOMException e) { + LOG.error("", e); + } catch (IOException e) { + LOG.error("", e); + } catch (ParserConfigurationException e) { + LOG.error("", e); + } catch (SAXException e) { + LOG.error("", e); + } + return null; } ------------------------------------------------------ http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2684315 To unsubscribe from this discussion, e-mail: [[email protected]].
