Author: skitching
Date: Sun Feb  6 14:48:36 2005
New Revision: 151630

URL: http://svn.apache.org/viewcvs?view=rev&rev=151630
Log:
Made RuleManager an interface, and defined AbstractRuleManager as an
abstract base class. This makes RuleManager consistent with Action.

Also added svn:keywords property so $Id$ will get expanded.

Added:
    
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/AbstractRuleManager.java
Modified:
    
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/DefaultRuleManager.java
   (contents, props changed)
    
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/RuleManager.java
   (contents, props changed)

Added: 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/AbstractRuleManager.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/AbstractRuleManager.java?view=auto&rev=151630
==============================================================================
--- 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/AbstractRuleManager.java
 (added)
+++ 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/AbstractRuleManager.java
 Sun Feb  6 14:48:36 2005
@@ -0,0 +1,93 @@
+/* $Id$
+ *
+ * Copyright 2001-2005 The Apache Software Foundation.
+ * 
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */ 
+
+package org.apache.commons.digester2;
+
+import java.util.List;
+
+/**
+ * Provides a base implementation for custom RuleManagers (ie classes that
+ * match input xml elements to lists of Actions to be executed).
+ * <p>
+ * Note that extending this abstract class rather than directly implementing
+ * the RuleManager interface provides much better "forward compatibility". 
+ * Digester minor releases (2.x -> 2.y) guarantee not to break any classes 
that 
+ * subclass this abstract class. However no such guarantee exists for classes 
+ * that directly implement the RuleManager interface.
+ */
+
+public abstract class AbstractRuleManager implements RuleManager {
+
+    /**
+     * Returns a new instance with the same type as the concrete object this
+     * method is invoked on, complete with contained Actions and patterns. Note
+     * that the new RuleManager instance may contain references to the same 
+     * Action instances as the old one, as Action instances are expected to be
+     * stateless and therefore can be safely shared between RuleManagers. 
+     */
+    public abstract RuleManager copy();
+    
+    /**
+     * Invoked before parsing each input document, this method gives the
+     * RuleManager and the managed Action objects the opportunity to do
+     * per-parse initialisation if required.
+     */
+    public void startParse(Context context) throws DigestionException {}
+     
+    /**
+     * Invoked after parsing each input document, this method gives the
+     * RuleManager and the managed Action objects the opportunity to do
+     * per-parse cleanup if required.
+     */
+     public void finishParse(Context context) throws DigestionException {}
+
+    /**
+     * Define a mapping between xml element prefix and namespace uri
+     * for use when rule patterns contain namespace prefixes.
+     */
+    public abstract void addNamespace(String prefix, String uri);
+    
+    /**
+     * Cause the specified Action to be invoked whenever an xml element
+     * is encountered in the input which matches the specified pattern.
+     * <p>
+     * If the pattern contains any namespace prefixes, eg "/myns:item",
+     * then an exception will be thrown unless that prefix has previously
+     * been defined via a call to method addNamespace.
+     * <p>
+     * Note that it is permitted for the same Action to be added multiple
+     * times with different associated patterns.
+     */
+    public abstract void addRule(String pattern, Action action)
+    throws InvalidRuleException;
+
+    /**
+     * Return a List of all registered Action instances that match the 
specified
+     * nesting pattern, or a zero-length List if there are no matches.  If more
+     * than one Action instance matches, they <strong>must</strong> be returned
+     * in the order originally registered through the <code>addRule()</code>
+     * method.
+     *
+     * @param path is a string of form
+     * <pre>/{namespace}elementName/{namespace}elementName"</pre>
+     * identifying the path from the root of the input document to the element 
+     * for which the caller wants the set of matching Action objects. If an
+     * element has no namespace, then the {} part is omitted.
+     */
+    public abstract List getMatchingActions(String path)
+        throws DigestionException;
+}

Modified: 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/DefaultRuleManager.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/DefaultRuleManager.java?view=diff&r1=151629&r2=151630
==============================================================================
--- 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/DefaultRuleManager.java
 (original)
+++ 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/DefaultRuleManager.java
 Sun Feb  6 14:48:36 2005
@@ -1,6 +1,6 @@
-/* $Id: $
+/* $Id$
  *
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -48,9 +48,11 @@
  * an existing RuleManager instance. 
  */
 
-public class DefaultRuleManager extends RuleManager {
+public class DefaultRuleManager extends AbstractRuleManager {
 
-    // ----------------------------------------------------- Instance Variables
+    // ----------------------------------------------------- 
+    // Instance Variables
+    // ----------------------------------------------------- 
 
     /**
      * Map of namespace-prefix to namespace-uri, used only by the
@@ -72,7 +74,9 @@
      */
     private MultiHashMap rules = new MultiHashMap();
 
-    // --------------------------------------------------------- Public Methods
+    // --------------------------------------------------------- 
+    // Public Methods
+    // --------------------------------------------------------- 
 
     /**
      * Return a clone of this object. The Action objects currently
@@ -229,7 +233,6 @@
         }
     }
 
-
     /**
      * Return a List of all registered Action instances, or a zero-length List
      * if there are no registered Action instances.
@@ -238,8 +241,7 @@
      * instance has been added multiple times, then its order is set by the
      * first time it was added.
      */
-    public List actions() {
+    public List getActions() {
         return this.actions;
     }
-
 }

Propchange: 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/DefaultRuleManager.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/RuleManager.java
URL: 
http://svn.apache.org/viewcvs/jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/RuleManager.java?view=diff&r1=151629&r2=151630
==============================================================================
--- 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/RuleManager.java
 (original)
+++ 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/RuleManager.java
 Sun Feb  6 14:48:36 2005
@@ -1,6 +1,6 @@
-/* $Id: $
+/* $Id$
  *
- * Copyright 2001-2004 The Apache Software Foundation.
+ * Copyright 2001-2005 The Apache Software Foundation.
  * 
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -30,12 +30,16 @@
  * <li>Pattern: a string with namespace prefixes in it, eg "/foo:bob"</li>
  * <li>Path: a string with namespace uris in it, eg /{urn:foo}bob"</li>
  * </ul>
- * 
+ * <p>
+ * <strong>IMPORTANT NOTE</strong>: Anyone implementing a custom RuleManager is
+ * strongly encouraged to subclass AbstractRuleManager rather than implement 
this
+ * interface directly. Digester minor releases (2.x -> 2.y) guarantee that
+ * subclasses of AbstractRuleManager will not be broken. However the 
RuleManager
+ * interface <i>may</i> change in minor releases, which will break any class
+ * which implements this interface directly.
  */
 
-public abstract class RuleManager {
-
-    // --------------------------------------------------------- Public Methods
+public interface RuleManager {
 
     /**
      * Returns a new instance with the same type as the concrete object this
@@ -44,27 +48,27 @@
      * Action instances as the old one, as Action instances are expected to be
      * stateless and therefore can be safely shared between RuleManagers. 
      */
-    public abstract RuleManager copy();
+    public RuleManager copy();
     
     /**
      * Invoked before parsing each input document, this method gives the
      * RuleManager and the managed Action objects the opportunity to do
      * per-parse initialisation if required.
      */
-    public void startParse(Context context) throws DigestionException {}
+    public void startParse(Context context) throws DigestionException;
      
     /**
      * Invoked after parsing each input document, this method gives the
      * RuleManager and the managed Action objects the opportunity to do
      * per-parse cleanup if required.
      */
-     public void finishParse(Context context) throws DigestionException {}
+     public void finishParse(Context context) throws DigestionException;
 
     /**
      * Define a mapping between xml element prefix and namespace uri
      * for use when rule patterns contain namespace prefixes.
      */
-    public abstract void addNamespace(String prefix, String uri);
+    public void addNamespace(String prefix, String uri);
     
     /**
      * Cause the specified Action to be invoked whenever an xml element
@@ -77,8 +81,7 @@
      * Note that it is permitted for the same Action to be added multiple
      * times with different associated patterns.
      */
-    public abstract void addRule(String pattern, Action action)
-    throws InvalidRuleException;
+    public void addRule(String pattern, Action action) throws 
InvalidRuleException;
 
     /**
      * Return a List of all registered Action instances that match the 
specified
@@ -93,6 +96,5 @@
      * for which the caller wants the set of matching Action objects. If an
      * element has no namespace, then the {} part is omitted.
      */
-    public abstract List getMatchingActions(String path)
-        throws DigestionException;
+    public List getMatchingActions(String path) throws DigestionException;
 }

Propchange: 
jakarta/commons/proper/digester/branches/digester2/src/java/org/apache/commons/digester2/RuleManager.java
------------------------------------------------------------------------------
    svn:keywords = Id



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to