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

Last change on this file since 1113 was 1113, checked in by pharms, 11 years ago
  • added license statement
  • Property svn:executable set to *
File size: 4.2 KB
RevLine 
[1113]1//   Copyright 2012 Georg-August-Universität Göttingen, Germany
2//
3//   Licensed under the Apache License, Version 2.0 (the "License");
4//   you may not use this file except in compliance with the License.
5//   You may obtain a copy of the License at
6//
7//       http://www.apache.org/licenses/LICENSE-2.0
8//
9//   Unless required by applicable law or agreed to in writing, software
10//   distributed under the License is distributed on an "AS IS" BASIS,
11//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12//   See the License for the specific language governing permissions and
13//   limitations under the License.
14
[922]15package de.ugoe.cs.autoquest.tasktrees.manager;
[439]16
[727]17import java.util.Collection;
[1109]18import java.util.LinkedList;
[727]19import java.util.List;
[725]20import java.util.logging.Level;
[439]21
[922]22import de.ugoe.cs.autoquest.eventcore.Event;
23import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask;
24import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence;
25import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTree;
26import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeBuilder;
27import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNodeFactory;
[725]28import de.ugoe.cs.util.console.Console;
[439]29
30/**
31 * TODO comment
[557]32 *
[439]33 * @version $Revision: $ $Date: $
[557]34 * @author 2011, last modified by $Author: $
[439]35 */
[557]36public class TaskTreeManager {
37   
38    /** */
39    private ITaskTreeBuilder taskTreeBuilder = ComponentManager.getDefaultTaskTreeBuilder();
[439]40
[557]41    /** */
42    private ITaskTreeNodeFactory taskTreeNodeFactory =
43        ComponentManager.getDefaultTaskTreeNodeFactory();
44
45    /** */
[1109]46    private List<List<IEventTask>> sessions = null;
[557]47
48    /** */
[1109]49    private List<IEventTask> currentSession = null;
[557]50
51    /**
[1109]52     *
[557]53     */
54    public TaskTreeManager() {
[1109]55        sessions = new LinkedList<List<IEventTask>>();
[439]56    }
[557]57
58    /**
59     *
60     */
[1109]61    public synchronized ITaskTree createTaskTree(Collection<List<Event>> newSessions) {
62        if ((currentSession != null) || (sessions.size() > 0)) {
63            throw new IllegalStateException("do not mix calls to this method with calls to the " +
64                                            "other methods for handling tasks. Use only one " +
65                                            "variant instead.");
66        }
[727]67       
[1109]68        for (List<Event> newSession : newSessions) {
69            if (newSession.size() > 0) {
70                for (Event event : newSession) {
71                    handleNewEvent(event);
72                }
73                finishSession();
[727]74            }
75        }
76       
77        return getTaskTree();
78    }
79
80    /**
81     *
82     */
[557]83    public void handleNewEvent(Event event) {
[1109]84        assertSessionSequence();
85        currentSession.add
86            (taskTreeNodeFactory.createNewEventTask(event.getType(), event.getTarget()));
[439]87    }
88
[557]89    /**
[1109]90     *
[557]91     */
[1109]92    public void finishSession() {
93        if ((currentSession != null) && (currentSession.size() > 0)) {
94            sessions.add(currentSession);
95            currentSession = null;
96        }
[439]97    }
[557]98
99    /**
[1109]100     *
[557]101     */
[1109]102    public synchronized ITaskTree getTaskTree() {
103        finishSession();
104       
105        Console.traceln(Level.INFO, "applying temporal relationship generation rules");
106       
107        ISequence rootSequence = taskTreeNodeFactory.createNewSequence();
108        taskTreeBuilder.setDescription(rootSequence, "root");
109       
110        for (List<IEventTask> session : sessions) {
111            ISequence sequence = taskTreeNodeFactory.createNewSequence();
112            taskTreeBuilder.setDescription(sequence, "session");
113           
114            for (IEventTask eventTask : session) {
115                taskTreeBuilder.addChild(sequence, eventTask);
116            }
117           
118            taskTreeBuilder.addChild(rootSequence, sequence);
[439]119        }
[1109]120       
121       
122        ComponentManager.getTemporalRelationshipRuleManager().applyRules(rootSequence);
123
124        return taskTreeNodeFactory.createTaskTree(rootSequence);
[439]125    }
[557]126
127    /**
128     *
129     */
[1109]130    private void assertSessionSequence() {
131        if (currentSession == null) {
132            currentSession = new LinkedList<IEventTask>();
[557]133        }
[439]134    }
135
136}
Note: See TracBrowser for help on using the repository browser.