Author: tfmorris
Date: 2008-10-16 12:54:47-0700
New Revision: 15932

Modified:
   
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java
   
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java
   
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java
   
trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java
   
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java
   trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java

Log:
Issue 5438: Last batch of changes for minimal listener updates

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java&r1=15931&r2=15932
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java
       (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigObjectFlowState.java
       2008-10-16 12:54:47-0700
@@ -31,7 +31,9 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyVetoException;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 
 import org.argouml.application.events.ArgoEvent;
 import org.argouml.application.events.ArgoEventPump;
@@ -164,31 +166,31 @@
      */
     @Override
     protected void updateListeners(Object oldOwner, Object newOwner) {
-        if (oldOwner != null) {
-            removeAllElementListeners();
-        }
+        Set<Object[]> l = new HashSet<Object[]>();
+
         if (newOwner != null) {
-            /* Let's NOT do this: addElementListener(newOwner);
+            /* Don't listen to all property names
              * We only need to listen to its "type", and "remove". */
-            addElementListener(newOwner, new String[] {"type", "remove"});
+            l.add(new Object[] {newOwner, new String[] {"type", "remove"}});
             // register for events from the type
             Object type = Model.getFacade().getType(newOwner);
             if (Model.getFacade().isAClassifier(type)) {
                 if (Model.getFacade().isAClassifierInState(type)) {
                     Object classifier = Model.getFacade().getType(type);
-                    addElementListener(classifier, "name");
-                    addElementListener(type, "inState");
+                    l.add(new Object[] {classifier, "name"});
+                    l.add(new Object[] {type, "inState"});
                     Collection states = Model.getFacade().getInStates(type);
                     Iterator i = states.iterator();
                     while (i.hasNext()) {
-                        addElementListener(i.next(),
-                                "name");
+                        l.add(new Object[] {i.next(), "name"});
                     }
                 } else {
-                    addElementListener(type, "name");
+                    l.add(new Object[] {type, "name"});
                 }
             }
         }
+
+        updateElementListeners(l);
     }
 
 

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java&r1=15931&r2=15932
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java
      (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/activity/ui/FigSubactivityState.java
      2008-10-16 12:54:47-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2007 The Regents of the University of California. All
+// Copyright (c) 1996-2008 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
@@ -28,7 +28,9 @@
 import java.awt.Dimension;
 import java.awt.Rectangle;
 import java.beans.PropertyChangeEvent;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 
 import org.argouml.model.AssociationChangeEvent;
 import org.argouml.model.AttributeChangeEvent;
@@ -261,18 +263,17 @@
      */
     @Override
     protected void updateListeners(Object oldOwner, Object newOwner) {
-        if (oldOwner != null) {
-            removeAllElementListeners();
-        }
+        Set<Object[]> l = new HashSet<Object[]>();
         if (newOwner != null) {
             // add the listeners to the newOwner
-            addElementListener(newOwner);
+            l.add(new Object[] {newOwner, null});
             // and listen to name changes of the submachine
             Object machine = Model.getFacade().getSubmachine(newOwner);
             if (machine != null) {
-                addElementListener(machine);
+                l.add(new Object[] {machine, null});
             }
         }
+        updateElementListeners(l);
     }
 
     /*

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java&r1=15931&r2=15932
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java
        (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/deployment/ui/AbstractFigNode.java
        2008-10-16 12:54:47-0700
@@ -32,7 +32,9 @@
 import java.beans.PropertyChangeEvent;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 
 import org.argouml.model.AssociationChangeEvent;
 import org.argouml.model.AttributeChangeEvent;
@@ -248,19 +250,19 @@
 
     @Override
     protected void updateListeners(Object oldOwner, Object newOwner) {
-        if (oldOwner != null) {
-            removeAllElementListeners();
-        }
+        Set<Object[]> l = new HashSet<Object[]>();
         if (newOwner != null) {
             // add the listeners to the newOwner
-            addElementListener(newOwner);
+            l.add(new Object[] {newOwner, null});
+            
             Collection c = Model.getFacade().getStereotypes(newOwner);
             Iterator i = c.iterator();
             while (i.hasNext()) {
                 Object st = i.next();
-                addElementListener(st, "name");
+                l.add(new Object[] {st, "name"});
             }
         }
+        updateElementListeners(l);
     }
 
     @Override

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java&r1=15931&r2=15932
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java
        (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/sequence/ui/FigClassifierRole.java
        2008-10-16 12:54:47-0700
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2006 The Regents of the University of California. All
+// Copyright (c) 1996-2008 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
@@ -30,8 +30,10 @@
 import java.awt.event.MouseListener;
 import java.beans.PropertyChangeEvent;
 import java.util.ArrayList;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.StringTokenizer;
 
 import org.apache.log4j.Logger;
@@ -804,21 +806,27 @@
      */
     @Override
     protected void updateListeners(Object oldOwner, Object newOwner) {
-        removeAllElementListeners();
-        super.updateListeners(oldOwner, newOwner);
+        Set<Object[]> l = new HashSet<Object[]>();
         if (newOwner != null) {
-            addElementListener(newOwner);
+            l.add(new Object[] {newOwner, null});
             Iterator it = Model.getFacade().getBases(newOwner).iterator();
             while (it.hasNext()) {
                 Object base = it.next();
-                addElementListener(base, "name");
+                l.add(new Object[] {base, "name"});
             }
             it = Model.getFacade().getStereotypes(newOwner).iterator();
             while (it.hasNext()) {
                 Object stereo = it.next();
-                addElementListener(stereo, "name");
-            }
+                l.add(new Object[] {stereo, "name"});
+            }        
         }
+        
+        updateElementListeners(l);
+        
+        // TODO: The old implementation called the superclasses method.
+        // Do we really want to do that?
+//        super.updateListeners(oldOwner, newOwner);
+
     }
 
     void growToSize(int nodeCount) {

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java&r1=15931&r2=15932
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java
   (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/static_structure/ui/FigEnumeration.java
   2008-10-16 12:54:47-0700
@@ -27,10 +27,9 @@
 import java.awt.Dimension;
 import java.awt.Rectangle;
 import java.beans.PropertyChangeEvent;
-import java.beans.PropertyVetoException;
-import java.util.ArrayList;
-import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
+import java.util.Set;
 
 import javax.swing.Action;
 
@@ -38,7 +37,6 @@
 import org.argouml.model.AttributeChangeEvent;
 import org.argouml.model.Model;
 import org.argouml.ui.ArgoJMenu;
-import org.argouml.uml.diagram.ui.CompartmentFigText;
 import org.argouml.uml.diagram.ui.EnumLiteralsCompartmentContainer;
 import org.argouml.uml.diagram.ui.FigEnumLiteralsCompartment;
 import org.argouml.uml.diagram.ui.FigStereotypesCompartment;
@@ -46,7 +44,6 @@
 import org.tigris.gef.base.Selection;
 import org.tigris.gef.graph.GraphModel;
 import org.tigris.gef.presentation.Fig;
-import org.tigris.gef.presentation.FigText;
 
 /**
  * Class to display graphics for a UML Enumeration in a diagram.
@@ -131,6 +128,7 @@
     /*
      * @see 
org.argouml.uml.diagram.ui.FigNodeModelElement#modelChanged(java.beans.PropertyChangeEvent)
      */
+    @Override
     protected void modelChanged(PropertyChangeEvent mee) {
         super.modelChanged(mee);
         if (mee instanceof AssociationChangeEvent 
@@ -156,28 +154,31 @@
      */
     @Override
     protected void updateListeners(Object oldOwner, Object newOwner) {
-        if (oldOwner != null) {
-            removeAllElementListeners();
-        }
+        Set<Object[]> l = new HashSet<Object[]>();
         if (newOwner != null) {
             // add the listeners to the newOwner
-            addElementListener(newOwner);
+            l.add(new Object[] {newOwner, null});
             // and its stereotypes
-            Collection c = new ArrayList(
-                    Model.getFacade().getStereotypes(newOwner));
+            for (Object stereo : Model.getFacade().getStereotypes(newOwner)) {
+                l.add(new Object[] {stereo, null});                
+            }
             // and its features
             for (Object feat : Model.getFacade().getFeatures(newOwner)) {
-                c.add(feat);
+                l.add(new Object[] {feat, null});
                 // and the stereotypes of its features
-                c.addAll(new 
ArrayList(Model.getFacade().getStereotypes(feat)));
+                for (Object stereo : Model.getFacade().getStereotypes(feat)) {
+                    l.add(new Object[] {stereo, null});
+                }
             }
             // and its enumerationLiterals
-            c.addAll(Model.getFacade().getEnumerationLiterals(newOwner));
-            // And now add listeners to them all:
-            for (Object obj : c) {
-                addElementListener(obj);
+            for (Object literal : Model.getFacade().getEnumerationLiterals(
+                    newOwner)) {
+                l.add(new Object[] {literal, null});
             }
         }
+        // And now add listeners to them all:
+        updateElementListeners(l);
+
     }
 
     /**

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java&r1=15931&r2=15932
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java 
(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/diagram/ui/FigAssociationEnd.java 
2008-10-16 12:54:47-0700
@@ -30,7 +30,6 @@
 import java.util.HashSet;
 import java.util.Set;
 
-import org.apache.log4j.Logger;
 import org.argouml.kernel.Project;
 import org.argouml.kernel.ProjectManager;
 import org.argouml.model.AssociationChangeEvent;
@@ -66,9 +65,7 @@
     private FigTextGroup srcGroup = new FigTextGroup();
     private FigText srcMult; 
     private FigText srcOrdering;
-    
-    private Logger LOG = Logger.getLogger(FigAssociationEnd.class);
-    
+
     /**
      * The notation provider for the multiplicity.
      */

Modified: 
trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java?view=diff&rev=15932&p1=trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java&p2=trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java&r1=15931&r2=15932
==============================================================================
--- 
trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java   
    (original)
+++ 
trunk/src/argouml-app/src/org/argouml/uml/diagram/use_case/ui/FigUseCase.java   
    2008-10-16 12:54:47-0700
@@ -33,8 +33,10 @@
 import java.beans.PropertyChangeEvent;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Set;
 import java.util.Vector;
 
 import javax.swing.Action;
@@ -1049,32 +1051,34 @@
      */
     @Override
     protected void updateListeners(Object oldOwner, Object newOwner) {
-        if (oldOwner != null) {
-            removeAllElementListeners();
-        }
-        /* Now, let's register for events from all modelelements
+        Set<Object[]> l = new HashSet<Object[]>();
+        /* Let's register for events from all modelelements
          * that change the name or body text: 
          */
         if (newOwner != null) {
             /* Register for name changes, added extensionpoints
              * and abstract makes the text italic.
              * All Figs need to listen to "remove", too: */
-            addElementListener(newOwner, 
+            l.add(new Object[] {newOwner, 
                     new String[] {"remove", "name", "isAbstract", 
-                        "extensionPoint", "stereotype"});
+                        "extensionPoint", "stereotype"}});
+            
             // register for extension points:
             Iterator it =
                 Model.getFacade().getExtensionPoints(newOwner).iterator();
             while (it.hasNext()) {
-                addElementListener(it.next(),
-                        new String[] {"location", "name"});
+                l.add(new Object[] {it.next(),
+                        new String[] {"location", "name"}});
             }
-            it = Model.getFacade().getStereotypes(newOwner).iterator();
+            
+            Collection c = Model.getFacade().getStereotypes(newOwner);
+            it = c.iterator();
             while (it.hasNext()) {
-                addElementListener(it.next(),
-                        new String[] {"name"});
+                Object st = it.next();
+                l.add(new Object[] {st, "name"});
             }
         }
+        updateElementListeners(l);
     }
 
     /*

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to