Changeset 1146 for trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskComparator.java
- Timestamp:
- 04/04/13 16:06:07 (11 years ago)
- Location:
- trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality
- Files:
-
- 1 copied
- 1 moved
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/taskequality/TaskComparator.java
r1129 r1146 13 13 // limitations under the License. 14 14 15 package de.ugoe.cs.autoquest.tasktrees.t emporalrelation;15 package de.ugoe.cs.autoquest.tasktrees.taskequality; 16 16 17 17 import java.util.HashMap; 18 18 19 import de.ugoe.cs.autoquest.tasktrees.nodeequality.NodeEquality; 20 import de.ugoe.cs.autoquest.tasktrees.nodeequality.NodeEqualityRuleManager; 21 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskTreeNode; 19 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask; 20 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance; 22 21 import de.ugoe.cs.autoquest.usageprofiles.SymbolComparator; 23 22 import de.ugoe.cs.util.StopWatch; … … 30 29 * @author Patrick Harms 31 30 */ 32 public class Task TreeNodeComparator implements SymbolComparator<ITaskTreeNode> {31 public class TaskComparator implements SymbolComparator<ITaskInstance> { 33 32 34 33 /** 35 34 * <p> 36 * the node equality manager needed for comparing task tree nodes with each other35 * the task equality manager needed for comparing tasks with each other 37 36 * </p> 38 37 */ 39 private NodeEqualityRuleManager nodeEqualityRuleManager;38 private TaskEqualityRuleManager taskEqualityRuleManager; 40 39 41 40 /** 42 41 * <p> 43 * the minimal node equality two identified sublists need to have to consider them as equal 44 * and to create an iteration for 42 * the minimal task equality two identified sublists need to have to consider them as equal 45 43 * </p> 46 44 */ 47 private NodeEquality minimalNodeEquality; 48 45 private TaskEquality minimalNodeEquality; 46 47 /** */ 49 48 private Comparer comparer; 50 49 50 /** */ 51 51 private Comparer lexicalComparer; 52 52 53 /** */ 53 54 private StopWatch stopWatch = new StopWatch(); 54 55 56 /** */ 55 57 private HashMap<Long, Boolean> equalityBuffer = new HashMap<Long, Boolean>(); 56 58 59 /** */ 57 60 private HashMap<Long, Boolean> lexicalEqualityBuffer; 58 61 59 62 /** 60 * <p> 61 * TODO: comment 62 * </p> 63 * 64 * @param nodeEqualityRuleManager 65 * @param minimalNodeEquality 66 */ 67 public TaskTreeNodeComparator(NodeEqualityRuleManager nodeEqualityRuleManager, 68 NodeEquality minimalNodeEquality) 63 * 64 */ 65 public TaskComparator(TaskEqualityRuleManager taskEqualityRuleManager, 66 TaskEquality minimalNodeEquality) 69 67 { 70 68 super(); 71 this. nodeEqualityRuleManager = nodeEqualityRuleManager;69 this.taskEqualityRuleManager = taskEqualityRuleManager; 72 70 this.minimalNodeEquality = minimalNodeEquality; 73 71 74 if (minimalNodeEquality == NodeEquality.LEXICALLY_EQUAL) {72 if (minimalNodeEquality == TaskEquality.LEXICALLY_EQUAL) { 75 73 comparer = new LexicalComparer(); 76 74 } 77 else if (minimalNodeEquality == NodeEquality.SYNTACTICALLY_EQUAL) {75 else if (minimalNodeEquality == TaskEquality.SYNTACTICALLY_EQUAL) { 78 76 comparer = new SyntacticalComparer(); 79 77 } 80 else if (minimalNodeEquality == NodeEquality.SEMANTICALLY_EQUAL) {78 else if (minimalNodeEquality == TaskEquality.SEMANTICALLY_EQUAL) { 81 79 comparer = new SemanticalComparer(); 82 80 } … … 85 83 } 86 84 87 if (minimalNodeEquality == NodeEquality.LEXICALLY_EQUAL) {85 if (minimalNodeEquality == TaskEquality.LEXICALLY_EQUAL) { 88 86 lexicalComparer = comparer; 89 87 lexicalEqualityBuffer = equalityBuffer; … … 99 97 */ 100 98 @Override 101 public boolean equals(ITaskTreeNode symbol1, ITaskTreeNode symbol2) { 102 //String id = "compare " + symbol1.getClass().getSimpleName() + " " + 103 // symbol2.getClass().getSimpleName(); 99 public boolean equals(ITaskInstance taskInstance1, ITaskInstance taskInstance2) { 100 return equals(taskInstance1.getTask(), taskInstance2.getTask()); 101 } 102 103 /** 104 * 105 */ 106 public boolean equals(ITask task1, ITask task2) { 107 //String id = "compare " + taskInstance1.getClass().getSimpleName() + " " + 108 // taskInstance2.getClass().getSimpleName(); 104 109 //String id = "compare"; 105 110 //stopWatch.start(id); … … 107 112 Boolean result; 108 113 109 if ( symbol1 != symbol2) {110 long key = ((long) System.identityHashCode( symbol1)) << 32;111 key += System.identityHashCode( symbol2);114 if (task1 != task2) { 115 long key = ((long) System.identityHashCode(task1)) << 32; 116 key += System.identityHashCode(task2); 112 117 113 118 result = equalityBuffer.get(key); 114 119 115 120 if (result == null) { 116 result = comparer.compare( symbol1, symbol2);121 result = comparer.compare(task1, task2); 117 122 equalityBuffer.put(key, result); 118 123 } … … 123 128 //stopWatch.stop(id); 124 129 125 /*boolean result2 = nodeEqualityRuleManager.areAtLeastEqual(symbol1, symbol2, minimalNodeEquality);130 /*boolean result2 = taskEqualityRuleManager.areAtLeastEqual(symbol1, symbol2, minimalNodeEquality); 126 131 if (result != result2) { 127 132 throw new IllegalStateException("implementation error"); … … 132 137 133 138 /** 134 * <p> 135 * TODO: comment 136 * </p> 137 * 138 * @return 139 * 140 */ 141 public boolean haveLexicallyEqualTasks(ITaskInstance taskInstance1, 142 ITaskInstance taskInstance2) 143 { 144 return areLexicallyEqual(taskInstance1.getTask(), taskInstance2.getTask()); 145 } 146 147 148 /** 149 * 150 */ 151 public boolean areLexicallyEqual(ITask task1, ITask task2) { 152 Boolean result; 153 154 if (task1 != task2) { 155 long key = ((long) System.identityHashCode(task1)) << 32; 156 key += System.identityHashCode(task2); 157 158 result = lexicalEqualityBuffer.get(key); 159 160 if (result == null) { 161 result = lexicalComparer.compare(task1, task2); 162 lexicalEqualityBuffer.put(key, result); 163 } 164 } 165 else { 166 result = true; 167 } 168 169 return result; 170 } 171 172 /** 173 * 139 174 */ 140 175 StopWatch getStopWatch() { … … 143 178 144 179 /** 145 * <p> 146 * TODO: comment 147 * </p> 148 * 149 * @param node1 150 * @param node2 151 * @return 152 */ 153 boolean areLexicallyEqual(ITaskTreeNode symbol1, ITaskTreeNode symbol2) { 154 Boolean result; 155 156 if (symbol1 != symbol2) { 157 long key = ((long) System.identityHashCode(symbol1)) << 32; 158 key += System.identityHashCode(symbol2); 159 160 result = lexicalEqualityBuffer.get(key); 161 162 if (result == null) { 163 result = lexicalComparer.compare(symbol1, symbol2); 164 lexicalEqualityBuffer.put(key, result); 165 } 166 } 167 else { 168 result = true; 169 } 170 171 return result; 172 } 173 174 /** 175 * <p> 176 * TODO: comment 177 * </p> 178 * 179 * @return 180 */ 181 NodeEquality getConsideredNodeEquality() { 180 * 181 */ 182 TaskEquality getConsideredNodeEquality() { 182 183 return minimalNodeEquality; 183 184 } … … 190 191 * 191 192 */ 192 boolean compare(ITask TreeNode node1, ITaskTreeNode node2);193 boolean compare(ITask task1, ITask task2); 193 194 } 194 195 … … 201 202 * 202 203 */ 203 public boolean compare(ITask TreeNode node1, ITaskTreeNode node2) {204 return nodeEqualityRuleManager.areLexicallyEqual(node1, node2);204 public boolean compare(ITask task1, ITask task2) { 205 return taskEqualityRuleManager.areLexicallyEqual(task1, task2); 205 206 } 206 207 } … … 214 215 * 215 216 */ 216 public boolean compare(ITask TreeNode node1, ITaskTreeNode node2) {217 return nodeEqualityRuleManager.areSyntacticallyEqual(node1, node2);217 public boolean compare(ITask task1, ITask task2) { 218 return taskEqualityRuleManager.areSyntacticallyEqual(task1, task2); 218 219 } 219 220 } … … 227 228 * 228 229 */ 229 public boolean compare(ITask TreeNode node1, ITaskTreeNode node2) {230 return nodeEqualityRuleManager.areSemanticallyEqual(node1, node2);230 public boolean compare(ITask task1, ITask task2) { 231 return taskEqualityRuleManager.areSemanticallyEqual(task1, task2); 231 232 } 232 233 } … … 240 241 * 241 242 */ 242 public boolean compare(ITask TreeNode node1, ITaskTreeNode node2) {243 return nodeEqualityRuleManager.areAtLeastEqual(node1, node2, minimalNodeEquality);243 public boolean compare(ITask task1, ITask task2) { 244 return taskEqualityRuleManager.areAtLeastEqual(task1, task2, minimalNodeEquality); 244 245 } 245 246 }
Note: See TracChangeset
for help on using the changeset viewer.