Author: thn
Date: 2011-02-28 01:56:30-0800
New Revision: 19082

Modified:
   trunk/src/argouml-app/src/org/argouml/uml/ui/TabTaggedValuesModel.java

Log:
UML2: a first support for multivalued tagged values

Modified: trunk/src/argouml-app/src/org/argouml/uml/ui/TabTaggedValuesModel.java
Url: 
http://argouml.tigris.org/source/browse/argouml/trunk/src/argouml-app/src/org/argouml/uml/ui/TabTaggedValuesModel.java?view=diff&pathrev=19082&r1=19081&r2=19082
==============================================================================
--- trunk/src/argouml-app/src/org/argouml/uml/ui/TabTaggedValuesModel.java      
(original)
+++ trunk/src/argouml-app/src/org/argouml/uml/ui/TabTaggedValuesModel.java      
2011-02-28 01:56:30-0800
@@ -42,6 +42,7 @@
 import java.beans.PropertyChangeEvent;
 import java.beans.PropertyChangeListener;
 import java.beans.VetoableChangeListener;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
 import java.util.List;
@@ -184,7 +185,8 @@
         if (row == tvs.size()) {
             return "";
         }
-        Object tv = tvs.toArray()[row];
+        Object[] tva = tvs.toArray();
+        Object tv = tva[row];
         if (col == 0) {
             Object n = Model.getFacade().getTagDefinition(tv);
             if (n == null) {
@@ -201,7 +203,20 @@
                 return be;
             } else {
                 Object value = Model.getFacade().getValueOfTag(target, tv);
-                // TODO: handle list
+                if (value instanceof Collection) {
+                    // handle multivalued tagged value
+                    int n = -1;
+                    for (int i = 0; i <= row; i++) {
+                        if (tva[i] == tv) {
+                            n++;
+                        }
+                    }
+                    if (n != -1) {
+                        value = ((Collection) value).toArray()[n];
+                    } else {
+                        value = "";
+                    }
+                }
                 return value.toString();
             }
         }
@@ -243,8 +258,28 @@
                     Model.getExtensionMechanismsHelper().setDataValues(tv,
                             new String[] {(String) aValue});
                 } else {
-                    // TODO: handle list
-                    Object value = aValue;
+                    Object[] tva = tvs.toArray();
+                    Object value = Model.getFacade().getValueOfTag(target, tv);
+                    if (value instanceof Collection) {
+                        // handle multivalued tagged value
+                        Iterator iter = ((Collection) value).iterator();
+                        Collection values = new ArrayList();
+                        for (int i = 0; i < tva.length; i++) {
+                            if (tva[i] == tva[rowIndex]) {
+                                if (i == rowIndex) {
+                                    values.add(aValue);
+                                    if (iter.hasNext()) {
+                                        iter.next();
+                                    }
+                                } else if (iter.hasNext()) {
+                                    values.add(iter.next());
+                                }
+                            }
+                            value = values;
+                        }
+                    } else {
+                        value = aValue;
+                    }
                     Model.getExtensionMechanismsHelper().setTaggedValue(
                             target, tv, value);
                 }
@@ -290,8 +325,6 @@
             Object tagValue = values[1];
             Model.getExtensionMechanismsHelper()
                     .addTaggedValue(target, tagType);
-            // Model.getExtensionMechanismsHelper().setDataValues(tagType,
-            // new String[] {tagValue});
         }
 
         // Since we aren't sure of ordering, fire event for whole table

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

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

Reply via email to