svn commit: r18862 - trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2010-12-01 14:32:43-0800
New Revision: 18862

Modified:
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDiagram.java
   trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/UMLActivityDiagram.java

Log:
Move common functionality from UMLActivityDiagram up to BaseDiagram

Modified: trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDiagram.java?view=diff&pathrev=18862&r1=18861&r2=18862
==============================================================================
--- trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDiagram.java	(original)
+++ trunk/src/argouml-core-diagrams-activity2/src/org/argouml/activity2/diagram/BaseDiagram.java	2010-12-01 14:32:43-0800
@@ -14,14 +14,22 @@
 package org.argouml.activity2.diagram;
 
 import java.beans.PropertyVetoException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import javax.swing.Action;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Model;
-import org.argouml.ui.CmdCreateNode;
 import org.argouml.uml.diagram.UMLMutableGraphSupport;
 import org.argouml.uml.diagram.UmlDiagramRenderer;
 import org.argouml.uml.diagram.ui.ActionSetMode;
@@ -32,6 +40,13 @@
 import org.tigris.gef.base.ModeCreatePolyEdge;
 import org.tigris.gef.graph.MutableGraphModel;
 import org.tigris.gef.presentation.FigNode;
+import org.w3c.dom.DOMException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
 
 abstract class BaseDiagram extends UMLDiagram {
     
@@ -65,57 +80,132 @@
     abstract UmlDiagramRenderer createDiagramRenderer();
     abstract UMLMutableGraphSupport createGraphModel();
     
+    private Map<String, Class<?>> metaTypeByName;
+    private Map<Class<?>, String> nameByMetaType;
+    
     @Override
     protected Object[] getUmlActions() {
+        try {
+            final Document doc = getDocument();
+            final Element element =
+                getElement(doc.getDocumentElement(), "classes");
+            final int size = element.getChildNodes().getLength();
+            nameByMetaType = new HashMap<Class<?>, String>(size);
+            metaTypeByName = new HashMap<String, Class<?>>(size);
+            populateClassMaps(element, nameByMetaType, metaTypeByName);
+            
+            final Element toolbarElement =
+                getElement(doc.getDocumentElement(), "toolbar");
+            return getToolbarActions(toolbarElement);
+        } 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;
+    }
+    
+    /**
+     * Get the single (or first) child Element of the given element
+     * that has the given tag name.
+     * @param element
+     * @param tagName
+     * @return the child element
+     */
+    private Element getElement(Element element, String tagName) {
+        final NodeList nl = element.getElementsByTagName(tagName);
+        if (nl.getLength() == 0) {
+            return null;
+        }
+        return (Element) nl.item(0);
+    }
+    
+    private Object[] getToolbarActions(Element toolbarNode) {
         
-        final Object[] edgeTools = getNewEdgeTypes();
-        final Object[] nodeTools = getNewNodeTypes();
-        final Object[] actions =
-            new Object[edgeTools.length + nodeTools.length];
-        int i = 0;
-        for (Object meta : edgeTools) {
-            if (meta instanceof Object[]) {
-                Object[] childEdgeTools = (Object[]) meta;
-                final Object[] childActions =
-                    new Object[childEdgeTools.length];
-                int j = 0;
-                for (Object childMeta : childEdgeTools) {
-                    childActions[j++] = getCreateEdgeAction(childMeta);
-                }
-                actions[i++] = childActions;
-            } else {
-                actions[i++] = getCreateEdgeAction(meta);
+        final NodeList nl = toolbarNode.getChildNodes();
+
+        List<Element> elements = new ArrayList<Element>();
+        for (int i = 0; i < nl.getLength(); ++i) {
+            final Node n = nl.item(i);
+            if (n instanceof Element) {
+                elements.add((Element) n);
             }
         }
-        for (Object meta : nodeTools) {
-            if (meta instanceof Object[]) {
-                Object[] childNodeTools = (Object[]) meta;
-                final Object[] childActions =
-                    new Object[childNodeTools.length];
-                int j = 0;
-                for (Object childMeta : childNodeTools) {
-                    childActions[j++] = getCreateNodeAction(childMeta);
-                }
-                actions[i++] = childActions;
+
+        final Object[] toolbarActions = new Object[elements.size()];
+        
+        for (int i = 0; i < elements.size(); ++i) {
+            final Element itemNode = elements.get(i);
+            Object o;
+            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 {
-                actions[i++] = getCreateNodeAction(meta);
+                final String type = itemNode.getAttribute("type");
+                final Class<?> metaType = metaTypeByName.get(type);
+                o = new CreateDiagramElementAction(
+                        metaType, 
+                        style, 
+                        Model.getMetaTypes().getName(metaType),
+                        this);
+            }
+            toolbarActions[i] = o;
+        }
+        return toolbarActions;
+    }
+    
+    // TODO: This is currently duplicated from MetaDataCache - must find a
+    // common place in model facade
+    private void populateClassMaps(
+            final Element classesNode,
+            final Map<Class<?>, String> nameByMetaType,
+            final Map<String, Class<?>> metaTypeByName) {
+        final NodeList nl = classesNode.getElementsByTagName("class");
+        for (int i = 0; i < nl.getLength(); ++i) {
+            Element classNode = (Element) nl.item(i);
+            String className = classNode.getTextContent();
+            try {
+                final String name = 
+                    classNode.getAttribute("name");
+                Class<?> clazz = Class.forName(className);
+                metaTypeByName.put(name, clazz);
+                nameByMetaType.put(clazz, name);
+            } catch (ClassNotFoundException e) {
+                    LOG.error("Class not found " + className, e);
             }
         }
-        return actions;
     }
     
-    abstract Object[] getNewNodeTypes();
-    abstract Object[] getNewEdgeTypes();
-
     /**
-     * @return Returns a diagram tool creation action.
+     * Get the diagram definition XML document
+     * @return
+     * @throws IOException
+     * @throws DOMException
+     * @throws ParserConfigurationException
+     * @throws SAXException
      */
-    private Action getCreateNodeAction(Object metaType) {
-        String label = Model.getMetaTypes().getName(metaType);
-        return new RadioAction(
-                new CmdCreateNode(metaType, label));
+    private Document getDocument()
+        throws IOException, DOMException,
+            ParserConfigurationException, SAXException {
+        final String filename = getDiagramXmlFile();
+        InputStream inputStream = 
+            this.getClass().getClassLoader().getResourceAsStream(filename);
+        InputSource inputSource = new InputSource(inputStream);
+        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+        DocumentBuilder db = dbf.newDocumentBuilder();
+        return db.parse(inputSource);
     }
     
+    protected abstract String getDiagramXmlFile();
+    
     protected Action getCreateEdgeAction(Object metaType) {
         String label = Model.getMetaTypes().getName(metaType);
         return new RadioAction(

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=18862&r1=18861&r2=18862
==============================================================================
--- 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-12-01 14:32:43-0800
@@ -14,18 +14,7 @@
 package org.argouml.activity2.diagram;
 
 import java.awt.Rectangle;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
 
-import org.apache.log4j.Logger;
 import org.argouml.i18n.Translator;
 import org.argouml.model.ActivityDiagram;
 import org.argouml.model.Model;
@@ -35,13 +24,6 @@
 import org.argouml.uml.diagram.UmlDiagramRenderer;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
 import org.argouml.uml.diagram.ui.FigNodeModelElement;
-import org.w3c.dom.DOMException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
 
 /**
  * Diagram class for UML2 Activity Diagram
@@ -49,12 +31,6 @@
  */
 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);
     }
@@ -70,136 +46,6 @@
     }
 
     @Override
-    Object[] getNewEdgeTypes() {
-        return new Object[] {
-            Model.getMetaTypes().getControlFlow(),
-            Model.getMetaTypes().getObjectFlow()
-        };
-    }
-
-    @Override
-    Object[] getNewNodeTypes() {
-        return new Object[] {
-            new Object[] {
-                Model.getMetaTypes().getCallBehaviorAction(),
-                Model.getMetaTypes().getCreateObjectAction(),
-                Model.getMetaTypes().getDestroyObjectAction(),
-            },
-            Model.getMetaTypes().getAcceptEventAction(),
-            Model.getMetaTypes().getSendSignalAction(),
-            new Object[] {
-                Model.getMetaTypes().getActivityParameterNode(),
-                Model.getMetaTypes().getCentralBufferNode(),
-                Model.getMetaTypes().getDataStoreNode(),
-            },
-            Model.getMetaTypes().getInputPin(),
-            Model.getMetaTypes().getOutputPin(),
-        };
-    }
-    
-    private List<Object> getToolbarActions(Element toolbarNode) {
-        List<Object> toolbarActions = new ArrayList<Object>();
-        final NodeList nl = toolbarNode.getElementsByTagName("*");
-        for (int i = 0; i < nl.getLength(); ++i) {
-            final Element itemNode = (Element) nl.item(i);
-            Object o;
-            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 {
-                final String type = itemNode.getAttribute("type");
-                final Class<?> metaType = metaTypeByName.get(type);
-                o = new CreateDiagramElementAction(
-                        metaType, 
-                        style, 
-                        Model.getMetaTypes().getName(metaType),
-                        this);
-            }
-            toolbarActions.add(o);
-        }
-        return toolbarActions;
-    }
-    
-    // TODO: This is currently duplicated from MetaDataCache - must find a
-    // common place in model facade
-    private void populateClassMaps(
-            final Element classesNode,
-            final Map<Class<?>, String> nameByMetaType,
-            final Map<String, Class<?>> metaTypeByName) {
-        final NodeList nl = classesNode.getElementsByTagName("class");
-        for (int i = 0; i < nl.getLength(); ++i) {
-            Node classNode = nl.item(i);
-            String className = classNode.getTextContent();
-            try {
-                final String name = 
-                    classNode.getAttributes().getNamedItem("name").getNodeValue();
-                Class<?> clazz = Class.forName(className);
-                metaTypeByName.put(name, clazz);
-                nameByMetaType.put(clazz, name);
-            } catch (ClassNotFoundException e) {
-                    LOG.error("Class not found " + className, e);
-            }
-        }
-    }
-    
-    /**
-     * 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);
-        InputSource inputSource = new InputSource(inputStream);
-        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-        DocumentBuilder db = dbf.newDocumentBuilder();
-        return db.parse(inputSource);
-    }
-    
-    @Override
-    protected Object[] getUmlActions() {
-        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;
-    }
-    
-    
-
-
-    @Override
     public void initialize(Object owner) {
         super.initialize(owner);
         ActivityDiagramGraphModel gm =
@@ -221,6 +67,10 @@
         return false;
     }
     
+    protected String getDiagramXmlFile() {
+        return "org/argouml/activity2/diagram/diagram.xml";
+    }
+    
     public DiagramElement createDiagramElement(
             final Object modelElement,
             final Rectangle bounds) {

------------------------------------------------------
http://argouml.tigris.org/ds/viewMessage.do?dsForumId=5905&dsMessageId=2687125

To unsubscribe from this discussion, e-mail: [[email protected]].
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.