Changeset 1125 for trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/nodeequality/SequenceComparisonRule.java
- Timestamp:
- 03/18/13 11:46:47 (11 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/autoquest-core-tasktrees/src/main/java/de/ugoe/cs/autoquest/tasktrees/nodeequality/SequenceComparisonRule.java
r1113 r1125 14 14 15 15 package de.ugoe.cs.autoquest.tasktrees.nodeequality; 16 17 import java.util.List; 16 18 17 19 import de.ugoe.cs.autoquest.tasktrees.treeifc.ISequence; … … 47 49 } 48 50 49 /* 50 * (non-Javadoc) 51 * 52 * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode) 51 /* (non-Javadoc) 52 * @see NodeComparisonRule#isApplicable(ITaskTreeNode, ITaskTreeNode) 53 */ 54 @Override 55 public boolean isApplicable(ITaskTreeNode node1, ITaskTreeNode node2) { 56 return (node1 instanceof ISequence) && (node2 instanceof ISequence); 57 } 58 59 /* (non-Javadoc) 60 * @see NodeComparisonRule#areLexicallyEqual(ITaskTreeNode, ITaskTreeNode) 61 */ 62 @Override 63 public boolean areLexicallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 64 NodeEquality equality = getEquality(node1, node2, NodeEquality.LEXICALLY_EQUAL); 65 return (equality != null) && (equality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)); 66 } 67 68 /* (non-Javadoc) 69 * @see NodeComparisonRule#areSyntacticallyEqual(ITaskTreeNode, ITaskTreeNode) 70 */ 71 @Override 72 public boolean areSyntacticallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 73 NodeEquality equality = getEquality(node1, node2, NodeEquality.SYNTACTICALLY_EQUAL); 74 return (equality != null) && (equality.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL)); 75 } 76 77 /* (non-Javadoc) 78 * @see NodeComparisonRule#areSemanticallyEqual(ITaskTreeNode, ITaskTreeNode) 79 */ 80 @Override 81 public boolean areSemanticallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 82 NodeEquality equality = getEquality(node1, node2, NodeEquality.SEMANTICALLY_EQUAL); 83 return (equality != null) && (equality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)); 84 } 85 86 /* (non-Javadoc) 87 * @see NodeComparisonRule#compare(ITaskTreeNode, ITaskTreeNode) 53 88 */ 54 89 @Override 55 90 public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) { 56 if ((!(node1 instanceof ISequence)) || (!(node2 instanceof ISequence))) { 57 return null; 58 } 91 return getEquality(node1, node2, null); 92 } 59 93 60 if (node1 == node2) { 61 return NodeEquality.IDENTICAL; 62 } 94 /** 95 * 96 */ 97 private NodeEquality getEquality(ITaskTreeNode node1, 98 ITaskTreeNode node2, 99 NodeEquality requiredEqualityLevel) 100 { 101 List<ITaskTreeNode> children1 = node1.getChildren(); 102 List<ITaskTreeNode> children2 = node2.getChildren(); 63 103 64 104 // if both sequences do not have children, they are equal although this doesn't make sense 65 if (( node1.getChildren().size() == 0) && (node2.getChildren().size() == 0)) {105 if ((children1.size() == 0) && (children2.size() == 0)) { 66 106 return NodeEquality.LEXICALLY_EQUAL; 67 107 } 68 108 69 if ( node1.getChildren().size() != node2.getChildren().size()) {109 if (children1.size() != children2.size()) { 70 110 return NodeEquality.UNEQUAL; 71 111 } 72 112 73 113 NodeEquality resultingEquality = NodeEquality.LEXICALLY_EQUAL; 74 for (int i = 0; i < node1.getChildren().size(); i++) {75 ITaskTreeNode child1 = node1.getChildren().get(i);76 ITaskTreeNode child2 = node2.getChildren().get(i);114 for (int i = 0; i < children1.size(); i++) { 115 ITaskTreeNode child1 = children1.get(i); 116 ITaskTreeNode child2 = children2.get(i); 77 117 78 NodeEquality nodeEquality = mRuleManager.applyRules(child1, child2);118 NodeEquality nodeEquality = callRuleManager(child1, child2, requiredEqualityLevel); 79 119 80 120 if ((nodeEquality == null) || (nodeEquality == NodeEquality.UNEQUAL)) { … … 88 128 } 89 129 130 /** 131 * <p> 132 * TODO: comment 133 * </p> 134 * 135 * @param child1 136 * @param child2 137 * @param requiredEqualityLevel 138 * @return 139 */ 140 private NodeEquality callRuleManager(ITaskTreeNode child1, 141 ITaskTreeNode child2, 142 NodeEquality requiredEqualityLevel) 143 { 144 if (requiredEqualityLevel == null) { 145 return mRuleManager.compare(child1, child2); 146 } 147 else if (mRuleManager.areAtLeastEqual(child1, child2, requiredEqualityLevel)) { 148 return requiredEqualityLevel; 149 } 150 else { 151 return NodeEquality.UNEQUAL; 152 } 153 } 90 154 }
Note: See TracChangeset
for help on using the changeset viewer.