Coverage Report - org.jaxen.expr.DefaultPathExpr
 
Classes in this File Line Coverage Branch Coverage Complexity
DefaultPathExpr
92%
35/38
100%
11/11
3
 
 1  
 /*
 2  
  * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/expr/DefaultPathExpr.java,v 1.16 2006/11/30 18:49:26 elharo Exp $
 3  
  * $Revision: 1.16 $
 4  
  * $Date: 2006/11/30 18:49:26 $
 5  
  *
 6  
  * ====================================================================
 7  
  *
 8  
  * Copyright 2000-2002 bob mcwhirter & James Strachan.
 9  
  * All rights reserved.
 10  
  *
 11  
  *
 12  
  * Redistribution and use in source and binary forms, with or without
 13  
  * modification, are permitted provided that the following conditions are
 14  
  * met:
 15  
  * 
 16  
  *   * Redistributions of source code must retain the above copyright
 17  
  *     notice, this list of conditions and the following disclaimer.
 18  
  * 
 19  
  *   * Redistributions in binary form must reproduce the above copyright
 20  
  *     notice, this list of conditions and the following disclaimer in the
 21  
  *     documentation and/or other materials provided with the distribution.
 22  
  * 
 23  
  *   * Neither the name of the Jaxen Project nor the names of its
 24  
  *     contributors may be used to endorse or promote products derived 
 25  
  *     from this software without specific prior written permission.
 26  
  * 
 27  
  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
 28  
  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
 29  
  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
 30  
  * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
 31  
  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
 32  
  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
 33  
  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
 34  
  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
 35  
  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 36  
  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 37  
  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 38  
  *
 39  
  * ====================================================================
 40  
  * This software consists of voluntary contributions made by many
 41  
  * individuals on behalf of the Jaxen Project and was originally
 42  
  * created by bob mcwhirter <bob@werken.com> and
 43  
  * James Strachan <jstrachan@apache.org>.  For more information on the
 44  
  * Jaxen Project, please see <http://www.jaxen.org/>.
 45  
  *
 46  
  * $Id: DefaultPathExpr.java,v 1.16 2006/11/30 18:49:26 elharo Exp $
 47  
  */
 48  
 
 49  
 package org.jaxen.expr;
 50  
 
 51  
 
 52  
 import org.jaxen.Context;
 53  
 import org.jaxen.JaxenException;
 54  
 
 55  
 
 56  
 class DefaultPathExpr extends DefaultExpr implements PathExpr {
 57  
 
 58  
     private static final long serialVersionUID = -6593934674727004281L;
 59  
     private Expr filterExpr;
 60  
     private LocationPath locationPath;
 61  
 
 62  
     DefaultPathExpr(Expr filterExpr,
 63  14816
                            LocationPath locationPath) {
 64  14816
         this.filterExpr = filterExpr;
 65  14816
         this.locationPath = locationPath;
 66  14816
     }
 67  
 
 68  
     public Expr getFilterExpr() {
 69  53942
         return this.filterExpr;
 70  
     }
 71  
 
 72  
 
 73  
     public void setFilterExpr(Expr filterExpr) {
 74  9434
         this.filterExpr = filterExpr;
 75  9434
     }
 76  
 
 77  
 
 78  
     public LocationPath getLocationPath() {
 79  45828
         return this.locationPath;
 80  
     }
 81  
 
 82  
 
 83  
     public String toString() {
 84  2
         if (getLocationPath() != null) {
 85  2
             return "[(DefaultPathExpr): " + getFilterExpr() + ", " + getLocationPath() + "]";
 86  
         }
 87  
 
 88  0
         return "[(DefaultPathExpr): " + getFilterExpr() + "]";
 89  
     }
 90  
 
 91  
 
 92  
     public String getText() {
 93  50
         StringBuffer buf = new StringBuffer();
 94  
 
 95  50
         if (getFilterExpr() != null) {
 96  50
             buf.append(getFilterExpr().getText());
 97  
         }
 98  
 
 99  50
         if (getLocationPath() != null) {
 100  50
             if (!getLocationPath().getSteps().isEmpty()) buf.append("/");
 101  50
             buf.append(getLocationPath().getText());
 102  
         }
 103  
 
 104  50
         return buf.toString();
 105  
     }
 106  
 
 107  
 
 108  
     public Expr simplify() {
 109  14734
         if (getFilterExpr() != null) {
 110  9434
             setFilterExpr(getFilterExpr().simplify());
 111  
         }
 112  
 
 113  14734
         if (getLocationPath() != null) {
 114  5406
             getLocationPath().simplify();
 115  
         }
 116  
 
 117  14734
         if (getFilterExpr() == null && getLocationPath() == null) {
 118  0
             return null;
 119  
         }
 120  
 
 121  
 
 122  14734
         if (getLocationPath() == null) {
 123  9328
             return getFilterExpr();
 124  
         }
 125  
 
 126  5406
         if (getFilterExpr() == null) {
 127  5300
             return getLocationPath();
 128  
         }
 129  
 
 130  106
         return this;
 131  
     }
 132  
 
 133  
     public Object evaluate(Context context) throws JaxenException {
 134  54
         Object results = null;
 135  54
         Context pathContext = null;
 136  54
         if (getFilterExpr() != null) {
 137  54
             results = getFilterExpr().evaluate(context);
 138  52
             pathContext = new Context(context.getContextSupport());
 139  52
             pathContext.setNodeSet(convertToList(results));
 140  
         }
 141  52
         if (getLocationPath() != null) {
 142  52
             return getLocationPath().evaluate(pathContext);
 143  
         }
 144  0
         return results;
 145  
     }
 146  
     
 147  
 }
 148