Author: rahul Date: Wed Mar 7 18:53:10 2007 New Revision: 515904 URL: http://svn.apache.org/viewvc?view=rev&rev=515904 Log: Add transition conflict resolution based on document order. Uncomment tie breaker tests added earlier today that now work.
Modified: jakarta/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/semantics/SCXMLSemanticsImpl.java jakarta/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/TieBreakerTest.java Modified: jakarta/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/semantics/SCXMLSemanticsImpl.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/semantics/SCXMLSemanticsImpl.java?view=diff&rev=515904&r1=515903&r2=515904 ============================================================================== --- jakarta/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/semantics/SCXMLSemanticsImpl.java (original) +++ jakarta/commons/proper/scxml/trunk/src/main/java/org/apache/commons/scxml/semantics/SCXMLSemanticsImpl.java Wed Mar 7 18:53:10 2007 @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -425,7 +426,7 @@ Object[] trans = step.getTransitList().toArray(); Set currentStates = step.getBeforeStatus().getStates(); // non-determinism candidates - Set nonDeterm = new HashSet(); + Set nonDeterm = new LinkedHashSet(); for (int i = 0; i < trans.length; i++) { Transition t = (Transition) trans[i]; TransitionTarget tsrc = t.getParent(); @@ -454,11 +455,15 @@ // check if all non-deterministic situations have been resolved nonDeterm.removeAll(removeList); if (nonDeterm.size() > 0) { - errRep.onError(ErrorConstants.NON_DETERMINISTIC, - "Multiple conflicting transitions enabled.", nonDeterm); + // if not, first one wins (which is also first + // in document order) + Transition t = (Transition) nonDeterm.iterator().next(); + nonDeterm.remove(t); } // apply global transition filter step.getTransitList().removeAll(removeList); + // apply document order priority + step.getTransitList().removeAll(nonDeterm); removeList.clear(); nonDeterm.clear(); } Modified: jakarta/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/TieBreakerTest.java URL: http://svn.apache.org/viewvc/jakarta/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/TieBreakerTest.java?view=diff&rev=515904&r1=515903&r2=515904 ============================================================================== --- jakarta/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/TieBreakerTest.java (original) +++ jakarta/commons/proper/scxml/trunk/src/test/java/org/apache/commons/scxml/TieBreakerTest.java Wed Mar 7 18:53:10 2007 @@ -78,7 +78,6 @@ /** * Test the implementation */ - /* TODO - These tests must pass before v0.7 public void testTieBreaker01() { exec = SCXMLTestHelper.getExecutor(tiebreaker01); assertNotNull(exec); @@ -116,7 +115,7 @@ assertEquals(1, currentStates.size()); assertEquals("forty", ((State)currentStates.iterator(). next()).getId()); - }*/ + } public static void main(String args[]) { TestRunner.run(suite()); --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]