svn commit: r17560 - trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels: module ui

Michiel van der Wulp <[email protected]>
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: mvw
Date: 2009-11-29 22:56:31-0800
New Revision: 17560

Modified:
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/module/TempListener.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLChangeExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLConditionExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLDefaultValueExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionBodyField.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionLanguageField.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionPanel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLInitialValueExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLRecurrenceExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLScriptExpressionModel.java
   trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTimeExpressionModel.java

Log:
Fix for issue 5215: Make the expression fields on the new proppanels work.

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/module/TempListener.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/module/TempListener.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/module/TempListener.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/module/TempListener.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id: XmlPropertyPanelsModule.java 17494 2009-11-19 20:14:02Z bobtarling $
-// Copyright (c) 2008 The Regents of the University of California. All
+// Copyright (c) 2008-2009 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
@@ -34,30 +34,34 @@
 import org.argouml.ui.targetmanager.TargetListener;
 
 public class TempListener implements TargetListener {
-    
+
     private static final Logger LOG = Logger.getLogger(TempListener.class);
     private TempTabPage tab;
     private JPanel lastPanel;
-    
+
     TempListener(TempTabPage tab) {
         this.tab = tab;
     }
-    
+
     public void targetAdded(TargetEvent e) {
+	setTarget(e.getNewTarget());
     }
 
     public void targetRemoved(TargetEvent e) {
-        // TODO Auto-generated method stub
-        
+	setTarget(e.getNewTarget());
     }
 
     public void targetSet(TargetEvent e) {
+        setTarget(e.getNewTarget());
+    }
+
+    private void setTarget(Object target) {
         try {
-            LOG.info("TARGET SET" + e.getNewTarget());
+            LOG.info("TARGET SET" + target);
             if (lastPanel != null) {
                 tab.remove(lastPanel);
             }
-            lastPanel = XMLPropPanelFactory.getInstance().createPropPanel(e.getNewTarget());
+            lastPanel = XMLPropPanelFactory.getInstance().createPropPanel(target);
             tab.add(lastPanel, BorderLayout.CENTER);
         } catch (Exception ex) {
             //

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLChangeExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLChangeExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLChangeExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLChangeExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2006-2008 The Regents of the University of California. All
+// Copyright (c) 2006-2009 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
@@ -26,14 +26,11 @@
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
 import org.argouml.ui.targetmanager.TargetManager;
-import org.argouml.uml.ui.UMLExpressionModel2;
-import org.argouml.uml.ui.UMLUserInterfaceContainer;
 
 /**
  * The model for the boolean expression of a ChangeEvent.
- * 
+ *
  * @author michiel, penyaskito
  */
 class UMLChangeExpressionModel extends UMLExpressionModel {
@@ -68,14 +65,15 @@
         if (target == null) {
             throw new IllegalStateException("There is no target");
         }
+        Model.getStateMachinesHelper().setChangeExpression(target, null);
         Model.getStateMachinesHelper().setChangeExpression(target, expression);
     }
 
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
+    public Object newExpression(String lang, String body) {
         LOG.debug("new boolean expression");
-        return Model.getDataTypesFactory().createBooleanExpression("", "");
+        return Model.getDataTypesFactory().createBooleanExpression(lang, body);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLConditionExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLConditionExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLConditionExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLConditionExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2003-2006 The Regents of the University of California. All
+// Copyright (c) 2003-2009 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
@@ -24,11 +24,8 @@
 
 package org.argouml.core.propertypanels.ui;
 
-import java.beans.PropertyChangeEvent;
-
 import org.apache.log4j.Logger;
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
 import org.argouml.ui.targetmanager.TargetManager;
 
 /**
@@ -42,7 +39,7 @@
         Logger.getLogger(UMLConditionExpressionModel.class);
 
     /**
-     * The constructor.    
+     * The constructor.
      */
     public UMLConditionExpressionModel(Object target) {
         super(target, "condition");
@@ -65,14 +62,15 @@
         if (target == null) {
             throw new IllegalStateException("There is no target");
         }
+        Model.getUseCasesHelper().setCondition(target, null);
         Model.getUseCasesHelper().setCondition(target, expression);
     }
 
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
+    public Object newExpression(String lang, String body) {
         LOG.debug("new boolean expression");
-        return Model.getDataTypesFactory().createBooleanExpression("", "");
+        return Model.getDataTypesFactory().createBooleanExpression(lang, body);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLDefaultValueExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLDefaultValueExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLDefaultValueExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLDefaultValueExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2008 The Regents of the University of California. All
+// Copyright (c) 2008-2009 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
@@ -25,15 +25,15 @@
 package org.argouml.core.propertypanels.ui;
 
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
 import org.argouml.ui.targetmanager.TargetManager;
 
 /**
+ * The model for the expression for a default value of a Parameter.
  *
  * @author penyaskito
  */
 class UMLDefaultValueExpressionModel extends UMLExpressionModel {
-    
+
     /**
      * The constructor.
      *
@@ -61,6 +61,7 @@
         Object target = TargetManager.getInstance().getTarget();
 
         if (target != null) {
+            Model.getCoreHelper().setDefaultValue(target, null);
             Model.getCoreHelper().setDefaultValue(target, expression);
         }
         else {
@@ -72,23 +73,8 @@
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
-        return Model.getDataTypesFactory().createExpression("", "");
-    }
-
-    public void targetAdded(TargetEvent e) {
-        // TODO: Auto-generated method stub
-        
-    }
-
-    public void targetRemoved(TargetEvent e) {
-        // TODO: Auto-generated method stub
-        
-    }
-
-    public void targetSet(TargetEvent e) {
-        // TODO: Auto-generated method stub
-        
+    public Object newExpression(String lang, String body) {
+        return Model.getDataTypesFactory().createExpression(lang, body);
     }
 
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionBodyField.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionBodyField.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionBodyField.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionBodyField.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2008 The Regents of the University of California. All
+// Copyright (c) 1996-2009 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
@@ -23,9 +23,6 @@
 // UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
 
 package org.argouml.core.propertypanels.ui;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-
 import javax.swing.JTextArea;
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
@@ -52,13 +49,14 @@
 
     /**
      * The constructor.
-     * 
+     *
      * @param expressionModel
      *            Expression model, should be shared between Language and Body
      *            fields
      * @param notify
      *            Set to true to forward events to model. Only one of Language
      *            and Body fields should have this set to true.
+     *            TODO: MVW: I do not understand that.
      */
     public UMLExpressionBodyField(UMLExpressionModel expressionModel,
 				  boolean notify) {
@@ -68,11 +66,11 @@
         setToolTipText(Translator.localize("label.body.tooltip"));
         setFont(LookAndFeelMgr.getInstance().getStandardFont());
         setRows(2); // make it stretch vertically
-        
+
         update();
     }
 
-    private void update() {
+    void update() {
         String oldText = getText();
         String newText = model.getBody();
 

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2004-2006 The Regents of the University of California. All
+// Copyright (c) 2004-2009 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
@@ -25,12 +25,11 @@
 package org.argouml.core.propertypanels.ui;
 
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
 import org.argouml.ui.targetmanager.TargetManager;
 
 /**
  * The model for a UML Expression that is obtained from its "parent"
- * by getExpression - hence: Guard, ChangeEvent, TimeEvent.
+ * by getExpression - hence: Guard, ChangeEvent.
  *
  * @author Michiel, Penyaskito
  */
@@ -56,14 +55,19 @@
      * @see org.argouml.uml.ui.UMLExpressionModel2#setExpression(java.lang.Object)
      */
     public void setExpression(Object expr) {
-        Model.getStateMachinesHelper()
-        	.setExpression(TargetManager.getInstance().getTarget(), expr);
+	assert (expr == null) || Model.getFacade().isAExpression(expr);
+	Object target = TargetManager.getInstance().getTarget();
+	assert Model.getFacade().isAGuard(target)
+		|| Model.getFacade().isAChangeEvent(target);
+	Model.getStateMachinesHelper().setExpression(target, null);
+	/* If we do not set it to null first, then we get a MDR DebugException: */
+	Model.getStateMachinesHelper().setExpression(target, expr);
     }
 
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
-        return Model.getDataTypesFactory().createBooleanExpression("", "");
+    public Object newExpression(String lang, String body) {
+        return Model.getDataTypesFactory().createBooleanExpression(lang, body);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionLanguageField.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionLanguageField.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionLanguageField.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionLanguageField.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2006 The Regents of the University of California. All
+// Copyright (c) 1996-2009 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
@@ -46,6 +46,7 @@
      * Language and Body fields
      * @param n Only one of Language and Body fields should
      * forward events to model
+     * TODO: MVW: I do not understand that.
      */
     public UMLExpressionLanguageField(UMLExpressionModel m, boolean n) {
         model = m;
@@ -56,7 +57,7 @@
         update();
     }
 
-    private void 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/UMLExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 1996-2007 The Regents of the University of California. All
+// Copyright (c) 1996-2009 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
@@ -24,19 +24,55 @@
 
 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;
+
+import org.apache.log4j.Logger;
 import org.argouml.model.Model;
 
 /**
- * @author mkl, penyaskito
+ * The model for Expressions.
+ * The target is the UML element to which this Expression is attached.
+ *
+ * The ChangeEvent/ChangeListener handling is inspired by
+ * javax.swing.DefaultBoundedRangeModel.
+ * It listens to UML model changes not caused by us,
+ * which need to trigger an update of the UI rendering.
+ *
+ * @author mkl, penyaskito, mvw
  */
-abstract class UMLExpressionModel {
-    
+abstract class UMLExpressionModel
+	implements PropertyChangeListener {
+
+    private static final Logger LOG =
+        Logger.getLogger(UMLExpressionModel.class);
+
     private Object target;
     private String propertyName;
-    private Object/*MExpression*/ expression;
-    private boolean mustRefresh;
+
+    /** 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 boolean mustRefresh;
     private static final String EMPTYSTRING = "";
 
+    /** The listeners waiting for model changes. */
+    protected EventListenerList listenerList = new EventListenerList();
+
+    /**
+     * Only one <code>ChangeEvent</code> is needed per model instance
+     * since the event's only (read-only) state is the expression.  The source
+     * of events generated here is always "this".
+     */
+    protected transient ChangeEvent changeEvent = null;
+
     /**
      * The constructor.
      *
@@ -46,13 +82,42 @@
     public UMLExpressionModel(Object target, String name) {
         this.target = target;
         propertyName = name;
-        mustRefresh = true;
+//        mustRefresh = true;
+        startListeningForModelChanges();
+    }
+
+    protected void startListeningForModelChanges() {
+	if (Model.getFacade().isAUMLElement(target)) {
+	    Model.getPump().addModelEventListener(this, target,
+		    propertyName);
+	}
+	LOG.debug(">>Start listening for UML changes...");
+    }
+
+    protected void stopListeningForModelChanges() {
+	if (Model.getFacade().isAUMLElement(target)) {
+	    Model.getPump().removeModelEventListener(this, target,
+	                propertyName);
+	}
+	LOG.debug(">>Stop listening for UML changes...");
+    }
+
+    public void propertyChange(PropertyChangeEvent e) {
+	if (propertyName.equals(e.getPropertyName())) {
+	    if (rememberExpression != e.getNewValue()) {
+		fireStateChanged();
+		LOG.debug(">>UML expression changed.");
+	    } else {
+		/* This should not happen. */
+		LOG.debug(">>Got an event for a modelchange that we inflicted ourselves...");
+	    }
+	}
     }
 
     protected Object getTarget() {
         return target;
     }
-    
+
     /**
      * @return the expression
      */
@@ -64,18 +129,15 @@
     public abstract void setExpression(Object expr);
 
     /**
-     * @return a new expression
+     * @return a new expression with given language and body
      */
-    public abstract Object newExpression();
-
+    public abstract Object newExpression(String language, String body);
 
     /**
      * @return the language of the expression
      */
     public String getLanguage() {
-        if (mustRefresh) {
-            expression = getExpression();
-        }
+	Object expression = getExpression();
         if (expression == null) {
             return EMPTYSTRING;
         }
@@ -86,9 +148,7 @@
      * @return The body text of the expression.
      */
     public String getBody() {
-        if (mustRefresh) {
-            expression = getExpression();
-        }
+        Object expression = getExpression();
         if (expression == null) {
             return EMPTYSTRING;
         }
@@ -100,6 +160,7 @@
      */
     public void setLanguage(String lang) {
 
+	Object expression = getExpression();
         boolean mustChange = true;
         if (expression != null) {
             String oldValue =
@@ -123,6 +184,8 @@
      * @param body the body text of the expression
      */
     public void setBody(String body) {
+
+	Object expression = getExpression();
         boolean mustChange = true;
         if (expression != null) {
             Object oldValue = Model.getDataTypesHelper().getBody(expression);
@@ -144,17 +207,72 @@
     }
 
     /**
+     * This is only called if we already know that the values differ.
+     *
      * @param lang the language of the expression
      * @param body the body text of the expression
      */
     private void setExpression(String lang, String body) {
+	assert lang != null;
+	assert body != null;
+
         // Expressions are DataTypes, not independent model elements
         // be careful not to reuse them
-        if (mustRefresh || expression == null) {
-            expression = newExpression();
+	rememberExpression = getExpression();
+	stopListeningForModelChanges();
+	if (rememberExpression != null) {
+	    Model.getUmlFactory().delete(rememberExpression);
+	}
+	if (lang.length() == 0 && body.length()==0) {
+	    rememberExpression = null;
+	} else {
+	    rememberExpression = newExpression(lang, body);
+	}
+	setExpression(rememberExpression);
+	startListeningForModelChanges();
+    }
+
+    /**
+     * Adds a <code>ChangeListener</code>.
+     * The change listeners are run each
+     * time the expression changes.
+     *
+     * @param l the ChangeListener to add
+     * @see #removeChangeListener
+     */
+    public void addChangeListener(ChangeListener l) {
+        listenerList.add(ChangeListener.class, l);
+        LOG.debug(">>Add listener");
+    }
+
+    /**
+     * 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);
+        LOG.debug(">>Remove listener");
+    }
+
+    /**
+     * Runs each <code>ChangeListener</code>'s
+     * <code>stateChanged</code> method.
+     *
+     * @see #setRangeProperties
+     * @see EventListenerList
+     */
+    protected void fireStateChanged() {
+	LOG.debug(">>Fire state changed to listeners.");
+        Object[] listeners = listenerList.getListenerList();
+        for (int i = listeners.length - 2; i >= 0; i -=2 ) {
+            if (listeners[i] == ChangeListener.class) {
+                if (changeEvent == null) {
+                    changeEvent = new ChangeEvent(this);
+                }
+                ((ChangeListener)listeners[i+1]).stateChanged(changeEvent);
+            }
         }
-        expression = Model.getDataTypesHelper().setLanguage(expression, lang);
-        expression = Model.getDataTypesHelper().setBody(expression, body);
-        setExpression(expression);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionPanel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionPanel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionPanel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLExpressionPanel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2008 The Regents of the University of California. All
+// Copyright (c) 2008-2009 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
@@ -27,34 +27,58 @@
 import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.border.TitledBorder;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
 
+import org.apache.log4j.Logger;
 import org.tigris.swidgets.LabelledLayout;
 
 
 /**
+ * The panel that shows an Expression for an other UML element.
+ * There are 8 kinds of Expressions defined in the UML 1.4.2.
  *
  * @author penyaskito
  */
-class UMLExpressionPanel extends JPanel {
+class UMLExpressionPanel extends JPanel
+	implements ChangeListener {
+
+    private static final Logger LOG =
+        Logger.getLogger(UMLExpressionPanel.class);
 
     private final UMLExpressionModel model;
     private final UMLExpressionLanguageField languageField;
     private final UMLExpressionBodyField bodyField;
-    
+
     public UMLExpressionPanel(UMLExpressionModel model, String title) {
-        
+
         super(new LabelledLayout());
+        LOG.debug(">>New Expression panel created");
+
         TitledBorder border = new TitledBorder(title);
-        this.setBorder(border);        
-        
+        this.setBorder(border);
+
         this.model = model;
         this.languageField = new UMLExpressionLanguageField(model,
                 false);
         this.bodyField = new UMLExpressionBodyField(
                 model, true);
-        
-        add(languageField);        
+
+        add(languageField);
         add(new JScrollPane(bodyField));
+
+        model.addChangeListener(this);
+    }
+
+    @Override
+    public void removeNotify() {
+	model.removeChangeListener(this);
+	super.removeNotify();
+    }
+
+    public void stateChanged(ChangeEvent e) {
+	LOG.debug(">>Values shown on panel are changed");
+	bodyField.update();
+	languageField.update();
     }
-    
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLInitialValueExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLInitialValueExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLInitialValueExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLInitialValueExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2008 The Regents of the University of California. All
+// Copyright (c) 2008-2009 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
@@ -31,13 +31,13 @@
  * @author jaap.branderhorst
  * @author penyaskito
  */
-class UMLInitialValueExpressionModel 
+class UMLInitialValueExpressionModel
     extends UMLExpressionModel {
 
-    
-    
+
+
     public UMLInitialValueExpressionModel(Object target) {
-        super(target, "initial value");
+        super(target, "initialValue");
     }
 
     /**
@@ -45,21 +45,18 @@
      * @see org.argouml.uml.ui.UMLExpressionModel2#getExpression()
      */
     @Override
-    public Object getExpression() {        
-        Object target = null; //TODO getTarget();
+    public Object getExpression() {
+        Object target = getTarget();
         if (target == null) {
             return null;
         }
+        assert Model.getFacade().isAAttribute(target);
         return Model.getFacade().getInitialValue(target);
     }
 
-    /**
-     * @return
-     * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
-     */
     @Override
-    public Object newExpression() {
-        return Model.getDataTypesFactory().createExpression("", "");
+    public Object newExpression(String lang, String body) {
+        return Model.getDataTypesFactory().createExpression(lang, body);
     }
 
     /**
@@ -68,7 +65,11 @@
      */
     @Override
     public void setExpression(Object expression) {
-        Object target = null; // TODO  getTarget();
+        Object target = getTarget();
+        assert Model.getFacade().isAAttribute(target);
+        assert (expression == null) || Model.getFacade().isAExpression(expression);
+        /* If we do not set it to null first, then we get a MDR DebugException: */
+        Model.getCoreHelper().setInitialValue(target, null);
         Model.getCoreHelper().setInitialValue(target, expression);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLRecurrenceExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLRecurrenceExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLRecurrenceExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLRecurrenceExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2003-2006 The Regents of the University of California. All
+// Copyright (c) 2003-2009 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
@@ -26,7 +26,6 @@
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
 import org.argouml.ui.targetmanager.TargetManager;
 
 /**
@@ -66,14 +65,15 @@
         if (target == null) {
             throw new IllegalStateException("There is no target");
         }
+        Model.getCommonBehaviorHelper().setRecurrence(target, null);
         Model.getCommonBehaviorHelper().setRecurrence(target, expression);
     }
 
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
+    public Object newExpression(String lang, String body) {
         LOG.debug("new boolean expression");
-        return Model.getDataTypesFactory().createIterationExpression("", "");
+        return Model.getDataTypesFactory().createIterationExpression(lang, body);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLScriptExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLScriptExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLScriptExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLScriptExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2003-2006 The Regents of the University of California. All
+// Copyright (c) 2003-2009 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
@@ -25,10 +25,9 @@
 package org.argouml.core.propertypanels.ui;
 
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
-import org.argouml.ui.targetmanager.TargetManager;
 
 /**
+ * Model for the ActionExpression that is the script of an Action.
  *
  * @author mkl, penyaskito
  *
@@ -56,14 +55,14 @@
      * @see org.argouml.uml.ui.UMLExpressionModel2#setExpression(java.lang.Object)
      */
     public void setExpression(Object expression) {
-        Model.getCommonBehaviorHelper()
-        	.setScript(getTarget(), expression);
+	Model.getCommonBehaviorHelper().setScript(getTarget(), null);
+	Model.getCommonBehaviorHelper().setScript(getTarget(), expression);
     }
 
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
-        return Model.getDataTypesFactory().createActionExpression("", "");
+    public Object newExpression(String lang, String body) {
+        return Model.getDataTypesFactory().createActionExpression(lang, body);
     }
 }

Modified: trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTimeExpressionModel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTimeExpressionModel.java?view=diff&pathrev=17560&r1=17559&r2=17560
==============================================================================
--- trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTimeExpressionModel.java	(original)
+++ trunk/src/argouml-core-umlpropertypanels/src/org/argouml/core/propertypanels/ui/UMLTimeExpressionModel.java	2009-11-29 22:56:31-0800
@@ -1,5 +1,5 @@
 // $Id$
-// Copyright (c) 2003-2006 The Regents of the University of California. All
+// Copyright (c) 2003-2009 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
@@ -26,7 +26,6 @@
 
 import org.apache.log4j.Logger;
 import org.argouml.model.Model;
-import org.argouml.ui.targetmanager.TargetEvent;
 import org.argouml.ui.targetmanager.TargetManager;
 
 /**
@@ -64,30 +63,17 @@
         if (target == null) {
             throw new IllegalStateException("There is no target");
         }
+        /* If we do not set it to null first, then we get a MDR DebugException: */
+        Model.getStateMachinesHelper().setWhen(target, null);
         Model.getStateMachinesHelper().setWhen(target, expression);
     }
 
     /*
      * @see org.argouml.uml.ui.UMLExpressionModel2#newExpression()
      */
-    public Object newExpression() {
+    public Object newExpression(String lang, String body) {
         LOG.debug("new time expression");
-        return Model.getDataTypesFactory().createTimeExpression("", "");
-    }
-
-    public void targetAdded(TargetEvent e) {
-        // TODO: Auto-generated method stub
-        
-    }
-
-    public void targetRemoved(TargetEvent e) {
-        // TODO: Auto-generated method stub
-        
-    }
-
-    public void targetSet(TargetEvent e) {
-        // TODO: Auto-generated method stub
-        
+        return Model.getDataTypesFactory().createTimeExpression(lang, body);
     }
 
 }

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

To unsubscribe from this discussion, e-mail: [[email protected]].
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.