Author: tfmorris
Date: 2008-08-27 15:10:05-0700
New Revision: 15637
Modified:
trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java
Log:
RESOLVED - task 5307: Multiplicity outside the Model
http://argouml.tigris.org/issues/show_bug.cgi?id=5307
Modified: trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java?view=diff&rev=15637&p1=trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java&p2=trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java&r1=15636&r2=15637
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java (original)
+++ trunk/src/argouml-app/src/org/argouml/uml/ui/UMLMultiplicityPanel.java 2008-08-27 15:10:05-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
@@ -52,7 +52,7 @@
private JCheckBox checkBox;
private MultiplicityComboBoxModel multiplicityComboBoxModel;
- private static List multiplicityList = new ArrayList();
+ private static List<String> multiplicityList = new ArrayList<String>();
static {
multiplicityList.add("1");
@@ -93,6 +93,7 @@
* method can be removed once JRE5 is no longer supported.
* @return the preferred dimension
*/
+ @Override
public Dimension getPreferredSize() {
return new Dimension(
super.getPreferredSize().width,
@@ -105,8 +106,11 @@
Object target = multiplicityComboBoxModel.getTarget();
Object multiplicity = Model.getFacade().getMultiplicity(target);
if (Model.getFacade().isAMultiplicity(item)) {
- if (!multiplicity.equals(item)) {
+ if (!item.equals(multiplicity)) {
Model.getCoreHelper().setMultiplicity(target, item);
+ if (multiplicity != null) {
+ Model.getUmlFactory().delete(multiplicity);
+ }
}
} else if (item instanceof String) {
if (!item.equals(Model.getFacade().toString(multiplicity))) {
@@ -114,9 +118,15 @@
target,
Model.getDataTypesFactory().createMultiplicity(
(String) item));
+ if (multiplicity != null) {
+ Model.getUmlFactory().delete(multiplicity);
+ }
}
} else {
- Model.getCoreHelper().setMultiplicity(target, null);
+ if (multiplicity != null) {
+ Model.getCoreHelper().setMultiplicity(target, null);
+ Model.getUmlFactory().delete(multiplicity);
+ }
}
}
}
@@ -154,30 +164,34 @@
*
* {@inheritDoc}
*/
+ @Override
protected void doOnEdit(Object item) {
String text = (String) item;
- Object multi = null;
try {
- multi = Model.getDataTypesFactory().createMultiplicity(text);
+ Object multi =
+ Model.getDataTypesFactory().createMultiplicity(text);
+ if (multi != null) {
+ setSelectedItem(text);
+ Model.getUmlFactory().delete(multi);
+ return;
+ }
} catch (IllegalArgumentException e) {
Object o = search(text);
- if (search(text) != null ) {
- multi = o;
+ if (o != null ) {
+ setSelectedItem(o);
+ return;
}
}
- if (multi != null) {
- setSelectedItem(multi);
- } else {
- getEditor().setItem(getSelectedItem());
- }
+ getEditor().setItem(getSelectedItem());
}
/**
* When we change target make sure that the check box is only selected
- * if the multiplicty exists
+ * if the multiplicity exists
* @param e
* @see org.argouml.uml.ui.UMLComboBox2#targetSet(org.argouml.ui.targetmanager.TargetEvent)
*/
+ @Override
public void targetSet(TargetEvent e) {
super.targetSet(e);
Object target = getTarget();
@@ -185,6 +199,9 @@
&& Model.getFacade().getMultiplicity(target) != null;
multiplicityComboBox.setEnabled(exists);
multiplicityComboBox.setEditable(exists);
+ // This will cause itemStateChanged to be called because of
+ // us rather than a user action, but we don't care because we're
+ // going to check if the value is the same
checkBox.setSelected(exists);
}
}
@@ -226,25 +243,32 @@
/*
* @see org.argouml.uml.ui.UMLComboBoxModel2#addElement(java.lang.Object)
*/
+ @Override
public void addElement(Object o) {
if (o == null) {
return;
}
+ String text;
if (Model.getFacade().isAMultiplicity(o)) {
- o = Model.getFacade().toString(o);
- if ("".equals(o)) {
- o = "1";
+ text = Model.getFacade().toString(o);
+ if ("".equals(text)) {
+ text = "1";
}
+ } else if (o instanceof String) {
+ text = (String) o;
+ } else {
+ return;
}
- if (!multiplicityList.contains(o) && isValidElement(o)) {
- multiplicityList.add(o);
+ if (!multiplicityList.contains(text) && isValidElement(text)) {
+ multiplicityList.add(text);
}
- super.addElement(o);
+ super.addElement(text);
}
/*
* @see javax.swing.ComboBoxModel#setSelectedItem(java.lang.Object)
*/
+ @Override
public void setSelectedItem(Object anItem) {
addElement(anItem);
super.setSelectedItem((anItem == null) ? null
@@ -268,22 +292,30 @@
}
public void itemStateChanged(ItemEvent e) {
+ Object target = getTarget();
+ Object oldValue = Model.getFacade().getMultiplicity(target);
if (e.getStateChange() == ItemEvent.SELECTED) {
String comboText =
(String) multiplicityComboBox.getSelectedItem();
+ if (comboText.equals(Model.getFacade().toString(oldValue))) {
+ return;
+ }
Object multi =
Model.getDataTypesFactory().createMultiplicity(comboText);
if (multi == null) {
- Model.getCoreHelper().setMultiplicity(getTarget(), "1");
+ Model.getCoreHelper().setMultiplicity(target, "1");
} else {
- Model.getCoreHelper().setMultiplicity(getTarget(), multi);
+ Model.getCoreHelper().setMultiplicity(target, multi);
}
multiplicityComboBox.setEnabled(true);
multiplicityComboBox.setEditable(true);
} else {
multiplicityComboBox.setEnabled(false);
multiplicityComboBox.setEditable(false);
- Model.getCoreHelper().setMultiplicity(getTarget(), null);
+ Model.getCoreHelper().setMultiplicity(target, null);
+ }
+ if (oldValue != null) {
+ Model.getUmlFactory().delete(oldValue);
}
}
}
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.