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

Last change on this file since 1154 was 1154, checked in by pharms, 11 years ago
  • improved java doc
  • Property svn:executable set to *
File size: 5.8 KB
Line 
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
15package de.ugoe.cs.autoquest.tasktrees.manager;
16
17import java.util.Collection;
18import java.util.LinkedList;
19import java.util.List;
20import java.util.logging.Level;
21
22import de.ugoe.cs.autoquest.eventcore.Event;
23import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
24import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel;
25import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder;
26import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory;
27import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession;
28import de.ugoe.cs.util.console.Console;
29
30/**
31 * <p>
32 * The task tree manager is responsible for transforming one or more user sessions into a task
33 * model. It can be called by providing a collection of user sessions where the result
34 * will be a task model. Furthermore, it can be used by providing single events in their respective
35 * order including notifications about where a user session ends. The result is a task model,
36 * as well.
37 * </p>
38 *
39 * @version 1.0
40 * @author pharms
41 */
42public class TaskTreeManager {
43   
44    /**
45     * <p>
46     * the internally used task builder
47     * </p>
48     */
49    private ITaskBuilder taskBuilder = ComponentManager.getDefaultTaskBuilder();
50
51    /**
52     * <p>
53     * the internally used task factory
54     * </p>
55     */
56    private ITaskFactory taskFactory = ComponentManager.getDefaultTaskFactory();
57
58    /**
59     * <p>
60     * if single events are provided, the user sessions collected so far
61     * </p>
62     */
63    private List<IUserSession> sessions = null;
64
65    /**
66     * <p>
67     * if single events are provided, the currently collected user session
68     * </p>
69     */
70    private IUserSession currentSession = null;
71
72    /**
73     * <p>
74     * initializes the task tree manager
75     * </p>
76     */
77    public TaskTreeManager() {
78        sessions = new LinkedList<IUserSession>();
79    }
80
81    /**
82     * <p>
83     * creates a task model based on the provided user sessions. Yet, the user sessions are
84     * list of events. Such will be transformed in into task instances of event tasks assigned
85     * to {@link IUserSession}s. The {@link IUserSession}s will then be restructured using
86     * the temporal relationship rule manager to detect tasks and respective instances. The
87     * results of this transformation is stored in a task model which is the return value of
88     * this method.
89     * </p>
90     *
91     * @param newSessions the user sessions of which the task model shall be created
92     *
93     * @return the task model created from the user sessions
94     *
95     * @throws IllegalStateException if the task manager is already used by providing it with
96     *                               single events
97     */
98    public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions) {
99        if ((currentSession != null) || (sessions.size() > 0)) {
100            throw new IllegalStateException("do not mix calls to this method with calls to the " +
101                                            "other methods for handling tasks. Use only one " +
102                                            "variant instead.");
103        }
104       
105        for (List<Event> newSession : newSessions) {
106            if (newSession.size() > 0) {
107                for (Event event : newSession) {
108                    handleNewEvent(event);
109                }
110                finishSession();
111            }
112        }
113       
114        return getTaskModel();
115    }
116
117    /**
118     * <p>
119     * handles a single event that occurred in a user session.
120     * </p>
121     *
122     * @param event the event to handle
123     */
124    public void handleNewEvent(Event event) {
125        assertSessionSequence();
126        ITask eventTask = taskFactory.createNewEventTask(event.getType(), event.getTarget());
127        taskBuilder.addExecutedTask(currentSession, taskFactory.createNewTaskInstance(eventTask));
128    }
129
130    /**
131     * <p>
132     * used to denote, that all previously added events using {@link #handleNewEvent(Event)}
133     * belong to the same session and that this session is now complete. All further events
134     * will be added to a new session which may be ended using this method, as well.
135     * </p>
136     */
137    public void finishSession() {
138        if ((currentSession != null) && (currentSession.getExecutedTasks().size() > 0)) {
139            sessions.add(currentSession);
140            currentSession = null;
141        }
142    }
143
144    /**
145     * <p>
146     * returns the task model, that belongs to the events in the user sessions collected so far.
147     * </p>
148     *
149     * @return the task model
150     */
151    public synchronized ITaskModel getTaskModel() {
152        finishSession();
153       
154        Console.traceln(Level.INFO, "applying temporal relationship generation rules");
155       
156        ComponentManager.getTemporalRelationshipRuleManager().applyRules(sessions);
157
158        return taskFactory.createTaskModel(sessions);
159    }
160
161    /**
162     * <p>
163     * internally asserts that there is a current session to add new events to
164     * </p>
165     */
166    private void assertSessionSequence() {
167        if (currentSession == null) {
168            currentSession = taskFactory.createUserSession();
169        }
170    }
171
172}
Note: See TracBrowser for help on using the repository browser.