Changeset 1854


Ignore:
Timestamp:
12/23/14 11:45:51 (10 years ago)
Author:
pharms
Message:
  • only sequences are now compared
  • added check that only one replacement task is calculated per merge
  • corrected harmonization of iterations and optionals being parents of merge results
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/CondenseSimilarTasksRule.java

    r1767 r1854  
    1515package de.ugoe.cs.autoquest.tasktrees.temporalrelation; 
    1616 
    17 import java.io.PrintStream; 
    1817import java.util.ArrayList; 
    1918import java.util.Collection; 
     
    2322import java.util.List; 
    2423import java.util.Map; 
    25 import java.util.logging.Level; 
    2624 
    2725import de.ugoe.cs.autoquest.tasktrees.taskequality.TaskEquality; 
     
    3836import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; 
    3937import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequenceInstance; 
    40 import de.ugoe.cs.autoquest.tasktrees.treeifc.IStructuringTemporalRelationship; 
    4138import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 
    4239import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskBuilder; 
     
    192189         
    193190        do { 
    194             //System.out.println("recreating task model"); 
    195191            appData.setTaskModel(taskFactory.createTaskModel(sessions)); 
    196192            appData.setMostSimilarTasks(null); 
     193             
     194            // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     195            // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TEST IMPLEMENTATION >>>>>>>>>>>>>>>>>>>>> 
     196            // for (ITask task : appData.getTaskModel().getTasks()) { 
     197            //     if (task.getInstances().size() <= 0) { 
     198            //         throw new RuntimeException("task " + task + " has no instances anymore"); 
     199            //     } 
     200            //      
     201            //     try { 
     202            //         new TaskTreeValidator().validate(task); 
     203            //     } 
     204            //     catch (Exception e) { 
     205            //         new TaskTreeEncoder().encode(task, System.err); 
     206            //     } 
     207            // } 
     208            //  
     209            // new TaskTreeValidator().validate(sessions); 
     210             
     211            // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     212            // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TEST IMPLEMENTATION <<<<<<<<<<<<<<<<<<<<<< 
     213 
    197214 
    198215            Console.println("condensing " + appData.getTaskModel().getTasks().size() + " tasks"); 
     
    201218 
    202219            if (appData.getMostSimilarTasks() != null) { 
    203                 /*System.out.println("*************************************************************"); 
    204                 System.out.println("handling " + appData.getMostSimilarTasks().size() + 
    205                                    " most similar tasks"); 
    206                 System.out.println("*************************************************************");*/ 
    207220                for (SimilarTasks mostSimilarTask : appData.getMostSimilarTasks()) { 
    208221                    handleSimilarTasks(mostSimilarTask, appData); 
     
    212225            } 
    213226             
    214             harmonizeEqualMarkingTemporalRelationships(appData); 
    215227        } 
    216228        while (appData.getMostSimilarTasks() != null); 
     
    266278        Iterator<ITask> taskIterator = allTasks.iterator(); 
    267279        List<ITask> taskList = new ArrayList<ITask>(allTasks.size()); 
     280         
    268281        while (taskIterator.hasNext()) { 
    269282            ITask task = taskIterator.next(); 
    270283             
    271             if ((task instanceof IStructuringTemporalRelationship)/* && 
    272                 (!appData.isSelfCreatedTask(task))*/) 
    273             { 
     284            // only Sequences need to be compared with each other. Iterations differ only in their 
     285            // child, i.e., in the child sequences. 
     286            if (task instanceof ISequence) { 
    274287                taskList.add(task); 
    275288            } 
     
    295308        // discarding tasks in preceding merges. 
    296309         
    297         //similarTasks.dump(System.out); 
     310        // similarTasks.dump(System.out); 
    298311         
    299312        if ((similarTasks.getLeftHandSide().getInstances().size() <= 0) || 
     
    313326            (similarTasks, identTaskHandlStrat.getTaskComparator()); 
    314327         
    315         //similarTasks.dump(System.out); 
     328        if (similarTasks == null) { 
     329            // this may happen, if no mergable level of similarity can be found 
     330            return; 
     331        } 
     332         
     333        // similarTasks.dump(System.out); 
    316334 
    317335        List<FlattenInstruction> flattenInstructions = 
    318336            getFlattenInstructions(similarTasks, appData); 
    319337         
    320         for (FlattenInstruction instruction : flattenInstructions) { 
    321             instruction.dump(System.out); 
    322         } 
     338        // for (FlattenInstruction instruction : flattenInstructions) { 
     339        //     instruction.dump(System.out); 
     340        // } 
    323341         
    324342        int noOfFlattenedInstances = similarTasks.getLeftHandSide().getInstances().size() + 
     
    330348         
    331349        for (FlattenInstruction instruction : flattenInstructions) { 
    332             System.out.println("exclude " + instruction.path); 
     350            //System.out.println("exclude " + instruction.path); 
    333351            excludes.add(instruction.path); 
    334352        } 
     
    343361            (similarTasks.getRightHandSide(), flattenInstructions, flattenedSessions, excludes); 
    344362 
     363        // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     364        // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TEST IMPLEMENTATION >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    345365        /*for (IUserSession session : flattenedSessions.values()) { 
    346             new TaskTreeEncoder().encode(session, System.out); 
     366            System.out.println("user session {"); 
     367             
     368            for (ITaskInstance instance : session) { 
     369                System.out.println(instance); 
     370            } 
     371             
     372            System.out.println("}"); 
    347373        }*/ 
     374        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
     375        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TEST IMPLEMENTATION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    348376         
    349377        List<IUserSession> flattenedSessionList = 
     
    354382         
    355383        Map<ITaskInstance, ITaskInstance> replacements = new HashMap<ITaskInstance, ITaskInstance>(); 
     384        ITask replacementTask = null; 
     385         
    356386        for (Map.Entry<ITaskInstance, IUserSession> entry : flattenedSessions.entrySet()) { 
    357              
    358              
    359387            // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    360388            // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TEST IMPLEMENTATION >>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    361389            // the user sessions were sufficiently equal to have now only one common task as child 
     390             
    362391            if (entry.getValue().size() != 1) { 
    363392                //new TaskTreeEncoder().encode(entry.getValue(), System.out, excludes); 
    364393                throw new RuntimeException("flattened sessions were not combined as expected"); 
    365394            } 
     395             
     396            if (replacementTask == null) { 
     397                replacementTask = entry.getValue().get(0).getTask(); 
     398            } 
     399            else if (replacementTask != entry.getValue().get(0).getTask()) { 
     400                throw new RuntimeException("two separate replacement tasks were calculated as " + 
     401                                           "replacement, one for both tasks to be merged"); 
     402            } 
     403             
    366404            // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    367405            // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TEST IMPLEMENTATION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    368406             
    369              
    370407            replacements.put(entry.getKey(), entry.getValue().get(0)); 
    371408        } 
    372          
    373409         
    374410        // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
    375411        // >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> TEST IMPLEMENTATION >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> 
     412        // ((Task) replacementTask).setDescription 
     413        //     (replacementTask + " calculated as full replacement for " + 
     414        //      similarTasks.getLeftHandSide() + " and " + similarTasks.getRightHandSide()); 
     415     
    376416        int allInstances = similarTasks.getLeftHandSide().getInstances().size() + 
    377417            similarTasks.getRightHandSide().getInstances().size(); 
     
    390430        // <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< TEST IMPLEMENTATION <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    391431 
     432        // create also replacements for potential parent iterations or optionals 
     433        IIteration harmonizedIteration = taskFactory.createNewIteration(); 
     434        taskBuilder.setMarkedTask(harmonizedIteration, replacementTask); 
     435         
     436        IOptional harmonizedOptional = taskFactory.createNewOptional(); 
     437        taskBuilder.setMarkedTask(harmonizedOptional, replacementTask); 
    392438         
    393439        for (IUserSession session : appData.getSessions()) { 
    394             replaceTaskInstances(session, replacements, similarTasks); 
     440            replaceTaskInstances(session, replacements, similarTasks, 
     441                                 harmonizedIteration, harmonizedOptional); 
     442             
     443            // several subsequent instances, which had formerly different tasks, may now have the 
     444            // same. Hence, they need to be merged. But as everything else would be way too complex, 
     445            // we only perform the merge, if they occur next to each other on the same level 
     446            mergeSubsequentIdenticalMarkingTemporalRelationships(session); 
    395447        } 
    396448         
     
    420472         
    421473        List<FlattenInstruction> result = new LinkedList<FlattenInstruction>(); 
    422         TaskInstanceComparator comp = identTaskHandlStrat.getTaskComparator(); 
     474        TaskComparator comp = identTaskHandlStrat.getTaskComparator(); 
    423475         
    424476        // first create instructions for the deltas 
     
    427479                (delta.getType() == Delta.TYPE.DELETE)) 
    428480            { 
     481                // System.out.println("handling " + delta.getType()); 
    429482                Chunk chunk; 
    430483                TaskPath insertAfterPath = null; 
     
    434487                    chunk = delta.getRevised(); 
    435488                    int pos = delta.getOriginal().getPosition(); 
     489                    // System.out.println(" position " + pos); 
     490                     
    436491                    if (pos > 0) { 
    437492                        insertAfterPath = leftHandSideTraversal.getTraversalPaths()[pos - 1]; 
     
    457512                    optional = taskFactory.createNewOptional(); 
    458513                    taskBuilder.setMarkedTask(optional, child); 
     514                    // ((Task) optional).setDescription(optional.getDescription() + 
     515                    //                                  " created for " + delta.getType()); 
    459516                    optional = (IOptional) appData.ensureUnique(optional); 
    460517                    createReplacementInstructions(chunk, optional, null, result); 
     
    553610                        // of the children as variants 
    554611                        selection = taskFactory.createNewSelection(); 
     612                        // ((Task) selection).setDescription(selection.getDescription() + 
     613                        //                                   " created for " + delta.getType()); 
    555614                        taskBuilder.addChild(selection, child1); 
    556615                        taskBuilder.addChild(selection, child2); 
     
    668727        else { 
    669728            ISequence task = taskFactory.createNewSequence(); 
    670              
     729            // ((Task) task).setDescription(task.getDescription() + 
     730            //                              " created to represent a chunk"); 
     731 
    671732            for (Object pathObj : chunk.getLines()) { 
    672733                TaskPath path = (TaskPath) pathObj; 
     
    736797        boolean instructionApplied = false; 
    737798         
    738         TaskInstanceComparator comp = identTaskHandlStrat.getTaskComparator(); 
     799        TaskComparator comp = identTaskHandlStrat.getTaskComparator(); 
    739800         
    740801        //System.out.println("applying instructions on " + taskPath); 
     
    743804            if (instruction.matches(taskPath)) { 
    744805                //System.out.print("found instruction "); 
    745                 instruction.dump(System.out); 
     806                //instruction.dump(System.out); 
    746807                 
    747808                switch (instruction.getInstruction()) { 
     
    9981059    private void replaceTaskInstances(ITaskInstanceList                 taskInstanceList, 
    9991060                                      Map<ITaskInstance, ITaskInstance> replacements, 
    1000                                       SimilarTasks                      similarTasks) 
     1061                                      SimilarTasks                      similarTasks, 
     1062                                      IIteration                        harmonizedIteration, 
     1063                                      IOptional                         harmonizedOptional) 
    10011064    { 
    10021065        for (int i = 0; i < taskInstanceList.size(); i++) { 
     
    10061069            if (replacement != null) { 
    10071070                 
    1008                 // update the model 
     1071                // update the model for sequences (others are updated in the calling method) 
    10091072                if (taskInstanceList instanceof ISequenceInstance) { 
    10101073                    ISequence task = ((ISequenceInstance) taskInstanceList).getSequence(); 
    10111074                    taskBuilder.setChild(task, i, replacement.getTask()); 
    1012                 } 
    1013                 else if (taskInstanceList instanceof IIterationInstance) { 
    1014                     taskBuilder.setMarkedTask 
    1015                         (((IIterationInstance) taskInstanceList).getIteration(), 
    1016                          replacement.getTask()); 
    10171075                } 
    10181076                 
     
    10231081                discardTaskInstancesNotBelongingToTraversals(childInstance, path, similarTasks); 
    10241082            } 
    1025             else if (childInstance instanceof ITaskInstanceList) { 
    1026                 replaceTaskInstances((ITaskInstanceList) childInstance, replacements, similarTasks); 
    1027             } 
    1028             else if (childInstance instanceof IOptionalInstance) { 
    1029                 replaceTaskInstances((IOptionalInstance) childInstance, replacements, similarTasks); 
    1030             } 
    1031             else if (childInstance instanceof ISelectionInstance) { 
    1032                 replaceTaskInstances((ISelectionInstance) childInstance, replacements, similarTasks); 
     1083            else { 
     1084                ITask modelUpdate = replaceTaskInstances(childInstance, replacements, similarTasks, 
     1085                                                         harmonizedIteration, harmonizedOptional); 
     1086                 
     1087                if (modelUpdate != null) { 
     1088                    if (taskInstanceList instanceof ISequenceInstance) { 
     1089                        taskBuilder.setChild 
     1090                            (((ISequenceInstance) taskInstanceList).getSequence(), i, modelUpdate); 
     1091                    } 
     1092                } 
    10331093            } 
    10341094        } 
     
    10401100    private void replaceTaskInstances(IOptionalInstance                 optionalInstance, 
    10411101                                      Map<ITaskInstance, ITaskInstance> replacements, 
    1042                                       SimilarTasks                      similarTasks) 
     1102                                      SimilarTasks                      similarTasks, 
     1103                                      IIteration                        harmonizedIteration, 
     1104                                      IOptional                         harmonizedOptional) 
    10431105    { 
    10441106        ITaskInstance childInstance = optionalInstance.getChild(); 
     
    10481110             
    10491111            if (replacement != null) { 
    1050                  
    1051                 // update the model 
    1052                 taskBuilder.setMarkedTask(optionalInstance.getOptional(), replacement.getTask()); 
     1112                // do not update the model --> is updated in the calling method 
    10531113                 
    10541114                // perform the actual replacement and throw away the instance 
     
    10581118                discardTaskInstancesNotBelongingToTraversals(childInstance, path, similarTasks); 
    10591119            } 
    1060             else if (childInstance instanceof ITaskInstanceList) { 
    1061                 replaceTaskInstances((ITaskInstanceList) childInstance, replacements, similarTasks); 
    1062             } 
    1063             else if (childInstance instanceof ISelectionInstance) { 
    1064                 replaceTaskInstances((ISelectionInstance) childInstance, replacements, similarTasks); 
    1065             } 
    1066             else if (childInstance instanceof IOptionalInstance) { 
    1067                 throw new IllegalArgumentException 
    1068                     ("optional must not have an optional as its child"); 
     1120            else { 
     1121                ITask modelUpdate = replaceTaskInstances(childInstance, replacements, similarTasks, 
     1122                                                         harmonizedIteration, harmonizedOptional); 
     1123                 
     1124                if (modelUpdate != null) { 
     1125                    taskBuilder.setMarkedTask(optionalInstance.getOptional(), modelUpdate); 
     1126                } 
    10691127            } 
    10701128        } 
     
    10761134    private void replaceTaskInstances(ISelectionInstance                selectionInstance, 
    10771135                                      Map<ITaskInstance, ITaskInstance> replacements, 
    1078                                       SimilarTasks                      similarTasks) 
     1136                                      SimilarTasks                      similarTasks, 
     1137                                      IIteration                        harmonizedIteration, 
     1138                                      IOptional                         harmonizedOptional) 
    10791139    { 
    1080         TaskInstanceComparator comparator = identTaskHandlStrat.getTaskComparator(); 
     1140        TaskComparator comparator = identTaskHandlStrat.getTaskComparator(); 
    10811141         
    10821142        ITaskInstance childInstance = selectionInstance.getChild(); 
     
    11161176                discardTaskInstancesNotBelongingToTraversals(childInstance, path, similarTasks); 
    11171177            } 
    1118             else if (childInstance instanceof ITaskInstanceList) { 
    1119                 replaceTaskInstances((ITaskInstanceList) childInstance, replacements, similarTasks); 
    1120             } 
    1121             else if (childInstance instanceof IOptionalInstance) { 
    1122                 replaceTaskInstances((IOptionalInstance) childInstance, replacements, similarTasks); 
    1123             } 
    1124             else if (childInstance instanceof ISelectionInstance) { 
    1125                 throw new IllegalArgumentException 
    1126                     ("selection must not have a selection as its child"); 
    1127             } 
    1128         } 
     1178            else { 
     1179                ITask modelUpdate = replaceTaskInstances(childInstance, replacements, similarTasks, 
     1180                                                         harmonizedIteration, harmonizedOptional); 
     1181                 
     1182                if (modelUpdate != null) { 
     1183                    taskBuilder.removeChild 
     1184                        (selectionInstance.getSelection(), childInstance.getTask()); 
     1185 
     1186                    boolean found = false; 
     1187                    for (ITask child : selectionInstance.getSelection().getChildren()) { 
     1188                        if (comparator.equals(child, modelUpdate)) { 
     1189                            found = true; 
     1190                            break; 
     1191                        } 
     1192                    } 
     1193                     
     1194                    if (!found) { 
     1195                        taskBuilder.addChild(selectionInstance.getSelection(), modelUpdate); 
     1196                    } 
     1197                } 
     1198            } 
     1199        } 
     1200    } 
     1201 
     1202    /** 
     1203     * 
     1204     */ 
     1205    private ITask replaceTaskInstances(ITaskInstance                     childInstance, 
     1206                                       Map<ITaskInstance, ITaskInstance> replacements, 
     1207                                       SimilarTasks                      similarTasks, 
     1208                                       IIteration                        harmonizedIteration, 
     1209                                       IOptional                         harmonizedOptional) 
     1210    { 
     1211        ITask modelUpdate = null; 
     1212         
     1213        if (childInstance instanceof IIterationInstance) { 
     1214            ITask markedTask = ((IIterationInstance) childInstance).getIteration().getMarkedTask(); 
     1215             
     1216            if ((markedTask == similarTasks.getLeftHandSide()) || 
     1217                (markedTask == similarTasks.getRightHandSide())) 
     1218            { 
     1219                taskBuilder.setTask(childInstance, harmonizedIteration); 
     1220                modelUpdate = harmonizedIteration; 
     1221            } 
     1222 
     1223            replaceTaskInstances((ITaskInstanceList) childInstance, replacements, similarTasks, 
     1224                                 harmonizedIteration, harmonizedOptional); 
     1225        } 
     1226        else if (childInstance instanceof IOptionalInstance) { 
     1227            ITask markedTask = ((IOptionalInstance) childInstance).getOptional().getMarkedTask(); 
     1228             
     1229            if ((markedTask == similarTasks.getLeftHandSide()) || 
     1230                (markedTask == similarTasks.getRightHandSide())) 
     1231            { 
     1232                taskBuilder.setTask(childInstance, harmonizedOptional); 
     1233                modelUpdate = harmonizedOptional; 
     1234            } 
     1235             
     1236            replaceTaskInstances((IOptionalInstance) childInstance, replacements, similarTasks, 
     1237                                 harmonizedIteration, harmonizedOptional); 
     1238        } 
     1239        else if (childInstance instanceof ISelectionInstance) { 
     1240            replaceTaskInstances((ISelectionInstance) childInstance, replacements, similarTasks, 
     1241                                 harmonizedIteration, harmonizedOptional); 
     1242        } 
     1243        else if (childInstance instanceof ISequenceInstance) { 
     1244            replaceTaskInstances((ITaskInstanceList) childInstance, replacements, similarTasks, 
     1245                                 harmonizedIteration, harmonizedOptional); 
     1246        } 
     1247         
     1248        return modelUpdate; 
    11291249    } 
    11301250 
     
    11981318        } 
    11991319    } 
    1200  
    1201     /** 
    1202      * 
    1203      */ 
    1204     private void harmonizeEqualMarkingTemporalRelationships(RuleApplicationData appData) { 
    1205         Console.println("harmonizing marking temporal relationships"); 
    1206          
    1207         TaskInstanceComparator comparator = identTaskHandlStrat.getTaskComparator(); 
    1208         ITaskModel model = taskFactory.createTaskModel(appData.getSessions()); 
    1209          
    1210         // determine a list of equal marking temporal relationship lists 
    1211         List<List<IMarkingTemporalRelationship>> equalTasks = 
    1212             new LinkedList<List<IMarkingTemporalRelationship>>(); 
    1213          
    1214         for (ITask task1 : model.getTasks()) { 
    1215             if (task1 instanceof IMarkingTemporalRelationship) { 
    1216                 IMarkingTemporalRelationship parent1 = (IMarkingTemporalRelationship) task1; 
    1217                 for (ITask task2 : model.getTasks()) { 
    1218                     if (task2 instanceof IMarkingTemporalRelationship) { 
    1219                         IMarkingTemporalRelationship parent2 = (IMarkingTemporalRelationship) task2; 
    1220                          
    1221                         // check if the parents are of the same type, but distinct and if the 
    1222                         // children are identical 
    1223                         if (!comparator.equals(parent1, parent2) && 
    1224                             (parent1.getClass().isAssignableFrom(parent2.getClass()) || 
    1225                              parent2.getClass().isAssignableFrom(parent1.getClass())) && 
    1226                             comparator.equals(parent1.getMarkedTask(), parent2.getMarkedTask())) 
    1227                         { 
    1228                             List<IMarkingTemporalRelationship> equalTaskList = null; 
    1229                              
    1230                             GET_EQUAL_TASK_LIST: 
    1231                             for (List<IMarkingTemporalRelationship> candidate : equalTasks) { 
    1232                                 for (IMarkingTemporalRelationship task : candidate) { 
    1233                                     if (comparator.equals(task, parent1) || 
    1234                                         comparator.equals(task, parent2)) 
    1235                                     { 
    1236                                         equalTaskList = candidate; 
    1237                                         break GET_EQUAL_TASK_LIST; 
    1238                                     } 
    1239                                 } 
    1240                             } 
    1241                              
    1242                             if (equalTaskList == null) { 
    1243                                 equalTaskList = new LinkedList<IMarkingTemporalRelationship>(); 
    1244                                 equalTasks.add(equalTaskList); 
    1245                             } 
    1246                              
    1247                             boolean found1 = false; 
    1248                             boolean found2 = false; 
    1249                              
    1250                             for (IMarkingTemporalRelationship task : equalTaskList) { 
    1251                                 if (comparator.equals(task, parent1)) { 
    1252                                     found1 = true; 
    1253                                 } 
    1254                                 else if (comparator.equals(task, parent2)) { 
    1255                                     found2 = true; 
    1256                                 } 
    1257                             } 
    1258                              
    1259                             if (!found1) { 
    1260                                 equalTaskList.add(parent1); 
    1261                             } 
    1262                              
    1263                             if (!found2) { 
    1264                                 equalTaskList.add(parent2); 
    1265                             } 
    1266                         } 
    1267                     } 
    1268                 } 
    1269             } 
    1270         } 
    1271          
    1272         Console.traceln(Level.FINER, "found " + equalTasks.size() + 
    1273                         " groups of equal marking temporal relationships"); 
    1274          
    1275         // set the same task for all instances 
    1276         List<ITaskInstance> instanceBuffer = new ArrayList<ITaskInstance>(); 
    1277         for (List<IMarkingTemporalRelationship> equalTaskList : equalTasks) { 
    1278             for (int i = 1; i < equalTaskList.size(); i++) { 
    1279                 // to prevent a concurrent modification, first copy the list of instances 
    1280                 instanceBuffer.clear(); 
    1281                 instanceBuffer.addAll(equalTaskList.get(i).getInstances()); 
    1282                 for (ITaskInstance instance : instanceBuffer) { 
    1283                     taskBuilder.setTask(instance, equalTaskList.get(0)); 
    1284                 } 
    1285             } 
    1286         } 
    1287          
    1288         // several subsequent instances, which had formerly different tasks, may now have the same. 
    1289         // Hence, they need to be merged. But as everything else would be way too complex, we only 
    1290         // perform the merge, if they occur next to each other on the same level 
    1291         for (IUserSession session : appData.getSessions()) { 
    1292             mergeSubsequentIdenticalMarkingTemporalRelationships(session); 
    1293         } 
    1294          
    1295     } 
    12961320     
    12971321    /** 
     
    13001324    private void mergeSubsequentIdenticalMarkingTemporalRelationships(ITaskInstanceList list) { 
    13011325        int index = 0; 
    1302         TaskInstanceComparator comparator = identTaskHandlStrat.getTaskComparator(); 
     1326        TaskComparator comparator = identTaskHandlStrat.getTaskComparator(); 
    13031327         
    13041328        while (index < (list.size() - 1)) { 
     
    14451469         *  
    14461470         */ 
    1447         RuleApplicationData(List<IUserSession> sessions) { 
     1471        private RuleApplicationData(List<IUserSession> sessions) { 
    14481472            this.sessions = sessions; 
    14491473        } 
     
    14651489         * @return the mostSimilarTasksDeterminer 
    14661490         */ 
    1467         MostSimilarTaskDeterminer getMostSimilarTasksDeterminer() { 
     1491        private MostSimilarTaskDeterminer getMostSimilarTasksDeterminer() { 
    14681492            return mostSimilarTasksDeterminer; 
    14691493        } 
     
    14721496         * 
    14731497         */ 
    1474         void markAsAlreadyCondensed(ITask task1, ITask task2) { 
     1498        private void markAsAlreadyCondensed(ITask task1, ITask task2) { 
    14751499            mostSimilarTasksDeterminer.addComparisonToSkip(task1, task2); 
    14761500        } 
     
    15501574                        ITask child2 = ((IOptional) newTask).getMarkedTask(); 
    15511575                        if (createdChildEquals(child1, child2)) { 
    1552                             System.out.println("reusing optional " + newTask + " for " + task); 
     1576                            // System.out.println("reusing optional " + newTask + " for " + task); 
    15531577                            return newTask; 
    15541578                        } 
     
    15621586                        List<ITask> children2 = ((ISelection) newTask).getChildren(); 
    15631587                        if (createdSelectionChildrenEqual(children1, children2)) { 
    1564                             System.out.println("reusing selection " + newTask + " for " + task); 
     1588                            /*System.out.println("reusing selection " + newTask + " for " + task); 
    15651589                             
    1566                             /*System.out.println("---------------------------- existing task"); 
     1590                            System.out.println("---------------------------- existing task"); 
    15671591                            new TaskTreeEncoder().encode(newTask, System.out); 
    15681592                             
     
    16061630 
    16071631                    if (equal) { 
    1608                         System.out.println("reusing sequence " + candidate + " for " + task); 
     1632                        // System.out.println("reusing sequence " + candidate + " for " + task); 
    16091633                        return candidate; 
    16101634                    } 
     
    17881812         
    17891813 
    1790         /** 
    1791          * 
    1792          */ 
    1793         void dump(PrintStream out) { 
    1794             for (int i = 0; i < path.size(); i++) { 
    1795                 out.print("-->"); 
    1796                 out.print(path.getTask(i).getId()); 
    1797                 out.print('('); 
    1798                 out.print(path.get(i).getIndex()); 
    1799                 out.print(')'); 
    1800             } 
    1801              
    1802             out.print("  "); 
    1803             out.print(instruction); 
    1804             
    1805             out.println(); 
    1806         } 
     1814//        /** 
     1815//         * 
     1816//         */ 
     1817//        void dump(PrintStream out) { 
     1818//            for (int i = 0; i < path.size(); i++) { 
     1819//                out.print("-->"); 
     1820//                out.print(path.getTask(i).getId()); 
     1821//                out.print('('); 
     1822//                out.print(path.get(i).getIndex()); 
     1823//                out.print(')'); 
     1824//            } 
     1825//             
     1826//            out.print("  "); 
     1827//            out.print(instruction); 
     1828//            
     1829//            out.println(); 
     1830//        } 
    18071831         
    18081832    } 
Note: See TracChangeset for help on using the changeset viewer.