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/NodeAndIterationComparisonRule.java

    r1113 r1125  
    1414 
    1515package de.ugoe.cs.autoquest.tasktrees.nodeequality; 
     16 
     17import java.util.List; 
    1618 
    1719import de.ugoe.cs.autoquest.tasktrees.treeifc.IIteration; 
     
    4850    } 
    4951 
    50     /* 
    51      * (non-Javadoc) 
    52      *  
    53      * @see de.ugoe.cs.tasktree.nodeequality.NodeEqualityRule#apply(TaskTreeNode, TaskTreeNode) 
     52    /* (non-Javadoc) 
     53     * @see NodeComparisonRule#isApplicable(ITaskTreeNode, ITaskTreeNode) 
     54     */ 
     55    @Override 
     56    public boolean isApplicable(ITaskTreeNode node1, ITaskTreeNode node2) { 
     57        return ((node1 instanceof IIteration) && (!(node2 instanceof IIteration))) || 
     58               ((node2 instanceof IIteration) && (!(node1 instanceof IIteration))); 
     59    } 
     60 
     61    /* (non-Javadoc) 
     62     * @see NodeComparisonRule#areLexicallyEqual(ITaskTreeNode, ITaskTreeNode) 
     63     */ 
     64    @Override 
     65    public boolean areLexicallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 
     66        NodeEquality equality = getEquality(node1, node2, NodeEquality.LEXICALLY_EQUAL); 
     67        return (equality != null) && (equality.isAtLeast(NodeEquality.LEXICALLY_EQUAL)); 
     68    } 
     69 
     70    /* (non-Javadoc) 
     71     * @see NodeComparisonRule#areSyntacticallyEqual(ITaskTreeNode, ITaskTreeNode) 
     72     */ 
     73    @Override 
     74    public boolean areSyntacticallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 
     75        NodeEquality equality = getEquality(node1, node2, NodeEquality.SYNTACTICALLY_EQUAL); 
     76        return (equality != null) && (equality.isAtLeast(NodeEquality.SYNTACTICALLY_EQUAL)); 
     77    } 
     78 
     79    /* (non-Javadoc) 
     80     * @see NodeComparisonRule#areSemanticallyEqual(ITaskTreeNode, ITaskTreeNode) 
     81     */ 
     82    @Override 
     83    public boolean areSemanticallyEqual(ITaskTreeNode node1, ITaskTreeNode node2) { 
     84        NodeEquality equality = getEquality(node1, node2, NodeEquality.SEMANTICALLY_EQUAL); 
     85        return (equality != null) && (equality.isAtLeast(NodeEquality.SEMANTICALLY_EQUAL)); 
     86    } 
     87 
     88    /* (non-Javadoc) 
     89     * @see NodeComparisonRule#compare(ITaskTreeNode, ITaskTreeNode) 
    5490     */ 
    5591    @Override 
    5692    public NodeEquality compare(ITaskTreeNode node1, ITaskTreeNode node2) { 
     93        return getEquality(node1, node2, null); 
     94    } 
     95 
     96    /** 
     97     *  
     98     */ 
     99    private NodeEquality getEquality(ITaskTreeNode node1, 
     100                                     ITaskTreeNode node2, 
     101                                     NodeEquality  requiredEqualityLevel) 
     102    { 
    57103        IIteration iteration = null; 
    58104        ITaskTreeNode node = null; 
     
    80126        } 
    81127 
     128        List<ITaskTreeNode> children = iteration.getChildren(); 
     129         
    82130        // now, that we found the iteration and the node, lets compare the child of the iteration 
    83131        // with the node. 
    84         if (iteration.getChildren().size() < 1) { 
     132        if (children.size() < 1) { 
    85133            return null; 
    86134        } 
    87135 
    88         NodeEquality nodeEquality = mRuleManager.applyRules(iteration.getChildren().get(0), node); 
     136        NodeEquality nodeEquality = callRuleManager(children.get(0), node, requiredEqualityLevel); 
    89137 
    90138        // although the subtask may be identical to the node, we can not return identical, as 
     
    98146 
    99147    } 
     148     
     149    /** 
     150     * <p> 
     151     * TODO: comment 
     152     * </p> 
     153     * 
     154     * @param child1 
     155     * @param child2 
     156     * @param requiredEqualityLevel 
     157     * @return 
     158     */ 
     159    private NodeEquality callRuleManager(ITaskTreeNode child1, 
     160                                         ITaskTreeNode child2, 
     161                                         NodeEquality  requiredEqualityLevel) 
     162    { 
     163        if (requiredEqualityLevel == null) { 
     164            return mRuleManager.compare(child1, child2); 
     165        } 
     166        else if (mRuleManager.areAtLeastEqual(child1, child2, requiredEqualityLevel)) { 
     167            return requiredEqualityLevel; 
     168        } 
     169        else { 
     170            return NodeEquality.UNEQUAL; 
     171        } 
     172    } 
    100173} 
Note: See TracChangeset for help on using the changeset viewer.