Index: /trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/AbstractUsabilityEvaluationTC.java
===================================================================
--- /trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/AbstractUsabilityEvaluationTC.java	(revision 1209)
+++ /trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/AbstractUsabilityEvaluationTC.java	(revision 1210)
@@ -16,30 +16,21 @@
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.util.ArrayList;
+import java.util.List;
 import java.util.logging.Level;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
 
 import org.junit.Before;
 
-import de.ugoe.cs.autoquest.eventcore.Event;
-import de.ugoe.cs.autoquest.eventcore.gui.TextInput;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNodeFactory;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskTreeBuilder;
-import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskTreeNodeFactory;
-import de.ugoe.cs.autoquest.test.DummyGUIElement;
-import de.ugoe.cs.autoquest.test.DummyInteraction;
-import de.ugoe.cs.autoquest.test.DummyTextField;
-import de.ugoe.cs.autoquest.usability.UsabilityDefect;
-import de.ugoe.cs.autoquest.usability.UsabilityEvaluationResult;
+import de.ugoe.cs.autoquest.tasktrees.TaskTreeDecoder;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstanceList;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession;
+import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskBuilder;
+import de.ugoe.cs.autoquest.tasktrees.treeimpl.TaskFactory;
 import de.ugoe.cs.util.console.TextConsole;
 
@@ -53,8 +44,8 @@
 
     /** */
-    private ITaskTreeBuilder taskTreeBuilder = new TaskTreeBuilder();
+    private ITaskBuilder taskBuilder = new TaskBuilder();
 
     /** */
-    private ITaskTreeNodeFactory taskTreeNodeFactory = new TaskTreeNodeFactory();
+    private ITaskFactory taskFactory = new TaskFactory();
 
     /**
@@ -69,15 +60,15 @@
    *
    */
-    protected ITaskTree createTaskTree(String spec) {
-        Matcher matcher =
-            Pattern.compile("(\\s*(\\w+)\\s*(\\(((\\w*\\s*)*)\\))?\\s*(\\{))|(\\})").matcher(spec);
+    protected ITaskModel createTaskModel(String spec) {
+        TaskTreeDecoder decoder = new TaskTreeDecoder(taskFactory, taskBuilder);
+        
+        ITaskInstanceList list = decoder.decode(spec);
+        
+        assertTrue(list instanceof IUserSession);
+        
+        List<IUserSession> sessions = new ArrayList<IUserSession>();
+        sessions.add((IUserSession) list);
 
-        if (!matcher.find()) {
-            if (!matcher.hitEnd()) {
-                throw new IllegalArgumentException("could not parse task specification");
-            }
-        }
-
-        return taskTreeNodeFactory.createTaskTree(parseTask(matcher, new int[1]));
+        return taskFactory.createTaskModel(sessions);
     }
 
@@ -110,117 +101,3 @@
     }
 
-    /**
-   * 
-   */
-    private ITaskTreeNode parseTask(Matcher tokenMatcher, int[] typeNumbers) {
-        String firstToken = tokenMatcher.group();
-
-        if ("}".equals(firstToken)) {
-            throw new IllegalArgumentException("found a closing bracket at an unexpected place");
-        }
-
-        ITaskTreeNode treeNode = instantiateTreeNode(tokenMatcher, typeNumbers);
-
-        if (!tokenMatcher.find()) {
-            throw new IllegalArgumentException("could not parse task specification");
-        }
-
-        firstToken = tokenMatcher.group();
-
-        if (!"}".equals(firstToken)) {
-            ITaskTreeNode child = null;
-
-            do {
-                child = parseTask(tokenMatcher, typeNumbers);
-
-                if (child != null) {
-                    addChild(treeNode, child);
-
-                    if (!tokenMatcher.find()) {
-                        throw new IllegalArgumentException("could not parse task specification");
-                    }
-
-                    firstToken = tokenMatcher.group();
-
-                    if ("}".equals(firstToken)) {
-                        break;
-                    }
-                }
-
-            }
-            while (child != null);
-
-        }
-
-        return treeNode;
-    }
-
-    /**
-     * TODO: comment
-     * 
-     * @param group
-     * @return
-     */
-    private ITaskTreeNode instantiateTreeNode(Matcher tokenMatcher, int[] typeNumbers) {
-        String type = tokenMatcher.group(2);
-        String additionalInfo = tokenMatcher.group(4);
-
-        if ("Interaction".equals(type)) {
-            return taskTreeNodeFactory.createNewEventTask
-                (new DummyInteraction("dummy", typeNumbers[0]++), new DummyGUIElement("dummy"));
-        }
-        else if ("Sequence".equals(type)) {
-            return taskTreeNodeFactory.createNewSequence();
-        }
-        else if ("Iteration".equals(type)) {
-            return taskTreeNodeFactory.createNewIteration();
-        }
-        else if ("Selection".equals(type)) {
-            return taskTreeNodeFactory.createNewSelection();
-        }
-        else if ("TextInput".equals(type)) {
-            if (additionalInfo == null) {
-                fail("no simulated text provided for text input interactin task");
-            }
-
-            TextInput textInput = new TextInput(additionalInfo, new ArrayList<Event>());
-            
-            IEventTask task = taskTreeNodeFactory.createNewEventTask
-                (textInput, new DummyTextField(additionalInfo));
-
-            return task;
-        }
-        else {
-            fail("invalid type of task tree node: " + type);
-            return null;
-        }
-    }
-
-    /**
-     * TODO: comment
-     * 
-     * @param treeNode
-     * @param child
-     */
-    private void addChild(ITaskTreeNode parent, ITaskTreeNode child) {
-        if (parent instanceof ISequence) {
-            taskTreeBuilder.addChild((ISequence) parent, child);
-        }
-        else if (parent instanceof IIteration) {
-            if (parent.getChildren().size() <= 0) {
-                taskTreeBuilder.setChild((IIteration) parent, child);
-            }
-            else {
-                fail("can not add more than one child to an iteration");
-            }
-        }
-        else if (parent instanceof ISelection) {
-            taskTreeBuilder.addChild((ISelection) parent, child);
-        }
-        else {
-            fail("can not add children to parent task tree node of type " +
-                 parent.getClass().getName());
-        }
-    }
-
 }
Index: /trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/TextInputStatisticsRuleTest.java
===================================================================
--- /trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/TextInputStatisticsRuleTest.java	(revision 1209)
+++ /trunk/autoquest-core-usability-test/src/test/java/de/ugoe/cs/autoquest/usability/TextInputStatisticsRuleTest.java	(revision 1210)
@@ -26,5 +26,4 @@
 
 import de.ugoe.cs.autoquest.usability.UsabilityDefect;
-import de.ugoe.cs.autoquest.usability.UsabilityDefectDescription;
 import de.ugoe.cs.autoquest.usability.UsabilityEvaluationManager;
 
@@ -47,26 +46,16 @@
         // ===== check =====
         String spec =
-            "TextInput (bla) {}";
+            "UserSession {" +
+            "  TextInput (bla) {}" +
+            "}";
         UsabilityDefect[] expectedDefects = new UsabilityDefect[]
             { new UsabilityDefect(HIGH, TEXT_FIELD_INPUT_RATIO) };
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
-            "  TextInput (bla) {}" +
-            "}";
-
-        expectedDefects = new UsabilityDefect[]
-            { new UsabilityDefect(HIGH, UsabilityDefectDescription.TEXT_FIELD_INPUT_RATIO) };
-
-        assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
-
-        // ===== check =====
-        spec =
-            "Sequence {" +
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
+
+        // ===== check =====
+        spec =
+            "UserSession {" +
             "  TextInput (a) {}" +
             "  TextInput (b) {}" +
@@ -79,9 +68,9 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
-
-        // ===== check =====
-        spec =
-            "Selection {" +
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
+
+        // ===== check =====
+        spec =
+            "UserSession {" +
             "  TextInput (a) {}" +
             "  TextInput (b) {}" +
@@ -94,5 +83,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -106,5 +95,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -173,5 +162,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
     }
 
@@ -198,5 +187,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -214,5 +203,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -229,5 +218,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -245,5 +234,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -326,5 +315,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -407,5 +396,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
     }
 
@@ -455,5 +444,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -494,5 +483,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -533,5 +522,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -572,5 +561,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -590,5 +579,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -608,5 +597,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -626,5 +615,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
     }
@@ -649,5 +638,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -662,5 +651,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -675,5 +664,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
         // ===== check =====
@@ -689,5 +678,5 @@
 
         assertUsabilityEvaluationResult
-            (expectedDefects, manager.evaluateUsability(createTaskTree(spec)));
+            (expectedDefects, manager.evaluateUsability(createTaskModel(spec)));
 
     }
