Squashed Last bugs
[iotcloud.git] / version2 / src / java / iotcloud / Guard.java
index 4e426fd92ef831af45a6e49fdb8a760820778721..f768b7f647e3375b0d7122be307e8f0fce241fa2 100644 (file)
@@ -3,6 +3,9 @@ package iotcloud;
 import java.util.Set;
 import java.util.HashSet;
 import java.util.Collection;
+import java.util.List;
+import java.util.ArrayList;
+
 import java.nio.ByteBuffer;
 
 import javax.script.ScriptEngine;
@@ -15,8 +18,8 @@ class Guard {
 
     static final byte Equal = 1;
     static final byte NotEqual = 2;
-
     private IoTString booleanExpression;
+    private List<KeyValue> keyValsNeeded = null;
 
     public Guard() {
         booleanExpression = null;
@@ -60,24 +63,59 @@ class Guard {
             return true;
         }
 
+        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
+
+        if (keyValsNeeded == null) {
+            keyValsNeeded = new ArrayList<KeyValue>();
+
+            String booleanExprString = booleanExpression.toString();
+            for (KeyValue kv : kvSet) {
+                if (booleanExprString.contains(kv.getKey().toString())) {
+                    keyValsNeeded.add(kv);
+                }
+            }
+        }
+
         // All the current key value pairs that we need to evaluate the condition
-        String[] variables = new String[kvSet.size()];
+        // String[] variables = new String[kvSet.size()];
 
         // Fill the variables array
-        int i = 0;
-        for (KeyValue kv : kvSet) {
-            variables[i] = kv.getKey() + " ='" + kv.getValue() + "'";
-            i++;
+        // int i = 0;
+        // for (KeyValue kv : kvSet) {
+        // for (KeyValue kv : keyValsNeeded) {
+        //     variables[i] = kv.getKey() + " ='" + kv.getValue() + "'";
+        //     i++;
+        // }
+
+        String varEval = "";
+        for (KeyValue kv : keyValsNeeded) {
+            varEval += "var " + kv.getKey() + " ='" + kv.getValue() + "'; \n";
         }
 
+        varEval += booleanExpression.toString();
+
         // Prep the evaluation engine (script engine)
-        ScriptEngine engine = new ScriptEngineManager().getEngineByName("JavaScript");
-        for (String s : variables) {
-            engine.eval(s);
+
+        // for (String s : variables) {
+        //     engine.eval(s);
+        // }
+        // engine.eval(varEval);
+
+
+
+        // boolean engineEval = (Boolean)engine.eval(booleanExpression.toString());
+        boolean engineEval = false;
+
+        try {
+            engineEval = (Boolean)engine.eval(varEval);
+        } catch (Exception e) {
+            // If there was an error then the script evaluated to false 
+            engineEval = false;
         }
 
         // Evaluate the guard condition
-        return 1 == (Integer)engine.eval(booleanExpression.toString());
+        // return 1 == (Integer)engine.eval(booleanExpression.toString());
+        return engineEval;
     }
 
     /**