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

Last change on this file since 1109 was 1109, checked in by pharms, 11 years ago
  • changed rules to be testable on their own
  • added first version for a task detection rule
  • refactored rules to have a simpler interface
  • Property svn:executable set to *
File size: 3.5 KB
Line 
1package de.ugoe.cs.autoquest.tasktrees.manager;
2
3import java.util.Collection;
4import java.util.LinkedList;
5import java.util.List;
6import java.util.logging.Level;
7
8import de.ugoe.cs.autoquest.eventcore.Event;
9import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
10import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
11import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
12import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeBuilder;
13import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNodeFactory;
14import de.ugoe.cs.util.console.Console;
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 ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
26
27    /** */
28    private ITaskTreeNodeFactory taskTreeNodeFactory =
29        ComponentManager.getDefaultTaskTreeNodeFactory();
30
31    /** */
32    private List<List<IEventTask>> sessions = null;
33
34    /** */
35    private List<IEventTask> currentSession = null;
36
37    /**
38     *
39     */
40    public TaskTreeManager() {
41        sessions = new LinkedList<List<IEventTask>>();
42    }
43
44    /**
45     *
46     */
47    public synchronized ITaskTree createTaskTree(Collection<List<Event>> newSessions) {
48        if ((currentSession != null) || (sessions.size() > 0)) {
49            throw new IllegalStateException("do not mix calls to this method with calls to the " +
50                                            "other methods for handling tasks. Use only one " +
51                                            "variant instead.");
52        }
53       
54        for (List<Event> newSession : newSessions) {
55            if (newSession.size() > 0) {
56                for (Event event : newSession) {
57                    handleNewEvent(event);
58                }
59                finishSession();
60            }
61        }
62       
63        return getTaskTree();
64    }
65
66    /**
67     *
68     */
69    public void handleNewEvent(Event event) {
70        assertSessionSequence();
71        currentSession.add
72            (taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
73    }
74
75    /**
76     *
77     */
78    public void finishSession() {
79        if ((currentSession != null) && (currentSession.size() > 0)) {
80            sessions.add(currentSession);
81            currentSession = null;
82        }
83    }
84
85    /**
86     *
87     */
88    public synchronized ITaskTree getTaskTree() {
89        finishSession();
90       
91        Console.traceln(Level.INFO, "applying temporal relationship generation rules");
92       
93        ISequence rootSequence = taskTreeNodeFactory.createNewSequence();
94        taskTreeBuilder.setDescription(rootSequence, "root");
95       
96        for (List<IEventTask> session : sessions) {
97            ISequence sequence = taskTreeNodeFactory.createNewSequence();
98            taskTreeBuilder.setDescription(sequence, "session");
99           
100            for (IEventTask eventTask : session) {
101                taskTreeBuilder.addChild(sequence, eventTask);
102            }
103           
104            taskTreeBuilder.addChild(rootSequence, sequence);
105        }
106       
107       
108        ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence);
109
110        return taskTreeNodeFactory.createTaskTree(rootSequence);
111    }
112
113    /**
114     *
115     */
116    private void assertSessionSequence() {
117        if (currentSession == null) {
118            currentSession = new LinkedList<IEventTask>();
119        }
120    }
121
122}
Note: See TracBrowser for help on using the repository browser.