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]
