Ignore:
Timestamp:
03/18/13 11:46:47 (11 years ago)
Author:
pharms
Message:
  • refactoring of task tree node comparison to be able to optimize the comparisons for the different comparison levels lexically, syntactically, semantically
File:
1 edited

Legend:

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

    r1113 r1125  
    7272     *                               manager before a call to this method. 
    7373     */ 
    74     public NodeEquality applyRules(ITaskTreeNode node1, ITaskTreeNode node2) 
     74    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) 
    7575        throws IllegalStateException 
    7676    { 
     
    8383 
    8484        for (NodeComparisonRule rule : mRuleIndex) { 
    85             nodeEquality = rule.compare(node1, node2); 
    86  
    87             if (nodeEquality != null) { 
    88                 // LOG.warning("used rule " + rule + " for equality check"); 
    89                 return nodeEquality; 
     85            if (rule.isApplicable(node1, node2)) { 
     86                nodeEquality = rule.compare(node1, node2); 
     87                if (nodeEquality != null) { 
     88                    // LOG.warning("used rule " + rule + " for equality check"); 
     89                    return nodeEquality; 
     90                } 
    9091            } 
    9192        } 
     
    9697    } 
    9798 
     99    /** 
     100     * <p> 
     101     * TODO: comment 
     102     * </p> 
     103     * 
     104     * @param child1 
     105     * @param child2 
     106     * @param equalityLevel 
     107     * @return 
     108     */ 
     109    public boolean areAtLeastEqual(ITaskTreeNode node1, 
     110                                   ITaskTreeNode node2, 
     111                                   NodeEquality  equalityLevel) 
     112    { 
     113        if (equalityLevel == null) { 
     114            throw new IllegalArgumentException("required equality level must not be null"); 
     115        } 
     116         
     117        switch (equalityLevel) { 
     118            case IDENTICAL: 
     119                return areIdentical(node1, node2); 
     120            case LEXICALLY_EQUAL: 
     121                return areLexicallyEqual(node1, node2); 
     122            case SYNTACTICALLY_EQUAL: 
     123                return areSyntacticallyEqual(node1, node2); 
     124            case SEMANTICALLY_EQUAL: 
     125                return areSemanticallyEqual(node1, node2); 
     126            case UNEQUAL: 
     127                return !areSemanticallyEqual(node1, node2); 
     128            default: 
     129                throw new IllegalArgumentException("unknown required equality: " + equalityLevel); 
     130        } 
     131    } 
     132 
     133    /** 
     134     * <p> 
     135     * TODO: comment 
     136     * </p> 
     137     * 
     138     * @param child1 
     139     * @param child2 
     140     * @return 
     141     */ 
     142    public boolean areIdentical(ITaskTreeNode node1, ITaskTreeNode node2) { 
     143        if (mRuleIndex == null) { 
     144            throw new IllegalStateException("not initialized"); 
     145        } 
     146         
     147        for (NodeComparisonRule rule : mRuleIndex) { 
     148            if (rule.isApplicable(node1, node2) && rule.areLexicallyEqual(node1, node2)) { 
     149                 return true; 
     150            } 
     151        } 
     152 
     153        return false; 
     154    } 
     155 
     156    /** 
     157     * <p> 
     158     * TODO: comment 
     159     * </p> 
     160     * 
     161     * @param child1 
     162     * @param child2 
     163     * @return 
     164     */ 
     165    public boolean areLexicallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 
     166        if (mRuleIndex == null) { 
     167            throw new IllegalStateException("not initialized"); 
     168        } 
     169         
     170        for (NodeComparisonRule rule : mRuleIndex) { 
     171            if (rule.isApplicable(node1, node2) && rule.areLexicallyEqual(node1, node2)) { 
     172                 return true; 
     173            } 
     174        } 
     175 
     176        return false; 
     177    } 
     178 
     179    /** 
     180     * <p> 
     181     * TODO: comment 
     182     * </p> 
     183     * 
     184     * @param child1 
     185     * @param child2 
     186     * @return 
     187     */ 
     188    public boolean areSyntacticallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 
     189        if (mRuleIndex == null) { 
     190            throw new IllegalStateException("not initialized"); 
     191        } 
     192         
     193        for (NodeComparisonRule rule : mRuleIndex) { 
     194            if (rule.isApplicable(node1, node2) && rule.areSyntacticallyEqual(node1, node2)) { 
     195                 return true; 
     196            } 
     197        } 
     198 
     199        return false; 
     200    } 
     201 
     202    /** 
     203     * <p> 
     204     * TODO: comment 
     205     * </p> 
     206     * 
     207     * @param child1 
     208     * @param child2 
     209     * @return 
     210     */ 
     211    public boolean areSemanticallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 
     212        if (mRuleIndex == null) { 
     213            throw new IllegalStateException("not initialized"); 
     214        } 
     215         
     216        for (NodeComparisonRule rule : mRuleIndex) { 
     217            if (rule.isApplicable(node1, node2) && rule.areSemanticallyEqual(node1, node2)) { 
     218                 return true; 
     219            } 
     220        } 
     221 
     222        return false; 
     223    } 
     224 
    98225} 
Note: See TracChangeset for help on using the changeset viewer.