svn commit: r19081 - trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: thn
Date: 2011-02-28 01:54:59-0800
New Revision: 19081

Modified:
   trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java

Log:
support for getting multivalued tagged values

Modified: trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java
Url: http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java?view=diff&pathrev=19081&r1=19080&r2=19081
==============================================================================
--- trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java	(original)
+++ trunk/src/argouml-core-model-euml/src/org/argouml/model/euml/FacadeEUMLImpl.java	2011-02-28 01:54:59-0800
@@ -1650,9 +1650,17 @@
     }
 
     public String getValueOfTag(Object handle) {
-        throw new NotYetImplementedException();
+        // This doesn't work in UML2: both owner and property needed!
+        throw new UnsupportedOperationException(); 
     }
 
+    /*
+     * Returns the value of an element's property (tagged value). This method
+     * makes sure that a Collection of values is returned if and only if the
+     * property is multivalued (upper multiplicity value greater 1).
+     * 
+     * @see org.argouml.model.Facade#getValueOfTag(java.lang.Object, java.lang.Object)
+     */
     public Object getValueOfTag(Object handle, Object property) {
         if (!(handle instanceof Element)) {
             return null;
@@ -1665,9 +1673,29 @@
         Stereotype stereotype = (Stereotype) prop.eContainer();
         Object value = UMLUtil.getTaggedValue(elem, stereotype.getQualifiedName(),
                 prop.getName());
+        if (prop.isMultivalued() && !(value instanceof Collection)) {
+            Collection newValue = new ArrayList();
+            newValue.add(value);
+            value = newValue;
+        }
+        // workaround for missing ability to parse "*"
+        if (value instanceof Collection) {
+            Collection newValue = new ArrayList();
+            for (Object v : ((Collection) value)) {
+                newValue.add(postprocessPropertyValue(prop, v));
+            }
+            value = newValue;
+        } else {
+            value = postprocessPropertyValue(prop, value);
+        }
+        return value;
+    }
+
+    private Object postprocessPropertyValue(Property prop, Object value) {
+        // workaround for missing ability to parse "*"
         if (prop.getType() != null
                 && "UnlimitedNatural".equals(prop.getType().getName())
-                && (new Integer(LiteralUnlimitedNatural.UNLIMITED)).equals(value)) {
+                && ((Integer) value).intValue() == LiteralUnlimitedNatural.UNLIMITED) {
             value = "*";
         }
         return value;

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

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.