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]

Reply via email to