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]].
