You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by br...@apache.org on 2003/08/12 18:33:33 UTC

cvs commit: cocoon-2.1/src/blocks/woody/conf woody-binding.xconf

bruno       2003/08/12 09:33:33

  Modified:    src/blocks/woody/java/org/apache/cocoon/woody/binding
                        JXPathBindingManager.java
               src/blocks/woody/conf woody-binding.xconf
  Log:
  Make the bindings configurable
  
  Revision  Changes    Path
  1.7       +28 -62    cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JXPathBindingManager.java
  
  Index: JXPathBindingManager.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/binding/JXPathBindingManager.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- JXPathBindingManager.java	12 Aug 2003 15:38:55 -0000	1.6
  +++ JXPathBindingManager.java	12 Aug 2003 16:33:32 -0000	1.7
  @@ -50,17 +50,18 @@
   */
   package org.apache.cocoon.woody.binding;
   
  -import java.util.HashMap;
  -import java.util.Iterator;
  -import java.util.Map;
  -
  -import org.apache.avalon.framework.logger.LogEnabled;
  -import org.apache.avalon.framework.logger.Logger;
  +import org.apache.avalon.framework.logger.AbstractLogEnabled;
   import org.apache.avalon.framework.service.Serviceable;
   import org.apache.avalon.framework.service.ServiceManager;
   import org.apache.avalon.framework.service.ServiceException;
   import org.apache.avalon.framework.activity.Disposable;
  +import org.apache.avalon.framework.activity.Initializable;
  +import org.apache.avalon.framework.configuration.Configurable;
  +import org.apache.avalon.framework.configuration.Configuration;
  +import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.thread.ThreadSafe;
   import org.apache.cocoon.woody.util.DomHelper;
  +import org.apache.cocoon.woody.util.SimpleServiceSelector;
   import org.apache.cocoon.woody.datatype.DatatypeManager;
   import org.apache.excalibur.source.Source;
   import org.w3c.dom.Document;
  @@ -72,52 +73,31 @@
    * by usage of the <a href="http://jakarta.apache.org/commons/jxpath/index.html">
    * JXPath package</a>. 
    */
  -public class JXPathBindingManager implements BindingManager, LogEnabled, Serviceable, Disposable {
  +public class JXPathBindingManager extends AbstractLogEnabled implements BindingManager, Serviceable, Disposable,
  +        Initializable, Configurable, ThreadSafe {
   
       //TODO caching of the Bindings. 
   
  -    private Logger logger;
  -
       private DatatypeManager datatypeManager;
       private ServiceManager serviceManager;
  -
  -    /**
  -     * Map of specific builders for the different elements in the 
  -     * Binding config.
  -     */
  -    private final Map bindingBuilders = new HashMap();
  -    {
  -        //TODO make this configurable
  -
  -        this.bindingBuilders.put("value", new ValueJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "context",
  -            new ContextJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "repeater",
  -            new RepeaterJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "aggregate",
  -            new AggregateJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "set-attribute",
  -            new SetAttributeJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "insert-node",
  -            new InsertNodeJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "delete-node",
  -            new DeleteNodeJXPathBindingBuilder());
  -        this.bindingBuilders.put(
  -            "insert-bean",
  -            new InsertBeanJXPathBindingBuilder());
  -    }
  +    private Configuration configuration;
  +    private SimpleServiceSelector bindingBuilderSelector;
   
       public void service(ServiceManager serviceManager) throws ServiceException {
           this.serviceManager = serviceManager;
           this.datatypeManager = (DatatypeManager)serviceManager.lookup(DatatypeManager.ROLE);
       }
   
  +    public void configure(Configuration configuration) throws ConfigurationException {
  +        this.configuration = configuration;
  +    }
  +
  +    public void initialize() throws Exception {
  +        bindingBuilderSelector = new SimpleServiceSelector("binding", JXpathBindingBuilderBase.class);
  +        bindingBuilderSelector.enableLogging(getLogger());
  +        bindingBuilderSelector.configure(configuration.getChild("bindings"));
  +    }
  +
       public Binding createBinding(Source bindSrc)
           throws BindingException {
           try {
  @@ -140,27 +120,12 @@
           }
       }
   
  -    public void enableLogging(Logger l) {
  -        this.logger = l;
  -        l.debug("Got logger, passing to the bindingBuilders");
  -        Iterator iter = this.bindingBuilders.values().iterator();
  -        while (iter.hasNext()) {
  -            Object builder = iter.next();
  -            if (builder instanceof LogEnabled) {
  -                ((LogEnabled) builder).enableLogging(l);
  -            }
  -        }
  -    }
  -
  -    protected Logger getLogger() {
  -        return logger;
  -    }
  -
       private Assistant getBuilderAssistant() {
           return new Assistant();
       }
   
       public void dispose() {
  +        bindingBuilderSelector.dispose();
           serviceManager.release(datatypeManager);
       }
   
  @@ -174,11 +139,12 @@
        */
       public class Assistant {
   
  -        private JXpathBindingBuilderBase getBindingBuilder(String bindingType) {
  -            return (JXpathBindingBuilderBase) JXPathBindingManager
  -                .this
  -                .bindingBuilders
  -                .get(bindingType);
  +        private JXpathBindingBuilderBase getBindingBuilder(String bindingType) throws BindingException {
  +            try {
  +                return (JXpathBindingBuilderBase) bindingBuilderSelector.select(bindingType);
  +            } catch (ServiceException e) {
  +                throw new BindingException("Cannot handle binding element with name \"" + bindingType + "\".", e);
  +            }
           }
   
           /**
  
  
  
  1.3       +12 -1     cocoon-2.1/src/blocks/woody/conf/woody-binding.xconf
  
  Index: woody-binding.xconf
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/conf/woody-binding.xconf,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- woody-binding.xconf	23 Jul 2003 09:09:18 -0000	1.2
  +++ woody-binding.xconf	12 Aug 2003 16:33:33 -0000	1.3
  @@ -2,6 +2,17 @@
   
   <xconf xpath="/cocoon" unless="woody-binding">
          
  -  <woody-binding logger="woody.binding"/>
  +  <woody-binding logger="woody.binding">
  +    <bindings>
  +      <binding name="value" src="org.apache.cocoon.woody.binding.ValueJXPathBindingBuilder"/>
  +      <binding name="context" src="org.apache.cocoon.woody.binding.ContextJXPathBindingBuilder"/>
  +      <binding name="repeater" src="org.apache.cocoon.woody.binding.RepeaterJXPathBindingBuilder"/>
  +      <binding name="aggregate" src="org.apache.cocoon.woody.binding.AggregateJXPathBindingBuilder"/>
  +      <binding name="set-attribute" src="org.apache.cocoon.woody.binding.SetAttributeJXPathBindingBuilder"/>
  +      <binding name="insert-node" src="org.apache.cocoon.woody.binding.InsertNodeJXPathBindingBuilder"/>
  +      <binding name="delete-node" src="org.apache.cocoon.woody.binding.DeleteNodeJXPathBindingBuilder"/>
  +      <binding name="insert-bean" src="org.apache.cocoon.woody.binding.InsertBeanJXPathBindingBuilder"/>
  +    </bindings>
  +  </woody-binding>
   
   </xconf>