From 2bff6b7a3261d663a22a949e7b7fc0020425564c Mon Sep 17 00:00:00 2001
From: Ludovic Apvrille <ludovic.apvrille@telecom-paris.fr>
Date: Fri, 16 Apr 2021 10:13:02 +0200
Subject: [PATCH] Update on parsing in simulator

---
 .../avatartranslator/AvatarSyntaxChecker.java | 12 +--
 .../AvatarSimulationBlock.java                | 14 ++-
 .../AvatarSimulationTransaction.java          | 40 ++++++++
 .../java/ui/AvatarDesignPanelTranslator.java  | 99 +------------------
 4 files changed, 62 insertions(+), 103 deletions(-)

diff --git a/src/main/java/avatartranslator/AvatarSyntaxChecker.java b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
index 2ac599b6ea..00b8d61dbf 100644
--- a/src/main/java/avatartranslator/AvatarSyntaxChecker.java
+++ b/src/main/java/avatartranslator/AvatarSyntaxChecker.java
@@ -225,16 +225,16 @@ public class AvatarSyntaxChecker  {
             act = Conversion.putVariableValueInString(AvatarSpecification.ops, act, aa.getName(), aa.getDefaultInitialValue());
         }
 
-        /*AvatarExpressionSolver e1 = new AvatarExpressionSolver(act);
+        AvatarExpressionSolver e1 = new AvatarExpressionSolver(act);
 
         if (e1.buildExpression()) {
             return 1;
         }
 
-        return 0;*/
+        return 0;
 
 
-        BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
+        /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
 
         //TraceManager.addDev("Evaluating (modified) guard:" + act);
         boolean result = bee.getResultOfWithIntExpr(act);
@@ -244,7 +244,7 @@ public class AvatarSyntaxChecker  {
         }
 
 
-        return 0;
+        return 0;*/
         // END of NEW
 
         //return parse(_as, _ab, "guard", act);
@@ -344,7 +344,7 @@ public class AvatarSyntaxChecker  {
         //TraceManager.addDev("2. IsValidBoolExpr Evaluating bool:" + act);
 
 
-        BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
+        /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
 
 
         boolean result = bee.getResultOfWithIntExpr(act);
@@ -353,7 +353,7 @@ public class AvatarSyntaxChecker  {
             return -1;
         } else {
             //TraceManager.addDev("IsValidBoolExpr: YES (" + act + ")");
-        }
+        }*/
 
         // Testing with parsing AvatarExpressionSolver
 
diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java
index e506775523..4b4d11c243 100644
--- a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java
+++ b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java
@@ -771,7 +771,17 @@ public class AvatarSimulationBlock {
             cpt++;
         }
 
-        BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
+        AvatarExpressionSolver aee = new AvatarExpressionSolver(act);
+        if ( !(aee.buildExpression())) {
+            TraceManager.addDev("4. Error with avatar expression solver:" + act);
+            return false;
+        }
+
+        int[] attributes = AvatarSimulationTransaction.getAttributeValues(_attributeValues);
+        
+        return aee.getResult(attributes) != 0;
+
+        /*BoolExpressionEvaluator bee = new BoolExpressionEvaluator();
 
         if (act.trim().startsWith("100")) {
             TraceManager.addDev("Current block " + this.getBlock().getName() + " lastTransaction=" + lastTransaction);
@@ -784,7 +794,7 @@ public class AvatarSimulationBlock {
         }
 
         //TraceManager.addDev("Result of " + _expr + " = " + result);
-        return result;
+        return result;*/
     }
 
     public int makeRandom(int minV, int maxV, int functionID, double extra1, double extra2) {
diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java b/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java
index ecb9712e0a..e6dec22f75 100644
--- a/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java
+++ b/src/main/java/avatartranslator/directsimulation/AvatarSimulationTransaction.java
@@ -96,6 +96,46 @@ public class AvatarSimulationTransaction {
         duration = 0;
     }
 
+    public int[] getAttributeValues() {
+        if (attributeValues == null) {
+            return new int[0];
+        }
+
+        int[] vals = new int[attributeValues.size()];
+        for(int i=0; i<vals.length; i++) {
+            String v = attributeValues.get(i);
+            if (v.equals("true")) {
+                vals[i] = 1;
+            } else if (v.equals("false")) {
+                vals[i] = 0;
+            } else {
+                vals[i] = Integer.decode(v);
+            }
+        }
+
+        return vals;
+    }
+
+    public static int[] getAttributeValues(Vector<String> attributeValues) {
+        if (attributeValues == null) {
+            return new int[0];
+        }
+
+        int[] vals = new int[attributeValues.size()];
+        for(int i=0; i<vals.length; i++) {
+            String v = attributeValues.get(i);
+            if (v.equals("true")) {
+                vals[i] = 1;
+            } else if (v.equals("false")) {
+                vals[i] = 0;
+            } else {
+                vals[i] = Integer.decode(v);
+            }
+        }
+
+        return vals;
+    }
+
     public static void reinit() {
         ID = 0;
         allExecutedElements = new LinkedList<AvatarStateMachineElement>();
diff --git a/src/main/java/ui/AvatarDesignPanelTranslator.java b/src/main/java/ui/AvatarDesignPanelTranslator.java
index eb99e3df94..9d643c0480 100644
--- a/src/main/java/ui/AvatarDesignPanelTranslator.java
+++ b/src/main/java/ui/AvatarDesignPanelTranslator.java
@@ -1732,7 +1732,8 @@ public class AvatarDesignPanelTranslator {
 
             if (aaos.getNbOfValues() != atas.getListOfAttributes().size()) {
                 TraceManager.addDev("nb of values: " + aaos.getNbOfValues() + " size of list: " + atas.getListOfAttributes().size());
-                throw new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed signal sending: " + asmdss.getValue() + " -> nb of parameters does not match definition");
+                throw new CheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed signal sending: " + asmdss.getValue() +
+                        " -> nb of parameters does not match definition");
             }
             // Checking expressions passed as parameter
             for (int i = 0; i < aaos.getNbOfValues(); i++) {
@@ -1766,7 +1767,8 @@ public class AvatarDesignPanelTranslator {
         asm.addElement(element);
     }
 
-    private void translateAvatarSMDLibraryFunctionCall(TDiagramPanel tdp, AvatarSpecification _as, AvatarStateMachineOwner _ab, AvatarSMDLibraryFunctionCall asmdlfc) throws CheckingError {
+    private void translateAvatarSMDLibraryFunctionCall(TDiagramPanel tdp, AvatarSpecification _as, AvatarStateMachineOwner _ab,
+                                                       AvatarSMDLibraryFunctionCall asmdlfc) throws CheckingError {
         AvatarStateMachine asm = _ab.getStateMachine();
 
         /* Get Function corresponding to this call */
@@ -2722,99 +2724,6 @@ public class AvatarDesignPanelTranslator {
                                     //TraceManager.addDev("-- Empty transition");
                                     final AvatarTransition at = new AvatarTransition(_ab, "avatar transition", connector);
                                     createTransitionInfo(at, avatarSmdConnector);
-                                    //                        AvatarTransition at = new AvatarTransition (_ab, "avatar transition", tgc);
-                                    //
-                                    //                        // Guard
-                                    //                        String tmp = modifyString (asmdco.getGuard());
-                                    //                        AvatarGuard guard = AvatarGuard.createFromString (_ab, tmp);
-                                    //                        if (guard.isElseGuard())
-                                    //                            at.setGuard(guard);
-                                    //                        else {
-                                    //                            int error = AvatarSyntaxChecker.isAValidGuard (_as, _ab, tmp);
-                                    //                            if (error < 0)
-                                    //                                this.makeError (error, tdp, _ab, tgc, "transition guard", tmp);
-                                    //                            else
-                                    //                                at.setGuard (guard);
-                                    //                        }
-                                    //
-                                    //                        // Delays
-                                    //                        String tmp1 = modifyString (asmdco.getAfterMinDelay ());
-                                    //                        int error = AvatarSyntaxChecker.isAValidIntExpr (_as, _ab, tmp1);
-                                    //                        if (error < 0) {
-                                    //                            this.makeError (error, tdp, _ab, tgc, "after min delay", tmp1);
-                                    //                            tmp1 = null;
-                                    //                        }
-                                    //                        String tmp2 = modifyString (asmdco.getAfterMaxDelay ());
-                                    //                        error = AvatarSyntaxChecker.isAValidIntExpr (_as, _ab, tmp2);
-                                    //                        if (error < 0) {
-                                    //                            this.makeError(error, tdp, _ab, tgc, "after max delay", tmp2);
-                                    //                            tmp2 = null;
-                                    //                        }
-                                    //
-                                    //                        if (tmp1 != null && tmp2 != null)
-                                    //                            at.setDelays(tmp1, tmp2);
-
-                                    // Compute min and max
-                                    //                        tmp1 = modifyString (asmdco.getComputeMinDelay ());
-                                    //                        error = AvatarSyntaxChecker.isAValidIntExpr (_as, _ab, tmp1);
-                                    //                        if (error < 0) {
-                                    //                            this.makeError (error, tdp, _ab, tgc, "compute min ", tmp1);
-                                    //                            tmp1 = null;
-                                    //                        }
-                                    //                        tmp2 = modifyString(asmdco.getComputeMaxDelay());
-                                    //                        error = AvatarSyntaxChecker.isAValidIntExpr(_as, _ab, tmp2);
-                                    //                        if (error < 0) {
-                                    //                            this.makeError (error, tdp, _ab, tgc, "compute max ", tmp2);
-                                    //                            tmp2 = null;
-                                    //                        }
-                                    //
-                                    //                        if (tmp1 != null && tmp2 != null)
-                                    //                            at.setComputes(tmp1, tmp2);
-
-                                    // Probability
-                                    //                        tmp1 = asmdco.getProbability ();
-                                    //                        if ((tmp1 != null) && (tmp1.length()>0)) {
-                                    //                            error = AvatarSyntaxChecker.isAValidProbabilityExpr(_as, _ab, tmp1);
-                                    //                            if (error < 0) {
-                                    //                                this.makeError(error, tdp, _ab, tgc, "probability ", tmp1);
-                                    //                                tmp1 = null;
-                                    //                            }
-                                    //                            if (tmp1 != null) {
-                                    //                                at.setProbability(new Double(tmp1).doubleValue());
-                                    //                            }
-                                    //                        }
-                                    //
-                                    //                        // Actions
-                                    //                        for(String s: asmdco.getActions())
-                                    //                            if (s.trim().length() > 0) {
-                                    //                                s = modifyString(s.trim());
-                                    //
-                                    //                                // Variable assignation or method call?
-                                    //                                if (!isAVariableAssignation(s)) {
-                                    //                                    // Method call
-                                    //                                    int index2 = s.indexOf(";");
-                                    //                                    if (index2 != -1)
-                                    //                                        this.makeError(error, tdp, _ab, tgc, "transition action", s);
-                                    //
-                                    //                                    s = modifyStringMethodCall(s, _ab.getName());
-                                    //                                    if (!AvatarBlock.isAValidMethodCall (_ab, s)) {
-                                    //                                        UICheckingError ce = new UICheckingError(CheckingError.BEHAVIOR_ERROR, "Badly formed transition method call: " + s);
-                                    //                                        // TODO: adapt
-                                    //                                        // ce.setAvatarBlock(_ab);
-                                    //                                        ce.setTDiagramPanel(tdp);
-                                    //                                        ce.setTGComponent(tgc);
-                                    //                                        addCheckingError(ce);
-                                    //                                    } else
-                                    //                                        at.addAction(s);
-                                    //                                } else {
-                                    //                                    // Variable assignation
-                                    //                                    error = AvatarSyntaxChecker.isAValidVariableExpr (_as, _ab, s);
-                                    //                                    if (error < 0)
-                                    //                                        this.makeError (error, tdp, _ab, tgc, "transition action", s);
-                                    //                                    else
-                                    //                                        at.addAction (s);
-                                    //                                }
-                                    //                            }
 
                                     element1.addNext(at);
                                     at.addNext(element2);
-- 
GitLab