Search in sources :

Example 1 with Command

use of org.eclipse.xtext.example.fowlerdsl.statemachine.Command in project xtext-eclipse by eclipse.

the class StatemachineSemanticSequencer 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 == StatemachinePackage.eINSTANCE)
        switch(semanticObject.eClass().getClassifierID()) {
            case StatemachinePackage.COMMAND:
                sequence_Command(context, (Command) semanticObject);
                return;
            case StatemachinePackage.EVENT:
                sequence_Event(context, (Event) semanticObject);
                return;
            case StatemachinePackage.STATE:
                sequence_State(context, (State) semanticObject);
                return;
            case StatemachinePackage.STATEMACHINE:
                sequence_Statemachine(context, (Statemachine) semanticObject);
                return;
            case StatemachinePackage.TRANSITION:
                sequence_Transition(context, (Transition) semanticObject);
                return;
        }
    if (errorAcceptor != null)
        errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
}
Also used : ParserRule(org.eclipse.xtext.ParserRule) Statemachine(org.eclipse.xtext.example.fowlerdsl.statemachine.Statemachine) Action(org.eclipse.xtext.Action) Command(org.eclipse.xtext.example.fowlerdsl.statemachine.Command) State(org.eclipse.xtext.example.fowlerdsl.statemachine.State) Transition(org.eclipse.xtext.example.fowlerdsl.statemachine.Transition) Parameter(org.eclipse.xtext.Parameter) Event(org.eclipse.xtext.example.fowlerdsl.statemachine.Event) EPackage(org.eclipse.emf.ecore.EPackage)

Example 2 with Command

use of org.eclipse.xtext.example.fowlerdsl.statemachine.Command in project xtext-eclipse by eclipse.

the class StatemachineGenerator method toJavaCode.

protected CharSequence toJavaCode(final Statemachine sm) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("import java.io.BufferedReader;");
    _builder.newLine();
    _builder.append("import java.io.IOException;");
    _builder.newLine();
    _builder.append("import java.io.InputStreamReader;");
    _builder.newLine();
    _builder.newLine();
    _builder.append("public class ");
    String _className = this.className(sm.eResource());
    _builder.append(_className);
    _builder.append(" {");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("public static void main(String[] args) {");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("new ");
    String _className_1 = this.className(sm.eResource());
    _builder.append(_className_1, "\t\t");
    _builder.append("().run();");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.append("}");
    _builder.newLine();
    _builder.append("\t");
    _builder.newLine();
    {
        EList<Command> _commands = sm.getCommands();
        for (final Command c : _commands) {
            _builder.append("\t");
            CharSequence _declareCommand = this.declareCommand(c);
            _builder.append(_declareCommand, "\t");
            _builder.newLineIfNotEmpty();
        }
    }
    _builder.append("\t");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("protected void run() {");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("boolean executeActions = true;");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("String currentState = \"");
    State _head = IterableExtensions.<State>head(sm.getStates());
    String _name = null;
    if (_head != null) {
        _name = _head.getName();
    }
    _builder.append(_name, "\t\t");
    _builder.append("\";");
    _builder.newLineIfNotEmpty();
    _builder.append("\t\t");
    _builder.append("String lastEvent = null;");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("while (true) {");
    _builder.newLine();
    {
        EList<State> _states = sm.getStates();
        for (final State state : _states) {
            _builder.append("\t\t\t");
            CharSequence _generateCode = this.generateCode(state);
            _builder.append(_generateCode, "\t\t\t");
            _builder.newLineIfNotEmpty();
        }
    }
    {
        EList<Event> _resetEvents = sm.getResetEvents();
        for (final Event resetEvent : _resetEvents) {
            _builder.append("\t\t\t");
            _builder.append("if (\"");
            String _name_1 = resetEvent.getName();
            _builder.append(_name_1, "\t\t\t");
            _builder.append("\".equals(lastEvent)) {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append("\t");
            _builder.append("System.out.println(\"Resetting state machine.\");");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("\t");
            _builder.append("currentState = \"");
            State _head_1 = IterableExtensions.<State>head(sm.getStates());
            String _name_2 = null;
            if (_head_1 != null) {
                _name_2 = _head_1.getName();
            }
            _builder.append(_name_2, "\t\t\t\t");
            _builder.append("\";");
            _builder.newLineIfNotEmpty();
            _builder.append("\t\t\t");
            _builder.append("\t");
            _builder.append("executeActions = true;");
            _builder.newLine();
            _builder.append("\t\t\t");
            _builder.append("}");
            _builder.newLine();
        }
    }
    _builder.append("\t\t\t");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("}");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("}");
    _builder.newLine();
    _builder.append("\t");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("private String receiveEvent() {");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("System.out.flush();");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("BufferedReader br = new BufferedReader(new InputStreamReader(System.in));");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("try {");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("return br.readLine();");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("} catch (IOException ioe) {");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("System.out.println(\"Problem reading input\");");
    _builder.newLine();
    _builder.append("\t\t\t");
    _builder.append("return \"\";");
    _builder.newLine();
    _builder.append("\t\t");
    _builder.append("}");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("}");
    _builder.newLine();
    _builder.append("}");
    _builder.newLine();
    return _builder;
}
Also used : EList(org.eclipse.emf.common.util.EList) Command(org.eclipse.xtext.example.fowlerdsl.statemachine.Command) State(org.eclipse.xtext.example.fowlerdsl.statemachine.State) StringConcatenation(org.eclipse.xtend2.lib.StringConcatenation) Event(org.eclipse.xtext.example.fowlerdsl.statemachine.Event)

Example 3 with Command

use of org.eclipse.xtext.example.fowlerdsl.statemachine.Command in project xtext-eclipse by eclipse.

the class StatemachineGenerator method generateCode.

protected CharSequence generateCode(final State state) {
    StringConcatenation _builder = new StringConcatenation();
    _builder.append("if (currentState.equals(\"");
    String _name = state.getName();
    _builder.append(_name);
    _builder.append("\")) {");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.append("if (executeActions) {");
    _builder.newLine();
    {
        EList<Command> _actions = state.getActions();
        for (final Command c : _actions) {
            _builder.append("\t\t");
            _builder.append("do");
            String _firstUpper = StringExtensions.toFirstUpper(c.getName());
            _builder.append(_firstUpper, "\t\t");
            _builder.append("();");
            _builder.newLineIfNotEmpty();
        }
    }
    _builder.append("\t\t");
    _builder.append("executeActions = false;");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("}");
    _builder.newLine();
    _builder.append("\t");
    _builder.append("System.out.println(\"Your are now in state \'");
    String _name_1 = state.getName();
    _builder.append(_name_1, "\t");
    _builder.append("\'. Possible events are [");
    final Function1<Transition, String> _function = (Transition t) -> {
        return t.getEvent().getName();
    };
    String _join = IterableExtensions.join(ListExtensions.<Transition, String>map(state.getTransitions(), _function), ", ");
    _builder.append(_join, "\t");
    _builder.append("].\");");
    _builder.newLineIfNotEmpty();
    _builder.append("\t");
    _builder.append("lastEvent = receiveEvent();");
    _builder.newLine();
    {
        EList<Transition> _transitions = state.getTransitions();
        for (final Transition t : _transitions) {
            _builder.append("\t");
            _builder.append("if (\"");
            String _name_2 = t.getEvent().getName();
            _builder.append(_name_2, "\t");
            _builder.append("\".equals(lastEvent)) {");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t");
            _builder.append("currentState = \"");
            String _name_3 = t.getState().getName();
            _builder.append(_name_3, "\t\t");
            _builder.append("\";");
            _builder.newLineIfNotEmpty();
            _builder.append("\t");
            _builder.append("\t");
            _builder.append("executeActions = true;");
            _builder.newLine();
            _builder.append("\t");
            _builder.append("}");
            _builder.newLine();
        }
    }
    _builder.append("}");
    _builder.newLine();
    return _builder;
}
Also used : EList(org.eclipse.emf.common.util.EList) Command(org.eclipse.xtext.example.fowlerdsl.statemachine.Command) StringConcatenation(org.eclipse.xtend2.lib.StringConcatenation) Transition(org.eclipse.xtext.example.fowlerdsl.statemachine.Transition)

Example 4 with Command

use of org.eclipse.xtext.example.fowlerdsl.statemachine.Command in project xtext-eclipse by eclipse.

the class StatemachineFormatter method formatCommands.

protected void formatCommands(Statemachine sm, IFormattableDocument doc) {
    // indent the command definitions between the 'commands' keyword and the 'end'
    // keyword
    ISemanticRegion begin = regionFor(sm).keyword("commands");
    ISemanticRegion end = regionFor(sm).keyword(ga.getStatemachineAccess().getEndKeyword_3_2());
    doc.append(begin, it -> it.newLine());
    doc.interior(begin, end, it -> it.indent());
    for (Command command : sm.getCommands()) {
        format(command, doc);
    }
    if (hasStates(sm)) {
        doc.append(end, it -> it.setNewLines(2));
    }
}
Also used : Command(org.eclipse.xtext.example.fowlerdsl.statemachine.Command) ISemanticRegion(org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion)

Aggregations

Command (org.eclipse.xtext.example.fowlerdsl.statemachine.Command)4 EList (org.eclipse.emf.common.util.EList)2 StringConcatenation (org.eclipse.xtend2.lib.StringConcatenation)2 Event (org.eclipse.xtext.example.fowlerdsl.statemachine.Event)2 State (org.eclipse.xtext.example.fowlerdsl.statemachine.State)2 Transition (org.eclipse.xtext.example.fowlerdsl.statemachine.Transition)2 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 Statemachine (org.eclipse.xtext.example.fowlerdsl.statemachine.Statemachine)1 ISemanticRegion (org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion)1