alvinalexander.com | career | drupal | java | mac | mysql | perl | scala | uml | unix  

Commons Digester example source code file (PluginContext.java)

This example Commons Digester source code file (PluginContext.java) is included in the DevDaily.com "Java Source Code Warehouse" project. The intent of this project is to help you "Learn Java by Example" TM.

Java - Commons Digester tags/keywords

dflt_plugin_class_attr, dflt_plugin_class_attr_ns, dflt_plugin_class_attr_ns, dflt_plugin_id_attr, dflt_plugin_id_attr, dflt_plugin_id_attr_ns, finderfromclass, finderfromdfltresource, finderfromdfltresource, finderfrommethod, list, plugincontext, string, string, util

The Commons Digester PluginContext.java source code

/* $Id: PluginContext.java 992060 2010-09-02 19:09:47Z simonetripodi $
 *
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You 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.digester.plugins;

import java.util.List;
import java.util.LinkedList;

import org.apache.commons.digester.plugins.strategies.FinderFromFile;
import org.apache.commons.digester.plugins.strategies.FinderFromResource;
import org.apache.commons.digester.plugins.strategies.FinderFromClass;
import org.apache.commons.digester.plugins.strategies.FinderFromMethod;
import org.apache.commons.digester.plugins.strategies.FinderFromDfltMethod;
import org.apache.commons.digester.plugins.strategies.FinderFromDfltClass;
import org.apache.commons.digester.plugins.strategies.FinderFromDfltResource;
import org.apache.commons.digester.plugins.strategies.FinderSetProperties;

/**
 * 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. 
 * <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".
 *
 * @since 1.6
 */

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;

    /** See {@link #setPluginClassAttribute}. */
    private String pluginClassAttr = DFLT_PLUGIN_CLASS_ATTR;

    /** See {@link #setPluginClassAttribute}. */
    private String pluginIdAttrNs = DFLT_PLUGIN_ID_ATTR_NS;

    /** 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.
     */
    private List<RuleFinder> ruleFinders;

    //------------------- constructors ---------------------------------------
    
    public PluginContext() {
    }
    
    //------------------- 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.
     * <p>
     * It is explicitly permitted for the caller to modify this list
     * by inserting or removing RuleFinder objects.
     */
    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());
        }
        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.
     */
    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.
     * <p>
     * Example:
     * <pre>
     * 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.
     * <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
     * contain any kind of namespace-prefix. Note also that if you are using
     * a non-namespace-aware parser, this parameter <i>must 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) {
        pluginClassAttrNs = namespaceUri;
        pluginClassAttr = attrName;
    }

    /**
     * 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");
     * </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.
     * <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
     * contain any kind of namespace-prefix. Note also that if you are using
     * a non-namespace-aware parser, this parameter <i>must 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) {
        pluginIdAttrNs = namespaceUri;
        pluginIdAttr = attrName;
    }

    /**
     * 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() {
        return pluginClassAttrNs;
    }
    
    /**
     * 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() {
        return pluginClassAttr;
    }
    
    /**
     * 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() {
        return pluginIdAttrNs;
    }
    
    /**
     * 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() {
        return pluginIdAttr;
    }
}

Other Commons Digester examples (source code examples)

Here is a short list of links related to this Commons Digester PluginContext.java source code file:

... this post is sponsored by my books ...

#1 New Release!

FP Best Seller

 

new blog posts

 

Copyright 1998-2021 Alvin Alexander, alvinalexander.com
All Rights Reserved.

A percentage of advertising revenue from
pages under the /java/jwarehouse URI on this website is
paid back to open source projects.