Author: mvw
Date: 2011-04-13 11:01:28-0700
New Revision: 19236

Modified:
   
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java

Log:
Fix the functionality of the checkbox for multiplicity on an attribute's 
proppanel.
Also fixed the deletion of unused Multiplicity elements outside the UML Model 
when using this checkbox.

Modified: 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java?view=diff&pathrev=19236&r1=19235&r2=19236
==============================================================================
--- 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
   (original)
+++ 
trunk/src/argouml-core-model-mdr/src/org/argouml/model/mdr/CoreHelperMDRImpl.java
   2011-04-13 11:01:28-0700
@@ -2995,10 +2995,19 @@
     }
 
     public void setMultiplicity(Object handle, String arg) {
-        setMultiplicity(handle,createMultiplicity(arg));
+        if (arg == null) {
+            setMultiplicityInternal(handle, null);
+        } else {
+            setMultiplicityInternal(handle,createMultiplicity(arg));
+        }
     }
 
-    private void setMultiplicity(Object handle, Multiplicity arg) {
+    /**
+     * @param handle shall not be null. Shall be one of AssociationRole, 
+     * ClassifierRole, StructuralFeature, AssociationEnd, TagDefinition.
+     * @param arg null is allowed
+     */
+    private void setMultiplicityInternal(Object handle, Multiplicity arg) {
         Multiplicity previousMult =
             (Multiplicity) Model.getFacade().getMultiplicity(handle);
         if (handle instanceof AssociationRole) {
@@ -3012,9 +3021,8 @@
         } else if (handle instanceof TagDefinition) {
             ((TagDefinition) handle).setMultiplicity(arg);
         }
-        if (previousMult != null &&
-                Model.getFacade().getModelElementContainer(previousMult)
-                == null) {
+        /* See issue 6038 for the reason behind the next statements: */
+        if (previousMult != null) {
             if (LOG.isDebugEnabled()) {
                 LOG.debug("Previous multiplicity of " + handle + " will be 
deleted." + arg);
             }
@@ -3029,13 +3037,16 @@
             return;
         }
         if (arg == null || arg instanceof Multiplicity) {
-            setMultiplicity(handle, (Multiplicity) arg);
+            setMultiplicityInternal(handle, (Multiplicity) arg);
         } else {
             throw new IllegalArgumentException("handle: " + handle + " or arg: 
"
                     + arg);
         }
     }
 
+    /**
+     * @param sarg may not be null
+     */
     private Multiplicity createMultiplicity(String sarg) {
         boolean allDigits = true;
         for (int i=0; i < sarg.length(); ++i) {
@@ -3065,7 +3076,7 @@
         Multiplicity arg = modelImpl.getDataTypesFactoryInternal()
                 .createMultiplicityInternal(lower, upper);
         
-        setMultiplicity(handle, arg);
+        setMultiplicityInternal(handle, arg);
     }
 
     public void setName(final Object handle, final String name) {

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

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

Reply via email to