You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2011/05/12 20:03:33 UTC
svn commit: r1102402 [9/20] - in /commons/sandbox/digester3/trunk/src:
main/java/org/apache/commons/digester3/
main/java/org/apache/commons/digester3/annotations/
main/java/org/apache/commons/digester3/annotations/handlers/
main/java/org/apache/commons...
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/LogUtils.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/LogUtils.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/LogUtils.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/LogUtils.java Thu May 12 18:03:26 2011
@@ -23,51 +23,44 @@ import org.apache.commons.logging.Log;
/**
* Simple utility class to assist in logging.
* <p>
- * This class is intended only for the use of the code in the
- * plugins packages. No "user" code should use this package.
+ * This class is intended only for the use of the code in the plugins packages. No "user" code should use this package.
* <p>
- * The Digester module has an interesting approach to logging:
- * all logging should be done via the Log object stored on the
- * digester instance that the object *doing* the logging is associated
- * with.
+ * The Digester module has an interesting approach to logging: all logging should be done via the Log object stored on
+ * the digester instance that the object *doing* the logging is associated with.
* <p>
- * This is done because apparently some "container"-type applications
- * such as Avalon and Tomcat need to be able to configure different logging
- * for different <i>instances</i> of the Digester class which have been
- * loaded from the same ClassLoader [info from Craig McClanahan].
- * Not only the logging of the Digester instance should be affected; all
- * objects associated with that Digester instance should obey the
- * reconfiguration of their owning Digester instance's logging. The current
- * solution is to force all objects to output logging info via a single
- * Log object stored on the Digester instance they are associated with.
+ * This is done because apparently some "container"-type applications such as Avalon and Tomcat need to be able to
+ * configure different logging for different <i>instances</i> of the Digester class which have been loaded from the same
+ * ClassLoader [info from Craig McClanahan]. Not only the logging of the Digester instance should be affected; all
+ * objects associated with that Digester instance should obey the reconfiguration of their owning Digester instance's
+ * logging. The current solution is to force all objects to output logging info via a single Log object stored on the
+ * Digester instance they are associated with.
* <p>
- * Of course this causes problems if logging is attempted before an
- * object <i>has</i> a valid reference to its owning Digester. The
- * getLogging method provided here resolves this issue by returning a
- * Log object which silently discards all logging output in this
- * situation.
+ * Of course this causes problems if logging is attempted before an object <i>has</i> a valid reference to its owning
+ * Digester. The getLogging method provided here resolves this issue by returning a Log object which silently discards
+ * all logging output in this situation.
* <p>
- * And it also implies that logging filtering can no longer be applied
- * to subcomponents of the Digester, because all logging is done via
- * a single Log object (a single Category). C'est la vie...
- *
+ * And it also implies that logging filtering can no longer be applied to subcomponents of the Digester, because all
+ * logging is done via a single Log object (a single Category). C'est la vie...
+ *
* @since 1.6
*/
-class LogUtils {
-
- /**
- * Get the Log object associated with the specified Digester instance,
- * or a "no-op" logging object if the digester reference is null.
- * <p>
- * You should use this method instead of digester.getLogger() in
- * any situation where the digester might be null.
- */
- static Log getLogger(Digester digester) {
- if (digester == null) {
- return new org.apache.commons.logging.impl.NoOpLog();
+class LogUtils
+{
+
+ /**
+ * Get the Log object associated with the specified Digester instance, or a "no-op" logging object if the digester
+ * reference is null.
+ * <p>
+ * You should use this method instead of digester.getLogger() in any situation where the digester might be null.
+ */
+ static Log getLogger( Digester digester )
+ {
+ if ( digester == null )
+ {
+ return new org.apache.commons.logging.impl.NoOpLog();
+ }
+
+ return digester.getLogger();
}
-
- return digester.getLogger();
- }
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginAssertionFailure.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginAssertionFailure.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginAssertionFailure.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginAssertionFailure.java Thu May 12 18:03:26 2011
@@ -21,67 +21,70 @@ package org.apache.commons.digester3.plu
/**
* Thrown when a bug is detected in the plugins code.
* <p>
- * This class is intended to be used in assertion statements, similar to
- * the way that java 1.4's native assertion mechanism is used. However there
- * is a difference: when a java 1.4 assertion fails, an AssertionError
- * is thrown, which is a subclass of Error; here, the PluginAssertionFailure
- * class extends RuntimeException rather than Error.
+ * This class is intended to be used in assertion statements, similar to the way that java 1.4's native assertion
+ * mechanism is used. However there is a difference: when a java 1.4 assertion fails, an AssertionError is thrown, which
+ * is a subclass of Error; here, the PluginAssertionFailure class extends RuntimeException rather than Error.
* <p>
- * This difference in design is because throwing Error objects is not
- * good in a container-based architecture.
+ * This difference in design is because throwing Error objects is not good in a container-based architecture.
* <p>
* Example:
+ *
* <pre>
- * if (impossibleCondition) {
- * throw new PluginAssertionFailure(
- * "internal error: impossible condition is true");
- * }
- * </pre>
+ * if ( impossibleCondition )
+ * {
+ * throw new PluginAssertionFailure( "internal error: impossible condition is true" );
+ * }
+ * </pre>
* <p>
- * Note that PluginAssertionFailure should <i>not</i> be thrown when user
- * input is bad, or when code external to the Digester module passes invalid
- * parameters to a plugins method. It should be used only in checks for
- * problems which indicate internal bugs within the plugins module.
- *
+ * Note that PluginAssertionFailure should <i>not</i> be thrown when user input is bad, or when code external to the
+ * Digester module passes invalid parameters to a plugins method. It should be used only in checks for problems which
+ * indicate internal bugs within the plugins module.
+ *
* @since 1.6
*/
-public class PluginAssertionFailure extends RuntimeException {
+public class PluginAssertionFailure
+ extends RuntimeException
+{
private static final long serialVersionUID = 1L;
+
private Throwable cause = null;
/**
* @param cause underlying exception that caused this to be thrown
*/
- public PluginAssertionFailure(Throwable cause) {
- this(cause.getMessage());
+ public PluginAssertionFailure( Throwable cause )
+ {
+ this( cause.getMessage() );
this.cause = cause;
}
/**
* @param msg describes the reason this exception is being thrown.
*/
- public PluginAssertionFailure(String msg) {
- super(msg);
+ public PluginAssertionFailure( String msg )
+ {
+ super( msg );
}
/**
* @param msg describes the reason this exception is being thrown.
* @param cause underlying exception that caused this to be thrown
*/
- public PluginAssertionFailure(String msg, Throwable cause) {
- this(msg);
+ public PluginAssertionFailure( String msg, Throwable cause )
+ {
+ this( msg );
this.cause = cause;
}
-
+
/**
- * Return the cause of this exception (if any) as specified in the
- * exception constructor.
+ * Return the cause of this exception (if any) as specified in the exception constructor.
*
* @since 1.8
*/
@Override
- public Throwable getCause() {
+ public Throwable getCause()
+ {
return cause;
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginConfigurationException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginConfigurationException.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginConfigurationException.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginConfigurationException.java Thu May 12 18:03:26 2011
@@ -19,52 +19,56 @@
package org.apache.commons.digester3.plugins;
/**
- * Thrown when an error occurs due to the way the calling application uses
- * the plugins module. Because the pre-existing Digester API doesn't provide
- * any option for throwing checked exceptions at some points where Plugins
- * can potentially fail, this exception extends RuntimeException so that it
- * can "tunnel" through these points.
- *
+ * Thrown when an error occurs due to the way the calling application uses the plugins module. Because the pre-existing
+ * Digester API doesn't provide any option for throwing checked exceptions at some points where Plugins can potentially
+ * fail, this exception extends RuntimeException so that it can "tunnel" through these points.
+ *
* @since 1.6
*/
-public class PluginConfigurationException extends RuntimeException {
+public class PluginConfigurationException
+ extends RuntimeException
+{
private static final long serialVersionUID = 1L;
+
private Throwable cause = null;
/**
* @param cause underlying exception that caused this to be thrown
*/
- public PluginConfigurationException(Throwable cause) {
- this(cause.getMessage());
+ public PluginConfigurationException( Throwable cause )
+ {
+ this( cause.getMessage() );
this.cause = cause;
}
/**
* @param msg describes the reason this exception is being thrown.
*/
- public PluginConfigurationException(String msg) {
- super(msg);
+ public PluginConfigurationException( String msg )
+ {
+ super( msg );
}
/**
* @param msg describes the reason this exception is being thrown.
* @param cause underlying exception that caused this to be thrown
*/
- public PluginConfigurationException(String msg, Throwable cause) {
- this(msg);
+ public PluginConfigurationException( String msg, Throwable cause )
+ {
+ this( msg );
this.cause = cause;
}
/**
- * Return the cause of this exception (if any) as specified in the
- * exception constructor.
+ * Return the cause of this exception (if any) as specified in the exception constructor.
*
* @since 1.8
*/
@Override
- public Throwable getCause() {
+ public Throwable getCause()
+ {
return cause;
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginContext.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginContext.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginContext.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginContext.java Thu May 12 18:03:26 2011
@@ -32,33 +32,34 @@ import org.apache.commons.digester3.plug
/**
* Provides data and services which should exist only once per digester.
* <p>
- * This class holds a number of useful items which should be shared by all
- * plugin objects. Such data cannot be stored on the PluginRules or
- * PluginManager classes, as there can be multiple instances of these at
- * various times during a parse.
+ * This class holds a number of useful items which should be shared by all plugin objects. Such data cannot be stored on
+ * the PluginRules or PluginManager classes, as there can be multiple instances of these at various times during a
+ * parse.
* <p>
- * The name "Context" refers to the similarity between this class and a
- * ServletContext class in a servlet engine. A ServletContext object provides
- * access to the container's services such as obtaining global configuration
- * parameters for the container, or getting access to logging services. For
- * plugins, a Digester instance can be regarded as "the container".
- *
+ * The name "Context" refers to the similarity between this class and a ServletContext class in a servlet engine. A
+ * ServletContext object provides access to the container's services such as obtaining global configuration parameters
+ * for the container, or getting access to logging services. For plugins, a Digester instance can be regarded as
+ * "the container".
+ *
* @since 1.6
*/
-public class PluginContext {
+public class PluginContext
+{
// TODO: Consider making following four constants static in 2.0
// the xml attribute the user uses on an xml element to specify
// the plugin's class
public final String DFLT_PLUGIN_CLASS_ATTR_NS = null;
+
public final String DFLT_PLUGIN_CLASS_ATTR = "plugin-class";
// the xml attribute the user uses on an xml element to specify
// the plugin's class
public final String DFLT_PLUGIN_ID_ATTR_NS = null;
+
public final String DFLT_PLUGIN_ID_ATTR = "plugin-id";
-
+
/** See {@link #setPluginClassAttribute}. */
private String pluginClassAttrNs = DFLT_PLUGIN_CLASS_ATTR_NS;
@@ -70,178 +71,182 @@ public class PluginContext {
/** See {@link #setPluginClassAttribute}. */
private String pluginIdAttr = DFLT_PLUGIN_ID_ATTR;
-
- /**
- * A list of RuleFinder objects used by all Declarations (and thus
- * indirectly by all PluginCreateRules to locate the custom rules
- * for plugin classes.
+
+ /**
+ * A list of RuleFinder objects used by all Declarations (and thus indirectly by all PluginCreateRules to locate the
+ * custom rules for plugin classes.
*/
private List<RuleFinder> ruleFinders;
- //------------------- constructors ---------------------------------------
-
- public PluginContext() {
+ // ------------------- constructors ---------------------------------------
+
+ public PluginContext()
+ {
}
-
- //------------------- methods ---------------------------------------
+
+ // ------------------- methods ---------------------------------------
/**
- * Return the list of RuleFinder objects. Under normal circumstances
- * this method creates a default list of these objects when first called
- * (ie "on-demand" or "lazy initialization"). However if setRuleFinders
- * has been called first, then the list specified there is returned.
+ * Return the list of RuleFinder objects. Under normal circumstances this method creates a default list of these
+ * objects when first called (ie "on-demand" or "lazy initialization"). However if setRuleFinders has been called
+ * first, then the list specified there is returned.
* <p>
- * It is explicitly permitted for the caller to modify this list
- * by inserting or removing RuleFinder objects.
+ * It is explicitly permitted for the caller to modify this list by inserting or removing RuleFinder objects.
*/
- public List<RuleFinder> getRuleFinders() {
- if (ruleFinders == null) {
+ public List<RuleFinder> getRuleFinders()
+ {
+ if ( ruleFinders == null )
+ {
// when processing a plugin declaration, attempts are made to
// find custom rules in the order in which the Finder objects
// are added below. However this list can be modified
ruleFinders = new LinkedList<RuleFinder>();
- ruleFinders.add(new FinderFromFile());
- ruleFinders.add(new FinderFromResource());
- ruleFinders.add(new FinderFromClass());
- ruleFinders.add(new FinderFromMethod());
- ruleFinders.add(new FinderFromDfltMethod());
- ruleFinders.add(new FinderFromDfltClass());
- ruleFinders.add(new FinderFromDfltResource());
- ruleFinders.add(new FinderFromDfltResource(".xml"));
- ruleFinders.add(new FinderSetProperties());
+ ruleFinders.add( new FinderFromFile() );
+ ruleFinders.add( new FinderFromResource() );
+ ruleFinders.add( new FinderFromClass() );
+ ruleFinders.add( new FinderFromMethod() );
+ ruleFinders.add( new FinderFromDfltMethod() );
+ ruleFinders.add( new FinderFromDfltClass() );
+ ruleFinders.add( new FinderFromDfltResource() );
+ ruleFinders.add( new FinderFromDfltResource( ".xml" ) );
+ ruleFinders.add( new FinderSetProperties() );
}
return ruleFinders;
}
-
+
/**
- * Set the list of RuleFinder objects. This may be useful if working
- * in a non-english language, allowing the application developer to
- * replace the standard list with a list of objects which look for xml
- * attributes in the local language.
- * <p>
- * If the intent is just to add an additional rule-finding algorithm, then
- * it may be better to call #getRuleFinders, and insert a new object into
- * the start of the list.
+ * Set the list of RuleFinder objects. This may be useful if working in a non-english language, allowing the
+ * application developer to replace the standard list with a list of objects which look for xml attributes in the
+ * local language.
+ * <p>
+ * If the intent is just to add an additional rule-finding algorithm, then it may be better to call #getRuleFinders,
+ * and insert a new object into the start of the list.
*/
- public void setRuleFinders(List<RuleFinder> ruleFinders) {
+ public void setRuleFinders( List<RuleFinder> ruleFinders )
+ {
this.ruleFinders = ruleFinders;
}
/**
- * Sets the xml attribute which the input xml uses to indicate to a
- * PluginCreateRule which class should be instantiated.
+ * Sets the xml attribute which the input xml uses to indicate to a PluginCreateRule which class should be
+ * instantiated.
* <p>
* Example:
+ *
* <pre>
- * setPluginClassAttribute(null, "class");
+ * setPluginClassAttribute( null, "class" );
* </pre>
+ *
* will allow this in the input xml:
+ *
* <pre>
* <root>
* <some-plugin class="com.acme.widget"> ......
* </pre>
+ *
* instead of the default syntax:
+ *
* <pre>
* <root>
* <some-plugin plugin-class="com.acme.widget"> ......
* </pre>
- * This is particularly useful if the input xml document is not in
- * English.
+ *
+ * This is particularly useful if the input xml document is not in English.
* <p>
- * Note that the xml attributes used by PluginDeclarationRules are not
- * affected by this method.
- *
- * @param namespaceUri is the namespace uri that the specified attribute
- * is in. If the attribute is in no namespace, then this should be null.
- * Note that if a namespace is used, the attrName value should <i>not</i>
- * contain any kind of namespace-prefix. Note also that if you are using
- * a non-namespace-aware parser, this parameter <i>must</i> be null.
- *
- * @param attrName is the attribute whose value contains the name of the
- * class to be instantiated.
+ * Note that the xml attributes used by PluginDeclarationRules are not affected by this method.
+ *
+ * @param namespaceUri is the namespace uri that the specified attribute is in. If the attribute is in no namespace,
+ * then this should be null. Note that if a namespace is used, the attrName value should <i>not</i>
+ * contain any kind of namespace-prefix. Note also that if you are using a non-namespace-aware parser,
+ * this parameter <i>must</i> be null.
+ * @param attrName is the attribute whose value contains the name of the class to be instantiated.
*/
- public void setPluginClassAttribute(String namespaceUri,
- String attrName) {
+ public void setPluginClassAttribute( String namespaceUri, String attrName )
+ {
pluginClassAttrNs = namespaceUri;
pluginClassAttr = attrName;
}
/**
- * Sets the xml attribute which the input xml uses to indicate to a
- * PluginCreateRule which plugin declaration is being referenced.
+ * Sets the xml attribute which the input xml uses to indicate to a PluginCreateRule which plugin declaration is
+ * being referenced.
* <p>
* Example:
+ *
* <pre>
- * setPluginIdAttribute(null, "id");
+ * setPluginIdAttribute( null, "id" );
* </pre>
+ *
* will allow this in the input xml:
+ *
* <pre>
* <root>
* <some-plugin id="widget"> ......
* </pre>
+ *
* rather than the default behaviour:
+ *
* <pre>
* <root>
* <some-plugin plugin-id="widget"> ......
* </pre>
- * This is particularly useful if the input xml document is not in
- * English.
+ *
+ * This is particularly useful if the input xml document is not in English.
* <p>
- * Note that the xml attributes used by PluginDeclarationRules are not
- * affected by this method.
- *
- * @param namespaceUri is the namespace uri that the specified attribute
- * is in. If the attribute is in no namespace, then this should be null.
- * Note that if a namespace is used, the attrName value should <i>not</i>
- * contain any kind of namespace-prefix. Note also that if you are using
- * a non-namespace-aware parser, this parameter <i>must</i> be null.
- *
- * @param attrName is the attribute whose value contains the id of the
- * plugin declaration to be used when instantiating an object.
+ * Note that the xml attributes used by PluginDeclarationRules are not affected by this method.
+ *
+ * @param namespaceUri is the namespace uri that the specified attribute is in. If the attribute is in no namespace,
+ * then this should be null. Note that if a namespace is used, the attrName value should <i>not</i>
+ * contain any kind of namespace-prefix. Note also that if you are using a non-namespace-aware parser,
+ * this parameter <i>must</i> be null.
+ * @param attrName is the attribute whose value contains the id of the plugin declaration to be used when
+ * instantiating an object.
*/
- public void setPluginIdAttribute(String namespaceUri,
- String attrName) {
+ public void setPluginIdAttribute( String namespaceUri, String attrName )
+ {
pluginIdAttrNs = namespaceUri;
pluginIdAttr = attrName;
}
/**
- * Get the namespace for the xml attribute which indicates to a
- * PluginCreateRule which class is to be plugged in.
+ * Get the namespace for the xml attribute which indicates to a PluginCreateRule which class is to be plugged in.
* <p>
* May be null (in fact, normally will be).
*/
- public String getPluginClassAttrNs() {
+ public String getPluginClassAttrNs()
+ {
return pluginClassAttrNs;
}
-
+
/**
- * Get the namespace for the xml attribute which indicates to a
- * PluginCreateRule which class is to be plugged in.
+ * Get the namespace for the xml attribute which indicates to a PluginCreateRule which class is to be plugged in.
* <p>
* The return value is never null.
*/
- public String getPluginClassAttr() {
+ public String getPluginClassAttr()
+ {
return pluginClassAttr;
}
-
+
/**
- * Get the namespace for the xml attribute which indicates to a
- * PluginCreateRule which previous plugin declaration should be used.
+ * Get the namespace for the xml attribute which indicates to a PluginCreateRule which previous plugin declaration
+ * should be used.
* <p>
* May be null (in fact, normally will be).
*/
- public String getPluginIdAttrNs() {
+ public String getPluginIdAttrNs()
+ {
return pluginIdAttrNs;
}
-
+
/**
- * Get the namespace for the xml attribute which indicates to a
- * PluginCreateRule which previous plugin declaration should be used.
+ * Get the namespace for the xml attribute which indicates to a PluginCreateRule which previous plugin declaration
+ * should be used.
* <p>
* The return value is never null.
*/
- public String getPluginIdAttr() {
+ public String getPluginIdAttr()
+ {
return pluginIdAttr;
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginCreateRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginCreateRule.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginCreateRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginCreateRule.java Thu May 12 18:03:26 2011
@@ -23,25 +23,29 @@ import org.apache.commons.digester3.Rule
import org.apache.commons.logging.Log;
/**
- * Allows the original rules for parsing the configuration file to define
- * points at which plugins are allowed, by configuring a PluginCreateRule
- * with the appropriate pattern.
- *
+ * Allows the original rules for parsing the configuration file to define points at which plugins are allowed, by
+ * configuring a PluginCreateRule with the appropriate pattern.
+ *
* @since 1.6
*/
-public class PluginCreateRule extends Rule implements InitializableRule {
+public class PluginCreateRule
+ extends Rule
+ implements InitializableRule
+{
// see setPluginClassAttribute
private String pluginClassAttrNs = null;
+
private String pluginClassAttr = null;
-
+
// see setPluginIdAttribute
private String pluginIdAttrNs = null;
+
private String pluginIdAttr = null;
-
+
/**
- * In order to invoke the addRules method on the plugin class correctly,
- * we need to know the pattern which this rule is matched by.
+ * In order to invoke the addRules method on the plugin class correctly, we need to know the pattern which this rule
+ * is matched by.
*/
private String pattern;
@@ -49,144 +53,140 @@ public class PluginCreateRule extends Ru
private Class<?> baseClass = null;
/**
- * Info about optional default plugin to be used if no plugin-id is
- * specified in the input data. This can simplify the syntax where one
- * particular plugin is usually used.
+ * Info about optional default plugin to be used if no plugin-id is specified in the input data. This can simplify
+ * the syntax where one particular plugin is usually used.
*/
private Declaration defaultPlugin;
/**
- * Currently, none of the Rules methods allow exceptions to be thrown.
- * Therefore if this class cannot initialise itself properly, it cannot
- * cause the digester to stop. Instead, we cache the exception and throw
- * it the first time the begin() method is called.
+ * Currently, none of the Rules methods allow exceptions to be thrown. Therefore if this class cannot initialise
+ * itself properly, it cannot cause the digester to stop. Instead, we cache the exception and throw it the first
+ * time the begin() method is called.
*/
private PluginConfigurationException initException;
- //-------------------- constructors -------------------------------------
+ // -------------------- constructors -------------------------------------
/**
- * Create a plugin rule where the user <i>must</i> specify a plugin-class
- * or plugin-id.
+ * Create a plugin rule where the user <i>must</i> specify a plugin-class or plugin-id.
*
- * @param baseClass is the class which any specified plugin <i>must</i> be
- * descended from.
+ * @param baseClass is the class which any specified plugin <i>must</i> be descended from.
*/
- public PluginCreateRule(Class<?> baseClass) {
+ public PluginCreateRule( Class<?> baseClass )
+ {
this.baseClass = baseClass;
}
/**
- * Create a plugin rule where the user <i>may</i> specify a plugin.
- * If the user doesn't specify a plugin, then the default class specified
- * in this constructor is used.
+ * Create a plugin rule where the user <i>may</i> specify a plugin. If the user doesn't specify a plugin, then the
+ * default class specified in this constructor is used.
*
- * @param baseClass is the class which any specified plugin <i>must</i> be
- * descended from.
- * @param dfltPluginClass is the class which will be used if the user
- * doesn't specify any plugin-class or plugin-id. This class will have
- * custom rules installed for it just like a declared plugin.
+ * @param baseClass is the class which any specified plugin <i>must</i> be descended from.
+ * @param dfltPluginClass is the class which will be used if the user doesn't specify any plugin-class or plugin-id.
+ * This class will have custom rules installed for it just like a declared plugin.
*/
- public PluginCreateRule(Class<?> baseClass, Class<?> dfltPluginClass) {
+ public PluginCreateRule( Class<?> baseClass, Class<?> dfltPluginClass )
+ {
this.baseClass = baseClass;
- if (dfltPluginClass != null) {
- defaultPlugin = new Declaration(dfltPluginClass);
+ if ( dfltPluginClass != null )
+ {
+ defaultPlugin = new Declaration( dfltPluginClass );
}
}
/**
- * Create a plugin rule where the user <i>may</i> specify a plugin.
- * If the user doesn't specify a plugin, then the default class specified
- * in this constructor is used.
+ * Create a plugin rule where the user <i>may</i> specify a plugin. If the user doesn't specify a plugin, then the
+ * default class specified in this constructor is used.
*
- * @param baseClass is the class which any specified plugin <i>must</i> be
- * descended from.
- * @param dfltPluginClass is the class which will be used if the user
- * doesn't specify any plugin-class or plugin-id. This class will have
- * custom rules installed for it just like a declared plugin.
- * @param dfltPluginRuleLoader is a RuleLoader instance which knows how
- * to load the custom rules associated with this default plugin.
+ * @param baseClass is the class which any specified plugin <i>must</i> be descended from.
+ * @param dfltPluginClass is the class which will be used if the user doesn't specify any plugin-class or plugin-id.
+ * This class will have custom rules installed for it just like a declared plugin.
+ * @param dfltPluginRuleLoader is a RuleLoader instance which knows how to load the custom rules associated with
+ * this default plugin.
*/
- public PluginCreateRule(Class<?> baseClass, Class<?> dfltPluginClass,
- RuleLoader dfltPluginRuleLoader) {
+ public PluginCreateRule( Class<?> baseClass, Class<?> dfltPluginClass, RuleLoader dfltPluginRuleLoader )
+ {
this.baseClass = baseClass;
- if (dfltPluginClass != null) {
- defaultPlugin =
- new Declaration(dfltPluginClass, dfltPluginRuleLoader);
+ if ( dfltPluginClass != null )
+ {
+ defaultPlugin = new Declaration( dfltPluginClass, dfltPluginRuleLoader );
}
}
- //------------------- properties ---------------------------------------
-
+ // ------------------- properties ---------------------------------------
+
/**
- * Sets the xml attribute which the input xml uses to indicate to a
- * PluginCreateRule which class should be instantiated.
+ * Sets the xml attribute which the input xml uses to indicate to a PluginCreateRule which class should be
+ * instantiated.
* <p>
* See {@link PluginRules#setPluginClassAttribute} for more info.
*/
- public void setPluginClassAttribute(String namespaceUri, String attrName) {
+ public void setPluginClassAttribute( String namespaceUri, String attrName )
+ {
pluginClassAttrNs = namespaceUri;
pluginClassAttr = attrName;
}
/**
- * Sets the xml attribute which the input xml uses to indicate to a
- * PluginCreateRule which plugin declaration is being referenced.
+ * Sets the xml attribute which the input xml uses to indicate to a PluginCreateRule which plugin declaration is
+ * being referenced.
* <p>
* See {@link PluginRules#setPluginIdAttribute} for more info.
*/
- public void setPluginIdAttribute(String namespaceUri, String attrName) {
+ public void setPluginIdAttribute( String namespaceUri, String attrName )
+ {
pluginIdAttrNs = namespaceUri;
pluginIdAttr = attrName;
}
- //------------------- methods --------------------------------------------
+ // ------------------- methods --------------------------------------------
/**
- * Invoked after this rule has been added to the set of digester rules,
- * associated with the specified pattern. Check all configuration data is
- * valid and remember the pattern for later.
+ * Invoked after this rule has been added to the set of digester rules, associated with the specified pattern. Check
+ * all configuration data is valid and remember the pattern for later.
*
- * @param matchPattern is the digester match pattern that is associated
- * with this rule instance, eg "root/widget".
+ * @param matchPattern is the digester match pattern that is associated with this rule instance, eg "root/widget".
* @exception PluginConfigurationException
*/
- public void postRegisterInit(String matchPattern)
- throws PluginConfigurationException {
- Log log = LogUtils.getLogger(getDigester());
+ public void postRegisterInit( String matchPattern )
+ throws PluginConfigurationException
+ {
+ Log log = LogUtils.getLogger( getDigester() );
boolean debug = log.isDebugEnabled();
- if (debug) {
- log.debug("PluginCreateRule.postRegisterInit" +
- ": rule registered for pattern [" + matchPattern + "]");
+ if ( debug )
+ {
+ log.debug( "PluginCreateRule.postRegisterInit" + ": rule registered for pattern [" + matchPattern + "]" );
}
- if (getDigester() == null) {
+ if ( getDigester() == null )
+ {
// We require setDigester to be called before this method.
// Note that this means that PluginCreateRule cannot be added
// to a Rules object which has not yet been added to a
// Digester object.
- initException = new PluginConfigurationException(
- "Invalid invocation of postRegisterInit" +
- ": digester not set.");
+ initException =
+ new PluginConfigurationException( "Invalid invocation of postRegisterInit" + ": digester not set." );
throw initException;
}
- if (pattern != null) {
+ if ( pattern != null )
+ {
// We have been called twice, ie a single instance has been
// associated with multiple patterns.
//
- // Generally, Digester Rule instances can be associated with
- // multiple patterns. However for plugins, this creates some
- // complications. Some day this may be supported; however for
+ // Generally, Digester Rule instances can be associated with
+ // multiple patterns. However for plugins, this creates some
+ // complications. Some day this may be supported; however for
// now we just reject this situation.
- initException = new PluginConfigurationException(
- "A single PluginCreateRule instance has been mapped to" +
- " multiple patterns; this is not supported.");
+ initException =
+ new PluginConfigurationException( "A single PluginCreateRule instance has been mapped to"
+ + " multiple patterns; this is not supported." );
throw initException;
}
- if (matchPattern.indexOf('*') != -1) {
+ if ( matchPattern.indexOf( '*' ) != -1 )
+ {
// having wildcards in patterns is extremely difficult to
// deal with. For now, we refuse to allow this.
//
@@ -196,86 +196,90 @@ public class PluginCreateRule extends Ru
// Reasons include:
// (a) handling recursive plugins, and
// (b) determining whether one pattern is "below" another,
- // as done by PluginRules. Without wildcards, "below"
- // just means startsWith, which is easy to check.
- initException = new PluginConfigurationException(
- "A PluginCreateRule instance has been mapped to" +
- " pattern [" + matchPattern + "]." +
- " This pattern includes a wildcard character." +
- " This is not supported by the plugin architecture.");
+ // as done by PluginRules. Without wildcards, "below"
+ // just means startsWith, which is easy to check.
+ initException =
+ new PluginConfigurationException( "A PluginCreateRule instance has been mapped to" + " pattern ["
+ + matchPattern + "]." + " This pattern includes a wildcard character."
+ + " This is not supported by the plugin architecture." );
throw initException;
}
- if (baseClass == null) {
+ if ( baseClass == null )
+ {
baseClass = Object.class;
}
-
+
PluginRules rules = (PluginRules) getDigester().getRules();
PluginManager pm = rules.getPluginManager();
// check default class is valid
- if (defaultPlugin != null) {
- if (!baseClass.isAssignableFrom(defaultPlugin.getPluginClass())) {
- initException = new PluginConfigurationException(
- "Default class [" +
- defaultPlugin.getPluginClass().getName() +
- "] does not inherit from [" +
- baseClass.getName() + "].");
+ if ( defaultPlugin != null )
+ {
+ if ( !baseClass.isAssignableFrom( defaultPlugin.getPluginClass() ) )
+ {
+ initException =
+ new PluginConfigurationException( "Default class [" + defaultPlugin.getPluginClass().getName()
+ + "] does not inherit from [" + baseClass.getName() + "]." );
throw initException;
}
- try {
- defaultPlugin.init(getDigester(), pm);
-
- } catch(PluginException pwe) {
-
- throw new PluginConfigurationException(
- pwe.getMessage(), pwe.getCause());
+ try
+ {
+ defaultPlugin.init( getDigester(), pm );
+
+ }
+ catch ( PluginException pwe )
+ {
+
+ throw new PluginConfigurationException( pwe.getMessage(), pwe.getCause() );
}
}
// remember the pattern for later
pattern = matchPattern;
-
- if (pluginClassAttr == null) {
+
+ if ( pluginClassAttr == null )
+ {
// the user hasn't set explicit xml attr names on this rule,
// so fetch the default values
pluginClassAttrNs = rules.getPluginClassAttrNs();
pluginClassAttr = rules.getPluginClassAttr();
-
- if (debug) {
- log.debug(
- "init: pluginClassAttr set to per-digester values ["
- + "ns=" + pluginClassAttrNs
- + ", name=" + pluginClassAttr + "]");
- }
- } else {
- if (debug) {
- log.debug(
- "init: pluginClassAttr set to rule-specific values ["
- + "ns=" + pluginClassAttrNs
- + ", name=" + pluginClassAttr + "]");
+
+ if ( debug )
+ {
+ log.debug( "init: pluginClassAttr set to per-digester values [" + "ns=" + pluginClassAttrNs + ", name="
+ + pluginClassAttr + "]" );
+ }
+ }
+ else
+ {
+ if ( debug )
+ {
+ log.debug( "init: pluginClassAttr set to rule-specific values [" + "ns=" + pluginClassAttrNs
+ + ", name=" + pluginClassAttr + "]" );
}
}
-
- if (pluginIdAttr == null) {
+
+ if ( pluginIdAttr == null )
+ {
// the user hasn't set explicit xml attr names on this rule,
// so fetch the default values
pluginIdAttrNs = rules.getPluginIdAttrNs();
pluginIdAttr = rules.getPluginIdAttr();
-
- if (debug) {
- log.debug(
- "init: pluginIdAttr set to per-digester values ["
- + "ns=" + pluginIdAttrNs
- + ", name=" + pluginIdAttr + "]");
- }
- } else {
- if (debug) {
- log.debug(
- "init: pluginIdAttr set to rule-specific values ["
- + "ns=" + pluginIdAttrNs
- + ", name=" + pluginIdAttr + "]");
+
+ if ( debug )
+ {
+ log.debug( "init: pluginIdAttr set to per-digester values [" + "ns=" + pluginIdAttrNs + ", name="
+ + pluginIdAttr + "]" );
+ }
+ }
+ else
+ {
+ if ( debug )
+ {
+ log.debug( "init: pluginIdAttr set to rule-specific values [" + "ns=" + pluginIdAttrNs + ", name="
+ + pluginIdAttr + "]" );
}
}
}
@@ -283,104 +287,114 @@ public class PluginCreateRule extends Ru
/**
* Invoked when the Digester matches this rule against an xml element.
* <p>
- * A new instance of the target class is created, and pushed onto the
- * stack. A new "private" PluginRules object is then created and set as
- * the digester's default Rules object. Any custom rules associated with
- * the plugin class are then loaded into that new Rules object.
- * Finally, any custom rules that are associated with the current pattern
- * (such as SetPropertiesRules) have their begin methods executed.
+ * A new instance of the target class is created, and pushed onto the stack. A new "private" PluginRules object is
+ * then created and set as the digester's default Rules object. Any custom rules associated with the plugin class
+ * are then loaded into that new Rules object. Finally, any custom rules that are associated with the current
+ * pattern (such as SetPropertiesRules) have their begin methods executed.
*
- * @param namespace
- * @param name
+ * @param namespace
+ * @param name
* @param attributes
- *
* @throws ClassNotFoundException
* @throws PluginInvalidInputException
* @throws PluginConfigurationException
*/
@Override
- public void begin(String namespace, String name,
- org.xml.sax.Attributes attributes)
- throws java.lang.Exception {
+ public void begin( String namespace, String name, org.xml.sax.Attributes attributes )
+ throws java.lang.Exception
+ {
Log log = getDigester().getLogger();
boolean debug = log.isDebugEnabled();
- if (debug) {
- log.debug("PluginCreateRule.begin" + ": pattern=[" + pattern + "]" +
- " match=[" + getDigester().getMatch() + "]");
+ if ( debug )
+ {
+ log.debug( "PluginCreateRule.begin" + ": pattern=[" + pattern + "]" + " match=[" + getDigester().getMatch()
+ + "]" );
}
- if (initException != null) {
+ if ( initException != null )
+ {
// we had a problem during initialisation that we could
// not report then; report it now.
throw initException;
}
-
+
// load any custom rules associated with the plugin
PluginRules oldRules = (PluginRules) getDigester().getRules();
PluginManager pluginManager = oldRules.getPluginManager();
Declaration currDeclaration = null;
-
- String pluginClassName;
- if (pluginClassAttrNs == null) {
+
+ String pluginClassName;
+ if ( pluginClassAttrNs == null )
+ {
// Yep, this is ugly.
//
- // In a namespace-aware parser, the one-param version will
+ // In a namespace-aware parser, the one-param version will
// return attributes with no namespace.
//
- // In a non-namespace-aware parser, the two-param version will
+ // In a non-namespace-aware parser, the two-param version will
// never return any attributes, ever.
- pluginClassName = attributes.getValue(pluginClassAttr);
- } else {
- pluginClassName =
- attributes.getValue(pluginClassAttrNs, pluginClassAttr);
+ pluginClassName = attributes.getValue( pluginClassAttr );
+ }
+ else
+ {
+ pluginClassName = attributes.getValue( pluginClassAttrNs, pluginClassAttr );
}
- String pluginId;
- if (pluginIdAttrNs == null) {
- pluginId = attributes.getValue(pluginIdAttr);
- } else {
- pluginId =
- attributes.getValue(pluginIdAttrNs, pluginIdAttr);
+ String pluginId;
+ if ( pluginIdAttrNs == null )
+ {
+ pluginId = attributes.getValue( pluginIdAttr );
}
-
- if (pluginClassName != null) {
+ else
+ {
+ pluginId = attributes.getValue( pluginIdAttrNs, pluginIdAttr );
+ }
+
+ if ( pluginClassName != null )
+ {
// The user is using a plugin "inline", ie without a previous
// explicit declaration. If they have used the same plugin class
- // before, we have already gone to the effort of creating a
+ // before, we have already gone to the effort of creating a
// Declaration object, so retrieve it. If there is no existing
// declaration object for this class, then create one.
- currDeclaration = pluginManager.getDeclarationByClass(
- pluginClassName);
+ currDeclaration = pluginManager.getDeclarationByClass( pluginClassName );
- if (currDeclaration == null) {
- currDeclaration = new Declaration(pluginClassName);
- try {
- currDeclaration.init(getDigester(), pluginManager);
- } catch(PluginException pwe) {
- throw new PluginInvalidInputException(
- pwe.getMessage(), pwe.getCause());
- }
- pluginManager.addDeclaration(currDeclaration);
- }
- } else if (pluginId != null) {
- currDeclaration = pluginManager.getDeclarationById(pluginId);
-
- if (currDeclaration == null) {
- throw new PluginInvalidInputException(
- "Plugin id [" + pluginId + "] is not defined.");
+ if ( currDeclaration == null )
+ {
+ currDeclaration = new Declaration( pluginClassName );
+ try
+ {
+ currDeclaration.init( getDigester(), pluginManager );
+ }
+ catch ( PluginException pwe )
+ {
+ throw new PluginInvalidInputException( pwe.getMessage(), pwe.getCause() );
+ }
+ pluginManager.addDeclaration( currDeclaration );
}
- } else if (defaultPlugin != null) {
+ }
+ else if ( pluginId != null )
+ {
+ currDeclaration = pluginManager.getDeclarationById( pluginId );
+
+ if ( currDeclaration == null )
+ {
+ throw new PluginInvalidInputException( "Plugin id [" + pluginId + "] is not defined." );
+ }
+ }
+ else if ( defaultPlugin != null )
+ {
currDeclaration = defaultPlugin;
- } else {
- throw new PluginInvalidInputException(
- "No plugin class specified for element " +
- pattern);
}
-
+ else
+ {
+ throw new PluginInvalidInputException( "No plugin class specified for element " + pattern );
+ }
+
// get the class of the user plugged-in type
Class<?> pluginClass = currDeclaration.getPluginClass();
-
+
String path = getDigester().getMatch();
// create a new Rules object and effectively push it onto a stack of
@@ -388,43 +402,43 @@ public class PluginCreateRule extends Ru
// PluginRules constructor below causes the new instance to link
// to the previous head-of-stack, then the Digester.setRules() makes
// the new instance the new head-of-stack.
- PluginRules newRules = new PluginRules(getDigester(), path, oldRules, pluginClass);
- getDigester().setRules(newRules);
-
- if (debug) {
- log.debug("PluginCreateRule.begin: installing new plugin: " +
- "oldrules=" + oldRules.toString() +
- ", newrules=" + newRules.toString());
+ PluginRules newRules = new PluginRules( getDigester(), path, oldRules, pluginClass );
+ getDigester().setRules( newRules );
+
+ if ( debug )
+ {
+ log.debug( "PluginCreateRule.begin: installing new plugin: " + "oldrules=" + oldRules.toString()
+ + ", newrules=" + newRules.toString() );
}
-
+
// load up the custom rules
- currDeclaration.configure(getDigester(), pattern);
+ currDeclaration.configure( getDigester(), pattern );
// create an instance of the plugin class
Object instance = pluginClass.newInstance();
- getDigester().push(instance);
- if (debug) {
- log.debug(
- "PluginCreateRule.begin" + ": pattern=[" + pattern + "]" +
- " match=[" + getDigester().getMatch() + "]" +
- " pushed instance of plugin [" + pluginClass.getName() + "]");
+ getDigester().push( instance );
+ if ( debug )
+ {
+ log.debug( "PluginCreateRule.begin" + ": pattern=[" + pattern + "]" + " match=[" + getDigester().getMatch()
+ + "]" + " pushed instance of plugin [" + pluginClass.getName() + "]" );
}
-
+
// and now we have to fire any custom rules which would have
// been matched by the same path that matched this rule, had
// they been loaded at that time.
- List<Rule> rules = newRules.getDecoratedRules().match(namespace, path);
- fireBeginMethods(rules, namespace, name, attributes);
+ List<Rule> rules = newRules.getDecoratedRules().match( namespace, path );
+ fireBeginMethods( rules, namespace, name, attributes );
}
/**
* Process the body text of this element.
- *
+ *
* @param text The body text of this element
*/
@Override
- public void body(String namespace, String name, String text)
- throws Exception {
+ public void body( String namespace, String name, String text )
+ throws Exception
+ {
// While this class itself has no work to do in the body method,
// we do need to fire the body methods of all dynamically-added
@@ -437,40 +451,37 @@ public class PluginCreateRule extends Ru
// object to execute them at the appropriate time.
//
// Note that this applies only to rules matching exactly the path
- // which is also matched by this PluginCreateRule.
+ // which is also matched by this PluginCreateRule.
String path = getDigester().getMatch();
PluginRules newRules = (PluginRules) getDigester().getRules();
- List<Rule> rules = newRules.getDecoratedRules().match(namespace, path);
- fireBodyMethods(rules, namespace, name, text);
+ List<Rule> rules = newRules.getDecoratedRules().match( namespace, path );
+ fireBodyMethods( rules, namespace, name, text );
}
/**
- * Invoked by the digester when the closing tag matching this Rule's
- * pattern is encountered.
- * </p>
+ * Invoked by the digester when the closing tag matching this Rule's pattern is encountered. </p>
*
* @param namespace Description of the Parameter
* @param name Description of the Parameter
* @exception Exception Description of the Exception
- *
* @see #begin
*/
@Override
- public void end(String namespace, String name)
- throws Exception {
-
+ public void end( String namespace, String name )
+ throws Exception
+ {
// see body method for more info
String path = getDigester().getMatch();
PluginRules newRules = (PluginRules) getDigester().getRules();
- List<Rule> rules = newRules.getDecoratedRules().match(namespace, path);
- fireEndMethods(rules, namespace, name);
-
+ List<Rule> rules = newRules.getDecoratedRules().match( namespace, path );
+ fireEndMethods( rules, namespace, name );
+
// pop the stack of PluginRules instances, which
// discards all custom rules associated with this plugin
- getDigester().setRules(newRules.getParent());
-
+ getDigester().setRules( newRules.getParent() );
+
// and get rid of the instance of the plugin class from the
// digester object stack.
getDigester().pop();
@@ -479,43 +490,47 @@ public class PluginCreateRule extends Ru
/**
* Return the pattern that this Rule is associated with.
* <p>
- * In general, Rule instances <i>can</i> be associated with multiple
- * patterns. A PluginCreateRule, however, will only function correctly
- * when associated with a single pattern. It is possible to fix this, but
- * I can't be bothered just now because this feature is unlikely to be
- * used.
+ * In general, Rule instances <i>can</i> be associated with multiple patterns. A PluginCreateRule, however, will
+ * only function correctly when associated with a single pattern. It is possible to fix this, but I can't be
+ * bothered just now because this feature is unlikely to be used.
* </p>
*
* @return The pattern value
*/
- public String getPattern() {
+ public String getPattern()
+ {
return pattern;
}
-
+
/**
- * Duplicate the processing that the Digester does when firing the
- * begin methods of rules. It would be really nice if the Digester
- * class provided a way for this functionality to just be invoked
- * directly.
- */
- public void fireBeginMethods(List<Rule> rules,
- String namespace, String name,
- org.xml.sax.Attributes list)
- throws java.lang.Exception {
-
- if ((rules != null) && (rules.size() > 0)) {
+ * Duplicate the processing that the Digester does when firing the begin methods of rules. It would be really nice
+ * if the Digester class provided a way for this functionality to just be invoked directly.
+ */
+ public void fireBeginMethods( List<Rule> rules, String namespace, String name, org.xml.sax.Attributes list )
+ throws java.lang.Exception
+ {
+
+ if ( ( rules != null ) && ( rules.size() > 0 ) )
+ {
Log log = getDigester().getLogger();
boolean debug = log.isDebugEnabled();
- for (int i = 0; i < rules.size(); i++) {
- try {
- Rule rule = rules.get(i);
- if (debug) {
- log.debug(" Fire begin() for " + rule);
+ for ( int i = 0; i < rules.size(); i++ )
+ {
+ try
+ {
+ Rule rule = rules.get( i );
+ if ( debug )
+ {
+ log.debug( " Fire begin() for " + rule );
}
- rule.begin(namespace, name, list);
- } catch (Exception e) {
- throw getDigester().createSAXException(e);
- } catch (Error e) {
+ rule.begin( namespace, name, list );
+ }
+ catch ( Exception e )
+ {
+ throw getDigester().createSAXException( e );
+ }
+ catch ( Error e )
+ {
throw e;
}
}
@@ -523,59 +538,71 @@ public class PluginCreateRule extends Ru
}
/**
- * Duplicate the processing that the Digester does when firing the
- * body methods of rules. It would be really nice if the Digester
- * class provided a way for this functionality to just be invoked
- * directly.
- */
- private void fireBodyMethods(List<Rule> rules,
- String namespaceURI, String name,
- String text) throws Exception {
+ * Duplicate the processing that the Digester does when firing the body methods of rules. It would be really nice if
+ * the Digester class provided a way for this functionality to just be invoked directly.
+ */
+ private void fireBodyMethods( List<Rule> rules, String namespaceURI, String name, String text )
+ throws Exception
+ {
- if ((rules != null) && (rules.size() > 0)) {
+ if ( ( rules != null ) && ( rules.size() > 0 ) )
+ {
Log log = getDigester().getLogger();
boolean debug = log.isDebugEnabled();
- for (int i = 0; i < rules.size(); i++) {
- try {
- Rule rule = rules.get(i);
- if (debug) {
- log.debug(" Fire body() for " + rule);
+ for ( int i = 0; i < rules.size(); i++ )
+ {
+ try
+ {
+ Rule rule = rules.get( i );
+ if ( debug )
+ {
+ log.debug( " Fire body() for " + rule );
}
- rule.body(namespaceURI, name, text);
- } catch (Exception e) {
- throw getDigester().createSAXException(e);
- } catch (Error e) {
+ rule.body( namespaceURI, name, text );
+ }
+ catch ( Exception e )
+ {
+ throw getDigester().createSAXException( e );
+ }
+ catch ( Error e )
+ {
throw e;
}
}
}
}
-
+
/**
- * Duplicate the processing that the Digester does when firing the
- * end methods of rules. It would be really nice if the Digester
- * class provided a way for this functionality to just be invoked
- * directly.
- */
- public void fireEndMethods(List<Rule> rules,
- String namespaceURI, String name)
- throws Exception {
+ * Duplicate the processing that the Digester does when firing the end methods of rules. It would be really nice if
+ * the Digester class provided a way for this functionality to just be invoked directly.
+ */
+ public void fireEndMethods( List<Rule> rules, String namespaceURI, String name )
+ throws Exception
+ {
// Fire "end" events for all relevant rules in reverse order
- if (rules != null) {
+ if ( rules != null )
+ {
Log log = getDigester().getLogger();
boolean debug = log.isDebugEnabled();
- for (int i = 0; i < rules.size(); i++) {
- int j = (rules.size() - i) - 1;
- try {
- Rule rule = rules.get(j);
- if (debug) {
- log.debug(" Fire end() for " + rule);
+ for ( int i = 0; i < rules.size(); i++ )
+ {
+ int j = ( rules.size() - i ) - 1;
+ try
+ {
+ Rule rule = rules.get( j );
+ if ( debug )
+ {
+ log.debug( " Fire end() for " + rule );
}
- rule.end(namespaceURI, name);
- } catch (Exception e) {
- throw getDigester().createSAXException(e);
- } catch (Error e) {
+ rule.end( namespaceURI, name );
+ }
+ catch ( Exception e )
+ {
+ throw getDigester().createSAXException( e );
+ }
+ catch ( Error e )
+ {
throw e;
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginDeclarationRule.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginDeclarationRule.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginDeclarationRule.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginDeclarationRule.java Thu May 12 18:03:26 2011
@@ -24,98 +24,101 @@ import org.apache.commons.digester3.Dige
import org.apache.commons.digester3.Rule;
/**
- * A Digester rule which allows the user to pre-declare a class which is to
- * be referenced later at a plugin point by a PluginCreateRule.
+ * A Digester rule which allows the user to pre-declare a class which is to be referenced later at a plugin point by a
+ * PluginCreateRule.
* <p>
- * Normally, a PluginDeclarationRule is added to a Digester instance with
- * the pattern "{root}/plugin" or "* /plugin" where {root} is the name of
- * the root tag in the input document.
- *
+ * Normally, a PluginDeclarationRule is added to a Digester instance with the pattern "{root}/plugin" or "* /plugin"
+ * where {root} is the name of the root tag in the input document.
+ *
* @since 1.6
*/
-public class PluginDeclarationRule extends Rule {
-
- //------------------- constructors ---------------------------------------
-
- /** constructor */
- public PluginDeclarationRule() {
+public class PluginDeclarationRule
+ extends Rule
+{
+
+ // ------------------- constructors ---------------------------------------
+
+ /** constructor */
+ public PluginDeclarationRule()
+ {
super();
}
- //------------------- methods --------------------------------------------
+ // ------------------- methods --------------------------------------------
/**
- * Invoked upon reading a tag defining a plugin declaration. The tag
- * must have the following mandatory attributes:
+ * Invoked upon reading a tag defining a plugin declaration. The tag must have the following mandatory attributes:
* <ul>
- * <li> id </li>
- * <li> class </li>
+ * <li>id</li>
+ * <li>class</li>
* </ul>
- *
- *@param namespace The xml namespace in which the xml element which
- * triggered this rule resides.
- *@param name The name of the xml element which triggered this rule.
- *@param attributes The set of attributes on the xml element which
- * triggered this rule.
- *@exception java.lang.Exception
+ *
+ * @param namespace The xml namespace in which the xml element which triggered this rule resides.
+ * @param name The name of the xml element which triggered this rule.
+ * @param attributes The set of attributes on the xml element which triggered this rule.
+ * @exception java.lang.Exception
*/
@Override
- public void begin(String namespace, String name,
- org.xml.sax.Attributes attributes)
- throws java.lang.Exception {
-
+ public void begin( String namespace, String name, org.xml.sax.Attributes attributes )
+ throws java.lang.Exception
+ {
+
int nAttrs = attributes.getLength();
Properties props = new Properties();
- for(int i=0; i<nAttrs; ++i) {
- String key = attributes.getLocalName(i);
- if ((key == null) || (key.length() == 0)) {
- key = attributes.getQName(i);
+ for ( int i = 0; i < nAttrs; ++i )
+ {
+ String key = attributes.getLocalName( i );
+ if ( ( key == null ) || ( key.length() == 0 ) )
+ {
+ key = attributes.getQName( i );
}
- String value = attributes.getValue(i);
- props.setProperty(key, value);
+ String value = attributes.getValue( i );
+ props.setProperty( key, value );
+ }
+
+ try
+ {
+ declarePlugin( getDigester(), props );
}
-
- try {
- declarePlugin(getDigester(), props);
- } catch(PluginInvalidInputException ex) {
- throw new PluginInvalidInputException(
- "Error on element [" + getDigester().getMatch() +
- "]: " + ex.getMessage());
+ catch ( PluginInvalidInputException ex )
+ {
+ throw new PluginInvalidInputException( "Error on element [" + getDigester().getMatch() + "]: "
+ + ex.getMessage() );
}
}
-
- public static void declarePlugin(Digester digester, Properties props)
- throws PluginException {
-
- String id = props.getProperty("id");
- String pluginClassName = props.getProperty("class");
-
- if (id == null) {
- throw new PluginInvalidInputException(
- "mandatory attribute id not present on plugin declaration");
+
+ public static void declarePlugin( Digester digester, Properties props )
+ throws PluginException
+ {
+
+ String id = props.getProperty( "id" );
+ String pluginClassName = props.getProperty( "class" );
+
+ if ( id == null )
+ {
+ throw new PluginInvalidInputException( "mandatory attribute id not present on plugin declaration" );
}
- if (pluginClassName == null) {
- throw new PluginInvalidInputException(
- "mandatory attribute class not present on plugin declaration");
+ if ( pluginClassName == null )
+ {
+ throw new PluginInvalidInputException( "mandatory attribute class not present on plugin declaration" );
}
- Declaration newDecl = new Declaration(pluginClassName);
- newDecl.setId(id);
- newDecl.setProperties(props);
+ Declaration newDecl = new Declaration( pluginClassName );
+ newDecl.setId( id );
+ newDecl.setProperties( props );
PluginRules rc = (PluginRules) digester.getRules();
PluginManager pm = rc.getPluginManager();
- newDecl.init(digester, pm);
- pm.addDeclaration(newDecl);
-
+ newDecl.init( digester, pm );
+ pm.addDeclaration( newDecl );
+
// Note that it is perfectly safe to redeclare a plugin, because
// the declaration doesn't add any rules to digester; all it does
// is create a RuleLoader instance whch is *capable* of adding the
// rules to the digester.
}
}
-
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginException.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginException.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginException.java Thu May 12 18:03:26 2011
@@ -19,46 +19,52 @@
package org.apache.commons.digester3.plugins;
/**
- * Thrown when some plugin-related error has occurred, and none of the
- * other exception types are appropriate.
- *
+ * Thrown when some plugin-related error has occurred, and none of the other exception types are appropriate.
+ *
* @since 1.6
*/
-public class PluginException extends Exception {
+public class PluginException
+ extends Exception
+{
private static final long serialVersionUID = 1L;
+
private Throwable cause = null;
/**
* @param cause underlying exception that caused this to be thrown
*/
- public PluginException(Throwable cause) {
- this(cause.getMessage());
+ public PluginException( Throwable cause )
+ {
+ this( cause.getMessage() );
this.cause = cause;
}
/**
* @param msg describes the reason this exception is being thrown.
*/
- public PluginException(String msg) {
- super(msg);
+ public PluginException( String msg )
+ {
+ super( msg );
}
/**
* @param msg describes the reason this exception is being thrown.
* @param cause underlying exception that caused this to be thrown
*/
- public PluginException(String msg, Throwable cause) {
- this(msg);
+ public PluginException( String msg, Throwable cause )
+ {
+ this( msg );
this.cause = cause;
}
-
+
/**
* @return the underlying exception that caused this to be thrown
*/
@Override
- public Throwable getCause() {
+ public Throwable getCause()
+ {
return cause;
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginInvalidInputException.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginInvalidInputException.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginInvalidInputException.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginInvalidInputException.java Thu May 12 18:03:26 2011
@@ -20,46 +20,52 @@ package org.apache.commons.digester3.plu
/**
* Thrown when an error occurs due to bad data in the file being parsed.
- *
+ *
* @since 1.6
*/
-public class PluginInvalidInputException extends PluginException {
+public class PluginInvalidInputException
+ extends PluginException
+{
private static final long serialVersionUID = 1L;
+
private Throwable cause = null;
/**
* @param cause underlying exception that caused this to be thrown
*/
- public PluginInvalidInputException(Throwable cause) {
- this(cause.getMessage());
+ public PluginInvalidInputException( Throwable cause )
+ {
+ this( cause.getMessage() );
this.cause = cause;
}
/**
* @param msg describes the reason this exception is being thrown.
*/
- public PluginInvalidInputException(String msg) {
- super(msg);
+ public PluginInvalidInputException( String msg )
+ {
+ super( msg );
}
/**
* @param msg describes the reason this exception is being thrown.
* @param cause underlying exception that caused this to be thrown
*/
- public PluginInvalidInputException(String msg, Throwable cause) {
- this(msg);
+ public PluginInvalidInputException( String msg, Throwable cause )
+ {
+ this( msg );
this.cause = cause;
}
-
+
/**
- * Return the cause of this exception (if any) as specified in the
- * exception constructor.
+ * Return the cause of this exception (if any) as specified in the exception constructor.
*
* @since 1.8
*/
@Override
- public Throwable getCause() {
+ public Throwable getCause()
+ {
return cause;
}
}
Modified: commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginManager.java
URL: http://svn.apache.org/viewvc/commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginManager.java?rev=1102402&r1=1102401&r2=1102402&view=diff
==============================================================================
--- commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginManager.java (original)
+++ commons/sandbox/digester3/trunk/src/main/java/org/apache/commons/digester3/plugins/PluginManager.java Thu May 12 18:03:26 2011
@@ -28,156 +28,157 @@ import org.apache.commons.digester3.Dige
import org.apache.commons.logging.Log;
/**
- * Coordinates between PluginDeclarationRule and PluginCreateRule objects,
- * providing a place to share data between instances of these rules.
+ * Coordinates between PluginDeclarationRule and PluginCreateRule objects, providing a place to share data between
+ * instances of these rules.
* <p>
* One instance of this class exists per PluginRules instance.
- *
+ *
* @since 1.6
*/
-public class PluginManager {
+public class PluginManager
+{
/** Map of classname->Declaration */
private HashMap<String, Declaration> declarationsByClass = new HashMap<String, Declaration>();
- /** Map of id->Declaration */
+ /** Map of id->Declaration */
private HashMap<String, Declaration> declarationsById = new HashMap<String, Declaration>();
/** the parent manager to which this one may delegate lookups. */
private PluginManager parent;
-
- /**
- * The object containing data that should only exist once for each
- * Digester instance.
+
+ /**
+ * The object containing data that should only exist once for each Digester instance.
*/
private PluginContext pluginContext;
-
- //------------------- constructors ---------------------------------------
-
+
+ // ------------------- constructors ---------------------------------------
+
/** Construct a "root" PluginManager, ie one with no parent. */
- public PluginManager(PluginContext r) {
+ public PluginManager( PluginContext r )
+ {
pluginContext = r;
}
- /**
- * Construct a "child" PluginManager. When declarations are added to
- * a "child", they are stored within the child and do not modify the
- * parent, so when the child goes out of scope, those declarations
- * disappear. When asking a "child" to retrieve a declaration, it
- * delegates the search to its parent if it does not hold a matching
- * entry itself.
+ /**
+ * Construct a "child" PluginManager. When declarations are added to a "child", they are stored within the child and
+ * do not modify the parent, so when the child goes out of scope, those declarations disappear. When asking a
+ * "child" to retrieve a declaration, it delegates the search to its parent if it does not hold a matching entry
+ * itself.
* <p>
+ *
* @param parent must be non-null.
*/
- public PluginManager(PluginManager parent) {
+ public PluginManager( PluginManager parent )
+ {
this.parent = parent;
this.pluginContext = parent.pluginContext;
}
-
- //------------------- methods --------------------------------------------
+
+ // ------------------- methods --------------------------------------------
/**
* Add the declaration to the set of known declarations.
* <p>
- * TODO: somehow get a reference to a Digester object
- * so that we can really log here. Currently, all
- * logging is disabled from this method.
- *
- *@param decl an object representing a plugin class.
- */
- public void addDeclaration(Declaration decl) {
- Log log = LogUtils.getLogger(null);
+ * TODO: somehow get a reference to a Digester object so that we can really log here. Currently, all logging is
+ * disabled from this method.
+ *
+ * @param decl an object representing a plugin class.
+ */
+ public void addDeclaration( Declaration decl )
+ {
+ Log log = LogUtils.getLogger( null );
boolean debug = log.isDebugEnabled();
-
+
Class<?> pluginClass = decl.getPluginClass();
String id = decl.getId();
-
- declarationsByClass.put(pluginClass.getName(), decl);
-
- if (id != null) {
- declarationsById.put(id, decl);
- if (debug) {
- log.debug(
- "Indexing plugin-id [" + id + "]" +
- " -> class [" + pluginClass.getName() + "]");
+
+ declarationsByClass.put( pluginClass.getName(), decl );
+
+ if ( id != null )
+ {
+ declarationsById.put( id, decl );
+ if ( debug )
+ {
+ log.debug( "Indexing plugin-id [" + id + "]" + " -> class [" + pluginClass.getName() + "]" );
}
}
}
/**
- * Return the declaration object with the specified class.
- * If no such plugin is known, null is returned.
+ * Return the declaration object with the specified class. If no such plugin is known, null is returned.
*/
- public Declaration getDeclarationByClass(String className) {
- Declaration decl =
- declarationsByClass.get(className);
-
- if ((decl == null) && (parent != null)) {
- decl = parent.getDeclarationByClass(className);
+ public Declaration getDeclarationByClass( String className )
+ {
+ Declaration decl = declarationsByClass.get( className );
+
+ if ( ( decl == null ) && ( parent != null ) )
+ {
+ decl = parent.getDeclarationByClass( className );
}
return decl;
}
/**
- * Return the declaration object with the specified id.
- * If no such plugin is known, null is returned.
- *
- *@param id Description of the Parameter
- *@return The declaration value
- */
- public Declaration getDeclarationById(String id) {
- Declaration decl = declarationsById.get(id);
-
- if ((decl == null) && (parent != null)) {
- decl = parent.getDeclarationById(id);
+ * Return the declaration object with the specified id. If no such plugin is known, null is returned.
+ *
+ * @param id Description of the Parameter
+ * @return The declaration value
+ */
+ public Declaration getDeclarationById( String id )
+ {
+ Declaration decl = declarationsById.get( id );
+
+ if ( ( decl == null ) && ( parent != null ) )
+ {
+ decl = parent.getDeclarationById( id );
}
return decl;
}
/**
- * Given a plugin class and some associated properties, scan the
- * list of known RuleFinder instances until one detects a source of
- * custom rules for this plugin (aka a RuleLoader).
+ * Given a plugin class and some associated properties, scan the list of known RuleFinder instances until one
+ * detects a source of custom rules for this plugin (aka a RuleLoader).
* <p>
* If no source of custom rules can be found, null is returned.
*/
- public RuleLoader findLoader(Digester digester, String id,
- Class<?> pluginClass, Properties props)
- throws PluginException {
+ public RuleLoader findLoader( Digester digester, String id, Class<?> pluginClass, Properties props )
+ throws PluginException
+ {
- // iterate over the list of RuleFinders, trying each one
+ // iterate over the list of RuleFinders, trying each one
// until one of them locates a source of dynamic rules given
- // this specific plugin class and the associated declaration
+ // this specific plugin class and the associated declaration
// properties.
- Log log = LogUtils.getLogger(digester);
+ Log log = LogUtils.getLogger( digester );
boolean debug = log.isDebugEnabled();
- log.debug("scanning ruleFinders to locate loader..");
-
+ log.debug( "scanning ruleFinders to locate loader.." );
+
List<RuleFinder> ruleFinders = pluginContext.getRuleFinders();
RuleLoader ruleLoader = null;
- try {
- for(Iterator<RuleFinder> i = ruleFinders.iterator();
- i.hasNext() && ruleLoader == null; ) {
-
+ try
+ {
+ for ( Iterator<RuleFinder> i = ruleFinders.iterator(); i.hasNext() && ruleLoader == null; )
+ {
+
RuleFinder finder = i.next();
- if (debug) {
- log.debug("checking finder of type " + finder.getClass().getName());
+ if ( debug )
+ {
+ log.debug( "checking finder of type " + finder.getClass().getName() );
}
- ruleLoader = finder.findLoader(digester, pluginClass, props);
+ ruleLoader = finder.findLoader( digester, pluginClass, props );
}
}
- catch(PluginException e) {
- throw new PluginException(
- "Unable to locate plugin rules for plugin"
- + " with id [" + id + "]"
- + ", and class [" + pluginClass.getName() + "]"
- + ":" + e.getMessage(), e.getCause());
+ catch ( PluginException e )
+ {
+ throw new PluginException( "Unable to locate plugin rules for plugin" + " with id [" + id + "]"
+ + ", and class [" + pluginClass.getName() + "]" + ":" + e.getMessage(), e.getCause() );
}
- log.debug("scanned ruleFinders.");
-
+ log.debug( "scanned ruleFinders." );
+
return ruleLoader;
}
}