Author: bobtarling
Date: 2011-05-23 04:25:42-0700
New Revision: 19486

Modified:
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java
   
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java

Log:
Allow vertices to fire delete events when deleted from a region

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java?view=diff&pathrev=19486&r1=19485&r2=19486
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java
        (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/CoreHelperEUMLImpl.java
        2011-05-23 04:25:42-0700
@@ -411,6 +411,7 @@
         }
         Element element = (Element) me;
         if (element.getOwner() != null) {
+            LOG.info("Setting ignore delete for " + element); //$NON-NLS-1$
             ModelEventPumpEUMLImpl pump = (ModelEventPumpEUMLImpl) 
Model.getPump();
             pump.addElementForDeleteEventIgnore(element);
         }

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java?view=diff&pathrev=19486&r1=19485&r2=19486
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java
    (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/ModelEventPumpEUMLImpl.java
    2011-05-23 04:25:42-0700
@@ -352,6 +352,7 @@
 
         LOG.debug("event  - Property: " //$NON-NLS-1$
                 + featureName 
+                + " Type : " + eventType  //$NON-NLS-1$
                 + " Old: " + oldValue //$NON-NLS-1$
                 + " New: " + newValue //$NON-NLS-1$
                 + " From: " + notifier); //$NON-NLS-1$
@@ -404,6 +405,8 @@
                                     null, null, null),
                                     getListeners(
                                         oldValue)));
+                } else {
+                    LOG.info("Not sending delete event - assume remove"); 
//$NON-NLS-1$
                 }
                 events.add(new EventAndListeners(
                         new RemoveAssociationEvent(

Modified: 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java?view=diff&pathrev=19486&r1=19485&r2=19486
==============================================================================
--- 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java
       (original)
+++ 
trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/StateMachinesHelperEUMLImpl.java
       2011-05-23 04:25:42-0700
@@ -17,6 +17,7 @@
 import java.util.Collection;
 import java.util.List;
 
+import org.apache.log4j.Logger;
 import org.argouml.model.Model;
 import org.argouml.model.StateMachinesHelper;
 import org.eclipse.uml2.uml.Classifier;
@@ -32,6 +33,8 @@
  */
 class StateMachinesHelperEUMLImpl implements StateMachinesHelper {
 
+    private static final Logger LOG = 
Logger.getLogger(StateMachinesHelperEUMLImpl.class);
+    
     /**
      * The model implementation.
      */
@@ -231,6 +234,8 @@
                     "Expected a vertext, got a " + handle); //$NON-NLS-1$
         }
         
+        Vertex vertex = (Vertex) handle;
+        
         if (region instanceof State) {
             List<Region> regions = ((State) region).getRegions();
             if (regions.isEmpty()) {
@@ -242,10 +247,20 @@
         }
                         
         if (region == null || region instanceof Region) {
-            ModelEventPumpEUMLImpl pump =
-                (ModelEventPumpEUMLImpl) Model.getPump();
-            pump.addElementForDeleteEventIgnore((Vertex) handle);
-            ((Vertex) handle).setContainer((Region) region);
+            if (vertex.getContainer() != null && region != null) {
+                // If the region is changed to another region then
+                // we make sure that a delete event is not fired
+                // as a result.
+                LOG.info("Setting ignore delete for " + vertex); //$NON-NLS-1$
+                ModelEventPumpEUMLImpl pump =
+                    (ModelEventPumpEUMLImpl) Model.getPump();
+                pump.addElementForDeleteEventIgnore((Vertex) handle);
+            } else {
+                // The only way a region is set to null is if we're deleting
+                // the vertex in which case we do nothing special so that
+                // the removal of the state triggers a delete event.
+            }
+            vertex.setContainer((Region) region);
             return;
         }

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

To unsubscribe from this discussion, e-mail: 
[[email protected]].

Reply via email to