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