Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManagerTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManagerTest.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManagerTest.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TaskTreeManagerTest.java,v $
 // Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 21:32:36 $
@@ -5,5 +4,4 @@
 // Creation  : 2011 by Patrick
 // Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
 
 package de.ugoe.cs.quest.tasktrees.manager;
@@ -15,7 +13,7 @@
 import org.junit.Test;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
-import de.ugoe.cs.quest.eventcore.userinteraction.InteractionEvent;
+import de.ugoe.cs.quest.eventcore.Event;
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
@@ -23,554 +21,456 @@
 import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
- *
+ * 
  * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
+ * @author 2011, last modified by $Author: $
  */
-//-------------------------------------------------------------------------------------------------
-
-public class TaskTreeManagerTest
-{
-  /** */
-  TaskTreeManager mManager;
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Before
-  public void setUp()
-  {
-    Logger.getLogger("").getHandlers()[0].setFormatter(new SimpleLogFormatter());
+public class TaskTreeManagerTest {
     
-    mManager = new TaskTreeManager();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @After
-  public void tearDown()
-  {
-    mManager = null;
-    ComponentManager.clearInstance();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testOneInteractionOnOneElement()
-  {
-    simulateInteraction(new DummyGUIElement("elem1"), new DummyInteraction("bla", 1));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence {" +
-       "  Interaction bla {}" +
-       "}", mManager.getTaskTree());
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testManyInteractionsOnOneElement()
-  {
-    GUIElement element = new DummyGUIElement("elem1");
-    simulateInteraction(element, new DummyInteraction("bla", 1));
-    simulateInteraction(element, new DummyInteraction("bli", 1));
-    simulateInteraction(element, new DummyInteraction("blo", 1));
-    simulateInteraction(element, new DummyInteraction("blu", 1));
-    simulateInteraction(element, new DummyInteraction("bla", 1));
-
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence {" +
-       "  Interaction bla {}" +
-       "  Interaction bli {}" +
-       "  Interaction blo {}" +
-       "  Interaction blu {}" +
-       "  Interaction bla {}" +
-       "}", mManager.getTaskTree());
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testOneInteractionOnManyElements()
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem2");
-    GUIElement element3 = new DummyGUIElement("elem3");
-    GUIElement element4 = new DummyGUIElement("elem4");
-    GUIElement element5 = new DummyGUIElement("elem5");
-    GUIElement element6 = new DummyGUIElement("elem6");
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element2, new DummyInteraction("bli", 1));
-    simulateInteraction(element3, new DummyInteraction("bla", 1));
-    simulateInteraction(element4, new DummyInteraction("bli", 1));
-    simulateInteraction(element5, new DummyInteraction("blo", 1));
-    simulateInteraction(element6, new DummyInteraction("bla", 1));
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bli {}" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    Interaction bli {}" +
-       "  }" +
-       "  Sequence sequence5 {" +
-       "    Interaction blo {}" +
-       "  }" +
-       "  Sequence sequence6 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", mManager.getTaskTree());
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testManyInteractionsOnManyElements()
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem2");
-    GUIElement element3 = new DummyGUIElement("elem3");
-    GUIElement element4 = new DummyGUIElement("elem4");
-    GUIElement element5 = new DummyGUIElement("elem5");
-    GUIElement element6 = new DummyGUIElement("elem6");
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element1, new DummyInteraction("bli", 1));
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element2, new DummyInteraction("bli", 1));
-    simulateInteraction(element2, new DummyInteraction("blo", 1));
-    simulateInteraction(element3, new DummyInteraction("bla", 1));
-    simulateInteraction(element4, new DummyInteraction("bli", 1));
-    simulateInteraction(element4, new DummyInteraction("bla", 1));
-    simulateInteraction(element4, new DummyInteraction("bli", 1));
-    simulateInteraction(element4, new DummyInteraction("blo", 1));
-    simulateInteraction(element5, new DummyInteraction("bla", 1));
-    simulateInteraction(element6, new DummyInteraction("bli", 1));
-    simulateInteraction(element6, new DummyInteraction("bla", 1));
-    simulateInteraction(element6, new DummyInteraction("bli", 1));
-    simulateInteraction(element6, new DummyInteraction("blo", 1));
-
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bli {}" +
-       "    Interaction blo {}" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    Interaction bli {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction blo {}" +
-       "  }" +
-       "  Sequence sequence5 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence6 {" +
-       "    Interaction bli {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction blo {}" +
-       "  }" +
-       "}", mManager.getTaskTree());
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testInteractionIterationDetection() throws Exception
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    Interaction interaction1 = new DummyInteraction("bla", 1);
-    simulateInteraction(element1, interaction1);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Interaction bla {}" +
-       "}", mManager.getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-    
-    // now test with preceding and trailing other interactions
-    Interaction interaction2 = new DummyInteraction("bli", 1);
-    Interaction interaction3 = new DummyInteraction("blup", 1);
-
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
-    }
-    simulateInteraction(element1, interaction3);
-    simulateInteraction(element1, interaction2);
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction bli {}" +
-       "  Interaction blup {}" +
-       "  Iteration iteration2 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction blup {}" +
-       "  Interaction bli {}" +
-       "}", mManager.getTaskTree());    
-  
-    // now test with iterations of iterations
-
-    for (int i = 0; i < 10; i++)
-    {
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction1);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction2);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction3);
-      }
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Iteration iteration0 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction bli {}" +
-       "  Interaction blup {}" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction blup {}" +
-       "  Interaction bli {}" +
-       "  Iteration iteration2 {" +
-       "    Sequence sequence1 {" +
-       "      Iteration iteration3 {" +
-       "        Interaction bla {}" +
-       "      }" +
-       "      Iteration iteration4 {" +
-       "        Interaction bli {}" +
-       "      }" +
-       "      Iteration iteration5 {" +
-       "        Interaction blup {}" +
-       "      }" +
-       "    }" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-  
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testSequenceIterationDetection() throws Exception
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    Interaction interaction1 = new DummyInteraction("bla", 1);
-    Interaction interaction2 = new DummyInteraction("bli", 1);
-    Interaction interaction3 = new DummyInteraction("blup", 1);
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Interaction bla {}" +
-       "  Interaction bli {}" +
-       "  Interaction blup {}" +
-       "}", mManager.getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
-      simulateInteraction(element1, interaction2);
-      simulateInteraction(element1, interaction3);
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-    
-    // now test with preceding and trailing other interactions
-    Interaction interaction4 = new DummyInteraction("ble", 1);
-    Interaction interaction5 = new DummyInteraction("blo", 1);
-    Interaction interaction6 = new DummyInteraction("blu", 1);
-    simulateInteraction(element1, interaction4);
-    simulateInteraction(element1, interaction5);
-    simulateInteraction(element1, interaction6);
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
-      simulateInteraction(element1, interaction2);
-      simulateInteraction(element1, interaction3);
-    }
-    simulateInteraction(element1, interaction6);
-    simulateInteraction(element1, interaction5);
-    simulateInteraction(element1, interaction4);
-    
-    new TaskTreeChecker().assertTaskTree
-    ("Sequence sequence1 {" +
-     "  Iteration iteration1 {" +
-     "    Sequence sequence2 {" +
-     "      Interaction bla {}" +
-     "      Interaction bli {}" +
-     "      Interaction blup {}" +
-     "    }" +
-     "  }" +
-     "  Interaction ble {}" +
-     "  Interaction blo {}" +
-     "  Interaction blu {}" +
-     "  Iteration iteration2 {" +
-     "    Sequence sequence3 {" +
-     "      Interaction bla {}" +
-     "      Interaction bli {}" +
-     "      Interaction blup {}" +
-     "    }" +
-     "  }" +
-     "  Interaction blu {}" +
-     "  Interaction blo {}" +
-     "  Interaction ble {}" +
-     "}", mManager.getTaskTree());    
-  
-    // now test with iterations of iterations
-    for (int i = 0; i < 10; i++)
-    {
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction1);
-        simulateInteraction(element1, interaction2);
-        simulateInteraction(element1, interaction3);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction2);
-        simulateInteraction(element1, interaction1);
-        simulateInteraction(element1, interaction3);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction1);
-        simulateInteraction(element1, interaction2);
-        simulateInteraction(element1, interaction3);
-      }
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "  Interaction ble {}" +
-       "  Interaction blo {}" +
-       "  Interaction blu {}" +
-       "  Iteration iteration2 {" +
-       "    Sequence sequence3 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "  Interaction blu {}" +
-       "  Interaction blo {}" +
-       "  Interaction ble {}" +
-       "  Iteration iteration3 {" +
-       "    Sequence sequence4 {" +
-       "      Iteration iteration4 {" +
-       "        Sequence sequence4 {" +
-       "          Interaction bla {}" +
-       "          Interaction bli {}" +
-       "          Interaction blup {}" +
-       "        }" +
-       "      }" +
-       "      Iteration iteration5 {" +
-       "        Sequence sequence5 {" +
-       "          Interaction bli {}" +
-       "          Interaction bla {}" +
-       "          Interaction blup {}" +
-       "        }" +
-       "      }" +
-       "      Iteration iteration6 {" +
-       "        Sequence sequence6 {" +
-       "          Interaction bla {}" +
-       "          Interaction bli {}" +
-       "          Interaction blup {}" +
-       "        }" +
-       "      }" +
-       "    }" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testGUIElementHierarchyChanges() throws Exception
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem2");
-    GUIElement element3 = new DummyGUIElement("elem3");
-    GUIElement parent1 = new DummyGUIElement("parent1");
-    GUIElement parent2 = new DummyGUIElement("parent2");
-    GUIElement parent3 = new DummyGUIElement("parent3");
-    
-    element1.setParent(parent1);
-    element2.setParent(parent2);
-    element3.setParent(parent3);
-    
-    parent1.setParent(parent2);
-    parent2.setParent(parent3);
-    
-    Interaction interaction1 = new DummyInteraction("bla", 1);
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element2, interaction1);
-    simulateInteraction(element3, interaction1);
-    simulateInteraction(element2, interaction1);
-    simulateInteraction(element3, interaction1);
-    simulateInteraction(element2, interaction1);
-    simulateInteraction(element1, interaction1);
-   
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Iteration iteration0 {" +
-       "    Sequence sequence3 {" +
-       "      Sequence sequence4 {" +
-       "        Interaction bla {}" +
-       "      }" +
-       "      Sequence sequence5 {" +
-       "        Interaction bla {}" +
-       "      }" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence6 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", mManager.getTaskTree());    
-
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param interactionsDoNotOverwriteElement
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void simulateInteraction(GUIElement GUIElement, Interaction interaction)
-  {
-    mManager.handleNewInteractionEvent(new InteractionEvent(GUIElement, interaction));
-  }
+    /** */
+    TaskTreeManager manager;
+
+    /**
+     *
+     */
+    @Before
+    public void setUp() {
+        Logger.getLogger("").getHandlers()[0].setFormatter(new SimpleLogFormatter());
+
+        manager = new TaskTreeManager();
+    }
+
+    /**
+     *
+     */
+    @After
+    public void tearDown() {
+        manager = null;
+        ComponentManager.clearInstance();
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOneEventOnOneElement() {
+        simulateEvent(new DummyInteraction("bla", 1), new DummyGUIElement("elem1"));
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence {" +
+             "  Event bla {}" +
+             "}", manager.getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testManyEventsOnOneElement() {
+        IEventTarget eventTarget = new DummyGUIElement("elem1");
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget);
+        simulateEvent(new DummyInteraction("blu", 1), eventTarget);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence {" +
+             "  Event bla {}" +
+             "  Event bli {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "  Event bla {}" +
+             "}", manager.getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOneEventOnManyElements() {
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        IEventTarget eventTarget3 = new DummyGUIElement("elem3");
+        IEventTarget eventTarget4 = new DummyGUIElement("elem4");
+        IEventTarget eventTarget5 = new DummyGUIElement("elem5");
+        IEventTarget eventTarget6 = new DummyGUIElement("elem6");
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget2);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget3);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget5);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget6);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bli {}" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    Event bli {}" +
+             "  }" +
+             "  Sequence sequence5 {" +
+             "    Event blo {}" +
+             "  }" +
+             "  Sequence sequence6 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", manager.getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testManyEventsOnManyElements() {
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        IEventTarget eventTarget3 = new DummyGUIElement("elem3");
+        IEventTarget eventTarget4 = new DummyGUIElement("elem4");
+        IEventTarget eventTarget5 = new DummyGUIElement("elem5");
+        IEventTarget eventTarget6 = new DummyGUIElement("elem6");
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget2);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget2);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget3);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget5);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget6);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget6);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget6);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget6);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bli {}" +
+             "    Event blo {}" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    Event bli {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event blo {}" +
+             "  }" +
+             "  Sequence sequence5 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence6 {" +
+             "    Event bli {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event blo {}" +
+             "  }" +
+             "}", manager.getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testEventIterationDetection() throws Exception {
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        IEventType event1 = new DummyInteraction("bla", 1);
+        simulateEvent(event1, eventTarget1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Event bla {}" +
+             "}", manager.getTaskTree());
+
+        simulateEvent(event1, eventTarget1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+        simulateEvent(event1, eventTarget1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, eventTarget1);
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+        // now test with preceding and trailing other interactions
+        IEventType event2 = new DummyInteraction("bli", 1);
+        IEventType event3 = new DummyInteraction("blup", 1);
+
+        simulateEvent(event2, eventTarget1);
+        simulateEvent(event3, eventTarget1);
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, eventTarget1);
+        }
+        simulateEvent(event3, eventTarget1);
+        simulateEvent(event2, eventTarget1);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event bli {}" +
+             "  Event blup {}" +
+             "  Iteration iteration2 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event blup {}" +
+             "  Event bli {}" +
+             "}", manager.getTaskTree());
+
+        // now test with iterations of iterations
+
+        for (int i = 0; i < 10; i++) {
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event1, eventTarget1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event2, eventTarget1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event3, eventTarget1);
+            }
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Iteration iteration0 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event bli {}" +
+             "  Event blup {}" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event blup {}" +
+             "  Event bli {}" +
+             "  Iteration iteration2 {" +
+             "    Sequence sequence1 {" +
+             "      Iteration iteration3 {" +
+             "        Event bla {}" +
+             "      }" +
+             "      Iteration iteration4 {" +
+             "        Event bli {}" +
+             "      }" +
+             "      Iteration iteration5 {" +
+             "        Event blup {}" +
+             "      }" +
+             "    }" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testSequenceIterationDetection() throws Exception {
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        IEventType event1 = new DummyInteraction("bla", 1);
+        IEventType event2 = new DummyInteraction("bli", 1);
+        IEventType event3 = new DummyInteraction("blup", 1);
+        simulateEvent(event1, eventTarget1);
+        simulateEvent(event2, eventTarget1);
+        simulateEvent(event3, eventTarget1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Event bla {}" +
+             "  Event bli {}" +
+             "  Event blup {}" +
+             "}", manager.getTaskTree());
+
+        simulateEvent(event1, eventTarget1);
+        simulateEvent(event2, eventTarget1);
+        simulateEvent(event3, eventTarget1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+        simulateEvent(event1, eventTarget1);
+        simulateEvent(event2, eventTarget1);
+        simulateEvent(event3, eventTarget1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, eventTarget1);
+            simulateEvent(event2, eventTarget1);
+            simulateEvent(event3, eventTarget1);
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "}", manager.getTaskTree());
+
+        // now test with preceding and trailing other interactions
+        IEventType event4 = new DummyInteraction("ble", 1);
+        IEventType event5 = new DummyInteraction("blo", 1);
+        IEventType event6 = new DummyInteraction("blu", 1);
+        simulateEvent(event4, eventTarget1);
+        simulateEvent(event5, eventTarget1);
+        simulateEvent(event6, eventTarget1);
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, eventTarget1);
+            simulateEvent(event2, eventTarget1);
+            simulateEvent(event3, eventTarget1);
+        }
+        simulateEvent(event6, eventTarget1);
+        simulateEvent(event5, eventTarget1);
+        simulateEvent(event4, eventTarget1);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event ble {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "  Iteration iteration2 {" +
+             "    Sequence sequence3 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event blu {}" +
+             "  Event blo {}" +
+             "  Event ble {}" +
+             "}", manager.getTaskTree());
+
+        // now test with iterations of iterations
+        for (int i = 0; i < 10; i++) {
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event1, eventTarget1);
+                simulateEvent(event2, eventTarget1);
+                simulateEvent(event3, eventTarget1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event2, eventTarget1);
+                simulateEvent(event1, eventTarget1);
+                simulateEvent(event3, eventTarget1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event1, eventTarget1);
+                simulateEvent(event2, eventTarget1);
+                simulateEvent(event3, eventTarget1);
+            }
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event ble {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "  Iteration iteration2 {" +
+             "    Sequence sequence3 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event blu {}" +
+             "  Event blo {}" +
+             "  Event ble {}" +
+             "  Iteration iteration3 {" +
+             "    Sequence sequence4 {" +
+             "      Iteration iteration4 {" +
+             "        Sequence sequence4 {" +
+             "          Event bla {}" +
+             "          Event bli {}" +
+             "          Event blup {}" +
+             "        }" +
+             "      }" +
+             "      Iteration iteration5 {" +
+             "        Sequence sequence5 {" +
+             "          Event bli {}" +
+             "          Event bla {}" +
+             "          Event blup {}" +
+             "        }" +
+             "      }" +
+             "      Iteration iteration6 {" +
+             "        Sequence sequence6 {" +
+             "          Event bla {}" +
+             "          Event bli {}" +
+             "          Event blup {}" +
+             "        }" +
+             "      }" +
+             "    }" +
+             "  }" +
+             "}", manager.getTaskTree());
+    }
+
+    /**
+     *
+     */
+    private void simulateEvent(IEventType eventType, IEventTarget eventTarget) {
+        manager.handleNewEvent(new Event(eventType, eventTarget));
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEqualityTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEqualityTest.java	(revision 557)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEqualityTest.java	(revision 557)
@@ -0,0 +1,57 @@
+// Module    : $RCSfile: NodeEqualityTest.java,v $
+// Version   : $Revision: 0.0 $  $Author: pharms $  $Date: 15.08.2012 $
+// Project   : quest-core-tasktrees-test
+// Creation  : 2012 by pharms
+// Copyright : Patrick Harms, 2012
+package de.ugoe.cs.quest.tasktrees.nodeequality;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 15.08.2012$
+ * @author 2012, last modified by $Author: pharms$
+ */
+public class NodeEqualityTest {
+
+    /**
+     * TODO: comment
+     *
+     */
+    @Test
+    public void test() {
+        assertTrue(NodeEquality.IDENTICAL.isAtLeast(NodeEquality.IDENTICAL));
+        assertTrue(NodeEquality.IDENTICAL.isAtLeast(NodeEquality.LEXICALLY_EQUAL));
+        assertTrue(NodeEquality.IDENTICAL.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL));
+        assertTrue(NodeEquality.IDENTICAL.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL));
+        assertFalse(NodeEquality.IDENTICAL.isAtLeast(NodeEquality.UNEQUAL));
+
+        assertFalse(NodeEquality.LEXICALLY_EQUAL.isAtLeast(NodeEquality.IDENTICAL));
+        assertTrue(NodeEquality.LEXICALLY_EQUAL.isAtLeast(NodeEquality.LEXICALLY_EQUAL));
+        assertTrue(NodeEquality.LEXICALLY_EQUAL.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL));
+        assertTrue(NodeEquality.LEXICALLY_EQUAL.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL));
+        assertFalse(NodeEquality.LEXICALLY_EQUAL.isAtLeast(NodeEquality.UNEQUAL));
+
+        assertFalse(NodeEquality.SYNTACTICALLY_EQUAL.isAtLeast(NodeEquality.IDENTICAL));
+        assertFalse(NodeEquality.SYNTACTICALLY_EQUAL.isAtLeast(NodeEquality.LEXICALLY_EQUAL));
+        assertTrue(NodeEquality.SYNTACTICALLY_EQUAL.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL));
+        assertTrue(NodeEquality.SYNTACTICALLY_EQUAL.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL));
+        assertFalse(NodeEquality.SYNTACTICALLY_EQUAL.isAtLeast(NodeEquality.UNEQUAL));
+
+        assertFalse(NodeEquality.SEMANTICALLY_EQUAL.isAtLeast(NodeEquality.IDENTICAL));
+        assertFalse(NodeEquality.SEMANTICALLY_EQUAL.isAtLeast(NodeEquality.LEXICALLY_EQUAL));
+        assertFalse(NodeEquality.SEMANTICALLY_EQUAL.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL));
+        assertTrue(NodeEquality.SEMANTICALLY_EQUAL.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL));
+        assertFalse(NodeEquality.SEMANTICALLY_EQUAL.isAtLeast(NodeEquality.UNEQUAL));
+
+        assertFalse(NodeEquality.UNEQUAL.isAtLeast(NodeEquality.IDENTICAL));
+        assertFalse(NodeEquality.UNEQUAL.isAtLeast(NodeEquality.LEXICALLY_EQUAL));
+        assertFalse(NodeEquality.UNEQUAL.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL));
+        assertFalse(NodeEquality.UNEQUAL.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL));
+        assertTrue(NodeEquality.UNEQUAL.isAtLeast(NodeEquality.UNEQUAL));
+    }
+
+}
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/SequenceComparisonRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/SequenceComparisonRuleTest.java	(revision 557)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/nodeequality/SequenceComparisonRuleTest.java	(revision 557)
@@ -0,0 +1,87 @@
+// Module    : $RCSfile: SequenceComparisonRuleTest.java,v $
+// Version   : $Revision: 0.0 $  $Author: pharms $  $Date: 16.08.2012 $
+// Project   : quest-core-tasktrees-test
+// Creation  : 2012 by pharms
+// Copyright : Patrick Harms, 2012
+package de.ugoe.cs.quest.tasktrees.nodeequality;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNode;
+
+/**
+ * <p>
+ * TODO comment
+ * </p>
+ * 
+ * @version $Revision: $ $Date: 16.08.2012$
+ * @author 2012, last modified by $Author: pharms$
+ */
+public class SequenceComparisonRuleTest {
+
+    /**
+     * <p>
+     * TODO: comment
+     * </p>
+     *
+     */
+    @Test
+    public void test() {
+        NodeEqualityRuleManager manager = new NodeEqualityRuleManager();
+        manager.init();
+        
+        ITaskTreeNodeFactory treeNodeFactory = new TaskTreeNodeFactory();
+        ITaskTreeBuilder treeBuilder = new TaskTreeBuilder();
+        
+        SequenceComparisonRule rule = new SequenceComparisonRule(manager);
+        
+        ITaskTreeNode task1 = new TaskTreeNode("task1");
+        ITaskTreeNode task2 = new TaskTreeNode("task2");
+        
+        assertNull(rule.compare(task1, task2));
+        
+        ISequence sequence1 = treeNodeFactory.createNewSequence();
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence1));
+
+        ISequence sequence2 = treeNodeFactory.createNewSequence();
+        
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence2));
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence2, sequence1));
+        
+        treeBuilder.addChild(sequence1, task1);
+        
+        assertNull(rule.compare(sequence1, sequence2));
+        assertNull(rule.compare(sequence2, sequence1));
+        
+        treeBuilder.addChild(sequence2, task1);
+        
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence2));
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence2, sequence1));
+        
+        treeBuilder.addChild(sequence1, task2);
+        
+        assertNull(rule.compare(sequence1, sequence2));
+        assertNull(rule.compare(sequence2, sequence1));
+        
+        treeBuilder.addChild(sequence2, task2);
+        
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence1, sequence2));
+        assertEquals(NodeEquality.LEXICALLY_EQUAL, rule.compare(sequence2, sequence1));
+        
+        ISequence sequence3 = treeNodeFactory.createNewSequence();
+        treeBuilder.addChild(sequence3, task2);
+        treeBuilder.addChild(sequence3, task1);
+        
+        assertNull(rule.compare(sequence1, sequence3));
+        assertNull(rule.compare(sequence3, sequence1));
+    }
+
+}
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/AbstractTemporalRelationshipTC.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: AbstractTemporalRelationshipTC.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 28.04.2012 $
@@ -5,5 +4,5 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
@@ -14,18 +13,17 @@
 import org.junit.Before;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEqualityRuleManager;
 import de.ugoe.cs.quest.tasktrees.testutils.SimpleLogFormatter;
 import de.ugoe.cs.quest.tasktrees.testutils.Utilities;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTree;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeBuilderImpl;
-import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactoryImpl;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -34,67 +32,54 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class AbstractTemporalRelationshipTC
-{
+public class AbstractTemporalRelationshipTC {
 
-  /** */
-  private List<InteractionTask> mInteractions;
-  
-  /** */
-  private TaskTreeBuilder mTaskTreeBuilder = new TaskTreeBuilderImpl();
+    /** */
+    private List<IEventTask> events;
 
-  /** */
-  private TaskTreeNodeFactory mTaskTreeNodeFactory = new TaskTreeNodeFactoryImpl();
-  
-  /** */
-  private NodeEqualityRuleManager mNodeEqualityRuleManager =
-    Utilities.getNodeEqualityRuleManagerForTests();
+    /** */
+    private ITaskTreeBuilder taskTreeBuilder = new TaskTreeBuilder();
 
-  //-----------------------------------------------------------------------------------------------
-  /**
+    /** */
+    private ITaskTreeNodeFactory taskTreeNodeFactory = new TaskTreeNodeFactory();
+
+    /** */
+    private NodeEqualityRuleManager nodeEqualityRuleManager =
+        Utilities.getNodeEqualityRuleManagerForTests();
+
+    /**
    *
    */
-  //-----------------------------------------------------------------------------------------------
-  @Before
-  public void setUp()
-  {
-    Logger.getLogger("").getHandlers()[0].setFormatter(new SimpleLogFormatter());
-    mInteractions = new ArrayList<InteractionTask>();
-  }
+    @Before
+    public void setUp() {
+        Logger.getLogger("").getHandlers()[0].setFormatter(new SimpleLogFormatter());
+        events = new ArrayList<IEventTask>();
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param interactionsDoNotOverwriteElement
-   */
-  //-----------------------------------------------------------------------------------------------
-  protected void simulateInteraction(GUIElement GUIElement, Interaction interaction)
-  {
-    mInteractions.add
-      (mTaskTreeNodeFactory.createNewInteractionTask(GUIElement, interaction));
-  }
+    /**
+     *
+     */
+    protected void simulateEvent(IEventType eventType, IEventTarget eventTarget) {
+        events.add(taskTreeNodeFactory.createNewEventTask(eventType, eventTarget));
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param interactionsDoNotOverwriteElement
-   * @return 
-   */
-  //-----------------------------------------------------------------------------------------------
-  protected TaskTree getTaskTree()
-  {
-    Sequence sequence = mTaskTreeNodeFactory.createNewSequence();
-    
-    for (InteractionTask task : mInteractions)
-    {
-      mTaskTreeBuilder.addChild(sequence, task);
+    /**
+     *
+     * @return
+     */
+    protected ITaskTree getTaskTree() {
+        ISequence sequence = taskTreeNodeFactory.createNewSequence();
+
+        for (IEventTask task : events) {
+            taskTreeBuilder.addChild(sequence, task);
+        }
+
+        TemporalRelationshipRuleManager ruleManager =
+            new TemporalRelationshipRuleManager(nodeEqualityRuleManager);
+
+        ruleManager.init();
+        ruleManager.applyRules(sequence, taskTreeBuilder, taskTreeNodeFactory, true);
+
+        return taskTreeNodeFactory.createTaskTree(sequence);
     }
-    
-    TemporalRelationshipRuleManager ruleManager =
-      new TemporalRelationshipRuleManager(mNodeEqualityRuleManager);
-    
-    ruleManager.init();
-    ruleManager.applyRules(sequence, mTaskTreeBuilder, mTaskTreeNodeFactory, true);
-    
-    return mTaskTreeNodeFactory.createTaskTree(sequence);
-  }
 
 }
Index: unk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGUIElementSequenceDetectionRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGUIElementSequenceDetectionRuleTest.java	(revision 556)
+++ 	(revision )
@@ -1,232 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTreeManagerTest.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 21:32:36 $
-// Project   : TaskTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.temporalrelation;
-
-import org.junit.Test;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
-import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
-import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
-import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public class DefaultGUIElementSequenceDetectionRuleTest extends AbstractTemporalRelationshipTC
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testOneInteractionOnOneElement()
-  {
-    simulateInteraction(new DummyGUIElement("elem1"), new DummyInteraction("bla", 1));
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence {" +
-       "  Interaction bla {}" +
-       "}", getTaskTree());
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testManyInteractionsOnOneElement()
-  {
-    GUIElement element = new DummyGUIElement("elem1");
-    simulateInteraction(element, new DummyInteraction("bla", 1));
-    simulateInteraction(element, new DummyInteraction("bli", 1));
-    simulateInteraction(element, new DummyInteraction("blo", 1));
-    simulateInteraction(element, new DummyInteraction("blu", 1));
-    simulateInteraction(element, new DummyInteraction("bla", 1));
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence {" +
-       "  Interaction bla {}" +
-       "  Interaction bli {}" +
-       "  Interaction blo {}" +
-       "  Interaction blu {}" +
-       "  Interaction bla {}" +
-       "}", getTaskTree());
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testOneInteractionOnManyElements()
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem2");
-    GUIElement element3 = new DummyGUIElement("elem3");
-    GUIElement element4 = new DummyGUIElement("elem4");
-    GUIElement element5 = new DummyGUIElement("elem5");
-    GUIElement element6 = new DummyGUIElement("elem6");
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element2, new DummyInteraction("bli", 1));
-    simulateInteraction(element3, new DummyInteraction("bla", 1));
-    simulateInteraction(element4, new DummyInteraction("bli", 1));
-    simulateInteraction(element5, new DummyInteraction("blo", 1));
-    simulateInteraction(element6, new DummyInteraction("bla", 1));
-
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bli {}" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    Interaction bli {}" +
-       "  }" +
-       "  Sequence sequence5 {" +
-       "    Interaction blo {}" +
-       "  }" +
-       "  Sequence sequence6 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", getTaskTree());
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testManyInteractionsOnManyElements()
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem2");
-    GUIElement element3 = new DummyGUIElement("elem3");
-    GUIElement element4 = new DummyGUIElement("elem4");
-    GUIElement element5 = new DummyGUIElement("elem5");
-    GUIElement element6 = new DummyGUIElement("elem6");
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element1, new DummyInteraction("bli", 1));
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element2, new DummyInteraction("bli", 1));
-    simulateInteraction(element2, new DummyInteraction("blo", 1));
-    simulateInteraction(element3, new DummyInteraction("bla", 1));
-    simulateInteraction(element4, new DummyInteraction("bli", 1));
-    simulateInteraction(element4, new DummyInteraction("bla", 1));
-    simulateInteraction(element4, new DummyInteraction("bli", 1));
-    simulateInteraction(element4, new DummyInteraction("blo", 1));
-    simulateInteraction(element5, new DummyInteraction("bla", 1));
-    simulateInteraction(element6, new DummyInteraction("bli", 1));
-    simulateInteraction(element6, new DummyInteraction("bla", 1));
-    simulateInteraction(element6, new DummyInteraction("bli", 1));
-    simulateInteraction(element6, new DummyInteraction("blo", 1));
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bli {}" +
-       "    Interaction blo {}" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    Interaction bli {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction blo {}" +
-       "  }" +
-       "  Sequence sequence5 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence6 {" +
-       "    Interaction bli {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction blo {}" +
-       "  }" +
-       "}", getTaskTree());
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testGUIElementHierarchyChanges() throws Exception
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem2");
-    GUIElement element3 = new DummyGUIElement("elem3");
-    GUIElement parent1 = new DummyGUIElement("parent1");
-    GUIElement parent2 = new DummyGUIElement("parent2");
-    GUIElement parent3 = new DummyGUIElement("parent3");
-    
-    element1.setParent(parent1);
-    element2.setParent(parent2);
-    element3.setParent(parent3);
-    
-    parent1.setParent(parent2);
-    parent2.setParent(parent3);
-    
-    Interaction interaction1 = new DummyInteraction("bla", 1);
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element2, interaction1);
-    simulateInteraction(element3, interaction1);
-    simulateInteraction(element2, interaction1);
-    simulateInteraction(element3, interaction1);
-    simulateInteraction(element2, interaction1);
-    simulateInteraction(element1, interaction1);
-   
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Iteration iteration0 {" +
-       "    Sequence sequence3 {" +
-       "      Sequence sequence4 {" +
-       "        Interaction bla {}" +
-       "      }" +
-       "      Sequence sequence5 {" +
-       "        Interaction bla {}" +
-       "      }" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence6 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-  }
-  
-}
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGuiEventSequenceDetectionRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGuiEventSequenceDetectionRuleTest.java	(revision 557)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGuiEventSequenceDetectionRuleTest.java	(revision 557)
@@ -0,0 +1,159 @@
+// Module    : $RCSfile: TaskTreeManagerTest.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 21:32:36 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.tasktrees.temporalrelation;
+
+import org.junit.Test;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
+import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
+import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class DefaultGuiEventSequenceDetectionRuleTest extends AbstractTemporalRelationshipTC {
+    
+    /**
+     *
+     */
+    @Test
+    public void testOneInteractionOnOneElement() {
+        simulateEvent(new DummyInteraction("bla", 1), new DummyGUIElement("elem1"));
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence {" +
+             "  Event bla {}" +
+             "}", getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testManyInteractionsOnOneElement() {
+        IEventTarget eventTarget = new DummyGUIElement("elem1");
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget);
+        simulateEvent(new DummyInteraction("blu", 1), eventTarget);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence {" +
+             "  Event bla {}" +
+             "  Event bli {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "  Event bla {}" +
+             "}", getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testOneInteractionOnManyElements() {
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        IEventTarget eventTarget3 = new DummyGUIElement("elem3");
+        IEventTarget eventTarget4 = new DummyGUIElement("elem4");
+        IEventTarget eventTarget5 = new DummyGUIElement("elem5");
+        IEventTarget eventTarget6 = new DummyGUIElement("elem6");
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget2);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget3);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget5);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget6);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bli {}" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    Event bli {}" +
+             "  }" +
+             "  Sequence sequence5 {" +
+             "    Event blo {}" +
+             "  }" +
+             "  Sequence sequence6 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", getTaskTree());
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testManyInteractionsOnManyElements() {
+        IEventTarget eventTarget1 = new DummyGUIElement("elem1");
+        IEventTarget eventTarget2 = new DummyGUIElement("elem2");
+        IEventTarget eventTarget3 = new DummyGUIElement("elem3");
+        IEventTarget eventTarget4 = new DummyGUIElement("elem4");
+        IEventTarget eventTarget5 = new DummyGUIElement("elem5");
+        IEventTarget eventTarget6 = new DummyGUIElement("elem6");
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget1);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget2);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget2);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget3);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget4);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget5);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget6);
+        simulateEvent(new DummyInteraction("bla", 1), eventTarget6);
+        simulateEvent(new DummyInteraction("bli", 1), eventTarget6);
+        simulateEvent(new DummyInteraction("blo", 1), eventTarget6);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bli {}" +
+             "    Event blo {}" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    Event bli {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event blo {}" +
+             "  }" +
+             "  Sequence sequence5 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Sequence sequence6 {" +
+             "    Event bli {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event blo {}" +
+             "  }" +
+             "}", getTaskTree());
+    }
+
+}
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultIterationDetectionRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultIterationDetectionRuleTest.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultIterationDetectionRuleTest.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DefaultIterationDetectionRuleTest.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 28.04.2012 $
@@ -5,16 +4,15 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
 import org.junit.Test;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
 import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -23,307 +21,287 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DefaultIterationDetectionRuleTest extends AbstractTemporalRelationshipTC
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testInteractionIterationDetection() throws Exception
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    Interaction interaction1 = new DummyInteraction("bla", 1);
-    simulateInteraction(element1, interaction1);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Interaction bla {}" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
+public class DefaultIterationDetectionRuleTest extends AbstractTemporalRelationshipTC {
+
+    /**
+     *
+     */
+    @Test
+    public void testInteractionIterationDetection() throws Exception {
+        IEventTarget element1 = new DummyGUIElement("elem1");
+        IEventType event1 = new DummyInteraction("bla", 1);
+        simulateEvent(event1, element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Event bla {}" +
+             "}", getTaskTree());
+
+        simulateEvent(event1, element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(event1, element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, element1);
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        // now test with preceding and trailing other events
+        IEventType event2 = new DummyInteraction("bli", 1);
+        IEventType event3 = new DummyInteraction("blup", 1);
+
+        simulateEvent(event2, element1);
+        simulateEvent(event3, element1);
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, element1);
+        }
+        simulateEvent(event3, element1);
+        simulateEvent(event2, element1);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event bli {}" +
+             "  Event blup {}" +
+             "  Iteration iteration2 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event blup {}" +
+             "  Event bli {}" +
+             "}", getTaskTree());
+
+        // now test with iterations of iterations
+
+        for (int i = 0; i < 10; i++) {
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event1, element1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event2, element1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event3, element1);
+            }
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event bli {}" +
+             "  Event blup {}" +
+             "  Iteration iteration2 {" +
+             "    Event bla {}" +
+             "  }" +
+             "  Event blup {}" +
+             "  Event bli {}" +
+             "  Iteration iteration3 {" +
+             "    Sequence sequence2 {" +
+             "      Iteration iteration4 {" +
+             "        Event bla {}" +
+             "      }" +
+             "      Iteration iteration5 {" +
+             "        Event bli {}" +
+             "      }" +
+             "      Iteration iteration6 {" +
+             "        Event blup {}" +
+             "      }" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
     }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", getTaskTree());    
-    
-    // now test with preceding and trailing other interactions
-    Interaction interaction2 = new DummyInteraction("bli", 1);
-    Interaction interaction3 = new DummyInteraction("blup", 1);
-
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
+
+    /**
+     *
+     */
+    @Test
+    public void testSequenceIterationDetection() throws Exception {
+        IEventTarget element1 = new DummyGUIElement("elem1");
+        IEventType event1 = new DummyInteraction("bla", 1);
+        IEventType event2 = new DummyInteraction("bli", 1);
+        IEventType event3 = new DummyInteraction("blup", 1);
+        simulateEvent(event1, element1);
+        simulateEvent(event2, element1);
+        simulateEvent(event3, element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Event bla {}" +
+             "  Event bli {}" +
+             "  Event blup {}" +
+             "}", getTaskTree());
+
+        simulateEvent(event1, element1);
+        simulateEvent(event2, element1);
+        simulateEvent(event3, element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(event1, element1);
+        simulateEvent(event2, element1);
+        simulateEvent(event3, element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, element1);
+            simulateEvent(event2, element1);
+            simulateEvent(event3, element1);
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        // now test with preceding and trailing other events
+        IEventType event4 = new DummyInteraction("ble", 1);
+        IEventType event5 = new DummyInteraction("blo", 1);
+        IEventType event6 = new DummyInteraction("blu", 1);
+        simulateEvent(event4, element1);
+        simulateEvent(event5, element1);
+        simulateEvent(event6, element1);
+        for (int i = 0; i < 10; i++) {
+            simulateEvent(event1, element1);
+            simulateEvent(event2, element1);
+            simulateEvent(event3, element1);
+        }
+        simulateEvent(event6, element1);
+        simulateEvent(event5, element1);
+        simulateEvent(event4, element1);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event ble {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "  Iteration iteration2 {" +
+             "    Sequence sequence3 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event blu {}" +
+             "  Event blo {}" +
+             "  Event ble {}" +
+             "}", getTaskTree());
+
+        // now test with iterations of iterations
+        for (int i = 0; i < 10; i++) {
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event1, element1);
+                simulateEvent(event2, element1);
+                simulateEvent(event3, element1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event2, element1);
+                simulateEvent(event1, element1);
+                simulateEvent(event3, element1);
+            }
+            for (int j = 0; j < 5; j++) {
+                simulateEvent(event1, element1);
+                simulateEvent(event2, element1);
+                simulateEvent(event3, element1);
+            }
+        }
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration iteration1 {" +
+             "    Sequence sequence2 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event ble {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "  Iteration iteration2 {" +
+             "    Sequence sequence3 {" +
+             "      Event bla {}" +
+             "      Event bli {}" +
+             "      Event blup {}" +
+             "    }" +
+             "  }" +
+             "  Event blu {}" +
+             "  Event blo {}" +
+             "  Event ble {}" +
+             "  Iteration iteration3 {" +
+             "    Sequence sequence4 {" +
+             "      Iteration iteration4 {" +
+             "        Sequence sequence4 {" +
+             "          Event bla {}" +
+             "          Event bli {}" +
+             "          Event blup {}" +
+             "        }" +
+             "      }" +
+             "      Iteration iteration5 {" +
+             "        Sequence sequence5 {" +
+             "          Event bli {}" +
+             "          Event bla {}" +
+             "          Event blup {}" +
+             "        }" +
+             "      }" +
+             "      Iteration iteration6 {" +
+             "        Sequence sequence6 {" +
+             "          Event bla {}" +
+             "          Event bli {}" +
+             "          Event blup {}" +
+             "        }" +
+             "      }" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
     }
-    simulateInteraction(element1, interaction3);
-    simulateInteraction(element1, interaction2);
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction bli {}" +
-       "  Interaction blup {}" +
-       "  Iteration iteration2 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction blup {}" +
-       "  Interaction bli {}" +
-       "}", getTaskTree());    
-  
-    // now test with iterations of iterations
-
-    for (int i = 0; i < 10; i++)
-    {
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction1);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction2);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction3);
-      }
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction bli {}" +
-       "  Interaction blup {}" +
-       "  Iteration iteration2 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "  Interaction blup {}" +
-       "  Interaction bli {}" +
-       "  Iteration iteration3 {" +
-       "    Sequence sequence2 {" +
-       "      Iteration iteration4 {" +
-       "        Interaction bla {}" +
-       "      }" +
-       "      Iteration iteration5 {" +
-       "        Interaction bli {}" +
-       "      }" +
-       "      Iteration iteration6 {" +
-       "        Interaction blup {}" +
-       "      }" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-  
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testSequenceIterationDetection() throws Exception
-  {
-    GUIElement element1 = new DummyGUIElement("elem1");
-    Interaction interaction1 = new DummyInteraction("bla", 1);
-    Interaction interaction2 = new DummyInteraction("bli", 1);
-    Interaction interaction3 = new DummyInteraction("blup", 1);
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Interaction bla {}" +
-       "  Interaction bli {}" +
-       "  Interaction blup {}" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, interaction1);
-    simulateInteraction(element1, interaction2);
-    simulateInteraction(element1, interaction3);
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
-      simulateInteraction(element1, interaction2);
-      simulateInteraction(element1, interaction3);
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-    
-    // now test with preceding and trailing other interactions
-    Interaction interaction4 = new DummyInteraction("ble", 1);
-    Interaction interaction5 = new DummyInteraction("blo", 1);
-    Interaction interaction6 = new DummyInteraction("blu", 1);
-    simulateInteraction(element1, interaction4);
-    simulateInteraction(element1, interaction5);
-    simulateInteraction(element1, interaction6);
-    for (int i = 0; i < 10; i++)
-    {
-      simulateInteraction(element1, interaction1);
-      simulateInteraction(element1, interaction2);
-      simulateInteraction(element1, interaction3);
-    }
-    simulateInteraction(element1, interaction6);
-    simulateInteraction(element1, interaction5);
-    simulateInteraction(element1, interaction4);
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "  Interaction ble {}" +
-       "  Interaction blo {}" +
-       "  Interaction blu {}" +
-       "  Iteration iteration2 {" +
-       "    Sequence sequence3 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "  Interaction blu {}" +
-       "  Interaction blo {}" +
-       "  Interaction ble {}" +
-       "}", getTaskTree());    
-  
-    // now test with iterations of iterations
-    for (int i = 0; i < 10; i++)
-    {
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction1);
-        simulateInteraction(element1, interaction2);
-        simulateInteraction(element1, interaction3);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction2);
-        simulateInteraction(element1, interaction1);
-        simulateInteraction(element1, interaction3);
-      }
-      for (int j = 0; j < 5; j++)
-      {
-        simulateInteraction(element1, interaction1);
-        simulateInteraction(element1, interaction2);
-        simulateInteraction(element1, interaction3);
-      }
-    }
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration iteration1 {" +
-       "    Sequence sequence2 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "  Interaction ble {}" +
-       "  Interaction blo {}" +
-       "  Interaction blu {}" +
-       "  Iteration iteration2 {" +
-       "    Sequence sequence3 {" +
-       "      Interaction bla {}" +
-       "      Interaction bli {}" +
-       "      Interaction blup {}" +
-       "    }" +
-       "  }" +
-       "  Interaction blu {}" +
-       "  Interaction blo {}" +
-       "  Interaction ble {}" +
-       "  Iteration iteration3 {" +
-       "    Sequence sequence4 {" +
-       "      Iteration iteration4 {" +
-       "        Sequence sequence4 {" +
-       "          Interaction bla {}" +
-       "          Interaction bli {}" +
-       "          Interaction blup {}" +
-       "        }" +
-       "      }" +
-       "      Iteration iteration5 {" +
-       "        Sequence sequence5 {" +
-       "          Interaction bli {}" +
-       "          Interaction bla {}" +
-       "          Interaction blup {}" +
-       "        }" +
-       "      }" +
-       "      Iteration iteration6 {" +
-       "        Sequence sequence6 {" +
-       "          Interaction bla {}" +
-       "          Interaction bli {}" +
-       "          Interaction blup {}" +
-       "        }" +
-       "      }" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-  }
-  
+
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRuleTest.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRuleTest.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TaskTreeManagerTest.java,v $
 // Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 21:32:36 $
@@ -5,5 +4,4 @@
 // Creation  : 2011 by Patrick
 // Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
 
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
@@ -11,164 +9,159 @@
 import org.junit.Test;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonDown;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonInteraction;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonUp;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseClick;
+import de.ugoe.cs.quest.eventcore.gui.MouseButtonDown;
+import de.ugoe.cs.quest.eventcore.gui.MouseButtonInteraction;
+import de.ugoe.cs.quest.eventcore.gui.MouseButtonUp;
+import de.ugoe.cs.quest.eventcore.gui.MouseClick;
+import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
 import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
- *
+ * 
  * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
+ * @author 2011, last modified by $Author: $
  */
-//-------------------------------------------------------------------------------------------------
-public class DefaultMouseClickReductionRuleTest extends AbstractTemporalRelationshipTC
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testMouseClickInOneSequenceElement()
-  {
-    MouseButtonInteraction.Button leftBtn = MouseButtonInteraction.Button.LEFT;
-    MouseButtonInteraction.Button middleBtn = MouseButtonInteraction.Button.MIDDLE;
-    MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
-    
-    GUIElement element1 = new DummyGUIElement("elem1");
-    GUIElement element2 = new DummyGUIElement("elem1");
-    
-    simulateInteraction(element1, new MouseButtonDown(leftBtn));
-    simulateInteraction(element1, new MouseButtonUp(leftBtn));
-    simulateInteraction(element1, new MouseClick(leftBtn));
+public class DefaultMouseClickReductionRuleTest extends AbstractTemporalRelationshipTC {
 
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence {" +
-       "  Interaction LeftMouseClick {}" +
-       "}", getTaskTree());
-    
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element1, new DummyInteraction("bli", 1));
-    simulateInteraction(element1, new MouseButtonDown(middleBtn));
-    simulateInteraction(element1, new MouseButtonUp(middleBtn));
-    simulateInteraction(element1, new MouseClick(middleBtn));
-    simulateInteraction(element1, new DummyInteraction("blo", 1));
-    simulateInteraction(element1, new DummyInteraction("blu", 1));
+    /**
+     *
+     */
+    @Test
+    public void testMouseClickInOneSequenceElement() {
+        MouseButtonInteraction.Button leftBtn = MouseButtonInteraction.Button.LEFT;
+        MouseButtonInteraction.Button middleBtn = MouseButtonInteraction.Button.MIDDLE;
+        MouseButtonInteraction.Button rightBtn = MouseButtonInteraction.Button.RIGHT;
 
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence {" +
-       "  Interaction LeftMouseClick {}" +
-       "  Interaction bla {}" +
-       "  Interaction bli {}" +
-       "  Interaction MiddleMouseClick {}" +
-       "  Interaction blo {}" +
-       "  Interaction blu {}" +
-       "}", getTaskTree());
+        IGUIElement element1 = new DummyGUIElement("elem1");
+        IGUIElement element2 = new DummyGUIElement("elem1");
 
-    simulateInteraction(element2, new DummyInteraction("bla", 1));
-    simulateInteraction(element2, new DummyInteraction("bli", 1));
-    simulateInteraction(element2, new MouseButtonDown(rightBtn));
-    simulateInteraction(element2, new MouseButtonUp(rightBtn));
-    simulateInteraction(element2, new MouseClick(rightBtn));
-    simulateInteraction(element2, new DummyInteraction("blo", 1));
-    simulateInteraction(element2, new DummyInteraction("blu", 1));
+        simulateEvent(new MouseButtonDown(leftBtn), element1);
+        simulateEvent(new MouseButtonUp(leftBtn), element1);
+        simulateEvent(new MouseClick(leftBtn), element1);
 
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction LeftMouseClick {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction MiddleMouseClick {}" +
-       "    Interaction blo {}" +
-       "    Interaction blu {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction RightMouseClick {}" +
-       "    Interaction blo {}" +
-       "    Interaction blu {}" +
-       "  }" +
-       "}", getTaskTree());
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence {" +
+             "  Event LeftMouseClick {}" +
+             "}", getTaskTree());
 
-    simulateInteraction(element1, new MouseButtonDown(leftBtn));
-    simulateInteraction(element1, new MouseButtonUp(leftBtn));
-    simulateInteraction(element2, new MouseClick(leftBtn));
+        simulateEvent(new DummyInteraction("bla", 1), element1);
+        simulateEvent(new DummyInteraction("bli", 1), element1);
+        simulateEvent(new MouseButtonDown(middleBtn), element1);
+        simulateEvent(new MouseButtonUp(middleBtn), element1);
+        simulateEvent(new MouseClick(middleBtn), element1);
+        simulateEvent(new DummyInteraction("blo", 1), element1);
+        simulateEvent(new DummyInteraction("blu", 1), element1);
 
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction LeftMouseClick {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction MiddleMouseClick {}" +
-       "    Interaction blo {}" +
-       "    Interaction blu {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction RightMouseClick {}" +
-       "    Interaction blo {}" +
-       "    Interaction blu {}" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    Interaction LeftMouseButtonDown {}" +
-       "    Interaction LeftMouseButtonUp {}" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    Interaction LeftMouseClick {}" +
-       "  }" +
-       "}", getTaskTree());
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence {" +
+             "  Event LeftMouseClick {}" +
+             "  Event bla {}" +
+             "  Event bli {}" +
+             "  Event MiddleMouseClick {}" +
+             "  Event blo {}" +
+             "  Event blu {}" +
+             "}", getTaskTree());
 
-    simulateInteraction(element1, new MouseButtonDown(middleBtn));
-    simulateInteraction(element1, new MouseButtonUp(middleBtn));
-    simulateInteraction(element1, new MouseClick(rightBtn));
-    simulateInteraction(element2, new DummyInteraction("bla", 1));
+        simulateEvent(new DummyInteraction("bla", 1), element2);
+        simulateEvent(new DummyInteraction("bli", 1), element2);
+        simulateEvent(new MouseButtonDown(rightBtn), element2);
+        simulateEvent(new MouseButtonUp(rightBtn), element2);
+        simulateEvent(new MouseClick(rightBtn), element2);
+        simulateEvent(new DummyInteraction("blo", 1), element2);
+        simulateEvent(new DummyInteraction("blu", 1), element2);
 
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    Interaction LeftMouseClick {}" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction MiddleMouseClick {}" +
-       "    Interaction blo {}" +
-       "    Interaction blu {}" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    Interaction bla {}" +
-       "    Interaction bli {}" +
-       "    Interaction RightMouseClick {}" +
-       "    Interaction blo {}" +
-       "    Interaction blu {}" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    Interaction LeftMouseButtonDown {}" +
-       "    Interaction LeftMouseButtonUp {}" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    Interaction LeftMouseClick {}" +
-       "  }" +
-       "  Sequence sequence5 {" +
-       "    Sequence sequence6 {" +
-       "      Interaction MiddleMouseButtonDown {}" +
-       "      Interaction MiddleMouseButtonUp {}" +
-       "    }" +
-       "    Interaction RightMouseClick {}" +
-       "  }" +
-       "  Sequence sequence7 {" +
-       "    Interaction bla {}" +
-       "  }" +
-       "}", getTaskTree());
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event LeftMouseClick {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event MiddleMouseClick {}" +
+             "    Event blo {}" +
+             "    Event blu {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event RightMouseClick {}" +
+             "    Event blo {}" +
+             "    Event blu {}" +
+             "  }" +
+             "}", getTaskTree());
 
-  }
-  
+        simulateEvent(new MouseButtonDown(leftBtn), element1);
+        simulateEvent(new MouseButtonUp(leftBtn), element1);
+        simulateEvent(new MouseClick(leftBtn), element2);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event LeftMouseClick {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event MiddleMouseClick {}" +
+             "    Event blo {}" +
+             "    Event blu {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event RightMouseClick {}" +
+             "    Event blo {}" +
+             "    Event blu {}" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    Event LeftMouseButtonDown {}" +
+             "    Event LeftMouseButtonUp {}" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    Event LeftMouseClick {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new MouseButtonDown(middleBtn), element1);
+        simulateEvent(new MouseButtonUp(middleBtn), element1);
+        simulateEvent(new MouseClick(rightBtn), element1);
+        simulateEvent(new DummyInteraction("bla", 1), element2);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    Event LeftMouseClick {}" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event MiddleMouseClick {}" +
+             "    Event blo {}" +
+             "    Event blu {}" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    Event bla {}" +
+             "    Event bli {}" +
+             "    Event RightMouseClick {}" +
+             "    Event blo {}" +
+             "    Event blu {}" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    Event LeftMouseButtonDown {}" +
+             "    Event LeftMouseButtonUp {}" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    Event LeftMouseClick {}" +
+             "  }" +
+             "  Sequence sequence5 {" +
+             "    Sequence sequence6 {" +
+             "      Event MiddleMouseButtonDown {}" +
+             "      Event MiddleMouseButtonUp {}" +
+             "    }" +
+             "    Event RightMouseClick {}" +
+             "  }" +
+             "  Sequence sequence7 {" +
+             "    Event bla {}" +
+             "  }" +
+             "}", getTaskTree());
+
+    }
+
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultTextInputReductionRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultTextInputReductionRuleTest.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultTextInputReductionRuleTest.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DefaultIterationDetectionRuleTest.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 28.04.2012 $
@@ -5,18 +4,17 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
 import org.junit.Test;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.guimodel.TextField;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyPressed;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyReleased;
+import de.ugoe.cs.quest.eventcore.gui.KeyPressed;
+import de.ugoe.cs.quest.eventcore.gui.KeyReleased;
+import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
+import de.ugoe.cs.quest.eventcore.guimodel.ITextField;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
 import de.ugoe.cs.tasktree.keyboardmaps.VirtualKey;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -25,387 +23,371 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DefaultTextInputReductionRuleTest extends AbstractTemporalRelationshipTC
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testSimpleTextEntry()
-  {
-    GUIElement element1 = new DummyTextField("elem1");
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_A));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_A));
-    new TaskTreeChecker(true).assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput a {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_B));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_B));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput ab {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "    Interaction KeyPressed LETTER_B {}" +
-       "    Interaction KeyReleased LETTER_B {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_C));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_C));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput abC {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "    Interaction KeyPressed LETTER_B {}" +
-       "    Interaction KeyReleased LETTER_B {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed LETTER_C {}" +
-       "    Interaction KeyReleased LETTER_C {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_D));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_D));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_E));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_E));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_F));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_F));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput abCDEF {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "    Interaction KeyPressed LETTER_B {}" +
-       "    Interaction KeyReleased LETTER_B {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed LETTER_C {}" +
-       "    Interaction KeyReleased LETTER_C {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed LETTER_D {}" +
-       "    Interaction KeyReleased LETTER_D {}" +
-       "    Interaction KeyPressed LETTER_E {}" +
-       "    Interaction KeyReleased LETTER_E {}" +
-       "    Interaction KeyPressed LETTER_F {}" +
-       "    Interaction KeyReleased LETTER_F {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_G));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_G));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput abCDEFg {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "    Interaction KeyPressed LETTER_B {}" +
-       "    Interaction KeyReleased LETTER_B {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed LETTER_C {}" +
-       "    Interaction KeyReleased LETTER_C {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed LETTER_D {}" +
-       "    Interaction KeyReleased LETTER_D {}" +
-       "    Interaction KeyPressed LETTER_E {}" +
-       "    Interaction KeyReleased LETTER_E {}" +
-       "    Interaction KeyPressed LETTER_F {}" +
-       "    Interaction KeyReleased LETTER_F {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed SHIFT {}" +
-       "    Interaction KeyPressed LETTER_G {}" +
-       "    Interaction KeyReleased LETTER_G {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "    Interaction KeyReleased SHIFT {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testTextEntryOnDifferentGuiElements()
-  {
-    GUIElement element1 = new DummyTextField("elem1");
-    GUIElement element2 = new DummyTextField("elem2");
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_A));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_A));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput a {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element2, new KeyPressed(VirtualKey.LETTER_B));
-    simulateInteraction(element2, new KeyReleased(VirtualKey.LETTER_B));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    TextInputInteraction TextInput a {" +
-       "      Interaction KeyPressed LETTER_A {}" +
-       "      Interaction KeyReleased LETTER_A {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    TextInputInteraction TextInput b {" +
-       "      Interaction KeyPressed LETTER_B {}" +
-       "      Interaction KeyReleased LETTER_B {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_C));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_C));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    TextInputInteraction TextInput a {" +
-       "      Interaction KeyPressed LETTER_A {}" +
-       "      Interaction KeyReleased LETTER_A {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    TextInputInteraction TextInput b {" +
-       "      Interaction KeyPressed LETTER_B {}" +
-       "      Interaction KeyReleased LETTER_B {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    TextInputInteraction TextInput C {" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed LETTER_C {}" +
-       "      Interaction KeyReleased LETTER_C {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element2, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element2, new KeyPressed(VirtualKey.LETTER_D));
-    simulateInteraction(element2, new KeyReleased(VirtualKey.LETTER_D));
-    simulateInteraction(element2, new KeyPressed(VirtualKey.LETTER_E));
-    simulateInteraction(element2, new KeyReleased(VirtualKey.LETTER_E));
-    simulateInteraction(element2, new KeyPressed(VirtualKey.LETTER_F));
-    simulateInteraction(element2, new KeyReleased(VirtualKey.LETTER_F));
-    simulateInteraction(element2, new KeyReleased(VirtualKey.SHIFT));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    TextInputInteraction TextInput a {" +
-       "      Interaction KeyPressed LETTER_A {}" +
-       "      Interaction KeyReleased LETTER_A {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    TextInputInteraction TextInput b {" +
-       "      Interaction KeyPressed LETTER_B {}" +
-       "      Interaction KeyReleased LETTER_B {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    TextInputInteraction TextInput C {" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed LETTER_C {}" +
-       "      Interaction KeyReleased LETTER_C {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    TextInputInteraction TextInput DEF {" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed LETTER_D {}" +
-       "      Interaction KeyReleased LETTER_D {}" +
-       "      Interaction KeyPressed LETTER_E {}" +
-       "      Interaction KeyReleased LETTER_E {}" +
-       "      Interaction KeyPressed LETTER_F {}" +
-       "      Interaction KeyReleased LETTER_F {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_G));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_G));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.SHIFT));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  Sequence sequence1 {" +
-       "    TextInputInteraction TextInput a {" +
-       "      Interaction KeyPressed LETTER_A {}" +
-       "      Interaction KeyReleased LETTER_A {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence2 {" +
-       "    TextInputInteraction TextInput b {" +
-       "      Interaction KeyPressed LETTER_B {}" +
-       "      Interaction KeyReleased LETTER_B {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence3 {" +
-       "    TextInputInteraction TextInput C {" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed LETTER_C {}" +
-       "      Interaction KeyReleased LETTER_C {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence4 {" +
-       "    TextInputInteraction TextInput DEF {" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed LETTER_D {}" +
-       "      Interaction KeyReleased LETTER_D {}" +
-       "      Interaction KeyPressed LETTER_E {}" +
-       "      Interaction KeyReleased LETTER_E {}" +
-       "      Interaction KeyPressed LETTER_F {}" +
-       "      Interaction KeyReleased LETTER_F {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "    }" +
-       "  }" +
-       "  Sequence sequence5 {" +
-       "    TextInputInteraction TextInput g {" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed SHIFT {}" +
-       "      Interaction KeyPressed LETTER_G {}" +
-       "      Interaction KeyReleased LETTER_G {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "      Interaction KeyReleased SHIFT {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testUsageOfBackspace()
-  {
-    GUIElement element1 = new DummyTextField("elem1");
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_A));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_A));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_B));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_B));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_C));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_C));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_D));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_D));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_E));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_E));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.LETTER_F));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.LETTER_F));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput abcef {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "    Interaction KeyPressed LETTER_B {}" +
-       "    Interaction KeyReleased LETTER_B {}" +
-       "    Interaction KeyPressed LETTER_C {}" +
-       "    Interaction KeyReleased LETTER_C {}" +
-       "    Interaction KeyPressed LETTER_D {}" +
-       "    Interaction KeyReleased LETTER_D {}" +
-       "    Interaction KeyPressed BACK_SPACE {}" +
-       "    Interaction KeyReleased BACK_SPACE {}" +
-       "    Interaction KeyPressed LETTER_E {}" +
-       "    Interaction KeyReleased LETTER_E {}" +
-       "    Interaction KeyPressed LETTER_F {}" +
-       "    Interaction KeyReleased LETTER_F {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new KeyPressed(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyPressed(VirtualKey.BACK_SPACE));
-    simulateInteraction(element1, new KeyReleased(VirtualKey.BACK_SPACE));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence0 {" +
-       "  TextInputInteraction TextInput ab {" +
-       "    Interaction KeyPressed LETTER_A {}" +
-       "    Interaction KeyReleased LETTER_A {}" +
-       "    Interaction KeyPressed LETTER_B {}" +
-       "    Interaction KeyReleased LETTER_B {}" +
-       "    Interaction KeyPressed LETTER_C {}" +
-       "    Interaction KeyReleased LETTER_C {}" +
-       "    Interaction KeyPressed LETTER_D {}" +
-       "    Interaction KeyReleased LETTER_D {}" +
-       "    Interaction KeyPressed BACK_SPACE {}" +
-       "    Interaction KeyReleased BACK_SPACE {}" +
-       "    Interaction KeyPressed LETTER_E {}" +
-       "    Interaction KeyReleased LETTER_E {}" +
-       "    Interaction KeyPressed LETTER_F {}" +
-       "    Interaction KeyReleased LETTER_F {}" +
-       "    Interaction KeyPressed BACK_SPACE {}" +
-       "    Interaction KeyReleased BACK_SPACE {}" +
-       "    Interaction KeyPressed BACK_SPACE {}" +
-       "    Interaction KeyReleased BACK_SPACE {}" +
-       "    Interaction KeyPressed BACK_SPACE {}" +
-       "    Interaction KeyReleased BACK_SPACE {}" +
-       "  }" +
-       "}", getTaskTree());    
-
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private static class DummyTextField extends DummyGUIElement implements TextField
-  {
-
-    //---------------------------------------------------------------------------------------------
+public class DefaultTextInputReductionRuleTest extends AbstractTemporalRelationshipTC {
+
     /**
-     * TODO: comment
      *
-     * @param name
      */
-    //---------------------------------------------------------------------------------------------
-    public DummyTextField(String name)
-    {
-      super(name);
+    @Test
+    public void testSimpleTextEntry() {
+        IGUIElement element1 = new DummyTextField("elem1");
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
+        new TaskTreeChecker(true).assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput a {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput ab {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "    Event KeyPressed LETTER_B {}" +
+             "    Event KeyReleased LETTER_B {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput abC {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "    Event KeyPressed LETTER_B {}" +
+             "    Event KeyReleased LETTER_B {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed LETTER_C {}" +
+             "    Event KeyReleased LETTER_C {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_D), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_D), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_E), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_E), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_F), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_F), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput abCDEF {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "    Event KeyPressed LETTER_B {}" +
+             "    Event KeyReleased LETTER_B {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed LETTER_C {}" +
+             "    Event KeyReleased LETTER_C {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed LETTER_D {}" +
+             "    Event KeyReleased LETTER_D {}" +
+             "    Event KeyPressed LETTER_E {}" +
+             "    Event KeyReleased LETTER_E {}" +
+             "    Event KeyPressed LETTER_F {}" +
+             "    Event KeyReleased LETTER_F {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_G), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_G), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput abCDEFg {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "    Event KeyPressed LETTER_B {}" +
+             "    Event KeyReleased LETTER_B {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed LETTER_C {}" +
+             "    Event KeyReleased LETTER_C {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed LETTER_D {}" +
+             "    Event KeyReleased LETTER_D {}" +
+             "    Event KeyPressed LETTER_E {}" +
+             "    Event KeyReleased LETTER_E {}" +
+             "    Event KeyPressed LETTER_F {}" +
+             "    Event KeyReleased LETTER_F {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed SHIFT {}" +
+             "    Event KeyPressed LETTER_G {}" +
+             "    Event KeyReleased LETTER_G {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "    Event KeyReleased SHIFT {}" +
+             "  }" +
+             "}", getTaskTree());
+
     }
 
-  }
+    /**
+     *
+     */
+    @Test
+    public void testTextEntryOnDifferentGuiElements() {
+        IGUIElement element1 = new DummyTextField("elem1");
+        IGUIElement element2 = new DummyTextField("elem2");
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput a {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element2);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element2);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    TextInputEvent TextInput a {" +
+             "      Event KeyPressed LETTER_A {}" +
+             "      Event KeyReleased LETTER_A {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    TextInputEvent TextInput b {" +
+             "      Event KeyPressed LETTER_B {}" +
+             "      Event KeyReleased LETTER_B {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    TextInputEvent TextInput a {" +
+             "      Event KeyPressed LETTER_A {}" +
+             "      Event KeyReleased LETTER_A {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    TextInputEvent TextInput b {" +
+             "      Event KeyPressed LETTER_B {}" +
+             "      Event KeyReleased LETTER_B {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    TextInputEvent TextInput C {" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed LETTER_C {}" +
+             "      Event KeyReleased LETTER_C {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element2);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_D), element2);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_D), element2);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_E), element2);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_E), element2);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_F), element2);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_F), element2);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element2);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    TextInputEvent TextInput a {" +
+             "      Event KeyPressed LETTER_A {}" +
+             "      Event KeyReleased LETTER_A {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    TextInputEvent TextInput b {" +
+             "      Event KeyPressed LETTER_B {}" +
+             "      Event KeyReleased LETTER_B {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    TextInputEvent TextInput C {" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed LETTER_C {}" +
+             "      Event KeyReleased LETTER_C {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    TextInputEvent TextInput DEF {" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed LETTER_D {}" +
+             "      Event KeyReleased LETTER_D {}" +
+             "      Event KeyPressed LETTER_E {}" +
+             "      Event KeyReleased LETTER_E {}" +
+             "      Event KeyPressed LETTER_F {}" +
+             "      Event KeyReleased LETTER_F {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_G), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_G), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        simulateEvent(new KeyReleased(VirtualKey.SHIFT), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  Sequence sequence1 {" +
+             "    TextInputEvent TextInput a {" +
+             "      Event KeyPressed LETTER_A {}" +
+             "      Event KeyReleased LETTER_A {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence2 {" +
+             "    TextInputEvent TextInput b {" +
+             "      Event KeyPressed LETTER_B {}" +
+             "      Event KeyReleased LETTER_B {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence3 {" +
+             "    TextInputEvent TextInput C {" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed LETTER_C {}" +
+             "      Event KeyReleased LETTER_C {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence4 {" +
+             "    TextInputEvent TextInput DEF {" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed LETTER_D {}" +
+             "      Event KeyReleased LETTER_D {}" +
+             "      Event KeyPressed LETTER_E {}" +
+             "      Event KeyReleased LETTER_E {}" +
+             "      Event KeyPressed LETTER_F {}" +
+             "      Event KeyReleased LETTER_F {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "    }" +
+             "  }" +
+             "  Sequence sequence5 {" +
+             "    TextInputEvent TextInput g {" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed SHIFT {}" +
+             "      Event KeyPressed LETTER_G {}" +
+             "      Event KeyReleased LETTER_G {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "      Event KeyReleased SHIFT {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+    }
+
+    /**
+     *
+     */
+    @Test
+    public void testUsageOfBackspace() {
+        IGUIElement element1 = new DummyTextField("elem1");
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_A), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_A), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_B), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_B), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_C), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_C), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_D), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_D), element1);
+        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_E), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_E), element1);
+        simulateEvent(new KeyPressed(VirtualKey.LETTER_F), element1);
+        simulateEvent(new KeyReleased(VirtualKey.LETTER_F), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput abcef {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "    Event KeyPressed LETTER_B {}" +
+             "    Event KeyReleased LETTER_B {}" +
+             "    Event KeyPressed LETTER_C {}" +
+             "    Event KeyReleased LETTER_C {}" +
+             "    Event KeyPressed LETTER_D {}" +
+             "    Event KeyReleased LETTER_D {}" +
+             "    Event KeyPressed BACK_SPACE {}" +
+             "    Event KeyReleased BACK_SPACE {}" +
+             "    Event KeyPressed LETTER_E {}" +
+             "    Event KeyReleased LETTER_E {}" +
+             "    Event KeyPressed LETTER_F {}" +
+             "    Event KeyReleased LETTER_F {}" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyPressed(VirtualKey.BACK_SPACE), element1);
+        simulateEvent(new KeyReleased(VirtualKey.BACK_SPACE), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence0 {" +
+             "  TextInputEvent TextInput ab {" +
+             "    Event KeyPressed LETTER_A {}" +
+             "    Event KeyReleased LETTER_A {}" +
+             "    Event KeyPressed LETTER_B {}" +
+             "    Event KeyReleased LETTER_B {}" +
+             "    Event KeyPressed LETTER_C {}" +
+             "    Event KeyReleased LETTER_C {}" +
+             "    Event KeyPressed LETTER_D {}" +
+             "    Event KeyReleased LETTER_D {}" +
+             "    Event KeyPressed BACK_SPACE {}" +
+             "    Event KeyReleased BACK_SPACE {}" +
+             "    Event KeyPressed LETTER_E {}" +
+             "    Event KeyReleased LETTER_E {}" +
+             "    Event KeyPressed LETTER_F {}" +
+             "    Event KeyReleased LETTER_F {}" +
+             "    Event KeyPressed BACK_SPACE {}" +
+             "    Event KeyReleased BACK_SPACE {}" +
+             "    Event KeyPressed BACK_SPACE {}" +
+             "    Event KeyReleased BACK_SPACE {}" +
+             "    Event KeyPressed BACK_SPACE {}" +
+             "    Event KeyReleased BACK_SPACE {}" +
+             "  }" +
+             "}", getTaskTree());
+
+    }
+
+    /**
+     *
+     */
+    private static class DummyTextField extends DummyGUIElement implements ITextField {
+
+        /**  */
+        private static final long serialVersionUID = 1L;
+
+        /**
+         * TODO: comment
+         * 
+         * @param name
+         */
+        public DummyTextField(String name) {
+            super(name);
+        }
+
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TrackBarSelectionDetectionRuleTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TrackBarSelectionDetectionRuleTest.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TrackBarSelectionDetectionRuleTest.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DefaultIterationDetectionRuleTest.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 28.04.2012 $
@@ -5,17 +4,16 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
 import org.junit.Test;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.guimodel.TrackBar;
-import de.ugoe.cs.quest.eventcore.userinteraction.ValueSelection;
+import de.ugoe.cs.quest.eventcore.gui.ValueSelection;
+import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
+import de.ugoe.cs.quest.eventcore.guimodel.ITrackBar;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
 import de.ugoe.cs.quest.tasktrees.testutils.TaskTreeChecker;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -24,157 +22,146 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class TrackBarSelectionDetectionRuleTest extends AbstractTemporalRelationshipTC
-{
+public class TrackBarSelectionDetectionRuleTest extends AbstractTemporalRelationshipTC {
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testSimpleDetection() throws Exception
-  {
-    GUIElement element1 = new DummyTrackBar();
-    simulateInteraction(element1, new ValueSelection<Integer>(1));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration interation1 {" +
-       "    Selection selection1 {" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new ValueSelection<Integer>(2));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration interation1 {" +
-       "    Selection selection1 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new ValueSelection<Integer>(3));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration interation1 {" +
-       "    Selection selection1 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new ValueSelection<Integer>(2));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration interation1 {" +
-       "    Selection selection1 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-
-    simulateInteraction(element1, new ValueSelection<Integer>(3));
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration interation1 {" +
-       "    Selection selection1 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());
-
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testComplexDetection() throws Exception
-  {
-    GUIElement element1 = new DummyTrackBar();
-    simulateInteraction(element1, new ValueSelection<Integer>(1));
-    simulateInteraction(element1, new ValueSelection<Integer>(2));
-    simulateInteraction(element1, new ValueSelection<Integer>(3));
-    simulateInteraction(element1, new ValueSelection<Integer>(1));
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element1, new DummyInteraction("bla", 2));
-    simulateInteraction(element1, new ValueSelection<Integer>(2));
-    simulateInteraction(element1, new ValueSelection<Integer>(1));
-    simulateInteraction(element1, new DummyInteraction("bla", 3));
-    simulateInteraction(element1, new ValueSelection<Integer>(3));
-    simulateInteraction(element1, new ValueSelection<Integer>(2));
-    simulateInteraction(element1, new ValueSelection<Integer>(3));
-    simulateInteraction(element1, new DummyInteraction("bla", 1));
-    simulateInteraction(element1, new DummyInteraction("bla", 2));
-    simulateInteraction(element1, new ValueSelection<Integer>(1));
-    simulateInteraction(element1, new ValueSelection<Integer>(1));
-    
-    new TaskTreeChecker().assertTaskTree
-      ("Sequence sequence1 {" +
-       "  Iteration interation1 {" +
-       "    Selection selection1 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "  Interaction bla {}" +
-       "  Interaction bla {}" +
-       "  Iteration interation2 {" +
-       "    Selection selection2 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "  Interaction bla {}" +
-       "  Iteration interation3 {" +
-       "    Selection selection3 {" +
-       "      Interaction ValueSelection {}" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "  Interaction bla {}" +
-       "  Interaction bla {}" +
-       "  Iteration interation4 {" +
-       "    Selection selection4 {" +
-       "      Interaction ValueSelection {}" +
-       "    }" +
-       "  }" +
-       "}", getTaskTree());    
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO comment
-   * 
-   * @version $Revision: $ $Date: 28.04.2012$
-   * @author 2012, last modified by $Author: patrick$
-   */
-  //-----------------------------------------------------------------------------------------------
-  public class DummyTrackBar extends DummyGUIElement implements TrackBar
-  {
-
-    //---------------------------------------------------------------------------------------------
     /**
      *
      */
-    //---------------------------------------------------------------------------------------------
-    public DummyTrackBar()
-    {
-      super("DummyTrackBar");
+    @Test
+    public void testSimpleDetection() throws Exception {
+        IGUIElement element1 = new DummyTrackBar();
+        simulateEvent(new ValueSelection<Integer>(1), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration interation1 {" +
+             "    Selection selection1 {" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new ValueSelection<Integer>(2), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration interation1 {" +
+             "    Selection selection1 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new ValueSelection<Integer>(3), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration interation1 {" +
+             "    Selection selection1 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new ValueSelection<Integer>(2), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration interation1 {" +
+             "    Selection selection1 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
+        simulateEvent(new ValueSelection<Integer>(3), element1);
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration interation1 {" +
+             "    Selection selection1 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+
     }
-  }
+
+    /**
+     *
+     */
+    @Test
+    public void testComplexDetection() throws Exception {
+        IGUIElement element1 = new DummyTrackBar();
+        simulateEvent(new ValueSelection<Integer>(1), element1);
+        simulateEvent(new ValueSelection<Integer>(2), element1);
+        simulateEvent(new ValueSelection<Integer>(3), element1);
+        simulateEvent(new ValueSelection<Integer>(1), element1);
+        simulateEvent(new DummyInteraction("bla", 1), element1);
+        simulateEvent(new DummyInteraction("bla", 2), element1);
+        simulateEvent(new ValueSelection<Integer>(2), element1);
+        simulateEvent(new ValueSelection<Integer>(1), element1);
+        simulateEvent(new DummyInteraction("bla", 3), element1);
+        simulateEvent(new ValueSelection<Integer>(3), element1);
+        simulateEvent(new ValueSelection<Integer>(2), element1);
+        simulateEvent(new ValueSelection<Integer>(3), element1);
+        simulateEvent(new DummyInteraction("bla", 1), element1);
+        simulateEvent(new DummyInteraction("bla", 2), element1);
+        simulateEvent(new ValueSelection<Integer>(1), element1);
+        simulateEvent(new ValueSelection<Integer>(1), element1);
+
+        new TaskTreeChecker().assertTaskTree
+            ("Sequence sequence1 {" +
+             "  Iteration interation1 {" +
+             "    Selection selection1 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "  Event bla {}" +
+             "  Event bla {}" +
+             "  Iteration interation2 {" +
+             "    Selection selection2 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "  Event bla {}" +
+             "  Iteration interation3 {" +
+             "    Selection selection3 {" +
+             "      Event ValueSelection {}" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "  Event bla {}" +
+             "  Event bla {}" +
+             "  Iteration interation4 {" +
+             "    Selection selection4 {" +
+             "      Event ValueSelection {}" +
+             "    }" +
+             "  }" +
+             "}", getTaskTree());
+    }
+
+    /**
+     * TODO comment
+     * 
+     * @version $Revision: $ $Date: 28.04.2012$
+     * @author 2012, last modified by $Author: patrick$
+     */
+    public class DummyTrackBar extends DummyGUIElement implements ITrackBar {
+
+        /**  */
+        private static final long serialVersionUID = 1L;
+
+         /**
+          *
+          */
+         public DummyTrackBar() {
+            super("DummyTrackBar");
+        }
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyGUIElement.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DummyGUIElement.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 02.04.2012 $
@@ -5,11 +4,10 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.testutils;
 
 import de.ugoe.cs.quest.eventcore.guimodel.AbstractDefaultGUIElement;
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
+import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -18,42 +16,46 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DummyGUIElement extends AbstractDefaultGUIElement
-  implements GUIElement
-{
-  /** */
-  private String mName;
+public class DummyGUIElement extends AbstractDefaultGUIElement implements IGUIElement {
+    
+    /**  */
+    private static final long serialVersionUID = 1L;
 
-  //---------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //---------------------------------------------------------------------------------------------
-  public DummyGUIElement(String name)
-  {
-    super();
-    mName = name;
-  }
+    /** */
+    private String name;
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#toString()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public String toString()
-  {
-    return mName;
-  }
+    /**
+     *
+     */
+    public DummyGUIElement(String name) {
+        super();
+        this.name = name;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.harms.attef.userinteraction.GUIElement#equals(GUIElement)
-   */
-  //-----------------------------------------------------------------------------------------------
-  public boolean equals(GUIElement other)
-  {
-    return this == other;
-  }
+    /* (non-Javadoc)
+     * @see de.ugoe.cs.quest.eventcore.IEventTarget#getPlatform()
+     */
+    @Override
+    public String getPlatform() {
+        return "Dummy";
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return name;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.GUIElement#equals(GUIElement)
+     */
+    public boolean equals(IGUIElement other) {
+        return this == other;
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyInteraction.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyInteraction.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyInteraction.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DummyInteraction.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 02.04.2012 $
@@ -5,10 +4,9 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.testutils;
 
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
+import de.ugoe.cs.quest.eventcore.gui.IInteraction;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -17,86 +15,75 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DummyInteraction implements Interaction
-{
-  /** */
-  private int mInteractionNumber;
-  
-  /** */
-  private String mInteractionType;
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param interactionNumber
-   * @param interactionType
-   */
-  //-----------------------------------------------------------------------------------------------
-  public DummyInteraction(String interactionType, int interactionNumber)
-  {
-    super();
-    mInteractionNumber = interactionNumber;
-    mInteractionType = interactionType;
-  }
+public class DummyInteraction implements IInteraction {
+    
+    /**  */
+    private static final long serialVersionUID = 1L;
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.harms.attef.userinteraction.Interaction#getName()
-   */
-  //-----------------------------------------------------------------------------------------------
-  public String getName()
-  {
-    return mInteractionType;
-  }
+    /** */
+    private int interactionNumber;
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#toString()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public String toString()
-  {
-    return mInteractionType;
-  }
+    /** */
+    private String interactionType;
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
-   */
-  //-----------------------------------------------------------------------------------------------
-  public boolean startsLogicalSequence()
-  {
-    return false;
-  }
+    /**
+     * @param interactionNumber
+     * @param interactionType
+     */
+    public DummyInteraction(String interactionType, int interactionNumber) {
+        super();
+        this.interactionNumber = interactionNumber;
+        this.interactionType = interactionType;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
-   */
-  //-----------------------------------------------------------------------------------------------
-  public boolean finishesLogicalSequence()
-  {
-    return false;
-  }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#getName()
+     */
+    public String getName() {
+        return interactionType;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return the interactionType
-   */
-  //-----------------------------------------------------------------------------------------------
-  public String getInteractionType()
-  {
-    return mInteractionType;
-  }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public String toString() {
+        return interactionType;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return the interactionNumber
-   */
-  //-----------------------------------------------------------------------------------------------
-  public int getInteractionNumber()
-  {
-    return mInteractionNumber;
-  }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#startsLogicalSequence()
+     */
+    public boolean startsLogicalSequence() {
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.attef.userinteraction.Interaction#finishesLogicalSequence()
+     */
+    public boolean finishesLogicalSequence() {
+        return false;
+    }
+
+    /**
+     * @return the interactionType
+     */
+    public String getInteractionType() {
+        return interactionType;
+    }
+
+    /**
+     * @return the interactionNumber
+     */
+    public int getInteractionNumber() {
+        return interactionNumber;
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyTextField.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyTextField.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/DummyTextField.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DummyGUIElement.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 02.04.2012 $
@@ -5,10 +4,10 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
+
 package de.ugoe.cs.quest.tasktrees.testutils;
 
-import de.ugoe.cs.quest.eventcore.guimodel.TextField;
+import de.ugoe.cs.quest.eventcore.guimodel.ITextField;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -17,18 +16,15 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DummyTextField extends DummyGUIElement
-  implements TextField
-{
+public class DummyTextField extends DummyGUIElement implements ITextField {
 
-  //---------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //---------------------------------------------------------------------------------------------
-  public DummyTextField(String name)
-  {
-    super("text field \"" + name + "\"");
-  }
+    /**  */
+    private static final long serialVersionUID = 1L;
+
+    /**
+     *
+     */
+    public DummyTextField(String name) {
+        super("text field \"" + name + "\"");
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/SimpleLogFormatter.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/SimpleLogFormatter.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/SimpleLogFormatter.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TestLogger.java,v $
 // Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 26.11.2011 15:26:38 $
@@ -5,5 +4,4 @@
 // Creation  : 2011 by Patrick
 // Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
 
 package de.ugoe.cs.quest.tasktrees.testutils;
@@ -16,74 +14,58 @@
 import java.util.logging.LogRecord;
 
-
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
- *
+ * 
  * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
+ * @author 2011, last modified by $Author: $
  */
-//-------------------------------------------------------------------------------------------------
+public class SimpleLogFormatter extends Formatter {
 
-public class SimpleLogFormatter extends Formatter
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public String format(LogRecord record)
-  {
-    StringBuffer result = new StringBuffer();
-    result.append(record.getLevel().getName().charAt(0));
-    result.append(" | ");
-    result.append(new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss,SSS").format(record.getMillis()));
-    result.append(" | ");
-    tailValue("" + record.getThreadID(), 6, result);
-    result.append(" | ");
-    tailValue(record.getLoggerName(), 30, result);
-    result.append(" | ");
-    result.append(record.getMessage());
-    
-    if (record.getThrown() != null)
-    {
-      ByteArrayOutputStream out = new ByteArrayOutputStream();
-      record.getThrown().printStackTrace(new PrintStream(out));
-      result.append("\n");
-      result.append(out.toString());
-      try
-      {
-        out.close();
-      }
-      catch (IOException e)
-      {
-        // ignore
-      }
+    /**
+     *
+     */
+    @Override
+    public String format(LogRecord record) {
+        StringBuffer result = new StringBuffer();
+        result.append(record.getLevel().getName().charAt(0));
+        result.append(" | ");
+        result.append(new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss,SSS").format(record.getMillis()));
+        result.append(" | ");
+        tailValue("" + record.getThreadID(), 6, result);
+        result.append(" | ");
+        tailValue(record.getLoggerName(), 30, result);
+        result.append(" | ");
+        result.append(record.getMessage());
+
+        if (record.getThrown() != null) {
+            ByteArrayOutputStream out = new ByteArrayOutputStream();
+            record.getThrown().printStackTrace(new PrintStream(out));
+            result.append("\n");
+            result.append(out.toString());
+            try {
+                out.close();
+            }
+            catch (IOException e) {
+                // ignore
+            }
+        }
+
+        result.append("\n");
+
+        return result.toString();
     }
-    
-    result.append("\n");
-    
-    return result.toString();
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void tailValue(String value, int length, StringBuffer output)
-  {
-    for (int i = value.length() - length - 1; i < value.length(); i++)
-    {
-      if (i < 0)
-      {
-        output.append(" ");
-      }
-      else
-      {
-        output.append(value.charAt(i));
-      }
+
+    /**
+     *
+     */
+    private void tailValue(String value, int length, StringBuffer output) {
+        for (int i = value.length() - length - 1; i < value.length(); i++) {
+            if (i < 0) {
+                output.append(" ");
+            }
+            else {
+                output.append(value.charAt(i));
+            }
+        }
     }
-  }
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/TaskTreeChecker.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/TaskTreeChecker.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/TaskTreeChecker.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TaskTreeChecker.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 01.04.2012 $
@@ -5,5 +4,5 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.testutils;
 
@@ -21,14 +20,14 @@
 import java.util.regex.Pattern;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.NodeInfo;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTree;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TextInputInteractionTask;
-
-//-------------------------------------------------------------------------------------------------
+import de.ugoe.cs.quest.eventcore.guimodel.IGUIElement;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeInfo;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITextInputEventTask;
+
 /**
  * TODO comment
@@ -37,537 +36,436 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeChecker
-{
-  /** */
-  private boolean mDoTrace;
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
+public class TaskTreeChecker {
+    
+    /** */
+    private boolean doTrace;
+
+    /**
+     * TODO: comment
+     * 
+     */
+    public TaskTreeChecker() {
+        this(false);
+    }
+
+    /**
+     * TODO: comment
+     * 
+     */
+    public TaskTreeChecker(boolean doTrace) {
+        this.doTrace = doTrace;
+    }
+
+    /**
+     *
+     */
+    public void assertTaskTree(String taskTreeSpec, ITaskTree taskTree) {
+        Map<ITaskTreeNode, Integer> taskMapCopy = new HashMap<ITaskTreeNode, Integer>();
+
+        for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : taskTree.getTaskMap().entrySet()) {
+            if (entry.getValue().getNoOfOccurencesInTree() > 0) {
+                taskMapCopy.put(entry.getKey(), entry.getValue().getNoOfOccurencesInTree());
+            }
+            else {
+                taskMapCopy.put(entry.getKey(), 1);
+            }
+        }
+
+        if (doTrace) {
+            dumpTaskMap(taskMapCopy);
+        }
+
+        TaskSpec task = null;
+
+        Matcher matcher = Pattern.compile
+            ("(\\s*(\\w+)\\s+(\\w+)\\s+((\\w*\\s)*)(\\{))|((\\}))").matcher(taskTreeSpec);
+
+        do {
+            if (!matcher.find()) {
+                if (!matcher.hitEnd()) {
+                    throw new IllegalArgumentException("could not parse task specification");
+                }
+                else {
+                    break;
+                }
+            }
+
+            task = parseTask(matcher);
+            if (task != null) {
+                assertTaskAndChildrenInMapAndRemove(task, taskMapCopy);
+            }
+        }
+        while (task != null);
+
+        assertTrue("more tasks in map, than expected", taskMapCopy.isEmpty());
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param taskTree
+     */
+    public void dumpAsCheckString(ITaskTree taskTree) {
+        dumpNodeAsCheckString(taskTree.getRoot(), new int[4], "");
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param root
+     * @param string
+     */
+    private void dumpNodeAsCheckString(ITaskTreeNode node, int[] typeCounters, String indent) {
+        System.err.print("       \"");
+        System.err.print(indent);
+
+        if (node instanceof ISequence) {
+            System.err.print("Sequence sequence");
+            System.err.print(typeCounters[0]++);
+            System.err.println(" {\" +");
+        }
+        else if (node instanceof IIteration) {
+            System.err.print("Iteration iteration");
+            System.err.print(typeCounters[1]++);
+            System.err.println(" {\" +");
+        }
+        else if (node instanceof ISelection) {
+            System.err.print("Selection selection");
+            System.err.print(typeCounters[2]++);
+            System.err.println(" {\" +");
+        }
+        else if (node instanceof ITextInputEventTask) {
+            System.err.print("TextInputEvent textInput");
+            System.err.print(typeCounters[3]++);
+            System.err.print(" ");
+            System.err.print(((ITextInputEventTask) node).getEnteredText());
+            System.err.println(" {\" +");
+        }
+        else if (node instanceof IEventTask) {
+            System.err.print("Event ");
+            System.err.print(((IEventTask) node).getEventType().getName());
+            System.err.print(" {}\" +");
+        }
+        else {
+            fail("unknown type of node in task tree " + node);
+        }
+
+        for (ITaskTreeNode child : node.getChildren()) {
+            dumpNodeAsCheckString(child, typeCounters, indent + "  ");
+        }
+
+        if (!(node instanceof IEventTask) || (node instanceof ITextInputEventTask)) {
+            System.err.print("       \"");
+            System.err.print(indent);
+            System.err.print("}\" +");
+        }
+
+        System.err.println();
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param taskTree
+     */
+    public void dumpFullTaskTree(ITaskTree taskTree) throws FileNotFoundException {
+        PrintWriter out = null;
+        try {
+            out = new PrintWriter(new FileOutputStream("taskTree.txt"));
+            dumpFullNode(taskTree.getRoot(), out, "");
+        }
+        finally {
+            if (out != null) {
+                out.close();
+            }
+        }
+
+    }
+
+    /**
+     *
+     */
+    private void dumpFullNode(ITaskTreeNode node, PrintWriter out, String indent) {
+        out.print(indent);
+        if (node instanceof ISequence) {
+            out.println("Sequence");
+            out.print(indent);
+            out.println("{");
+        }
+        else if (node instanceof IIteration) {
+            out.println("Iteration");
+            out.print(indent);
+            out.println("{");
+        }
+        else if (node instanceof ISelection) {
+            out.println("Selection");
+            out.print(indent);
+            out.println("{");
+        }
+        else if (node instanceof ITextInputEventTask) {
+            out.print("TextInputEvent");
+            out.print(" ");
+            out.println(((ITextInputEventTask) node).getEnteredText());
+            out.print(indent);
+            out.println("{");
+        }
+        else if (node instanceof IEventTask) {
+            out.print(((IEventTask) node).getEventType().getName());
+            out.print(" ");
+            out.print(((IEventTask) node).getEventTarget());
+            if (((IEventTask) node).getEventTarget() instanceof IGUIElement)
+            {
+              out.print(" ");
+              out.print(((IGUIElement) ((IEventTask) node).getEventTarget()).getOriginalTypeInfo());
+            }
+        }
+        else {
+            fail("unknown type of node in task tree " + node);
+        }
+
+        for (ITaskTreeNode child : node.getChildren()) {
+            dumpFullNode(child, out, indent + "  ");
+        }
+
+        if (!(node instanceof IEventTask) || (node instanceof ITextInputEventTask)) {
+            out.print(indent);
+            out.print("}");
+        }
+
+        out.println();
+    }
+
+    /**
+     * 
+     */
+    private TaskSpec parseTask(Matcher tokenMatcher) {
+        String firstToken = tokenMatcher.group();
+
+        if ("}".equals(firstToken)) {
+            throw new IllegalArgumentException("found a closing bracket at an unexpected place");
+        }
+
+        TaskSpec task = new TaskSpec();
+        task.type = tokenMatcher.group(2);
+        task.name = tokenMatcher.group(3);
+        task.additionalInfo = tokenMatcher.group(4).trim();
+
+        if ("".equals(task.name)) {
+            task.name = null;
+        }
+
+        if (!tokenMatcher.find()) {
+            throw new IllegalArgumentException("could not parse task specification");
+        }
+
+        firstToken = tokenMatcher.group();
+
+        if (!"}".equals(firstToken)) {
+            ArrayList<TaskSpec> children = new ArrayList<TaskSpec>();
+
+            TaskSpec child = null;
+
+            do {
+                child = parseTask(tokenMatcher);
+
+                if (child != null) {
+                    children.add(child);
+
+                    if (!tokenMatcher.find()) {
+                        throw new IllegalArgumentException("could not parse task specification");
+                    }
+
+                    firstToken = tokenMatcher.group();
+
+                    if ("}".equals(firstToken)) {
+                        break;
+                    }
+                }
+
+            }
+            while (child != null);
+
+            task.children = children.toArray(new TaskSpec[children.size()]);
+        }
+
+        return task;
+    }
+
+    /**
+     * @param task
+     * @param taskMapCopy
+     */
+    private void assertTaskAndChildrenInMapAndRemove(TaskSpec                    task,
+                                                     Map<ITaskTreeNode, Integer> taskMap)
+    {
+        for (Map.Entry<ITaskTreeNode, Integer> entry : taskMap.entrySet()) {
+            if (taskSpecEqualsTask(task, entry.getKey())) {
+                if (task.children != null) {
+                    for (TaskSpec child : task.children) {
+                        assertTaskAndChildrenInMapAndRemove(child, taskMap);
+                    }
+                }
+
+                int count = taskMap.get(entry.getKey());
+                if (count == 1) {
+                    taskMap.remove(entry.getKey());
+                }
+                else {
+                    taskMap.put(entry.getKey(), count - 1);
+                }
+                return;
+            }
+        }
+
+        fail("expected task " + task.type + " " + task.name +
+             " not included in task map");
+    }
+
+    /**
+     *
+     */
+    private boolean taskSpecEqualsTask(TaskSpec taskSpec, ITaskTreeNode task) {
+        if (doTrace) {
+            System.err.println("comparing " + taskSpec.name + " with");
+            dumpTask(task, 0, "");
+        }
+
+        if (("Event".equals(taskSpec.type) && (!(task instanceof IEventTask))) ||
+            ("TextInputEvent".equals(taskSpec.type) && (!(task instanceof ITextInputEventTask))) ||
+            ("Sequence".equals(taskSpec.type) && (!(task instanceof ISequence))) ||
+            ("Selection".equals(taskSpec.type) && (!(task instanceof ISelection))) ||
+            ("Iteration".equals(taskSpec.type) && (!(task instanceof IIteration))))
+        {
+            if (doTrace) {
+                System.err.println("task types do not match: " + taskSpec.type + " != " +
+                    task.getClass().getSimpleName() + "\n");
+            }
+            return false;
+        }
+        else if (!"Event".equals(taskSpec.type) &&
+                 !"TextInputEvent".equals(taskSpec.type) &&
+                 !"Sequence".equals(taskSpec.type) &&
+                 !"Selection".equals(taskSpec.type) &&
+                 !"Iteration".equals(taskSpec.type))
+        {
+            fail("unknown task type " + taskSpec.type + " --> please extend test case");
+        }
+
+        if ("TextInputEvent".equals(taskSpec.type)) {
+            if (!"".equals(taskSpec.additionalInfo) &&
+                !(taskSpec.additionalInfo.equals(((ITextInputEventTask) task).getEnteredText())))
+            {
+                if (doTrace) {
+                    System.err.println("expected text \"" + taskSpec.additionalInfo +
+                                       "\" is not equal to the text " + "provided by the task \"" +
+                                       ((ITextInputEventTask) task).getEnteredText() + "\"\n");
+                }
+                return false;
+            }
+        }
+        else if ((task instanceof IEventTask) && (((IEventTask) task).getEventType() != null) &&
+                 (!taskSpec.name.equals(((IEventTask) task).getEventType().getName())))
+        {
+            // simple event names do not match. But what about the event name in
+            // combination with the additional info
+            String complexName =
+                taskSpec.name +
+                    (!"".equals(taskSpec.additionalInfo) ? " " + taskSpec.additionalInfo : "");
+
+            if (!complexName.equals(((IEventTask) task).getEventType().getName())) {
+                if (doTrace) {
+                    System.err.println("event names do not match: " + taskSpec.name + " != " +
+                                       ((IEventTask) task).getEventType().getName() + "\n");
+                }
+                return false;
+            }
+        }
+
+        if (((taskSpec.children == null) && (task.getChildren().size() > 0)) ||
+            ((taskSpec.children != null) && (taskSpec.children.length != task.getChildren().size())))
+        {
+            if (doTrace) {
+                System.err.println
+                    ("numbers of children do not match: " +
+                     (taskSpec.children == null ? "0" : taskSpec.children.length) + " != " +
+                     (task.getChildren() == null ? "0" : task.getChildren().size()) + "\n");
+            }
+            return false;
+        }
+
+        Iterator<ITaskTreeNode> children = task.getChildren().iterator();
+        if (taskSpec.children != null) {
+            for (TaskSpec child : taskSpec.children) {
+                if (!taskSpecEqualsTask(child, children.next())) {
+                    if (doTrace) {
+                        System.err.println("one of the children does not match\n");
+                    }
+                    return false;
+                }
+            }
+        }
+
+        if (!children.hasNext()) {
+            if (doTrace) {
+                System.err.println("nodes match\n");
+            }
+            return true;
+        }
+        else {
+            if (doTrace) {
+                System.err.println("number of children does not match\n");
+            }
+            return false;
+        }
+    }
+
+    /**
    *
    */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTreeChecker()
-  {
-    this(false);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
+    private void dumpTaskMap(Map<ITaskTreeNode, Integer> taskMap) {
+        System.err.println();
+        for (Map.Entry<ITaskTreeNode, Integer> entry : taskMap.entrySet()) {
+            dumpTask(entry.getKey(), entry.getValue(), "");
+            System.err.println();
+        }
+    }
+
+    /**
    *
    */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTreeChecker(boolean doTrace)
-  {
-    mDoTrace = doTrace;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void assertTaskTree(String taskTreeSpec, TaskTree taskTree)
-  {
-    Map<TaskTreeNode, Integer> taskMapCopy = new HashMap<TaskTreeNode, Integer>();
-    
-    for (Map.Entry<TaskTreeNode, NodeInfo> entry : taskTree.getTaskMap().entrySet())
-    {
-      if (entry.getValue().getNoOfOccurencesInTree() > 0)
-      {
-        taskMapCopy.put(entry.getKey(), entry.getValue().getNoOfOccurencesInTree());
-      }
-      else
-      {
-        taskMapCopy.put(entry.getKey(), 1);
-      }
-    }
-    
-    if (mDoTrace)
-    {
-      dumpTaskMap(taskMapCopy);
-    }
-
-    TaskSpec task = null;
-
-    Matcher matcher =
-      Pattern.compile("(\\s*(\\w+)\\s+(\\w+)\\s+((\\w*\\s)*)(\\{))|((\\}))").matcher(taskTreeSpec);
-    
-    do
-    {
-      if (!matcher.find())
-      {
-        if (!matcher.hitEnd())
-        {
-          throw new IllegalArgumentException("could not parse task specification");
-        }
-        else
-        {
-          break;
-        }
-      }
-      
-      task = parseTask(matcher);
-      if (task != null)
-      {
-        assertTaskAndChildrenInMapAndRemove(task, taskMapCopy);
-      }
-    }
-    while (task != null);
-    
-    assertTrue("more tasks in map, than expected", taskMapCopy.isEmpty());
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param taskTree
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void dumpAsCheckString(TaskTree taskTree)
-  {
-    dumpNodeAsCheckString(taskTree.getRoot(), new int[4], "");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param root
-   * @param string
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void dumpNodeAsCheckString(TaskTreeNode node,
-                                     int[]        typeCounters,
-                                     String       indent)
-  {
-    System.err.print("       \"");
-    System.err.print(indent);
-    
-    if (node instanceof Sequence)
-    {
-      System.err.print("Sequence sequence");
-      System.err.print(typeCounters[0]++);
-      System.err.println(" {\" +");
-    }
-    else if (node instanceof Iteration)
-    {
-      System.err.print("Iteration iteration");
-      System.err.print(typeCounters[1]++);
-      System.err.println(" {\" +");
-    }
-    else if (node instanceof Selection)
-    {
-      System.err.print("Selection selection");
-      System.err.print(typeCounters[2]++);
-      System.err.println(" {\" +");
-    }
-    else if (node instanceof TextInputInteractionTask)
-    {
-      System.err.print("TextInputInteraction textInput");
-      System.err.print(typeCounters[3]++);
-      System.err.print(" ");
-      System.err.print(((TextInputInteractionTask) node).getEnteredText());
-      System.err.println(" {\" +");
-    }
-    else if (node instanceof InteractionTask)
-    {
-      System.err.print("Interaction ");
-      System.err.print(((InteractionTask) node).getInteraction().getName());
-      System.err.print(" {}\" +");
-    }
-    else
-    {
-      fail("unknown type of node in task tree " + node);
-    }
-    
-    for (TaskTreeNode child : node.getChildren())
-    {
-      dumpNodeAsCheckString(child, typeCounters, indent + "  ");
-    }
-    
-    if (!(node instanceof InteractionTask) ||
-        (node instanceof TextInputInteractionTask))
-    {
-      System.err.print("       \"");
-      System.err.print(indent);
-      System.err.print("}\" +");
-    }
-    
-    System.err.println();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param taskTree
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void dumpFullTaskTree(TaskTree taskTree) throws FileNotFoundException
-  {
-    PrintWriter out = null;
-    try
-    {
-      out = new PrintWriter(new FileOutputStream("taskTree.txt"));
-      dumpFullNode(taskTree.getRoot(), out, "");
-    }
-    finally
-    {
-      if (out != null)
-      {
-        out.close();
-      }
-    }
-    
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void dumpFullNode(TaskTreeNode node, PrintWriter out, String indent)
-  {
-    out.print(indent);
-    if (node instanceof Sequence)
-    {
-      out.println("Sequence");
-      out.print(indent);
-      out.println("{");
-    }
-    else if (node instanceof Iteration)
-    {
-      out.println("Iteration");
-      out.print(indent);
-      out.println("{");
-    }
-    else if (node instanceof Selection)
-    {
-      out.println("Selection");
-      out.print(indent);
-      out.println("{");
-    }
-    else if (node instanceof TextInputInteractionTask)
-    {
-      out.print("TextInputInteraction");
-      out.print(" ");
-      out.println(((TextInputInteractionTask) node).getEnteredText());
-      out.print(indent);
-      out.println("{");
-    }
-    else if (node instanceof InteractionTask)
-    {
-      out.print(((InteractionTask) node).getInteraction().getName());
-      out.print(" ");
-      out.print(((InteractionTask) node).getGUIElement());
-      out.print(" ");
-      out.print(((InteractionTask) node).getGUIElement().getOriginalTypeInfo());
-    }
-    else
-    {
-      fail("unknown type of node in task tree " + node);
-    }
-    
-    for (TaskTreeNode child : node.getChildren())
-    {
-      dumpFullNode(child, out, indent + "  ");
-    }
-    
-    if (!(node instanceof InteractionTask) ||
-        (node instanceof TextInputInteractionTask))
-    {
-      out.print(indent);
-      out.print("}");
-    }
-    
-    out.println();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * 
-   */
-  //-----------------------------------------------------------------------------------------------
-  private TaskSpec parseTask(Matcher tokenMatcher)
-  {
-    String firstToken = tokenMatcher.group();
-    
-    if ("}".equals(firstToken))
-    {
-      throw new IllegalArgumentException("found a closing bracket at an unexpected place");
-    }
-    
-    TaskSpec task = new TaskSpec();
-    task.type = tokenMatcher.group(2);
-    task.interactionName = tokenMatcher.group(3);
-    task.additionalInfo = tokenMatcher.group(4).trim();
-    
-    if ("".equals(task.interactionName))
-    {
-      task.interactionName = null;
-    }
-    
-    if (!tokenMatcher.find())
-    {
-      throw new IllegalArgumentException("could not parse task specification");
-    }
-    
-    firstToken = tokenMatcher.group();
-    
-    if (!"}".equals(firstToken))
-    {
-      ArrayList<TaskSpec> children = new ArrayList<TaskSpec>();
-    
-      TaskSpec child = null;
-    
-      do
-      {
-        child = parseTask(tokenMatcher);
-        
-        if (child != null)
-        {
-          children.add(child);
-          
-          if (!tokenMatcher.find())
-          {
-            throw new IllegalArgumentException("could not parse task specification");
-          }
-          
-          firstToken = tokenMatcher.group();
-          
-          if ("}".equals(firstToken))
-          {
-            break;
-          }
-        }
-        
-      }
-      while (child != null);
-      
-      task.children = children.toArray(new TaskSpec[children.size()]);
-    }
-    
-    return task;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param task
-   * @param taskMapCopy
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void assertTaskAndChildrenInMapAndRemove(TaskSpec                   task,
-                                                   Map<TaskTreeNode, Integer> taskMap)
-  {
-    for (Map.Entry<TaskTreeNode, Integer> entry : taskMap.entrySet())
-    {
-      if (taskSpecEqualsTask(task, entry.getKey()))
-      {
-        if (task.children != null)
-        {
-          for (TaskSpec child : task.children)
-          {
-            assertTaskAndChildrenInMapAndRemove(child, taskMap);
-          }
-        }
-        
-        int count = taskMap.get(entry.getKey());
-        if (count == 1)
-        {
-          taskMap.remove(entry.getKey());
-        }
-        else
-        {
-          taskMap.put(entry.getKey(), count - 1);
-        }
-        return;
-      }
-    }
-    
-    fail("expected task " + task.type + " " + task.interactionName + " not included in task map");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private boolean taskSpecEqualsTask(TaskSpec taskSpec, TaskTreeNode task)
-  {
-    if (mDoTrace)
-    {
-      System.err.println("comparing " + taskSpec.interactionName + " with");
-      dumpTask(task, 0, "");
-    }
-    
-    if (("Interaction".equals(taskSpec.type) && (!(task instanceof InteractionTask))) ||
-        ("TextInputInteraction".equals(taskSpec.type) &&
-            (!(task instanceof TextInputInteractionTask))) ||
-        ("Sequence".equals(taskSpec.type) && (!(task instanceof Sequence))) ||
-        ("Selection".equals(taskSpec.type) && (!(task instanceof Selection))) ||
-        ("Iteration".equals(taskSpec.type) && (!(task instanceof Iteration))))
-    {
-      if (mDoTrace)
-      {
-        System.err.println("task types do not match: " + taskSpec.type + " != " +
-                           task.getClass().getSimpleName() + "\n");
-      }
-      return false;
-    }
-    else if (!"Interaction".equals(taskSpec.type) &&
-             !"TextInputInteraction".equals(taskSpec.type) &&
-             !"Sequence".equals(taskSpec.type) &&
-             !"Selection".equals(taskSpec.type) &&
-             !"Iteration".equals(taskSpec.type))
-    {
-      fail("unknown task type " + taskSpec.type + " --> please extend test case");
-    }
-    
-    if ("TextInputInteraction".equals(taskSpec.type))
-    {
-      if (!"".equals(taskSpec.additionalInfo) &&
-          !(taskSpec.additionalInfo.equals(((TextInputInteractionTask) task).getEnteredText())))
-      {
-        if (mDoTrace)
-        {
-          System.err.println
-            ("expected text \"" + taskSpec.additionalInfo + "\" is not equal to the text " +
-             "provided by the task \"" + ((TextInputInteractionTask) task).getEnteredText() +
-             "\"\n");
-        }
-        return false;
-      }
-    }
-    else if ((task instanceof InteractionTask) &&
-        (((InteractionTask) task).getInteraction() != null) &&
-        (!taskSpec.interactionName.equals(((InteractionTask) task).getInteraction().getName())))
-    {
-      // simple interaction names do not match. But what about the interaction name in combination
-      // with the additional info
-      String complexInteractionName = taskSpec.interactionName +
-        (!"".equals(taskSpec.additionalInfo) ? " " + taskSpec.additionalInfo : "");
-      
-      if (!complexInteractionName.equals(((InteractionTask) task).getInteraction().getName()))
-      {
-        if (mDoTrace)
-        {
-          System.err.println("interaction names do not match: " + taskSpec.interactionName +
-                             " != " + ((InteractionTask) task).getInteraction().getName() + "\n");
-        }
-        return false;
-      }
-    }
-    
-    if (((taskSpec.children == null) && (task.getChildren().size() > 0)) ||
-        ((taskSpec.children != null) && (taskSpec.children.length != task.getChildren().size())))
-    {
-      if (mDoTrace)
-      {
-        System.err.println("numbers of children do not match: " +
-                           (taskSpec.children == null ? "0" : taskSpec.children.length) + " != " +
-                           (task.getChildren() == null ? "0" : task.getChildren().size()) + "\n");
-      }
-      return false;
-    }
-    
-    Iterator<TaskTreeNode> children = task.getChildren().iterator();
-    if (taskSpec.children != null)
-    {
-      for (TaskSpec child : taskSpec.children)
-      {
-        if (!taskSpecEqualsTask(child, children.next()))
-        {
-          if (mDoTrace)
-          {
-            System.err.println("one of the children does not match\n");
-          }
-          return false;
-        }
-      }
-    }
-        
-    if (!children.hasNext())
-    {
-      if (mDoTrace)
-      {
-        System.err.println("nodes match\n");
-      }
-      return true;
-    }
-    else
-    {
-      if (mDoTrace)
-      {
-        System.err.println("number of children does not match\n");
-      }
-      return false;
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void dumpTaskMap(Map<TaskTreeNode, Integer> taskMap)
-  {
-    System.err.println();
-    for (Map.Entry<TaskTreeNode, Integer> entry : taskMap.entrySet())
-    {
-      dumpTask(entry.getKey(), entry.getValue(), "");
-      System.err.println();
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void dumpTask(TaskTreeNode task, int count, String indent)
-  {
-    System.err.print(indent);
-    System.err.print(task);
-    System.err.print(" ");
-    System.err.print(task.getDescription());
-    System.err.print(" ");
-    
-    if (count > 0)
-    {
-      System.err.print("(");
-      System.err.print(count);
-      System.err.print(" occurrences)");
-    }
-    
-    System.err.println();
-    
-    if ((task.getChildren() != null) && (task.getChildren().size() > 0))
-    {
-      for (TaskTreeNode child : task.getChildren())
-      {
-        dumpTask(child, 0, indent + "  ");
-      }
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO comment
-   *
-   * @version $Revision: $ $Date: $
-   * @author  2011, last modified by $Author: $
-   */
-  //-----------------------------------------------------------------------------------------------
-  private class TaskSpec
-  {
-    public String type;
-    public String interactionName;
-    public String additionalInfo;
-    public TaskSpec[] children;
-  }
+    private void dumpTask(ITaskTreeNode task, int count, String indent) {
+        System.err.print(indent);
+        System.err.print(task);
+        System.err.print(" ");
+        System.err.print(task.getDescription());
+        System.err.print(" ");
+
+        if (count > 0) {
+            System.err.print("(");
+            System.err.print(count);
+            System.err.print(" occurrences)");
+        }
+
+        System.err.println();
+
+        if ((task.getChildren() != null) && (task.getChildren().size() > 0)) {
+            for (ITaskTreeNode child : task.getChildren()) {
+                dumpTask(child, 0, indent + "  ");
+            }
+        }
+    }
+
+    /**
+     * TODO comment
+     * 
+     * @version $Revision: $ $Date: $
+     * @author 2011, last modified by $Author: $
+     */
+    private class TaskSpec {
+        public String type;
+        public String name;
+        public String additionalInfo;
+        public TaskSpec[] children;
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/Utilities.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/Utilities.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/testutils/Utilities.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TestUtils.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 02.04.2012 $
@@ -5,10 +4,10 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
+
 package de.ugoe.cs.quest.tasktrees.testutils;
 
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEqualityRuleManager;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -17,27 +16,22 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class Utilities
-{
-  /** */
-  private static final NodeEqualityRuleManager NODE_EQUALITY_RULE_MANAGER =
-    new NodeEqualityRuleManager();
-  
-  static
-  {
-    NODE_EQUALITY_RULE_MANAGER.init();
-  }
+public class Utilities {
+    
+    /** */
+    private static final NodeEqualityRuleManager NODE_EQUALITY_RULE_MANAGER =
+        new NodeEqualityRuleManager();
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public static NodeEqualityRuleManager getNodeEqualityRuleManagerForTests()
-  {
-    return NODE_EQUALITY_RULE_MANAGER;
-  }
+    static {
+        NODE_EQUALITY_RULE_MANAGER.init();
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public static NodeEqualityRuleManager getNodeEqualityRuleManagerForTests() {
+        return NODE_EQUALITY_RULE_MANAGER;
+    }
 
 }
Index: /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImplTest.java
===================================================================
--- /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImplTest.java	(revision 556)
+++ /trunk/quest-core-tasktrees-test/src/test/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImplTest.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TaskTreeImplTest.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 02.04.2012 $
@@ -5,5 +4,6 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
+
 package de.ugoe.cs.quest.tasktrees.treeimpl;
 
@@ -19,15 +19,14 @@
 import de.ugoe.cs.quest.tasktrees.testutils.DummyGUIElement;
 import de.ugoe.cs.quest.tasktrees.testutils.DummyInteraction;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.NodeInfo;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTree;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-
-//-------------------------------------------------------------------------------------------------
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeInfo;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+
 /**
  * TODO comment
@@ -36,511 +35,436 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeImplTest
-{
-  /** */
-  private static final int MAX_TREE_DEPTH = 15;
-  
-  /** */
-  private TaskTreeBuilder mTaskTreeBuilder = new TaskTreeBuilderImpl();
-  
-  /** */
-  private TaskTreeNodeFactory mTaskTreeNodeFactory = new TaskTreeNodeFactoryImpl();
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @throws Exception 
-   * 
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Test
-  public void testRandomTrees() throws Exception
-  {
-    int noOfTrees = 10;
-    int noOfMaxChildren = 8;
-    int maxDepth = MAX_TREE_DEPTH;
+public class TaskTreeImplTest {
     
-    for (int i = 0; i < noOfTrees; i++)
-    {
-      System.err.println("iteration " + (i + 1) + ":");
-      System.err.println("  creating tree");
-      Map<TaskTreeNode, NodeInfo> treeInfos = new HashMap<TaskTreeNode, NodeInfo>();
-      TaskTreeNode rootNode = createTree(noOfMaxChildren, maxDepth, treeInfos);
-      System.err.println("  creating task tree");
-      TaskTree taskTree = mTaskTreeNodeFactory.createTaskTree(rootNode);
-      
-      System.err.println("  validating task tree");
-      assertEquals(rootNode, taskTree.getRoot());
-      assertMapsEqual(treeInfos, taskTree.getTaskMap());
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @param taskMap
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void assertMapsEqual(Map<TaskTreeNode, NodeInfo> map1,
-                               Map<TaskTreeNode, NodeInfo> map2)
-  {
-    try
-    {
-      if (map1 == null)
-      {
-        assertNull(map2);
-        return;
-      }
-      
-      assertEquals(map1.size(), map2.size());
-      
-      for (Map.Entry<TaskTreeNode, NodeInfo> entry : map1.entrySet())
-      {
-        NodeInfo value2 = map2.get(entry.getKey());
-        assertNotNull(value2);
-        assertEquals(entry.getValue().getTask(), value2.getTask());
-        assertEquals(entry.getValue().getNoOfOccurencesInTree(), value2.getNoOfOccurencesInTree());
-      }
-    }
-    catch (AssertionError e)
-    {
-      dumpMap(map1);
-      dumpMap(map2);
-      throw e;
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param map2
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void dumpMap(Map<TaskTreeNode, NodeInfo> map)
-  {
-    System.err.println();
-    
-    if (map == null)
-    {
-      System.err.println("map is null");
-    }
-    else
-    {
-      System.err.println("map:");
-      for (Map.Entry<TaskTreeNode, NodeInfo> entry : map.entrySet())
-      {
-        System.err.print("  ");
-        System.err.print(entry.getKey());
-        for (int i = entry.getKey().toString().length(); i < 49; i++)
+    /** */
+    private static final int MAX_TREE_DEPTH = 15;
+
+    /** */
+    private ITaskTreeBuilder taskTreeBuilder = new TaskTreeBuilder();
+
+    /** */
+    private ITaskTreeNodeFactory taskTreeNodeFactory = new TaskTreeNodeFactory();
+
+    /**
+     * @throws Exception
+     * 
+     */
+    @Test
+    public void testRandomTrees() throws Exception {
+        int noOfTrees = 10;
+        int noOfMaxChildren = 8;
+        int maxDepth = MAX_TREE_DEPTH;
+
+        for (int i = 0; i < noOfTrees; i++) {
+            System.err.println("iteration " + (i + 1) + ":");
+            System.err.println("  creating tree");
+            Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos =
+                new HashMap<ITaskTreeNode, ITaskTreeNodeInfo>();
+            ITaskTreeNode rootNode = createTree(noOfMaxChildren, maxDepth, treeInfos);
+            System.err.println("  creating task tree");
+            ITaskTree taskTree = taskTreeNodeFactory.createTaskTree(rootNode);
+
+            System.err.println("  validating task tree");
+            assertEquals(rootNode, taskTree.getRoot());
+            assertMapsEqual(treeInfos, taskTree.getTaskMap());
+        }
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @param taskMap
+     */
+    private void assertMapsEqual(Map<ITaskTreeNode, ITaskTreeNodeInfo> map1,
+                                 Map<ITaskTreeNode, ITaskTreeNodeInfo> map2)
+    {
+        try {
+            if (map1 == null) {
+                assertNull(map2);
+                return;
+            }
+
+            assertEquals(map1.size(), map2.size());
+
+            for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : map1.entrySet()) {
+                ITaskTreeNodeInfo value2 = map2.get(entry.getKey());
+                assertNotNull(value2);
+                assertEquals(entry.getValue().getTask(), value2.getTask());
+                assertEquals(entry.getValue().getNoOfOccurencesInTree(),
+                             value2.getNoOfOccurencesInTree());
+            }
+        }
+        catch (AssertionError e) {
+            dumpMap(map1);
+            dumpMap(map2);
+            throw e;
+        }
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param map2
+     */
+    private void dumpMap(Map<ITaskTreeNode, ITaskTreeNodeInfo> map) {
+        System.err.println();
+
+        if (map == null) {
+            System.err.println("map is null");
+        }
+        else {
+            System.err.println("map:");
+            for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : map.entrySet()) {
+                System.err.print("  ");
+                System.err.print(entry.getKey());
+                for (int i = entry.getKey().toString().length(); i < 49; i++) {
+                    System.err.print(" ");
+                }
+                System.err.print(" : ");
+                System.err.println(entry.getValue());
+            }
+        }
+
+        System.err.println();
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param noOfMaxChildren
+     * @param maxDepth
+     * @param treeInfos
+     * @return
+     */
+    private ITaskTreeNode createTree(int                                   maxNoOfChildren,
+                                     int                                   maxDepth,
+                                     Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        /*
+         * for (int i = 0; i < (MAX_TREE_DEPTH + 1 - maxDepth); i++) { System.err.print("  "); }
+         */
+
+        ITaskTreeNode tree;
+
+        // integrating the maximum depth here assures, that either something between 0 and 8 will
+        // be the type, or if the max depth decreases near 0 only event tasks will be created
+        // to finish the tree creation
+        int type = (int) (Math.random() * (Math.min(8, maxDepth)));
+
+        switch (type)
         {
-          System.err.print(" ");
-        }
-        System.err.print(" : ");
-        System.err.println(entry.getValue());
-      }
-    }
-    
-    System.err.println();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param noOfMaxChildren
-   * @param maxDepth
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private TaskTreeNode createTree(int                         maxNoOfChildren,
-                                  int                         maxDepth,
-                                  Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    /*for (int i = 0; i < (MAX_TREE_DEPTH + 1 - maxDepth); i++)
-    {
-      System.err.print("  ");
-    }*/
-    
-    TaskTreeNode tree;
-    
-    // integrating the maximum depth here assures, that either something between 0 and 8 will
-    // be the type, or if the max depth decreases near 0 only interaction tasks will be created
-    // to finish the tree creation
-    int type = (int) (Math.random() * (Math.min(8, maxDepth)));
-    
-    switch (type)
-    {
-      case 0:
-      {
-        //System.err.print("creating new interaction task ");
-        tree = createNewInteractionTask(treeInfos);
-        break;
-      }
-      case 1:
-      {
-        //System.err.print("reusing interaction task ");
-        tree = reuseInteractionTask(treeInfos);
-        break;
-      }
-      case 2:
-      {
-        //System.err.println("creating new sequence {");
-        tree = createNewSequence(maxNoOfChildren, maxDepth, treeInfos);
-        break;
-      }
-      case 3:
-      {
-        //System.err.println("reusing sequence {");
-        tree = reuseSequence(maxNoOfChildren, maxDepth, treeInfos);
-        break;
-      }
-      case 4:
-      {
-        //System.err.println("creating new selection {");
-        tree = createNewSelection(maxNoOfChildren, maxDepth, treeInfos);
-        break;
-      }
-      case 5:
-      {
-        //System.err.println("reusing selection {");
-        tree = reuseSelection(maxNoOfChildren, maxDepth, treeInfos);
-        break;
-      }
-      case 6:
-      {
-        //System.err.println("creating new iteration {");
-        tree = createNewIteration(maxNoOfChildren, maxDepth, treeInfos);
-        break;
-      }
-      case 7:
-      {
-        //System.err.println("reusing iteration {");
-        tree = reuseIteration(maxNoOfChildren, maxDepth, treeInfos);
-        break;
-      }
-      default:
-      {
-        //System.err.print("creating new interaction task per default ");
-        tree = createNewInteractionTask(treeInfos);
-      }
-    }
-    
-    /*
-    if (!(tree instanceof InteractionTask))
-    {
-      for (int i = 0; i < (MAX_TREE_DEPTH + 1 - maxDepth); i++)
-      {
-        System.err.print("  ");
-      }
-      
-      System.err.print("} ");
-    }
-    
-    System.err.println(tree);*/
-    
-    return tree;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private InteractionTask createNewInteractionTask(Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    Thread.sleep(2);
-    long id = System.currentTimeMillis();
-    InteractionTask task = mTaskTreeNodeFactory.createNewInteractionTask
-      (new DummyGUIElement("elem" + id), new DummyInteraction("interaction" + id, 1));
-    
-    treeInfos.put(task, new NodeInfoImpl(task));
-    
-    return task;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private InteractionTask reuseInteractionTask(Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    int noOfInteractionTasks = 0;
-    
-    for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-    {
-      if (entry.getKey() instanceof InteractionTask)
-      {
-        noOfInteractionTasks++;
-      }
-    }
-    
-    if (noOfInteractionTasks > 0)
-    {
-      noOfInteractionTasks = (int) (Math.random() * noOfInteractionTasks);
-      
-      for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-      {
-        if (entry.getKey() instanceof InteractionTask)
-        {
-          if (--noOfInteractionTasks <= 0)
-          {
-            return (InteractionTask) entry.getKey();
-          }
-        }
-      }
-    }
-    else
-    {
-      return createNewInteractionTask(treeInfos); 
-    }
-    
-    throw new RuntimeException("this is an implementation error");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private Sequence createNewSequence(int                         maxNoOfChildren,
-                                     int                         maxDepth,
-                                     Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    Sequence sequence = mTaskTreeNodeFactory.createNewSequence();
-    
-    int noOfChildren = (int) (Math.random() * maxNoOfChildren);
-    
-    for (int i = 0; i < noOfChildren; i++)
-    {
-      TaskTreeNode child = createTree(maxNoOfChildren, maxDepth - 1, treeInfos);
-      
-      // through first removing an existing parent it is assured, that a parent is recorded
-      // only once. This is needed, because parent may be reused in a tree as well, but we always
-      // iterate the whole tree
-      ((NodeInfoImpl) treeInfos.get(child)).removeParent(sequence);
-      ((NodeInfoImpl) treeInfos.get(child)).addParent(sequence);
-      mTaskTreeBuilder.addChild(sequence, child);
-    }
-    
-    treeInfos.put(sequence, new NodeInfoImpl(sequence));
-    return sequence;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private Sequence reuseSequence(int                         maxNoOfChildren,
-                                 int                         maxDepth,
-                                 Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    int noOfSequences = 0;
-    
-    for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-    {
-      if (entry.getKey() instanceof Sequence)
-      {
-        noOfSequences++;
-      }
-    }
-    
-    if (noOfSequences > 0)
-    {
-      noOfSequences = (int) (Math.random() * noOfSequences);
-      
-      for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-      {
-        if (entry.getKey() instanceof Sequence)
-        {
-          if (--noOfSequences <= 0)
-          {
-            return (Sequence) entry.getKey();
-          }
-        }
-      }
-    }
-    else
-    {
-      return createNewSequence(maxNoOfChildren, maxDepth, treeInfos); 
-    }
-    
-    throw new RuntimeException("this is an implementation error");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private Selection createNewSelection(int                         maxNoOfChildren,
-                                       int                         maxDepth,
-                                       Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    Selection selection = mTaskTreeNodeFactory.createNewSelection();
-    
-    int noOfChildren = (int) (Math.random() * maxNoOfChildren);
-    
-    for (int i = 0; i < noOfChildren; i++)
-    {
-      TaskTreeNode child = createTree(maxNoOfChildren, maxDepth - 1, treeInfos);
-      
-      // through first removing an existing parent it is assured, that a parent is recorded
-      // only once. This is needed, because parent may be reused in a tree as well, but we always
-      // iterate the whole tree
-      ((NodeInfoImpl) treeInfos.get(child)).removeParent(selection);
-      ((NodeInfoImpl) treeInfos.get(child)).addParent(selection);
-      mTaskTreeBuilder.addChild(selection, child);
-    }
-    
-    treeInfos.put(selection, new NodeInfoImpl(selection));
-    return selection;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private Selection reuseSelection(int                         maxNoOfChildren,
-                                   int                         maxDepth,
-                                   Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    int noOfSelections = 0;
-    
-    for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-    {
-      if (entry.getKey() instanceof Selection)
-      {
-        noOfSelections++;
-      }
-    }
-    
-    if (noOfSelections > 0)
-    {
-      noOfSelections = (int) (Math.random() * noOfSelections);
-      
-      for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-      {
-        if (entry.getKey() instanceof Selection)
-        {
-          if (--noOfSelections <= 0)
-          {
-            return (Selection) entry.getKey();
-          }
-        }
-      }
-    }
-    else
-    {
-      return createNewSelection(maxNoOfChildren, maxDepth, treeInfos); 
-    }
-    
-    throw new RuntimeException("this is an implementation error");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private Iteration createNewIteration(int                         maxNoOfChildren,
-                                       int                         maxDepth,
-                                       Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    Iteration iteration = mTaskTreeNodeFactory.createNewIteration();
-    
-    TaskTreeNode child = createTree(maxNoOfChildren, maxDepth - 1, treeInfos);
-    
-    // through first removing an existing parent it is assured, that a parent is recorded
-    // only once. This is needed, because parent may be reused in a tree as well, but we always
-    // iterate the whole tree
-    ((NodeInfoImpl) treeInfos.get(child)).removeParent(iteration);
-    ((NodeInfoImpl) treeInfos.get(child)).addParent(iteration);
-    mTaskTreeBuilder.setChild(iteration, child);
-    
-    treeInfos.put(iteration, new NodeInfoImpl(iteration));
-    return iteration;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param treeInfos
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private Iteration reuseIteration(int                         maxNoOfChildren,
-                                   int                         maxDepth,
-                                   Map<TaskTreeNode, NodeInfo> treeInfos)
-    throws Exception
-  {
-    int noOfIterations = 0;
-    
-    for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-    {
-      if (entry.getKey() instanceof Iteration)
-      {
-        noOfIterations++;
-      }
-    }
-    
-    if (noOfIterations > 0)
-    {
-      noOfIterations = (int) (Math.random() * noOfIterations);
-      
-      for (Map.Entry<TaskTreeNode, NodeInfo> entry : treeInfos.entrySet())
-      {
-        if (entry.getKey() instanceof Iteration)
-        {
-          if (--noOfIterations <= 0)
-          {
-            return (Iteration) entry.getKey();
-          }
-        }
-      }
-    }
-    else
-    {
-      return createNewIteration(maxNoOfChildren, maxDepth, treeInfos); 
-    }
-    
-    throw new RuntimeException("this is an implementation error");
-  }
+            case 0: {
+                // System.err.print("creating new event task ");
+                tree = createNewEventTask(treeInfos);
+                break;
+            }
+            case 1: {
+                // System.err.print("reusing event task ");
+                tree = reuseEventTask(treeInfos);
+                break;
+            }
+            case 2: {
+                // System.err.println("creating new sequence {");
+                tree = createNewSequence(maxNoOfChildren, maxDepth, treeInfos);
+                break;
+            }
+            case 3: {
+                // System.err.println("reusing sequence {");
+                tree = reuseSequence(maxNoOfChildren, maxDepth, treeInfos);
+                break;
+            }
+            case 4: {
+                // System.err.println("creating new selection {");
+                tree = createNewSelection(maxNoOfChildren, maxDepth, treeInfos);
+                break;
+            }
+            case 5: {
+                // System.err.println("reusing selection {");
+                tree = reuseSelection(maxNoOfChildren, maxDepth, treeInfos);
+                break;
+            }
+            case 6: {
+                // System.err.println("creating new iteration {");
+                tree = createNewIteration(maxNoOfChildren, maxDepth, treeInfos);
+                break;
+            }
+            case 7: {
+                // System.err.println("reusing iteration {");
+                tree = reuseIteration(maxNoOfChildren, maxDepth, treeInfos);
+                break;
+            }
+            default: {
+                // System.err.print("creating new event task per default ");
+                tree = createNewEventTask(treeInfos);
+            }
+        }
+
+        /*
+         * if (!(tree instanceof InteractionTask)) { for (int i = 0; i < (MAX_TREE_DEPTH + 1 -
+         * maxDepth); i++) { System.err.print("  "); }
+         * 
+         * System.err.print("} "); }
+         * 
+         * System.err.println(tree);
+         */
+
+        return tree;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private IEventTask createNewEventTask(Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        Thread.sleep(2);
+        long id = System.currentTimeMillis();
+        IEventTask task =
+            taskTreeNodeFactory.createNewEventTask(new DummyInteraction("interaction" + id, 1),
+                                                   new DummyGUIElement("elem" + id));
+
+        treeInfos.put(task, new NodeInfo(task));
+
+        return task;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private IEventTask reuseEventTask(Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        int noOfEventTasks = 0;
+
+        for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+            if (entry.getKey() instanceof IEventTask) {
+                noOfEventTasks++;
+            }
+        }
+
+        if (noOfEventTasks > 0) {
+            noOfEventTasks = (int) (Math.random() * noOfEventTasks);
+
+            for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+                if (entry.getKey() instanceof IEventTask) {
+                    if (--noOfEventTasks <= 0) {
+                        return (IEventTask) entry.getKey();
+                    }
+                }
+            }
+        }
+        else {
+            return createNewEventTask(treeInfos);
+        }
+
+        throw new RuntimeException("this is an implementation error");
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private ISequence createNewSequence(int                                   maxNoOfChildren,
+                                        int                                   maxDepth,
+                                        Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        ISequence sequence = taskTreeNodeFactory.createNewSequence();
+
+        int noOfChildren = (int) (Math.random() * maxNoOfChildren);
+
+        for (int i = 0; i < noOfChildren; i++) {
+            ITaskTreeNode child = createTree(maxNoOfChildren, maxDepth - 1, treeInfos);
+
+            // through first removing an existing parent it is assured, that a parent is recorded
+            // only once. This is needed, because parent may be reused in a tree as well, but we
+            // always
+            // iterate the whole tree
+            ((NodeInfo) treeInfos.get(child)).removeParent(sequence);
+            ((NodeInfo) treeInfos.get(child)).addParent(sequence);
+            taskTreeBuilder.addChild(sequence, child);
+        }
+
+        treeInfos.put(sequence, new NodeInfo(sequence));
+        return sequence;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private ISequence reuseSequence(int                                   maxNoOfChildren,
+                                    int                                   maxDepth,
+                                    Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        int noOfSequences = 0;
+
+        for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+            if (entry.getKey() instanceof ISequence) {
+                noOfSequences++;
+            }
+        }
+
+        if (noOfSequences > 0) {
+            noOfSequences = (int) (Math.random() * noOfSequences);
+
+            for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+                if (entry.getKey() instanceof ISequence) {
+                    if (--noOfSequences <= 0) {
+                        return (ISequence) entry.getKey();
+                    }
+                }
+            }
+        }
+        else {
+            return createNewSequence(maxNoOfChildren, maxDepth, treeInfos);
+        }
+
+        throw new RuntimeException("this is an implementation error");
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private ISelection createNewSelection(int                                   maxNoOfChildren,
+                                          int                                   maxDepth,
+                                          Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        ISelection selection = taskTreeNodeFactory.createNewSelection();
+
+        int noOfChildren = (int) (Math.random() * maxNoOfChildren);
+
+        for (int i = 0; i < noOfChildren; i++) {
+            ITaskTreeNode child = createTree(maxNoOfChildren, maxDepth - 1, treeInfos);
+
+            // through first removing an existing parent it is assured, that a parent is recorded
+            // only once. This is needed, because parent may be reused in a tree as well, but we
+            // always
+            // iterate the whole tree
+            ((NodeInfo) treeInfos.get(child)).removeParent(selection);
+            ((NodeInfo) treeInfos.get(child)).addParent(selection);
+            taskTreeBuilder.addChild(selection, child);
+        }
+
+        treeInfos.put(selection, new NodeInfo(selection));
+        return selection;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private ISelection reuseSelection(int                                   maxNoOfChildren,
+                                      int                                   maxDepth,
+                                      Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        int noOfSelections = 0;
+
+        for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+            if (entry.getKey() instanceof ISelection) {
+                noOfSelections++;
+            }
+        }
+
+        if (noOfSelections > 0) {
+            noOfSelections = (int) (Math.random() * noOfSelections);
+
+            for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+                if (entry.getKey() instanceof ISelection) {
+                    if (--noOfSelections <= 0) {
+                        return (ISelection) entry.getKey();
+                    }
+                }
+            }
+        }
+        else {
+            return createNewSelection(maxNoOfChildren, maxDepth, treeInfos);
+        }
+
+        throw new RuntimeException("this is an implementation error");
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private IIteration createNewIteration(int                                   maxNoOfChildren,
+                                          int                                   maxDepth,
+                                          Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        IIteration iteration = taskTreeNodeFactory.createNewIteration();
+
+        ITaskTreeNode child = createTree(maxNoOfChildren, maxDepth - 1, treeInfos);
+
+        // through first removing an existing parent it is assured, that a parent is recorded
+        // only once. This is needed, because parent may be reused in a tree as well, but we always
+        // iterate the whole tree
+        ((NodeInfo) treeInfos.get(child)).removeParent(iteration);
+        ((NodeInfo) treeInfos.get(child)).addParent(iteration);
+        taskTreeBuilder.setChild(iteration, child);
+
+        treeInfos.put(iteration, new NodeInfo(iteration));
+        return iteration;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param treeInfos
+     * @return
+     */
+    private IIteration reuseIteration(int                                   maxNoOfChildren,
+                                      int                                   maxDepth,
+                                      Map<ITaskTreeNode, ITaskTreeNodeInfo> treeInfos)
+        throws Exception
+    {
+        int noOfIterations = 0;
+
+        for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+            if (entry.getKey() instanceof IIteration) {
+                noOfIterations++;
+            }
+        }
+
+        if (noOfIterations > 0) {
+            noOfIterations = (int) (Math.random() * noOfIterations);
+
+            for (Map.Entry<ITaskTreeNode, ITaskTreeNodeInfo> entry : treeInfos.entrySet()) {
+                if (entry.getKey() instanceof IIteration) {
+                    if (--noOfIterations <= 0) {
+                        return (IIteration) entry.getKey();
+                    }
+                }
+            }
+        }
+        else {
+            return createNewIteration(maxNoOfChildren, maxDepth, treeInfos);
+        }
+
+        throw new RuntimeException("this is an implementation error");
+    }
 
 }
Index: /trunk/quest-core-tasktrees/pom.xml
===================================================================
--- /trunk/quest-core-tasktrees/pom.xml	(revision 556)
+++ /trunk/quest-core-tasktrees/pom.xml	(revision 557)
@@ -11,5 +11,5 @@
     <dependency>
       <groupId>de.ugoe.cs.quest</groupId>
-      <artifactId>quest-core-events-patrick</artifactId>
+      <artifactId>quest-core-events</artifactId>
       <version>0.0.1-SNAPSHOT</version>
     </dependency>
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/ComponentManager.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/ComponentManager.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/ComponentManager.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: ComponentManager.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 12.02.2012 $
@@ -5,15 +4,14 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.manager;
 
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEqualityRuleManager;
 import de.ugoe.cs.quest.tasktrees.temporalrelation.TemporalRelationshipRuleManager;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeBuilderImpl;
-import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactoryImpl;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeimpl.TaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -22,117 +20,94 @@
  * @author 2012, last modified by $Author: patrick$
  */
-// -------------------------------------------------------------------------------------------------
-public class ComponentManager
-{
-  /** */
-  private static ComponentManager sInstance;
+public class ComponentManager {
+    
+    /** */
+    private static ComponentManager instance;
 
-  /** */
-  private TemporalRelationshipRuleManager mTemporalRelationshipRuleManager;
-  
-  /** */
-  private NodeEqualityRuleManager mNodeEqualityRuleManager;
+    /** */
+    private TemporalRelationshipRuleManager temporalRelationshipRuleManager;
 
-  /** */
-  private TaskTreeBuilder mTaskTreeBuilder;
+    /** */
+    private NodeEqualityRuleManager nodeEqualityRuleManager;
 
-  /** */
-  private TaskTreeNodeFactory mTaskTreeNodeFactory;
+    /** */
+    private ITaskTreeBuilder taskTreeBuilder;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public static TemporalRelationshipRuleManager getTemporalRelationshipRuleManager()
-  {
-    return getInstance().mTemporalRelationshipRuleManager;
-  }
+    /** */
+    private ITaskTreeNodeFactory taskTreeNodeFactory;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public static NodeEqualityRuleManager getNodeEqualityRuleManager()
-  {
-    return getInstance().mNodeEqualityRuleManager;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public static TemporalRelationshipRuleManager getTemporalRelationshipRuleManager() {
+        return getInstance().temporalRelationshipRuleManager;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public static TaskTreeBuilder getDefaultTaskTreeBuilder()
-  {
-    return getInstance().mTaskTreeBuilder;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public static NodeEqualityRuleManager getNodeEqualityRuleManager() {
+        return getInstance().nodeEqualityRuleManager;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public static TaskTreeNodeFactory getDefaultTaskTreeNodeFactory()
-  {
-    return getInstance().mTaskTreeNodeFactory;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public static ITaskTreeBuilder getDefaultTaskTreeBuilder() {
+        return getInstance().taskTreeBuilder;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public static synchronized void clearInstance()
-  {
-    sInstance = null;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public static ITaskTreeNodeFactory getDefaultTaskTreeNodeFactory() {
+        return getInstance().taskTreeNodeFactory;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private static synchronized ComponentManager getInstance()
-  {
-    if (sInstance == null)
-    {
-      sInstance = new ComponentManager();
-      sInstance.init();
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public static synchronized void clearInstance() {
+        instance = null;
     }
-    return sInstance;
-  }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void init()
-  {
-    mNodeEqualityRuleManager = new NodeEqualityRuleManager();
-    mNodeEqualityRuleManager.init();
-    
-    mTemporalRelationshipRuleManager =
-      new TemporalRelationshipRuleManager(mNodeEqualityRuleManager);
-    mTemporalRelationshipRuleManager.init();
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    private static synchronized ComponentManager getInstance() {
+        if (instance == null) {
+            instance = new ComponentManager();
+            instance.init();
+        }
+        return instance;
+    }
 
-    mTaskTreeBuilder = new TaskTreeBuilderImpl();
-    mTaskTreeNodeFactory = new TaskTreeNodeFactoryImpl();
-  }
+    /**
+     * TODO: comment
+     * 
+     */
+    private void init() {
+        nodeEqualityRuleManager = new NodeEqualityRuleManager();
+        nodeEqualityRuleManager.init();
+
+        temporalRelationshipRuleManager =
+            new TemporalRelationshipRuleManager(nodeEqualityRuleManager);
+        temporalRelationshipRuleManager.init();
+
+        taskTreeBuilder = new TaskTreeBuilder();
+        taskTreeNodeFactory = new TaskTreeNodeFactory();
+    }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManager.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManager.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManager.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TaskTreeManager.java,v $
 // Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:14:21 $
@@ -5,265 +4,130 @@
 // Creation  : 2011 by Patrick
 // Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
 
 package de.ugoe.cs.quest.tasktrees.manager;
 
-import java.util.Observable;
-import java.util.Observer;
 import java.util.logging.Logger;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.InteractionEvent;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyInteraction;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyboardFocusChange;
-import de.ugoe.cs.quest.eventcore.userinteraction.UserInteractionProvider;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTree;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
+import de.ugoe.cs.quest.eventcore.Event;
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.gui.KeyInteraction;
+import de.ugoe.cs.quest.eventcore.gui.KeyboardFocusChange;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
- *
+ * 
  * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
+ * @author 2011, last modified by $Author: $
  */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeManager implements Observer
-{
-  /** */
-  private static final int MAX_INTERACTIONS_TILL_RULE_APPLICATION = 100;
+public class TaskTreeManager {
+    
+    /** */
+    private static final int MAX_EVENTS_TILL_RULE_APPLICATION = 100;
 
-  /** */
-  private static Logger LOG = Logger.getLogger(TaskTreeManager.class.getName());
-  
-  /** */
-  private TaskTreeBuilder mTaskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
-  
-  /** */
-  private TaskTreeNodeFactory mTaskTreeNodeFactory =
-    ComponentManager.getDefaultTaskTreeNodeFactory();
-  
-  /** */
-  private int mInteractionsTillRuleApplication = MAX_INTERACTIONS_TILL_RULE_APPLICATION;
-  
-  /** */
-  private Sequence mRootSequence;
-  
-  /** */
-  private GUIElement mCurrentKeyboardFocusGUIElement;
+    /** */
+    private static Logger LOG = Logger.getLogger(TaskTreeManager.class.getName());
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTreeManager()
-  {
-    mRootSequence = mTaskTreeNodeFactory.createNewSequence();
-  }
+    /** */
+    private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.util.Observer#update(java.util.Observable, java.lang.Object)
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void update(Observable observable, Object event)
-  {
-    if ((observable instanceof UserInteractionProvider) &&
-        (event instanceof InteractionEvent))
+    /** */
+    private ITaskTreeNodeFactory taskTreeNodeFactory =
+        ComponentManager.getDefaultTaskTreeNodeFactory();
+
+    /** */
+    private int eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
+
+    /** */
+    private ISequence rootSequence;
+
+    /** */
+    private IEventTarget currentKeyboardFocusGUIElement;
+
+    /**
+     * TODO: comment
+     * 
+     */
+    public TaskTreeManager() {
+        rootSequence = taskTreeNodeFactory.createNewSequence();
+    }
+
+    /**
+     *
+     */
+    public void handleNewEvent(Event event) {
+        if (event.getType() instanceof KeyInteraction) {
+            if (currentKeyboardFocusGUIElement == null) {
+                currentKeyboardFocusGUIElement = event.getTarget();
+            }
+
+            addEventTask
+              (taskTreeNodeFactory.createNewEventTask
+                 (event.getType(), currentKeyboardFocusGUIElement));
+        }
+        else {
+            addEventTask
+              (taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
+        }
+    }
+
+    /**
+     *
+     */
+    public synchronized ITaskTree getTaskTree() {
+        LOG.info("applying rules temporal relationship generation rules");
+
+        ISequence currentRootSequence = rootSequence.clone();
+        ComponentManager.getTemporalRelationshipRuleManager().applyRules
+          (currentRootSequence, taskTreeBuilder, taskTreeNodeFactory, true);
+
+        return taskTreeNodeFactory.createTaskTree(currentRootSequence);
+    }
+
+    /**
+     * @param task
+     */
+    private synchronized void addEventTask(IEventTask task) {
+        handleEventTask(task);
+    }
+
+    /**
+     * adds the task to the current or the new sequence. The decision depends on the type of task.
+     * If the task finishes the current sequence, the sequence is marked as finished If the task
+     * does not start a new sequence, it is added to the current sequence, before it is marked s
+     * finished. Otherwise it is added to a new sequence.
+     */
+    private void handleEventTask(IEventTask eventTask) {
+        if (eventTask.getEventType() instanceof KeyboardFocusChange) {
+            currentKeyboardFocusGUIElement = eventTask.getEventTarget();
+        }
+        else {
+            LOG.info("handling event task \"" + eventTask + "\"");
+            addTaskToSequence(eventTask, currentKeyboardFocusGUIElement);
+        }
+    }
+
+    /**
+     *
+     */
+    private void addTaskToSequence(ITaskTreeNode task, IEventTarget currentKeyboardFocusGUIElement)
     {
-      handleNewInteractionEvent((InteractionEvent) event);
+        taskTreeBuilder.addChild(rootSequence, task);
+
+        if (--eventsTillRuleApplication == 0) {
+            eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
+
+            LOG.info("applying rules temporal relationship generation rules");
+            ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence,
+                                                                             taskTreeBuilder,
+                                                                             taskTreeNodeFactory,
+                                                                             false);
+        }
     }
-    else
-    {
-      LOG.warning("could not handle notification of " + observable + " regarding " + event);
-    }
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void handleNewInteractionEvent(InteractionEvent event)
-  {
-    if (event.getInteraction() instanceof KeyInteraction)
-    {
-      if (mCurrentKeyboardFocusGUIElement == null)
-      {
-        mCurrentKeyboardFocusGUIElement = event.getGUIElement();
-      }
-      
-      addInteractionTask(mTaskTreeNodeFactory.createNewInteractionTask
-                           (mCurrentKeyboardFocusGUIElement, event.getInteraction()));
-    }
-    else
-    {
-      addInteractionTask(mTaskTreeNodeFactory.createNewInteractionTask
-                           (event.getGUIElement(), event.getInteraction()));
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public synchronized TaskTree getTaskTree()
-  {
-    LOG.info("applying rules temporal relationship generation rules");
-    
-    Sequence rootSequence = mRootSequence.clone();
-    ComponentManager.getTemporalRelationshipRuleManager().applyRules
-      (rootSequence, mTaskTreeBuilder, mTaskTreeNodeFactory, true);
-
-    return mTaskTreeNodeFactory.createTaskTree(rootSequence);
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param task
-   */
-  //-----------------------------------------------------------------------------------------------
-  private synchronized void addInteractionTask(InteractionTask task)
-  {
-    handleInteractionTask(task);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * adds the task to the current or the new sequence. The decision depends on the type
-   * of task. If the task finishes the current sequence, the sequence is marked as finished
-   * If the task does not start a new sequence, it is added to the current sequence, before it
-   * is marked s finished. Otherwise it is added to a new sequence.
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void handleInteractionTask(InteractionTask interactionTask)
-  {
-    if (interactionTask.getInteraction() instanceof KeyboardFocusChange)
-    {
-      mCurrentKeyboardFocusGUIElement = interactionTask.getGUIElement();
-    }
-    else
-    {
-      LOG.info("handling interaction task \"" + interactionTask + "\"");
-      addTaskToSequence(interactionTask, mCurrentKeyboardFocusGUIElement);
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param interactionTask
-   */
-  //-----------------------------------------------------------------------------------------------
-  /*private boolean handleAndCorrectFocusChanges(InteractionTask interactionTask)
-  {
-    GUIElement newGUIElement = interactionTask.getGUIElement();
-    
-    // find the identical parent element
-    GUIElement identicalParentGUIElement = null;
-    
-    while ((identicalParentGUIElement == null) && (newGUIElement != null))
-    {
-      GUIElement currentGUIElement = mCurrentGUIElement;
-      
-      while ((identicalParentGUIElement == null) && (currentGUIElement != null))
-      {
-        if (newGUIElement.equals(currentGUIElement))
-        {
-          identicalParentGUIElement = newGUIElement;
-        }
-        else
-        {
-          currentGUIElement = currentGUIElement.getParent();
-        }
-      }
-      
-      newGUIElement = newGUIElement.getParent();
-    }
-    
-    // now create focus lost interactions for each GUI element, that is not common with the
-    // hierarchy of the new GUI element
-    GUIElement currentGUIElement = mCurrentGUIElement;
-    
-    List<InteractionTask> tasksToBeAdded = new ArrayList<InteractionTask>();
-    
-    while ((currentGUIElement != null) &&
-           ((identicalParentGUIElement == null) ||
-            (!currentGUIElement.equals(identicalParentGUIElement))))
-    {
-      tasksToBeAdded.add
-        (mTaskTreeNodeFactory.createNewInteractionTask(currentGUIElement, new FocusLost()));
-      currentGUIElement = currentGUIElement.getParent();
-    }
-    
-    // now create focus received interactions for each GUI element, that is not common with
-    // with the old one. Ensure, that if the current interaction is a focus reception, that
-    // it is used instead of a generated one
-    newGUIElement = interactionTask.getGUIElement();
-    
-    int index = tasksToBeAdded.size();
-    while ((newGUIElement != null) &&
-           ((identicalParentGUIElement == null) ||
-            (!newGUIElement.equals(identicalParentGUIElement))))
-    {
-      tasksToBeAdded.add(index, mTaskTreeNodeFactory.createNewInteractionTask
-                           (newGUIElement, new FocusReceived()));
-      newGUIElement = newGUIElement.getParent();
-    }
-    
-    // this part ensures, that the original focus reception, if any, is preserved as is.
-    boolean taskAlreadyHandled = false;
-    if (interactionTask.getInteraction() instanceof FocusReceived)
-    {
-      if (tasksToBeAdded.size() > 0)
-      {
-        tasksToBeAdded.set(tasksToBeAdded.size() - 1, interactionTask);
-      }
-      //else
-      //{
-        // in this case, we already have focus on the element to which the focus shall be changed.
-        // therefore, we discard the new focus change on the same element.
-      //}
-      
-      taskAlreadyHandled = true;
-    }
-    
-    // now that all tasks are determined, add them to the sequence
-    for (InteractionTask task : tasksToBeAdded)
-    {
-      addTaskToSequence(task);
-    }
-    
-    mCurrentGUIElement = interactionTask.getGUIElement();
-    
-    return taskAlreadyHandled;
-  }*/
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void addTaskToSequence(TaskTreeNode task, GUIElement currentKeyboardFocusGUIElement)
-  {
-    mTaskTreeBuilder.addChild(mRootSequence, task);
-    
-    if (--mInteractionsTillRuleApplication == 0)
-    {
-      mInteractionsTillRuleApplication = MAX_INTERACTIONS_TILL_RULE_APPLICATION;
-      
-      LOG.info("applying rules temporal relationship generation rules");
-      ComponentManager.getTemporalRelationshipRuleManager().applyRules
-        (mRootSequence, mTaskTreeBuilder, mTaskTreeNodeFactory, false);
-    }
-  }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/IterationComparisonRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/IterationComparisonRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/IterationComparisonRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: NodeIdentityRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,129 +4,165 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * This class is capable of comparing Iterations. Iterations equal at distinct levels
+ * in distinct situations. The following table shows the results of the comparison for the
+ * specific situations (the parameters are commutative). In any other situation, the comparison
+ * returns <code>NodeEquality.UNEQUAL</code>:
+ * </p>
+ * 
+ * <table border="1">
+ *   <tr>
+ *     <th>iteration 1</th>
+ *     <th>iteration 2</th>
+ *     <th>comparison result</th>
+ *   </tr>
+ *   <tr>
+ *     <td>any iteration</td>
+ *     <td>any iteration with a child that is lexically equal to the child of iteration 1</td>
+ *     <td><code>NodeEquality.LEXICALLY_EQUAL</code></td>
+ *   </tr>
+ *   <tr>
+ *     <td>any iteration</td>
+ *     <td>any iteration with a child that is syntactically equal to the child of iteration 1</td>
+ *     <td><code>NodeEquality.SYNTACTICALLY_EQUAL</code></td>
+ *   </tr>
+ *   <tr>
+ *     <td>any iteration</td>
+ *     <td>any iteration with a child that is semantically equal to the child of iteration 1</td>
+ *     <td><code>NodeEquality.SEMANTICALLY_EQUAL</code></td>
+ *   </tr>
+ *   <tr>
+ *     <td>an iteration with a selection of syntactically equal children</td>
+ *     <td>an iteration with a child that is syntactically equal to the children of the child
+ *     selection of iteration 1</td>
+ *     <td><code>NodeEquality.SYNTACTICALLY_EQUAL</code></td>
+ *   </tr>
+ *   <tr>
+ *     <td>an iteration with a selection of semantically equal children</td>
+ *     <td>an iteration with a child that is semantically equal to the children of the child
+ *     selection of iteration 1</td>
+ *     <td><code>NodeEquality.SEMANTICALLY_EQUAL</code></td>
+ *   </tr>
+ * </table>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class IterationComparisonRule implements NodeComparisonRule
-{
-  /** */
-  private NodeEqualityRuleManager mRuleManager;
+public class IterationComparisonRule implements NodeComparisonRule {
+    
+    /** the rule manager for internally comparing task tree nodes */
+    private NodeEqualityRuleManager mRuleManager;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  IterationComparisonRule(NodeEqualityRuleManager ruleManager)
-  {
-    super();
-    mRuleManager = ruleManager;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public NodeEquality compare(TaskTreeNode node1, TaskTreeNode node2)
-  {
-    if ((!(node1 instanceof Iteration)) || (!(node2 instanceof Iteration)))
-    {
-      return null;
-    }
-    
-    // if both iterations do not have children, they are equal although this doesn't make sense
-    if ((node1.getChildren().size() == 0) && (node2.getChildren().size() == 0))
-    {
-      return new NodesIdentical();
-    }
-    
-    TaskTreeNode child1 = node1.getChildren().get(0);
-    TaskTreeNode child2 = node2.getChildren().get(0);
-    
-    // iterations may have 3 different structures.
-    //   1. they have one child, which is the iterated one
-    //   2. they have a sequence of children, which is iterated
-    //   3. they have a selection of different iterated variants (usually the variants are
-    //      semantically equal)
-    //
-    // the permutations of the three variants in combination must be checked
-    
-    // check if both nodes are the same variants of iterations and if their children are equal.
-    // This condition matches, if both iterations are the same variants of iteration. I.e. three
-    // combinations of the permutation are handled herewith.
-    NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);
-      
-    if (nodeEquality.getStructuralEquality() || nodeEquality.getSemanticalEquality())
-    {
-      return nodeEquality;
-    }
-    
-    // compare one iteration with a single node as a child and another one with a selection of
-    // semantically equal nodes
-    if (selectionChildrenSemanticallyEqualNode(child1, child2))
-    {
-      return new NodesSemanticallyEqual();
+    /**
+     * <p>
+     * simple constructor to provide the rule with the node equality rule manager to be able
+     * to perform comparisons of the children of provided task tree nodes
+     * </p>
+     * 
+     * @param ruleManager the rule manager for comparing task tree nodes
+     */
+    IterationComparisonRule(NodeEqualityRuleManager ruleManager) {
+        super();
+        mRuleManager = ruleManager;
     }
 
-    // all other combinations (i.e. sequence with single child and sequence with selection)
-    // can not match
-    return null;
-  }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
+     */
+    @Override
+    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) {
+        if ((!(node1 instanceof IIteration)) || (!(node2 instanceof IIteration))) {
+            return null;
+        }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param taskTreeNode
-   * @param taskTreeNode2
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private boolean selectionChildrenSemanticallyEqualNode(TaskTreeNode taskTreeNode,
-                                                         TaskTreeNode taskTreeNode2)
-  {
-    Selection selection = null;
-    TaskTreeNode node = null;
-    if (taskTreeNode instanceof Selection)
+        // if both iterations do not have children, they are equal although this doesn't make sense
+        if ((node1.getChildren().size() == 0) && (node2.getChildren().size() == 0)) {
+            return NodeEquality.IDENTICAL;
+        }
+
+        ITaskTreeNode child1 = node1.getChildren().get(0);
+        ITaskTreeNode child2 = node2.getChildren().get(0);
+
+        // iterations may have 3 different structures.
+        // 1. they have one child, which is the iterated one
+        // 2. they have a sequence of children, which is iterated
+        // 3. they have a selection of different iterated variants (usually the variants are
+        // semantically equal)
+        //
+        // the permutations of the three variants in combination must be checked
+
+        // check if both nodes are the same variants of iterations and if their children are equal.
+        // This condition matches, if both iterations are the same variants of iteration. I.e. three
+        // combinations of the permutation are handled herewith.
+        NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);
+
+        if (nodeEquality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)) {
+            return nodeEquality;
+        }
+
+        // compare one iteration with a single node as a child and another one with a selection of
+        // semantically equal nodes
+        return selectionChildrenSemanticallyEqualNode(child1, child2);
+        
+        // all other combinations (i.e. sequence with single child and sequence with selection)
+        // can not match
+    }
+
+    /**
+     * <p>
+     * compares two task tree nodes. One of them must be a selection of at least semantically
+     * equal children. The other one can be any task tree node. The method returns a node equality
+     * that is not <code>NodeEquality.UNEQUAL</code> if the other node is at least semantically
+     * equal to the children of the selection. It returns more concrete equalities, if the
+     * equality between the other node and the children of the selection is more concrete.
+     * </p> 
+     * 
+     * @param taskTreeNode  the first task tree node to compare
+     * @param taskTreeNode2 the second task tree node to compare
+     * 
+     * @return as described
+     */
+    private NodeEquality selectionChildrenSemanticallyEqualNode(ITaskTreeNode taskTreeNode,
+                                                                ITaskTreeNode taskTreeNode2)
     {
-      selection = (Selection) taskTreeNode;
-      node = taskTreeNode2;
+        ISelection selection = null;
+        ITaskTreeNode node = null;
+        if (taskTreeNode instanceof ISelection) {
+            selection = (ISelection) taskTreeNode;
+            node = taskTreeNode2;
+        }
+        else if (taskTreeNode2 instanceof ISelection) {
+            selection = (ISelection) taskTreeNode2;
+            node = taskTreeNode;
+        }
+        else {
+            return NodeEquality.UNEQUAL;
+        }
+
+        NodeEquality lessConcreteEqualityForAllComparisons = NodeEquality.IDENTICAL;
+
+        for (ITaskTreeNode child : selection.getChildren()) {
+            NodeEquality nodeEquality = mRuleManager.applyRules(node, child);
+
+            if (!nodeEquality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)) {
+                return NodeEquality.UNEQUAL;
+            }
+            else if (!lessConcreteEqualityForAllComparisons.isAtLeast(nodeEquality)) {
+                lessConcreteEqualityForAllComparisons = nodeEquality;
+            }
+        }
+
+        return lessConcreteEqualityForAllComparisons;
     }
-    else if (taskTreeNode2 instanceof Selection)
-    {
-      selection = (Selection) taskTreeNode2;
-      node = taskTreeNode;
-    }
-    else
-    {
-      return false;
-    }
-    
-    for (TaskTreeNode child : selection.getChildren())
-    {
-      NodeEquality nodeEquality = mRuleManager.applyRules(node, child);
-          
-      if (!nodeEquality.getStructuralEquality() && !nodeEquality.getSemanticalEquality())
-      {
-        return false;
-      }
-    }
-    
-    return true;
-  }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeComparisonRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeComparisonRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeComparisonRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: EqualityRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,28 +4,33 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * A node comparison rule is used by the {@link NodeEqualityRuleManager} to compare task tree
+ * nodes with each other. It provides one method to be called for a comparison.
+ * </p>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public interface NodeComparisonRule
-{
+public interface NodeComparisonRule {
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * compares two nodes with each other. The result of the method is either a node equality or
-   * null. If it is null, it means, that the rule is not able to correctly compare the two
-   * given nodes
-   */
-  //-----------------------------------------------------------------------------------------------
-  public NodeEquality compare(TaskTreeNode node1, TaskTreeNode node2);
-  
+    /**
+     * <p>
+     * compares two nodes with each other. The result of the method is either a node equality or
+     * null. If it is null, it means, that the rule is not able to correctly compare the two given
+     * nodes
+     * </p>
+     * 
+     * @param node1 the first task tree node to compare
+     * @param node2 the second task tree node to compare
+     * 
+     * @return as described
+     */
+    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2);
+
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEquality.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEquality.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEquality.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: NodeEquality.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,35 +4,95 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * A node equality denotes, how equal two task tree nodes are. There are different equality levels
+ * which are similar to the usual design levels of GUI design. These levels are
+ * <ul>
+ *   <li>conceptual design: defines the concepts to be edited using a GUI</li>
+ *   <li>semantical design: defines the possible functions for editing the concepts</li>
+ *   <li>syntactical design: defines, which steps are needed to execute the functions</li>
+ *   <li>lexical design: defines on the key stroke level, how the steps for executing a function
+ *       can be performed</li>
+ * </ul>
+ * It is not possible to compare two task nodes conceptually. But the other design levels can be
+ * identified and compared.
+ * </p>
+ * <p>
+ * Nodes can be identical. This is the case if in the java virtual machine, their comparison
+ * using the <code>==</code> operator or the equals method return true.
+ * </p>
+ * <p>
+ * Nodes are lexically equal, if they represent the same events on a key stroke level to be
+ * carried out to execute the task. Identical nodes are also syntactically equal.
+ * </p>
+ * <p>
+ * Nodes are syntactically equal, if they differ in their events on key stroke level, but the
+ * syntactical result is the same. For example, entering the text "hello" into a text field can
+ * be done by entering the letters in their correct order, but also by copying the text into the
+ * text field. The syntactical result is the same: The text hello was entered. But the tasks
+ * lexically differ because the events on key stroke level are different. On the other hand,
+ * lexically equal nodes are also syntactically equal.  
+ * </p>
+ * <p>
+ * Task tree nodes are semantically equal, if they execute the same function for editing the
+ * concepts. An example are a click on a button and a short cut, both executing the same function.
+ * These task tree nodes are syntactically and, therefore, also lexically different, but
+ * semantically equal. Syntactically equal task tree nodes are always also semantically equal.
+ * </p>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public interface NodeEquality
-{
+public enum NodeEquality {
+    IDENTICAL,
+    LEXICALLY_EQUAL,
+    SYNTACTICALLY_EQUAL,
+    SEMANTICALLY_EQUAL,
+    UNEQUAL;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public boolean getStructuralEquality();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public boolean getSemanticalEquality();
-
+    /**
+     * <p>
+     * Checks for the current node equality, if it is at least identical to the
+     * provided one or even more concrete. As an example, the node equality identical also
+     * indicates, that the nodes are e.g. lexically, syntactically and semantically equal.
+     * Therefore, the method called on <code>IDENTICAL</code> with <code>SEMANTICALLY_EQUAL</code>
+     * as parameter will return true. If this method is called on <code>SYNTACTICALLY_EQUAL</code>
+     * with the parameter <code>IDENTICAL</code> instead, it returns false;
+     * </p>
+     *
+     * @param nodeEquality the node equality to compare with.
+     * 
+     * @return as described
+     */
+    public boolean isAtLeast(NodeEquality nodeEquality)
+    {
+        switch (nodeEquality) {
+            case IDENTICAL:
+                return
+                    (this == IDENTICAL);
+            case LEXICALLY_EQUAL:
+                return
+                    (this == IDENTICAL) ||
+                    (this == LEXICALLY_EQUAL);
+            case SYNTACTICALLY_EQUAL:
+                return
+                    (this == IDENTICAL) ||
+                    (this == LEXICALLY_EQUAL) ||
+                    (this == SYNTACTICALLY_EQUAL);
+            case SEMANTICALLY_EQUAL:
+                return
+                    (this == IDENTICAL) ||
+                    (this == LEXICALLY_EQUAL) ||
+                    (this == SYNTACTICALLY_EQUAL) ||
+                    (this == SEMANTICALLY_EQUAL);
+            case UNEQUAL:
+                return
+                    (this == UNEQUAL);
+            default :
+                return false;
+        }
+    }
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEqualityRuleManager.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEqualityRuleManager.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeEqualityRuleManager.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: NodeEqualityRuleManager.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,73 +4,86 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
 import java.util.ArrayList;
 import java.util.List;
-//import java.util.logging.Logger;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * The node equality rule manager is capable of comparing task tree nodes based on its internal list
+ * of comparison rules. The current list of rules contains the {@link NodeIdentityRule}, the
+ * {@link IterationComparisonRule}, the {@link SequenceComparisonRule}, and
+ * {@link SelectionComparisonRule}. These rules are asked for comparing the two provided task tree
+ * nodes in the mentioned order. If a rule returns a node equality other than null, this equality is
+ * returned. Otherwise the next rule is asked.
+ * </p>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class NodeEqualityRuleManager
-{
+public class NodeEqualityRuleManager {
 
-  /** */
-  //private static Logger LOG = Logger.getLogger(NodeEqualityRuleManager.class.getName());
+    /** */
+    // private static Logger LOG = Logger.getLogger(NodeEqualityRuleManager.class.getName());
 
-  /** */
-  private List<NodeComparisonRule> mRuleIndex = new ArrayList<NodeComparisonRule>();
+    /** */
+    private List<NodeComparisonRule> mRuleIndex = null;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void init()
-  {
-    mRuleIndex.add(new NodeIdentityRule());
-    mRuleIndex.add(new IterationComparisonRule(this));
-    mRuleIndex.add(new SequenceComparisonRule(this));
-    mRuleIndex.add(new SelectionComparisonRule(this));
-  }
+    /**
+     * <p>
+     * initializes the node equality rule manager by filling the internal list of comparison rules.
+     * This method must be called before any other method is called on the rule manager.
+     * </p>
+     */
+    public void init() {
+        mRuleIndex = new ArrayList<NodeComparisonRule>();
+        mRuleIndex.add(new NodeIdentityRule());
+        mRuleIndex.add(new IterationComparisonRule(this));
+        mRuleIndex.add(new SequenceComparisonRule(this));
+        mRuleIndex.add(new SelectionComparisonRule(this));
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param node1
-   * @param node2
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public NodeEquality applyRules(TaskTreeNode node1, TaskTreeNode node2)
-  {
-    //LOG.info("checking for equality of " + node1 + " and " + node2);
-    NodeEquality nodeEquality = null;
-      
-    for (NodeComparisonRule rule : mRuleIndex)
+    /**
+     * <p>
+     * this method performs a comparison of the two provided task tree nodes. It iterates its
+     * internal comparison rules. If the first rule returns a node equality other than null,
+     * this equality is returned. Otherwise the next rule is tried. If no rule returns an equality
+     * <code>NodeEquality.UNEQUAL</code> is returned.
+     * </p>
+     * 
+     * @param node1 the first task tree node to be compared
+     * @param node2 the second task tree node to be compared
+     * 
+     * @return as described
+     * 
+     * @throws IllegalStateException in the case, the {@link #init()} method was not called on the
+     *                               manager before a call to this method.
+     */
+    public NodeEquality applyRules(ITaskTreeNode node1, ITaskTreeNode node2)
+        throws IllegalStateException
     {
-      nodeEquality = rule.compare(node1, node2);
-      
-      if (nodeEquality != null)
-      {
-        //LOG.warning("used rule " + rule + " for equality check");
-        return nodeEquality;
-      }
+        if (mRuleIndex == null) {
+            throw new IllegalStateException("not initialized");
+        }
+        
+        // LOG.info("checking for equality of " + node1 + " and " + node2);
+        NodeEquality nodeEquality = null;
+
+        for (NodeComparisonRule rule : mRuleIndex) {
+            nodeEquality = rule.compare(node1, node2);
+
+            if (nodeEquality != null) {
+                // LOG.warning("used rule " + rule + " for equality check");
+                return nodeEquality;
+            }
+        }
+
+        // LOG.warning("no rule could be applied --> handling nodes as unequal");
+
+        return NodeEquality.UNEQUAL;
     }
-    
-    //LOG.warning("no rule could be applied --> handling nodes as unequal");
-    
-    return new NodesUnequal();
-  }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeIdentityRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeIdentityRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodeIdentityRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: NodeIdentityRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,41 +4,35 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * This comparison rule returns <code>NodeEquality.IDENTICAL</code> if the comparison of the two
+ * task tree nodes using the <code>==</code> operator or the <code>equals</code> method return true.
+ * Else it returns null to denote, that it can not compare the nodes.
+ * </p>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class NodeIdentityRule implements NodeComparisonRule
-{
+public class NodeIdentityRule implements NodeComparisonRule {
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public NodeEquality compare(TaskTreeNode node1, TaskTreeNode node2)
-  {
-    if (node1 == node2)
-    {
-      return new NodesIdentical();
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
+     */
+    @Override
+    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) {
+        if ((node1 == node2) || ((node1 != null) && (node1.equals(node2)))) {
+            return NodeEquality.IDENTICAL;
+        }
+        else {
+            return null;
+        }
     }
-    else if ((node1 != null) && (node1.equals(node2)))
-    {
-      return new NodesEqual();
-    }
-    else
-    {
-      return null;
-    }
-  }
 
 }
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesEqual.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesEqual.java	(revision 556)
+++ 	(revision )
@@ -1,43 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: NodesEqual.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.nodeequality;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class NodesEqual implements NodeEquality
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getStructuralEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getStructuralEquality()
-  {
-    return true;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getSemanticalEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getSemanticalEquality()
-  {
-    return true;
-  }
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesIdentical.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesIdentical.java	(revision 556)
+++ 	(revision )
@@ -1,43 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: NodesIdentical.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.nodeequality;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class NodesIdentical implements NodeEquality
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getStructuralEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getStructuralEquality()
-  {
-    return true;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getSemanticalEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getSemanticalEquality()
-  {
-    return true;
-  }
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesSemanticallyEqual.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesSemanticallyEqual.java	(revision 556)
+++ 	(revision )
@@ -1,43 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: NodesEqual.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.nodeequality;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class NodesSemanticallyEqual implements NodeEquality
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getStructuralEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getStructuralEquality()
-  {
-    return false;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getSemanticalEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getSemanticalEquality()
-  {
-    return true;
-  }
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesUnequal.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/NodesUnequal.java	(revision 556)
+++ 	(revision )
@@ -1,43 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: NodeUnequality.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.nodeequality;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class NodesUnequal implements NodeEquality
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getStructuralEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getStructuralEquality()
-  {
-    return false;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEquality#getSemanticalEquality()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean getSemanticalEquality()
-  {
-    return false;
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/SelectionComparisonRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/SelectionComparisonRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/SelectionComparisonRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: NodeIdentityRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,92 +4,91 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * this node comparison rule is capable of comparing selections. If both selections do not have
+ * children, they are treated as lexically equal. If they have the same number of children other
+ * than 0 and all these children are lexically equal, then the selections are lexically equal.
+ * They are syntactically equal, if each child of both selections is syntactically equal to any
+ * other child. The rule can not compare semantical equality if the nodes are not at least
+ * syntactically equal and returns null, if it can not decide this.
+ * </p>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class SelectionComparisonRule implements NodeComparisonRule
-{
+public class SelectionComparisonRule implements NodeComparisonRule {
 
-  /** */
-  private NodeEqualityRuleManager mRuleManager;
+    /** the rule manager for internally comparing task tree nodes */
+    private NodeEqualityRuleManager mRuleManager;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  SelectionComparisonRule(NodeEqualityRuleManager ruleManager)
-  {
-    super();
-    mRuleManager = ruleManager;
-  }
+    /**
+     * <p>
+     * simple constructor to provide the rule with the node equality rule manager to be able
+     * to perform comparisons of the children of provided task tree nodes
+     * </p>
+     * 
+     * @param ruleManager the rule manager for comparing task tree nodes
+     */
+    SelectionComparisonRule(NodeEqualityRuleManager ruleManager) {
+        super();
+        mRuleManager = ruleManager;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public NodeEquality compare(TaskTreeNode node1, TaskTreeNode node2)
-  {
-    if ((!(node1 instanceof Sequence)) || (!(node2 instanceof Sequence)))
-    {
-      return null;
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
+     */
+    @Override
+    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) {
+        if ((!(node1 instanceof ISelection)) || (!(node2 instanceof ISelection))) {
+            return null;
+        }
+
+        // if both sequences do not have children, they are equal although this doesn't make sense
+        if ((node1.getChildren().size() == 0) && (node2.getChildren().size() == 0)) {
+            return NodeEquality.LEXICALLY_EQUAL;
+        }
+
+        // Selections are syntactically equal, if they have children, which are all syntactically
+        // equal.
+        // They are lexically equals, if they have the same number and order of lexically equal
+        // children
+        boolean lexicallyEqual = node1.getChildren().size() == node2.getChildren().size();
+
+        for (int i = 0; i < node1.getChildren().size(); i++) {
+            ITaskTreeNode child1 = node1.getChildren().get(i);
+            boolean foundLexicallyEqualChild = false;
+
+            for (int j = 0; j < node2.getChildren().size(); j++) {
+                ITaskTreeNode child2 = node2.getChildren().get(j);
+
+                NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);
+
+                if (!nodeEquality.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL)) {
+                    return null;
+                }
+                else if (nodeEquality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)) {
+                    foundLexicallyEqualChild = true;
+                }
+            }
+
+            // if we compare two children at the same position and if they are lexically equal
+            // then it can be further expected, that the selections are lexically equal
+            lexicallyEqual &= foundLexicallyEqualChild;
+        }
+
+        if (lexicallyEqual) {
+            return NodeEquality.LEXICALLY_EQUAL;
+        }
+        else {
+            return NodeEquality.SYNTACTICALLY_EQUAL;
+        }
     }
-    
-    // if both sequences do not have children, they are equal although this doesn't make sense
-    if ((node1.getChildren().size() == 0) && (node2.getChildren().size() == 0))
-    {
-      return new NodesEqual();
-    }
-    
-    // Selections are semantically equal, if they have children, which are all semantically equal.
-    // they are structurally equals, if they have the same number and order of structurally equal
-    // children
-    boolean structurallyEqual =
-      node1.getChildren().size() == node2.getChildren().size();
-    
-    for (int i = 0; i < node1.getChildren().size(); i++)
-    {
-      TaskTreeNode child1 = node1.getChildren().get(i);
-      
-      for (int j = 0; j < node2.getChildren().size(); j++)
-      {
-        TaskTreeNode child2 = node2.getChildren().get(j);
-      
-        NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);
-        
-        if (!nodeEquality.getSemanticalEquality())
-        {
-          return null;
-        }
-        else if (structurallyEqual && (i == j))
-        {
-          // if we compare two children at the same position and if they are structurally equal
-          // then it can be further expected, that the selections are structurally equal
-          structurallyEqual &= nodeEquality.getStructuralEquality();
-        }
-      }
-    }
-    
-    if (structurallyEqual)
-    {
-      return new NodesEqual();
-    }
-    else
-    {
-      return new NodesSemanticallyEqual();
-    }
-  }
-
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/SequenceComparisonRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/SequenceComparisonRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/nodeequality/SequenceComparisonRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: NodeIdentityRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,90 +4,73 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.nodeequality;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
- * TODO comment
+ * <p>
+ * This rule is capable of comparing sequences. If both sequences do not have children, they are
+ * treated as lexically equal. Sequences are lexically equal, if they have the same number and
+ * order of lexically equal children. The rule can not decide, if two sequences are syntactically
+ * or semantically equal.
+ * </p>
  * 
  * @version $Revision: $ $Date: 19.02.2012$
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class SequenceComparisonRule implements NodeComparisonRule
-{
+public class SequenceComparisonRule implements NodeComparisonRule {
 
+    /** the rule manager for internally comparing task tree nodes */
+    private NodeEqualityRuleManager mRuleManager;
 
-  /** */
-  private NodeEqualityRuleManager mRuleManager;
+    /**
+     * <p>
+     * simple constructor to provide the rule with the node equality rule manager to be able
+     * to perform comparisons of the children of provided task tree nodes
+     * </p>
+     * 
+     * @param ruleManager the rule manager for comparing task tree nodes
+     */
+    SequenceComparisonRule(NodeEqualityRuleManager ruleManager) {
+        super();
+        mRuleManager = ruleManager;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  SequenceComparisonRule(NodeEqualityRuleManager ruleManager)
-  {
-    super();
-    mRuleManager = ruleManager;
-  }
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
+     */
+    @Override
+    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) {
+        if ((!(node1 instanceof ISequence)) || (!(node2 instanceof ISequence))) {
+            return null;
+        }
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public NodeEquality compare(TaskTreeNode node1, TaskTreeNode node2)
-  {
-    if ((!(node1 instanceof Sequence)) || (!(node2 instanceof Sequence)))
-    {
-      return null;
+        // if both sequences do not have children, they are equal although this doesn't make sense
+        if ((node1.getChildren().size() == 0) && (node2.getChildren().size() == 0)) {
+            return NodeEquality.LEXICALLY_EQUAL;
+        }
+
+        // 
+        if (node1.getChildren().size() != node2.getChildren().size()) {
+            return null;
+        }
+
+        for (int i = 0; i < node1.getChildren().size(); i++) {
+            ITaskTreeNode child1 = node1.getChildren().get(i);
+            ITaskTreeNode child2 = node2.getChildren().get(i);
+
+            NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);
+
+            if (!nodeEquality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)) {
+                return null;
+            }
+        }
+
+        return NodeEquality.LEXICALLY_EQUAL;
     }
-    
-    // if both sequences do not have children, they are equal although this doesn't make sense
-    if ((node1.getChildren().size() == 0) && (node2.getChildren().size() == 0))
-    {
-      return new NodesEqual();
-    }
-    
-    // Sequences are equal, if they have the same number and order of children. If all the
-    // children match structurally, then the sequences are structurally equal. Otherwise, if
-    // at least one pair of children matches only semantically, then the sequences match only
-    // semantically.
-    if (node1.getChildren().size() != node2.getChildren().size())
-    {
-      return null;
-    }
-    
-    boolean structurallyEqual = true;
-    for (int i = 0; i < node1.getChildren().size(); i++)
-    {
-      TaskTreeNode child1 = node1.getChildren().get(i);
-      TaskTreeNode child2 = node2.getChildren().get(i);
-      
-      NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);
-      
-      structurallyEqual &= nodeEquality.getStructuralEquality();
-      
-      if (!structurallyEqual && !nodeEquality.getSemanticalEquality())
-      {
-        return null;
-      }
-    }
-    
-    if (structurallyEqual)
-    {
-      return new NodesEqual();
-    }
-    else
-    {
-      return new NodesSemanticallyEqual();
-    }
-  }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultEventTargetSequenceDetectionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultEventTargetSequenceDetectionRule.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultEventTargetSequenceDetectionRule.java	(revision 557)
@@ -0,0 +1,119 @@
+// Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.temporalrelation;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 18.03.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class DefaultEventTargetSequenceDetectionRule implements TemporalRelationshipRule {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode,
+     * TaskTreeBuilder, TaskTreeNodeFactory)
+     */
+    @Override
+    public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                       ITaskTreeBuilder     builder,
+                                       ITaskTreeNodeFactory nodeFactory,
+                                       boolean              finalize)
+    {
+        if (!(parent instanceof ISequence)) {
+            return null;
+        }
+
+        RuleApplicationResult result = new RuleApplicationResult();
+
+        IEventTarget currentEventTarget = null;
+        int startingIndex = -1;
+
+        int index = 0;
+        while (index < parent.getChildren().size()) {
+            ITaskTreeNode child = parent.getChildren().get(index);
+
+            IEventTarget eventTarget = determineEventTarget(child);
+
+            if ((eventTarget != null) && (!eventTarget.equals(currentEventTarget))) {
+                if (startingIndex < 0) {
+                    startingIndex = index;
+                    currentEventTarget = eventTarget;
+                }
+                else {
+                    handleEventTargetSequence(parent, startingIndex, index - 1, builder,
+                                              nodeFactory, result);
+
+                    return result;
+                }
+            }
+
+            index++;
+        }
+
+        if (startingIndex > -1) {
+            if (finalize && (startingIndex > 0)) {
+                handleEventTargetSequence(parent, startingIndex, parent.getChildren().size() - 1,
+                                          builder, nodeFactory, result);
+            }
+            else {
+                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param child
+     * @return
+     */
+    private IEventTarget determineEventTarget(ITaskTreeNode node) {
+        if (node instanceof IEventTask) {
+            return ((IEventTask) node).getEventTarget();
+        }
+        else {
+            return null;
+        }
+    }
+
+    /**
+     * TODO: comment
+     * 
+     */
+    private void handleEventTargetSequence(ITaskTreeNode         parent,
+                                           int                   startIndex,
+                                           int                   endIndex,
+                                           ITaskTreeBuilder      builder,
+                                           ITaskTreeNodeFactory  nodeFactory,
+                                           RuleApplicationResult result)
+    {
+        ISequence sequence = nodeFactory.createNewSequence();
+
+        for (int i = startIndex; i <= endIndex; i++) {
+            builder.addChild(sequence, parent.getChildren().get(startIndex));
+            builder.removeChild((ISequence) parent, startIndex);
+        }
+
+        builder.addChild((ISequence) parent, startIndex, sequence);
+
+        result.addNewlyCreatedParentNode(sequence);
+        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGUIElementSequenceDetectionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGUIElementSequenceDetectionRule.java	(revision 556)
+++ 	(revision )
@@ -1,137 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.temporalrelation;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 18.03.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class DefaultGUIElementSequenceDetectionRule implements TemporalRelationshipRule
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     builder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize)
-  {
-    if (!(parent instanceof Sequence))
-    {
-      return null;
-    }
-    
-    RuleApplicationResult result = new RuleApplicationResult();
-    
-    GUIElement currentGUIElement = null;
-    int startingIndex = -1;
-    
-    int index = 0;
-    while (index < parent.getChildren().size())
-    {
-      TaskTreeNode child = parent.getChildren().get(index);
-      
-      GUIElement guiElement = determineGUIElement(child);
-      
-      if ((guiElement != null) && (!guiElement.equals(currentGUIElement)))
-      {
-        if (startingIndex < 0)
-        {
-          startingIndex = index;
-          currentGUIElement = guiElement;
-        }
-        else
-        {
-          handleGuiElementSequence(parent, startingIndex, index - 1, builder, nodeFactory, result);
-
-          return result;
-        }
-      }
-      
-      index++;
-    }
-    
-    if (startingIndex > -1)
-    {
-      if (finalize && (startingIndex > 0))
-      {
-        handleGuiElementSequence
-          (parent, startingIndex, parent.getChildren().size() - 1, builder, nodeFactory, result);
-      }
-      else
-      {
-        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
-      }
-    }
-    
-    return result;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param child
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private GUIElement determineGUIElement(TaskTreeNode node)
-  {
-    if (node instanceof InteractionTask)
-    {
-      return ((InteractionTask) node).getGUIElement();
-    }
-    else
-    {
-      return null;
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void handleGuiElementSequence(TaskTreeNode          parent,
-                                        int                   startIndex,
-                                        int                   endIndex,
-                                        TaskTreeBuilder       builder,
-                                        TaskTreeNodeFactory   nodeFactory,
-                                        RuleApplicationResult result)
-  {
-    Sequence sequence = nodeFactory.createNewSequence();
-    
-    for (int i = startIndex; i <= endIndex; i++)
-    {
-      builder.addChild(sequence, parent.getChildren().get(startIndex));
-      builder.removeChild((Sequence) parent, startIndex);
-    }
-    
-    builder.addChild((Sequence) parent, startIndex, sequence);
-    
-    result.addNewlyCreatedParentNode(sequence);
-    result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGuiEventSequenceDetectionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGuiEventSequenceDetectionRule.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultGuiEventSequenceDetectionRule.java	(revision 557)
@@ -0,0 +1,125 @@
+// Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+
+package de.ugoe.cs.quest.tasktrees.temporalrelation;
+
+import de.ugoe.cs.quest.eventcore.gui.IInteraction;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 18.03.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class DefaultGuiEventSequenceDetectionRule implements TemporalRelationshipRule {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode,
+     * TaskTreeBuilder, TaskTreeNodeFactory)
+     */
+    @Override
+    public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                       ITaskTreeBuilder     builder,
+                                       ITaskTreeNodeFactory nodeFactory,
+                                       boolean              finalize)
+    {
+        if (!(parent instanceof ISequence)) {
+            return null;
+        }
+
+        RuleApplicationResult result = new RuleApplicationResult();
+        int sequenceStartingIndex = -1;
+
+        int index = 0;
+        while (index < parent.getChildren().size()) {
+            ITaskTreeNode child = parent.getChildren().get(index);
+
+            if ((child instanceof IEventTask) &&
+                (((IEventTask) child).getEventType() instanceof IInteraction))
+            {
+                IInteraction eventType = (IInteraction) ((IEventTask) child).getEventType();
+                
+                if (eventType.finishesLogicalSequence() && (sequenceStartingIndex > -1))
+                {
+                    // There are several situations in which this implementation may cause infinite
+                    // loops. This is because the rule manager will reapply rules until
+                    // no rule is applied anymore. A sequence identified in a first iteration will
+                    // be identified as a sequence also in a second iteration. As an example
+                    // many sequences start with an interaction starting that sequence and end
+                    // with an interaction ending that sequence. This will be reidentified as
+                    // further subsequence. It must therefore be assured, that a sequence, that
+                    // was once identified is not reidentified in a further application of the rule.
+                    // For this, the implementation performs a kind of dry run. It creates a list of
+                    // children that would belong to an identified sequence. Only if this list is
+                    // not a reidentification then a new sequence is created and added to the
+                    // parent. If it is a reidentification can be identified, if the list of
+                    // children will contain all children of the parent, or if the list of children
+                    // only consists of one sequence. Further, an identified sequence must at least
+                    // have one child.
+                    if (((sequenceStartingIndex != 0) ||
+                         (index != (parent.getChildren().size() - 1))) &&
+                        (((index - sequenceStartingIndex) > 0) ||
+                          (((index - sequenceStartingIndex) == 0) &&
+                           (!eventType.startsLogicalSequence()))))
+                    {
+                        boolean allNewChildrenAreSequences = true;
+
+                        for (int j = sequenceStartingIndex;
+                             ((allNewChildrenAreSequences) && (j < index)); j++)
+                        {
+                            allNewChildrenAreSequences &=
+                                (parent.getChildren().get(j) instanceof ISequence);
+                        }
+
+                        if (!allNewChildrenAreSequences) {
+                            ISequence sequence = nodeFactory.createNewSequence();
+
+                            for (int j = sequenceStartingIndex; j < index; j++) {
+                                builder.addChild
+                                    (sequence, parent.getChildren().get(sequenceStartingIndex));
+                                builder.removeChild((ISequence) parent, sequenceStartingIndex);
+                            }
+
+                            if (!eventType.startsLogicalSequence()) {
+                                builder.addChild
+                                    (sequence, parent.getChildren().get(sequenceStartingIndex));
+                                builder.removeChild((ISequence) parent, sequenceStartingIndex);
+                            }
+
+                            builder.addChild((ISequence) parent, sequenceStartingIndex, sequence);
+
+                            result.addNewlyCreatedParentNode(sequence);
+                            result.setRuleApplicationStatus
+                                (RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+                            return result;
+                        }
+                    }
+                }
+
+                if (eventType.startsLogicalSequence()) {
+                    sequenceStartingIndex = index;
+                }
+            }
+
+            index++;
+        }
+
+        if (sequenceStartingIndex >= 0) {
+            result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
+        }
+
+        return result;
+    }
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultIterationDetectionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultIterationDetectionRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultIterationDetectionRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DefaultIterationDetectionRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
@@ -5,5 +4,5 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
@@ -13,12 +12,11 @@
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEquality;
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEqualityRuleManager;
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-
-//-------------------------------------------------------------------------------------------------
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+
 /**
  * TODO comment
@@ -27,263 +25,231 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DefaultIterationDetectionRule implements TemporalRelationshipRule
-{
-  /** */
-  private NodeEqualityRuleManager mNodeEqualityRuleManager;
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
+public class DefaultIterationDetectionRule implements TemporalRelationshipRule {
+    
+    /** */
+    private NodeEqualityRuleManager nodeEqualityRuleManager;
+
+    /**
+     * TODO: comment
+     * 
+     */
+    DefaultIterationDetectionRule(NodeEqualityRuleManager nodeEqualityRuleManager) {
+        super();
+        this.nodeEqualityRuleManager = nodeEqualityRuleManager;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
+     */
+    @Override
+    public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                       ITaskTreeBuilder     treeBuilder,
+                                       ITaskTreeNodeFactory nodeFactory,
+                                       boolean              finalize)
+    {
+        if (!(parent instanceof ISequence)) {
+            return null;
+        }
+
+        // parent must already have at least 2 children
+        if ((parent.getChildren() == null) || (parent.getChildren().size() < 2)) {
+            return null;
+        }
+
+        // iterations represent as a list of nodes that splits up in several equal sublists. If
+        // the remaining nodes also start an equal sublist, then the iteration may not be completed
+        // yet. So wait for further events to only identify completed iterations.
+
+        // to find longer iterations first, start with long sequences
+        for (int end = parent.getChildren().size() - 1; end > 0; end--) {
+            for (int start = 0; start < end; start++) {
+                List<ITaskTreeNode[]> equalVariants =
+                    getEqualSublistVariantsInBoundaries(parent, start, end);
+
+                if (equalVariants != null) {
+                    if (!finalize) {
+                        // check, if the iteration may go on. This may be the case, if the detected
+                        // iteration finishes with the last child of the parent, or if the
+                        // remaining children, which were not identified as part of the iteration,
+                        // start a further occurrence of the iteration
+                        if (end == (parent.getChildren().size() - 1)) {
+                            RuleApplicationResult result = new RuleApplicationResult();
+                            result.setRuleApplicationStatus
+                              (RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
+                            return result;
+                        }
+
+                        boolean allNodesEqual = true;
+                        for (int i = 0; ((allNodesEqual) && (i < equalVariants.get(0).length)); i++)
+                        {
+                            if ((end + i + 1) >= parent.getChildren().size()) {
+                                break;
+                            }
+
+                            NodeEquality nodeEquality = nodeEqualityRuleManager.applyRules
+                                (equalVariants.get(0)[i], parent.getChildren().get(end + i + 1));
+
+                            allNodesEqual &=
+                                nodeEquality.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL);
+                        }
+
+                        if (allNodesEqual) {
+                            RuleApplicationResult result = new RuleApplicationResult();
+                            result.setRuleApplicationStatus
+                                (RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
+                            return result;
+                        }
+                    }
+
+                    RuleApplicationResult result = new RuleApplicationResult();
+                    IIteration newIteration = nodeFactory.createNewIteration();
+                    result.addNewlyCreatedParentNode(newIteration);
+
+                    if (equalVariants.size() == 1) {
+                        // all children are the same. Create an iteration of this child
+                        if (equalVariants.get(0).length == 1) {
+                            // all children are the same. Create an iteration of this child
+                            treeBuilder.setChild(newIteration, equalVariants.get(0)[0]);
+                        }
+                        else {
+                            // there was an iteration of structurally equal sequences
+                            ISequence sequence = nodeFactory.createNewSequence();
+                            result.addNewlyCreatedParentNode(sequence);
+
+                            for (ITaskTreeNode node : equalVariants.get(0)) {
+                                treeBuilder.addChild(sequence, node);
+                            }
+
+                            treeBuilder.setChild(newIteration, sequence);
+                        }
+                    }
+                    else {
+                        // there are distinct variants of semantically equal subsequences or
+                        // children -->
+                        // create an iterated selection
+                        ISelection selection = nodeFactory.createNewSelection();
+                        result.addNewlyCreatedParentNode(selection);
+
+                        for (ITaskTreeNode[] variant : equalVariants) {
+                            if (variant.length == 1) {
+                                treeBuilder.addChild(selection, variant[0]);
+                            }
+                            else {
+                                ISequence sequence = nodeFactory.createNewSequence();
+                                result.addNewlyCreatedParentNode(sequence);
+
+                                for (ITaskTreeNode node : variant) {
+                                    treeBuilder.addChild(sequence, node);
+                                }
+
+                                treeBuilder.addChild(selection, sequence);
+                            }
+                        }
+
+                        treeBuilder.setChild(newIteration, selection);
+                    }
+
+                    // remove iterated children
+                    for (int j = end; j >= start; j--) {
+                        treeBuilder.removeChild((ISequence) parent, j);
+                    }
+
+                    // add the new iteration instead
+                    treeBuilder.addChild((ISequence) parent, start, newIteration);
+
+                    result.setRuleApplicationStatus
+                        (RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+                    return result;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    private List<ITaskTreeNode[]> getEqualSublistVariantsInBoundaries(ITaskTreeNode parent,
+                                                                      int           start,
+                                                                      int           end)
+    {
+        List<ITaskTreeNode[]> equalVariants = null;
+
+        int noOfChildrenInBoundaries = end - start + 1;
+
+        for (int subListLen = 1; subListLen <= (noOfChildrenInBoundaries / 2); subListLen++)
+        {
+            if ((noOfChildrenInBoundaries % subListLen) == 0) {
+                equalVariants =
+                    getEqualSublistVariantsForSubListLength(parent, start, end, subListLen);
+
+                if (equalVariants != null) {
+                    return equalVariants;
+                }
+            }
+        }
+
+        return null;
+    }
+
+    /**
    *
    */
-  //-----------------------------------------------------------------------------------------------
-  DefaultIterationDetectionRule(NodeEqualityRuleManager nodeEqualityRuleManager)
-  {
-    super();
-    mNodeEqualityRuleManager = nodeEqualityRuleManager;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     treeBuilder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize)
-  {
-    if (!(parent instanceof Sequence))
+    private List<ITaskTreeNode[]> getEqualSublistVariantsForSubListLength(ITaskTreeNode parent,
+                                                                          int           start,
+                                                                          int           end,
+                                                                          int           subListLen)
     {
-      return null;
-    }
-    
-    // parent must already have at least 2 children
-    if ((parent.getChildren() == null) || (parent.getChildren().size() < 2))
-    {
-      return null;
-    }
-    
-    // iterations represent as a list of nodes that splits up in several equal sublists. If
-    // the remaining nodes also start an equal sublist, then the iteration may not be completed
-    // yet. So wait for further interactions to only identify completed iterations.
-    
-    // to find longer iterations first, start with long sequences
-    for (int end = parent.getChildren().size() - 1; end > 0; end--)
-    {
-      for (int start = 0; start < end; start++)
-      {
-        List<TaskTreeNode[]> equalVariants =
-          getEqualSublistVariantsInBoundaries(parent, start, end);
-        
-        if (equalVariants != null)
+        List<ITaskTreeNode[]> equalVariants = new ArrayList<ITaskTreeNode[]>();
+        ITaskTreeNode[] firstVariant = new ITaskTreeNode[subListLen];
+
+        for (int i = 0; i < subListLen; i++) {
+            firstVariant[i] = parent.getChildren().get(start + i);
+        }
+
+        equalVariants.add(firstVariant);
+
+        for (int parentIdx = (start + subListLen); parentIdx <= end; parentIdx += subListLen)
         {
-          if (!finalize)
-          {
-            // check, if the iteration may go on. This may be the case, if the detected iteration
-            // finishes with the last child of the parent, or if the remaining children, which were
-            // not identified as part of the iteration, start a further occurrence of the iteration
-            if (end == (parent.getChildren().size() - 1))
-            {
-              RuleApplicationResult result = new RuleApplicationResult();
-              result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
-              return result;
-            }
-            
-            boolean allNodesEqual = true;
-            for (int i = 0; ((allNodesEqual) && (i < equalVariants.get(0).length)); i++)
-            {
-              if ((end + i + 1) >= parent.getChildren().size())
-              {
-                break;
-              }
-              
-              NodeEquality nodeEquality = mNodeEqualityRuleManager.applyRules
-                (equalVariants.get(0)[i], parent.getChildren().get(end + i + 1));
-              
-              allNodesEqual &=
-                nodeEquality.getStructuralEquality() || nodeEquality.getSemanticalEquality();
-            }
-            
-            if (allNodesEqual)
-            {
-              RuleApplicationResult result = new RuleApplicationResult();
-              result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
-              return result;
-            }
-          }
-          
-          RuleApplicationResult result = new RuleApplicationResult();
-          Iteration newIteration = nodeFactory.createNewIteration();
-          result.addNewlyCreatedParentNode(newIteration);
-          
-          if (equalVariants.size() == 1)
-          {
-            // all children are the same. Create an iteration of this child
-            if (equalVariants.get(0).length == 1)
-            {
-              // all children are the same. Create an iteration of this child
-              treeBuilder.setChild(newIteration, equalVariants.get(0)[0]);
-            }
-            else
-            {
-              // there was an iteration of structurally equal sequences
-              Sequence sequence = nodeFactory.createNewSequence();
-              result.addNewlyCreatedParentNode(sequence);
-              
-              for (TaskTreeNode node : equalVariants.get(0))
-              {
-                treeBuilder.addChild(sequence, node);
-              }
-              
-              treeBuilder.setChild(newIteration, sequence);
-            }
-          }
-          else
-          {
-            // there are distinct variants of semantically equal subsequences or children -->
-            // create an iterated selection
-            Selection selection = nodeFactory.createNewSelection();
-            result.addNewlyCreatedParentNode(selection);
-            
-            for (TaskTreeNode[] variant : equalVariants)
-            {
-              if (variant.length == 1)
-              {
-                treeBuilder.addChild(selection, variant[0]);
-              }
-              else
-              {
-                Sequence sequence = nodeFactory.createNewSequence();
-                result.addNewlyCreatedParentNode(sequence);
-                
-                for (TaskTreeNode node : variant)
-                {
-                  treeBuilder.addChild(sequence, node);
-                }
-                
-                treeBuilder.addChild(selection, sequence);
-              }
-            }
-            
-            treeBuilder.setChild(newIteration, selection);
-          }
-          
-          // remove iterated children
-          for (int j = end; j >= start; j--)
-          {
-            treeBuilder.removeChild((Sequence) parent, j);
-          }
-
-          // add the new iteration instead
-          treeBuilder.addChild((Sequence) parent, start, newIteration);
-
-          result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-          return result;
-        }
-      }
-    }
-    
-    return null;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private List<TaskTreeNode[]> getEqualSublistVariantsInBoundaries(TaskTreeNode parent,
-                                                                   int          start,
-                                                                   int          end)
-  {
-    List<TaskTreeNode[]> equalVariants = null;
-    
-    int noOfChildrenInBoundaries = end - start + 1;
-    
-    for (int subListLength = 1; subListLength <= (noOfChildrenInBoundaries / 2); subListLength++)
-    {
-      if ((noOfChildrenInBoundaries % subListLength) == 0)
-      {
-        equalVariants = getEqualSublistVariantsForSubListLength(parent, start, end, subListLength);
-      
-        if (equalVariants != null)
-        {
-          return equalVariants;
-        }
-      }
-    }
-    
-    return null;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private List<TaskTreeNode[]> getEqualSublistVariantsForSubListLength(TaskTreeNode parent,
-                                                                       int          start,
-                                                                       int          end,
-                                                                       int          subListLength)
-  {
-    List<TaskTreeNode[]> equalVariants = new ArrayList<TaskTreeNode[]>();
-    TaskTreeNode[] firstVariant = new TaskTreeNode[subListLength];
-    
-    for (int i = 0; i < subListLength; i++)
-    {
-      firstVariant[i] = parent.getChildren().get(start + i);
-    }
-    
-    equalVariants.add(firstVariant);
-    
-    for (int parentIdx = (start + subListLength); parentIdx <= end; parentIdx += subListLength)
-    {
-      TaskTreeNode[] otherVariant = new TaskTreeNode[subListLength];
-      
-      for (int i = 0; i < subListLength; i++)
-      {
-        NodeEquality nodeEquality = mNodeEqualityRuleManager.applyRules
-          (firstVariant[i], parent.getChildren().get(parentIdx + i));
-    
-        if (!nodeEquality.getStructuralEquality())
-        {
-          if (nodeEquality.getSemanticalEquality())
-          {
-            otherVariant[i] = parent.getChildren().get(parentIdx + i);
-          }
-          else
-          {
-            return null;
-          }
-        }
-      }
-      
-      // check, if there is a semantically equal other variant. If so, add it to the list of
-      // variants
-      boolean semanticallyUnequal = false;
-      for (int i = 0; i < subListLength; i++)
-      {
-        if (otherVariant[i] == null)
-        {
-          otherVariant[i] = firstVariant[i];
-        }
-        else
-        {
-          semanticallyUnequal = true;
-        }
-      }
-      
-      if (semanticallyUnequal)
-      {
-        equalVariants.add(otherVariant);
-      }
-    }
-    
-    return equalVariants;
-  }
+            ITaskTreeNode[] otherVariant = new ITaskTreeNode[subListLen];
+
+            for (int i = 0; i < subListLen; i++) {
+                NodeEquality nodeEquality = nodeEqualityRuleManager.applyRules
+                    (firstVariant[i], parent.getChildren().get(parentIdx + i));
+
+                if (!nodeEquality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)) {
+                    if (nodeEquality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)) {
+                        otherVariant[i] = parent.getChildren().get(parentIdx + i);
+                    }
+                    else {
+                        return null;
+                    }
+                }
+            }
+
+            // check, if there is a semantically equal other variant. If so, add it to the list of
+            // variants
+            boolean semanticallyUnequal = false;
+            for (int i = 0; i < subListLen; i++) {
+                if (otherVariant[i] == null) {
+                    otherVariant[i] = firstVariant[i];
+                }
+                else {
+                    semanticallyUnequal = true;
+                }
+            }
+
+            if (semanticallyUnequal) {
+                equalVariants.add(otherVariant);
+            }
+        }
+
+        return equalVariants;
+    }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultMouseClickReductionRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
@@ -5,19 +4,18 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonDown;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonInteraction;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseButtonUp;
-import de.ugoe.cs.quest.eventcore.userinteraction.MouseClick;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.gui.MouseButtonDown;
+import de.ugoe.cs.quest.eventcore.gui.MouseButtonInteraction;
+import de.ugoe.cs.quest.eventcore.gui.MouseButtonUp;
+import de.ugoe.cs.quest.eventcore.gui.MouseClick;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -26,127 +24,113 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DefaultMouseClickReductionRule implements TemporalRelationshipRule
-{
+public class DefaultMouseClickReductionRule implements TemporalRelationshipRule {
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     builder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize)
-  {
-    if (!(parent instanceof Sequence))
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode,
+     * TaskTreeBuilder, TaskTreeNodeFactory)
+     */
+    @Override
+    public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                       ITaskTreeBuilder     builder,
+                                       ITaskTreeNodeFactory nodeFactory,
+                                       boolean              finalize)
     {
-      return null;
+        if (!(parent instanceof ISequence)) {
+            return null;
+        }
+
+        RuleApplicationResult result = new RuleApplicationResult();
+
+        int index = 0;
+        while (index < parent.getChildren().size() - 2) // -2 because we don't need to go to the end
+        {
+            if (mouseClickSequenceFound(parent.getChildren().get(index),
+                                        parent.getChildren().get(index + 1),
+                                        parent.getChildren().get(index + 2)))
+            {
+                builder.removeChild((ISequence) parent, index);
+                builder.removeChild((ISequence) parent, index);
+                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+                return result;
+            }
+            else if
+                ((parent.getChildren().get(index) instanceof ISequence) &&
+                 (parent.getChildren().get(index).getChildren().size() == 2) &&
+                 (mouseClickSequenceFound(parent.getChildren().get(index).getChildren().get(0),
+                                          parent.getChildren().get(index).getChildren().get(1),
+                                          parent.getChildren().get(index + 1))))
+            {
+                builder.removeChild((ISequence) parent, index);
+                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+                return result;
+            }
+
+            index++;
+        }
+
+        return result;
     }
-    
-    RuleApplicationResult result = new RuleApplicationResult();
-    
-    int index = 0;
-    while (index < parent.getChildren().size() - 2) // -2 because we don't need to go to the end
-    {
-      if (mouseClickSequenceFound(parent.getChildren().get(index),
-                                  parent.getChildren().get(index + 1),
-                                  parent.getChildren().get(index + 2)))
-      {
-         builder.removeChild((Sequence) parent, index);
-         builder.removeChild((Sequence) parent, index);
-         result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-         return result;
-      }
-      else if ((parent.getChildren().get(index) instanceof Sequence) &&
-               (parent.getChildren().get(index).getChildren().size() == 2) &&
-               (mouseClickSequenceFound(parent.getChildren().get(index).getChildren().get(0),
-                                        parent.getChildren().get(index).getChildren().get(1),
-                                        parent.getChildren().get(index + 1))))
-      {
-        builder.removeChild((Sequence) parent, index);
-        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-        return result;
-      }
-      
-      index++;
-    }
-    
-    return result;
-  }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
+    /**
    * 
    */
-  //-----------------------------------------------------------------------------------------------
-  private boolean mouseClickSequenceFound(TaskTreeNode mouseButtonDown,
-                                          TaskTreeNode mouseButtonUp,
-                                          TaskTreeNode mouseClick)
-  {
-    // check the first in a row of three for validity
-    if (!(mouseButtonDown instanceof InteractionTask))
+    private boolean mouseClickSequenceFound(ITaskTreeNode mouseButtonDown,
+                                            ITaskTreeNode mouseButtonUp,
+                                            ITaskTreeNode mouseClick)
     {
-      return false;
+        // check the first in a row of three for validity
+        if (!(mouseButtonDown instanceof IEventTask)) {
+            return false;
+        }
+
+        IEventTarget eventTarget = ((IEventTask) mouseButtonDown).getEventTarget();
+
+        if (!(((IEventTask) mouseButtonDown).getEventType() instanceof MouseButtonDown)) {
+            return false;
+        }
+
+        MouseButtonInteraction.Button button =
+            ((MouseButtonDown) ((IEventTask) mouseButtonDown).getEventType()).getButton();
+
+        // check the second node for validity
+        if (!(mouseButtonUp instanceof IEventTask)) {
+            return false;
+        }
+
+        if (!eventTarget.equals(((IEventTask) mouseButtonUp).getEventTarget())) {
+            return false;
+        }
+
+        if (!(((IEventTask) mouseButtonUp).getEventType() instanceof MouseButtonUp)) {
+            return false;
+        }
+
+        if (!button.equals(((MouseButtonUp) ((IEventTask) mouseButtonUp).getEventType())
+            .getButton()))
+        {
+            return false;
+        }
+
+        // check the third node for validity
+        if (!(mouseClick instanceof IEventTask)) {
+            return false;
+        }
+
+        if (!eventTarget.equals(((IEventTask) mouseClick).getEventTarget())) {
+            return false;
+        }
+
+        if (!(((IEventTask) mouseClick).getEventType() instanceof MouseClick)) {
+            return false;
+        }
+
+        if (!button.equals(((MouseClick) ((IEventTask) mouseClick).getEventType()).getButton())) {
+            return false;
+        }
+
+        return true;
     }
-    
-    GUIElement guiElement = ((InteractionTask) mouseButtonDown).getGUIElement();
-    
-    if (!(((InteractionTask) mouseButtonDown).getInteraction() instanceof MouseButtonDown))
-    {
-      return false;
-    }
-    
-    MouseButtonInteraction.Button button =
-      ((MouseButtonDown) ((InteractionTask) mouseButtonDown).getInteraction()).getButton();
-    
-    
-    // check the second node for validity
-    if (!(mouseButtonUp instanceof InteractionTask))
-    {
-      return false;
-    }
-    
-    if (!guiElement.equals(((InteractionTask) mouseButtonUp).getGUIElement()))
-    {
-      return false;
-    }
-    
-    if (!(((InteractionTask) mouseButtonUp).getInteraction() instanceof MouseButtonUp))
-    {
-      return false;
-    }
-    
-    if (!button.equals
-          (((MouseButtonUp) ((InteractionTask) mouseButtonUp).getInteraction()).getButton()))
-    {
-      return false;
-    }
-    
-    
-    // check the third node for validity
-    if (!(mouseClick instanceof InteractionTask))
-    {
-      return false;
-    }
-    
-    if (!guiElement.equals(((InteractionTask) mouseClick).getGUIElement()))
-    {
-      return false;
-    }
-    
-    if (!(((InteractionTask) mouseClick).getInteraction() instanceof MouseClick))
-    {
-      return false;
-    }
-    
-    if (!button.equals(((MouseClick) ((InteractionTask) mouseClick).getInteraction()).getButton()))
-    {
-      return false;
-    }
-    
-    return true;
-  }
 
 }
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultSequenceDetectionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultSequenceDetectionRule.java	(revision 556)
+++ 	(revision )
@@ -1,124 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.temporalrelation;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 18.03.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class DefaultSequenceDetectionRule implements TemporalRelationshipRule
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.temporalrelation.TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     builder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize)
-  {
-    if (!(parent instanceof Sequence))
-    {
-      return null;
-    }
-    
-    RuleApplicationResult result = new RuleApplicationResult();
-    int sequenceStartingIndex = -1;
-    
-    int index = 0;
-    while (index < parent.getChildren().size())
-    {
-      TaskTreeNode child = parent.getChildren().get(index);
-      
-      if (child instanceof InteractionTask)
-      {
-        if (((InteractionTask) child).getInteraction().finishesLogicalSequence() &&
-            (sequenceStartingIndex > -1))
-        {
-          // There are several situations in which this implementation may cause infinite
-          // loops. This is because the rule manager will reapply rules until
-          // no rule is applied anymore. A sequence identified in a first iteration will
-          // be identified as a sequence also in a second iteration. As an example
-          // many sequences start with an interaction starting that sequence and end
-          // with an interaction ending that sequence. This will be reidentified as further 
-          // subsequence. It must therefore be assured, that a sequence, that was once
-          // identified is not reidentified in a further application of the rule. For this,
-          // the implementation performs a kind of dry run. It creates a list of children
-          // that would belong to an identified sequence. Only if this list is not a
-          // reidentification then a new sequence is created and added to the parent. If it
-          // is a reidentification can be identified, if the list of children will contain
-          // all children of the parent, or if the list of children only consists of one
-          // sequence. Further, an identified sequence must at least have one child.
-          if (((sequenceStartingIndex != 0) || (index != (parent.getChildren().size() - 1))) &&
-              (((index - sequenceStartingIndex) > 0) ||
-                (((index - sequenceStartingIndex) == 0) &&
-                 (!((InteractionTask) child).getInteraction().startsLogicalSequence()))))
-          {
-            boolean allNewChildrenAreSequences = true;
-            
-            for (int j = sequenceStartingIndex; ((allNewChildrenAreSequences) && (j < index)); j++)
-            {
-              allNewChildrenAreSequences &= (parent.getChildren().get(j) instanceof Sequence);
-            }
-            
-            if (!allNewChildrenAreSequences)
-            {
-              Sequence sequence = nodeFactory.createNewSequence();
-            
-              for (int j = sequenceStartingIndex; j < index; j++)
-              {
-                builder.addChild(sequence, parent.getChildren().get(sequenceStartingIndex));
-                builder.removeChild((Sequence) parent, sequenceStartingIndex);
-              }
-
-              if (!((InteractionTask) child).getInteraction().startsLogicalSequence())
-              {
-                builder.addChild(sequence, parent.getChildren().get(sequenceStartingIndex));
-                builder.removeChild((Sequence) parent, sequenceStartingIndex);
-              }
-
-              builder.addChild((Sequence) parent, sequenceStartingIndex, sequence);
-
-              result.addNewlyCreatedParentNode(sequence);
-              result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-              return result;
-            }
-          }
-        }
-        
-        if (((InteractionTask) child).getInteraction().startsLogicalSequence())
-        {
-          sequenceStartingIndex = index;
-        }
-      }
-      
-      index++;
-    }
-    
-    if (sequenceStartingIndex >= 0)
-    {
-      result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
-    }
-    
-    return result;
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultTextInputReductionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultTextInputReductionRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/DefaultTextInputReductionRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: DefaultSequenceDetectionRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
@@ -5,5 +4,5 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
@@ -12,21 +11,20 @@
 import java.util.Locale;
 
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.guimodel.TextArea;
-import de.ugoe.cs.quest.eventcore.guimodel.TextField;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyInteraction;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyPressed;
-import de.ugoe.cs.quest.eventcore.userinteraction.KeyReleased;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-import de.ugoe.cs.quest.tasktrees.treeifc.TextInputInteractionTask;
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.gui.KeyInteraction;
+import de.ugoe.cs.quest.eventcore.gui.KeyPressed;
+import de.ugoe.cs.quest.eventcore.gui.KeyReleased;
+import de.ugoe.cs.quest.eventcore.guimodel.ITextArea;
+import de.ugoe.cs.quest.eventcore.guimodel.ITextField;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITextInputEventTask;
 import de.ugoe.cs.tasktree.keyboardmaps.KeyboardMap;
 import de.ugoe.cs.tasktree.keyboardmaps.KeyboardMapFactory;
 import de.ugoe.cs.tasktree.keyboardmaps.VirtualKey;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -35,239 +33,202 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class DefaultTextInputReductionRule implements TemporalRelationshipRule
-{
-  /** */
-  private KeyboardMap mKeyboardMap = KeyboardMapFactory.createKeyboardMap(Locale.GERMAN);
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     builder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize)
-  {
-    if ((!(parent instanceof Sequence)) ||
-        (parent instanceof TextInputInteractionTask))
+public class DefaultTextInputReductionRule implements TemporalRelationshipRule {
+    
+    /** */
+    private KeyboardMap keyboardMap = KeyboardMapFactory.createKeyboardMap(Locale.GERMAN);
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
+     */
+    @Override
+    public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                       ITaskTreeBuilder     builder,
+                                       ITaskTreeNodeFactory nodeFactory,
+                                       boolean              finalize)
     {
-      return null;
-    }
-    
-    RuleApplicationResult result = new RuleApplicationResult();
-    int textEntryStartIndex = -1;
-    GUIElement currentGUIElement = null;
-    
-    int index = 0;
-    TaskTreeNode task = null;
-    while (index < parent.getChildren().size())
+        if ((!(parent instanceof ISequence)) || (parent instanceof ITextInputEventTask)) {
+            return null;
+        }
+
+        RuleApplicationResult result = new RuleApplicationResult();
+        int textEntryStartIndex = -1;
+        IEventTarget currentEventTarget = null;
+
+        int index = 0;
+        ITaskTreeNode task = null;
+        while (index < parent.getChildren().size()) {
+            task = parent.getChildren().get(index);
+            if (isKeyInteraction(task) &&
+                isDataInputEventTarget(((IEventTask) task).getEventTarget()))
+            {
+                if (textEntryStartIndex < 0) {
+                    textEntryStartIndex = index;
+                    currentEventTarget = ((IEventTask) task).getEventTarget();
+                }
+                else if (!currentEventTarget.equals(((IEventTask) task).getEventTarget())) {
+                    handleTextEntrySequence(parent, textEntryStartIndex, index - 1,
+                                            currentEventTarget, builder, nodeFactory, result);
+                    return result;
+                }
+            }
+            else if (textEntryStartIndex >= 0) {
+                handleTextEntrySequence(parent, textEntryStartIndex, index - 1, currentEventTarget,
+                                        builder, nodeFactory, result);
+                return result;
+            }
+
+            index++;
+        }
+
+        if (textEntryStartIndex >= 0) {
+            if (finalize) {
+                handleTextEntrySequence(parent, textEntryStartIndex,
+                                        parent.getChildren().size() - 1, currentEventTarget,
+                                        builder, nodeFactory, result);
+            }
+            else {
+                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param taskTreeNode
+     * @return
+     */
+    private boolean isKeyInteraction(ITaskTreeNode taskTreeNode) {
+        if ((taskTreeNode instanceof IEventTask)) {
+            return (((IEventTask) taskTreeNode).getEventType() instanceof KeyInteraction);
+        }
+        else {
+            return false;
+        }
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param textEntryStartIndex
+     * @param i
+     * @param result
+     * @return
+     */
+    private void handleTextEntrySequence(ITaskTreeNode         parent,
+                                         int                   startIndex,
+                                         int                   endIndex,
+                                         IEventTarget          eventTarget,
+                                         ITaskTreeBuilder      builder,
+                                         ITaskTreeNodeFactory  nodeFactory,
+                                         RuleApplicationResult result)
     {
-      task = parent.getChildren().get(index);
-      if (isKeyInteraction(task) && isDataInputGUIElement(((InteractionTask) task).getGUIElement()))
-      {
-        if (textEntryStartIndex < 0)
-        {
-          textEntryStartIndex = index;
-          currentGUIElement = ((InteractionTask) task).getGUIElement();
-        }
-        else if (!currentGUIElement.equals(((InteractionTask) task).getGUIElement()))
-        {
-           handleTextEntrySequence(parent, textEntryStartIndex, index - 1, currentGUIElement,
-                                   builder, nodeFactory, result);
-           return result;
-        }
-      }
-      else if (textEntryStartIndex >= 0)
-      {
-        handleTextEntrySequence(parent, textEntryStartIndex, index - 1, currentGUIElement,
-                                builder, nodeFactory, result);
-        return result;
-      }
-      
-      index++;
-    }
-    
-    if (textEntryStartIndex >= 0)
+        ITextInputEventTask textInput = nodeFactory.createNewTextInputEventTask(eventTarget);
+
+        for (int i = startIndex; i <= endIndex; i++) {
+            builder.addChild(textInput, parent.getChildren().get(startIndex));
+            builder.removeChild((ISequence) parent, startIndex);
+        }
+
+        builder.addChild((ISequence) parent, startIndex, textInput);
+
+        StringBuffer enteredText = new StringBuffer();
+        determineEnteredText(textInput, new ArrayList<VirtualKey>(), enteredText);
+        textInput.setEnteredText(enteredText.toString());
+
+        result.addNewlyCreatedParentNode(textInput);
+        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param eventTarget
+     * @return
+     */
+    private boolean isDataInputEventTarget(IEventTarget eventTarget) {
+        return ((eventTarget instanceof ITextField) || (eventTarget instanceof ITextArea));
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param sequence
+     * @param enteredText
+     */
+    private void determineEnteredText(ITaskTreeNode    node,
+                                      List<VirtualKey> pressedKeys,
+                                      StringBuffer     enteredText)
     {
-      if (finalize)
-      {
-        handleTextEntrySequence(parent, textEntryStartIndex, parent.getChildren().size() - 1,
-                                currentGUIElement, builder, nodeFactory, result);
-      }
-      else
-      {
-        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
-      }
-    }
-    
-    return result;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param taskTreeNode
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private boolean isKeyInteraction(TaskTreeNode taskTreeNode)
-  {
-    if ((taskTreeNode instanceof InteractionTask))
-    {
-      return (((InteractionTask) taskTreeNode).getInteraction() instanceof KeyInteraction);
-    }
-    else
-    {
-      return false;
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param textEntryStartIndex
-   * @param i
-   * @param result
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void handleTextEntrySequence(TaskTreeNode          parent,
-                                       int                   startIndex,
-                                       int                   endIndex,
-                                       GUIElement            guiElement,
-                                       TaskTreeBuilder       builder,
-                                       TaskTreeNodeFactory   nodeFactory,
-                                       RuleApplicationResult result)
-  {
-    TextInputInteractionTask textInput = nodeFactory.createNewTextInputInteractionTask(guiElement);
-    
-    for (int i = startIndex; i <= endIndex; i++)
-    {
-      builder.addChild(textInput, parent.getChildren().get(startIndex));
-      builder.removeChild((Sequence) parent, startIndex);
-    }
-    
-    builder.addChild((Sequence) parent, startIndex, textInput);
-    
-    StringBuffer enteredText = new StringBuffer();
-    determineEnteredText(textInput, new ArrayList<VirtualKey>(), enteredText);
-    textInput.setEnteredText(enteredText.toString());
-    
-    result.addNewlyCreatedParentNode(textInput);
-    result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param guiElement
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private boolean isDataInputGUIElement(GUIElement guiElement)
-  {
-    return ((guiElement instanceof TextField) || (guiElement instanceof TextArea));
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param sequence
-   * @param enteredText
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void determineEnteredText(TaskTreeNode     node,
-                                    List<VirtualKey> pressedKeys,
-                                    StringBuffer     enteredText)
-  {
-    if ((node instanceof Sequence) || (node instanceof TextInputInteractionTask))
-    {
-      for (TaskTreeNode child : node.getChildren())
-      {
-        if (child instanceof InteractionTask)
-        {
-          if (((InteractionTask) child).getInteraction() instanceof KeyPressed)
-          {
-            VirtualKey key = ((KeyPressed) ((InteractionTask) child).getInteraction()).getKey();
-            
-            pressedKeys.add(key);
-            
-            if (key == VirtualKey.BACK_SPACE)
-            {
-              if (enteredText.length() > 0)
-              {
-                enteredText.deleteCharAt(enteredText.length() - 1);
-              }
-            }
-            else if (key == VirtualKey.ENTER)
-            {
-              // text fields only contain one line of code. Therefore the return is ignored.
-              if (!(((InteractionTask) child).getGUIElement() instanceof TextField))
-              {
-                enteredText.append(getCharacter(key, pressedKeys));
-              }
-            }
-            else
-            {
-              char theChar = getCharacter(key, pressedKeys);
-              if (theChar != Character.UNASSIGNED)
-              {
-                enteredText.append(theChar);
-              }
-            }
-          }
-          else if (((InteractionTask) child).getInteraction() instanceof KeyReleased)
-          {
-            pressedKeys.remove(((KeyReleased) ((InteractionTask) child).getInteraction()).getKey());
-          }
-        }
-        else
-        {
-          determineEnteredText(child, pressedKeys, enteredText);
-        }
-      }
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param key
-   * @param pressedKeys
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private char getCharacter(VirtualKey key, List<VirtualKey> pressedKeys)
-  {
-    boolean numlock = false;
-    boolean shift = false;
-    boolean altgr = false;
-    
-    for (VirtualKey pressedKey : pressedKeys)
-    {
-      if (pressedKey.isShiftKey())
-      {
-        shift = !shift;
-      }
-      else if (pressedKey == VirtualKey.ALT_GRAPH)
-      {
-        altgr = !altgr;
-      }
-      else if (pressedKey == VirtualKey.NUM_LOCK)
-      {
-        numlock = !numlock;
-      }
-    }
-    
-    return mKeyboardMap.getCharacterFor(key, numlock, shift, altgr, false);
-  }
+        if ((node instanceof ISequence) || (node instanceof ITextInputEventTask)) {
+            for (ITaskTreeNode child : node.getChildren()) {
+                if (child instanceof IEventTask) {
+                    if (((IEventTask) child).getEventType() instanceof KeyPressed) {
+                        VirtualKey key =
+                            ((KeyPressed) ((IEventTask) child).getEventType()).getKey();
+
+                        pressedKeys.add(key);
+
+                        if (key == VirtualKey.BACK_SPACE) {
+                            if (enteredText.length() > 0) {
+                                enteredText.deleteCharAt(enteredText.length() - 1);
+                            }
+                        }
+                        else if (key == VirtualKey.ENTER) {
+                            // text fields only contain one line of code. Therefore the return is
+                            // ignored.
+                            if (!(((IEventTask) child).getEventTarget() instanceof ITextField)) {
+                                enteredText.append(getCharacter(key, pressedKeys));
+                            }
+                        }
+                        else {
+                            char theChar = getCharacter(key, pressedKeys);
+                            if (theChar != Character.UNASSIGNED) {
+                                enteredText.append(theChar);
+                            }
+                        }
+                    }
+                    else if (((IEventTask) child).getEventType() instanceof KeyReleased) {
+                        pressedKeys.remove
+                            (((KeyReleased) ((IEventTask) child).getEventType()).getKey());
+                    }
+                }
+                else {
+                    determineEnteredText(child, pressedKeys, enteredText);
+                }
+            }
+        }
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param key
+     * @param pressedKeys
+     * @return
+     */
+    private char getCharacter(VirtualKey key, List<VirtualKey> pressedKeys) {
+        boolean numlock = false;
+        boolean shift = false;
+        boolean altgr = false;
+
+        for (VirtualKey pressedKey : pressedKeys) {
+            if (pressedKey.isShiftKey()) {
+                shift = !shift;
+            }
+            else if (pressedKey == VirtualKey.ALT_GRAPH) {
+                altgr = !altgr;
+            }
+            else if (pressedKey == VirtualKey.NUM_LOCK) {
+                numlock = !numlock;
+            }
+        }
+
+        return keyboardMap.getCharacterFor(key, numlock, shift, altgr, false);
+    }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/RuleApplicationResult.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/RuleApplicationResult.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/RuleApplicationResult.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: RuleApplicationResult.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 18.03.2012 $
@@ -5,5 +4,6 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
@@ -11,7 +11,6 @@
 import java.util.List;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -20,73 +19,56 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class RuleApplicationResult
-{
+public class RuleApplicationResult {
 
-  /** */
-  private RuleApplicationStatus mStatus = RuleApplicationStatus.RULE_NOT_APPLIED;
-  
-  /** */
-  private List<TaskTreeNode> mNewParents = new ArrayList<TaskTreeNode>();
+    /** */
+    private RuleApplicationStatus status = RuleApplicationStatus.RULE_NOT_APPLIED;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param b
-   */
-  //-----------------------------------------------------------------------------------------------
-  public RuleApplicationResult()
-  {
-    // this is the default indicating nothing so far
-  }
+    /** */
+    private List<ITaskTreeNode> newParents = new ArrayList<ITaskTreeNode>();
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param b
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void setRuleApplicationStatus(RuleApplicationStatus status)
-  {
-    mStatus = status;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @param b
+     */
+    public RuleApplicationResult() {
+        // this is the default indicating nothing so far
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public RuleApplicationStatus getRuleApplicationStatus()
-  {
-    return mStatus;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @param b
+     */
+    public void setRuleApplicationStatus(RuleApplicationStatus status) {
+        this.status = status;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param sequence
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void addNewlyCreatedParentNode(TaskTreeNode newParent)
-  {
-    mNewParents.add(newParent);
-  }
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public RuleApplicationStatus getRuleApplicationStatus() {
+        return status;
+    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public List<TaskTreeNode> getNewlyCreatedParentNodes()
-  {
-    return mNewParents;
-  }
+    /**
+     * TODO: comment
+     * 
+     * @param sequence
+     */
+    public void addNewlyCreatedParentNode(ITaskTreeNode newParent) {
+        newParents.add(newParent);
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public List<ITaskTreeNode> getNewlyCreatedParentNodes() {
+        return newParents;
+    }
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/RuleApplicationStatus.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/RuleApplicationStatus.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/RuleApplicationStatus.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: RuleApplicationStatus.java,v $
 // Version   : $Revision: 0.0 $  $Author: pharms $  $Date: 09.07.2012 $
@@ -5,8 +4,8 @@
 // Creation  : 2012 by pharms
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -15,9 +14,7 @@
  * @author 2012, last modified by $Author: pharms$
  */
-//-------------------------------------------------------------------------------------------------
-public enum RuleApplicationStatus
-{
-  RULE_APPLICATION_FINISHED,
-  RULE_APPLICATION_FEASIBLE,
-  RULE_NOT_APPLIED;
+public enum RuleApplicationStatus {
+    RULE_APPLICATION_FINISHED,
+    RULE_APPLICATION_FEASIBLE,
+    RULE_NOT_APPLIED;
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TemporalRelationshipRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TemporalRelationshipRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TemporalRelationshipRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TemporalRelationshipRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 12.02.2012 $
@@ -5,12 +4,11 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -19,18 +17,14 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public interface TemporalRelationshipRule
-{
+public interface TemporalRelationshipRule {
 
-  //-----------------------------------------------------------------------------------------------
   /**
    * applies the rule to the given situation and returns a rule application result, if this was
    * successful
    */
-  //-----------------------------------------------------------------------------------------------
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     builder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize);
+  public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                     ITaskTreeBuilder     builder,
+                                     ITaskTreeNodeFactory nodeFactory,
+                                     boolean              finalize);
   
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TemporalRelationshipRuleManager.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 12.02.2012 $
@@ -5,5 +4,5 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
@@ -13,9 +12,8 @@
 
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEqualityRuleManager;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -24,143 +22,123 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class TemporalRelationshipRuleManager
-{
-  /** */
-  private static Logger LOG = Logger.getLogger(TemporalRelationshipRuleManager.class.getName());
+public class TemporalRelationshipRuleManager {
+    
+    /** */
+    private static Logger LOG = Logger.getLogger(TemporalRelationshipRuleManager.class.getName());
 
-  /** */
-  private NodeEqualityRuleManager mNodeEqualityRuleManager;
+    /** */
+    private NodeEqualityRuleManager nodeEqualityRuleManager;
 
-  /** */
-  private List<TemporalRelationshipRule> mRuleIndex = new ArrayList<TemporalRelationshipRule>();
+    /** */
+    private List<TemporalRelationshipRule> ruleIndex = new ArrayList<TemporalRelationshipRule>();
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
+    /**
+     * TODO: comment
+     * 
+     */
+    public TemporalRelationshipRuleManager(NodeEqualityRuleManager nodeEqualityRuleManager) {
+        super();
+        this.nodeEqualityRuleManager = nodeEqualityRuleManager;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     */
+    public void init() {
+        LOG.info("initializing");
+
+        ruleIndex.add(new DefaultMouseClickReductionRule());
+        ruleIndex.add(new DefaultTextInputReductionRule());
+        ruleIndex.add(new DefaultEventTargetSequenceDetectionRule());
+        ruleIndex.add(new TrackBarSelectionDetectionRule(nodeEqualityRuleManager));
+        ruleIndex.add(new DefaultGuiEventSequenceDetectionRule());
+        ruleIndex.add(new DefaultIterationDetectionRule(nodeEqualityRuleManager));
+    }
+
+    /**
+     * returns true, if there is a rule that matches the current situation and if, therefore, a new
+     * temporal relationship has been added to the tree.
+     * 
+     * @param parent
+     * @param newChild
+     * @return
+     */
+    public void applyRules(ITaskTreeNode        parent,
+                           ITaskTreeBuilder     builder,
+                           ITaskTreeNodeFactory nodeFactory,
+                           boolean              finalize)
+    {
+        applyRules(parent, builder, nodeFactory, finalize, "");
+    }
+
+    /**
+     * returns true, if there is a rule that matches the current situation and if, therefore, a new
+     * temporal relationship has been added to the tree.
+     * 
+     * @param parent
+     * @param newChild
+     * @return
+     */
+    private int applyRules(ITaskTreeNode        parent,
+                           ITaskTreeBuilder     builder,
+                           ITaskTreeNodeFactory nodeFactory,
+                           boolean              finalize,
+                           String               logIndent)
+    {
+        LOG.info(logIndent + "applying rules for " + parent);
+
+        int noOfRuleApplications = 0;
+
+        for (TemporalRelationshipRule rule : ruleIndex) {
+            RuleApplicationResult result;
+            do {
+                // LOG.info(logIndent + "trying to apply rule " + rule + " on " + parent);
+                result = rule.apply(parent, builder, nodeFactory, finalize);
+
+                if ((result != null) &&
+                    (result.getRuleApplicationStatus() ==
+                     RuleApplicationStatus.RULE_APPLICATION_FINISHED))
+                {
+                    LOG.info(logIndent + "applied rule " + rule + " on " + parent);
+                    noOfRuleApplications++;
+
+                    for (ITaskTreeNode newParent : result.getNewlyCreatedParentNodes()) {
+                        noOfRuleApplications +=
+                            applyRules(newParent, builder, nodeFactory, true, logIndent + "  ");
+                    }
+                }
+            }
+            while ((result != null) &&
+                   (result.getRuleApplicationStatus() ==
+                    RuleApplicationStatus.RULE_APPLICATION_FINISHED));
+
+            if ((!finalize) &&
+                (result != null) &&
+                (result.getRuleApplicationStatus() ==
+                 RuleApplicationStatus.RULE_APPLICATION_FEASIBLE))
+            {
+                // in this case, don't go on applying rules, which should not be applied yet
+                break;
+            }
+        }
+
+        if (noOfRuleApplications <= 0) {
+            LOG.warning(logIndent + "no rules applied --> no temporal relationship generated");
+        }
+
+        return noOfRuleApplications;
+    }
+
+    /**
    *
    */
-  //-----------------------------------------------------------------------------------------------
-  public TemporalRelationshipRuleManager(NodeEqualityRuleManager nodeEqualityRuleManager)
-  {
-    super();
-    mNodeEqualityRuleManager = nodeEqualityRuleManager;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void init()
-  {
-    LOG.info("initializing");
-    
-    mRuleIndex.add(new DefaultMouseClickReductionRule());
-    mRuleIndex.add(new DefaultTextInputReductionRule());
-    mRuleIndex.add(new DefaultGUIElementSequenceDetectionRule());
-    mRuleIndex.add(new TrackBarSelectionDetectionRule(mNodeEqualityRuleManager));
-    mRuleIndex.add(new DefaultSequenceDetectionRule());
-    mRuleIndex.add(new DefaultIterationDetectionRule(mNodeEqualityRuleManager));
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * returns true, if there is a rule that matches the current situation and if, therefore, a
-   * new temporal relationship has been added to the tree.
-   * 
-   * @param parent
-   * @param newChild
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void applyRules(TaskTreeNode        parent,
-                         TaskTreeBuilder     builder,
-                         TaskTreeNodeFactory nodeFactory,
-                         boolean             finalize)
-  {
-    applyRules(parent, builder, nodeFactory, finalize, "");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * returns true, if there is a rule that matches the current situation and if, therefore, a
-   * new temporal relationship has been added to the tree.
-   * 
-   * @param parent
-   * @param newChild
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private int applyRules(TaskTreeNode        parent,
-                         TaskTreeBuilder     builder,
-                         TaskTreeNodeFactory nodeFactory,
-                         boolean             finalize,
-                         String              logIndent)
-  {
-    LOG.info(logIndent + "applying rules for " + parent);
-    
-    int noOfRuleApplications = 0;
-    
-    for (TemporalRelationshipRule rule : mRuleIndex)
-    {
-      RuleApplicationResult result;
-      do
-      {
-        //LOG.info(logIndent + "trying to apply rule " + rule + " on " + parent);
-        result = rule.apply(parent, builder, nodeFactory, finalize);
-        
-        if ((result != null) &&
-            (result.getRuleApplicationStatus() == RuleApplicationStatus.RULE_APPLICATION_FINISHED))
-        {
-          LOG.info(logIndent + "applied rule " + rule + " on " + parent);
-          noOfRuleApplications++;
-          
-          for (TaskTreeNode newParent : result.getNewlyCreatedParentNodes())
-          {
-            noOfRuleApplications +=
-              applyRules(newParent, builder, nodeFactory, true, logIndent + "  ");
-          }
-        }
-      }
-      while ((result != null) &&
-             (result.getRuleApplicationStatus() == RuleApplicationStatus.RULE_APPLICATION_FINISHED));
-      
-      if ((!finalize) && (result != null) &&
-          (result.getRuleApplicationStatus() == RuleApplicationStatus.RULE_APPLICATION_FEASIBLE))
-      {
-        // in this case, don't go on applying rules, which should not be applied yet
-        break;
-      }
-    }
-    
-    if (noOfRuleApplications <= 0)
-    {
-      LOG.warning(logIndent + "no rules applied --> no temporal relationship generated");
-    }
-    
-    return noOfRuleApplications;
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  /*private void dumpTask(TaskTreeNode task, String indent)
-  {
-    System.err.print(indent);
-    System.err.print(task);
-    System.err.println(" ");
-    
-    if ((task.getChildren() != null) && (task.getChildren().size() > 0))
-    {
-      for (TaskTreeNode child : task.getChildren())
-      {
-        dumpTask(child, indent + "  ");
-      }
-    }
-  }*/
+    /*
+     * private void dumpTask(TaskTreeNode task, String indent) { System.err.print(indent);
+     * System.err.print(task); System.err.println(" ");
+     * 
+     * if ((task.getChildren() != null) && (task.getChildren().size() > 0)) { for (TaskTreeNode
+     * child : task.getChildren()) { dumpTask(child, indent + "  "); } } }
+     */
 
 }
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TrackBarSelectionDetectionRule.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TrackBarSelectionDetectionRule.java	(revision 556)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/temporalrelation/TrackBarSelectionDetectionRule.java	(revision 557)
@@ -1,3 +1,2 @@
-//-------------------------------------------------------------------------------------------------
 // Module    : $RCSfile: TrackBarSelectionDetectionRule.java,v $
 // Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 28.04.2012 $
@@ -5,20 +4,19 @@
 // Creation  : 2012 by patrick
 // Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
+
 package de.ugoe.cs.quest.tasktrees.temporalrelation;
 
-import de.ugoe.cs.quest.eventcore.guimodel.TrackBar;
-import de.ugoe.cs.quest.eventcore.userinteraction.ValueSelection;
+import de.ugoe.cs.quest.eventcore.gui.ValueSelection;
+import de.ugoe.cs.quest.eventcore.guimodel.ITrackBar;
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEquality;
 import de.ugoe.cs.quest.tasktrees.nodeequality.NodeEqualityRuleManager;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
 
-//-------------------------------------------------------------------------------------------------
 /**
  * TODO comment
@@ -27,194 +25,171 @@
  * @author 2012, last modified by $Author: patrick$
  */
-//-------------------------------------------------------------------------------------------------
-public class TrackBarSelectionDetectionRule implements TemporalRelationshipRule
-{
+public class TrackBarSelectionDetectionRule implements TemporalRelationshipRule {
 
-  /** */
-  private NodeEqualityRuleManager mNodeEqualityRuleManager;
+    /** */
+    private NodeEqualityRuleManager nodeEqualityRuleManager;
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
+    /**
+     * TODO: comment
+     * 
+     */
+    TrackBarSelectionDetectionRule(NodeEqualityRuleManager nodeEqualityRuleManager) {
+        super();
+        this.nodeEqualityRuleManager = nodeEqualityRuleManager;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
+     */
+    @Override
+    public RuleApplicationResult apply(ITaskTreeNode        parent,
+                                       ITaskTreeBuilder     builder,
+                                       ITaskTreeNodeFactory nodeFactory,
+                                       boolean              finalize)
+    {
+        if (!(parent instanceof ISequence)) {
+            return null;
+        }
+
+        RuleApplicationResult result = new RuleApplicationResult();
+
+        int valueSelectionStartIndex = -1;
+
+        int index = 0;
+        while (index < parent.getChildren().size()) {
+            ITaskTreeNode child = parent.getChildren().get(index);
+
+            if ((child instanceof IEventTask) &&
+                (((IEventTask) child).getEventTarget() instanceof ITrackBar) &&
+                (((IEventTask) child).getEventType() instanceof ValueSelection))
+            {
+                if (valueSelectionStartIndex < 0) {
+                    // let the show begin
+                    valueSelectionStartIndex = index;
+                }
+            }
+            else if (valueSelectionStartIndex >= 0) {
+                // current child is no more value selection. But the preceding tasks were.
+                // Therefore,
+                // create an iteration with the different selectable values as selection children
+                handleValueSelections(valueSelectionStartIndex, index - 1, parent, builder,
+                                      nodeFactory, result);
+
+                return result;
+            }
+
+            index++;
+        }
+
+        if (valueSelectionStartIndex >= 0) {
+            if (finalize) {
+                handleValueSelections(valueSelectionStartIndex, parent.getChildren().size() - 1,
+                                      parent, builder, nodeFactory, result);
+            }
+            else {
+                result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
+            }
+        }
+
+        return result;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param valueSelectionStartIndex
+     * @param i
+     */
+    private void handleValueSelections(int                   startIndex,
+                                       int                   endIndex,
+                                       ITaskTreeNode         parent,
+                                       ITaskTreeBuilder      builder,
+                                       ITaskTreeNodeFactory  nodeFactory,
+                                       RuleApplicationResult result)
+    {
+        IIteration iteration = nodeFactory.createNewIteration();
+        result.addNewlyCreatedParentNode(iteration);
+
+        ISelection selection = nodeFactory.createNewSelection();
+        result.addNewlyCreatedParentNode(selection);
+        builder.setChild(iteration, selection);
+
+        for (int i = endIndex - startIndex; i >= 0; i--) {
+            addChildIfNecessary(selection, parent.getChildren().get(startIndex), builder,
+                                nodeFactory, result);
+            builder.removeChild((ISequence) parent, startIndex);
+        }
+
+        builder.addChild((ISequence) parent, startIndex, iteration);
+
+        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
+    }
+
+    /**
    *
    */
-  //-----------------------------------------------------------------------------------------------
-  TrackBarSelectionDetectionRule(NodeEqualityRuleManager nodeEqualityRuleManager)
-  {
-    super();
-    mNodeEqualityRuleManager = nodeEqualityRuleManager;
-  }
+    private void addChildIfNecessary(ISelection            parentSelection,
+                                     ITaskTreeNode         node,
+                                     ITaskTreeBuilder      builder,
+                                     ITaskTreeNodeFactory  nodeFactory,
+                                     RuleApplicationResult result)
+    {
+        for (int i = 0; i < parentSelection.getChildren().size(); i++) {
+            ITaskTreeNode child = parentSelection.getChildren().get(i);
 
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see TemporalRelationshipRule#apply(TaskTreeNode, TaskTreeBuilder, TaskTreeNodeFactory)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public RuleApplicationResult apply(TaskTreeNode        parent,
-                                     TaskTreeBuilder     builder,
-                                     TaskTreeNodeFactory nodeFactory,
-                                     boolean             finalize)
-  {
-    if (!(parent instanceof Sequence))
-    {
-      return null;
-    }
-    
-    RuleApplicationResult result = new RuleApplicationResult();
-    
-    int valueSelectionStartIndex = -1;
-    
-    int index = 0;
-    while (index < parent.getChildren().size())
-    {
-      TaskTreeNode child = parent.getChildren().get(index);
-      
-      if ((child instanceof InteractionTask) &&
-          (((InteractionTask) child).getGUIElement() instanceof TrackBar) &&
-          (((InteractionTask) child).getInteraction() instanceof ValueSelection))
-      {
-        if (valueSelectionStartIndex < 0)
-        {
-          // let the show begin
-          valueSelectionStartIndex = index;
-        }
-      }
-      else if (valueSelectionStartIndex >= 0)
-      {
-        // current child is no more value selection. But the preceding tasks were. Therefore,
-        // create an iteration with the different selectable values as selection children
-        handleValueSelections
-          (valueSelectionStartIndex, index - 1, parent, builder, nodeFactory, result);
-        
-        return result;
-      }
-      
-      index++;
-    }
-    
-    if (valueSelectionStartIndex >= 0)
-    {
-      if (finalize)
-      {
-        handleValueSelections(valueSelectionStartIndex, parent.getChildren().size() - 1, parent,
-                              builder, nodeFactory, result);
-      }
-      else
-      {
-        result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FEASIBLE);
-      }
-    }
-    
-    return result;
-  }
+            if (child instanceof IEventTask) {
+                // check, if the new node is a variant for the current event task
+                NodeEquality nodeEquality = nodeEqualityRuleManager.applyRules(child, node);
+                if (nodeEquality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)) {
+                    // the node is a variant. If it not structurally equal, a new sub-selection for
+                    // the existing and the new node must be created. Otherwise, the new node does
+                    // not need to be added
+                    if (!nodeEquality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)) {
+                        ISelection selection = nodeFactory.createNewSelection();
+                        result.addNewlyCreatedParentNode(selection);
+                        builder.addChild(parentSelection, selection);
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param valueSelectionStartIndex
-   * @param i
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void handleValueSelections(int                   startIndex,
-                                     int                   endIndex,
-                                     TaskTreeNode          parent,
-                                     TaskTreeBuilder       builder,
-                                     TaskTreeNodeFactory   nodeFactory,
-                                     RuleApplicationResult result)
-  {
-    Iteration iteration = nodeFactory.createNewIteration();
-    result.addNewlyCreatedParentNode(iteration);
-    
-    Selection selection = nodeFactory.createNewSelection();
-    result.addNewlyCreatedParentNode(selection);
-    builder.setChild(iteration, selection);
-    
-    for (int i = endIndex - startIndex; i >= 0 ; i--)
-    {
-      addChildIfNecessary
-        (selection, parent.getChildren().get(startIndex), builder, nodeFactory, result);
-      builder.removeChild((Sequence) parent, startIndex);
-    }
-    
-    builder.addChild((Sequence) parent, startIndex, iteration);
-    
-    result.setRuleApplicationStatus(RuleApplicationStatus.RULE_APPLICATION_FINISHED);
-  }
+                        builder.addChild(selection, child);
+                        builder.addChild(selection, node);
+                        builder.removeChild(parentSelection, child);
+                    }
 
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void addChildIfNecessary(Selection             parentSelection,
-                                   TaskTreeNode          node,
-                                   TaskTreeBuilder       builder,
-                                   TaskTreeNodeFactory   nodeFactory,
-                                   RuleApplicationResult result)
-  {
-    for (int i = 0; i < parentSelection.getChildren().size(); i++)
-    {
-      TaskTreeNode child = parentSelection.getChildren().get(i);
+                    return;
+                }
+            }
+            else if (child instanceof ISelection) {
+                // check, if the new node is a variant for the semantically equal children of the
+                // current
+                // selection
+                boolean addNode = true;
+                for (int j = 0; j < child.getChildren().size(); j++) {
+                    NodeEquality nodeEquality = nodeEqualityRuleManager.applyRules(child, node);
+                    if (!nodeEquality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)) {
+                        // the new node is no semantical equivalent of the nodes in the current
+                        // selection - break up
+                        addNode = false;
+                        break;
+                    }
+                    else if (nodeEquality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)) {
+                        addNode = false;
+                        break;
+                    }
+                }
 
-      if (child instanceof InteractionTask)
-      {
-        // check, if the new node is a variant for the current interaction task
-        NodeEquality nodeEquality = mNodeEqualityRuleManager.applyRules(child, node);
-        if (nodeEquality.getSemanticalEquality())
-        {
-          // the node is a variant. If it not structurally equal, a new sub-selection for the
-          // existing and the new node must be created. Otherwise, the new node does not need
-          // to be added
-          if (!nodeEquality.getStructuralEquality())
-          {
-            Selection selection = nodeFactory.createNewSelection();
-            result.addNewlyCreatedParentNode(selection);
-            builder.addChild(parentSelection, selection);
-
-            builder.addChild(selection, child);
-            builder.addChild(selection, node);
-            builder.removeChild(parentSelection, child);
-          }
-
-          return;
-        }
-      }
-      else if (child instanceof Selection)
-      {
-        // check, if the new node is a variant for the semantically equal children of the current
-        // selection
-        boolean addNode = true;
-        for (int j = 0; j < child.getChildren().size(); j++)
-        {
-          NodeEquality nodeEquality = mNodeEqualityRuleManager.applyRules(child, node);
-          if (!nodeEquality.getSemanticalEquality())
-          {
-            // the new node is no semantical equivalent of the nodes in the current selection -
-            // break up
-            addNode = false;
-            break;
-          }
-          else if (nodeEquality.getStructuralEquality())
-          {
-            addNode = false;
-            break;
-          }
+                if (addNode) {
+                    // the node is a semantical equivalent to all the nodes in the existing
+                    // sub-selection
+                    // but it is not structurally identical to either of them. Therefore add it.
+                    builder.addChild((ISelection) child, node);
+                    return;
+                }
+            }
         }
 
-        if (addNode)
-        {
-          // the node is a semantical equivalent to all the nodes in the existing sub-selection
-          // but it is not structurally identical to either of them. Therefore add it.
-          builder.addChild((Selection) child, node);
-          return;
-        }
-      }
+        // if we did not return in the previous checks, then the node must be added
+        builder.addChild(parentSelection, node);
     }
-    
-    // if we did not return in the previous checks, then the node must be added
-    builder.addChild(parentSelection, node);
-  }
 
 }
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/AbstractTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/AbstractTask.java	(revision 556)
+++ 	(revision )
@@ -1,22 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: AbstractTask.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 12:53:24 $
-// Project   : TaskTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public interface AbstractTask extends TaskTreeNode
-{
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/IEventTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/IEventTask.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/IEventTask.java	(revision 557)
@@ -0,0 +1,37 @@
+// Module    : $RCSfile: InteractionTask.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 19:44:52 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public interface IEventTask extends ITaskTreeNode {
+    
+    /**
+     * @return Returns the event type.
+     */
+    public IEventType getEventType();
+
+    /**
+     * @return Returns the event target.
+     */
+    public IEventTarget getEventTarget();
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public IEventTask clone();
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/IIteration.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/IIteration.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/IIteration.java	(revision 557)
@@ -0,0 +1,24 @@
+// Module    : $RCSfile: Iteration.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface IIteration extends ITemporalRelationship {
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public IIteration clone();
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ISelection.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ISelection.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ISelection.java	(revision 557)
@@ -0,0 +1,24 @@
+// Module    : $RCSfile: Selection.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ISelection extends ITemporalRelationship {
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public ISelection clone();
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ISequence.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ISequence.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ISequence.java	(revision 557)
@@ -0,0 +1,24 @@
+// Module    : $RCSfile: Sequence.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ISequence extends ITemporalRelationship {
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public ISequence clone();
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTree.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTree.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTree.java	(revision 557)
@@ -0,0 +1,37 @@
+// Module    : $RCSfile: TaskTree.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+import java.util.Map;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ITaskTree extends Cloneable {
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public ITaskTreeNode getRoot();
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public Map<ITaskTreeNode, ITaskTreeNodeInfo> getTaskMap();
+
+    /**
+     *
+     */
+    public ITaskTree clone();
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeBuilder.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeBuilder.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeBuilder.java	(revision 557)
@@ -0,0 +1,83 @@
+// Module    : $RCSfile: TaskTreeBuilder.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ITaskTreeBuilder {
+
+    /**
+     * TODO: comment
+     * 
+     * @param sequence
+     * @param task
+     */
+    void addChild(ISequence parent, ITaskTreeNode child);
+
+    /**
+     * TODO: comment
+     * 
+     * @param parent
+     * @param index
+     * @param sequence
+     */
+    void addChild(ISequence parent, int index, ITaskTreeNode child);
+
+    /**
+     * TODO: comment
+     * 
+     * @param sequence
+     * @param task
+     */
+    void addChild(ISelection parent, ITaskTreeNode child);
+
+    /**
+     * TODO: comment
+     * 
+     * @param sequence
+     * @param task
+     */
+    void addChild(ITextInputEventTask parent, ITaskTreeNode child);
+
+    /**
+     * TODO: comment
+     * 
+     * @param iteration
+     * @param newChild
+     */
+    void setChild(IIteration iteration, ITaskTreeNode newChild);
+
+    /**
+     * TODO: comment
+     * 
+     * @param parent
+     * @param i
+     */
+    void removeChild(ISequence parent, int index);
+
+    /**
+     * TODO: comment
+     * 
+     * @param parent
+     * @param i
+     */
+    void removeChild(ISelection parent, ITaskTreeNode child);
+
+    /**
+     * TODO: comment
+     * 
+     * @param parent
+     * @param i
+     */
+    void setDescription(ITaskTreeNode node, String description);
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNode.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNode.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNode.java	(revision 557)
@@ -0,0 +1,49 @@
+// Module    : $RCSfile: Task.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 19:42:29 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+import java.util.List;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public interface ITaskTreeNode extends Cloneable {
+
+    /**
+     *
+     */
+    public String getName();
+
+    /**
+     *
+     */
+    public String getDescription();
+
+    /**
+     *
+     */
+    public List<ITaskTreeNode> getChildren();
+
+    /**
+     *
+     */
+    public boolean equals(ITaskTreeNode taskTreeNode);
+
+    /**
+     *
+     */
+    public int hashCode();
+
+    /**
+     *
+     */
+    public ITaskTreeNode clone();
+    
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNodeFactory.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNodeFactory.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNodeFactory.java	(revision 557)
@@ -0,0 +1,66 @@
+// Module    : $RCSfile: TaskTreeNodeFactory.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ITaskTreeNodeFactory
+{
+
+  /**
+   * TODO: comment
+   *
+   * @param eventType
+   * @param eventTarget
+   * @return
+   */
+  IEventTask createNewEventTask(IEventType eventType, IEventTarget eventTarget);
+
+  /**
+   * TODO: comment
+   *
+   * @return
+   */
+  ISequence createNewSequence();
+
+  /**
+   * TODO: comment
+   *
+   * @return
+   */
+  ITextInputEventTask createNewTextInputEventTask(IEventTarget eventTarget);
+
+  /**
+   * TODO: comment
+   *
+   * @return
+   */
+  IIteration createNewIteration();
+
+  /**
+   * TODO: comment
+   *
+   * @return
+   */
+  ISelection createNewSelection();
+
+  /**
+   * TODO: comment
+   *
+   * @param rootSequence
+   * @return
+   */
+  ITaskTree createTaskTree(ITaskTreeNode root);
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNodeInfo.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNodeInfo.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITaskTreeNodeInfo.java	(revision 557)
@@ -0,0 +1,32 @@
+// Module    : $RCSfile: NodeInfo.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ITaskTreeNodeInfo {
+
+    /**
+     * 
+     */
+    public ITaskTreeNode getTask();
+
+    /**
+     * 
+     */
+    public int getNoOfOccurencesInTree();
+
+    /**
+     *
+     */
+    public long getLastUpdate();
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITemporalRelationship.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITemporalRelationship.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITemporalRelationship.java	(revision 557)
@@ -0,0 +1,22 @@
+// Module    : $RCSfile: TemporalRelationship.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 12.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 12.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ITemporalRelationship extends ITaskTreeNode {
+
+    /**
+     *
+     */
+    public ITemporalRelationship clone();
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITextInputEventTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITextInputEventTask.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/ITextInputEventTask.java	(revision 557)
@@ -0,0 +1,37 @@
+// Module    : $RCSfile: TextInputSequence.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 10.06.2012 $
+// Project   : TaskTreeIfc
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+
+package de.ugoe.cs.quest.tasktrees.treeifc;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 10.06.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public interface ITextInputEventTask extends IEventTask {
+    
+    /**
+     * 
+     */
+    public String getEnteredText();
+
+    /**
+     * TODO: comment
+     * 
+     * @param string
+     */
+    public void setEnteredText(String text);
+    
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    public ITextInputEventTask clone();
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/InteractionTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/InteractionTask.java	(revision 556)
+++ 	(revision )
@@ -1,38 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: InteractionTask.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 19:44:52 $
-// Project   : TaskTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public interface InteractionTask extends TaskTreeNode
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return Returns the interaction.
-   */
-  //-----------------------------------------------------------------------------------------------
-  public Interaction getInteraction();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return Returns the GUIElement.
-   */
-  //-----------------------------------------------------------------------------------------------
-  public GUIElement getGUIElement();
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/Iteration.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/Iteration.java	(revision 556)
+++ 	(revision )
@@ -1,21 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Iteration.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface Iteration extends TemporalRelationship
-{
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/NodeInfo.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/NodeInfo.java	(revision 556)
+++ 	(revision )
@@ -1,43 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: NodeInfo.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface NodeInfo
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * 
-   */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTreeNode getTask();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * 
-   */
-  //-----------------------------------------------------------------------------------------------
-  public int getNoOfOccurencesInTree();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public long getLastUpdate();
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/Selection.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/Selection.java	(revision 556)
+++ 	(revision )
@@ -1,21 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Selection.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface Selection extends TemporalRelationship
-{
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/Sequence.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/Sequence.java	(revision 556)
+++ 	(revision )
@@ -1,30 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Sequence.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface Sequence extends TemporalRelationship
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public Sequence clone();
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTree.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTree.java	(revision 556)
+++ 	(revision )
@@ -1,47 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTree.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-import java.util.Map;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface TaskTree extends Cloneable
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTreeNode getRoot();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public Map<TaskTreeNode, NodeInfo> getTaskMap();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTree clone();
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTreeBuilder.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTreeBuilder.java	(revision 556)
+++ 	(revision )
@@ -1,102 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTreeBuilder.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface TaskTreeBuilder
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param sequence
-   * @param task
-   */
-  //-----------------------------------------------------------------------------------------------
-  void addChild(Sequence parent, TaskTreeNode child);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param parent
-   * @param index
-   * @param sequence
-   */
-  //-----------------------------------------------------------------------------------------------
-  void addChild(Sequence parent, int index, TaskTreeNode child);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param sequence
-   * @param task
-   */
-  //-----------------------------------------------------------------------------------------------
-  void addChild(Selection parent, TaskTreeNode child);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param sequence
-   * @param task
-   */
-  //-----------------------------------------------------------------------------------------------
-  void addChild(TextInputInteractionTask parent, TaskTreeNode child);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param iteration
-   * @param newChild
-   */
-  //-----------------------------------------------------------------------------------------------
-  void setChild(Iteration iteration, TaskTreeNode newChild);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param parent
-   * @param i
-   */
-  //-----------------------------------------------------------------------------------------------
-  void removeChild(Sequence parent, int index);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param parent
-   * @param i
-   */
-  //-----------------------------------------------------------------------------------------------
-  void removeChild(Selection parent, TaskTreeNode child);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param parent
-   * @param i
-   */
-  //-----------------------------------------------------------------------------------------------
-  void setDescription(TaskTreeNode parent, String description);
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTreeNode.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTreeNode.java	(revision 556)
+++ 	(revision )
@@ -1,75 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Task.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 08.11.2011 19:42:29 $
-// Project   : TaskTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-import java.util.List;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public interface TaskTreeNode extends Cloneable
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public String getName();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  //public void addChild(TaskTreeNode child);
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  //public void removeChild(int index);
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public String getDescription();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  public List<TaskTreeNode> getChildren();
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public boolean equals(TaskTreeNode taskTreeNode);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public int hashCode();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  public TaskTreeNode clone();
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTreeNodeFactory.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TaskTreeNodeFactory.java	(revision 556)
+++ 	(revision )
@@ -1,82 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTreeNodeFactory.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface TaskTreeNodeFactory
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param GUIElement
-   * @param interaction
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  InteractionTask createNewInteractionTask(GUIElement  guiElement,
-                                           Interaction interaction);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  Sequence createNewSequence();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  TextInputInteractionTask createNewTextInputInteractionTask(GUIElement guiElement);
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  Iteration createNewIteration();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  Selection createNewSelection();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param rootSequence
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  TaskTree createTaskTree(TaskTreeNode root);
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TemporalRelationship.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TemporalRelationship.java	(revision 556)
+++ 	(revision )
@@ -1,21 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TemporalRelationship.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 12.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 12.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-// -------------------------------------------------------------------------------------------------
-public interface TemporalRelationship extends TaskTreeNode
-{
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TextInputInteractionTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeifc/TextInputInteractionTask.java	(revision 556)
+++ 	(revision )
@@ -1,44 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TextInputSequence.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 10.06.2012 $
-// Project   : TaskTreeIfc
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeifc;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 10.06.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public interface TextInputInteractionTask extends InteractionTask
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public TextInputInteractionTask clone();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * 
-   */
-  //-----------------------------------------------------------------------------------------------
-  public String getEnteredText();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param string
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void setEnteredText(String text);
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/EventTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/EventTask.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/EventTask.java	(revision 557)
@@ -0,0 +1,89 @@
+// Module    : $RCSfile: InteractionTask.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:57:52 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class EventTask extends TaskTreeNode implements IEventTask {
+    
+    /** */
+    private IEventType eventType;
+
+    /** */
+    private IEventTarget eventTarget;
+
+    /**
+     * @param eventType
+     * @param eventTarget
+     */
+    EventTask(IEventType eventType, IEventTarget eventTarget) {
+        super(eventType.getName() + "(" + eventTarget + ")");
+        super.setDescription(eventType + " on " + eventTarget);
+        this.eventType = eventType;
+        this.eventTarget = eventTarget;
+    }
+
+    /**
+     * @return Returns the interaction.
+     */
+    public IEventType getEventType() {
+        return eventType;
+    }
+
+    /**
+     * @return Returns the GUIElement.
+     */
+    public IEventTarget getEventTarget() {
+        return eventTarget;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.ctte.Task#equals(de.harms.ctte.Task)
+     */
+    @Override
+    public boolean equals(ITaskTreeNode task) {
+        if (!(task instanceof IEventTask)) {
+            return false;
+        }
+
+        IEventType otherType = ((IEventTask) task).getEventType();
+        IEventTarget otherTarget = ((IEventTask) task).getEventTarget();
+
+        if (((eventType == otherType) ||
+             ((eventType != null) && (eventType.equals(otherType)))) &&
+            ((eventTarget == otherTarget) ||
+             ((eventTarget != null) && (eventTarget.equals(otherTarget)))))
+        {
+            return true;
+        }
+
+        return false;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.harms.tasktrees.TreeNode#clone()
+     */
+    @Override
+    public EventTask clone() {
+        // Event type and target are unchangeable and do not need to be cloned
+        return (EventTask) super.clone();
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/InteractionTaskImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/InteractionTaskImpl.java	(revision 556)
+++ 	(revision )
@@ -1,106 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: InteractionTask.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 10:57:52 $
-// Project   : TaskTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public class InteractionTaskImpl extends TaskTreeNodeImpl implements InteractionTask
-{
-  /** */
-  private GUIElement mGUIElement;
-  
-  /** */
-  private Interaction mInteraction;
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param guiElement
-   * @param interaction
-   */
-  //-----------------------------------------------------------------------------------------------
-  InteractionTaskImpl(GUIElement guiElement, Interaction interaction)
-  {
-    super(interaction.getName() + "(" + guiElement + ")");
-    super.setDescription(interaction + " on " + guiElement);
-    mGUIElement = guiElement;
-    mInteraction = interaction;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return Returns the interaction.
-   */
-  //-----------------------------------------------------------------------------------------------
-  public Interaction getInteraction()
-  {
-    return mInteraction;
-  }
-
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return Returns the GUIElement.
-   */
-  //-----------------------------------------------------------------------------------------------
-  public GUIElement getGUIElement()
-  {
-    return mGUIElement;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.harms.ctte.Task#equals(de.harms.ctte.Task)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean equals(TaskTreeNode task)
-  {
-    if (!(task instanceof InteractionTask))
-    {
-      return false;
-    }
-    
-    GUIElement otherInteractionElem = ((InteractionTask) task).getGUIElement();
-    Interaction otherInteraction = ((InteractionTask) task).getInteraction();
-    
-    if ((((mGUIElement == null) && (otherInteractionElem == null)) ||
-         ((mGUIElement != null) && (mGUIElement.equals(otherInteractionElem)))) &&
-        (((mInteraction == null) && (otherInteraction == null)) ||
-         ((mInteraction != null) && (mInteraction.equals(otherInteraction)))))
-    {
-      return true;
-    }
-    
-    return false;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.harms.tasktrees.TreeNode#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public InteractionTaskImpl clone()
-  {
-    // GUI element and interaction are unchangeable and do not need to be cloned
-    return (InteractionTaskImpl) super.clone();
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Iteration.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Iteration.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Iteration.java	(revision 557)
@@ -0,0 +1,63 @@
+// Module    : $RCSfile: Iteration.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 19.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class Iteration extends TaskTreeNode implements IIteration {
+
+    /**
+     *
+     */
+    Iteration() {
+        super("Iteration");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNode#addChild(TaskTreeNode)
+     */
+    @Override
+    public void addChild(ITaskTreeNode child) {
+        // adding more children is not allowed
+        throw new UnsupportedOperationException
+          ("iterations may not have a list of children. Use setChild() instead.");
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param selection
+     * @return
+     */
+    public void setChild(ITaskTreeNode child) {
+        if (super.getChildren().size() > 0) {
+            super.removeChild(0);
+        }
+        super.addChild(child);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#clone()
+     */
+    @Override
+    public Iteration clone() {
+        return (Iteration) super.clone();
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/IterationImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/IterationImpl.java	(revision 556)
+++ 	(revision )
@@ -1,74 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Iteration.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class IterationImpl extends TaskTreeNodeImpl implements Iteration
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  IterationImpl()
-  {
-    super("Iteration");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNode#addChild(TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void addChild(TaskTreeNode child)
-  {
-    // adding more children is not allowed
-    throw new UnsupportedOperationException();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param selection
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  public void setChild(TaskTreeNode child)
-  {
-    if (super.getChildren().size() > 0)
-    {
-      super.removeChild(0);
-    }
-    super.addChild(child);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public IterationImpl clone()
-  {
-    return (IterationImpl) super.clone();
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/NodeInfo.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/NodeInfo.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/NodeInfo.java	(revision 557)
@@ -0,0 +1,96 @@
+// Module    : $RCSfile: NodeInfo.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 05.11.2011 19:24:14 $
+// Project   : TestTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeInfo;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class NodeInfo implements ITaskTreeNodeInfo {
+    
+    /** */
+    private ITaskTreeNode task;
+
+    /** */
+    private long lastUpdate;
+
+    /** */
+    private List<ITaskTreeNode> parentNodes = new ArrayList<ITaskTreeNode>();
+
+    /**
+     * @param node
+     */
+    NodeInfo(ITaskTreeNode task) {
+        this.task = task;
+        lastUpdate = System.currentTimeMillis();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.NodeInfo#getTask()
+     */
+    @Override
+    public ITaskTreeNode getTask() {
+        return task;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeimpl.NodeInfo#getNoOfOccurencesInTree()
+     */
+    @Override
+    public int getNoOfOccurencesInTree() {
+        return parentNodes.size();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeimpl.NodeInfo#getLastUpdate()
+     */
+    @Override
+    public long getLastUpdate() {
+        return lastUpdate;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     */
+    void addParent(ITaskTreeNode parent) {
+        parentNodes.add(parent);
+    }
+
+    /**
+     * TODO: comment
+     * 
+     */
+    void removeParent(ITaskTreeNode parent) {
+        parentNodes.remove(parent);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public synchronized String toString() {
+        return "NodeInfo(" + task + ", " + parentNodes.size() + " parents)";
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/NodeInfoImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/NodeInfoImpl.java	(revision 556)
+++ 	(revision )
@@ -1,114 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: NodeInfo.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 05.11.2011 19:24:14 $
-// Project   : TestTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.NodeInfo;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public class NodeInfoImpl implements NodeInfo
-{
-  /** */
-  private TaskTreeNode mTask;
-  
-  /** */
-  private long mLastUpdate;
-
-  /** */
-  private List<TaskTreeNode> mParentNodes = new ArrayList<TaskTreeNode>();
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @param node 
-   */
-  //-----------------------------------------------------------------------------------------------
-  NodeInfoImpl(TaskTreeNode task)
-  {
-    mTask = task;
-    mLastUpdate = System.currentTimeMillis();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.NodeInfo#getTask()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TaskTreeNode getTask()
-  {
-    return mTask;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeimpl.NodeInfo#getNoOfOccurencesInTree()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public int getNoOfOccurencesInTree()
-  {
-    return mParentNodes.size();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeimpl.NodeInfo#getLastUpdate()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public long getLastUpdate()
-  {
-    return mLastUpdate;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  void addParent(TaskTreeNode parent)
-  {
-    mParentNodes.add(parent);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  void removeParent(TaskTreeNode parent)
-  {
-    mParentNodes.remove(parent);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#toString()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public synchronized String toString()
-  {
-    return "NodeInfo(" + mTask + ", " + mParentNodes.size() + " parents)";
-  }
-  
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Selection.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Selection.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Selection.java	(revision 557)
@@ -0,0 +1,38 @@
+// Module    : $RCSfile: Selection.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 19.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class Selection extends TaskTreeNode implements ISelection {
+
+    /**
+     * TODO: comment
+     * 
+     * @param name
+     */
+    Selection() {
+        super("Selection");
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#clone()
+     */
+    @Override
+    public Selection clone() {
+        return (Selection) super.clone();
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SelectionImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SelectionImpl.java	(revision 556)
+++ 	(revision )
@@ -1,46 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Selection.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class SelectionImpl extends TaskTreeNodeImpl implements Selection
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param name
-   */
-  //-----------------------------------------------------------------------------------------------
-  SelectionImpl()
-  {
-    super("Selection");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public SelectionImpl clone()
-  {
-    return (SelectionImpl) super.clone();
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Sequence.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Sequence.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/Sequence.java	(revision 557)
@@ -0,0 +1,47 @@
+// Module    : $RCSfile: Sequence.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 19.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class Sequence extends TaskTreeNode implements ISequence {
+    
+    /**
+     * TODO: comment
+     * 
+     * @param name
+     */
+    Sequence() {
+        super("Sequence");
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param name
+     */
+    Sequence(String name) {
+        super(name);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeimpl.TaskTreeNodeImpl#clone()
+     */
+    @Override
+    public Sequence clone() {
+        return (Sequence) super.clone();
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SequenceImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/SequenceImpl.java	(revision 556)
+++ 	(revision )
@@ -1,57 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: Sequence.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 19.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 19.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class SequenceImpl extends TaskTreeNodeImpl implements Sequence
-{
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param name
-   */
-  //-----------------------------------------------------------------------------------------------
-  SequenceImpl()
-  {
-    super("Sequence");
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param name
-   */
-  //-----------------------------------------------------------------------------------------------
-  SequenceImpl(String name)
-  {
-    super(name);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeimpl.TaskTreeNodeImpl#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public SequenceImpl clone()
-  {
-    return (SequenceImpl) super.clone();
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTree.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTree.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTree.java	(revision 557)
@@ -0,0 +1,113 @@
+// Module    : $RCSfile: TaskTree.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeInfo;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class TaskTree implements ITaskTree {
+    
+    /** the map of nodes */
+    private Map<ITaskTreeNode, ITaskTreeNodeInfo> taskMap;
+
+    /** the root node of the task tree */
+    private ITaskTreeNode rootNode;
+
+    /**
+     * TODO: comment
+     * 
+     */
+    TaskTree(ITaskTreeNode rootNode) {
+        this.rootNode = rootNode;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTree#getRoot()
+     */
+    @Override
+    public ITaskTreeNode getRoot() {
+        return rootNode;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTree#getTaskMap()
+     */
+    @Override
+    public synchronized Map<ITaskTreeNode, ITaskTreeNodeInfo> getTaskMap() {
+        if (taskMap == null) {
+            taskMap = new HashMap<ITaskTreeNode, ITaskTreeNodeInfo>();
+            addNodeToMap(rootNode, null);
+        }
+        return taskMap;
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param rootNode
+     */
+    private void addNodeToMap(ITaskTreeNode node, ITaskTreeNode parent) {
+        NodeInfo nodeInfo = (NodeInfo) taskMap.get(node);
+
+        if (nodeInfo == null) {
+            nodeInfo = new NodeInfo(node);
+            taskMap.put(node, nodeInfo);
+        }
+
+        if (parent != null) {
+            // through first removing an existing parent it is assured, that a parent is recorded
+            // only once. This is needed, because parent may be reused in a tree as well, but we
+            // always iterate the whole tree
+            nodeInfo.removeParent(parent);
+            nodeInfo.addParent(parent);
+        }
+
+        for (ITaskTreeNode child : node.getChildren()) {
+            addNodeToMap(child, node);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#clone()
+     */
+    @Override
+    public TaskTree clone() {
+        TaskTree clone = null;
+        try {
+            clone = (TaskTree) super.clone();
+
+            clone.rootNode = rootNode.clone();
+
+            // the clone will create the task map itself, when it is first retrieved
+            clone.taskMap = null;
+
+        }
+        catch (CloneNotSupportedException e) {
+            // this should never happen. Therefore simply dump the exception
+            e.printStackTrace();
+        }
+
+        return clone;
+    }
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeBuilder.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeBuilder.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeBuilder.java	(revision 557)
@@ -0,0 +1,175 @@
+// Module    : $RCSfile: TaskTreeBuilderImpl.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITextInputEventTask;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class TaskTreeBuilder implements ITaskTreeBuilder {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(Sequence, TaskTreeNode)
+     */
+    @Override
+    public void addChild(ISequence parent, ITaskTreeNode child) {
+        if (!(parent instanceof Sequence)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        addChildInternal(parent, -1, child);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(Sequence, int, TaskTreeNode)
+     */
+    @Override
+    public void addChild(ISequence parent, int index, ITaskTreeNode child) {
+        if (!(parent instanceof Sequence)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        addChildInternal(parent, index, child);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(Selection, TaskTreeNode)
+     */
+    @Override
+    public void addChild(ISelection parent, ITaskTreeNode child) {
+        if (!(parent instanceof Selection)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        addChildInternal(parent, -1, child);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(de.ugoe.cs.tasktree.treeifc.
+     * TextInputEventTask, de.ugoe.cs.tasktree.treeifc.TaskTreeNode)
+     */
+    @Override
+    public void addChild(ITextInputEventTask parent, ITaskTreeNode child) {
+        if (!(parent instanceof TextInputEventTask)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        addChildInternal(parent, -1, child);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#setChild(Iteration, TaskTreeNode)
+     */
+    @Override
+    public void setChild(IIteration iteration, ITaskTreeNode newChild) {
+        if (!(iteration instanceof Iteration)) {
+            throw new IllegalArgumentException
+                ("illegal type of iteration provided: " + iteration.getClass());
+        }
+
+        if (!(newChild instanceof TaskTreeNode)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + newChild.getClass());
+        }
+
+        ((Iteration) iteration).setChild(newChild);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#removeChild(Sequence, int)
+     */
+    @Override
+    public void removeChild(ISequence parent, int index) {
+        if (!(parent instanceof TaskTreeNode)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        ((TaskTreeNode) parent).removeChild(index);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#removeChild(Selection, TaskTreeNode)
+     */
+    @Override
+    public void removeChild(ISelection parent, ITaskTreeNode child) {
+        if (!(parent instanceof TaskTreeNode)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        for (int i = 0; i < parent.getChildren().size(); i++) {
+            if ((parent.getChildren().get(i) == child) ||
+                ((parent.getChildren().get(i) != null) &&
+                 (parent.getChildren().get(i).equals(child))))
+            {
+                ((TaskTreeNode) parent).removeChild(i);
+                break;
+            }
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#setDescription(TaskTreeNode, String)
+     */
+    @Override
+    public void setDescription(ITaskTreeNode parent, String description) {
+        if (!(parent instanceof TaskTreeNode)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + parent.getClass());
+        }
+
+        ((TaskTreeNode) parent).setDescription(description);
+    }
+
+    /**
+   * 
+   */
+    private void addChildInternal(ITaskTreeNode parent, int index, ITaskTreeNode child) {
+        if (!(child instanceof TaskTreeNode)) {
+            throw new IllegalArgumentException
+                ("illegal type of task tree node provided: " + child.getClass());
+        }
+
+        if (index > -1) {
+            ((TaskTreeNode) parent).addChild(index, child);
+        }
+        else {
+            ((TaskTreeNode) parent).addChild(child);
+        }
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeBuilderImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeBuilderImpl.java	(revision 556)
+++ 	(revision )
@@ -1,221 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTreeBuilderImpl.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeBuilder;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TextInputInteractionTask;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeBuilderImpl implements TaskTreeBuilder
-{
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(Sequence, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void addChild(Sequence parent, TaskTreeNode child)
-  {
-    if (!(parent instanceof SequenceImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    addChildInternal(parent, -1, child);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(Sequence, int, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void addChild(Sequence parent, int index, TaskTreeNode child)
-  {
-    if (!(parent instanceof SequenceImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    addChildInternal(parent, index, child);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(Selection, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void addChild(Selection parent, TaskTreeNode child)
-  {
-    if (!(parent instanceof SelectionImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    addChildInternal(parent, -1, child);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#addChild(de.ugoe.cs.tasktree.treeifc.TextInputInteractionTask, de.ugoe.cs.tasktree.treeifc.TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void addChild(TextInputInteractionTask parent, TaskTreeNode child)
-  {
-    if (!(parent instanceof TextInputInteractionTaskImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    addChildInternal(parent, -1, child);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#setChild(Iteration, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void setChild(Iteration iteration, TaskTreeNode newChild)
-  {
-    if (!(iteration instanceof IterationImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of iteration provided: " + iteration.getClass());
-    }
-
-    if (!(newChild instanceof TaskTreeNodeImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + newChild.getClass());
-    }
-    
-    ((IterationImpl) iteration).setChild(determineNode(newChild));
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#removeChild(Sequence, int)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void removeChild(Sequence parent, int index)
-  {
-    if (!(parent instanceof TaskTreeNodeImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    ((TaskTreeNodeImpl) parent).removeChild(index);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#removeChild(Selection, TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void removeChild(Selection parent, TaskTreeNode child)
-  {
-    if (!(parent instanceof TaskTreeNodeImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    for (int i = 0; i < parent.getChildren().size(); i++)
-    {
-      if ((parent.getChildren().get(i) == child) ||
-          ((parent.getChildren().get(i) != null) && (parent.getChildren().get(i).equals(child))))
-      {
-        ((TaskTreeNodeImpl) parent).removeChild(i);
-        break;
-      }
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeBuilder#setDescription(TaskTreeNode, String)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void setDescription(TaskTreeNode parent, String description)
-  {
-    if (!(parent instanceof TaskTreeNodeImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + parent.getClass());
-    }
-
-    ((TaskTreeNodeImpl) parent).setDescription(description);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * 
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void addChildInternal(TaskTreeNode parent, int index, TaskTreeNode child)
-  {
-    if (!(child instanceof TaskTreeNodeImpl))
-    {
-      throw new IllegalArgumentException
-        ("illegal type of task tree node provided: " + child.getClass());
-    }
-    
-    if (index > -1)
-    {
-      ((TaskTreeNodeImpl) parent).addChild(index, determineNode(child));
-    }
-    else
-    {
-      ((TaskTreeNodeImpl) parent).addChild(determineNode(child));
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param newChild
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private TaskTreeNode determineNode(TaskTreeNode newNode)
-  {
-    return newNode;
-    /*TaskTreeNode node = mTaskMap.get(newNode);
-    if (node == null)
-    {
-      node = newNode;
-      mTaskMap.put(node, node);
-    }
-    
-    return node;*/
-  }
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeImpl.java	(revision 556)
+++ 	(revision )
@@ -1,131 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTree.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import java.util.HashMap;
-import java.util.Map;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.NodeInfo;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTree;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeImpl implements TaskTree
-{
-  /** the map of nodes */
-  private Map<TaskTreeNode, NodeInfo> mTaskMap;
-  
-  /** the root node of the task tree */
-  private TaskTreeNode mRootNode;
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   */
-  //-----------------------------------------------------------------------------------------------
-  TaskTreeImpl(TaskTreeNode rootNode)
-  {
-    mRootNode = rootNode;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTree#getRoot()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TaskTreeNode getRoot()
-  {
-    return mRootNode;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTree#getTaskMap()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public synchronized Map<TaskTreeNode, NodeInfo> getTaskMap()
-  {
-    if (mTaskMap == null)
-    {
-      mTaskMap = new HashMap<TaskTreeNode, NodeInfo>();
-      addNodeToMap(mRootNode, null);
-    }
-    return mTaskMap;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param rootNode
-   */
-  //-----------------------------------------------------------------------------------------------
-  private void addNodeToMap(TaskTreeNode node, TaskTreeNode parent)
-  {
-    NodeInfoImpl nodeInfo = (NodeInfoImpl) mTaskMap.get(node);
-    
-    if (nodeInfo == null)
-    {
-      nodeInfo = new NodeInfoImpl(node);
-      mTaskMap.put(node, nodeInfo);
-    }
-    
-    if (parent != null)
-    {
-      // through first removing an existing parent it is assured, that a parent is recorded
-      // only once. This is needed, because parent may be reused in a tree as well, but we always
-      // iterate the whole tree
-      nodeInfo.removeParent(parent);
-      nodeInfo.addParent(parent);
-    }
-    
-    for (TaskTreeNode child : node.getChildren())
-    {
-      addNodeToMap(child, node);
-    }
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TaskTreeImpl clone()
-  {
-    TaskTreeImpl clone = null;
-    try
-    {
-      clone = (TaskTreeImpl) super.clone();
-      
-      clone.mRootNode = mRootNode.clone();
-      
-      // the clone will create the task map itself, when it is first retrieved
-      clone.mTaskMap = null;
-      
-    }
-    catch (CloneNotSupportedException e)
-    {
-      // this should never happen. Therefore simply dump the exception
-      e.printStackTrace();
-    }
-    
-    return clone;
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNode.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNode.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNode.java	(revision 557)
@@ -0,0 +1,226 @@
+// Module    : $RCSfile: TreeNode.java,v $
+// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 11:00:46 $
+// Project   : TaskTreePerformanceTest
+// Creation  : 2011 by Patrick
+// Copyright : Patrick Harms, 2011
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: $
+ * @author 2011, last modified by $Author: $
+ */
+public class TaskTreeNode implements ITaskTreeNode {
+    /** */
+    private static int temporalId = 0;
+
+    /** */
+    private String name;
+
+    /** */
+    private String description;
+
+    /** */
+    private int id;
+
+    /** children */
+    private List<ITaskTreeNode> children;
+
+    /**
+     * 
+     */
+    public TaskTreeNode(String name) {
+        this.name = name;
+        id = getNewId();
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @return
+     */
+    private static synchronized int getNewId() {
+        if (temporalId == Integer.MAX_VALUE) {
+            temporalId = 0;
+        }
+
+        return temporalId++;
+    }
+
+    /**
+     * @return Returns the name.
+     */
+    public String getName() {
+        return name;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNode#getDescription()
+     */
+    @Override
+    public String getDescription() {
+        return description;
+    }
+
+    /**
+     * 
+     */
+    public synchronized List<ITaskTreeNode> getChildren() {
+        if ((children == null) || (children.size() == 0)) {
+            return new ArrayList<ITaskTreeNode>();
+        }
+
+        return children.subList(0, children.size());
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode#equals(TaskTreeNode)
+     */
+    @Override
+    public boolean equals(ITaskTreeNode taskTreeNode) {
+        if (!this.getClass().isInstance(taskTreeNode)) {
+            return false;
+        }
+
+        if (taskTreeNode.hashCode() != hashCode()) {
+            return false;
+        }
+
+        TaskTreeNode other = (TaskTreeNode) taskTreeNode;
+
+        if (id != other.id) {
+            return false;
+        }
+
+        if (!name.equals(other.name)) {
+            return false;
+        }
+
+        synchronized (other) {
+            if (children == null) {
+                return (other.children == null);
+            }
+            else if (other.children == null) {
+                return (children == null);
+            }
+            else if (other.children.size() != children.size()) {
+                return false;
+            }
+
+            for (int i = 0; i < children.size(); i++) {
+                if (!children.get(i).equals(other.children.get(i))) {
+                    return false;
+                }
+            }
+        }
+
+        return true;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#hashCode()
+     */
+    @Override
+    public synchronized int hashCode() {
+        return getClass().getSimpleName().hashCode();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public synchronized String toString() {
+        if (children == null) {
+            return name + "(" + id + ")";
+        }
+        else {
+            return name + "(" + id + ", " + children.size() + " children)";
+        }
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param i
+     * @return
+     */
+    void setDescription(String description) {
+        this.description = description;
+    }
+
+    /**
+     * 
+     */
+    synchronized void addChild(ITaskTreeNode child) {
+        if (children == null) {
+            children = new ArrayList<ITaskTreeNode>();
+        }
+
+        children.add(child);
+    }
+
+    /**
+     * 
+     */
+    synchronized void addChild(int index, ITaskTreeNode child) {
+        if (children == null) {
+            children = new ArrayList<ITaskTreeNode>();
+        }
+
+        children.add(index, child);
+    }
+
+    /**
+     * TODO: comment
+     * 
+     * @param i
+     * @return
+     */
+    synchronized ITaskTreeNode removeChild(int index) {
+        return children.remove(index);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#clone()
+     */
+    @Override
+    public ITaskTreeNode clone() {
+        TaskTreeNode clone = null;
+        try {
+            clone = (TaskTreeNode) super.clone();
+
+            if (children != null) {
+                clone.children = new ArrayList<ITaskTreeNode>();
+
+                for (ITaskTreeNode child : children) {
+                    clone.children.add(child.clone());
+                }
+            }
+
+        }
+        catch (CloneNotSupportedException e) {
+            // this should never happen. Therefore simply dump the exception
+            e.printStackTrace();
+        }
+
+        return clone;
+    }
+
+}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeFactory.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeFactory.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeFactory.java	(revision 557)
@@ -0,0 +1,91 @@
+// Module    : $RCSfile: TaskTreeNodeFactoryImpl.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
+// Project   : TaskTreeCreator
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.IEventType;
+import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
+import de.ugoe.cs.quest.tasktrees.treeifc.IIteration;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISelection;
+import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITextInputEventTask;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 21.02.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class TaskTreeNodeFactory implements ITaskTreeNodeFactory {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see TaskTreeNodeFactory#createNewEventTask(IEventType, IEventTarget)
+     */
+    @Override
+    public IEventTask createNewEventTask(IEventType eventType, IEventTarget eventTarget) {
+        return new EventTask(eventType, eventTarget);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewSequence()
+     */
+    @Override
+    public ISequence createNewSequence() {
+        return new Sequence();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewTextInputEventTask(eventTarget)
+     */
+    @Override
+    public ITextInputEventTask createNewTextInputEventTask(IEventTarget eventTarget) {
+        return new TextInputEventTask(eventTarget);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewIteration()
+     */
+    @Override
+    public IIteration createNewIteration() {
+        return new Iteration();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewSelection()
+     */
+    @Override
+    public ISelection createNewSelection() {
+        return new Selection();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see
+     * de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createTaskTree(de.ugoe.cs.tasktree.treeifc
+     * .TaskTreeNode)
+     */
+    @Override
+    public ITaskTree createTaskTree(ITaskTreeNode root) {
+        return new TaskTree(root);
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeFactoryImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeFactoryImpl.java	(revision 556)
+++ 	(revision )
@@ -1,99 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TaskTreeNodeFactoryImpl.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 21.02.2012 $
-// Project   : TaskTreeCreator
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.Interaction;
-import de.ugoe.cs.quest.tasktrees.treeifc.InteractionTask;
-import de.ugoe.cs.quest.tasktrees.treeifc.Iteration;
-import de.ugoe.cs.quest.tasktrees.treeifc.Selection;
-import de.ugoe.cs.quest.tasktrees.treeifc.Sequence;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTree;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNodeFactory;
-import de.ugoe.cs.quest.tasktrees.treeifc.TextInputInteractionTask;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 21.02.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeNodeFactoryImpl implements TaskTreeNodeFactory
-{
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see TaskTreeNodeFactory#createNewInteractionTask(GUIElement, Interaction)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public InteractionTask createNewInteractionTask(GUIElement  guiElement,
-                                                  Interaction interaction)
-  {
-    return new InteractionTaskImpl(guiElement, interaction);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewSequence()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public Sequence createNewSequence()
-  {
-    return new SequenceImpl();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewTextInputInteractionTask()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TextInputInteractionTask createNewTextInputInteractionTask(GUIElement guiElement)
-  {
-    return new TextInputInteractionTaskImpl(guiElement);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewIteration()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public Iteration createNewIteration()
-  {
-    return new IterationImpl();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createNewSelection()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public Selection createNewSelection()
-  {
-    return new SelectionImpl();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNodeFactory#createTaskTree(de.ugoe.cs.tasktree.treeifc.TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TaskTree createTaskTree(TaskTreeNode root)
-  {
-    return new TaskTreeImpl(root);
-  }
-
-}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TaskTreeNodeImpl.java	(revision 556)
+++ 	(revision )
@@ -1,277 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TreeNode.java,v $
-// Version   : $Revision: 0.0 $  $Author: Patrick $  $Date: 06.11.2011 11:00:46 $
-// Project   : TaskTreePerformanceTest
-// Creation  : 2011 by Patrick
-// Copyright : Patrick Harms, 2011
-//-------------------------------------------------------------------------------------------------
-
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode;
-
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- *
- * @version $Revision: $ $Date: $
- * @author  2011, last modified by $Author: $
- */
-//-------------------------------------------------------------------------------------------------
-public class TaskTreeNodeImpl implements TaskTreeNode
-{
-  /** */
-  private static int sTemporalId = 0;
-
-  /** */
-  private String mName;
-
-  /** */
-  private String mDescription;
-  
-  /** */
-  private int mId;
-  
-  /** children */
-  private List<TaskTreeNode> mChildren;
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  TaskTreeNodeImpl(String name)
-  {
-    mName = name;
-    mId = getNewId();
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @return
-   */
-  //-----------------------------------------------------------------------------------------------
-  private static synchronized int getNewId()
-  {
-    if (sTemporalId == Integer.MAX_VALUE)
-    {
-      sTemporalId = 0;
-    }
-    
-    return sTemporalId++;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * @return Returns the name.
-   */
-  //-----------------------------------------------------------------------------------------------
-  public String getName()
-  {
-    return mName;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TaskTreeNode#getDescription()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public String getDescription()
-  {
-    return mDescription;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  public synchronized List<TaskTreeNode> getChildren()
-  {
-    if ((mChildren == null) || (mChildren.size() == 0))
-    {
-      return new ArrayList<TaskTreeNode>();
-    }
-    
-    return mChildren.subList(0, mChildren.size());
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.quest.tasktrees.treeifc.TaskTreeNode#equals(TaskTreeNode)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public boolean equals(TaskTreeNode taskTreeNode)
-  {
-    if (!this.getClass().isInstance(taskTreeNode))
-    {
-      return false;
-    }
-    
-    if (taskTreeNode.hashCode() != hashCode())
-    {
-      return false;
-    }
-    
-    TaskTreeNodeImpl other = (TaskTreeNodeImpl) taskTreeNode;
-    
-    if (mId != other.mId)
-    {
-      return false;
-    }
-    
-    if (!mName.equals(other.mName))
-    {
-      return false;
-    }
-    
-    synchronized (other)
-    {
-      if (mChildren == null)
-      {
-        return (other.mChildren == null);
-      }
-      else if (other.mChildren == null)
-      {
-        return (mChildren == null);
-      }
-      else if (other.mChildren.size() != mChildren.size())
-      {
-        return false;
-      }
-      
-      for (int i = 0; i < mChildren.size(); i++)
-      {
-        if (!mChildren.get(i).equals(other.mChildren.get(i)))
-        {
-          return false;
-        }
-      }
-    }
-
-    return true;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#hashCode()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public synchronized int hashCode()
-  {
-    return getClass().getSimpleName().hashCode();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#toString()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public synchronized String toString()
-  {
-    if (mChildren == null)
-    {
-      return mName + "(" + mId + ")";
-    }
-    else
-    {
-      return mName + "(" + mId + ", " + mChildren.size() + " children)";
-    }
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param i
-   * @return 
-   */
-  //-----------------------------------------------------------------------------------------------
-  void setDescription(String description)
-  {
-    mDescription = description;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  synchronized void addChild(TaskTreeNode child)
-  {
-    if (mChildren == null)
-    {
-      mChildren = new ArrayList<TaskTreeNode>();
-    }
-    
-    mChildren.add(child);
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   */
-  //-----------------------------------------------------------------------------------------------
-  synchronized void addChild(int index, TaskTreeNode child)
-  {
-    if (mChildren == null)
-    {
-      mChildren = new ArrayList<TaskTreeNode>();
-    }
-    
-    mChildren.add(index, child);
-  }
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param i
-   * @return 
-   */
-  //-----------------------------------------------------------------------------------------------
-  synchronized TaskTreeNode removeChild(int index)
-  {
-    return mChildren.remove(index);
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TaskTreeNode clone()
-  {
-    TaskTreeNodeImpl clone = null;
-    try
-    {
-      clone = (TaskTreeNodeImpl) super.clone();
-      
-      if (mChildren != null)
-      {
-        clone.mChildren = new ArrayList<TaskTreeNode>();
-      
-        for (TaskTreeNode child : mChildren)
-        {
-          clone.mChildren.add(child.clone());
-        }
-      }
-      
-    }
-    catch (CloneNotSupportedException e)
-    {
-      // this should never happen. Therefore simply dump the exception
-      e.printStackTrace();
-    }
-    
-    return clone;
-  }
-
-}
Index: /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputEventTask.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputEventTask.java	(revision 557)
+++ /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputEventTask.java	(revision 557)
@@ -0,0 +1,81 @@
+// Module    : $RCSfile: TextInputSequenceImpl.java,v $
+// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 10.06.2012 $
+// Project   : TaskTreeImpl
+// Creation  : 2012 by patrick
+// Copyright : Patrick Harms, 2012
+
+package de.ugoe.cs.quest.tasktrees.treeimpl;
+
+import de.ugoe.cs.quest.eventcore.IEventTarget;
+import de.ugoe.cs.quest.eventcore.gui.TextInput;
+import de.ugoe.cs.quest.tasktrees.treeifc.ITextInputEventTask;
+
+/**
+ * TODO comment
+ * 
+ * @version $Revision: $ $Date: 10.06.2012$
+ * @author 2012, last modified by $Author: patrick$
+ */
+public class TextInputEventTask extends EventTask implements ITextInputEventTask {
+
+    /** the text, that was finally entered in this sequence without all backspaces, etc. */
+    private String enteredText;
+
+    /**
+     * TODO: comment
+     * 
+     * @param name
+     */
+    TextInputEventTask(IEventTarget eventTarget) {
+        super(new TextInput(), eventTarget);
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeimpl.TaskTreeNodeImpl#clone()
+     */
+    @Override
+    public TextInputEventTask clone() {
+        // entered text is unchangeable and does not need to be cloned
+        return (TextInputEventTask) super.clone();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TextInputSequence#getEnteredText()
+     */
+    @Override
+    public String getEnteredText() {
+        return enteredText;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see de.ugoe.cs.tasktree.treeifc.TextInputSequence#setEnteredText(java.lang.String)
+     */
+    @Override
+    public void setEnteredText(String text) {
+        enteredText = text;
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see java.lang.Object#toString()
+     */
+    @Override
+    public synchronized String toString() {
+        if (super.getChildren() == null) {
+            return super.getName();
+        }
+        else {
+            return
+                "TextInputInteraction(\"" + enteredText + "\", " + super.getChildren().size() +
+                " children)";
+        }
+    }
+
+}
Index: unk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputInteractionTaskImpl.java
===================================================================
--- /trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/treeimpl/TextInputInteractionTaskImpl.java	(revision 556)
+++ 	(revision )
@@ -1,94 +1,0 @@
-//-------------------------------------------------------------------------------------------------
-// Module    : $RCSfile: TextInputSequenceImpl.java,v $
-// Version   : $Revision: 0.0 $  $Author: patrick $  $Date: 10.06.2012 $
-// Project   : TaskTreeImpl
-// Creation  : 2012 by patrick
-// Copyright : Patrick Harms, 2012
-//-------------------------------------------------------------------------------------------------
-package de.ugoe.cs.quest.tasktrees.treeimpl;
-
-import de.ugoe.cs.quest.eventcore.guimodel.GUIElement;
-import de.ugoe.cs.quest.eventcore.userinteraction.TextInput;
-import de.ugoe.cs.quest.tasktrees.treeifc.TextInputInteractionTask;
-
-//-------------------------------------------------------------------------------------------------
-/**
- * TODO comment
- * 
- * @version $Revision: $ $Date: 10.06.2012$
- * @author 2012, last modified by $Author: patrick$
- */
-//-------------------------------------------------------------------------------------------------
-public class TextInputInteractionTaskImpl extends InteractionTaskImpl
-  implements TextInputInteractionTask
-{
-
-  /** the text, that was finally entered in this sequence without all backspaces, etc. */
-  private String mEnteredText;
-  
-  //-----------------------------------------------------------------------------------------------
-  /**
-   * TODO: comment
-   *
-   * @param name
-   */
-  //-----------------------------------------------------------------------------------------------
-  TextInputInteractionTaskImpl(GUIElement guiElement)
-  {
-    super(guiElement, new TextInput());
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeimpl.TaskTreeNodeImpl#clone()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public TextInputInteractionTaskImpl clone()
-  {
-    // entered text is unchangeable and does not need to be cloned
-    return (TextInputInteractionTaskImpl) super.clone();
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TextInputSequence#getEnteredText()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public String getEnteredText()
-  {
-    return mEnteredText;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see de.ugoe.cs.tasktree.treeifc.TextInputSequence#setEnteredText(java.lang.String)
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public void setEnteredText(String text)
-  {
-    mEnteredText = text;
-  }
-
-  //-----------------------------------------------------------------------------------------------
-  /* (non-Javadoc)
-   * @see java.lang.Object#toString()
-   */
-  //-----------------------------------------------------------------------------------------------
-  @Override
-  public synchronized String toString()
-  {
-    if (super.getChildren() == null)
-    {
-      return super.getName();
-    }
-    else
-    {
-      return "TextInputInteraction(\"" + mEnteredText + "\", " + super.getChildren().size() +
-        " children)";
-    }
-  }
-  
-}
