svn commit: r17255 - trunk/src/argouml-app: src/org/argouml/uml/diagram src/org/argouml/uml/diagram/activity/ui src/org/argouml/uml/diagram/collaboration/ui src/org/argouml/uml/diagram/deployment/ui src/org/argouml/uml/diagram/state/ui src/org/argouml/uml/diagram/static_structure/ui src/org/argouml/uml/diagram/ui src/org/argouml/uml/diagram/use_case/ui src/org/argouml/uml/reveng tests/org/argouml/ui/targetmanager

Bob Tarling <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: bobtarling
Date: 2009-08-10 14:33:00-0700
New Revision: 17255

Added:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElement.java
Modified:
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ArgoDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java
   trunk/src/argouml-app/src/org/argouml/uml/reveng/DiagramInterface.java
   trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportCommon.java
   trunk/src/argouml-app/tests/org/argouml/ui/targetmanager/TestTargetManager.java

Log:
Give diagrams the responsibility of creating DiagramElements (Figs) so that reverse engineering does not need to know of FigClass FigInterface or any other concrete Figs

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ArgoDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ArgoDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ArgoDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ArgoDiagram.java	2009-08-10 14:33:00-0700
@@ -24,6 +24,7 @@
 
 package org.argouml.uml.diagram;
 
+import java.awt.Rectangle;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.PropertyVetoException;
@@ -269,6 +270,17 @@
      */
     public Iterator<Fig> getFigIterator();
     
+    /**
+     * Create a diagram element suitable for the base diagram type
+     * @param modelElement the model element the diagram element
+     * will represent
+     * @param bounds the bounds of the newly created diagram element
+     * @return the newly created diagram element.
+     */
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds);
+    
     ///////////////// GEF Methods ////////////////////////////
     // TODO: These should really be picked up automatically from
     // some GEF interface that we extend, but there is no such

Added: trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElement.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElement.java?view=markup&pathrev=17255
==============================================================================
--- (empty file)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/DiagramElement.java	2009-08-10 14:33:00-0700
@@ -0,0 +1,36 @@
+// $Id: eclipse-argo-codetemplates.xml 11347 2006-10-26 22:37:44Z linus $
+// Copyright (c) 2009 The Regents of the University of California. All
+// Rights Reserved. Permission to use, copy, modify, and distribute this
+// software and its documentation without fee, and without a written
+// agreement is hereby granted, provided that the above copyright notice
+// and this paragraph appear in all copies. This software program and
+// documentation are copyrighted by The Regents of the University of
+// California. The software program and documentation are supplied "AS
+// IS", without any accompanying services from The Regents. The Regents
+// does not warrant that the operation of the program will be
+// uninterrupted or error-free. The end-user understands that the program
+// was developed for research purposes and is advised not to rely
+// exclusively on the program for any reason. IN NO EVENT SHALL THE
+// UNIVERSITY OF CALIFORNIA BE LIABLE TO ANY PARTY FOR DIRECT, INDIRECT,
+// SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, INCLUDING LOST PROFITS,
+// ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF
+// THE UNIVERSITY OF CALIFORNIA HAS BEEN ADVISED OF THE POSSIBILITY OF
+// SUCH DAMAGE. THE UNIVERSITY OF CALIFORNIA SPECIFICALLY DISCLAIMS ANY
+// WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE
+// PROVIDED HEREUNDER IS ON AN "AS IS" BASIS, AND THE UNIVERSITY OF
+// CALIFORNIA HAS NO OBLIGATIONS TO PROVIDE MAINTENANCE, SUPPORT,
+// UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+
+package org.argouml.uml.diagram;
+
+/**
+ * The base class interface for all diagram elements. This interface is used
+ * to abstract away the knowledge of what actual implementation is used
+ * to store diagram elements. These are currently Figs from the GEF library.
+ *
+ * @author Bob Tarling
+ */
+public interface DiagramElement {
+
+}

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/UMLActivityDiagram.java	2009-08-10 14:33:00-0700
@@ -24,7 +24,6 @@
 
 package org.argouml.uml.diagram.activity.ui;
 
-import java.awt.Point;
 import java.awt.Rectangle;
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyVetoException;
@@ -44,6 +43,7 @@
 import org.argouml.model.DeleteInstanceEvent;
 import org.argouml.model.Model;
 import org.argouml.ui.CmdCreateNode;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.UMLMutableGraphSupport;
 import org.argouml.uml.diagram.activity.ActivityDiagramGraphModel;
@@ -62,6 +62,7 @@
 import org.argouml.uml.diagram.state.ui.FigStateVertex;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
 import org.argouml.uml.diagram.ui.ActionSetMode;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.RadioAction;
 import org.argouml.uml.diagram.ui.UMLDiagram;
 import org.argouml.uml.ui.behavior.common_behavior.ActionNewActionSequence;
@@ -800,70 +801,61 @@
         return false;
     }
     
-    @Override
-    public FigNode drop(Object droppedObject, Point location) {
-        FigNode figNode = null;
-
-        // If location is non-null, convert to a rectangle that we can use
-        Rectangle bounds = null;
-        if (location != null) {
-            bounds = new Rectangle(location.x, location.y, 0, 0);
-        }
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds) {
+        
+        FigNodeModelElement figNode = null;
+        
         DiagramSettings settings = getDiagramSettings();
-
-        if (Model.getFacade().isAPartition(droppedObject)) {
-            figNode = new FigPartition(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAActionState(droppedObject)) {
-            figNode = new FigActionState(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isACallState(droppedObject)) {
-            figNode = new FigCallState(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAObjectFlowState(droppedObject)) {
-            figNode = new FigObjectFlowState(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isASubactivityState(droppedObject)) {
-            figNode = new FigSubactivityState(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAFinalState(droppedObject)) {
-            figNode = new FigFinalState(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAPseudostate(droppedObject)) {
-            Object kind = Model.getFacade().getKind(droppedObject);
+        
+        if (Model.getFacade().isAPartition(modelElement)) {
+            figNode = new FigPartition(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAActionState(modelElement)) {
+            figNode = new FigActionState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isACallState(modelElement)) {
+            figNode = new FigCallState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAObjectFlowState(modelElement)) {
+            figNode = new FigObjectFlowState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isASubactivityState(modelElement)) {
+            figNode = new FigSubactivityState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAFinalState(modelElement)) {
+            figNode = new FigFinalState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAPseudostate(modelElement)) {
+            Object kind = Model.getFacade().getKind(modelElement);
             if (kind == null) {
                 LOG.warn("found a null type pseudostate");
                 return null;
             }
             if (kind.equals(Model.getPseudostateKind().getInitial())) {
-                figNode = new FigInitialState(droppedObject, bounds, settings);
+                figNode = new FigInitialState(modelElement, bounds, settings);
             } else if (kind.equals(
                     Model.getPseudostateKind().getChoice())) {
-                figNode = new FigBranchState(droppedObject, bounds, settings);
+                figNode = new FigBranchState(modelElement, bounds, settings);
             } else if (kind.equals(
                     Model.getPseudostateKind().getJunction())) {
-                figNode = new FigJunctionState(droppedObject, bounds, settings);
+                figNode = new FigJunctionState(modelElement, bounds, settings);
             } else if (kind.equals(
                     Model.getPseudostateKind().getFork())) {
-                figNode = new FigForkState(droppedObject, bounds, settings);
+                figNode = new FigForkState(modelElement, bounds, settings);
             } else if (kind.equals(
                     Model.getPseudostateKind().getJoin())) {
-                figNode = new FigJoinState(droppedObject, bounds, settings);
+                figNode = new FigJoinState(modelElement, bounds, settings);
             } else {
                 LOG.warn("found a type not known");
             }
-        } else if (Model.getFacade().isAComment(droppedObject)) {
-            figNode = new FigComment(droppedObject, bounds, settings);
+        } else if (Model.getFacade().isAComment(modelElement)) {
+            figNode = new FigComment(modelElement, bounds, settings);
         }
         
         if (figNode != null) {
-            // if location is null here the position of the new figNode is set
-            // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
-            if (location != null) {
-                figNode.setLocation(location.x, location.y);
-            }
-            LOG.debug("Dropped object " + droppedObject + " converted to " 
+            LOG.debug("Model element " + modelElement + " converted to " 
                     + figNode);
         } else {
-            LOG.debug("Dropped object NOT added. This usualy means that this " 
-                    + "type of object is not accepted!");
+            LOG.debug("Dropped object NOT added " + figNode);
         }
-        
         return figNode;
     }
+    
 
 }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/collaboration/ui/UMLCollaborationDiagram.java	2009-08-10 14:33:00-0700
@@ -36,6 +36,7 @@
 import org.apache.log4j.Logger;
 import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.collaboration.CollabDiagramGraphModel;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
@@ -43,6 +44,7 @@
 import org.argouml.uml.diagram.ui.ActionAddMessage;
 import org.argouml.uml.diagram.ui.ActionSetMode;
 import org.argouml.uml.diagram.ui.FigMessage;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.RadioAction;
 import org.argouml.uml.diagram.ui.UMLDiagram;
 import org.argouml.util.ToolBarUtility;
@@ -534,6 +536,38 @@
         return figNode;
     }
     
+
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds) {
+        
+        FigNodeModelElement figNode = null;
+        
+        DiagramSettings settings = getDiagramSettings();
+        
+        if (Model.getFacade().isAClassifierRole(modelElement)) {
+            figNode = new FigClassifierRole(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAMessage(modelElement)) {
+            figNode = new FigMessage(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComment(modelElement)) {
+            figNode = new FigComment(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAClassifierRole(modelElement)) {
+            figNode =
+                makeNewFigCR(modelElement, bounds.getLocation());           
+        } else if (Model.getFacade().isAClassifier(modelElement)) {
+            figNode =
+                makeNewFigCR(makeNewCR(modelElement), bounds.getLocation());
+        }
+        
+        if (figNode != null) {
+            LOG.debug("Model element " + modelElement + " converted to " 
+                    + figNode);
+        } else {
+            LOG.debug("Dropped object NOT added " + figNode);
+        }
+        return figNode;
+    }
+    
     @Override
     public String getInstructions(Object droppedObject) {
         if (Model.getFacade().isAClassifierRole(droppedObject)) {

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/UMLDeploymentDiagram.java	2009-08-10 14:33:00-0700
@@ -37,17 +37,21 @@
 import org.argouml.model.Facade;
 import org.argouml.model.Model;
 import org.argouml.ui.CmdCreateNode;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.deployment.DeploymentDiagramGraphModel;
 import org.argouml.uml.diagram.static_structure.ui.FigClass;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
 import org.argouml.uml.diagram.static_structure.ui.FigInterface;
+import org.argouml.uml.diagram.static_structure.ui.FigPackage;
 import org.argouml.uml.diagram.ui.ActionSetAddAssociationMode;
 import org.argouml.uml.diagram.ui.ActionSetMode;
 import org.argouml.uml.diagram.ui.FigNodeAssociation;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.RadioAction;
 import org.argouml.uml.diagram.ui.UMLDiagram;
 import org.argouml.uml.diagram.use_case.ui.FigActor;
+import org.argouml.uml.diagram.use_case.ui.FigUseCase;
 import org.argouml.util.ToolBarUtility;
 import org.tigris.gef.base.LayerPerspective;
 import org.tigris.gef.base.LayerPerspectiveMutable;
@@ -560,53 +564,44 @@
         return false;
     }
     
-    @Override
-    public FigNode drop(Object droppedObject, Point location) {
-        FigNode figNode = null;
 
-        // If location is non-null, convert to a rectangle that we can use
-        Rectangle bounds = null;
-        if (location != null) {
-            bounds = new Rectangle(location.x, location.y, 0, 0);
-        }
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds) {
+        
+        FigNodeModelElement figNode = null;
+        
         DiagramSettings settings = getDiagramSettings();
         
-        if (Model.getFacade().isANode(droppedObject)) {
-            figNode = new FigMNode(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAAssociation(droppedObject)) {
+        if (Model.getFacade().isANode(modelElement)) {
+            figNode = new FigMNode(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAAssociation(modelElement)) {
             figNode =
-                createNaryAssociationNode(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isANodeInstance(droppedObject)) {
-            figNode = new FigNodeInstance(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComponent(droppedObject)) {
-            figNode = new FigComponent(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComponentInstance(droppedObject)) {
-            figNode = new FigComponentInstance(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAClass(droppedObject)) {
-            figNode = new FigClass(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAInterface(droppedObject)) {
-            figNode = new FigInterface(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAObject(droppedObject)) {
-            figNode = new FigObject(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAActor(droppedObject)) {
-            figNode = new FigActor(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComment(droppedObject)) {
-            figNode = new FigComment(droppedObject, bounds, settings);
+                createNaryAssociationNode(modelElement, bounds, settings);
+        } else if (Model.getFacade().isANodeInstance(modelElement)) {
+            figNode = new FigNodeInstance(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComponent(modelElement)) {
+            figNode = new FigComponent(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComponentInstance(modelElement)) {
+            figNode = new FigComponentInstance(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAClass(modelElement)) {
+            figNode = new FigClass(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAInterface(modelElement)) {
+            figNode = new FigInterface(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAObject(modelElement)) {
+            figNode = new FigObject(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAActor(modelElement)) {
+            figNode = new FigActor(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComment(modelElement)) {
+            figNode = new FigComment(modelElement, bounds, settings);
         }
         
         if (figNode != null) {
-            // if location is null here the position of the new figNode is set
-            // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
-            if (location != null) {
-                figNode.setLocation(location.x, location.y);
-            }
-            LOG.debug("Dropped object " + droppedObject + " converted to " 
+            LOG.debug("Model element " + modelElement + " converted to " 
                     + figNode);
         } else {
             LOG.debug("Dropped object NOT added " + figNode);
         }
-        
         return figNode;
     }
-
 }
\ No newline at end of file

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/state/ui/UMLStateDiagram.java	2009-08-10 14:33:00-0700
@@ -38,15 +38,20 @@
 import org.argouml.model.DeleteInstanceEvent;
 import org.argouml.model.Model;
 import org.argouml.ui.CmdCreateNode;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramFactory;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.UMLMutableGraphSupport;
 import org.argouml.uml.diagram.activity.ui.FigActionState;
 import org.argouml.uml.diagram.state.StateDiagramGraphModel;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
+import org.argouml.uml.diagram.static_structure.ui.FigPackage;
 import org.argouml.uml.diagram.ui.ActionSetMode;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.RadioAction;
 import org.argouml.uml.diagram.ui.UMLDiagram;
+import org.argouml.uml.diagram.use_case.ui.FigActor;
+import org.argouml.uml.diagram.use_case.ui.FigUseCase;
 import org.argouml.uml.ui.behavior.common_behavior.ActionNewActionSequence;
 import org.argouml.uml.ui.behavior.common_behavior.ActionNewCallAction;
 import org.argouml.uml.ui.behavior.common_behavior.ActionNewCreateAction;
@@ -855,4 +860,72 @@
         
         return figNode;
     }
+    
+
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds) {
+        
+        FigNodeModelElement figNode = null;
+        
+        DiagramSettings settings = getDiagramSettings();
+        
+        if (Model.getFacade().isAActionState(modelElement)) {
+            figNode = new FigActionState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAFinalState(modelElement)) {
+            figNode = new FigFinalState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAStubState(modelElement)) {
+            figNode = new FigStubState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isASubmachineState(modelElement)) {
+            figNode = new FigSubmachineState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isACompositeState(modelElement)) {
+            figNode = new FigCompositeState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isASynchState(modelElement)) {
+            figNode = new FigSynchState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAState(modelElement)) {
+            figNode = new FigSimpleState(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComment(modelElement)) {
+            figNode = new FigComment(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAPseudostate(modelElement)) {
+            Object kind = Model.getFacade().getKind(modelElement);
+            if (kind == null) {
+                LOG.warn("found a null type pseudostate");
+                return null;
+            }
+            if (kind.equals(Model.getPseudostateKind().getInitial())) {
+                figNode = new FigInitialState(modelElement, bounds, settings);
+            } else if (kind.equals(
+                    Model.getPseudostateKind().getChoice())) {
+                figNode = new FigBranchState(modelElement, bounds, settings);
+            } else if (kind.equals(
+                    Model.getPseudostateKind().getJunction())) {
+                figNode = new FigJunctionState(modelElement, bounds, settings);
+            } else if (kind.equals(
+                    Model.getPseudostateKind().getFork())) {
+                figNode = new FigForkState(modelElement, bounds, settings);
+            } else if (kind.equals(
+                    Model.getPseudostateKind().getJoin())) {
+                figNode = new FigJoinState(modelElement, bounds, settings);
+            } else if (kind.equals(
+                    Model.getPseudostateKind().getShallowHistory())) {
+                figNode = new FigShallowHistoryState(modelElement, bounds, 
+                        settings);
+            } else if (kind.equals(
+                    Model.getPseudostateKind().getDeepHistory())) {
+                figNode = new FigDeepHistoryState(modelElement, bounds, 
+                        settings);
+            } else {
+                LOG.warn("found a type not known");
+            }
+        }
+        
+        if (figNode != null) {
+            LOG.debug("Model element " + modelElement + " converted to " 
+                    + figNode);
+        } else {
+            LOG.debug("Dropped object NOT added " + figNode);
+        }
+        return figNode;
+    }
+    
 }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/UMLClassDiagram.java	2009-08-10 14:33:00-0700
@@ -34,6 +34,7 @@
 import org.apache.log4j.Logger;
 import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.deployment.ui.FigComponent;
 import org.argouml.uml.diagram.deployment.ui.FigComponentInstance;
@@ -44,6 +45,7 @@
 import org.argouml.uml.diagram.ui.FigClassAssociationClass;
 import org.argouml.uml.diagram.ui.FigEdgeAssociationClass;
 import org.argouml.uml.diagram.ui.FigNodeAssociation;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.ModeCreateDependency;
 import org.argouml.uml.diagram.ui.ModeCreatePermission;
 import org.argouml.uml.diagram.ui.ModeCreateUsage;
@@ -653,70 +655,60 @@
 
     }
     
-    @Override
-    public FigNode drop(Object droppedObject, Point location) {        
-        FigNode figNode = null;
-
-        // If location is non-null, convert to a rectangle that we can use
-        Rectangle bounds = null;
-        if (location != null) {
-            bounds = new Rectangle(location.x, location.y, 0, 0);
-        }
-
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds) {
+        
+        FigNodeModelElement figNode = null;
+        
         DiagramSettings settings = getDiagramSettings();
         
-        if (Model.getFacade().isAAssociation(droppedObject)) {
+        if (Model.getFacade().isAAssociation(modelElement)) {
             figNode =
-                createNaryAssociationNode(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAClass(droppedObject)) {
-            figNode = new FigClass(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAInterface(droppedObject)) {
-            figNode = new FigInterface(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAModel(droppedObject)) {
-            figNode = new FigModel(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isASubsystem(droppedObject)) {
-            figNode = new FigSubsystem(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAPackage(droppedObject)) {
-            figNode = new FigPackage(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComment(droppedObject)) {
-            figNode = new FigComment(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAEnumeration(droppedObject)) {
-            figNode = new FigEnumeration(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isADataType(droppedObject)) {
-            figNode = new FigDataType(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAStereotype(droppedObject)) {
-            figNode = new FigStereotypeDeclaration(droppedObject, bounds, 
+                createNaryAssociationNode(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAClass(modelElement)) {
+            figNode = new FigClass(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAInterface(modelElement)) {
+            figNode = new FigInterface(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAModel(modelElement)) {
+            figNode = new FigModel(modelElement, bounds, settings);
+        } else if (Model.getFacade().isASubsystem(modelElement)) {
+            figNode = new FigSubsystem(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAPackage(modelElement)) {
+            figNode = new FigPackage(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComment(modelElement)) {
+            figNode = new FigComment(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAEnumeration(modelElement)) {
+            figNode = new FigEnumeration(modelElement, bounds, settings);
+        } else if (Model.getFacade().isADataType(modelElement)) {
+            figNode = new FigDataType(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAStereotype(modelElement)) {
+            figNode = new FigStereotypeDeclaration(modelElement, bounds, 
                     settings);
-        } else if (Model.getFacade().isAException(droppedObject)) {
-            figNode = new FigException(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isASignal(droppedObject)) {
-            figNode = new FigSignal(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAActor(droppedObject)) {
-            figNode = new FigActor(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAUseCase(droppedObject)) {
-            figNode = new FigUseCase(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAObject(droppedObject)) {
-            figNode = new FigObject(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isANodeInstance(droppedObject)) {
-            figNode = new FigNodeInstance(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComponentInstance(droppedObject)) {
-            figNode = new FigComponentInstance(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isANode(droppedObject)) {
-            figNode = new FigMNode(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComponent(droppedObject)) {
-            figNode = new FigComponent(droppedObject, bounds, settings);
+        } else if (Model.getFacade().isAException(modelElement)) {
+            figNode = new FigException(modelElement, bounds, settings);
+        } else if (Model.getFacade().isASignal(modelElement)) {
+            figNode = new FigSignal(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAActor(modelElement)) {
+            figNode = new FigActor(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAUseCase(modelElement)) {
+            figNode = new FigUseCase(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAObject(modelElement)) {
+            figNode = new FigObject(modelElement, bounds, settings);
+        } else if (Model.getFacade().isANodeInstance(modelElement)) {
+            figNode = new FigNodeInstance(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComponentInstance(modelElement)) {
+            figNode = new FigComponentInstance(modelElement, bounds, settings);
+        } else if (Model.getFacade().isANode(modelElement)) {
+            figNode = new FigMNode(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComponent(modelElement)) {
+            figNode = new FigComponent(modelElement, bounds, settings);
         }
-        
         if (figNode != null) {
-            // if location is null here the position of the new figNode is set
-            // after in org.tigris.gef.base.ModePlace.mousePressed(MouseEvent e)
-            if (location != null) {
-                figNode.setLocation(location.x, location.y);
-            }
-            LOG.debug("Dropped object " + droppedObject + " converted to " 
+            LOG.debug("Model element " + modelElement + " converted to " 
                     + figNode);
         } else {
-            LOG.debug("Dropped object NOT added " + droppedObject);
+            LOG.debug("Dropped object NOT added " + figNode);
         }
         return figNode;
     }

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigNodeModelElement.java	2009-08-10 14:33:00-0700
@@ -88,6 +88,7 @@
 import org.argouml.uml.StereotypeUtility;
 import org.argouml.uml.diagram.ArgoDiagram;
 import org.argouml.uml.diagram.DiagramAppearance;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.PathContainer;
 import org.argouml.uml.diagram.DiagramSettings.StereotypeStyle;
@@ -133,7 +134,8 @@
         IItemUID,
         Clarifiable,
         ArgoFig,
-        StereotypeStyled {
+        StereotypeStyled,
+        DiagramElement {
 
 
     private static final Logger LOG =

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/UMLDiagram.java	2009-08-10 14:33:00-0700
@@ -623,9 +623,17 @@
      * @param location The location in the diagram where the object is dropped.
      * @return The object that has been added to the diagram.
      */
-    @SuppressWarnings("unused")
     public FigNode drop(Object droppedObject, Point location) {
-        return null;
+        FigNode figNode = null;
+       
+        // If location is non-null, convert to a rectangle that we can use
+        Rectangle bounds = null;
+        if (location != null) {
+            bounds = new Rectangle(location.x, location.y, 0, 0);
+        }
+
+        figNode = (FigNode) createDiagramElement(droppedObject, bounds);
+        return figNode;
     }
     
     /**
@@ -662,7 +670,7 @@
      * @param settings the diagram setting for presentation.
      * @return The FigNode of the diamond representing the model element
      */
-    protected FigNode createNaryAssociationNode(
+    protected FigNodeModelElement createNaryAssociationNode(
             final Object modelElement,
             final Rectangle bounds,
             final DiagramSettings settings) {

Modified: trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/UMLUseCaseDiagram.java	2009-08-10 14:33:00-0700
@@ -36,12 +36,14 @@
 import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
 import org.argouml.ui.CmdCreateNode;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramSettings;
 import org.argouml.uml.diagram.static_structure.ui.FigComment;
 import org.argouml.uml.diagram.static_structure.ui.FigPackage;
 import org.argouml.uml.diagram.ui.ActionAddExtensionPoint;
 import org.argouml.uml.diagram.ui.ActionSetAddAssociationMode;
 import org.argouml.uml.diagram.ui.ActionSetMode;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.argouml.uml.diagram.ui.RadioAction;
 import org.argouml.uml.diagram.ui.UMLDiagram;
 import org.argouml.uml.diagram.use_case.UseCaseDiagramGraphModel;
@@ -481,19 +483,29 @@
             bounds = new Rectangle(location.x, location.y, 0, 0);
         }
 
+        figNode = (FigNode) createDiagramElement(droppedObject, bounds);
+        return figNode;
+    }
+
+    public DiagramElement createDiagramElement(
+            final Object modelElement,
+            final Rectangle bounds) {
+        
+        FigNodeModelElement figNode = null;
+        
         DiagramSettings settings = getDiagramSettings();
         
-        if (Model.getFacade().isAActor(droppedObject)) {
-            figNode = new FigActor(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAUseCase(droppedObject)) {
-            figNode = new FigUseCase(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAComment(droppedObject)) {
-            figNode = new FigComment(droppedObject, bounds, settings);
-        } else if (Model.getFacade().isAPackage(droppedObject)) {
-            figNode = new FigPackage(droppedObject, bounds, settings);
+        if (Model.getFacade().isAActor(modelElement)) {
+            figNode = new FigActor(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAUseCase(modelElement)) {
+            figNode = new FigUseCase(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAComment(modelElement)) {
+            figNode = new FigComment(modelElement, bounds, settings);
+        } else if (Model.getFacade().isAPackage(modelElement)) {
+            figNode = new FigPackage(modelElement, bounds, settings);
         }
         if (figNode != null) {
-            LOG.debug("Dropped object " + droppedObject + " converted to " 
+            LOG.debug("Model element " + modelElement + " converted to " 
                     + figNode);
         } else {
             LOG.debug("Dropped object NOT added " + figNode);

Modified: trunk/src/argouml-app/src/org/argouml/uml/reveng/DiagramInterface.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/reveng/DiagramInterface.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/reveng/DiagramInterface.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/reveng/DiagramInterface.java	2009-08-10 14:33:00-0700
@@ -33,12 +33,13 @@
 import org.argouml.kernel.Project;
 import org.argouml.model.Model;
 import org.argouml.uml.diagram.ArgoDiagram;
+import org.argouml.uml.diagram.AttributesCompartmentContainer;
+import org.argouml.uml.diagram.DiagramElement;
 import org.argouml.uml.diagram.DiagramFactory;
 import org.argouml.uml.diagram.static_structure.ClassDiagramGraphModel;
-import org.argouml.uml.diagram.static_structure.ui.FigClass;
 import org.argouml.uml.diagram.static_structure.ui.FigClassifierBox;
-import org.argouml.uml.diagram.static_structure.ui.FigInterface;
 import org.argouml.uml.diagram.static_structure.ui.FigPackage;
+import org.argouml.uml.diagram.ui.FigNodeModelElement;
 import org.tigris.gef.base.Editor;
 import org.tigris.gef.base.LayerPerspective;
 import org.tigris.gef.presentation.Fig;
@@ -158,12 +159,13 @@
     public void addPackage(Object newPackage) {
         if (!isInDiagram(newPackage)) {
             if (currentGM.canAddNode(newPackage)) {
-                FigPackage newPackageFig = new FigPackage(newPackage,
-                        new Rectangle(0, 0, 0, 0), currentDiagram
-                                .getDiagramSettings());
-                currentLayer.add(newPackageFig);
+                DiagramElement newPackageFig =
+                    currentDiagram.createDiagramElement(
+                        newPackage,
+                        new Rectangle(0, 0, 0, 0));
+                currentLayer.add((FigNodeModelElement) newPackageFig);
                 currentGM.addNode(newPackage);
-                currentLayer.putInPosition(newPackageFig);
+                currentLayer.putInPosition((FigNodeModelElement) newPackageFig);
             }
         }
     }
@@ -286,17 +288,10 @@
     private void addClassifier(Object classifier, boolean minimise) {
         // if the classifier is not in the current diagram, add it:
         if (currentGM.canAddNode(classifier)) {
-            FigClassifierBox newFig;
-            if (Model.getFacade().isAClass(classifier)) {
-                newFig = new FigClass(classifier, new Rectangle(0, 0, 0, 0),
-                        currentDiagram.getDiagramSettings());
-            } else if (Model.getFacade().isAInterface(classifier)) {
-                newFig = new FigInterface(classifier,
-                        new Rectangle(0, 0, 0, 0), currentDiagram
-                                .getDiagramSettings());
-            } else {
-                return;
-            }
+            FigClassifierBox newFig =
+                (FigClassifierBox) currentDiagram.createDiagramElement(
+                        classifier,
+                        new Rectangle(0, 0, 0, 0));
             
             /*
              * The following calls are ORDER DEPENDENT. Not sure why, but the
@@ -309,7 +304,8 @@
 
             newFig.setOperationsVisible(!minimise);
             if (Model.getFacade().isAClass(classifier)) {            
-                ((FigClass) newFig).setAttributesVisible(!minimise);
+                ((AttributesCompartmentContainer) newFig).setAttributesVisible(
+                        !minimise);
             }
 
             newFig.renderingChanged();

Modified: trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportCommon.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportCommon.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportCommon.java	(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/reveng/ImportCommon.java	2009-08-10 14:33:00-0700
@@ -199,9 +199,13 @@
                 File f = files.get(i);
                 String fn = f.getAbsolutePath();
                 String lm = String.valueOf(f.lastModified());
-                if (lm.equals(
-                        Model.getFacade().getTaggedValueValue(model, fn))) {
-                    files.remove(i);
+                
+                if (Model.getFacade().getUmlVersion().charAt(0) == '1') {
+                    // TODO: Not yet working for UML2
+                    if (lm.equals(
+                            Model.getFacade().getTaggedValueValue(model, fn))) {
+                        files.remove(i);
+                    }
                 }
             }
         }

Modified: trunk/src/argouml-app/tests/org/argouml/ui/targetmanager/TestTargetManager.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/tests/org/argouml/ui/targetmanager/TestTargetManager.java?view=diff&pathrev=17255&r1=17254&r2=17255
==============================================================================
--- trunk/src/argouml-app/tests/org/argouml/ui/targetmanager/TestTargetManager.java	(original)
+++ trunk/src/argouml-app/tests/org/argouml/ui/targetmanager/TestTargetManager.java	2009-08-10 14:33:00-0700
@@ -24,6 +24,7 @@
 
 package org.argouml.ui.targetmanager;
 
+import java.awt.Rectangle;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collection;
@@ -40,6 +41,7 @@
 import org.argouml.profile.init.InitProfileSubsystem;
 import org.argouml.uml.diagram.ArgoDiagram;
 import org.argouml.uml.diagram.ArgoDiagramImpl;
+import org.argouml.uml.diagram.DiagramElement;
 import org.tigris.gef.presentation.Fig;
 import org.tigris.gef.presentation.FigNode;
 import org.tigris.gef.presentation.FigRect;
@@ -461,6 +463,12 @@
 	    public void encloserChanged(FigNode enclosed, 
 	            FigNode oldEncloser, FigNode newEncloser) {
 	    }
+	    public DiagramElement createDiagramElement(
+	            final Object modelElement,
+	            final Rectangle bounds) {
+	        return null;
+	    }
+	    
 	};
 	Project p = ProjectManager.getManager().getCurrentProject();
 	p.addDiagram(diag);

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

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.