Changeset 1733 for branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SelectionComparisonRule.java
- Timestamp:
- 09/05/14 19:33:12 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/SelectionComparisonRule.java
r1294 r1733 24 24 /** 25 25 * <p> 26 * this task comparison rule is capable of comparing selections. If both selections do not have 27 * children, they are treated as lexically equal. If they have children, each child of both 28 * selections is compared to each child of the respective other selection. The resulting equality 29 * is the most concrete one of all these comparisons. I.e. if all children are at least lexically 30 * equal, then the selections are lexically equal. If all children are at least syntactically 31 * equal, then the selections are syntactically equal. If all children are at least semantically 32 * equal, then the selections are semantically equal. If only one of the selections has children, 33 * then the selections are unequal. The comparison is broken up, if only a specific equality is 34 * checked for and this equality is ensured. 26 * this task comparison rule is capable of comparing selections. If both 27 * selections do not have children, they are treated as lexically equal. If they 28 * have children, each child of both selections is compared to each child of the 29 * respective other selection. The resulting equality is the most concrete one 30 * of all these comparisons. I.e. if all children are at least lexically equal, 31 * then the selections are lexically equal. If all children are at least 32 * syntactically equal, then the selections are syntactically equal. If all 33 * children are at least semantically equal, then the selections are 34 * semantically equal. If only one of the selections has children, then the 35 * selections are unequal. The comparison is broken up, if only a specific 36 * equality is checked for and this equality is ensured. 35 37 * </p> 36 38 * … … 40 42 public class SelectionComparisonRule implements TaskComparisonRule { 41 43 42 /* (non-Javadoc) 43 * @see TaskComparisonRule#isApplicable(ITask, ITask) 44 */ 45 @Override 46 public boolean isApplicable(ITask task1, ITask task2) { 47 return (task1 instanceof ISelection) && (task2 instanceof ISelection); 48 } 49 50 /* (non-Javadoc) 51 * @see TaskComparisonRule#areLexicallyEqual(ITask, ITask) 52 */ 53 @Override 54 public boolean areLexicallyEqual(ITask task1, ITask task2) { 55 TaskEquality equality = getEquality(task1, task2, TaskEquality.LEXICALLY_EQUAL); 56 return (equality != null) && (equality.isAtLeast(TaskEquality.LEXICALLY_EQUAL)); 57 } 58 59 /* (non-Javadoc) 60 * @see TaskComparisonRule#areSyntacticallyEqual(ITask, ITask) 61 */ 62 @Override 63 public boolean areSyntacticallyEqual(ITask task1, ITask task2) { 64 TaskEquality equality = getEquality(task1, task2, TaskEquality.SYNTACTICALLY_EQUAL); 65 return (equality != null) && (equality.isAtLeast(TaskEquality.SYNTACTICALLY_EQUAL)); 66 } 67 68 /* (non-Javadoc) 69 * @see TaskComparisonRule#areSemanticallyEqual(ITask, ITask) 70 */ 71 @Override 72 public boolean areSemanticallyEqual(ITask task1, ITask task2) { 73 TaskEquality equality = getEquality(task1, task2, TaskEquality.SEMANTICALLY_EQUAL); 74 return (equality != null) && (equality.isAtLeast(TaskEquality.SEMANTICALLY_EQUAL)); 75 } 76 77 /* (non-Javadoc) 78 * @see TaskComparisonRule#compare(ITask, ITask) 79 */ 80 @Override 81 public TaskEquality compare(ITask task1, ITask task2) { 82 return getEquality(task1, task2, null); 83 } 84 85 /* (non-Javadoc) 86 * @see TaskComparisonRule#isApplicable(ITaskInstance, ITaskInstance) 87 */ 88 @Override 89 public boolean isApplicable(ITaskInstance instance1, ITaskInstance instance2) { 90 return isApplicable(instance1.getTask(), instance2.getTask()); 91 } 92 93 /* (non-Javadoc) 94 * @see TaskComparisonRule#areLexicallyEqual(ITaskInstance, ITaskInstance) 95 */ 96 @Override 97 public boolean areLexicallyEqual(ITaskInstance instance1, ITaskInstance instance2) { 98 TaskEquality equality = getEquality(instance1, instance2, TaskEquality.LEXICALLY_EQUAL); 99 return (equality != null) && (equality.isAtLeast(TaskEquality.LEXICALLY_EQUAL)); 100 } 101 102 /* (non-Javadoc) 103 * @see TaskComparisonRule#areSyntacticallyEqual(ITaskInstance, ITaskInstance) 104 */ 105 @Override 106 public boolean areSyntacticallyEqual(ITaskInstance instance1, ITaskInstance instance2) { 107 TaskEquality equality = getEquality(instance1, instance2, TaskEquality.SYNTACTICALLY_EQUAL); 108 return (equality != null) && (equality.isAtLeast(TaskEquality.SYNTACTICALLY_EQUAL)); 109 } 110 111 /* (non-Javadoc) 112 * @see TaskComparisonRule#areSemanticallyEqual(ITaskInstance, ITaskInstance) 113 */ 114 @Override 115 public boolean areSemanticallyEqual(ITaskInstance instance1, ITaskInstance instance2) { 116 TaskEquality equality = getEquality(instance1, instance2, TaskEquality.SEMANTICALLY_EQUAL); 117 return (equality != null) && (equality.isAtLeast(TaskEquality.SEMANTICALLY_EQUAL)); 118 } 119 120 /* (non-Javadoc) 121 * @see TaskComparisonRule#compare(ITaskInstance, ITaskInstance) 122 */ 123 @Override 124 public TaskEquality compare(ITaskInstance instance1, ITaskInstance instance2) { 125 return getEquality(instance1, instance2, null); 126 } 127 128 /** 129 * <p> 130 * compares two selections with each other checking for the provided required level of 131 * equality. If this level is ensured, the method immediately returns. The more concrete 132 * the required equality level, the more checks this method performs. 133 * </p> 134 * 135 * @param task1 the first task to be compared 136 * @param task2 the second task to be compared 137 * @param requiredEqualityLevel the equality level to be checked for 138 * 139 * @return the determined equality. 140 */ 141 private TaskEquality getEquality(ITask task1, ITask task2, TaskEquality requiredEqualityLevel) { 142 List<ITask> children1 = ((ISelection) task1).getChildren(); 143 List<ITask> children2 = ((ISelection) task2).getChildren(); 144 145 // if both selections do not have children, they are lexically equal. If only one of them 146 // has children, they are unequal. 147 if ((children1.size() == 0) && (children2.size() == 0)) { 148 return TaskEquality.LEXICALLY_EQUAL; 149 } 150 else if ((children1.size() == 0) || (children2.size() == 0)) { 151 return TaskEquality.UNEQUAL; 152 } 153 154 if (requiredEqualityLevel == null) { 155 // calculate the common equality level for all children of both selections. 156 // do it in both directions to ensure commutative comparison 157 return getMostConcreteEqualityLevel(children1, children2); 158 } 159 else { 160 // we are searching for a specific equality 161 if (checkEqualityLevel(children1, children2, requiredEqualityLevel)) { 162 return requiredEqualityLevel; 163 } 164 else { 165 return TaskEquality.UNEQUAL; 166 } 167 } 168 } 169 170 /** 171 * <p> 172 * determines the most concrete equality level for all tasks in the first list compared to all 173 * tasks in the second list. It is sufficient, if there is one task in one list for which there 174 * exist an equal task in the other list. 175 * </p> 176 * 177 * @param children1 the first list to be compared 178 * @param children2 the second list to be compared 179 * 180 * @return the most concrete task equality identified for all tasks in the first list with 181 * respect to the second list 182 */ 183 private TaskEquality getMostConcreteEqualityLevel(List<ITask> children1, List<ITask> children2) 184 { 185 TaskEquality childEquality; 186 TaskEquality currentEquality; 187 for (ITask child1 : children1) { 188 childEquality = null; 189 for (ITask child2 : children2) { 190 currentEquality = callRuleManager(child1, child2, null); 191 if ((currentEquality != null) && (currentEquality != TaskEquality.UNEQUAL)) { 192 if (childEquality == null) { 193 childEquality = currentEquality; 194 } 195 else { 196 childEquality = childEquality.getCommonDenominator(currentEquality); 197 } 198 199 if (childEquality.isAtLeast(TaskEquality.LEXICALLY_EQUAL)) { 200 // as we calculate the most concrete equality, we can break up here 201 return TaskEquality.LEXICALLY_EQUAL; 202 } 203 } 204 } 205 } 206 207 // as the comparison should be commutative, we do not need to check, if in list 2 there is 208 // a child equal to one in list 1 209 return TaskEquality.UNEQUAL; 210 } 211 212 /** 213 * <p> 214 * ensures for the two given lists, that for at least one task in the first list there is a task 215 * in the second list being on the given level equal to the task in the first list. 216 * </p> 217 * 218 * @param children1 the first list to be compared 219 * @param children2 the second list to be compared 220 * @param requiredEqualityLevel the equality level to be checked for 221 * 222 * @return true if there is a task in the first list that has an equal task in the second list 223 * when considering the given equality level, false else. 224 */ 225 private boolean checkEqualityLevel(List<ITask> children1, 226 List<ITask> children2, 227 TaskEquality requiredEqualityLevel) 228 { 229 TaskEquality currentEquality; 230 for (ITask child1 : children1) { 231 for (ITask child2 : children2) { 232 currentEquality = callRuleManager(child1, child2, requiredEqualityLevel); 233 if ((currentEquality != null) && (currentEquality.isAtLeast(requiredEqualityLevel))) 234 { 235 // we found at least one equal child with sufficient equality in the 236 // second list. So be can break up for this child. 237 return true; 238 } 239 } 240 } 241 242 return false; 243 } 244 245 /** 246 * <p> 247 * used to to call the task equality rule manager for the comparison of the two provided 248 * children. If no required equality level is provided, than the most concrete equality is 249 * returned. Otherwise, the required equality is returned as long as the children are equal 250 * on that level. 251 * </p> 252 * 253 * @param child1 the first task to be compared 254 * @param child2 the second task to be compared 255 * @param requiredEqualityLevel the equality level to be checked for 256 * 257 * @return the determined equality 258 */ 259 private TaskEquality callRuleManager(ITask child1, 260 ITask child2, 261 TaskEquality requiredEqualityLevel) 262 { 263 if (requiredEqualityLevel == null) { 264 return TaskEqualityRuleManager.getInstance().compare(child1, child2); 265 } 266 else if (TaskEqualityRuleManager.getInstance().areAtLeastEqual 267 (child1, child2, requiredEqualityLevel)) 268 { 269 return requiredEqualityLevel; 270 } 271 else { 272 return TaskEquality.UNEQUAL; 273 } 274 } 275 276 /** 277 * <p> 278 * compares two selection instances with each other checking for the provided required level of 279 * equality. If this level is ensured, the method immediately returns. The more concrete 280 * the required equality level, the more checks this method performs. 281 * </p> 282 * 283 * @param taskInstance1 the first task instance to be compared 284 * @param taskInstance2 the second task instance to be compared 285 * @param requiredEqualityLevel the equality level to be checked for 286 * 287 * @return the determined equality. 288 */ 289 private TaskEquality getEquality(ITaskInstance taskInstance1, 290 ITaskInstance taskInstance2, 291 TaskEquality requiredEqualityLevel) 292 { 293 ITaskInstance child1 = ((ISelectionInstance) taskInstance1).getChild(); 294 ITaskInstance child2 = ((ISelectionInstance) taskInstance2).getChild(); 295 296 // if both selections do not have children, they are lexically equal. If only one of them 297 // has children, they are unequal. 298 if ((child1 == null) && (child2 == null)) { 299 return TaskEquality.LEXICALLY_EQUAL; 300 } 301 else if ((child1 == null) || (child2 == null)) { 302 return TaskEquality.UNEQUAL; 303 } 304 305 TaskEquality equality = callRuleManager(child1, child2, requiredEqualityLevel); 306 307 if (equality == TaskEquality.IDENTICAL) { 308 // two different selection instances can be at most lexically equal even if their 309 // children are identical 310 return TaskEquality.LEXICALLY_EQUAL; 311 } 312 else { 313 return equality; 314 } 315 } 316 317 /** 318 * <p> 319 * used to to call the task equality rule manager for the comparison of the two provided 320 * children. If no required equality level is provided, than the most concrete equality is 321 * returned. Otherwise, the required equality is returned as long as the children are equal 322 * on that level. 323 * </p> 324 * 325 * @param taskInstance1 the first task instance to be compared 326 * @param taskInstance2 the second task instance to be compared 327 * @param requiredEqualityLevel the equality level to be checked for 328 * 329 * @return the determined equality 330 */ 331 private TaskEquality callRuleManager(ITaskInstance taskInstance1, 332 ITaskInstance taskInstance2, 333 TaskEquality requiredEqualityLevel) 334 { 335 if (requiredEqualityLevel == null) { 336 return TaskEqualityRuleManager.getInstance().compare(taskInstance1, taskInstance2); 337 } 338 else if (TaskEqualityRuleManager.getInstance().areAtLeastEqual 339 (taskInstance1, taskInstance2, requiredEqualityLevel)) 340 { 341 return requiredEqualityLevel; 342 } 343 else { 344 return TaskEquality.UNEQUAL; 345 } 346 } 44 /* 45 * (non-Javadoc) 46 * 47 * @see TaskComparisonRule#areLexicallyEqual(ITask, ITask) 48 */ 49 @Override 50 public boolean areLexicallyEqual(ITask task1, ITask task2) { 51 final TaskEquality equality = getEquality(task1, task2, 52 TaskEquality.LEXICALLY_EQUAL); 53 return (equality != null) 54 && (equality.isAtLeast(TaskEquality.LEXICALLY_EQUAL)); 55 } 56 57 /* 58 * (non-Javadoc) 59 * 60 * @see TaskComparisonRule#areLexicallyEqual(ITaskInstance, ITaskInstance) 61 */ 62 @Override 63 public boolean areLexicallyEqual(ITaskInstance instance1, 64 ITaskInstance instance2) { 65 final TaskEquality equality = getEquality(instance1, instance2, 66 TaskEquality.LEXICALLY_EQUAL); 67 return (equality != null) 68 && (equality.isAtLeast(TaskEquality.LEXICALLY_EQUAL)); 69 } 70 71 /* 72 * (non-Javadoc) 73 * 74 * @see TaskComparisonRule#areSemanticallyEqual(ITask, ITask) 75 */ 76 @Override 77 public boolean areSemanticallyEqual(ITask task1, ITask task2) { 78 final TaskEquality equality = getEquality(task1, task2, 79 TaskEquality.SEMANTICALLY_EQUAL); 80 return (equality != null) 81 && (equality.isAtLeast(TaskEquality.SEMANTICALLY_EQUAL)); 82 } 83 84 /* 85 * (non-Javadoc) 86 * 87 * @see TaskComparisonRule#areSemanticallyEqual(ITaskInstance, 88 * ITaskInstance) 89 */ 90 @Override 91 public boolean areSemanticallyEqual(ITaskInstance instance1, 92 ITaskInstance instance2) { 93 final TaskEquality equality = getEquality(instance1, instance2, 94 TaskEquality.SEMANTICALLY_EQUAL); 95 return (equality != null) 96 && (equality.isAtLeast(TaskEquality.SEMANTICALLY_EQUAL)); 97 } 98 99 /* 100 * (non-Javadoc) 101 * 102 * @see TaskComparisonRule#areSyntacticallyEqual(ITask, ITask) 103 */ 104 @Override 105 public boolean areSyntacticallyEqual(ITask task1, ITask task2) { 106 final TaskEquality equality = getEquality(task1, task2, 107 TaskEquality.SYNTACTICALLY_EQUAL); 108 return (equality != null) 109 && (equality.isAtLeast(TaskEquality.SYNTACTICALLY_EQUAL)); 110 } 111 112 /* 113 * (non-Javadoc) 114 * 115 * @see TaskComparisonRule#areSyntacticallyEqual(ITaskInstance, 116 * ITaskInstance) 117 */ 118 @Override 119 public boolean areSyntacticallyEqual(ITaskInstance instance1, 120 ITaskInstance instance2) { 121 final TaskEquality equality = getEquality(instance1, instance2, 122 TaskEquality.SYNTACTICALLY_EQUAL); 123 return (equality != null) 124 && (equality.isAtLeast(TaskEquality.SYNTACTICALLY_EQUAL)); 125 } 126 127 /** 128 * <p> 129 * used to to call the task equality rule manager for the comparison of the 130 * two provided children. If no required equality level is provided, than 131 * the most concrete equality is returned. Otherwise, the required equality 132 * is returned as long as the children are equal on that level. 133 * </p> 134 * 135 * @param child1 136 * the first task to be compared 137 * @param child2 138 * the second task to be compared 139 * @param requiredEqualityLevel 140 * the equality level to be checked for 141 * 142 * @return the determined equality 143 */ 144 private TaskEquality callRuleManager(ITask child1, ITask child2, 145 TaskEquality requiredEqualityLevel) { 146 if (requiredEqualityLevel == null) { 147 return TaskEqualityRuleManager.getInstance() 148 .compare(child1, child2); 149 } else if (TaskEqualityRuleManager.getInstance().areAtLeastEqual( 150 child1, child2, requiredEqualityLevel)) { 151 return requiredEqualityLevel; 152 } else { 153 return TaskEquality.UNEQUAL; 154 } 155 } 156 157 /** 158 * <p> 159 * used to to call the task equality rule manager for the comparison of the 160 * two provided children. If no required equality level is provided, than 161 * the most concrete equality is returned. Otherwise, the required equality 162 * is returned as long as the children are equal on that level. 163 * </p> 164 * 165 * @param taskInstance1 166 * the first task instance to be compared 167 * @param taskInstance2 168 * the second task instance to be compared 169 * @param requiredEqualityLevel 170 * the equality level to be checked for 171 * 172 * @return the determined equality 173 */ 174 private TaskEquality callRuleManager(ITaskInstance taskInstance1, 175 ITaskInstance taskInstance2, TaskEquality requiredEqualityLevel) { 176 if (requiredEqualityLevel == null) { 177 return TaskEqualityRuleManager.getInstance().compare(taskInstance1, 178 taskInstance2); 179 } else if (TaskEqualityRuleManager.getInstance().areAtLeastEqual( 180 taskInstance1, taskInstance2, requiredEqualityLevel)) { 181 return requiredEqualityLevel; 182 } else { 183 return TaskEquality.UNEQUAL; 184 } 185 } 186 187 /** 188 * <p> 189 * ensures for the two given lists, that for at least one task in the first 190 * list there is a task in the second list being on the given level equal to 191 * the task in the first list. 192 * </p> 193 * 194 * @param children1 195 * the first list to be compared 196 * @param children2 197 * the second list to be compared 198 * @param requiredEqualityLevel 199 * the equality level to be checked for 200 * 201 * @return true if there is a task in the first list that has an equal task 202 * in the second list when considering the given equality level, 203 * false else. 204 */ 205 private boolean checkEqualityLevel(List<ITask> children1, 206 List<ITask> children2, TaskEquality requiredEqualityLevel) { 207 TaskEquality currentEquality; 208 for (final ITask child1 : children1) { 209 for (final ITask child2 : children2) { 210 currentEquality = callRuleManager(child1, child2, 211 requiredEqualityLevel); 212 if ((currentEquality != null) 213 && (currentEquality.isAtLeast(requiredEqualityLevel))) { 214 // we found at least one equal child with sufficient 215 // equality in the 216 // second list. So be can break up for this child. 217 return true; 218 } 219 } 220 } 221 222 return false; 223 } 224 225 /* 226 * (non-Javadoc) 227 * 228 * @see TaskComparisonRule#compare(ITask, ITask) 229 */ 230 @Override 231 public TaskEquality compare(ITask task1, ITask task2) { 232 return getEquality(task1, task2, null); 233 } 234 235 /* 236 * (non-Javadoc) 237 * 238 * @see TaskComparisonRule#compare(ITaskInstance, ITaskInstance) 239 */ 240 @Override 241 public TaskEquality compare(ITaskInstance instance1, ITaskInstance instance2) { 242 return getEquality(instance1, instance2, null); 243 } 244 245 /** 246 * <p> 247 * compares two selections with each other checking for the provided 248 * required level of equality. If this level is ensured, the method 249 * immediately returns. The more concrete the required equality level, the 250 * more checks this method performs. 251 * </p> 252 * 253 * @param task1 254 * the first task to be compared 255 * @param task2 256 * the second task to be compared 257 * @param requiredEqualityLevel 258 * the equality level to be checked for 259 * 260 * @return the determined equality. 261 */ 262 private TaskEquality getEquality(ITask task1, ITask task2, 263 TaskEquality requiredEqualityLevel) { 264 final List<ITask> children1 = ((ISelection) task1).getChildren(); 265 final List<ITask> children2 = ((ISelection) task2).getChildren(); 266 267 // if both selections do not have children, they are lexically equal. If 268 // only one of them 269 // has children, they are unequal. 270 if ((children1.size() == 0) && (children2.size() == 0)) { 271 return TaskEquality.LEXICALLY_EQUAL; 272 } else if ((children1.size() == 0) || (children2.size() == 0)) { 273 return TaskEquality.UNEQUAL; 274 } 275 276 if (requiredEqualityLevel == null) { 277 // calculate the common equality level for all children of both 278 // selections. 279 // do it in both directions to ensure commutative comparison 280 return getMostConcreteEqualityLevel(children1, children2); 281 } else { 282 // we are searching for a specific equality 283 if (checkEqualityLevel(children1, children2, requiredEqualityLevel)) { 284 return requiredEqualityLevel; 285 } else { 286 return TaskEquality.UNEQUAL; 287 } 288 } 289 } 290 291 /** 292 * <p> 293 * compares two selection instances with each other checking for the 294 * provided required level of equality. If this level is ensured, the method 295 * immediately returns. The more concrete the required equality level, the 296 * more checks this method performs. 297 * </p> 298 * 299 * @param taskInstance1 300 * the first task instance to be compared 301 * @param taskInstance2 302 * the second task instance to be compared 303 * @param requiredEqualityLevel 304 * the equality level to be checked for 305 * 306 * @return the determined equality. 307 */ 308 private TaskEquality getEquality(ITaskInstance taskInstance1, 309 ITaskInstance taskInstance2, TaskEquality requiredEqualityLevel) { 310 final ITaskInstance child1 = ((ISelectionInstance) taskInstance1) 311 .getChild(); 312 final ITaskInstance child2 = ((ISelectionInstance) taskInstance2) 313 .getChild(); 314 315 // if both selections do not have children, they are lexically equal. If 316 // only one of them 317 // has children, they are unequal. 318 if ((child1 == null) && (child2 == null)) { 319 return TaskEquality.LEXICALLY_EQUAL; 320 } else if ((child1 == null) || (child2 == null)) { 321 return TaskEquality.UNEQUAL; 322 } 323 324 final TaskEquality equality = callRuleManager(child1, child2, 325 requiredEqualityLevel); 326 327 if (equality == TaskEquality.IDENTICAL) { 328 // two different selection instances can be at most lexically equal 329 // even if their 330 // children are identical 331 return TaskEquality.LEXICALLY_EQUAL; 332 } else { 333 return equality; 334 } 335 } 336 337 /** 338 * <p> 339 * determines the most concrete equality level for all tasks in the first 340 * list compared to all tasks in the second list. It is sufficient, if there 341 * is one task in one list for which there exist an equal task in the other 342 * list. 343 * </p> 344 * 345 * @param children1 346 * the first list to be compared 347 * @param children2 348 * the second list to be compared 349 * 350 * @return the most concrete task equality identified for all tasks in the 351 * first list with respect to the second list 352 */ 353 private TaskEquality getMostConcreteEqualityLevel(List<ITask> children1, 354 List<ITask> children2) { 355 TaskEquality childEquality; 356 TaskEquality currentEquality; 357 for (final ITask child1 : children1) { 358 childEquality = null; 359 for (final ITask child2 : children2) { 360 currentEquality = callRuleManager(child1, child2, null); 361 if ((currentEquality != null) 362 && (currentEquality != TaskEquality.UNEQUAL)) { 363 if (childEquality == null) { 364 childEquality = currentEquality; 365 } else { 366 childEquality = childEquality 367 .getCommonDenominator(currentEquality); 368 } 369 370 if (childEquality.isAtLeast(TaskEquality.LEXICALLY_EQUAL)) { 371 // as we calculate the most concrete equality, we can 372 // break up here 373 return TaskEquality.LEXICALLY_EQUAL; 374 } 375 } 376 } 377 } 378 379 // as the comparison should be commutative, we do not need to check, if 380 // in list 2 there is 381 // a child equal to one in list 1 382 return TaskEquality.UNEQUAL; 383 } 384 385 /* 386 * (non-Javadoc) 387 * 388 * @see TaskComparisonRule#isApplicable(ITask, ITask) 389 */ 390 @Override 391 public boolean isApplicable(ITask task1, ITask task2) { 392 return (task1 instanceof ISelection) && (task2 instanceof ISelection); 393 } 394 395 /* 396 * (non-Javadoc) 397 * 398 * @see TaskComparisonRule#isApplicable(ITaskInstance, ITaskInstance) 399 */ 400 @Override 401 public boolean isApplicable(ITaskInstance instance1, ITaskInstance instance2) { 402 return isApplicable(instance1.getTask(), instance2.getTask()); 403 } 347 404 }
Note: See TracChangeset
for help on using the changeset viewer.