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$
 3  
  * $Revision: 1261 $
 4  
  * $Date: 2006-11-30 10:49:27 -0800 (Thu, 30 Nov 2006) $
 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 1261 2006-11-30 18:49:27Z elharo $
 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  37168
                            LocationPath locationPath) {
 64  37168
         this.filterExpr = filterExpr;
 65  37168
         this.locationPath = locationPath;
 66  37168
     }
 67  
 
 68  
     public Expr getFilterExpr() {
 69  135295
         return this.filterExpr;
 70  
     }
 71  
 
 72  
 
 73  
     public void setFilterExpr(Expr filterExpr) {
 74  23641
         this.filterExpr = filterExpr;
 75  23641
     }
 76  
 
 77  
 
 78  
     public LocationPath getLocationPath() {
 79  115042
         return this.locationPath;
 80  
     }
 81  
 
 82  
 
 83  
     public String toString() {
 84  5
         if (getLocationPath() != null) {
 85  5
             return "[(DefaultPathExpr): " + getFilterExpr() + ", " + getLocationPath() + "]";
 86  
         }
 87  
 
 88  0
         return "[(DefaultPathExpr): " + getFilterExpr() + "]";
 89  
     }
 90  
 
 91  
 
 92  
     public String getText() {
 93  125
         StringBuffer buf = new StringBuffer();
 94  
 
 95  125
         if (getFilterExpr() != null) {
 96  125
             buf.append(getFilterExpr().getText());
 97  
         }
 98  
 
 99  125
         if (getLocationPath() != null) {
 100  125
             if (!getLocationPath().getSteps().isEmpty()) buf.append("/");
 101  125
             buf.append(getLocationPath().getText());
 102  
         }
 103  
 
 104  125
         return buf.toString();
 105  
     }
 106  
 
 107  
 
 108  
     public Expr simplify() {
 109  36963
         if (getFilterExpr() != null) {
 110  23641
             setFilterExpr(getFilterExpr().simplify());
 111  
         }
 112  
 
 113  36963
         if (getLocationPath() != null) {
 114  13587
             getLocationPath().simplify();
 115  
         }
 116  
 
 117  36963
         if (getFilterExpr() == null && getLocationPath() == null) {
 118  0
             return null;
 119  
         }
 120  
 
 121  
 
 122  36963
         if (getLocationPath() == null) {
 123  23376
             return getFilterExpr();
 124  
         }
 125  
 
 126  13587
         if (getFilterExpr() == null) {
 127  13322
             return getLocationPath();
 128  
         }
 129  
 
 130  265
         return this;
 131  
     }
 132  
 
 133  
     public Object evaluate(Context context) throws JaxenException {
 134  135
         Object results = null;
 135  135
         Context pathContext = null;
 136  135
         if (getFilterExpr() != null) {
 137  135
             results = getFilterExpr().evaluate(context);
 138  130
             pathContext = new Context(context.getContextSupport());
 139  130
             pathContext.setNodeSet(convertToList(results));
 140  
         }
 141  130
         if (getLocationPath() != null) {
 142  130
             return getLocationPath().evaluate(pathContext);
 143  
         }
 144  0
         return results;
 145  
     }
 146  
     
 147  
 }
 148