View Javadoc

    1   /*
    2    * $Header: /home/projects/jaxen/scm/jaxen/src/java/main/org/jaxen/expr/DefaultFilterExpr.java,v 1.16 2005/09/06 13:41:00 elharo Exp $
    3    * $Revision: 1.16 $
    4    * $Date: 2005/09/06 13:41:00 $
    5    *
    6    * ====================================================================
    7    *
    8    * Copyright (C) 2000-2002 bob mcwhirter & James Strachan.
    9    * All rights reserved.
    10   *
    11   * Redistribution and use in source and binary forms, with or without
    12   * modification, are permitted provided that the following conditions
    13   * are met:
    14   *
    15   * 1. Redistributions of source code must retain the above copyright
    16   *    notice, this list of conditions, and the following disclaimer.
    17   *
    18   * 2. Redistributions in binary form must reproduce the above copyright
    19   *    notice, this list of conditions, and the disclaimer that follows
    20   *    these conditions in the documentation and/or other materials
    21   *    provided with the distribution.
    22   *
    23   * 3. The name "Jaxen" must not be used to endorse or promote products
    24   *    derived from this software without prior written permission.  For
    25   *    written permission, please contact license@jaxen.org.
    26   *
    27   * 4. Products derived from this software may not be called "Jaxen", nor
    28   *    may "Jaxen" appear in their name, without prior written permission
    29   *    from the Jaxen Project Management (pm@jaxen.org).
    30   *
    31   * In addition, we request (but do not require) that you include in the
    32   * end-user documentation provided with the redistribution and/or in the
    33   * software itself an acknowledgement equivalent to the following:
    34   *     "This product includes software developed by the
    35   *      Jaxen Project <http://www.jaxen.org/>."
    36   * Alternatively, the acknowledgment may be graphical using the logos
    37   * available at http://www.jaxen.org/
    38   *
    39   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
    40   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
    41   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
    42   * DISCLAIMED.  IN NO EVENT SHALL THE Jaxen AUTHORS OR THE PROJECT
    43   * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    44   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    45   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
    46   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
    47   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
    48   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
    49   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
    50   * SUCH DAMAGE.
    51   *
    52   * ====================================================================
    53   * This software consists of voluntary contributions made by many
    54   * individuals on behalf of the Jaxen Project and was originally
    55   * created by bob mcwhirter <bob@werken.com> and
    56   * James Strachan <jstrachan@apache.org>.  For more information on the
    57   * Jaxen Project, please see <http://www.jaxen.org/>.
    58   *
    59   * $Id: DefaultFilterExpr.java,v 1.16 2005/09/06 13:41:00 elharo Exp $
    60   */
    61
    62
    63
    64  package org.jaxen.expr;
    65
    66  import java.util.ArrayList;
    67  import java.util.List;
    68  import org.jaxen.Context;
    69  import org.jaxen.JaxenException;
    70
    71  /***
    72   * @deprecated this class will become non-public in the future;
    73   *     use the interface instead
    74   */
    75  public class DefaultFilterExpr extends DefaultExpr implements FilterExpr, Predicated
    76  {
    77      private Expr expr;
    78      private PredicateSet predicates;
    79
    80      public DefaultFilterExpr(PredicateSet predicateSet)
    81      {
    82          this.predicates = predicateSet;
    83      }
    84
    85      public DefaultFilterExpr(Expr expr, PredicateSet predicateSet)
    86      {
    87          this.expr       = expr;
    88          this.predicates = predicateSet;
    89      }
    90
    91      public void addPredicate(Predicate predicate)
    92      {
    93          this.predicates.addPredicate( predicate );
    94      }
    95
    96      public List getPredicates()
    97      {
    98          return this.predicates.getPredicates();
    99      }
    100
    101     public PredicateSet getPredicateSet()
    102     {
    103         return this.predicates;
    104     }
    105
    106     public Expr getExpr()
    107     {
    108         return this.expr;
    109     }
    110
    111     public String toString()
    112     {
    113         return "[(DefaultFilterExpr): expr: " + expr + " predicates: " + predicates + " ]";
    114     }
    115
    116     public String getText()
    117     {
    118         String text = "";
    119         if ( this.expr != null )
    120         {
    121             text = this.expr.getText();
    122         }
    123         text += predicates.getText();
    124         return text;
    125     }
    126
    127     public Expr simplify()
    128     {
    129         this.predicates.simplify();
    130
    131         if ( this.expr != null )
    132         {
    133             this.expr = this.expr.simplify();
    134         }
    135
    136         if ( this.predicates.getPredicates().size() == 0 )
    137         {
    138             return getExpr();
    139         }
    140
    141         return this;
    142     }
    143
    144     /*** Returns true if the current filter matches at least one of the context nodes
    145      */
    146     public boolean asBoolean(Context context) throws JaxenException
    147     {
    148         Object results = null;
    149         if ( expr != null )
    150         {
    151             results = expr.evaluate( context );
    152         }
    153         else
    154         {
    155             List nodeSet = context.getNodeSet();
    156             ArrayList list = new ArrayList(nodeSet.size());
    157             list.addAll( nodeSet );
    158             results = list;
    159         }
    160
    161         if ( results instanceof Boolean )
    162         {
    163             Boolean b = (Boolean) results;
    164             return b.booleanValue();
    165         }
    166         if ( results instanceof List )
    167         {
    168             return getPredicateSet().evaluateAsBoolean(
    169                 (List) results, context.getContextSupport()
    170             );
    171         }
    172
    173         return false;
    174     }
    175
    176     public Object evaluate(Context context) throws JaxenException
    177     {
    178         Object results = getExpr().evaluate( context );
    179
    180         if ( results instanceof List )
    181         {
    182             List newresults = getPredicateSet().evaluatePredicates( (List) results,
    183                                     context.getContextSupport() );
    184         results = newresults;
    185         }
    186
    187         return results;
    188     }
    189     public void accept(Visitor visitor)
    190     {
    191         visitor.visit(this);
    192     }
    193 }