[922] | 1 | package de.ugoe.cs.autoquest.tasktrees.manager;
|
---|
[439] | 2 |
|
---|
[727] | 3 | import java.util.Collection;
|
---|
| 4 | import java.util.List;
|
---|
[725] | 5 | import java.util.logging.Level;
|
---|
[439] | 6 |
|
---|
[922] | 7 | import de.ugoe.cs.autoquest.eventcore.Event;
|
---|
| 8 | import de.ugoe.cs.autoquest.eventcore.gui.KeyboardFocusChange;
|
---|
| 9 | import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
|
---|
| 10 | import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
|
---|
| 11 | import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
|
---|
| 12 | import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeBuilder;
|
---|
| 13 | import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode;
|
---|
| 14 | import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNodeFactory;
|
---|
[725] | 15 | import de.ugoe.cs.util.console.Console;
|
---|
[439] | 16 |
|
---|
| 17 | /**
|
---|
| 18 | * TODO comment
|
---|
[557] | 19 | *
|
---|
[439] | 20 | * @version $Revision: $ $Date: $
|
---|
[557] | 21 | * @author 2011, last modified by $Author: $
|
---|
[439] | 22 | */
|
---|
[557] | 23 | public class TaskTreeManager {
|
---|
| 24 |
|
---|
| 25 | /** */
|
---|
| 26 | private static final int MAX_EVENTS_TILL_RULE_APPLICATION = 100;
|
---|
[439] | 27 |
|
---|
[557] | 28 | /** */
|
---|
| 29 | private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
|
---|
[439] | 30 |
|
---|
[557] | 31 | /** */
|
---|
| 32 | private ITaskTreeNodeFactory taskTreeNodeFactory =
|
---|
| 33 | ComponentManager.getDefaultTaskTreeNodeFactory();
|
---|
| 34 |
|
---|
| 35 | /** */
|
---|
| 36 | private int eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
|
---|
| 37 |
|
---|
| 38 | /** */
|
---|
| 39 | private ISequence rootSequence;
|
---|
| 40 |
|
---|
| 41 | /**
|
---|
| 42 | * TODO: comment
|
---|
| 43 | *
|
---|
| 44 | */
|
---|
| 45 | public TaskTreeManager() {
|
---|
| 46 | rootSequence = taskTreeNodeFactory.createNewSequence();
|
---|
[439] | 47 | }
|
---|
[557] | 48 |
|
---|
| 49 | /**
|
---|
[727] | 50 | * <p>
|
---|
| 51 | * TODO: comment
|
---|
| 52 | * </p>
|
---|
[557] | 53 | *
|
---|
[727] | 54 | * @param sequences
|
---|
| 55 | * @return
|
---|
[557] | 56 | */
|
---|
[727] | 57 | public synchronized ITaskTree createTaskTree(Collection<List<Event>> sequences) {
|
---|
| 58 |
|
---|
| 59 | for (List<Event> sequence : sequences) {
|
---|
| 60 | for (Event event : sequence) {
|
---|
| 61 | handleNewEvent(event);
|
---|
| 62 | }
|
---|
| 63 | }
|
---|
| 64 |
|
---|
| 65 | return getTaskTree();
|
---|
| 66 | }
|
---|
| 67 |
|
---|
| 68 | /**
|
---|
| 69 | *
|
---|
| 70 | */
|
---|
[557] | 71 | public void handleNewEvent(Event event) {
|
---|
[725] | 72 | handleEventTask(taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
|
---|
[439] | 73 | }
|
---|
| 74 |
|
---|
[557] | 75 | /**
|
---|
| 76 | *
|
---|
| 77 | */
|
---|
| 78 | public synchronized ITaskTree getTaskTree() {
|
---|
[725] | 79 | Console.traceln(Level.INFO, "applying temporal relationship generation rules");
|
---|
[439] | 80 |
|
---|
[557] | 81 | ISequence currentRootSequence = rootSequence.clone();
|
---|
| 82 | ComponentManager.getTemporalRelationshipRuleManager().applyRules
|
---|
| 83 | (currentRootSequence, taskTreeBuilder, taskTreeNodeFactory, true);
|
---|
[439] | 84 |
|
---|
[557] | 85 | return taskTreeNodeFactory.createTaskTree(currentRootSequence);
|
---|
[439] | 86 | }
|
---|
[557] | 87 |
|
---|
| 88 | /**
|
---|
| 89 | * adds the task to the current or the new sequence. The decision depends on the type of task.
|
---|
| 90 | * If the task finishes the current sequence, the sequence is marked as finished If the task
|
---|
| 91 | * does not start a new sequence, it is added to the current sequence, before it is marked s
|
---|
| 92 | * finished. Otherwise it is added to a new sequence.
|
---|
| 93 | */
|
---|
[725] | 94 | private synchronized void handleEventTask(IEventTask eventTask) {
|
---|
[710] | 95 | if (!(eventTask.getEventType() instanceof KeyboardFocusChange)) {
|
---|
[725] | 96 | Console.traceln(Level.INFO, "handling interaction event task \"" + eventTask + "\"");
|
---|
[710] | 97 | addTaskToSequence(eventTask);
|
---|
[439] | 98 | }
|
---|
| 99 | }
|
---|
[557] | 100 |
|
---|
| 101 | /**
|
---|
| 102 | *
|
---|
| 103 | */
|
---|
[710] | 104 | private void addTaskToSequence(ITaskTreeNode task)
|
---|
[439] | 105 | {
|
---|
[557] | 106 | taskTreeBuilder.addChild(rootSequence, task);
|
---|
[439] | 107 |
|
---|
[557] | 108 | if (--eventsTillRuleApplication == 0) {
|
---|
| 109 | eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
|
---|
| 110 |
|
---|
[725] | 111 | Console.traceln(Level.INFO, "applying temporal relationship generation rules");
|
---|
[557] | 112 | ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence,
|
---|
| 113 | taskTreeBuilder,
|
---|
| 114 | taskTreeNodeFactory,
|
---|
| 115 | false);
|
---|
| 116 | }
|
---|
[439] | 117 | }
|
---|
| 118 |
|
---|
| 119 | }
|
---|