Author: mvw
Date: 2007-11-06 13:05:08-0800
New Revision: 13734
Modified:
trunk/src_new/org/argouml/notation/providers/AttributeNotation.java
trunk/src_new/org/argouml/notation/providers/OperationNotation.java
trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java
trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java
trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java
Log:
Fixed the remaining part of issue 4654: The notationProvider takes care of maintaining the correct set of listeners instead of the Fig that displays the textual representation.
Modified: trunk/src_new/org/argouml/notation/providers/AttributeNotation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/notation/providers/AttributeNotation.java?view=diff&rev=13734&p1=trunk/src_new/org/argouml/notation/providers/AttributeNotation.java&p2=trunk/src_new/org/argouml/notation/providers/AttributeNotation.java&r1=13733&r2=13734
==============================================================================
--- trunk/src_new/org/argouml/notation/providers/AttributeNotation.java (original)
+++ trunk/src_new/org/argouml/notation/providers/AttributeNotation.java 2007-11-06 13:05:08-0800
@@ -24,6 +24,12 @@
package org.argouml.notation.providers;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.argouml.model.AddAssociationEvent;
+import org.argouml.model.Model;
+import org.argouml.model.RemoveAssociationEvent;
import org.argouml.notation.NotationProvider;
/**
@@ -41,4 +47,35 @@
protected AttributeNotation() {
}
+ @Override
+ public void initialiseListener(PropertyChangeListener listener,
+ Object modelElement) {
+ addElementListener(listener, modelElement);
+ if (Model.getFacade().isAOperation(modelElement)) {
+ // We also show stereotypes
+ for (Object uml : Model.getFacade().getStereotypes(modelElement)) {
+ addElementListener(listener, uml);
+ }
+ // We also show the type (of which e.g. the name may change)
+ Object type = Model.getFacade().getType(modelElement);
+ if (type != null) {
+ addElementListener(listener, type);
+ }
+ }
+ }
+
+ @Override
+ public void updateListener(PropertyChangeListener listener,
+ Object modelElement, PropertyChangeEvent pce) {
+ if (pce.getSource() == modelElement
+ && ("stereotype".equals(pce.getPropertyName())
+ || ("type".equals(pce.getPropertyName())))) {
+ if (pce instanceof AddAssociationEvent) {
+ addElementListener(listener, pce.getNewValue());
+ }
+ if (pce instanceof RemoveAssociationEvent) {
+ removeElementListener(listener, pce.getOldValue());
+ }
+ }
+ }
}
Modified: trunk/src_new/org/argouml/notation/providers/OperationNotation.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/notation/providers/OperationNotation.java?view=diff&rev=13734&p1=trunk/src_new/org/argouml/notation/providers/OperationNotation.java&p2=trunk/src_new/org/argouml/notation/providers/OperationNotation.java&r1=13733&r2=13734
==============================================================================
--- trunk/src_new/org/argouml/notation/providers/OperationNotation.java (original)
+++ trunk/src_new/org/argouml/notation/providers/OperationNotation.java 2007-11-06 13:05:08-0800
@@ -24,7 +24,12 @@
package org.argouml.notation.providers;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+
+import org.argouml.model.AddAssociationEvent;
import org.argouml.model.Model;
+import org.argouml.model.RemoveAssociationEvent;
import org.argouml.notation.NotationProvider;
/**
@@ -49,4 +54,58 @@
}
}
+ @Override
+ public void initialiseListener(PropertyChangeListener listener,
+ Object modelElement) {
+ addElementListener(listener, modelElement);
+ if (Model.getFacade().isAOperation(modelElement)) {
+ // We also show stereotypes
+ for (Object uml : Model.getFacade().getStereotypes(modelElement)) {
+ addElementListener(listener, uml);
+ }
+ // We also show parameters
+ for (Object uml : Model.getFacade().getParameters(modelElement)) {
+ addElementListener(listener, uml);
+ // We also show the type (of which e.g. the name may change)
+ Object type = Model.getFacade().getType(uml);
+ if (type != null) {
+ addElementListener(listener, type);
+ }
+ }
+ // We also show tagged values
+ for (Object uml : Model.getFacade()
+ .getTaggedValuesCollection(modelElement)) {
+ addElementListener(listener, uml);
+ }
+ }
+ }
+
+ @Override
+ public void updateListener(PropertyChangeListener listener,
+ Object modelElement, PropertyChangeEvent pce) {
+ if (pce.getSource() == modelElement
+ && ("stereotype".equals(pce.getPropertyName())
+ || "parameter".equals(pce.getPropertyName())
+ || "taggedValue".equals(pce.getPropertyName()))) {
+ if (pce instanceof AddAssociationEvent) {
+ addElementListener(listener, pce.getNewValue());
+ }
+ if (pce instanceof RemoveAssociationEvent) {
+ removeElementListener(listener, pce.getOldValue());
+ }
+ }
+ // We also show types of parameters
+ for (Object param : Model.getFacade().getParameters(modelElement)) {
+ if (pce.getSource() == param
+ && ("type".equals(pce.getPropertyName()))) {
+ if (pce instanceof AddAssociationEvent) {
+ addElementListener(listener, pce.getNewValue());
+ }
+ if (pce instanceof RemoveAssociationEvent) {
+ removeElementListener(listener, pce.getOldValue());
+ }
+ }
+ }
+ }
+
}
Modified: trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java?view=diff&rev=13734&p1=trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java&p2=trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java&r1=13733&r2=13734
==============================================================================
--- trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java (original)
+++ trunk/src_new/org/argouml/uml/diagram/static_structure/ui/FigClassifierBox.java 2007-11-06 13:05:08-0800
@@ -36,7 +36,6 @@
import org.argouml.model.AddAssociationEvent;
import org.argouml.model.AssociationChangeEvent;
-import org.argouml.model.AttributeChangeEvent;
import org.argouml.model.Model;
import org.argouml.model.RemoveAssociationEvent;
import org.argouml.ui.ArgoJMenu;
@@ -56,6 +55,8 @@
/**
* Class to display graphics for any UML Classifier in a diagram.<p>
+ *
+ * This Fig has an Operations compartment. <p>
*
* Note that the upper line of the name box will be blanked out
* if there is eventually a stereotype above.
@@ -148,18 +149,7 @@
protected void modelChanged(PropertyChangeEvent mee) {
super.modelChanged(mee);
- if (mee instanceof AttributeChangeEvent) {
- Object source = mee.getSource();
- if (Model.getFacade().isAOperation(source)
- || Model.getFacade().isAMethod(source)
- || Model.getFacade().isAParameter(source)
- || Model.getFacade().isAReception(source)) {
- // TODO: We just need to get someone to rerender a single line
- // of text which represents the element here, but I'm not sure
- // how to do that, so redraw the whole compartment. - tfm
- updateOperations();
- }
- } else if (mee instanceof AssociationChangeEvent
+ if (mee instanceof AssociationChangeEvent
&& getOwner().equals(mee.getSource())) {
Object o = null;
if (mee instanceof AddAssociationEvent) {
Modified: trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java?view=diff&rev=13734&p1=trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java&p2=trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java&r1=13733&r2=13734
==============================================================================
--- trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java (original)
+++ trunk/src_new/org/argouml/uml/diagram/ui/FigEditableCompartment.java 2007-11-06 13:05:08-0800
@@ -186,7 +186,7 @@
np);
// bounds not relevant here
comp.setOwner(umlObject);
-
+ np.initialiseListener(comp, umlObject);
} else {
/* This one is still useable, so let's retain it, */
/* but its position may have been changed: */
@@ -197,6 +197,7 @@
/* We need to set a new notationprovider, since
* the Notation language may have been changed: */
comp.setNotationProvider(np);
+ np.initialiseListener(comp, umlObject);
}
addFig(comp); // add it again (but now in the right sequence)
Modified: trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java?view=diff&rev=13734&p1=trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java&p2=trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java&r1=13733&r2=13734
==============================================================================
--- trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java (original)
+++ trunk/src_new/org/argouml/uml/diagram/ui/FigSingleLineText.java 2007-11-06 13:05:08-0800
@@ -44,7 +44,9 @@
* <li>There is no line border
* <li>There is space below the line for a "Clarifier",
* i.e. a red squiggly line.
- * </ul>
+ * </ul><p>
+ *
+ * This Fig may have a NotationProvider to render the text.
*
* @author Bob Tarling
*/
@@ -169,11 +171,16 @@
// : pce.getPropertyName();
setText();
}
+// super.propertyChange(pce); // Adding this gives loads of problems!!!
+
if ("remove".equals(pce.getPropertyName())
&& (pce.getSource() == getOwner())) {
deleteFromModel();
+ } else if (notationProvider != null) {
+ notationProvider.updateListener(this, getOwner(), pce);
+ this.setText(notationProvider.toString(getOwner(), null));
+ damage();
}
-// super.propertyChange(pce); // Adding this gives loads of problems!!!
}
/**
@@ -197,6 +204,9 @@
* @param np The notationProvider to set.
*/
void setNotationProvider(NotationProvider np) {
+ if (notationProvider != null && getOwner() != null) {
+ notationProvider.cleanListener(this, getOwner());
+ }
this.notationProvider = np;
}
}
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.