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

Last change on this file since 725 was 725, checked in by pharms, 12 years ago
  • use console for logging instead of logger
  • Property svn:executable set to *
File size: 3.4 KB
Line 
1package de.ugoe.cs.quest.tasktrees.manager;
2
3import java.util.logging.Level;
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;
13import de.ugoe.cs.util.console.Console;
14
15/**
16 * TODO comment
17 *
18 * @version $Revision: $ $Date: $
19 * @author 2011, last modified by $Author: $
20 */
21public class TaskTreeManager {
22   
23    /** */
24    private static final int MAX_EVENTS_TILL_RULE_APPLICATION = 100;
25
26    /** */
27    private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
28
29    /** */
30    private ITaskTreeNodeFactory taskTreeNodeFactory =
31        ComponentManager.getDefaultTaskTreeNodeFactory();
32
33    /** */
34    private int eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
35
36    /** */
37    private ISequence rootSequence;
38
39    /**
40     * TODO: comment
41     *
42     */
43    public TaskTreeManager() {
44        rootSequence = taskTreeNodeFactory.createNewSequence();
45    }
46
47    /**
48     *
49     */
50    public void handleNewEvent(Event event) {
51        handleEventTask(taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
52    }
53
54    /**
55     *
56     */
57    public synchronized ITaskTree getTaskTree() {
58        Console.traceln(Level.INFO, "applying temporal relationship generation rules");
59
60        ISequence currentRootSequence = rootSequence.clone();
61        ComponentManager.getTemporalRelationshipRuleManager().applyRules
62          (currentRootSequence, taskTreeBuilder, taskTreeNodeFactory, true);
63
64        return taskTreeNodeFactory.createTaskTree(currentRootSequence);
65    }
66
67    /**
68     * adds the task to the current or the new sequence. The decision depends on the type of task.
69     * If the task finishes the current sequence, the sequence is marked as finished If the task
70     * does not start a new sequence, it is added to the current sequence, before it is marked s
71     * finished. Otherwise it is added to a new sequence.
72     */
73    private synchronized void handleEventTask(IEventTask eventTask) {
74        if (!(eventTask.getEventType() instanceof KeyboardFocusChange)) {
75            Console.traceln(Level.INFO, "handling interaction event task \"" + eventTask + "\"");
76            addTaskToSequence(eventTask);
77        }
78    }
79
80    /**
81     *
82     */
83    private void addTaskToSequence(ITaskTreeNode task)
84    {
85        taskTreeBuilder.addChild(rootSequence, task);
86
87        if (--eventsTillRuleApplication == 0) {
88            eventsTillRuleApplication = MAX_EVENTS_TILL_RULE_APPLICATION;
89
90            Console.traceln(Level.INFO, "applying temporal relationship generation rules");
91            ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence,
92                                                                             taskTreeBuilder,
93                                                                             taskTreeNodeFactory,
94                                                                             false);
95        }
96    }
97
98}
Note: See TracBrowser for help on using the repository browser.