Changeset 2132 for trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/manager/TaskTreeManager.java
- Timestamp:
- 08/24/16 10:17:41 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/manager/TaskTreeManager.java
r1889 r2132 16 16 17 17 import java.util.Collection; 18 import java.util.HashMap; 18 19 import java.util.LinkedList; 19 20 import java.util.List; 21 import java.util.Map; 20 22 import java.util.logging.Level; 21 23 22 24 import de.ugoe.cs.autoquest.eventcore.Event; 25 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality; 23 26 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask; 24 27 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel; … … 72 75 /** 73 76 * <p> 77 * The default task equality considered when comparing task instances initially 78 * </p> 79 */ 80 private TaskEquality minimalTaskEquality = TaskEquality.SEMANTICALLY_EQUAL; 81 82 /** 83 * <p> 84 * If this flag is set, then the task tree manager will not create new event tasks for any 85 * events. Instead, it will check using the hashcode and equal methods of the provided events 86 * if a certain event has already occurred, and if so, the corresponding event task will be 87 * reused. 88 * </p> 89 */ 90 private boolean useEventEqualityForTaskComparison; 91 92 /** 93 * <p> 94 * the minimum number of event task instances a sequence must cover to still detect it as a 95 * representative task 96 * </p> 97 */ 98 private int minimumSequenceCoverage;; 99 100 /** 101 * <p> 102 * If the flag {@link #useEventEqualityForTaskComparison} is set, then here the task tree 103 * manager stores the already created event tasks. 104 * </p> 105 */ 106 private Map<Event, IEventTask> eventTasks = new HashMap<>(); 107 108 /** 109 * <p> 74 110 * initializes the task tree manager 75 111 * </p> 76 112 */ 77 113 public TaskTreeManager() { 78 sessions = new LinkedList<IUserSession>();114 this.sessions = new LinkedList<IUserSession>(); 79 115 } 80 116 … … 96 132 * single events 97 133 */ 98 public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions) { 134 public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions, 135 boolean useEventEqualityForTaskComparison, 136 int minimumSequenceCoverage) 137 { 99 138 if ((currentSession != null) || (sessions.size() > 0)) { 100 139 throw new IllegalStateException("do not mix calls to this method with calls to the " + … … 102 141 "variant instead."); 103 142 } 143 144 this.useEventEqualityForTaskComparison = useEventEqualityForTaskComparison; 145 146 if (useEventEqualityForTaskComparison) { 147 // if we do this, we also need to consider identity of event tasks afterwards 148 minimalTaskEquality = TaskEquality.IDENTICAL; 149 } 150 151 this.minimumSequenceCoverage = minimumSequenceCoverage; 104 152 105 153 for (List<Event> newSession : newSessions) { … … 117 165 /** 118 166 * <p> 167 * call {@link #createTaskModel(Collection, boolean, int)} with false for use event equality 168 * for comparison and 0 for the minimum number of covered events per sequence 169 * </p> 170 * 171 * @param newSessions the user sessions of which the task model shall be created 172 * 173 * @return the task model created from the user sessions 174 * 175 * @throws IllegalStateException if the task manager is already used by providing it with 176 * single events 177 */ 178 public synchronized ITaskModel createTaskModel(Collection<List<Event>> newSessions) { 179 return createTaskModel(newSessions, false, 0); 180 } 181 182 /** 183 * <p> 119 184 * handles a single event that occurred in a user session. 120 185 * </p> … … 124 189 public void handleNewEvent(Event event) { 125 190 assertSessionSequence(); 126 String description = event.getType().getName() + " \u21D2 " + event.getTarget(); 127 IEventTask eventTask = taskFactory.createNewEventTask(description); 128 taskBuilder.addExecutedTask 129 (currentSession, taskFactory.createNewTaskInstance(eventTask, event)); 191 192 if (!useEventEqualityForTaskComparison) { 193 String description = event.getType().getName() + " \u21D2 " + event.getTarget(); 194 IEventTask eventTask = taskFactory.createNewEventTask(description); 195 taskBuilder.addExecutedTask 196 (currentSession, taskFactory.createNewTaskInstance(eventTask, event)); 197 } 198 else { 199 IEventTask eventTask = eventTasks.get(event); 200 if (eventTask == null) { 201 String description = event.getType().getName() + " \u21D2 " + event.getTarget(); 202 eventTask = taskFactory.createNewEventTask(description); 203 eventTasks.put(event, eventTask); 204 } 205 206 taskBuilder.addExecutedTask 207 (currentSession, taskFactory.createNewTaskInstance(eventTask, event)); 208 } 130 209 } 131 210 … … 157 236 (Level.INFO, "applying temporal relationship generation rules for detecting tasks"); 158 237 159 ComponentManager.getTemporalRelationshipRuleManager().applyTaskDetectionRule(sessions); 238 ComponentManager.getTemporalRelationshipRuleManager().applyTaskDetectionRule 239 (sessions, minimalTaskEquality, minimumSequenceCoverage); 160 240 161 241 return taskFactory.createTaskModel(sessions);
Note: See TracChangeset
for help on using the changeset viewer.