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();