Clover coverage report - dom4j - 1.6.1
Coverage timestamp: ma mei 16 2005 14:23:01 GMT+01:00
file stats: LOC: 331   Methods: 25
NCLOC: 115   Classes: 1
 
 Source file Conditionals Statements Methods TOTAL
Rule.java 50% 52,1% 60% 54,1%
coverage coverage
 1    /*
 2    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 3    *
 4    * This software is open source.
 5    * See the bottom of this file for the licence.
 6    */
 7   
 8    package org.dom4j.rule;
 9   
 10    import org.dom4j.Node;
 11   
 12    /**
 13    * <p>
 14    * <code>Rule</code> matches against DOM4J Node so that some action can be
 15    * performed such as in the XSLT processing model.
 16    * </p>
 17    *
 18    * @author <a href="mailto:james.strachan@metastuff.com">James Strachan </a>
 19    * @version $Revision: 1.7 $
 20    */
 21    public class Rule implements Comparable {
 22    /** Holds value of property mode. */
 23    private String mode;
 24   
 25    /** Holds value of property importPrecedence. */
 26    private int importPrecedence;
 27   
 28    /** Holds value of property priority. */
 29    private double priority;
 30   
 31    /** Holds value of property appearenceCount. */
 32    private int appearenceCount;
 33   
 34    /** Holds value of property pattern. */
 35    private Pattern pattern;
 36   
 37    /** Holds value of property action. */
 38    private Action action;
 39   
 40  0 public Rule() {
 41  0 this.priority = Pattern.DEFAULT_PRIORITY;
 42    }
 43   
 44  32 public Rule(Pattern pattern) {
 45  32 this.pattern = pattern;
 46  32 this.priority = pattern.getPriority();
 47    }
 48   
 49  28 public Rule(Pattern pattern, Action action) {
 50  28 this(pattern);
 51  28 this.action = action;
 52    }
 53   
 54    /**
 55    * Constructs a new Rule with the same instance data as the given rule but a
 56    * different pattern.
 57    *
 58    * @param that
 59    * DOCUMENT ME!
 60    * @param pattern
 61    * DOCUMENT ME!
 62    */
 63  0 public Rule(Rule that, Pattern pattern) {
 64  0 this.mode = that.mode;
 65  0 this.importPrecedence = that.importPrecedence;
 66  0 this.priority = that.priority;
 67  0 this.appearenceCount = that.appearenceCount;
 68  0 this.action = that.action;
 69  0 this.pattern = pattern;
 70    }
 71   
 72  0 public boolean equals(Object that) {
 73  0 if (that instanceof Rule) {
 74  0 return compareTo((Rule) that) == 0;
 75    }
 76   
 77  0 return false;
 78    }
 79   
 80  2 public int hashCode() {
 81  2 return importPrecedence + appearenceCount;
 82    }
 83   
 84  11 public int compareTo(Object that) {
 85  11 if (that instanceof Rule) {
 86  11 return compareTo((Rule) that);
 87    }
 88   
 89  0 return getClass().getName().compareTo(that.getClass().getName());
 90    }
 91   
 92    /**
 93    * Compares two rules in XSLT processing model order assuming that the modes
 94    * are equal.
 95    *
 96    * @param that
 97    * DOCUMENT ME!
 98    *
 99    * @return DOCUMENT ME!
 100    */
 101  12 public int compareTo(Rule that) {
 102  12 int answer = this.importPrecedence - that.importPrecedence;
 103   
 104  12 if (answer == 0) {
 105  9 answer = (int) Math.round(this.priority - that.priority);
 106   
 107  9 if (answer == 0) {
 108  7 answer = this.appearenceCount - that.appearenceCount;
 109    }
 110    }
 111   
 112  12 return answer;
 113    }
 114   
 115  2 public String toString() {
 116  2 return super.toString() + "[ pattern: " + getPattern() + " action: "
 117    + getAction() + " ]";
 118    }
 119   
 120    /**
 121    * DOCUMENT ME!
 122    *
 123    * @param node
 124    * DOCUMENT ME!
 125    *
 126    * @return true if the pattern matches the given DOM4J node.
 127    */
 128  52 public final boolean matches(Node node) {
 129  52 return pattern.matches(node);
 130    }
 131   
 132    /**
 133    * If this rule contains a union pattern then this method should return an
 134    * array of Rules which describe the union rule, which should contain more
 135    * than one rule. Otherwise this method should return null.
 136    *
 137    * @return an array of the rules which make up this union rule or null if
 138    * this rule is not a union rule
 139    */
 140  14 public Rule[] getUnionRules() {
 141  14 Pattern[] patterns = pattern.getUnionPatterns();
 142   
 143  14 if (patterns == null) {
 144  14 return null;
 145    }
 146   
 147  0 int size = patterns.length;
 148  0 Rule[] answer = new Rule[size];
 149   
 150  0 for (int i = 0; i < size; i++) {
 151  0 answer[i] = new Rule(this, patterns[i]);
 152    }
 153   
 154  0 return answer;
 155    }
 156   
 157    /**
 158    * DOCUMENT ME!
 159    *
 160    * @return the type of node the pattern matches which by default should
 161    * return ANY_NODE if it can match any kind of node.
 162    */
 163  28 public final short getMatchType() {
 164  28 return pattern.getMatchType();
 165    }
 166   
 167    /**
 168    * For patterns which only match an ATTRIBUTE_NODE or an ELEMENT_NODE then
 169    * this pattern may return the name of the element or attribute it matches.
 170    * This allows a more efficient rule matching algorithm to be performed,
 171    * rather than a brute force approach of evaluating every pattern for a
 172    * given Node.
 173    *
 174    * @return the name of the element or attribute this pattern matches or null
 175    * if this pattern matches any or more than one name.
 176    */
 177  28 public final String getMatchesNodeName() {
 178  28 return pattern.getMatchesNodeName();
 179    }
 180   
 181    /**
 182    * Getter for property mode.
 183    *
 184    * @return Value of property mode.
 185    */
 186  14 public String getMode() {
 187  14 return mode;
 188    }
 189   
 190    /**
 191    * Setter for property mode.
 192    *
 193    * @param mode
 194    * New value of property mode.
 195    */
 196  0 public void setMode(String mode) {
 197  0 this.mode = mode;
 198    }
 199   
 200    /**
 201    * Getter for property importPrecedence.
 202    *
 203    * @return Value of property importPrecedence.
 204    */
 205  0 public int getImportPrecedence() {
 206  0 return importPrecedence;
 207    }
 208   
 209    /**
 210    * Setter for property importPrecedence.
 211    *
 212    * @param importPrecedence
 213    * New value of property importPrecedence.
 214    */
 215  14 public void setImportPrecedence(int importPrecedence) {
 216  14 this.importPrecedence = importPrecedence;
 217    }
 218   
 219    /**
 220    * Getter for property priority.
 221    *
 222    * @return Value of property priority.
 223    */
 224  0 public double getPriority() {
 225  0 return priority;
 226    }
 227   
 228    /**
 229    * Setter for property priority.
 230    *
 231    * @param priority
 232    * New value of property priority.
 233    */
 234  0 public void setPriority(double priority) {
 235  0 this.priority = priority;
 236    }
 237   
 238    /**
 239    * Getter for property appearenceCount.
 240    *
 241    * @return Value of property appearenceCount.
 242    */
 243  0 public int getAppearenceCount() {
 244  0 return appearenceCount;
 245    }
 246   
 247    /**
 248    * Setter for property appearenceCount.
 249    *
 250    * @param appearenceCount
 251    * New value of property appearenceCount.
 252    */
 253  14 public void setAppearenceCount(int appearenceCount) {
 254  14 this.appearenceCount = appearenceCount;
 255    }
 256   
 257    /**
 258    * Getter for property pattern.
 259    *
 260    * @return Value of property pattern.
 261    */
 262  2 public Pattern getPattern() {
 263  2 return pattern;
 264    }
 265   
 266    /**
 267    * Setter for property pattern.
 268    *
 269    * @param pattern
 270    * New value of property pattern.
 271    */
 272  0 public void setPattern(Pattern pattern) {
 273  0 this.pattern = pattern;
 274    }
 275   
 276    /**
 277    * Getter for property action.
 278    *
 279    * @return Value of property action.
 280    */
 281  30 public Action getAction() {
 282  30 return action;
 283    }
 284   
 285    /**
 286    * Setter for property action.
 287    *
 288    * @param action
 289    * New value of property action.
 290    */
 291  0 public void setAction(Action action) {
 292  0 this.action = action;
 293    }
 294    }
 295   
 296    /*
 297    * Redistribution and use of this software and associated documentation
 298    * ("Software"), with or without modification, are permitted provided that the
 299    * following conditions are met:
 300    *
 301    * 1. Redistributions of source code must retain copyright statements and
 302    * notices. Redistributions must also contain a copy of this document.
 303    *
 304    * 2. Redistributions in binary form must reproduce the above copyright notice,
 305    * this list of conditions and the following disclaimer in the documentation
 306    * and/or other materials provided with the distribution.
 307    *
 308    * 3. The name "DOM4J" must not be used to endorse or promote products derived
 309    * from this Software without prior written permission of MetaStuff, Ltd. For
 310    * written permission, please contact dom4j-info@metastuff.com.
 311    *
 312    * 4. Products derived from this Software may not be called "DOM4J" nor may
 313    * "DOM4J" appear in their names without prior written permission of MetaStuff,
 314    * Ltd. DOM4J is a registered trademark of MetaStuff, Ltd.
 315    *
 316    * 5. Due credit should be given to the DOM4J Project - http://www.dom4j.org
 317    *
 318    * THIS SOFTWARE IS PROVIDED BY METASTUFF, LTD. AND CONTRIBUTORS ``AS IS'' AND
 319    * ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 320    * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 321    * ARE DISCLAIMED. IN NO EVENT SHALL METASTUFF, LTD. OR ITS CONTRIBUTORS BE
 322    * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 323    * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 324    * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 325    * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 326    * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 327    * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 328    * POSSIBILITY OF SUCH DAMAGE.
 329    *
 330    * Copyright 2001-2005 (C) MetaStuff, Ltd. All Rights Reserved.
 331    */