protected String getInfo(String name, List<String> parameters) throws IllegalActionException { ptolemy.domains.fsm.kernel.FSMActor fa = (ptolemy.domains.fsm.kernel.FSMActor) getComponent(); if (name.equals("initState")) { return fa.getInitialState().getName(); } if (name.equals("transitions")) { ArrayList transitions = new ArrayList(); for (State s : (List<State>) fa.entityList(State.class)) { transitions.addAll(s.outgoingPort.linkedRelationList()); } return new ListTerm<Transition>("emptyTransitionSet", " ;" + _eol, transitions) { public String item(Transition t) throws IllegalActionException { return ((RTMaudeAdaptor) _getHelper(t)).generateTermCode(); } }.generateCode(); } return super.getInfo(name, parameters); }
/** * Generate mode code for the FSM. Notice the refinements share same inputs and outputs. Here, the * mode, state and refinement have same meaning. * * @param fsm The FSM generated mode code from. * @param inputPorts The inputs of fsm model. * @param outputPorts The outputs of fsm model. * @return The fsm submode code. */ private String _fsmModeCode(FSMActor fsm, String inputPorts, String outputPorts) throws IllegalActionException { String subModeCode = ""; String transitionString = ""; transitionString += (" trans from default to " + fsm.getInitialState().getName() + _endLine + " when ( true ) do { } " + _endLine); ListIterator stateIterator = fsm.entityList().listIterator(); while (stateIterator.hasNext()) { State st = (State) stateIterator.next(); if (st.getRefinement() != null) { Actor[] refinements = st.getRefinement(); CompositeActor refinement = (CompositeActor) refinements[0]; String stParameters = _agentParameters(refinement, false); String typedStParameters = _agentParameters(refinement, true); String flowString = ""; String invariantString = ""; _modeCode += (" mode " + st.getName() + " = " + st.getName() + "Mode" + " ( " + stParameters + " );" + _endLine); flowString = _graphToText(refinement); ListIterator assertions = _assertions(refinement).listIterator(); while (assertions.hasNext()) { Assertion assertion = (Assertion) assertions.next(); if (invariantString.length() == 0) { invariantString = "inv { " + assertion.assertion.getExpression(); } else { invariantString += (" ; " + assertion.assertion.getExpression()); } invariantString += " } "; } subModeCode += ("mode " + st.getName() + "Mode " + "( " + typedStParameters + " )" + _endLine + "{" + _endLine + " " + outputPorts + _endLine + " " + inputPorts + _endLine + " " + flowString + _endLine + " " + invariantString + _endLine + "}" + _endLine); LinkedList transitionList = new LinkedList(); transitionList.addAll(st.preemptiveTransitionList()); transitionList.addAll(st.nonpreemptiveTransitionList()); ListIterator transitionItr = transitionList.listIterator(); while (transitionItr.hasNext()) { Transition tr = (Transition) transitionItr.next(); State newState = tr.destinationState(); String guardString = tr.getGuardExpression(); transitionString += (" trans from " + st.getName() + " to " + newState.getName() + _endLine + " when ( " + guardString + ") " + _endLine + " do {}" + _endLine); } } } _modeCode += (transitionString + _endLine); return subModeCode; }