You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by ug...@apache.org on 2003/11/06 23:58:37 UTC

cvs commit: cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/samples Sex.java Form2Bean.java

ugo         2003/11/06 14:58:37

  Modified:    src/blocks/woody/samples/forms form2_bind_bean.xml
                        form2_jx.xml form2_template.xml form2_model.xml
               src/blocks/woody/conf woody-datatype.xconf
               src/blocks/woody/samples/flow binding_example.js
               src/blocks/woody/java/org/apache/cocoon/woody/samples
                        Form2Bean.java
  Added:       src/blocks/woody/java/org/apache/cocoon/woody/datatype
                        Enum.java
               src/blocks/woody/java/org/apache/cocoon/woody/datatype/convertor
                        EnumConvertorBuilder.java EnumConvertor.java
               src/blocks/woody/java/org/apache/cocoon/woody/datatype/typeimpl
                        EnumTypeBuilder.java EnumType.java
               src/blocks/woody/java/org/apache/cocoon/woody/samples
                        Sex.java
  Log:
  First stab at implementing an "enum" datatype and convertor for Woody.
  
  Revision  Changes    Path
  1.6       +1 -0      cocoon-2.1/src/blocks/woody/samples/forms/form2_bind_bean.xml
  
  Index: form2_bind_bean.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/samples/forms/form2_bind_bean.xml,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- form2_bind_bean.xml	18 Sep 2003 20:17:03 -0000	1.5
  +++ form2_bind_bean.xml	6 Nov 2003 22:58:36 -0000	1.6
  @@ -16,6 +16,7 @@
     <wb:value id="birthday" path="birthday"/>
     <wb:value id="number" path="aNumber"/>
     <wb:value id="choose" path="choose"/>
  +  <wb:value id="sex" path="sex"/>
   
     <!-- An aggregatefield is a special kind of widget that lets
     the user edit the value of multiple widgets through one text box
  
  
  
  1.5       +2 -0      cocoon-2.1/src/blocks/woody/samples/forms/form2_jx.xml
  
  Index: form2_jx.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/samples/forms/form2_jx.xml,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- form2_jx.xml	12 Aug 2003 12:59:10 -0000	1.4
  +++ form2_jx.xml	6 Nov 2003 22:58:36 -0000	1.5
  @@ -12,6 +12,8 @@
       number: ${form2bean.aNumber}
       <br/>
       I choose: ${form2bean.choose}
  +    <br/>
  +    Sex: ${form2bean.sex}
   
       <table border="1">
         <tr>
  
  
  
  1.4       +4 -0      cocoon-2.1/src/blocks/woody/samples/forms/form2_template.xml
  
  Index: form2_template.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/samples/forms/form2_template.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- form2_template.xml	12 Aug 2003 13:29:54 -0000	1.3
  +++ form2_template.xml	6 Nov 2003 22:58:36 -0000	1.4
  @@ -47,6 +47,10 @@
             <td/>
             <td valign="top"><wt:widget id="choose"/> <wt:widget-label id="choose"/></td>
           </tr>
  +        <tr>
  +          <td valign="top"><wt:widget-label id="sex"/></td>
  +          <td valign="top"><wt:widget id="sex"/></td>
  +        </tr>
         </table>
   
         <wt:widget-label id="contacts"/><br/>
  
  
  
  1.10      +13 -0     cocoon-2.1/src/blocks/woody/samples/forms/form2_model.xml
  
  Index: form2_model.xml
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/samples/forms/form2_model.xml,v
  retrieving revision 1.9
  retrieving revision 1.10
  diff -u -r1.9 -r1.10
  --- form2_model.xml	1 Nov 2003 20:09:13 -0000	1.9
  +++ form2_model.xml	6 Nov 2003 22:58:36 -0000	1.10
  @@ -79,6 +79,19 @@
         <wd:label>I choose</wd:label>
       </wd:booleanfield>
     
  +    <wd:field id="sex">
  +      <wd:label>Sex</wd:label>
  +      <wd:datatype base="enum">
  +      	<wd:convertor type="enum">
  +          <wd:enum>org.apache.cocoon.woody.samples.Sex</wd:enum>
  +      	</wd:convertor>
  +      </wd:datatype>
  +      <wd:selection-list>
  +        <wd:item value="male"/>
  +        <wd:item value="female"/>
  +      </wd:selection-list>
  +    </wd:field>
  +  
       <wd:repeater id="contacts">
         <wd:widgets>
           <wd:output id="id">
  
  
  
  1.6       +5 -0      cocoon-2.1/src/blocks/woody/conf/woody-datatype.xconf
  
  Index: woody-datatype.xconf
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/conf/woody-datatype.xconf,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- woody-datatype.xconf	22 Oct 2003 20:22:07 -0000	1.5
  +++ woody-datatype.xconf	6 Nov 2003 22:58:36 -0000	1.6
  @@ -40,6 +40,11 @@
             <convertor name="formatting" src="org.apache.cocoon.woody.datatype.convertor.FormattingIntegerConvertorBuilder"/>
           </convertors>
         </datatype>  
  +      <datatype name="enum" src="org.apache.cocoon.woody.datatype.typeimpl.EnumTypeBuilder">
  +        <convertors default="enum" plain="enum">
  +          <convertor name="enum" src="org.apache.cocoon.woody.datatype.convertor.EnumConvertorBuilder"/>
  +        </convertors>
  +      </datatype>
       </datatypes>
       <validation-rules>
         <validation-rule name="length" src="org.apache.cocoon.woody.datatype.validationruleimpl.LengthValidationRuleBuilder"/>
  
  
  
  1.14      +1 -0      cocoon-2.1/src/blocks/woody/samples/flow/binding_example.js
  
  Index: binding_example.js
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/samples/flow/binding_example.js,v
  retrieving revision 1.13
  retrieving revision 1.14
  diff -u -r1.13 -r1.14
  --- binding_example.js	6 Nov 2003 17:06:31 -0000	1.13
  +++ binding_example.js	6 Nov 2003 22:58:36 -0000	1.14
  @@ -91,6 +91,7 @@
       bean.setPhoneZone("2");
       bean.setPhoneNumber("123456");
       bean.setBirthday(new java.util.Date());
  +    bean.setSex(Packages.org.apache.cocoon.woody.samples.Sex.FEMALE);
       var contact = new Packages.org.apache.cocoon.woody.samples.Contact();
       contact.setId("1");
       contact.setFirstName("Herman");
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/datatype/Enum.java
  
  Index: Enum.java
  ===================================================================
  /*
   * $Id: Enum.java,v 1.1 2003/11/06 22:58:36 ugo Exp $
   */
  package org.apache.cocoon.woody.datatype;
  
  import java.util.Locale;
  
  /**
   * Description of Enum.
   * @version CVS $Id: Enum.java,v 1.1 2003/11/06 22:58:36 ugo Exp $
   */
  public interface Enum {
  
      public String convertToString(Locale locale);
  }
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/datatype/convertor/EnumConvertorBuilder.java
  
  Index: EnumConvertorBuilder.java
  ===================================================================
  /*
   * $Id: EnumConvertorBuilder.java,v 1.1 2003/11/06 22:58:36 ugo Exp $
   */
  package org.apache.cocoon.woody.datatype.convertor;
  
  import org.apache.cocoon.woody.Constants;
  import org.apache.cocoon.woody.util.DomHelper;
  import org.w3c.dom.Element;
  
  /**
   * Description of EnumConvertorBuilder.
   */
  public class EnumConvertorBuilder implements ConvertorBuilder {
  
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.convertor.ConvertorBuilder#build(org.w3c.dom.Element)
       */
      public Convertor build(Element configElement) throws Exception {
          if (configElement == null) {
              return null;
          }
          Element enumEl = DomHelper.getChildElement(configElement,
                  Constants.WD_NS, "enum", true);
          String clazz = enumEl.getFirstChild().getNodeValue();
          return new EnumConvertor(clazz);
      }
  
  }
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/datatype/convertor/EnumConvertor.java
  
  Index: EnumConvertor.java
  ===================================================================
  /*
   * $Id: EnumConvertor.java,v 1.1 2003/11/06 22:58:37 ugo Exp $
   */
  package org.apache.cocoon.woody.datatype.convertor;
  
  import java.lang.reflect.Method;
  import java.util.Locale;
  
  import org.apache.cocoon.woody.datatype.Enum;
  
  /**
   * Description of EnumConvertor.
   */
  public class EnumConvertor implements Convertor {
  
      private String className;
      
      public EnumConvertor(String className) {
          this.className = className;
      }
      
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.convertor.Convertor#convertFromString(java.lang.String, java.util.Locale, org.apache.cocoon.woody.datatype.convertor.Convertor.FormatCache)
       */
      public Object convertFromString(
          String value,
          Locale locale,
          FormatCache formatCache) {
          try {
              Method method = getTypeClass().
                  getMethod("fromString", new Class[] { String.class, Locale.class});
              return method.invoke(null, new Object[] { value, locale});
          } catch (Exception e) {
              // FIXME: I'd like to throw a o.a.c.ProcessingException here,
              // but unfortunately it's a checked exception.
              // Checked exceptions are evil, aren't they?
              throw new RuntimeException(e);
          }
      }
  
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.convertor.Convertor#convertToString(java.lang.Object, java.util.Locale, org.apache.cocoon.woody.datatype.convertor.Convertor.FormatCache)
       */
      public String convertToString(
          Object value,
          Locale locale,
          FormatCache formatCache) {
          return ((Enum) value).convertToString(locale);
      }
  
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.convertor.Convertor#getTypeClass()
       */
      public Class getTypeClass() {
          try {
              // FIXME: use the correct class loader.
              return Class.forName(className);
          }
          catch (ClassNotFoundException e) {
              // FIXME: I'd like to throw a o.a.c.ProcessingException here,
              // but unfortunately it's a checked exception.
              // Checked exceptions are evil, aren't they?
              throw new RuntimeException("Class " + className + " not found", e);
          }
      }
  
  }
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/datatype/typeimpl/EnumTypeBuilder.java
  
  Index: EnumTypeBuilder.java
  ===================================================================
  /*
   * $Id: EnumTypeBuilder.java,v 1.1 2003/11/06 22:58:37 ugo Exp $
   */
  package org.apache.cocoon.woody.datatype.typeimpl;
  
  import org.apache.cocoon.woody.datatype.Datatype;
  import org.apache.cocoon.woody.datatype.DatatypeManager;
  import org.w3c.dom.Element;
  
  /**
   * Description of EnumTypeBuilder.
   */
  public class EnumTypeBuilder extends AbstractDatatypeBuilder {
  
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.DatatypeBuilder#build(org.w3c.dom.Element, boolean, org.apache.cocoon.woody.datatype.DatatypeManager)
       */
      public Datatype build(Element datatypeElement,
  						  boolean arrayType,
  						  DatatypeManager datatypeManager) throws Exception {
          EnumType type = new EnumType();
          type.setArrayType(arrayType);
          type.setBuilder(this);
  
          buildValidationRules(datatypeElement, type, datatypeManager);
          buildConvertor(datatypeElement, type);
  
          return type;
      }
  
  }
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/datatype/typeimpl/EnumType.java
  
  Index: EnumType.java
  ===================================================================
  /*
   * $Id: EnumType.java,v 1.1 2003/11/06 22:58:37 ugo Exp $
   */
  package org.apache.cocoon.woody.datatype.typeimpl;
  
  /**
   * Description of EnumType.
   */
  public class EnumType extends AbstractDatatype {
      
      public EnumType() {
      }
      
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.Datatype#getTypeClass()
       */
      public Class getTypeClass() {
          return this.getConvertor().getTypeClass();
      }
  
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.Datatype#getDescriptiveName()
       */
      public String getDescriptiveName() {
          return this.getConvertor().getTypeClass().getName();
      }
  
  }
  
  
  
  1.4       +15 -0     cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/samples/Form2Bean.java
  
  Index: Form2Bean.java
  ===================================================================
  RCS file: /home/cvs/cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/samples/Form2Bean.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Form2Bean.java	12 Aug 2003 12:59:10 -0000	1.3
  +++ Form2Bean.java	6 Nov 2003 22:58:37 -0000	1.4
  @@ -68,8 +68,23 @@
       private Date birthday;
       private int aNumber;
       private boolean choose;
  +    private Sex sex;
   
       private Collection contacts = new ArrayList();
  +
  +    /**
  +     * @return Returns the sex.
  +     */
  +    public Sex getSex() {
  +        return sex;
  +    }
  +
  +    /**
  +     * @param sex The sex to set.
  +     */
  +    public void setSex(Sex sex) {
  +        this.sex = sex;
  +    }
   
       public Form2Bean() {
       }
  
  
  
  1.1                  cocoon-2.1/src/blocks/woody/java/org/apache/cocoon/woody/samples/Sex.java
  
  Index: Sex.java
  ===================================================================
  /*
   * $Id: Sex.java,v 1.1 2003/11/06 22:58:37 ugo Exp $
   */
  package org.apache.cocoon.woody.samples;
  
  import java.util.Locale;
  
  import org.apache.cocoon.woody.datatype.Enum;
  
  /**
   * Description of Sex.
   * @version CVS $Id: Sex.java,v 1.1 2003/11/06 22:58:37 ugo Exp $
   */
  public class Sex implements Enum {
  
      public static final Sex MALE = new Sex("M");
      public static final Sex FEMALE = new Sex("F");
      private String code;
  
      private Sex(String code) { this.code = code; }
  
      public String toString() {
        // Will probably have some i18n support here
        switch(code.charAt(0)) {
            case 'M' : return "male";
            case 'F' : return "female";
            default : return "unknown"; // Should never happen
        }
      }
  
      public static Sex fromString(String value, Locale locale) {
          if (value.equals("male")) return Sex.MALE;
          if (value.equals("female")) return Sex.FEMALE;
          return null;
      }
  
      /* (non-Javadoc)
       * @see org.apache.cocoon.woody.datatype.Enum#convertToString(java.lang.Object, java.util.Locale)
       */
      public String convertToString(Locale locale) {
          return toString();
      }
  
  }