svn commit: r15577 - branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java

[email protected]
Newsgroups gmane.comp.lang.uml.argouml.cvs
Message-ID <[email protected]>
Author: maurelio1234
Date: 2008-08-17 11:57:17-0700
New Revision: 15577

Modified:
   branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java

Log:
replacing OCLEvaluator by DefaultOclEvaluator



Modified: branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java
Url: http://argouml.tigris.org/source/browse/argouml/branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java?view=diff&rev=15577&p1=branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java&p2=branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java&r1=15576&r2=15577
==============================================================================
--- branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java	(original)
+++ branches/gsoc2008/work_issue5042_merged15552_maurelio1234/src/org/argouml/ocl/OCLEvaluator.java	2008-08-17 11:57:17-0700
@@ -24,11 +24,17 @@
 
 package org.argouml.ocl;
 
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.Iterator;
 
 import org.argouml.i18n.Translator;
 import org.argouml.model.Model;
-import org.tigris.gef.base.Diagram;
+import org.argouml.profile.internal.ocl.DefaultOclEvaluator;
+import org.argouml.profile.internal.ocl.InvalidOclException;
+import org.argouml.profile.internal.ocl.ModelInterpreter;
+import org.argouml.profile.internal.ocl.OclExpressionEvaluator;
+import org.argouml.profile.internal.ocl.uml14.Uml14ModelInterpreter;
 import org.tigris.gef.ocl.ExpansionException;
 
 
@@ -37,9 +43,15 @@
  * Such expressions are for example used in the critiques.<p>
  *
  * @stereotype singleton
+ * @deprecated use {@link DefaultOclEvaluator} instead - maurelio1234
  */
+@Deprecated
 public class OCLEvaluator extends org.tigris.gef.ocl.OCLEvaluator {
 
+    private OclExpressionEvaluator evaluator = new DefaultOclEvaluator();
+    private HashMap<String, Object> vt = new HashMap<String, Object>();
+    private ModelInterpreter modelInterpreter = new Uml14ModelInterpreter();
+    
     /**
      * The constructor.
      *
@@ -53,54 +65,17 @@
      */
     protected synchronized String evalToString(Object self, String expr)
         throws ExpansionException {
-        String res = null;
-        if (GET_NAME_EXPR_1.equals(expr)
-                && Model.getFacade().isAModelElement(self)) {
-            res = Model.getFacade().getName(self);
-            if (res == null || "".equals(res)) {
-                res = Translator.localize("misc.name.anon");
-            }
-        }
-        if (GET_NAME_EXPR_2.equals(expr)
-                && Model.getFacade().isAModelElement(self)) {
-            res = Model.getFacade().getName(self);
-            if (res == null || "".equals(res)) {
-                res = Translator.localize("misc.name.anon");
-            }
-        }
-        if (GET_OWNER_EXPR.equals(expr) && Model.getFacade().isAFeature(self)) {
-            Object owner = Model.getFacade().getOwner(self);
-            if (owner != null) {
-                res = Model.getFacade().getName(owner);
-                if (res == null || "".equals(res)) {
-                    res = Translator.localize("misc.name.anon");
-                }
-            }
-        }
-        if (GET_NAME_EXPR_1.equals(expr) && self instanceof Diagram) {
-            res = ((Diagram) self).getName();
-            if (res == null || "".equals(res)) {
-                res = Translator.localize("misc.name.anon");
-            }
-        }
-        if (GET_NAME_EXPR_2.equals(expr) && self instanceof Diagram) {
-            res = ((Diagram) self).getName();
-            if (res == null || "".equals(res)) {
-                res = Translator.localize("misc.name.anon");
-            }
+        if ("self".equals(expr)) {
+            expr = "self.name";
         }
-    /*
-        if (GET_OWNER_EXPR.equals(expr) && self instanceof Diagram) {
-            res = ((Diagram)self).getOwner().getName();
-            if (res == null || "".equals(res)) {
-                res = Translator.localize("misc.name.anon");
-            }
-        }
-    */
-        if (res == null) {
-            res = evalToString(self, expr, ", ");
+               
+        vt.clear();
+        vt.put("self", self);
+        try {
+            return value2String(evaluator.evaluate(vt, modelInterpreter, expr));
+        } catch (InvalidOclException e) {
+            return "<ocl>invalid expression</ocl>";
         }
-        return res;
     }
 
     /*
@@ -118,19 +93,8 @@
         _strBuf.setLength(0);
         Iterator iter = values.iterator();
         while (iter.hasNext()) {
-            Object v = iter.next();
-            if (Model.getFacade().isAModelElement(v)) {
-                v = Model.getFacade().getName(v);
-                if ("".equals(v)) {
-                    v = Translator.localize("misc.name.anon");
-                }
-            }
-            if (Model.getFacade().isAExpression(v)) {
-                v = Model.getFacade().getBody(v);
-                if ("".equals(v)) {
-                    v = "(unspecified)";
-                }
-            }
+            Object v = value2String(iter.next());
+
             if (!"".equals(v)) {
                 _strBuf.append(v);
                 if (iter.hasNext()) {
@@ -141,4 +105,29 @@
         return _strBuf.toString();
     }
 
+    private String value2String(Object v) {
+        if (Model.getFacade().isAModelElement(v)) {
+            v = Model.getFacade().getName(v);
+            if ("".equals(v)) {
+                v = Translator.localize("misc.name.anon");
+            }
+        }
+        if (Model.getFacade().isAExpression(v)) {
+            v = Model.getFacade().getBody(v);
+            if ("".equals(v)) {
+                v = "(unspecified)";
+            }
+        }
+        if (v instanceof Collection) {
+            String acc = "[";
+            Collection collection = (Collection) v;
+
+            for (Object object : collection) {
+                acc += value2String(object) + ",";
+            }        
+            acc += "]";
+            v = acc;
+        }
+        return ""+v;
+    }
 }  // end of OCLEvaluator
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.