From c7cb7e4f0523b2d7aee632d597cc7c146b1207ba Mon Sep 17 00:00:00 2001 From: "yaron.yamin" Date: Mon, 9 Nov 2015 09:56:32 +0200 Subject: [PATCH] scxml export: remove redundant Always condition --- .../foundation/fsm/impl/SCXMLVisitorImpl.java | 15 +++++++++++++-- .../fsm/impl/StateMachineImporterImpl.java | 15 ++++++++++++++- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/SCXMLVisitorImpl.java b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/SCXMLVisitorImpl.java index 2b42bdcf..12da29af 100644 --- a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/SCXMLVisitorImpl.java +++ b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/SCXMLVisitorImpl.java @@ -83,13 +83,24 @@ public void visitOnEntry(ImmutableTransition visitable) { + quoteName(visitable.getEvent().toString()) + " sqrl:priority=" + quoteName(Integer.toString(visitable.getPriority())) + " sqrl:type=" + quoteName(visitable.getType().toString()) + " target=" - + quoteName(visitable.getTargetState().toString()) + " cond=" - + quoteName(visitable.getCondition().toString())+">"); + + quoteName(visitable.getTargetState().toString()) + buildCondition(visitable.getCondition()) + ">"); for(Action action : visitable.getActions()) { writeAction(action); } } + private String buildCondition(Condition condition) + { + if (Conditions.always().toString().equals(condition.toString())) + { + return ""; + } + else + { + return " cond=" + quoteName(condition.toString()); + } + } + @Override public void visitOnExit(ImmutableTransition visitable) { writeLine(""); diff --git a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/StateMachineImporterImpl.java b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/StateMachineImporterImpl.java index b49839bc..c3c8f819 100644 --- a/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/StateMachineImporterImpl.java +++ b/squirrel-foundation/src/main/java/org/squirrelframework/foundation/fsm/impl/StateMachineImporterImpl.java @@ -242,6 +242,19 @@ public void startElement(String uri, String localName, String qName, currentTranstionBuilder=builder; getCurrentTranstionBuilder().from(getCurrentState().getStateId()).to(targetStateId).on(event); String conditionScript = attributes.getValue("cond"); + parseCondition(conditionScript); + } + } + + private void parseCondition(String conditionScript) + { + if (conditionScript == null) + { + final Condition condition = newInstance(Conditions.Always.class.getName()); + getCurrentTranstionBuilder().when(condition); + } + else + { int condPos = conditionScript.indexOf("#"); String condSchema = conditionScript.substring(0, condPos); String condContent = conditionScript.substring(condPos+1); @@ -254,7 +267,7 @@ public void startElement(String uri, String localName, String qName, } } } - + protected boolean isConstructState() { return currentStates.size()>0 && currentTranstionBuilder==null && isEntryAction!=null; }