Changeset 1401 for trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceComparator.java
- Timestamp:
- 02/26/14 17:12:53 (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/TaskInstanceComparator.java
r1394 r1401 26 26 27 27 /** 28 * TODO comment 28 * <p> 29 * implementation of a symbol comparator for task instances. Internally, it uses comparison buffers 30 * to prevent comparing two tasks or task instances several times. It internally instantiates 31 * comparers being the implementation strategy of the comparisons required for a specific level 32 * of task equality. The comparers internally use the {@link TaskEqualityRuleManager} for 33 * performing comparisons. 34 * </p> 29 35 */ 30 36 public class TaskInstanceComparator implements SymbolComparator<ITaskInstance> { … … 33 39 private static final long serialVersionUID = 1L; 34 40 35 /** */ 41 /** 42 * the maximum size of the internal buffer used for storing comparison results 43 */ 36 44 private static final int MAX_BUFFER_SIZE = 2 * 1024 * 1024; 37 45 38 /** */ 39 private TaskEquality minimalNodeEquality; 40 41 /** */ 46 /** 47 * the considered level of task equality 48 */ 49 private TaskEquality minimalTaskEquality; 50 51 /** 52 * the comparer used internally for comparing two tasks 53 */ 42 54 private transient Comparer comparer; 43 55 44 /** */ 56 /** 57 * the comparer used for comparing two tasks on the lexical level 58 */ 45 59 private transient Comparer lexicalComparer; 46 60 47 /** */ 61 /** 62 * internal buffer used for storing comparison results 63 */ 48 64 private transient HashMap<Long, Boolean> equalityBuffer = new HashMap<Long, Boolean>(); 49 65 50 /** */ 66 /** 67 * internal buffer used for storing comparison results only for lexical comparisons 68 */ 51 69 private transient HashMap<Long, Boolean> lexicalEqualityBuffer; 52 70 53 71 /** 54 * 55 */ 56 public TaskInstanceComparator(TaskEquality minimalNodeEquality) { 57 this.minimalNodeEquality = minimalNodeEquality; 72 * <p> 73 * initializes the comparator with a considered task equality level 74 * </p> 75 * 76 * @param minimalTaskEquality the considered task equality level 77 */ 78 public TaskInstanceComparator(TaskEquality minimalTaskEquality) { 79 this.minimalTaskEquality = minimalTaskEquality; 58 80 init(); 59 81 } … … 68 90 69 91 /** 70 * 92 * <p> 93 * returns true, if this comparator considers the provided tasks as equal, false else 94 * </p> 95 * 96 * @param task1 the first task to compare 97 * @param task2 the second task to compare 98 * 99 * @return as described 71 100 */ 72 101 public boolean equals(ITask task1, ITask task2) { … … 100 129 101 130 /** 102 * 131 * <p> 132 * returns true, if this comparator considers the provided tasks as lexically equal, false else 133 * </p> 134 * 135 * @param task1 the first task to compare 136 * @param task2 the second task to compare 137 * 138 * @return as described 103 139 */ 104 140 public boolean areLexicallyEqual(ITask task1, ITask task2) { … … 127 163 /** 128 164 * <p> 129 * TODO: comment 130 * </p> 131 * 165 * can be called externally to clear the internal comparison buffers 166 * </p> 132 167 */ 133 168 public void clearBuffers() { … … 137 172 138 173 /** 139 * 174 * <p> 175 * initializes the comparator with comparers depending on the different comparison levels as 176 * well as with the required comparison buffers. Comparers and buffers for lexical comparison 177 * may be reused if the considered equality level is also lexical. 178 * </p> 140 179 */ 141 180 private void init() { 142 if (minimal NodeEquality == TaskEquality.LEXICALLY_EQUAL) {181 if (minimalTaskEquality == TaskEquality.LEXICALLY_EQUAL) { 143 182 comparer = new LexicalComparer(); 144 183 } 145 else if (minimal NodeEquality == TaskEquality.SYNTACTICALLY_EQUAL) {184 else if (minimalTaskEquality == TaskEquality.SYNTACTICALLY_EQUAL) { 146 185 comparer = new SyntacticalComparer(); 147 186 } 148 else if (minimal NodeEquality == TaskEquality.SEMANTICALLY_EQUAL) {187 else if (minimalTaskEquality == TaskEquality.SEMANTICALLY_EQUAL) { 149 188 comparer = new SemanticalComparer(); 150 189 } 151 190 else { 152 comparer = new DefaultComparer(this.minimal NodeEquality);153 } 154 155 if (minimal NodeEquality == TaskEquality.LEXICALLY_EQUAL) {191 comparer = new DefaultComparer(this.minimalTaskEquality); 192 } 193 194 if (minimalTaskEquality == TaskEquality.LEXICALLY_EQUAL) { 156 195 lexicalComparer = comparer; 157 196 lexicalEqualityBuffer = equalityBuffer; … … 175 214 176 215 /** 177 * 216 * <p> 217 * interface for internally used comparers containing only a compare method 218 * </p> 178 219 */ 179 220 private static interface Comparer { 180 221 181 222 /** 223 * <p> 224 * returns true, if this comparator considers the provided tasks as equal, false else 225 * </p> 182 226 * 227 * @param task1 the first task to compare 228 * @param task2 the second task to compare 229 * 230 * @return as described 183 231 */ 184 232 boolean compare(ITask task1, ITask task2); … … 186 234 187 235 /** 188 * 236 * <p> 237 * comparer that performs comparisons only on the lexical level 238 * </p> 189 239 */ 190 240 private static class LexicalComparer implements Comparer { 191 241 192 /* *193 * 242 /* (non-Javadoc) 243 * @see Comparer#compare(ITask, ITask) 194 244 */ 195 245 public boolean compare(ITask task1, ITask task2) { … … 199 249 200 250 /** 251 * <p> 252 * comparer that performs comparisons only on the syntactical level 253 * </p> 201 254 * 202 255 */ 203 256 private static class SyntacticalComparer implements Comparer { 204 257 205 /* *206 * 258 /* (non-Javadoc) 259 * @see Comparer#compare(ITask, ITask) 207 260 */ 208 261 public boolean compare(ITask task1, ITask task2) { … … 212 265 213 266 /** 214 * 267 * <p> 268 * comparer that performs comparisons only on the semantical level 269 * </p> 215 270 */ 216 271 private static class SemanticalComparer implements Comparer { 217 272 218 /* *219 * 273 /* (non-Javadoc) 274 * @see Comparer#compare(ITask, ITask) 220 275 */ 221 276 public boolean compare(ITask task1, ITask task2) { … … 225 280 226 281 /** 227 * 282 * <p> 283 * comparer that performs comparisons only on the provided level 284 * </p> 228 285 */ 229 286 private static class DefaultComparer implements Comparer { … … 231 288 /** 232 289 * <p> 233 * the minimal task equality two identified sublists need to have to consider them as equal290 * the minimal task equality considered by this comparer 234 291 * </p> 235 292 */ 236 private TaskEquality minimal NodeEquality;293 private TaskEquality minimalTaskEquality; 237 294 238 295 /** 239 * 240 */ 241 public DefaultComparer(TaskEquality minimalNodeEquality) { 242 this.minimalNodeEquality = minimalNodeEquality; 243 } 244 245 /** 246 * 296 * <p> 297 * initializes this comparer with the task equality to be considered 298 * </p> 299 */ 300 public DefaultComparer(TaskEquality minimalTaskEquality) { 301 this.minimalTaskEquality = minimalTaskEquality; 302 } 303 304 /* (non-Javadoc) 305 * @see Comparer#compare(ITask, ITask) 247 306 */ 248 307 public boolean compare(ITask task1, ITask task2) { 249 308 return TaskEqualityRuleManager.getInstance().areAtLeastEqual 250 (task1, task2, minimal NodeEquality);309 (task1, task2, minimalTaskEquality); 251 310 } 252 311 }
Note: See TracChangeset
for help on using the changeset viewer.