source: trunk/quest-core-tasktrees/src/main/java/de/ugoe/cs/quest/tasktrees/manager/TaskTreeManager.java @ 727

Last change on this file since 727 was 727, checked in by pharms, 12 years ago
  • added command to generate task trees based on a sequence
  • Property svn:executable set to *
File size: 3.8 KB
Line 
1package de.ugoe.cs.quest.tasktrees.manager;
2
3import java.util.Collection;
4import java.util.List;
5import java.util.logging.Level;
6
7import de.ugoe.cs.quest.eventcore.Event;
8import de.ugoe.cs.quest.eventcore.gui.KeyboardFocusChange;
9import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
10import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
11import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
12import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
13import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
14import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
15import de.ugoe.cs.util.console.Console;
16
17/**
18 * TODO comment
19 *
20 * @version $Revision: $ $Date: $
21 * @author 2011, last modified by $Author: $
22 */
23public class TaskTreeManager {
24   
25    /** */
26    private static final int MAX_EVENTS_TILL_RULE_APPLICATION = 100;
27
28    /** */
29    private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
30
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();
47    }
48
49    /**
50     * <p>
51     * TODO: comment
52     * </p>
53     *
54     * @param sequences
55     * @return
56     */
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     */
71    public void handleNewEvent(Event event) {
72        handleEventTask(taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
73    }
74
75    /**
76     *
77     */
78    public synchronized ITaskTree getTaskTree() {
79        Console.traceln(Level.INFO, "applying temporal relationship generation rules");
80
81        ISequence currentRootSequence = rootSequence.clone();
82        ComponentManager.getTemporalRelationshipRuleManager().applyRules
83          (currentRootSequence, taskTreeBuilder, taskTreeNodeFactory, true);
84
85        return taskTreeNodeFactory.createTaskTree(currentRootSequence);
86    }
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     */
94    private synchronized void handleEventTask(IEventTask eventTask) {
95        if (!(eventTask.getEventType() instanceof KeyboardFocusChange)) {
96            Console.traceln(Level.INFO, "handling interaction event task \"" + eventTask + "\"");
97            addTaskToSequence(eventTask);
98        }
99    }
100
101    /**
102     *
103     */
104    private void addTaskToSequence(ITaskTreeNode task)
105    {
106        taskTreeBuilder.addChild(rootSequence, task);
107
108        if (--eventsTillRuleApplication == 0) {
109            eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
110
111            Console.traceln(Level.INFO, "applying temporal relationship generation rules");
112            ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence,
113                                                                             taskTreeBuilder,
114                                                                             taskTreeNodeFactory,
115                                                                             false);
116        }
117    }
118
119}
Note: See TracBrowser for help on using the repository browser.