Author: tim
Date: Tue Mar 15 06:52:12 2005
New Revision: 157546

URL: http://svn.apache.org/viewcvs?view=rev&rev=157546
Log:
Sync with trunk.

Modified:
    
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/AbstractJavaSelectionList.java
    
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionList.java
    
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionListBuilder.java
    
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/StaticSelectionList.java

Modified: 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/AbstractJavaSelectionList.java
URL: 
http://svn.apache.org/viewcvs/cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/AbstractJavaSelectionList.java?view=diff&r1=157545&r2=157546
==============================================================================
--- 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/AbstractJavaSelectionList.java
 (original)
+++ 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/AbstractJavaSelectionList.java
 Tue Mar 15 06:52:12 2005
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed 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.
@@ -31,26 +31,31 @@
 import org.apache.cocoon.xml.XMLUtils;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
+import org.apache.excalibur.xml.sax.XMLizable;
 
 /**
  * Abstract implementation of a JavaSelectionList
  */
 public abstract class AbstractJavaSelectionList implements JavaSelectionList,
-        Serviceable {
+                                                           Serviceable {
 
     protected Datatype datatype;
     protected ServiceManager manager;
 
     private HashMap attributes;
-    private List items = new ArrayList();
+    private List items;
     private boolean nullable;
-    private boolean rebuild = true;
+    private boolean rebuild;
+
+    public AbstractJavaSelectionList() {
+        this.items = new ArrayList();
+        this.rebuild = true;
+    }
+
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
org.apache.cocoon.forms.datatype.JavaSelectionList#getAttribute(java.lang.String)
-     */
     public String getAttribute(String name) {
         if (this.attributes == null) {
             return null;
@@ -58,72 +63,31 @@
         return (String) this.attributes.get(name);
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
org.apache.cocoon.forms.datatype.JavaSelectionList#removeAttribute(java.lang.String)
-     */
     public void removeAttribute(String name) {
         if (this.attributes != null) {
             this.attributes.remove(name);
         }
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
org.apache.cocoon.forms.datatype.JavaSelectionList#setAttribute(java.lang.String,
-     *      java.lang.String)
-     */
     public void setAttribute(String name, String value) {
         if (this.attributes == null) {
             this.attributes = new HashMap();
         }
         this.attributes.put(name, value);
-
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
-     */
-    public void service(ServiceManager manager) throws ServiceException {
-        this.manager = manager;
-    }
-
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.cocoon.forms.datatype.JavaSelectionList#isNullable()
-     */
     public boolean isNullable() {
         return this.nullable;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
org.apache.cocoon.forms.datatype.JavaSelectionList#setDatatype(org.apache.cocoon.forms.datatype.Datatype)
-     */
     public void setDatatype(Datatype datatype) {
         this.datatype = datatype;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see 
org.apache.cocoon.forms.datatype.JavaSelectionList#setNullable(boolean)
-     */
     public void setNullable(boolean nullable) {
         this.nullable = nullable;
     }
 
-    /*
-     * (non-Javadoc)
-     * 
-     * @see org.apache.cocoon.forms.datatype.SelectionList#getDatatype()
-     */
     public Datatype getDatatype() {
         return this.datatype;
     }
@@ -136,33 +100,33 @@
     }
 
     public void generateSaxFragment(ContentHandler contentHandler, Locale 
locale)
-            throws SAXException {
-        if (this.rebuild)
+    throws SAXException {
+        if (this.rebuild) {
             try {
                 this.items.clear();
-                this.rebuild = this.build();
+                this.rebuild = build();
             } catch (Exception e) {
                 e.printStackTrace();
             }
+        }
+
         Convertor.FormatCache formatCache = new DefaultFormatCache();
-        contentHandler.startElement(Constants.INSTANCE_NS, SELECTION_LIST_EL,
-                Constants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL,
-                XMLUtils.EMPTY_ATTRIBUTES);
-        if (nullable) {
+        contentHandler.startElement(Constants.INSTANCE_NS, SELECTION_LIST_EL, 
Constants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL, XMLUtils.EMPTY_ATTRIBUTES);
+
+        if (this.nullable) {
             AttributesImpl voidAttrs = new AttributesImpl();
             voidAttrs.addCDATAAttribute("value", "");
-            contentHandler.startElement(Constants.INSTANCE_NS, ITEM_EL,
-                    Constants.INSTANCE_PREFIX_COLON + ITEM_EL, voidAttrs);
-            contentHandler.endElement(Constants.INSTANCE_NS, ITEM_EL,
-                    Constants.INSTANCE_PREFIX_COLON + ITEM_EL);
+            contentHandler.startElement(Constants.INSTANCE_NS, ITEM_EL, 
Constants.INSTANCE_PREFIX_COLON + ITEM_EL, voidAttrs);
+            contentHandler.endElement(Constants.INSTANCE_NS, ITEM_EL, 
Constants.INSTANCE_PREFIX_COLON + ITEM_EL);
         }
+
         Iterator itemIt = items.iterator();
         while (itemIt.hasNext()) {
             SelectionListItem item = (SelectionListItem) itemIt.next();
             item.generateSaxFragment(contentHandler, locale, formatCache);
         }
-        contentHandler.endElement(Constants.INSTANCE_NS, SELECTION_LIST_EL,
-                Constants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL);
+
+        contentHandler.endElement(Constants.INSTANCE_NS, SELECTION_LIST_EL, 
Constants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL);
     }
 
     /**
@@ -174,7 +138,20 @@
 
     /**
      * Adds a new item to this selection list.
-     * 
+     *
+     * @param value
+     *            a value of the correct type (i.e. the type with which this
+     *            selectionlist is associated)
+     * @param label
+     *            string label, can be null.
+     */
+    protected void addItem(Object value, String label) {
+        this.items.add(new SelectionListItem(value, label));
+    }
+
+    /**
+     * Adds a new item to this selection list.
+     *
      * @param value
      *            a value of the correct type (i.e. the type with which this
      *            selectionlist is associated)
@@ -182,57 +159,57 @@
      *            a SAX-fragment such as a
      *            [EMAIL PROTECTED] org.apache.cocoon.xml.SaxBuffer}, can be 
null
      */
-    protected void addItem(Object value, String label) {
-        items.add(new SelectionListItem(value, label));
+    protected void addItem(Object value, XMLizable label) {
+        this.items.add(new SelectionListItem(value, label));
     }
 
     protected List getItems() {
-        return items;
+        return this.items;
     }
 
     private final class SelectionListItem {
         private final Object value;
 
-        private final String label;
+        private final Object label;
 
         public SelectionListItem(Object value, String label) {
             this.value = value;
             this.label = label;
         }
 
+        public SelectionListItem(Object value, XMLizable label) {
+            this.value = value;
+            this.label = label;
+        }
+
         public Object getValue() {
             return value;
         }
 
         public void generateSaxFragment(ContentHandler contentHandler,
-                Locale locale, Convertor.FormatCache formatCache)
-                throws SAXException {
-            AttributesImpl itemAttrs = new AttributesImpl();
+                                        Locale locale, Convertor.FormatCache 
formatCache)
+        throws SAXException {
             String stringValue;
             if (this.value == null) {
                 stringValue = "";
             } else {
-                stringValue = datatype.getConvertor().convertToString(value,
-                        locale, formatCache);
+                stringValue = 
datatype.getConvertor().convertToString(this.value, locale, formatCache);
             }
-            itemAttrs.addCDATAAttribute("value", stringValue);
-            contentHandler.startElement(Constants.INSTANCE_NS, ITEM_EL,
-                    Constants.INSTANCE_PREFIX_COLON + ITEM_EL, itemAttrs);
-            contentHandler.startElement(Constants.INSTANCE_NS, LABEL_EL,
-                    Constants.INSTANCE_PREFIX_COLON + LABEL_EL,
-                    XMLUtils.EMPTY_ATTRIBUTES);
-            if (label == null) {
-                contentHandler.characters(stringValue.toCharArray(), 0,
-                        stringValue.length());
+
+            AttributesImpl attrs = new AttributesImpl();
+            attrs.addCDATAAttribute("value", stringValue);
+            contentHandler.startElement(Constants.INSTANCE_NS, ITEM_EL, 
Constants.INSTANCE_PREFIX_COLON + ITEM_EL, attrs);
+            contentHandler.startElement(Constants.INSTANCE_NS, LABEL_EL, 
Constants.INSTANCE_PREFIX_COLON + LABEL_EL, XMLUtils.EMPTY_ATTRIBUTES);
+            if (this.label == null) {
+                contentHandler.characters(stringValue.toCharArray(), 0, 
stringValue.length());
+            } else if (this.label instanceof XMLizable) {
+                ((XMLizable) this.label).toSAX(contentHandler);
             } else {
-                contentHandler.characters(label.toCharArray(), 0, label
-                        .length());
+                String stringLabel = (String) this.label;
+                contentHandler.characters(stringLabel.toCharArray(), 0, 
stringLabel.length());
             }
-            contentHandler.endElement(Constants.INSTANCE_NS, LABEL_EL,
-                    Constants.INSTANCE_PREFIX_COLON + LABEL_EL);
-            contentHandler.endElement(Constants.INSTANCE_NS, ITEM_EL,
-                    Constants.INSTANCE_PREFIX_COLON + ITEM_EL);
+            contentHandler.endElement(Constants.INSTANCE_NS, LABEL_EL, 
Constants.INSTANCE_PREFIX_COLON + LABEL_EL);
+            contentHandler.endElement(Constants.INSTANCE_NS, ITEM_EL, 
Constants.INSTANCE_PREFIX_COLON + ITEM_EL);
         }
     }
-
 }

Modified: 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionList.java
URL: 
http://svn.apache.org/viewcvs/cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionList.java?view=diff&r1=157545&r2=157546
==============================================================================
--- 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionList.java
 (original)
+++ 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionList.java
 Tue Mar 15 06:52:12 2005
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed 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.
@@ -17,20 +17,19 @@
 
 /**
  * A selection list that takes its values from the custom java class itself.
- *
- *  
+ * @version $Id$
  */
-public interface JavaSelectionList extends SelectionList{
-       
+public interface JavaSelectionList extends SelectionList {
+
        void setDatatype(Datatype datatype);
-       
+
        boolean isNullable();
-       
+
        void setNullable(boolean nullable);
-       
+
        String getAttribute(String name);
-       
+
        void setAttribute(String name, String value);
-       
+
        void removeAttribute(String name);
 }

Modified: 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionListBuilder.java
URL: 
http://svn.apache.org/viewcvs/cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionListBuilder.java?view=diff&r1=157545&r2=157546
==============================================================================
--- 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionListBuilder.java
 (original)
+++ 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/JavaSelectionListBuilder.java
 Tue Mar 15 06:52:12 2005
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed 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.
@@ -19,6 +19,12 @@
 import org.apache.avalon.framework.service.ServiceException;
 import org.apache.avalon.framework.service.ServiceManager;
 import org.apache.avalon.framework.service.Serviceable;
+import org.apache.avalon.framework.context.Contextualizable;
+import org.apache.avalon.framework.context.Context;
+import org.apache.avalon.framework.context.ContextException;
+import org.apache.avalon.framework.thread.ThreadSafe;
+import org.apache.avalon.framework.component.Component;
+
 import org.apache.cocoon.components.LifecycleHelper;
 import org.apache.cocoon.forms.util.DomHelper;
 import org.w3c.dom.Element;
@@ -27,67 +33,63 @@
 
 /**
  * Builds [EMAIL PROTECTED] SelectionList}s from a JavaSelectionList class
- * 
- *  
+ *
+ * @version $Id$
  */
-public class JavaSelectionListBuilder extends AbstractLogEnabled implements
-               SelectionListBuilder, Serviceable {
-
+public class JavaSelectionListBuilder extends AbstractLogEnabled
+                                      implements SelectionListBuilder,
+                                                 Contextualizable, 
Serviceable, ThreadSafe, Component {
+
+    /**
+     * The Avalon Context
+     */
+    private Context context;
+
+    /**
+     * The Service Manager
+     */
        private ServiceManager manager;
 
-       /*
-        * (non-Javadoc)
-        * 
-        * @see 
org.apache.cocoon.forms.datatype.SelectionListBuilder#build(org.w3c.dom.Element,
-        *      org.apache.cocoon.forms.datatype.Datatype)
-        */
+    public void contextualize(Context context) throws ContextException {
+        this.context = context;
+    }
+
+    public void service(ServiceManager manager) throws ServiceException {
+        this.manager = manager;
+    }
+
        public SelectionList build(Element selectionListElement, Datatype 
datatype)
-                       throws Exception {
-               String className = DomHelper
-                               .getAttribute(selectionListElement, "class");
-               boolean nullable = DomHelper.getAttributeAsBoolean(
-                               selectionListElement, "nullable", true);
+    throws Exception {
+               String className = DomHelper.getAttribute(selectionListElement, 
"class");
+               boolean nullable = 
DomHelper.getAttributeAsBoolean(selectionListElement, "nullable", true);
 
                try {
                        Class clasz = Class.forName(className);
                        if (JavaSelectionList.class.isAssignableFrom(clasz)) {
-                               JavaSelectionList list = (JavaSelectionList) 
clasz
-                                               .newInstance();
-                               LifecycleHelper.setupComponent(list, 
getLogger(), null,
-                                               this.manager, null, true);
+                               JavaSelectionList list = (JavaSelectionList) 
clasz.newInstance();
+                               LifecycleHelper.setupComponent(list, 
getLogger(), this.context, this.manager, null, true);
                                list.setDatatype(datatype);
                                list.setNullable(nullable);
+
                 // pass the attributes to the SelectionList
                                NamedNodeMap attrs = 
selectionListElement.getAttributes();
-                               int size = attrs.getLength();
+                               final int size = attrs.getLength();
                                for (int i = 0; i < size; i++) {
-                                       Node attr = attrs.item(i);
-                                       String name = attr.getNodeName();
+                                       final Node attr = attrs.item(i);
+                                       final String name = attr.getNodeName();
                                        list.setAttribute(name, 
attr.getNodeValue());
                                }
+
                                return list;
                        } else {
+                getLogger().warn("Class " + className + " does not implement 
JavaSelectionList, returning empty selection list.");
                                return new StaticSelectionList(datatype);
                        }
-               } catch (ClassNotFoundException e) {
-                       e.printStackTrace();
-                       throw e;
-               } catch (InstantiationException e) {
-                       e.printStackTrace();
-                       throw e;
-               } catch (IllegalAccessException e) {
-                       e.printStackTrace();
+               } catch (Exception e) {
+            if (getLogger().isDebugEnabled()) {
+                getLogger().debug("Got exception in build, re-throwing", e);
+            }
                        throw e;
                }
-       }
-
-       /*
-        * (non-Javadoc)
-        * 
-        * @see 
org.apache.avalon.framework.service.Serviceable#service(org.apache.avalon.framework.service.ServiceManager)
-        */
-       public void service(ServiceManager manager) throws ServiceException {
-               this.manager = manager;
-
        }
 }

Modified: 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/StaticSelectionList.java
URL: 
http://svn.apache.org/viewcvs/cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/StaticSelectionList.java?view=diff&r1=157545&r2=157546
==============================================================================
--- 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/StaticSelectionList.java
 (original)
+++ 
cocoon/whiteboard/forms/java/org/apache/cocoon/forms/datatype/StaticSelectionList.java
 Tue Mar 15 06:52:12 2005
@@ -1,12 +1,12 @@
 /*
  * Copyright 1999-2004 The Apache Software Foundation.
- * 
+ *
  * Licensed 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.
@@ -35,16 +35,23 @@
  * the items in the list are build once from its source, and then list items 
are
  * cached as part of this object. In contrast, the [EMAIL PROTECTED] 
DynamicSelectionList}
  * will retrieve its content from its source each time it's needed.
- * 
+ *
  * @version $Id$
  */
 public class StaticSelectionList implements SelectionList {
-    /** The datatype to which this selection list belongs */
+    /**
+     * The datatype to which this selection list belongs
+     */
     private Datatype datatype;
-    private List items = new ArrayList();
+
+    /**
+     * List of SelectionListItems
+     */
+    private List items;
 
     public StaticSelectionList(Datatype datatype) {
         this.datatype = datatype;
+        this.items = new ArrayList();
     }
 
     public Datatype getDatatype() {
@@ -54,16 +61,18 @@
     public void generateSaxFragment(ContentHandler contentHandler, Locale 
locale) throws SAXException {
         Convertor.FormatCache formatCache = new DefaultFormatCache();
         contentHandler.startElement(Constants.INSTANCE_NS, SELECTION_LIST_EL, 
Constants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL, XMLUtils.EMPTY_ATTRIBUTES);
-        Iterator itemIt = items.iterator();
+
+        Iterator itemIt = this.items.iterator();
         while (itemIt.hasNext()) {
-            SelectionListItem item = (SelectionListItem)itemIt.next();
+            final SelectionListItem item = (SelectionListItem) itemIt.next();
             item.generateSaxFragment(contentHandler, locale, formatCache);
         }
+
         contentHandler.endElement(Constants.INSTANCE_NS, SELECTION_LIST_EL, 
Constants.INSTANCE_PREFIX_COLON + SELECTION_LIST_EL);
     }
 
     public List getItems() {
-        return items;
+        return this.items;
     }
 
     /**
@@ -72,7 +81,7 @@
      * @param label a SAX-fragment such as a [EMAIL PROTECTED] 
org.apache.cocoon.xml.SaxBuffer}, can be null
      */
     public void addItem(Object value, XMLizable label) {
-        items.add(new SelectionListItem(value, label));
+        this.items.add(new SelectionListItem(value, label));
     }
 
     public final class SelectionListItem {
@@ -89,21 +98,21 @@
         }
 
         public void generateSaxFragment(ContentHandler contentHandler, Locale 
locale, Convertor.FormatCache formatCache)
-                throws SAXException
-        {
-            AttributesImpl itemAttrs = new AttributesImpl();
+        throws SAXException {
             String stringValue;
             if (this.value == null) {
                 // Null value translates into the empty string
                 stringValue = "";
             } else {
-                stringValue = datatype.getConvertor().convertToString(value, 
locale, formatCache);
+                stringValue = 
datatype.getConvertor().convertToString(this.value, locale, formatCache);
             }
-            itemAttrs.addCDATAAttribute("value", stringValue);
-            contentHandler.startElement(Constants.INSTANCE_NS, ITEM_EL, 
Constants.INSTANCE_PREFIX_COLON + ITEM_EL, itemAttrs);
+
+            AttributesImpl attrs = new AttributesImpl();
+            attrs.addCDATAAttribute("value", stringValue);
+            contentHandler.startElement(Constants.INSTANCE_NS, ITEM_EL, 
Constants.INSTANCE_PREFIX_COLON + ITEM_EL, attrs);
             contentHandler.startElement(Constants.INSTANCE_NS, LABEL_EL, 
Constants.INSTANCE_PREFIX_COLON + LABEL_EL, XMLUtils.EMPTY_ATTRIBUTES);
-            if (label != null) {
-                label.toSAX(contentHandler);
+            if (this.label != null) {
+                this.label.toSAX(contentHandler);
             } else {
                 contentHandler.characters(stringValue.toCharArray(), 0, 
stringValue.length());
             }


Reply via email to