Ignore:
Timestamp:
08/23/14 17:19:39 (10 years ago)
Author:
rkrimmel
Message:

HarmonizeIterationinstancemodel? DOES need to be called after iteration detection....

Location:
branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/RuleUtils.java

    r1690 r1692  
    1515package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 
    1616 
     17import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration; 
     18import de.ugoe.cs.autoquest.tasktrees.treeifc.IIterationInstance; 
    1719import de.ugoe.cs.autoquest.tasktrees.treeifc.IMarkingTemporalRelationship; 
    1820import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional; 
     
    145147 
    146148                        } else if (tempTask.getType() == "sequence") { 
    147                                 //System.out.println("Adding SequenceInstance " + parent.get(startIndex) + " to " + tempTask.getType()); 
    148                                 taskBuilder.addChild(subsequence,parent.get(startIndex)); 
     149                                //ISequenceInstance sequence = taskFactory.createNewTaskInstance((ISequence) tempTask); 
     150                                //taskBuilder.addChild(sequence, parent.get(i)); 
     151                                //taskBuilder.addChild(subsequence,sequence); 
     152                                taskBuilder.addChild(subsequence, parent.get(startIndex)); 
    149153                        } else if (tempTask.getType() == "iteration") { 
     154                                //IIterationInstance iteration = taskFactory.createNewTaskInstance((IIteration) tempTask); 
     155                                //taskBuilder.addChild(iteration, parent.get(startIndex)); 
     156                                //taskBuilder.addChild(subsequence, iteration); 
    150157                                taskBuilder.addChild(subsequence, parent.get(startIndex)); 
    151158                                //System.out.println("Adding IterationInstance " + parent.get(startIndex) + " to " + tempTask.getType()); 
  • branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java

    r1690 r1692  
    3838import de.ugoe.cs.autoquest.tasktrees.treeifc.IOptional; 
    3939import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelection; 
     40import de.ugoe.cs.autoquest.tasktrees.treeifc.ISelectionInstance; 
    4041import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 
    4142import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
     
    138139        public RuleApplicationResult apply(List<IUserSession> sessions) { 
    139140                RuleApplicationData appData = new RuleApplicationData(sessions); 
     141                 
    140142                harmonizeEventTaskInstancesModel(appData); 
    141                  
    142143                do { 
    143144                        iteration++; 
     145                         
    144146                        appData.detectedAndReplacedTasks = false; 
    145147                        appData.getStopWatch().start("whole loop");  
     
    364366                        } 
    365367                } 
    366         } 
     368                   
     369        for (Map.Entry<IIteration, List<IIterationInstance>> entry : iterationInstances.entrySet()) 
     370        { 
     371            harmonizeIterationInstancesModel(entry.getKey(), entry.getValue()); 
     372        } 
     373        } 
     374 
     375         
     376        /** 
     377     * <p> 
     378     * TODO clarify why this is done 
     379     * </p> 
     380     */ 
     381    private void harmonizeIterationInstancesModel(IIteration               iteration, 
     382                                                  List<IIterationInstance> iterationInstances) 
     383    { 
     384        List<ITask> iteratedTaskVariants = new LinkedList<ITask>(); 
     385        TaskInstanceComparator comparator = preparationTaskHandlingStrategy.getTaskComparator(); 
     386         
     387        // merge the lexically different variants of iterated task to a unique list  
     388        for (IIterationInstance iterationInstance : iterationInstances) { 
     389            for (ITaskInstance executionVariant : iterationInstance) { 
     390                ITask candidate = executionVariant.getTask(); 
     391             
     392                boolean found = false; 
     393                for (ITask taskVariant : iteratedTaskVariants) { 
     394                    if (comparator.areLexicallyEqual(taskVariant, candidate)) { 
     395                        taskBuilder.setTask(executionVariant, taskVariant); 
     396                        found = true; 
     397                        break; 
     398                    } 
     399                } 
     400                 
     401                if (!found) { 
     402                    iteratedTaskVariants.add(candidate); 
     403                } 
     404            } 
     405        } 
     406         
     407        // if there are more than one lexically different variant of iterated tasks, adapt the 
     408        // iteration model to be a selection of different variants. In this case also adapt 
     409        // the generated iteration instances to correctly contain selection instances. If there 
     410        // is only one variant of an iterated task, simply set this as the marked task of the 
     411        // iteration. In this case, the instances can be preserved as is 
     412        if (iteratedTaskVariants.size() > 1) { 
     413            ISelection selection = taskFactory.createNewSelection(); 
     414             
     415            for (ITask variant : iteratedTaskVariants) { 
     416                taskBuilder.addChild(selection, variant); 
     417            } 
     418             
     419            taskBuilder.setMarkedTask(iteration, selection); 
     420             
     421            for (IIterationInstance instance : iterationInstances) { 
     422                for (int i = 0; i < instance.size(); i++) { 
     423                    ISelectionInstance selectionInstance = 
     424                        taskFactory.createNewTaskInstance(selection); 
     425                    taskBuilder.setChild(selectionInstance, instance.get(i)); 
     426                    taskBuilder.setTaskInstance(instance, i, selectionInstance); 
     427                } 
     428            } 
     429        } 
     430        else { 
     431            taskBuilder.setMarkedTask(iteration, iteratedTaskVariants.get(0)); 
     432        } 
     433    } 
     434 
    367435 
    368436        ISequence matchAsSequence(RuleApplicationData appData, Match m) { 
Note: See TracChangeset for help on using the changeset viewer.