package fr.inria.diverse.iot2.iot2.aspects; import fr.inria.diverse.iot2.iot2.iot2.Activity; import fr.inria.diverse.iot2.iot2.iot2.ActivityNode; import fr.inria.diverse.iot2.iot2.iot2.BooleanValue; import fr.inria.diverse.iot2.iot2.iot2.InitialNode; import fr.inria.diverse.iot2.iot2.iot2.InputValue; import fr.inria.diverse.iot2.iot2.iot2.IntegerValue; import fr.inria.diverse.iot2.iot2.iot2.Value; import fr.inria.diverse.iot2.iot2.iot2.Variable; import com.google.common.base.Objects; import com.google.common.collect.Iterables; import fr.inria.diverse.k3.al.annotationprocessor.Aspect; import fr.inria.diverse.k3.al.annotationprocessor.OverrideAspectMethod; import fr.inria.diverse.k3.al.annotationprocessor.ReplaceAspectMethod; import java.io.BufferedWriter; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.ArrayList; import java.util.List; import java.util.function.Consumer; import org.eclipse.emf.common.util.EList; import org.eclipse.xtext.xbase.lib.Conversions; import org.eclipse.xtext.xbase.lib.Exceptions; import org.eclipse.xtext.xbase.lib.Functions.Function1; import org.eclipse.xtext.xbase.lib.IterableExtensions; import fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties; import fr.inria.diverse.iot2.iot2.aspects.ActivityNodeAspect; import fr.inria.diverse.iot2.iot2.aspects.Context; import fr.inria.diverse.iot2.iot2.aspects.NamedElementAspect; import fr.inria.diverse.iot2.iot2.aspects.Trace; import fr.inria.diverse.iot2.iot2.aspects.VariableAspect; @Aspect(className = Activity.class) @SuppressWarnings("all") public class ActivityAspect extends NamedElementAspect { @ReplaceAspectMethod public static void main(final Activity _self, final List<InputValue> value) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); _privk3_main(_self_, _self,value); } @OverrideAspectMethod public static void execute(final Activity _self, final Context c) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.Activity){ fr.inria.diverse.iot2.iot2.aspects.ActivityAspect._privk3_execute(_self_, (fr.inria.diverse.iot2.iot2.iot2.Activity)_self,c); } else if (_self instanceof fr.inria.diverse.iot2.iot2.iot2.NamedElement){ fr.inria.diverse.iot2.iot2.aspects.NamedElementAspect.execute((fr.inria.diverse.iot2.iot2.iot2.NamedElement)_self,c); } else { throw new IllegalArgumentException("Unhandled parameter types: " + java.util.Arrays.<Object>asList(_self).toString()); }; } public static void reset(final Activity _self) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); _privk3_reset(_self_, _self); } public static void writeToFile(final Activity _self) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); _privk3_writeToFile(_self_, _self); } public static String printTrace(final Activity _self) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); Object result = null; result =_privk3_printTrace(_self_, _self); return (java.lang.String)result; } public static int getIntegerVariableValue(final Activity _self, final String variableName) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); Object result = null; result =_privk3_getIntegerVariableValue(_self_, _self,variableName); return (int)result; } public static boolean getBooleanVariableValue(final Activity _self, final String variableName) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); Object result = null; result =_privk3_getBooleanVariableValue(_self_, _self,variableName); return (boolean)result; } public static Value getVariableValue(final Activity _self, final String variableName) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); Object result = null; result =_privk3_getVariableValue(_self_, _self,variableName); return (fr.inria.diverse.iot2.iot2.iot2.Value)result; } public static Variable getVariable(final Activity _self, final String variableName) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); Object result = null; result =_privk3_getVariable(_self_, _self,variableName); return (fr.inria.diverse.iot2.iot2.iot2.Variable)result; } public static void writeTrace(final Activity _self) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); _privk3_writeTrace(_self_, _self); } private static Trace trace(final Activity _self) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); Object result = null; result =_privk3_trace(_self_, _self); return (fr.inria.diverse.iot2.iot2.aspects.Trace)result; } private static void trace(final Activity _self, final Trace trace) { fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.ActivityAspectActivityAspectContext.getSelf(_self); _privk3_trace(_self_, _self,trace); } protected static void _privk3_main(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final List<InputValue> value) { Context c = new Context(); Iterables.<InputValue>addAll(c.inputValues, value); c.activity = _self; Trace _trace = new Trace(); ActivityAspect.trace(_self, _trace); Trace _trace_1 = ActivityAspect.trace(_self); c.output = _trace_1; if (value!=null) { final Consumer<InputValue> _function = (InputValue v) -> { Variable _variable = v.getVariable(); Value _value = v.getValue(); _variable.setCurrentValue(_value); }; value.forEach(_function); } EList<ActivityNode> _nodes = _self.getNodes(); final Consumer<ActivityNode> _function_1 = (ActivityNode n) -> { n.setRunning(true); }; _nodes.forEach(_function_1); ActivityAspect.execute(_self, c); } private static void super_execute(final Activity _self, final Context c) { fr.inria.diverse.iot2.iot2.aspects.NamedElementAspectNamedElementAspectProperties _self_ = fr.inria.diverse.iot2.iot2.aspects.NamedElementAspectNamedElementAspectContext.getSelf(_self); fr.inria.diverse.iot2.iot2.aspects.NamedElementAspect._privk3_execute(_self_, _self,c); } protected static void _privk3_execute(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final Context c) { EList<Variable> _locals = _self.getLocals(); final Consumer<Variable> _function = (Variable v) -> { VariableAspect.init(v, c); }; _locals.forEach(_function); EList<ActivityNode> _nodes = _self.getNodes(); final Function1<ActivityNode, Boolean> _function_1 = (ActivityNode node) -> { return Boolean.valueOf((node instanceof InitialNode)); }; Iterable<ActivityNode> _filter = IterableExtensions.<ActivityNode>filter(_nodes, _function_1); ActivityNode _get = ((ActivityNode[])Conversions.unwrapArray(_filter, ActivityNode.class))[0]; ActivityNodeAspect.execute(_get, c); EList<ActivityNode> _nodes_1 = _self.getNodes(); final Function1<ActivityNode, Boolean> _function_2 = (ActivityNode node) -> { return Boolean.valueOf(ActivityNodeAspect.hasOffers(node)); }; Iterable<ActivityNode> list = IterableExtensions.<ActivityNode>filter(_nodes_1, _function_2); while (((!Objects.equal(list, null)) && (IterableExtensions.size(list) > 0))) { { final Iterable<ActivityNode> _converted_list = (Iterable<ActivityNode>)list; ActivityNode _get_1 = ((ActivityNode[])Conversions.unwrapArray(_converted_list, ActivityNode.class))[0]; ActivityNodeAspect.execute(_get_1, c); EList<ActivityNode> _nodes_2 = _self.getNodes(); final Function1<ActivityNode, Boolean> _function_3 = (ActivityNode node) -> { return Boolean.valueOf(ActivityNodeAspect.hasOffers(node)); }; Iterable<ActivityNode> _filter_1 = IterableExtensions.<ActivityNode>filter(_nodes_2, _function_3); list = _filter_1; } } } protected static void _privk3_reset(final ActivityAspectActivityAspectProperties _self_, final Activity _self) { ActivityAspect.trace(_self, null); } protected static void _privk3_writeToFile(final ActivityAspectActivityAspectProperties _self_, final Activity _self) { String text = ActivityAspect.printTrace(_self); try { String _name = _self.getName(); String _plus = ("trace/" + _name); String _plus_1 = (_plus + ".txt"); File _file = new File(_plus_1); FileOutputStream _fileOutputStream = new FileOutputStream(_file); OutputStreamWriter _outputStreamWriter = new OutputStreamWriter(_fileOutputStream); BufferedWriter writer = new BufferedWriter(_outputStreamWriter); writer.write(text); writer.close(); } catch (final Throwable _t) { if (_t instanceof IOException) { final IOException e = (IOException)_t; e.printStackTrace(); } else { throw Exceptions.sneakyThrow(_t); } } } protected static String _privk3_printTrace(final ActivityAspectActivityAspectProperties _self_, final Activity _self) { final StringBuffer text = new StringBuffer(); Trace _trace = ActivityAspect.trace(_self); final Consumer<ActivityNode> _function = (ActivityNode n) -> { String _name = n.getName(); text.append(_name); String _property = System.getProperty("line.separator"); text.append(_property); }; _trace.executedNodes.forEach(_function); EList<Variable> _locals = _self.getLocals(); final Consumer<Variable> _function_1 = (Variable v) -> { String _print = VariableAspect.print(v); text.append(_print); String _property = System.getProperty("line.separator"); text.append(_property); }; _locals.forEach(_function_1); return text.toString(); } protected static int _privk3_getIntegerVariableValue(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final String variableName) { Value currentValue = ActivityAspect.getVariableValue(_self, variableName); if ((currentValue instanceof IntegerValue)) { IntegerValue integerValue = ((IntegerValue) currentValue); return integerValue.getValue(); } return (-1); } protected static boolean _privk3_getBooleanVariableValue(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final String variableName) { Value currentValue = ActivityAspect.getVariableValue(_self, variableName); if ((currentValue instanceof BooleanValue)) { BooleanValue booleanValue = ((BooleanValue) currentValue); return booleanValue.isValue(); } return false; } protected static Value _privk3_getVariableValue(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final String variableName) { Variable variable = ActivityAspect.getVariable(_self, variableName); Value currentValue = variable.getCurrentValue(); return currentValue; } protected static Variable _privk3_getVariable(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final String variableName) { ArrayList<Variable> allVariables = new ArrayList<Variable>(); EList<Variable> _locals = _self.getLocals(); allVariables.addAll(_locals); EList<Variable> _inputs = _self.getInputs(); allVariables.addAll(_inputs); for (final Variable var1 : allVariables) { String _name = var1.getName(); boolean _equals = _name.equals(variableName); if (_equals) { return var1; } } return null; } protected static void _privk3_writeTrace(final ActivityAspectActivityAspectProperties _self_, final Activity _self) { ActivityAspect.writeToFile(_self); ActivityAspect.reset(_self); } protected static Trace _privk3_trace(final ActivityAspectActivityAspectProperties _self_, final Activity _self) { try { for (java.lang.reflect.Method m : _self.getClass().getMethods()) { if (m.getName().equals("getTrace") && m.getParameterTypes().length == 0) { Object ret = m.invoke(_self); if (ret != null) { return (fr.inria.diverse.iot2.iot2.aspects.Trace) ret; } } } } catch (Exception e) { // Chut ! } return _self_.trace; } protected static void _privk3_trace(final ActivityAspectActivityAspectProperties _self_, final Activity _self, final Trace trace) { _self_.trace = trace; try { for (java.lang.reflect.Method m : _self.getClass().getMethods()) { if (m.getName().equals("setTrace") && m.getParameterTypes().length == 1) { m.invoke(_self, trace); } } } catch (Exception e) { // Chut ! } } }