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

Last change on this file since 710 was 710, checked in by pharms, 12 years ago
  • moved target correction of key events regarding the current keyboard focus to a dedicated command
  • Property svn:executable set to *
File size: 3.5 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.gui.KeyboardFocusChange;
7import de.ugoe.cs.quest.tasktrees.treeifc.IEventTask;
8import de.ugoe.cs.quest.tasktrees.treeifc.ISequence;
9import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTree;
10import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeBuilder;
11import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNode;
12import de.ugoe.cs.quest.tasktrees.treeifc.ITaskTreeNodeFactory;
13
14/**
15 * TODO comment
16 *
17 * @version $Revision: $ $Date: $
18 * @author 2011, last modified by $Author: $
19 */
20public class TaskTreeManager {
21   
22    /** */
23    private static final int MAX_EVENTS_TILL_RULE_APPLICATION = 100;
24
25    /** */
26    private static Logger LOG = Logger.getLogger(TaskTreeManager.class.getName());
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     *
51     */
52    public void handleNewEvent(Event event) {
53        addEventTask(taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
54    }
55
56    /**
57     *
58     */
59    public synchronized ITaskTree getTaskTree() {
60        LOG.info("applying rules temporal relationship generation rules");
61
62        ISequence currentRootSequence = rootSequence.clone();
63        ComponentManager.getTemporalRelationshipRuleManager().applyRules
64          (currentRootSequence, taskTreeBuilder, taskTreeNodeFactory, true);
65
66        return taskTreeNodeFactory.createTaskTree(currentRootSequence);
67    }
68
69    /**
70     * @param task
71     */
72    private synchronized void addEventTask(IEventTask task) {
73        handleEventTask(task);
74    }
75
76    /**
77     * adds the task to the current or the new sequence. The decision depends on the type of task.
78     * If the task finishes the current sequence, the sequence is marked as finished If the task
79     * does not start a new sequence, it is added to the current sequence, before it is marked s
80     * finished. Otherwise it is added to a new sequence.
81     */
82    private void handleEventTask(IEventTask eventTask) {
83        if (!(eventTask.getEventType() instanceof KeyboardFocusChange)) {
84            LOG.info("handling interaction event task \"" + eventTask + "\"");
85            addTaskToSequence(eventTask);
86        }
87    }
88
89    /**
90     *
91     */
92    private void addTaskToSequence(ITaskTreeNode task)
93    {
94        taskTreeBuilder.addChild(rootSequence, task);
95
96        if (--eventsTillRuleApplication == 0) {
97            eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
98
99            LOG.info("applying rules temporal relationship generation rules");
100            ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence,
101                                                                             taskTreeBuilder,
102                                                                             taskTreeNodeFactory,
103                                                                             false);
104        }
105    }
106
107}
Note: See TracBrowser for help on using the repository browser.