Author: bobtarling
Date: 2010-12-18 04:19:08-0800
New Revision: 18924

Modified:
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionBodyField.java
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionLanguageField.java
   
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionModel.java

Log:
Issue 6174: Make sure all old links to the previous expression model are 
removed before attaching the body and loguage controls to the new expression 
model

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java?view=diff&pathrev=18924&r1=18923&r2=18924
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
     (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/model/GetterSetterManagerImpl.java
     2010-12-18 04:19:08-0800
@@ -1895,6 +1895,7 @@
       
         @Override
         public void set(Object modelElement, Object value) {
+            LOG.info("About to call setBody " + modelElement + " / " + value);
             Model.getCoreHelper().setBody(modelElement, value);
         }
 

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionBodyField.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionBodyField.java?view=diff&pathrev=18924&r1=18923&r2=18924
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionBodyField.java
    (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionBodyField.java
    2010-12-18 04:19:08-0800
@@ -73,10 +73,6 @@
         setFont(LookAndFeelMgr.getInstance().getStandardFont());
         setRows(2); // make it stretch vertically
 
-        update();
-    }
-
-    void update() {
         String oldText = getText();
         String newText = model.getBody();
 

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionLanguageField.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionLanguageField.java?view=diff&pathrev=18924&r1=18923&r2=18924
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionLanguageField.java
        (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionLanguageField.java
        2010-12-18 04:19:08-0800
@@ -62,10 +62,6 @@
         getDocument().addDocumentListener(this);
         setToolTipText(Translator.localize("label.language.tooltip"));
         setFont(LookAndFeelMgr.getInstance().getStandardFont());
-        update();
-    }
-
-    void update() {
         String oldText = getText();
         String newText = model.getLanguage();
         if (oldText == null || newText == null || !oldText.equals(newText)) {

Modified: 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionModel.java?view=diff&pathrev=18924&r1=18923&r2=18924
==============================================================================
--- 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionModel.java
        (original)
+++ 
trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/ExpressionModel.java
        2010-12-18 04:19:08-0800
@@ -38,9 +38,6 @@
 
 package org.argouml.core.propertypanels.ui;
 
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
 import javax.swing.event.ChangeEvent;
 import javax.swing.event.ChangeListener;
 import javax.swing.event.EventListenerList;
@@ -61,20 +58,21 @@
  *
  * @author mkl, penyaskito, mvw, thn
  */
-class ExpressionModel implements PropertyChangeListener {
+class ExpressionModel {
 
     private static final Logger LOG =
         Logger.getLogger(ExpressionModel.class);
 
+    /**
+     * The target model element
+     * In UML1.x this is the element that owns the expression.
+     * In UML2.x this is the expression itself
+     * TODO: This makes behaviour different enough that separate subclasses
+     * should be considered.
+     */
     private Object target;
     private String propertyName;
 
-    /** This member is only used when we set the expression ourselves.
-     * In this case, we do not wish to receive UML model change events
-     * for this self-inflicted change.
-     * So, this member is used to detect this situation. */
-    private Object rememberExpression;
-
     private final GetterSetterManager getterSetterManager;
     
     private final Class<?> type;
@@ -97,40 +95,20 @@
             final Object umlElement,
             final GetterSetterManager getterSetterManager) {
         this.target = umlElement;
+        LOG.info("Creating ExpressionModel with target " + target);
         this.propertyName = propertyName;
         this.getterSetterManager = getterSetterManager;
         this.type = type;
-        addModelEventListener();
     }
     
-
-    public void addModelEventListener() {
-        Model.getPump().addModelEventListener(this, target, propertyName);
-    }
-
-    public void removeModelEventListener() {
-        Model.getPump().removeModelEventListener(this, target, propertyName);
-    }
-
-    public void propertyChange(PropertyChangeEvent e) {
-       if (propertyName.equals(e.getPropertyName())) {
-           if (rememberExpression != e.getNewValue()) {
-               fireStateChanged();
-           }
-       }
-    }
-
-    protected Object getTarget() {
-        return target;
-    }
-
     /**
      * @return the expression
      */
-    public Object getExpression() {
+    private Object getExpression() {
         Object expression = null;
         if (Model.getFacade().getUmlVersion().charAt(0) == '1') {
             expression = getterSetterManager.get(target, propertyName, type);
+            LOG.info("Got the expression " + expression);
         } else {
             // in UML2, the target is already the "expression" (Opaque...)
             expression = target;
@@ -142,6 +120,7 @@
      * @param expr the expression
      */
     public void setExpression(Object expr) {
+       LOG.info("Setting the expression to " + expr);
         getterSetterManager.set(target, expr, propertyName);
     }
 
@@ -236,8 +215,8 @@
             // Expressions are DataTypes, not independent model elements
             // be careful not to reuse them
             final Object currentExpression = getExpression();
-            removeModelEventListener();
             if (currentExpression != null) {
+               LOG.info("Deleting the current expression " + 
currentExpression);
                 Model.getUmlFactory().delete(currentExpression);
             }
             final Object newExpression;
@@ -247,7 +226,6 @@
                 newExpression = newExpression(lang, body);
             }
             setExpression(newExpression);
-            addModelEventListener();
        } else {
            // reuse Opaque..., just set it's attributes
            Object expression = getExpression();
@@ -270,16 +248,6 @@
     }
 
     /**
-     * Removes a <code>ChangeListener</code>.
-     *
-     * @param l the <code>ChangeListener</code> to remove
-     * @see #addChangeListener
-     */
-    public void removeChangeListener(ChangeListener l) {
-        listenerList.remove(ChangeListener.class, l);
-    }
-
-    /**
      * Runs each <code>ChangeListener</code>'s
      * <code>stateChanged</code> method.
      *

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

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

Reply via email to