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

Last change on this file since 655 was 655, checked in by pharms, 12 years ago
  • removed old copyright file header
  • Property svn:executable set to *
File size: 4.2 KB
Line 
1package de.ugoe.cs.quest.tasktrees.manager;
2
3import java.util.logging.Logger;
4
5import de.ugoe.cs.quest.eventcore.Event;
6import de.ugoe.cs.quest.eventcore.IEventTarget;
7import de.ugoe.cs.quest.eventcore.gui.KeyInteraction;
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;
15
16/**
17 * TODO comment
18 *
19 * @version $Revision: $ $Date: $
20 * @author 2011, last modified by $Author: $
21 */
22public class TaskTreeManager {
23   
24    /** */
25    private static final int MAX_EVENTS_TILL_RULE_APPLICATION = 100;
26
27    /** */
28    private static Logger LOG = Logger.getLogger(TaskTreeManager.class.getName());
29
30    /** */
31    private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
32
33    /** */
34    private ITaskTreeNodeFactory taskTreeNodeFactory =
35        ComponentManager.getDefaultTaskTreeNodeFactory();
36
37    /** */
38    private int eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
39
40    /** */
41    private ISequence rootSequence;
42
43    /** */
44    private IEventTarget currentKeyboardFocusGUIElement;
45
46    /**
47     * TODO: comment
48     *
49     */
50    public TaskTreeManager() {
51        rootSequence = taskTreeNodeFactory.createNewSequence();
52    }
53
54    /**
55     *
56     */
57    public void handleNewEvent(Event event) {
58        if (event.getType() instanceof KeyInteraction) {
59            if (currentKeyboardFocusGUIElement == null) {
60                currentKeyboardFocusGUIElement = event.getTarget();
61            }
62
63            addEventTask
64              (taskTreeNodeFactory.createNewEventTask
65                 (event.getType(), currentKeyboardFocusGUIElement));
66        }
67        else {
68            addEventTask
69              (taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
70        }
71    }
72
73    /**
74     *
75     */
76    public synchronized ITaskTree getTaskTree() {
77        LOG.info("applying rules temporal relationship generation rules");
78
79        ISequence currentRootSequence = rootSequence.clone();
80        ComponentManager.getTemporalRelationshipRuleManager().applyRules
81          (currentRootSequence, taskTreeBuilder, taskTreeNodeFactory, true);
82
83        return taskTreeNodeFactory.createTaskTree(currentRootSequence);
84    }
85
86    /**
87     * @param task
88     */
89    private synchronized void addEventTask(IEventTask task) {
90        handleEventTask(task);
91    }
92
93    /**
94     * adds the task to the current or the new sequence. The decision depends on the type of task.
95     * If the task finishes the current sequence, the sequence is marked as finished If the task
96     * does not start a new sequence, it is added to the current sequence, before it is marked s
97     * finished. Otherwise it is added to a new sequence.
98     */
99    private void handleEventTask(IEventTask eventTask) {
100        if (eventTask.getEventType() instanceof KeyboardFocusChange) {
101            currentKeyboardFocusGUIElement = eventTask.getEventTarget();
102        }
103        else {
104            LOG.info("handling event task \"" + eventTask + "\"");
105            addTaskToSequence(eventTask, currentKeyboardFocusGUIElement);
106        }
107    }
108
109    /**
110     *
111     */
112    private void addTaskToSequence(ITaskTreeNode task, IEventTarget currentKeyboardFocusGUIElement)
113    {
114        taskTreeBuilder.addChild(rootSequence, task);
115
116        if (--eventsTillRuleApplication == 0) {
117            eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
118
119            LOG.info("applying rules temporal relationship generation rules");
120            ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence,
121                                                                             taskTreeBuilder,
122                                                                             taskTreeNodeFactory,
123                                                                             false);
124        }
125    }
126
127}
Note: See TracBrowser for help on using the repository browser.