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
RevLine 
[922]1package de.ugoe.cs.autoquest.tasktrees.manager;
[439]2
[727]3import java.util.Collection;
[1109]4import java.util.LinkedList;
[727]5import java.util.List;
[725]6import java.util.logging.Level;
[439]7
[922]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;
[725]14import de.ugoe.cs.util.console.Console;
[439]15
16/**
17 * TODO comment
[557]18 *
[439]19 * @version $Revision: $ $Date: $
[557]20 * @author 2011, last modified by $Author: $
[439]21 */
[557]22public class TaskTreeManager {
23   
24    /** */
25    private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
[439]26
[557]27    /** */
28    private ITaskTreeNodeFactory taskTreeNodeFactory =
29        ComponentManager.getDefaultTaskTreeNodeFactory();
30
31    /** */
[1109]32    private List<List<IEventTask>> sessions = null;
[557]33
34    /** */
[1109]35    private List<IEventTask> currentSession = null;
[557]36
37    /**
[1109]38     *
[557]39     */
40    public TaskTreeManager() {
[1109]41        sessions = new LinkedList<List<IEventTask>>();
[439]42    }
[557]43
44    /**
45     *
46     */
[1109]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        }
[727]53       
[1109]54        for (List<Event> newSession : newSessions) {
55            if (newSession.size() > 0) {
56                for (Event event : newSession) {
57                    handleNewEvent(event);
58                }
59                finishSession();
[727]60            }
61        }
62       
63        return getTaskTree();
64    }
65
66    /**
67     *
68     */
[557]69    public void handleNewEvent(Event event) {
[1109]70        assertSessionSequence();
71        currentSession.add
72            (taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
[439]73    }
74
[557]75    /**
[1109]76     *
[557]77     */
[1109]78    public void finishSession() {
79        if ((currentSession != null) && (currentSession.size() > 0)) {
80            sessions.add(currentSession);
81            currentSession = null;
82        }
[439]83    }
[557]84
85    /**
[1109]86     *
[557]87     */
[1109]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);
[439]105        }
[1109]106       
107       
108        ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence);
109
110        return taskTreeNodeFactory.createTaskTree(rootSequence);
[439]111    }
[557]112
113    /**
114     *
115     */
[1109]116    private void assertSessionSequence() {
117        if (currentSession == null) {
118            currentSession = new LinkedList<IEventTask>();
[557]119        }
[439]120    }
121
122}
Note: See TracBrowser for help on using the repository browser.