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

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