Changeset 1294 for trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation
- Timestamp:
- 08/14/13 17:04:42 (11 years ago)
- Location:
- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation
- Files:
-
- 7 edited
- 2 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/ITaskInstanceScopeRule.java
r1219 r1294 15 15 package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 16 16 17 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance List;17 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 18 18 19 19 /** 20 20 * <p> 21 * a task instance list scope rule is able to detected temporal relationships between a list of task22 * instances provided to the {@link #apply(ITaskInstanceList)} method. A rule creates temporal21 * a task instance scope rule is able to detected temporal relationships between the children of 22 * a task instance provided to the {@link #apply(ITaskInstance)} method. A rule creates temporal 23 23 * relationships between the task instances, i.e. substructures in the task tree, if 24 24 * it detects a temporal relationship and instantiates the temporal relationships accordingly. … … 27 27 * @author Patrick Harms 28 28 */ 29 interface ITaskInstance ListScopeRule extends ITemporalRelationshipRule {29 interface ITaskInstanceScopeRule extends ITemporalRelationshipRule { 30 30 31 31 /** 32 32 * <p> 33 * applies the rule to the given task instance list. The returned rule application result is null,33 * applies the rule to the given task instance. The returned rule application result is null, 34 34 * if the rule can not be applied, i.e. it does not detect a temporal relationship. It returns a 35 35 * rule application result with a status {@link RuleApplicationStatus#RULE_APPLICATION_FINISHED} … … 37 37 * </p> 38 38 * 39 * @param taskInstance s the list oftask instances to apply the rule on39 * @param taskInstance the task instances to apply the rule on 40 40 * 41 41 * @return the rule application result as described. 42 42 */ 43 RuleApplicationResult apply(ITaskInstance List taskInstances);43 RuleApplicationResult apply(ITaskInstance taskInstance); 44 44 45 45 } -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/ITemporalRelationshipRule.java
r1284 r1294 19 19 * a temporal relationship rule is the main interface for all rules applied for generating 20 20 * temporal relationships in a task tree. It is just a marker interface. More important are the 21 * sub interfaces {@link ISessionScopeRule} and {@link ITaskInstance ListScopeRule}.21 * sub interfaces {@link ISessionScopeRule} and {@link ITaskInstanceScopeRule}. 22 22 * </p> 23 23 * -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java
r1281 r1294 15 15 package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 16 16 17 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 17 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 18 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 18 19 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder; 19 20 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; … … 55 56 int startIndex, 56 57 int endIndex, 57 I Taskmodel,58 ISequence model, 58 59 ITaskFactory taskFactory, 59 60 ITaskBuilder taskBuilder) 60 61 { 61 I TaskInstance subsequence = taskFactory.createNewTaskInstance(model);62 ISequenceInstance subsequence = taskFactory.createNewTaskInstance(model); 62 63 63 64 for (int i = startIndex; i <= endIndex; i++) { … … 83 84 * @return the replacement for the range 84 85 */ 85 static I TaskInstance createNewSubSequenceInRange(ITaskInstanceList parent,86 int startIndex,87 int endIndex,88 ITaskmodel,89 ITaskFactory taskFactory,90 ITaskBuilder taskBuilder)86 static ISequenceInstance createNewSubSequenceInRange(ITaskInstanceList parent, 87 int startIndex, 88 int endIndex, 89 ISequence model, 90 ITaskFactory taskFactory, 91 ITaskBuilder taskBuilder) 91 92 { 92 I TaskInstance subsequence = taskFactory.createNewTaskInstance(model);93 ISequenceInstance subsequence = taskFactory.createNewTaskInstance(model); 93 94 94 95 for (int i = startIndex; i <= endIndex; i++) { -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRule.java
r1287 r1294 26 26 import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality; 27 27 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration; 28 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance; 28 29 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection; 30 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance; 29 31 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 32 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 30 33 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 31 34 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder; … … 159 162 SymbolMap<ITaskInstance, ITask> uniqueTasks = 160 163 preparationTaskHandlingStrategy.createSymbolMap(); 161 Task Comparator comparator = preparationTaskHandlingStrategy.getTaskComparator();164 TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 162 165 163 166 int unifiedTasks = 0; … … 235 238 { 236 239 Map<ITask, IIteration> iterations = new HashMap<ITask, IIteration>(); 237 Map<IIteration, List<I TaskInstance>> iterationInstances =238 new HashMap<IIteration, List<I TaskInstance>>();240 Map<IIteration, List<IIterationInstance>> iterationInstances = 241 new HashMap<IIteration, List<IIterationInstance>>(); 239 242 240 243 for (ITask iteratedTask : iteratedTasks) { 241 244 IIteration iteration = taskFactory.createNewIteration(); 242 245 iterations.put(iteratedTask, iteration); 243 iterationInstances.put(iteration, new LinkedList<I TaskInstance>());244 } 245 246 I TaskInstance iterationInstance = null;246 iterationInstances.put(iteration, new LinkedList<IIterationInstance>()); 247 } 248 249 IIterationInstance iterationInstance = null; 247 250 248 251 for (IUserSession session : sessions) { … … 275 278 } 276 279 277 for (Map.Entry<IIteration, List<ITaskInstance>> entry : iterationInstances.entrySet()) { 280 for (Map.Entry<IIteration, List<IIterationInstance>> entry : iterationInstances.entrySet()) 281 { 278 282 harmonizeIterationInstancesModel(entry.getKey(), entry.getValue()); 279 283 } … … 283 287 * 284 288 */ 285 private void harmonizeIterationInstancesModel(IIteration iteration,286 List<I TaskInstance> iterationInstances)289 private void harmonizeIterationInstancesModel(IIteration iteration, 290 List<IIterationInstance> iterationInstances) 287 291 { 288 292 List<ITask> iteratedTaskVariants = new LinkedList<ITask>(); 289 Task Comparator comparator = preparationTaskHandlingStrategy.getTaskComparator();293 TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 290 294 291 295 // merge the lexically different variants of iterated task to a unique list 292 for (I TaskInstance iterationInstance : iterationInstances) {296 for (IIterationInstance iterationInstance : iterationInstances) { 293 297 for (ITaskInstance executionVariant : iterationInstance) { 294 298 ITask candidate = executionVariant.getTask(); … … 323 327 taskBuilder.setMarkedTask(iteration, selection); 324 328 325 for (I TaskInstance instance : iterationInstances) {329 for (IIterationInstance instance : iterationInstances) { 326 330 for (int i = 0; i < instance.size(); i++) { 327 ITaskInstance selectionInstance = taskFactory.createNewTaskInstance(selection); 328 taskBuilder.addChild(selectionInstance, instance.get(i)); 331 ISelectionInstance selectionInstance = 332 taskFactory.createNewTaskInstance(selection); 333 taskBuilder.setChild(selectionInstance, instance.get(i)); 329 334 taskBuilder.setTaskInstance(instance, i, selectionInstance); 330 335 } … … 490 495 Console.traceln(Level.FINEST, "replacing " + sequence.getId() + ": " + task); 491 496 492 List<I TaskInstance> sequenceInstances =497 List<ISequenceInstance> sequenceInstances = 493 498 replaceTaskOccurrences(task, appData.getSessions(), sequence); 494 499 … … 510 515 * 511 516 */ 512 private void harmonizeSequenceInstancesModel(ISequence sequence,513 List<I TaskInstance> sequenceInstances,514 int sequenceLength)517 private void harmonizeSequenceInstancesModel(ISequence sequence, 518 List<ISequenceInstance> sequenceInstances, 519 int sequenceLength) 515 520 { 516 Task Comparator comparator = preparationTaskHandlingStrategy.getTaskComparator();521 TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 517 522 518 523 // ensure for each subtask that lexically different variants are preserved … … 520 525 List<ITask> subTaskVariants = new LinkedList<ITask>(); 521 526 522 for (I TaskInstance sequenceInstance : sequenceInstances) {527 for (ISequenceInstance sequenceInstance : sequenceInstances) { 523 528 ITask candidate = sequenceInstance.get(subTaskIndex).getTask(); 524 529 … … 556 561 taskBuilder.addChild(sequence, selection); 557 562 558 for (I TaskInstance instance : sequenceInstances) {559 I TaskInstance selectionInstance =563 for (ISequenceInstance instance : sequenceInstances) { 564 ISelectionInstance selectionInstance = 560 565 taskFactory.createNewTaskInstance(selection); 561 taskBuilder. addChild(selectionInstance, instance.get(subTaskIndex));566 taskBuilder.setChild(selectionInstance, instance.get(subTaskIndex)); 562 567 taskBuilder.setTaskInstance(instance, subTaskIndex, selectionInstance); 563 568 } … … 572 577 * @param tree 573 578 */ 574 private List<I TaskInstance> replaceTaskOccurrences(List<ITaskInstance> task,575 List<IUserSession> sessions,576 ISequence temporalTaskModel)579 private List<ISequenceInstance> replaceTaskOccurrences(List<ITaskInstance> task, 580 List<IUserSession> sessions, 581 ISequence temporalTaskModel) 577 582 { 578 List<I TaskInstance> sequenceInstances = new LinkedList<ITaskInstance>();583 List<ISequenceInstance> sequenceInstances = new LinkedList<ISequenceInstance>(); 579 584 580 585 for (IUserSession session : sessions) { -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskHandlingStrategy.java
r1285 r1294 42 42 * 43 43 */ 44 private Task Comparator comparator;44 private TaskInstanceComparator comparator; 45 45 46 46 /** … … 58 58 } 59 59 else { 60 comparator = new Task Comparator(this.consideredEquality);60 comparator = new TaskInstanceComparator(this.consideredEquality); 61 61 } 62 62 } … … 77 77 * @return 78 78 */ 79 public Task Comparator getTaskComparator() {79 public TaskInstanceComparator getTaskComparator() { 80 80 return comparator; 81 81 } -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskIdentityComparator.java
r1285 r1294 21 21 * TODO comment 22 22 */ 23 class TaskIdentityComparator extends Task Comparator {23 class TaskIdentityComparator extends TaskInstanceComparator { 24 24 25 25 /** */ -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceComparator.java
r1285 r1294 28 28 * TODO comment 29 29 */ 30 class Task Comparator implements SymbolComparator<ITaskInstance> {30 class TaskInstanceComparator implements SymbolComparator<ITaskInstance> { 31 31 32 32 /** */ … … 54 54 * 55 55 */ 56 public Task Comparator(TaskEquality minimalNodeEquality) {56 public TaskInstanceComparator(TaskEquality minimalNodeEquality) { 57 57 this.minimalNodeEquality = minimalNodeEquality; 58 58 init(); -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolBucketedMap.java
r1285 r1294 27 27 28 28 import de.ugoe.cs.autoquest.eventcore.IEventType; 29 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTask; 30 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration; 31 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection; 32 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 33 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 29 import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance; 30 import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance; 31 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance; 32 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 34 33 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 35 34 import de.ugoe.cs.autoquest.usageprofiles.SymbolMap; … … 81 80 * </p> 82 81 */ 83 private Task Comparator comparator;82 private TaskInstanceComparator comparator; 84 83 85 84 /** … … 117 116 * @throws IllegalArgumentException if the provided comparator is null 118 117 */ 119 public TaskSymbolBucketedMap(Task Comparator comparator) {118 public TaskSymbolBucketedMap(TaskInstanceComparator comparator) { 120 119 if (comparator == null) { 121 120 throw new IllegalArgumentException("comparator must not be null"); … … 400 399 // other = hashCode of name of event type 401 400 402 ITask task = taskInstance.getTask(); 403 404 if (task instanceof IEventTask) { 401 if (taskInstance instanceof IEventTaskInstance) { 405 402 // event tasks are most likely equal to those of the event type with the same name, 406 403 // Afterwards, they may be equal to iterations, optionals, other event tasks, 407 404 // selections, and finally the rest. 408 IEventType eventType = ((IEventTask ) task).getEventType();405 IEventType eventType = ((IEventTaskInstance) taskInstance).getEvent().getType(); 409 406 return new int[] { eventType.getName().hashCode(), 2, 3, 4, 1 }; 410 407 } 411 else if (task instanceof ISequence) {408 else if (taskInstance instanceof ISequenceInstance) { 412 409 return new int[] { 0, 2, 3, 1 }; 413 410 } 414 else if (task instanceof ISelection) {411 else if (taskInstance instanceof ISelectionInstance) { 415 412 return new int[] { 1, 4, 2, 3 }; 416 413 } 417 else if (task instanceof IIteration) {414 else if (taskInstance instanceof IIterationInstance) { 418 415 return new int[] { 2, 1, 4 }; 419 416 } -
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java
r1189 r1294 26 26 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory; 27 27 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 28 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstanceList;29 28 import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession; 30 29 import de.ugoe.cs.util.console.Console; … … 38 37 * between tasks which are not only a major sequence. I.e. through the application of the 39 38 * rules iterations and selections of tasks are detected. Which kind of temporal relations 40 * between tasks are detected depends on the {@link ITaskInstance ListScopeRule}s known to39 * between tasks are detected depends on the {@link ITaskInstanceScopeRule}s known to 41 40 * this class. 42 41 * </p> 43 * <p>The class holds references to the appropriate {@link ITaskInstance ListScopeRule}s and calls44 * their {@link ITaskInstance ListScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)}42 * <p>The class holds references to the appropriate {@link ITaskInstanceScopeRule}s and calls 43 * their {@link ITaskInstanceScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)} 45 44 * method for each task in the task tree it is needed for. The general behavior of this class is 46 45 * the following: … … 56 55 * <li> 57 56 * the class iterates its internal list of rules and calls their 58 * {@link ITaskInstance ListScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)}57 * {@link ITaskInstanceScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)} 59 58 * method. 60 59 * </li> … … 115 114 * </p> 116 115 */ 117 private ITaskInstance ListScopeRule[] taskScopeRules;116 private ITaskInstanceScopeRule[] taskScopeRules; 118 117 119 118 /** … … 166 165 //treeScopeRules.add(new DefaultGuiElementSequenceDetectionRule(frameFilter)); 167 166 168 taskScopeRules = new ITaskInstance ListScopeRule[] {167 taskScopeRules = new ITaskInstanceScopeRule[] { 169 168 //new SequenceOnGuiElementDetectionRule(taskFactory, taskTreeBuilder), 170 169 //new EventSequenceOnSameTargetDetectionRule(taskFactory, taskTreeBuilder), … … 262 261 * on the recursion depth of calling this method. 263 262 */ 264 private int applyRules(ITaskInstance ListScopeRule[] rules,265 ITaskInstance List taskInstances,263 private int applyRules(ITaskInstanceScopeRule[] rules, 264 ITaskInstance taskInstance, 266 265 String logIndent) 267 266 { 268 Console.traceln(Level.FINER, logIndent + "applying rules for " + taskInstances.size() + 269 " task instances"); 267 Console.traceln(Level.FINER, logIndent + "applying rules on " + taskInstance); 270 268 271 269 int noOfRuleApplications = 0; 272 270 273 for (ITaskInstance ListScopeRule rule : rules) {271 for (ITaskInstanceScopeRule rule : rules) { 274 272 RuleApplicationResult result; 275 273 do { 276 274 Console.traceln 277 (Level.FINER, logIndent + "trying rule " + rule + " on " + taskInstance s);278 result = rule.apply(taskInstance s);275 (Level.FINER, logIndent + "trying rule " + rule + " on " + taskInstance); 276 result = rule.apply(taskInstance); 279 277 280 278 if ((result != null) && … … 282 280 { 283 281 Console.traceln 284 (Level.FINE, logIndent + "applied rule " + rule + " on " + taskInstance s);282 (Level.FINE, logIndent + "applied rule " + rule + " on " + taskInstance); 285 283 noOfRuleApplications++; 286 284
Note: See TracChangeset
for help on using the changeset viewer.