Search in sources :

Example 1 with FSM

use of org.softlang.metalib.xtext.fsml.fsml.FSM in project metalib by softlang.

the class FsmlGenerator method doGenerate.

@Override
public void doGenerate(final Resource resource, final IFileSystemAccess2 fsa, final IGeneratorContext context) {
    final String packageName = this.getPackageName(resource);
    final String packagePath = this.getPackagePath(resource);
    TreeIterator<EObject> _allContents = resource.getAllContents();
    Iterator<FSM> _filter = Iterators.<FSM>filter(_allContents, FSM.class);
    Iterable<FSM> _iterable = IteratorExtensions.<FSM>toIterable(_filter);
    for (final FSM fsm : _iterable) {
        {
            EList<FSMState> _states = fsm.getStates();
            final Function1<FSMState, String> _function = (FSMState s) -> {
                return s.getName();
            };
            List<String> _map = ListExtensions.<FSMState, String>map(_states, _function);
            final Set<String> states = IterableExtensions.<String>toSet(_map);
            EList<FSMState> _states_1 = fsm.getStates();
            final Function1<FSMState, Boolean> _function_1 = (FSMState s) -> {
                return Boolean.valueOf(s.isInitial());
            };
            FSMState _findFirst = IterableExtensions.<FSMState>findFirst(_states_1, _function_1);
            final String initial = _findFirst.getName();
            EList<FSMState> _states_2 = fsm.getStates();
            final Function1<FSMState, List<String>> _function_2 = (FSMState s) -> {
                EList<FSMTransition> _transitions = s.getTransitions();
                final Function1<FSMTransition, String> _function_3 = (FSMTransition t) -> {
                    return t.getInput();
                };
                return ListExtensions.<FSMTransition, String>map(_transitions, _function_3);
            };
            List<List<String>> _map_1 = ListExtensions.<FSMState, List<String>>map(_states_2, _function_2);
            Iterable<String> _flatten = Iterables.<String>concat(_map_1);
            final Set<String> inputs = IterableExtensions.<String>toSet(_flatten);
            EList<FSMState> _states_3 = fsm.getStates();
            final Function1<FSMState, Iterable<String>> _function_3 = (FSMState s) -> {
                EList<FSMTransition> _transitions = s.getTransitions();
                final Function1<FSMTransition, Boolean> _function_4 = (FSMTransition t) -> {
                    String _action = t.getAction();
                    return Boolean.valueOf((!Objects.equal(_action, null)));
                };
                Iterable<FSMTransition> _filter_1 = IterableExtensions.<FSMTransition>filter(_transitions, _function_4);
                final Function1<FSMTransition, String> _function_5 = (FSMTransition t) -> {
                    return t.getAction();
                };
                return IterableExtensions.<FSMTransition, String>map(_filter_1, _function_5);
            };
            List<Iterable<String>> _map_2 = ListExtensions.<FSMState, Iterable<String>>map(_states_3, _function_3);
            Iterable<String> _flatten_1 = Iterables.<String>concat(_map_2);
            final Set<String> actions = IterableExtensions.<String>toSet(_flatten_1);
            StringConcatenation _builder = new StringConcatenation();
            _builder.append("package ");
            _builder.append(packageName, "");
            _builder.append(";");
            _builder.newLineIfNotEmpty();
            _builder.newLine();
            _builder.append("public enum State");
            _builder.newLine();
            _builder.append("{");
            _builder.newLine();
            _builder.append("\t");
            {
                boolean _hasElements = false;
                for (final String x : states) {
                    if (!_hasElements) {
                        _hasElements = true;
                    } else {
                        _builder.appendImmediate(", ", "\t");
                    }
                    _builder.append(x, "\t");
                }
            }
            _builder.newLineIfNotEmpty();
            _builder.append("}");
            fsa.generateFile((packagePath + "/State.java"), _builder);
            StringConcatenation _builder_1 = new StringConcatenation();
            _builder_1.append("package ");
            _builder_1.append(packageName, "");
            _builder_1.append(";");
            _builder_1.newLineIfNotEmpty();
            _builder_1.newLine();
            _builder_1.append("public enum Input");
            _builder_1.newLine();
            _builder_1.append("{");
            _builder_1.newLine();
            _builder_1.append("\t");
            {
                boolean _hasElements_1 = false;
                for (final String x_1 : inputs) {
                    if (!_hasElements_1) {
                        _hasElements_1 = true;
                    } else {
                        _builder_1.appendImmediate(", ", "\t");
                    }
                    _builder_1.append(x_1, "\t");
                }
            }
            _builder_1.newLineIfNotEmpty();
            _builder_1.append("}");
            fsa.generateFile((packagePath + "/Input.java"), _builder_1);
            StringConcatenation _builder_2 = new StringConcatenation();
            _builder_2.append("package ");
            _builder_2.append(packageName, "");
            _builder_2.append(";");
            _builder_2.newLineIfNotEmpty();
            _builder_2.newLine();
            _builder_2.append("public enum Action");
            _builder_2.newLine();
            _builder_2.append("{");
            _builder_2.newLine();
            _builder_2.append("\t");
            {
                boolean _hasElements_2 = false;
                for (final String x_2 : actions) {
                    if (!_hasElements_2) {
                        _hasElements_2 = true;
                    } else {
                        _builder_2.appendImmediate(", ", "\t");
                    }
                    _builder_2.append(x_2, "\t");
                }
            }
            _builder_2.newLineIfNotEmpty();
            _builder_2.append("}");
            fsa.generateFile((packagePath + "/Action.java"), _builder_2);
            StringConcatenation _builder_3 = new StringConcatenation();
            _builder_3.append("package ");
            _builder_3.append(packageName, "");
            _builder_3.append(";");
            _builder_3.newLineIfNotEmpty();
            _builder_3.newLine();
            _builder_3.append("import org.softlang.metalib.xtext.fsml.runtime.HandlerBase;");
            _builder_3.newLine();
            _builder_3.newLine();
            _builder_3.append("public abstract class Handler implements HandlerBase<Action>");
            _builder_3.newLine();
            _builder_3.append("{");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("@Override");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("public void handle(Action action)");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("{");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("if(action == null)");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("{");
            _builder_3.newLine();
            _builder_3.append("\t\t\t");
            _builder_3.append("throw new IllegalArgumentException(\"null\");");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("}");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("switch(action)");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("{");
            _builder_3.newLine();
            {
                for (final String x_3 : actions) {
                    _builder_3.append("\t\t\t");
                    _builder_3.append("case ");
                    _builder_3.append(x_3, "\t\t\t");
                    _builder_3.append(":");
                    _builder_3.newLineIfNotEmpty();
                    _builder_3.append("\t\t\t");
                    _builder_3.append("\t");
                    _builder_3.append("handle");
                    String _firstUpper = StringExtensions.toFirstUpper(x_3);
                    _builder_3.append(_firstUpper, "\t\t\t\t");
                    _builder_3.append("();");
                    _builder_3.newLineIfNotEmpty();
                    _builder_3.append("\t\t\t");
                    _builder_3.append("\t");
                    _builder_3.append("return;");
                    _builder_3.newLine();
                }
            }
            _builder_3.append("\t\t\t");
            _builder_3.newLine();
            _builder_3.append("\t\t\t");
            _builder_3.append("default:");
            _builder_3.newLine();
            _builder_3.append("\t\t\t");
            _builder_3.append("throw new IllegalArgumentException(action.toString());");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("}");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("}");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.newLine();
            {
                for (final String x_4 : actions) {
                    _builder_3.append("\t");
                    _builder_3.append("protected void handle");
                    String _firstUpper_1 = StringExtensions.toFirstUpper(x_4);
                    _builder_3.append(_firstUpper_1, "\t");
                    _builder_3.append("()");
                    _builder_3.newLineIfNotEmpty();
                    _builder_3.append("\t");
                    _builder_3.append("{");
                    _builder_3.newLine();
                    _builder_3.append("\t");
                    _builder_3.append("\t");
                    _builder_3.append("unhandled(Action.");
                    _builder_3.append(x_4, "\t\t");
                    _builder_3.append(");");
                    _builder_3.newLineIfNotEmpty();
                    _builder_3.append("\t");
                    _builder_3.append("}");
                    _builder_3.newLine();
                    _builder_3.append("\t");
                    _builder_3.newLine();
                }
            }
            _builder_3.append("\t");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("protected void unhandled(Action action)");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("{");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("final Class<?> c = getClass();");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.newLine();
            _builder_3.append("\t\t");
            _builder_3.append("System.out.println(\"Unhandled action in \" + (c.isAnonymousClass() ? \"anonymous class\" : c.getSimpleName()) + \": \" + action);");
            _builder_3.newLine();
            _builder_3.append("\t");
            _builder_3.append("}");
            _builder_3.newLine();
            _builder_3.append("}");
            fsa.generateFile((packagePath + "/Handler.java"), _builder_3);
            StringConcatenation _builder_4 = new StringConcatenation();
            _builder_4.append("package ");
            _builder_4.append(packageName, "");
            _builder_4.append(";");
            _builder_4.newLineIfNotEmpty();
            _builder_4.newLine();
            _builder_4.append("import org.softlang.metalib.xtext.fsml.runtime.HandlerBase;");
            _builder_4.newLine();
            _builder_4.append("import org.softlang.metalib.xtext.fsml.runtime.StepperBase;");
            _builder_4.newLine();
            _builder_4.newLine();
            _builder_4.append("public class Stepper extends StepperBase<State, Input, Action>");
            _builder_4.newLine();
            _builder_4.append("{");
            _builder_4.newLine();
            _builder_4.append("\t");
            _builder_4.append("public Stepper(HandlerBase<Action> handler)");
            _builder_4.newLine();
            _builder_4.append("\t");
            _builder_4.append("{");
            _builder_4.newLine();
            _builder_4.append("\t\t");
            _builder_4.append("this.handler = handler;");
            _builder_4.newLine();
            _builder_4.append("\t\t");
            _builder_4.append("this.state = State.");
            _builder_4.append(initial, "\t\t");
            _builder_4.append(";");
            _builder_4.newLineIfNotEmpty();
            _builder_4.append("\t\t");
            _builder_4.newLine();
            {
                EList<FSMState> _states_4 = fsm.getStates();
                for (final FSMState s : _states_4) {
                    {
                        EList<FSMTransition> _transitions = s.getTransitions();
                        for (final FSMTransition t : _transitions) {
                            _builder_4.append("\t\t");
                            _builder_4.append("add(State.");
                            String _name = s.getName();
                            _builder_4.append(_name, "\t\t");
                            _builder_4.append(", Input.");
                            String _input = t.getInput();
                            _builder_4.append(_input, "\t\t");
                            _builder_4.append(", ");
                            {
                                String _action = t.getAction();
                                boolean _notEquals = (!Objects.equal(_action, null));
                                if (_notEquals) {
                                    _builder_4.append("Action.");
                                    String _action_1 = t.getAction();
                                    _builder_4.append(_action_1, "\t\t");
                                } else {
                                    _builder_4.append("null");
                                }
                            }
                            _builder_4.append(", State.");
                            FSMState _destinationState = this.getDestinationState(t);
                            String _name_1 = _destinationState.getName();
                            _builder_4.append(_name_1, "\t\t");
                            _builder_4.append(");");
                            _builder_4.newLineIfNotEmpty();
                        }
                    }
                }
            }
            _builder_4.append("\t");
            _builder_4.append("}");
            _builder_4.newLine();
            _builder_4.append("}");
            fsa.generateFile((packagePath + "/Stepper.java"), _builder_4);
            StringConcatenation _builder_5 = new StringConcatenation();
            _builder_5.append("(");
            _builder_5.newLine();
            _builder_5.append("  ");
            _builder_5.append("% States");
            _builder_5.newLine();
            _builder_5.append("  ");
            _builder_5.append("[");
            _builder_5.newLine();
            _builder_5.append("  ");
            {
                EList<FSMState> _states_5 = fsm.getStates();
                boolean _hasElements_3 = false;
                for (final FSMState s_1 : _states_5) {
                    if (!_hasElements_3) {
                        _hasElements_3 = true;
                    } else {
                        _builder_5.appendImmediate(",\r\n", "  ");
                    }
                    _builder_5.append("\t(");
                    String _name_2 = s_1.getName();
                    _builder_5.append(_name_2, "  ");
                    _builder_5.append(",");
                    String _name_3 = s_1.getName();
                    _builder_5.append(_name_3, "  ");
                    _builder_5.append(",ellipse,[");
                    {
                        boolean _isInitial = s_1.isInitial();
                        if (_isInitial) {
                            _builder_5.append("filled");
                        }
                    }
                    _builder_5.append("])");
                }
            }
            _builder_5.newLineIfNotEmpty();
            _builder_5.append("  ");
            _builder_5.append("],");
            _builder_5.newLine();
            _builder_5.append("  ");
            _builder_5.append("% Edges");
            _builder_5.newLine();
            _builder_5.append("  ");
            _builder_5.append("[");
            _builder_5.newLine();
            _builder_5.append("  ");
            {
                EList<FSMState> _states_6 = fsm.getStates();
                final Function1<FSMState, EList<FSMTransition>> _function_4 = (FSMState it) -> {
                    return it.getTransitions();
                };
                List<EList<FSMTransition>> _map_3 = ListExtensions.<FSMState, EList<FSMTransition>>map(_states_6, _function_4);
                Iterable<FSMTransition> _flatten_2 = Iterables.<FSMTransition>concat(_map_3);
                boolean _hasElements_4 = false;
                for (final FSMTransition t_1 : _flatten_2) {
                    if (!_hasElements_4) {
                        _hasElements_4 = true;
                    } else {
                        _builder_5.appendImmediate(",\r\n", "  ");
                    }
                    _builder_5.append("  (");
                    FSMState _containingState = this.getContainingState(t_1);
                    String _name_4 = _containingState.getName();
                    _builder_5.append(_name_4, "  ");
                    _builder_5.append(",");
                    FSMState _destinationState_1 = this.getDestinationState(t_1);
                    String _name_5 = _destinationState_1.getName();
                    _builder_5.append(_name_5, "  ");
                    _builder_5.append(",[");
                    String _graphLabel = this.getGraphLabel(t_1);
                    _builder_5.append(_graphLabel, "  ");
                    _builder_5.append("])");
                }
            }
            _builder_5.newLineIfNotEmpty();
            _builder_5.append("  ");
            _builder_5.append("]");
            _builder_5.newLine();
            _builder_5.append(").");
            _builder_5.newLine();
            fsa.generateFile((packagePath + ".dgl"), _builder_5);
        }
    }
}
Also used : FSM(org.softlang.metalib.xtext.fsml.fsml.FSM) Set(java.util.Set) Function1(org.eclipse.xtext.xbase.lib.Functions.Function1) EList(org.eclipse.emf.common.util.EList) FSMState(org.softlang.metalib.xtext.fsml.fsml.FSMState) FSMTransition(org.softlang.metalib.xtext.fsml.fsml.FSMTransition) EObject(org.eclipse.emf.ecore.EObject) StringConcatenation(org.eclipse.xtend2.lib.StringConcatenation) EList(org.eclipse.emf.common.util.EList) List(java.util.List)

Example 2 with FSM

use of org.softlang.metalib.xtext.fsml.fsml.FSM in project metalib by softlang.

the class FsmlValidator method incomingStates.

/**
 * Returns all states that have the given state as target in any of their transitions
 */
public Iterable<FSMState> incomingStates(final FSMState s) {
    EObject _eContainer = s.eContainer();
    final FSM fsm = ((FSM) _eContainer);
    EList<FSMState> _states = fsm.getStates();
    final Function1<FSMState, EList<FSMTransition>> _function = (FSMState it) -> {
        return it.getTransitions();
    };
    List<EList<FSMTransition>> _map = ListExtensions.<FSMState, EList<FSMTransition>>map(_states, _function);
    Iterable<FSMTransition> _flatten = Iterables.<FSMTransition>concat(_map);
    final Function1<FSMTransition, Boolean> _function_1 = (FSMTransition it) -> {
        FSMState _target = it.getTarget();
        return Boolean.valueOf(Objects.equal(_target, s));
    };
    Iterable<FSMTransition> _filter = IterableExtensions.<FSMTransition>filter(_flatten, _function_1);
    final Function1<FSMTransition, FSMState> _function_2 = (FSMTransition it) -> {
        EObject _eContainer_1 = it.eContainer();
        return ((FSMState) _eContainer_1);
    };
    return IterableExtensions.<FSMTransition, FSMState>map(_filter, _function_2);
}
Also used : FSM(org.softlang.metalib.xtext.fsml.fsml.FSM) EList(org.eclipse.emf.common.util.EList) FSMState(org.softlang.metalib.xtext.fsml.fsml.FSMState) FSMTransition(org.softlang.metalib.xtext.fsml.fsml.FSMTransition) EObject(org.eclipse.emf.ecore.EObject)

Example 3 with FSM

use of org.softlang.metalib.xtext.fsml.fsml.FSM in project metalib by softlang.

the class Tests method annotatedParse.

/**
 * Helper for parsing a model and annotating it with the warnings and
 * errors the parsing process generated
 */
public Pair<FSM, Pair<EList<Resource.Diagnostic>, EList<Resource.Diagnostic>>> annotatedParse(final CharSequence s) {
    try {
        final XtextResourceSet resourceSet = new XtextResourceSet();
        final FSM parsed = this.parseHelper.parse(s, resourceSet);
        EList<Resource> _resources = resourceSet.getResources();
        final Resource resource = IterableExtensions.<Resource>last(_resources);
        EList<Resource.Diagnostic> _warnings = resource.getWarnings();
        EList<Resource.Diagnostic> _errors = resource.getErrors();
        Pair<EList<Resource.Diagnostic>, EList<Resource.Diagnostic>> _mappedTo = Pair.<EList<Resource.Diagnostic>, EList<Resource.Diagnostic>>of(_warnings, _errors);
        return Pair.<FSM, Pair<EList<Resource.Diagnostic>, EList<Resource.Diagnostic>>>of(parsed, _mappedTo);
    } catch (Throwable _e) {
        throw Exceptions.sneakyThrow(_e);
    }
}
Also used : FSM(org.softlang.metalib.xtext.fsml.fsml.FSM) EList(org.eclipse.emf.common.util.EList) XtextResourceSet(org.eclipse.xtext.resource.XtextResourceSet) Resource(org.eclipse.emf.ecore.resource.Resource) Pair(org.eclipse.xtext.xbase.lib.Pair)

Example 4 with FSM

use of org.softlang.metalib.xtext.fsml.fsml.FSM in project metalib by softlang.

the class Tests method setup.

/**
 * Setup creates the reference finite state machine
 */
@Before
public void setup() {
    FSMState _createFSMState = this.fsmlFactory.createFSMState();
    final Procedure1<FSMState> _function = (FSMState it) -> {
        it.setInitial(true);
        it.setName("locked");
    };
    FSMState _doubleArrow = ObjectExtensions.<FSMState>operator_doubleArrow(_createFSMState, _function);
    this.locked = _doubleArrow;
    FSMState _createFSMState_1 = this.fsmlFactory.createFSMState();
    final Procedure1<FSMState> _function_1 = (FSMState it) -> {
        it.setName("unlocked");
    };
    FSMState _doubleArrow_1 = ObjectExtensions.<FSMState>operator_doubleArrow(_createFSMState_1, _function_1);
    this.unlocked = _doubleArrow_1;
    FSMState _createFSMState_2 = this.fsmlFactory.createFSMState();
    final Procedure1<FSMState> _function_2 = (FSMState it) -> {
        it.setName("exception");
    };
    FSMState _doubleArrow_2 = ObjectExtensions.<FSMState>operator_doubleArrow(_createFSMState_2, _function_2);
    this.exception = _doubleArrow_2;
    final Procedure1<FSMState> _function_3 = (FSMState it) -> {
        EList<FSMTransition> _transitions = it.getTransitions();
        FSMTransition _createFSMTransition = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_4 = (FSMTransition it_1) -> {
            it_1.setInput("ticket");
            it_1.setAction("collect");
            it_1.setTarget(this.unlocked);
        };
        FSMTransition _doubleArrow_3 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition, _function_4);
        _transitions.add(_doubleArrow_3);
        EList<FSMTransition> _transitions_1 = it.getTransitions();
        FSMTransition _createFSMTransition_1 = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_5 = (FSMTransition it_1) -> {
            it_1.setInput("pass");
            it_1.setAction("alarm");
            it_1.setTarget(this.exception);
        };
        FSMTransition _doubleArrow_4 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition_1, _function_5);
        _transitions_1.add(_doubleArrow_4);
    };
    ObjectExtensions.<FSMState>operator_doubleArrow(this.locked, _function_3);
    final Procedure1<FSMState> _function_4 = (FSMState it) -> {
        EList<FSMTransition> _transitions = it.getTransitions();
        FSMTransition _createFSMTransition = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_5 = (FSMTransition it_1) -> {
            it_1.setInput("ticket");
            it_1.setAction("eject");
        };
        FSMTransition _doubleArrow_3 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition, _function_5);
        _transitions.add(_doubleArrow_3);
        EList<FSMTransition> _transitions_1 = it.getTransitions();
        FSMTransition _createFSMTransition_1 = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_6 = (FSMTransition it_1) -> {
            it_1.setInput("pass");
            it_1.setTarget(this.locked);
        };
        FSMTransition _doubleArrow_4 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition_1, _function_6);
        _transitions_1.add(_doubleArrow_4);
    };
    ObjectExtensions.<FSMState>operator_doubleArrow(this.unlocked, _function_4);
    final Procedure1<FSMState> _function_5 = (FSMState it) -> {
        EList<FSMTransition> _transitions = it.getTransitions();
        FSMTransition _createFSMTransition = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_6 = (FSMTransition it_1) -> {
            it_1.setInput("ticket");
            it_1.setAction("eject");
        };
        FSMTransition _doubleArrow_3 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition, _function_6);
        _transitions.add(_doubleArrow_3);
        EList<FSMTransition> _transitions_1 = it.getTransitions();
        FSMTransition _createFSMTransition_1 = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_7 = (FSMTransition it_1) -> {
            it_1.setInput("pass");
        };
        FSMTransition _doubleArrow_4 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition_1, _function_7);
        _transitions_1.add(_doubleArrow_4);
        EList<FSMTransition> _transitions_2 = it.getTransitions();
        FSMTransition _createFSMTransition_2 = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_8 = (FSMTransition it_1) -> {
            it_1.setInput("mute");
        };
        FSMTransition _doubleArrow_5 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition_2, _function_8);
        _transitions_2.add(_doubleArrow_5);
        EList<FSMTransition> _transitions_3 = it.getTransitions();
        FSMTransition _createFSMTransition_3 = this.fsmlFactory.createFSMTransition();
        final Procedure1<FSMTransition> _function_9 = (FSMTransition it_1) -> {
            it_1.setInput("release");
            it_1.setTarget(this.locked);
        };
        FSMTransition _doubleArrow_6 = ObjectExtensions.<FSMTransition>operator_doubleArrow(_createFSMTransition_3, _function_9);
        _transitions_3.add(_doubleArrow_6);
    };
    ObjectExtensions.<FSMState>operator_doubleArrow(this.exception, _function_5);
    FSM _createFSM = this.fsmlFactory.createFSM();
    final Procedure1<FSM> _function_6 = (FSM it) -> {
        EList<FSMState> _states = it.getStates();
        _states.add(this.locked);
        EList<FSMState> _states_1 = it.getStates();
        _states_1.add(this.unlocked);
        EList<FSMState> _states_2 = it.getStates();
        _states_2.add(this.exception);
    };
    FSM _doubleArrow_3 = ObjectExtensions.<FSM>operator_doubleArrow(_createFSM, _function_6);
    this.fsm = _doubleArrow_3;
}
Also used : FSM(org.softlang.metalib.xtext.fsml.fsml.FSM) EList(org.eclipse.emf.common.util.EList) FSMState(org.softlang.metalib.xtext.fsml.fsml.FSMState) FSMTransition(org.softlang.metalib.xtext.fsml.fsml.FSMTransition) Procedure1(org.eclipse.xtext.xbase.lib.Procedures.Procedure1) Before(org.junit.Before)

Example 5 with FSM

use of org.softlang.metalib.xtext.fsml.fsml.FSM in project metalib by softlang.

the class FsmlSemanticSequencer method sequence.

@Override
public void sequence(ISerializationContext context, EObject semanticObject) {
    EPackage epackage = semanticObject.eClass().getEPackage();
    ParserRule rule = context.getParserRule();
    Action action = context.getAssignedAction();
    Set<Parameter> parameters = context.getEnabledBooleanParameters();
    if (epackage == FsmlPackage.eINSTANCE)
        switch(semanticObject.eClass().getClassifierID()) {
            case FsmlPackage.FSM:
                sequence_FSM(context, (FSM) semanticObject);
                return;
            case FsmlPackage.FSM_STATE:
                sequence_FSMState(context, (FSMState) semanticObject);
                return;
            case FsmlPackage.FSM_TRANSITION:
                sequence_FSMTransition(context, (FSMTransition) semanticObject);
                return;
        }
    if (errorAcceptor != null)
        errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) FSM(org.softlang.metalib.xtext.fsml.fsml.FSM) Action(org.eclipse.xtext.Action) FSMState(org.softlang.metalib.xtext.fsml.fsml.FSMState) FSMTransition(org.softlang.metalib.xtext.fsml.fsml.FSMTransition) Parameter(org.eclipse.xtext.Parameter) EPackage(org.eclipse.emf.ecore.EPackage)

Aggregations

FSM (org.softlang.metalib.xtext.fsml.fsml.FSM)7 EList (org.eclipse.emf.common.util.EList)5 FSMState (org.softlang.metalib.xtext.fsml.fsml.FSMState)4 FSMTransition (org.softlang.metalib.xtext.fsml.fsml.FSMTransition)4 StringConcatenation (org.eclipse.xtend2.lib.StringConcatenation)3 EObject (org.eclipse.emf.ecore.EObject)2 Resource (org.eclipse.emf.ecore.resource.Resource)2 Pair (org.eclipse.xtext.xbase.lib.Pair)2 Test (org.junit.Test)2 List (java.util.List)1 Set (java.util.Set)1 EPackage (org.eclipse.emf.ecore.EPackage)1 Action (org.eclipse.xtext.Action)1 Parameter (org.eclipse.xtext.Parameter)1 ParserRule (org.eclipse.xtext.ParserRule)1 XtextResourceSet (org.eclipse.xtext.resource.XtextResourceSet)1 Function1 (org.eclipse.xtext.xbase.lib.Functions.Function1)1 Procedure1 (org.eclipse.xtext.xbase.lib.Procedures.Procedure1)1 Before (org.junit.Before)1