bruno       2003/05/14 05:53:02

  Modified:    src/blocks/woody/conf woody.xroles
               src/blocks/woody/java/org/apache/cocoon/woody
                        DefaultFormManager.java
  Added:       src/blocks/woody/conf woody.xconf
  Log:
  Made available widgets configurable
  
  Revision  Changes    Path
  1.2       +1 -1      cocoon-2.1/src/blocks/woody/conf/woody.xroles
  
  Index: woody.xroles
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/conf/woody.xroles,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- woody.xroles      22 Apr 2003 12:04:18 -0000      1.1
  +++ woody.xroles      14 May 2003 12:53:02 -0000      1.2
  @@ -2,6 +2,6 @@
   <xroles xpath="/role-list" unless="[EMAIL 
PROTECTED]'org.apache.cocoon.woody.FormManager']">
   
     <role name="org.apache.cocoon.woody.FormManager"
  -    shorthand="woody"
  +    shorthand="woody-formmanager"
       default-class="org.apache.cocoon.woody.DefaultFormManager"/>
   </xroles>
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/conf/woody.xconf
  
  Index: woody.xconf
  ===================================================================
  <?xml version="1.0"?>
  
  <xconf xpath="/cocoon" unless="woody">
    <!--
       | Woody's FormManager component
       |-->
    <woody-formmanager>
      <widgets>
        <widget name="field" 
factory="org.apache.cocoon.woody.formmodel.FieldDefinitionBuilder"/>
        <widget name="repeater" 
factory="org.apache.cocoon.woody.formmodel.RepeaterDefinitionBuilder"/>
        <widget name="booleanfield" 
factory="org.apache.cocoon.woody.formmodel.BooleanFieldDefinitionBuilder"/>
        <widget name="multivaluefield" 
factory="org.apache.cocoon.woody.formmodel.MultiValueFieldDefinitionBuilder"/>
        <widget name="button" 
factory="org.apache.cocoon.woody.formmodel.ButtonDefinitionBuilder"/>
      </widgets>
    </woody-formmanager>
  </xconf>
  
  
  
  1.5       +35 -26    
cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/DefaultFormManager.java
  
  Index: DefaultFormManager.java
  ===================================================================
  RCS file: 
/home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/DefaultFormManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- DefaultFormManager.java   14 May 2003 12:23:32 -0000      1.4
  +++ DefaultFormManager.java   14 May 2003 12:53:02 -0000      1.5
  @@ -57,6 +57,9 @@
   import org.apache.excalibur.source.SourceValidity;
   import org.apache.excalibur.store.Store;
   import org.apache.avalon.framework.CascadingException;
  +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.activity.Disposable;
   import org.apache.avalon.framework.component.Composable;
   import org.apache.avalon.framework.component.ComponentManager;
  @@ -68,13 +71,13 @@
   
   import java.util.Map;
   import java.util.HashMap;
  +import java.util.Iterator;
   import java.io.IOException;
   
   /**
    * Component implementing the [EMAIL PROTECTED] FormManager} role.
  - *
    */
  -public class DefaultFormManager implements FormManager, ThreadSafe, 
Composable, Disposable {
  +public class DefaultFormManager implements FormManager, ThreadSafe, 
Composable, Disposable, Configurable {
       private ComponentManager componentManager;
       private Map widgetDefinitionBuilders = new HashMap();
       private FormDefinitionBuilder formDefinitionBuilder;
  @@ -86,6 +89,31 @@
           this.store = (Store)componentManager.lookup(Store.TRANSIENT_STORE);
       }
   
  +    public void configure(Configuration configuration) throws 
ConfigurationException {
  +        // get available widgets from configuration
  +        Configuration[] widgetConfs = 
configuration.getChild("widgets").getChildren("widget");
  +        if (widgetConfs.length == 0)
  +            throw new ConfigurationException("No widgets found in 
FormManager configuration.");
  +
  +        for (int i = 0; i < widgetConfs.length; i++) {
  +            String name = widgetConfs[i].getAttribute("name");
  +            String factoryClassName = widgetConfs[i].getAttribute("factory");
  +            Class clazz;
  +            try {
  +                clazz = Class.forName(factoryClassName);
  +            } catch (Exception e) {
  +                throw new ConfigurationException("Could not load class \"" + 
factoryClassName + "\" specified at " + configuration.getLocation(), e);
  +            }
  +            WidgetDefinitionBuilder widgetDefinitionBuilder;
  +            try {
  +                widgetDefinitionBuilder = 
(WidgetDefinitionBuilder)clazz.newInstance();
  +            } catch (Exception e) {
  +                throw new ConfigurationException("Could not create 
WidgetDefinitionBuilder \"" + factoryClassName + "\"", e);
  +            }
  +            widgetDefinitionBuilders.put(name, widgetDefinitionBuilder);
  +        }
  +    }
  +
       public void lazyInitialize() throws Exception {
           // Initialisation is only done after the FormManager has been fully 
created, because
           // the WidgetDefinitionBuilders that we create here need themselves 
access to
  @@ -97,30 +125,11 @@
   
           LifecycleHelper lifecycleHelper = new LifecycleHelper(null, null, 
componentManager, null, null, null);
   
  -        // TODO the stuff below must be done based on external configuration 
information
  -
  -        // Setup all the widget definition builders
  -        WidgetDefinitionBuilder widgetDefinitionBuilder;
  -
  -        widgetDefinitionBuilder = new FieldDefinitionBuilder();
  -        lifecycleHelper.setupComponent(widgetDefinitionBuilder);
  -        widgetDefinitionBuilders.put("field", widgetDefinitionBuilder);
  -
  -        widgetDefinitionBuilder = new RepeaterDefinitionBuilder();
  -        lifecycleHelper.setupComponent(widgetDefinitionBuilder);
  -        widgetDefinitionBuilders.put("repeater", widgetDefinitionBuilder);
  -
  -        widgetDefinitionBuilder = new BooleanFieldDefinitionBuilder();
  -        lifecycleHelper.setupComponent(widgetDefinitionBuilder);
  -        widgetDefinitionBuilders.put("booleanfield", 
widgetDefinitionBuilder);
  -
  -        widgetDefinitionBuilder = new MultiValueFieldDefinitionBuilder();
  -        lifecycleHelper.setupComponent(widgetDefinitionBuilder);
  -        widgetDefinitionBuilders.put("multivaluefield", 
widgetDefinitionBuilder);
  -
  -        widgetDefinitionBuilder = new ButtonDefinitionBuilder();
  -        lifecycleHelper.setupComponent(widgetDefinitionBuilder);
  -        widgetDefinitionBuilders.put("button", widgetDefinitionBuilder);
  +        Iterator widgetDefinitionBuilderIt = 
widgetDefinitionBuilders.values().iterator();
  +        while (widgetDefinitionBuilderIt.hasNext()) {
  +            WidgetDefinitionBuilder widgetDefinitionBuilder = 
(WidgetDefinitionBuilder)widgetDefinitionBuilderIt.next();
  +            lifecycleHelper.setupComponent(widgetDefinitionBuilder);
  +        }
   
           // special case
           formDefinitionBuilder = new FormDefinitionBuilder();
  
  
  

Reply via email to