Save This Page
Home » commons-digester-1.8-src » org.apache.commons » digester » [javadoc | source]
    1   /* $Id: AbstractRulesImpl.java 471661 2006-11-06 08:09:25Z skitching $
    2    *
    3    * Licensed to the Apache Software Foundation (ASF) under one or more
    4    * contributor license agreements.  See the NOTICE file distributed with
    5    * this work for additional information regarding copyright ownership.
    6    * The ASF licenses this file to You under the Apache License, Version 2.0
    7    * (the "License"); you may not use this file except in compliance with
    8    * the License.  You may obtain a copy of the License at
    9    * 
   10    *      http://www.apache.org/licenses/LICENSE-2.0
   11    * 
   12    * Unless required by applicable law or agreed to in writing, software
   13    * distributed under the License is distributed on an "AS IS" BASIS,
   14    * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   15    * See the License for the specific language governing permissions and
   16    * limitations under the License.
   17    */ 
   18   
   19   
   20   package org.apache.commons.digester;
   21   
   22   
   23   import java.util.List;
   24   
   25   
   26   /**
   27    * <p><code>AbstractRuleImpl</code> provides basic services for <code>Rules</code> implementations.
   28    * Extending this class should make it easier to create a <code>Rules</code> implementation.</p>
   29    * 
   30    * <p><code>AbstractRuleImpl</code> manages the <code>Digester</code> 
   31    * and <code>namespaceUri</code> properties.
   32    * If the subclass overrides {@link #registerRule} (rather than {@link #add}),
   33    * then the <code>Digester</code> and <code>namespaceURI</code> of the <code>Rule</code>
   34    * will be set correctly before it is passed to <code>registerRule</code>.
   35    * The subclass can then perform whatever it needs to do to register the rule.</p>
   36    *
   37    * @since 1.5
   38    */
   39   
   40   abstract public class AbstractRulesImpl implements Rules {
   41   
   42       // ------------------------------------------------------------- Fields
   43       
   44       /** Digester using this <code>Rules</code> implementation */
   45       private Digester digester;
   46       /** Namespace uri to assoicate with subsequent <code>Rule</code>'s */
   47       private String namespaceURI;
   48       
   49       // ------------------------------------------------------------- Properties
   50   
   51       /**
   52        * Return the Digester instance with which this Rules instance is
   53        * associated.
   54        */
   55       public Digester getDigester() {
   56           return digester;
   57       }
   58   
   59       /**
   60        * Set the Digester instance with which this Rules instance is associated.
   61        *
   62        * @param digester The newly associated Digester instance
   63        */
   64       public void setDigester(Digester digester) {
   65           this.digester = digester;
   66       }
   67   
   68       /**
   69        * Return the namespace URI that will be applied to all subsequently
   70        * added <code>Rule</code> objects.
   71        */
   72       public String getNamespaceURI() {
   73           return namespaceURI;
   74       }
   75   
   76       /**
   77        * Set the namespace URI that will be applied to all subsequently
   78        * added <code>Rule</code> objects.
   79        *
   80        * @param namespaceURI Namespace URI that must match on all
   81        *  subsequently added rules, or <code>null</code> for matching
   82        *  regardless of the current namespace URI
   83        */
   84       public void setNamespaceURI(String namespaceURI) {
   85           this.namespaceURI = namespaceURI;
   86       }
   87   
   88       // --------------------------------------------------------- Public Methods
   89   
   90       /**
   91        * Registers a new Rule instance matching the specified pattern.
   92        * This implementation sets the <code>Digester</code> and the
   93        * <code>namespaceURI</code> on the <code>Rule</code> before calling {@link #registerRule}.
   94        *
   95        * @param pattern Nesting pattern to be matched for this Rule
   96        * @param rule Rule instance to be registered
   97        */
   98       public void add(String pattern, Rule rule) {
   99           // set up rule
  100           if (this.digester != null) {
  101               rule.setDigester(this.digester);
  102           }
  103           
  104           if (this.namespaceURI != null) {
  105               rule.setNamespaceURI(this.namespaceURI);
  106           }
  107           
  108           registerRule(pattern, rule);
  109           
  110       }
  111       
  112       /** 
  113        * Register rule at given pattern.
  114        * The the Digester and namespaceURI properties of the given <code>Rule</code>
  115        * can be assumed to have been set properly before this method is called.
  116        *
  117        * @param pattern Nesting pattern to be matched for this Rule
  118        * @param rule Rule instance to be registered
  119        */ 
  120       abstract protected void registerRule(String pattern, Rule rule);
  121   
  122       /**
  123        * Clear all existing Rule instance registrations.
  124        */
  125       abstract public void clear();
  126   
  127   
  128       /**
  129        * Return a List of all registered Rule instances that match the specified
  130        * nesting pattern, or a zero-length List if there are no matches.  If more
  131        * than one Rule instance matches, they <strong>must</strong> be returned
  132        * in the order originally registered through the <code>add()</code>
  133        * method.
  134        *
  135        * @param pattern Nesting pattern to be matched
  136        *
  137        * @deprecated Call match(namespaceURI,pattern) instead.
  138        */
  139       public List match(String pattern) {
  140           return match(namespaceURI, pattern);
  141       }
  142   
  143   
  144       /**
  145        * Return a List of all registered Rule instances that match the specified
  146        * nesting pattern, or a zero-length List if there are no matches.  If more
  147        * than one Rule instance matches, they <strong>must</strong> be returned
  148        * in the order originally registered through the <code>add()</code>
  149        * method.
  150        *
  151        * @param namespaceURI Namespace URI for which to select matching rules,
  152        *  or <code>null</code> to match regardless of namespace URI
  153        * @param pattern Nesting pattern to be matched
  154        */
  155       abstract public List match(String namespaceURI, String pattern);
  156   
  157   
  158       /**
  159        * Return a List of all registered Rule instances, or a zero-length List
  160        * if there are no registered Rule instances.  If more than one Rule
  161        * instance has been registered, they <strong>must</strong> be returned
  162        * in the order originally registered through the <code>add()</code>
  163        * method.
  164        */
  165       abstract public List rules();
  166   
  167   }

Save This Page
Home » commons-digester-1.8-src » org.apache.commons » digester » [javadoc | source]