Ignore:
Timestamp:
08/14/13 17:04:42 (11 years ago)
Author:
pharms
Message:
  • rework of task model to move event instance stuff to task instances
  • introduction of sequence, selection, iteration and optional instances
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  
    1515package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 
    1616 
    17 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstanceList; 
     17import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
    1818 
    1919/** 
    2020 * <p> 
    21  * a task instance list scope rule is able to detected temporal relationships between a list of task 
    22  * instances provided to the {@link #apply(ITaskInstanceList)} method. A rule creates temporal 
     21 * 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 
    2323 * relationships between the task instances, i.e. substructures in the task tree, if 
    2424 * it detects a temporal relationship and instantiates the temporal relationships accordingly. 
     
    2727 * @author Patrick Harms 
    2828 */ 
    29 interface ITaskInstanceListScopeRule extends ITemporalRelationshipRule { 
     29interface ITaskInstanceScopeRule extends ITemporalRelationshipRule { 
    3030 
    3131  /** 
    3232   * <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, 
    3434   * if the rule can not be applied, i.e. it does not detect a temporal relationship. It returns a 
    3535   * rule application result with a status {@link RuleApplicationStatus#RULE_APPLICATION_FINISHED} 
     
    3737   * </p> 
    3838   *  
    39    * @param taskInstances the list of task instances to apply the rule on 
     39   * @param taskInstance the task instances to apply the rule on 
    4040   *                     
    4141   * @return the rule application result as described. 
    4242   */ 
    43   RuleApplicationResult apply(ITaskInstanceList taskInstances); 
     43  RuleApplicationResult apply(ITaskInstance taskInstance); 
    4444   
    4545} 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/ITemporalRelationshipRule.java

    r1284 r1294  
    1919 * a temporal relationship rule is the main interface for all rules applied for generating 
    2020 * temporal relationships in a task tree. It is just a marker interface. More important are the 
    21  * sub interfaces {@link ISessionScopeRule} and {@link ITaskInstanceListScopeRule}. 
     21 * sub interfaces {@link ISessionScopeRule} and {@link ITaskInstanceScopeRule}. 
    2222 * </p> 
    2323 *  
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java

    r1281 r1294  
    1515package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 
    1616 
    17 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 
     17import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 
     18import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
    1819import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder; 
    1920import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
     
    5556                                               int               startIndex, 
    5657                                               int               endIndex, 
    57                                                ITask             model, 
     58                                               ISequence         model, 
    5859                                               ITaskFactory      taskFactory, 
    5960                                               ITaskBuilder      taskBuilder) 
    6061    { 
    61         ITaskInstance subsequence = taskFactory.createNewTaskInstance(model); 
     62        ISequenceInstance subsequence = taskFactory.createNewTaskInstance(model); 
    6263 
    6364        for (int i = startIndex; i <= endIndex; i++) { 
     
    8384     * @return the replacement for the range 
    8485     */ 
    85     static ITaskInstance createNewSubSequenceInRange(ITaskInstanceList parent, 
    86                                                      int               startIndex, 
    87                                                      int               endIndex, 
    88                                                      ITask             model, 
    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) 
    9192    { 
    92         ITaskInstance subsequence = taskFactory.createNewTaskInstance(model); 
     93        ISequenceInstance subsequence = taskFactory.createNewTaskInstance(model); 
    9394 
    9495        for (int i = startIndex; i <= endIndex; i++) { 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRule.java

    r1287 r1294  
    2626import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality; 
    2727import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration; 
     28import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance; 
    2829import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection; 
     30import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance; 
    2931import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 
     32import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
    3033import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 
    3134import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder; 
     
    159162        SymbolMap<ITaskInstance, ITask> uniqueTasks = 
    160163            preparationTaskHandlingStrategy.createSymbolMap(); 
    161         TaskComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
     164        TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
    162165         
    163166        int unifiedTasks = 0; 
     
    235238    { 
    236239        Map<ITask, IIteration> iterations = new HashMap<ITask, IIteration>(); 
    237         Map<IIteration, List<ITaskInstance>> iterationInstances = 
    238                 new HashMap<IIteration, List<ITaskInstance>>(); 
     240        Map<IIteration, List<IIterationInstance>> iterationInstances = 
     241                new HashMap<IIteration, List<IIterationInstance>>(); 
    239242             
    240243        for (ITask iteratedTask : iteratedTasks) { 
    241244            IIteration iteration = taskFactory.createNewIteration(); 
    242245            iterations.put(iteratedTask, iteration); 
    243             iterationInstances.put(iteration, new LinkedList<ITaskInstance>()); 
    244         } 
    245          
    246         ITaskInstance iterationInstance = null; 
     246            iterationInstances.put(iteration, new LinkedList<IIterationInstance>()); 
     247        } 
     248         
     249        IIterationInstance iterationInstance = null; 
    247250         
    248251        for (IUserSession session : sessions) { 
     
    275278        } 
    276279         
    277         for (Map.Entry<IIteration, List<ITaskInstance>> entry : iterationInstances.entrySet()) { 
     280        for (Map.Entry<IIteration, List<IIterationInstance>> entry : iterationInstances.entrySet()) 
     281        { 
    278282            harmonizeIterationInstancesModel(entry.getKey(), entry.getValue()); 
    279283        } 
     
    283287     * 
    284288     */ 
    285     private void harmonizeIterationInstancesModel(IIteration          iteration, 
    286                                                   List<ITaskInstance> iterationInstances) 
     289    private void harmonizeIterationInstancesModel(IIteration               iteration, 
     290                                                  List<IIterationInstance> iterationInstances) 
    287291    { 
    288292        List<ITask> iteratedTaskVariants = new LinkedList<ITask>(); 
    289         TaskComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
     293        TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
    290294         
    291295        // merge the lexically different variants of iterated task to a unique list  
    292         for (ITaskInstance iterationInstance : iterationInstances) { 
     296        for (IIterationInstance iterationInstance : iterationInstances) { 
    293297            for (ITaskInstance executionVariant : iterationInstance) { 
    294298                ITask candidate = executionVariant.getTask(); 
     
    323327            taskBuilder.setMarkedTask(iteration, selection); 
    324328             
    325             for (ITaskInstance instance : iterationInstances) { 
     329            for (IIterationInstance instance : iterationInstances) { 
    326330                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)); 
    329334                    taskBuilder.setTaskInstance(instance, i, selectionInstance); 
    330335                } 
     
    490495                Console.traceln(Level.FINEST, "replacing " + sequence.getId() + ": " + task); 
    491496 
    492                 List<ITaskInstance> sequenceInstances = 
     497                List<ISequenceInstance> sequenceInstances = 
    493498                    replaceTaskOccurrences(task, appData.getSessions(), sequence); 
    494499                 
     
    510515     * 
    511516     */ 
    512     private void harmonizeSequenceInstancesModel(ISequence           sequence, 
    513                                                  List<ITaskInstance> sequenceInstances, 
    514                                                  int                 sequenceLength) 
     517    private void harmonizeSequenceInstancesModel(ISequence               sequence, 
     518                                                 List<ISequenceInstance> sequenceInstances, 
     519                                                 int                     sequenceLength) 
    515520    { 
    516         TaskComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
     521        TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
    517522         
    518523        // ensure for each subtask that lexically different variants are preserved 
     
    520525            List<ITask> subTaskVariants = new LinkedList<ITask>(); 
    521526             
    522             for (ITaskInstance sequenceInstance : sequenceInstances) { 
     527            for (ISequenceInstance sequenceInstance : sequenceInstances) { 
    523528                ITask candidate = sequenceInstance.get(subTaskIndex).getTask(); 
    524529                 
     
    556561                taskBuilder.addChild(sequence, selection); 
    557562                 
    558                 for (ITaskInstance instance : sequenceInstances) { 
    559                     ITaskInstance selectionInstance = 
     563                for (ISequenceInstance instance : sequenceInstances) { 
     564                    ISelectionInstance selectionInstance = 
    560565                        taskFactory.createNewTaskInstance(selection); 
    561                     taskBuilder.addChild(selectionInstance, instance.get(subTaskIndex)); 
     566                    taskBuilder.setChild(selectionInstance, instance.get(subTaskIndex)); 
    562567                    taskBuilder.setTaskInstance(instance, subTaskIndex, selectionInstance); 
    563568                } 
     
    572577     * @param tree 
    573578     */ 
    574     private List<ITaskInstance> 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) 
    577582    { 
    578         List<ITaskInstance> sequenceInstances = new LinkedList<ITaskInstance>(); 
     583        List<ISequenceInstance> sequenceInstances = new LinkedList<ISequenceInstance>(); 
    579584         
    580585        for (IUserSession session : sessions) { 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskHandlingStrategy.java

    r1285 r1294  
    4242     *  
    4343     */ 
    44     private TaskComparator comparator; 
     44    private TaskInstanceComparator comparator; 
    4545 
    4646    /** 
     
    5858        } 
    5959        else { 
    60             comparator = new TaskComparator(this.consideredEquality); 
     60            comparator = new TaskInstanceComparator(this.consideredEquality); 
    6161        } 
    6262    } 
     
    7777     * @return 
    7878     */ 
    79     public TaskComparator getTaskComparator() { 
     79    public TaskInstanceComparator getTaskComparator() { 
    8080        return comparator; 
    8181    } 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskIdentityComparator.java

    r1285 r1294  
    2121 * TODO comment 
    2222 */ 
    23 class TaskIdentityComparator extends TaskComparator { 
     23class TaskIdentityComparator extends TaskInstanceComparator { 
    2424 
    2525    /**  */ 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceComparator.java

    r1285 r1294  
    2828 * TODO comment 
    2929 */ 
    30 class TaskComparator implements SymbolComparator<ITaskInstance> { 
     30class TaskInstanceComparator implements SymbolComparator<ITaskInstance> { 
    3131     
    3232    /**  */ 
     
    5454     * 
    5555     */ 
    56     public TaskComparator(TaskEquality minimalNodeEquality) { 
     56    public TaskInstanceComparator(TaskEquality minimalNodeEquality) { 
    5757        this.minimalNodeEquality = minimalNodeEquality; 
    5858        init(); 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskSymbolBucketedMap.java

    r1285 r1294  
    2727 
    2828import 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; 
     29import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance; 
     30import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance; 
     31import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance; 
     32import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
    3433import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
    3534import de.ugoe.cs.autoquest.usageprofiles.SymbolMap; 
     
    8180     * </p> 
    8281     */ 
    83     private TaskComparator comparator; 
     82    private TaskInstanceComparator comparator; 
    8483 
    8584    /** 
     
    117116     * @throws IllegalArgumentException if the provided comparator is null 
    118117     */ 
    119     public TaskSymbolBucketedMap(TaskComparator comparator) { 
     118    public TaskSymbolBucketedMap(TaskInstanceComparator comparator) { 
    120119        if (comparator == null) { 
    121120            throw new IllegalArgumentException("comparator must not be null"); 
     
    400399        // other = hashCode of name of event type 
    401400         
    402         ITask task = taskInstance.getTask(); 
    403          
    404         if (task instanceof IEventTask) { 
     401        if (taskInstance instanceof IEventTaskInstance) { 
    405402            // event tasks are most likely equal to those of the event type with the same name, 
    406403            // Afterwards, they may be equal to iterations, optionals, other event tasks, 
    407404            // selections, and finally the rest. 
    408             IEventType eventType = ((IEventTask) task).getEventType(); 
     405            IEventType eventType = ((IEventTaskInstance) taskInstance).getEvent().getType(); 
    409406            return new int[] { eventType.getName().hashCode(), 2, 3, 4, 1 };                        
    410407        } 
    411         else if (task instanceof ISequence) { 
     408        else if (taskInstance instanceof ISequenceInstance) { 
    412409            return new int[] { 0, 2, 3, 1 };                        
    413410        } 
    414         else if (task instanceof ISelection) { 
     411        else if (taskInstance instanceof ISelectionInstance) { 
    415412            return new int[] { 1, 4, 2, 3 };                        
    416413        } 
    417         else if (task instanceof IIteration) { 
     414        else if (taskInstance instanceof IIterationInstance) { 
    418415            return new int[] { 2, 1, 4 };                        
    419416        } 
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TemporalRelationshipRuleManager.java

    r1189 r1294  
    2626import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskFactory; 
    2727import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 
    28 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstanceList; 
    2928import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession; 
    3029import de.ugoe.cs.util.console.Console; 
     
    3837 * between tasks which are not only a major sequence. I.e. through the application of the 
    3938 * rules iterations and selections of tasks are detected. Which kind of temporal relations 
    40  * between tasks are detected depends on the {@link ITaskInstanceListScopeRule}s known to 
     39 * between tasks are detected depends on the {@link ITaskInstanceScopeRule}s known to 
    4140 * this class. 
    4241 * </p> 
    43  * <p>The class holds references to the appropriate {@link ITaskInstanceListScopeRule}s and calls 
    44  * their {@link ITaskInstanceListScopeRule#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)} 
    4544 * method for each task in the task tree it is needed for. The general behavior of this class is 
    4645 * the following: 
     
    5655 *   <li> 
    5756 *     the class iterates its internal list of rules and calls their 
    58  *     {@link ITaskInstanceListScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)} 
     57 *     {@link ITaskInstanceScopeRule#apply(ITask, ITaskBuilder, ITaskFactory, boolean)} 
    5958 *     method. 
    6059 *   </li> 
     
    115114     * </p> 
    116115     */ 
    117     private ITaskInstanceListScopeRule[] taskScopeRules; 
     116    private ITaskInstanceScopeRule[] taskScopeRules; 
    118117 
    119118    /** 
     
    166165        //treeScopeRules.add(new DefaultGuiElementSequenceDetectionRule(frameFilter)); 
    167166 
    168         taskScopeRules = new ITaskInstanceListScopeRule[] { 
     167        taskScopeRules = new ITaskInstanceScopeRule[] { 
    169168            //new SequenceOnGuiElementDetectionRule(taskFactory, taskTreeBuilder), 
    170169            //new EventSequenceOnSameTargetDetectionRule(taskFactory, taskTreeBuilder), 
     
    262261     *                     on the recursion depth of calling this method. 
    263262     */ 
    264     private int applyRules(ITaskInstanceListScopeRule[] rules, 
    265                            ITaskInstanceList            taskInstances, 
     263    private int applyRules(ITaskInstanceScopeRule[] rules, 
     264                           ITaskInstance                taskInstance, 
    266265                           String                       logIndent) 
    267266    { 
    268         Console.traceln(Level.FINER, logIndent + "applying rules for " + taskInstances.size() + 
    269                         " task instances"); 
     267        Console.traceln(Level.FINER, logIndent + "applying rules on " + taskInstance); 
    270268 
    271269        int noOfRuleApplications = 0; 
    272270 
    273         for (ITaskInstanceListScopeRule rule : rules) { 
     271        for (ITaskInstanceScopeRule rule : rules) { 
    274272            RuleApplicationResult result; 
    275273            do { 
    276274                Console.traceln 
    277                     (Level.FINER, logIndent + "trying rule " + rule + " on " + taskInstances); 
    278                 result = rule.apply(taskInstances); 
     275                    (Level.FINER, logIndent + "trying rule " + rule + " on " + taskInstance); 
     276                result = rule.apply(taskInstance); 
    279277 
    280278                if ((result != null) && 
     
    282280                { 
    283281                    Console.traceln 
    284                         (Level.FINE, logIndent + "applied rule " + rule + " on " + taskInstances); 
     282                        (Level.FINE, logIndent + "applied rule " + rule + " on " + taskInstance); 
    285283                    noOfRuleApplications++; 
    286284                     
Note: See TracChangeset for help on using the changeset viewer.