You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by gi...@apache.org on 2005/03/20 16:41:02 UTC
svn commit: r158332 - in cocoon/blocks/core/forms/trunk: WEB-INF/xconf/
java/org/apache/cocoon/forms/datatype/convertor/
java/org/apache/cocoon/forms/datatype/typeimpl/ samples/flow/
Author: giacomo
Date: Sun Mar 20 07:41:01 2005
New Revision: 158332
URL: http://svn.apache.org/viewcvs?view=rev&rev=158332
Log:
new Datatypes and its Convertor
Added:
cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertor.java
cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertorBuilder.java
cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanType.java
cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanTypeBuilder.java
Modified:
cocoon/blocks/core/forms/trunk/WEB-INF/xconf/cocoon-forms.xconf
cocoon/blocks/core/forms/trunk/samples/flow/binding_example.js
Modified: cocoon/blocks/core/forms/trunk/WEB-INF/xconf/cocoon-forms.xconf
URL: http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/WEB-INF/xconf/cocoon-forms.xconf?view=diff&r1=158331&r2=158332
==============================================================================
--- cocoon/blocks/core/forms/trunk/WEB-INF/xconf/cocoon-forms.xconf (original)
+++ cocoon/blocks/core/forms/trunk/WEB-INF/xconf/cocoon-forms.xconf Sun Mar 20 07:41:01 2005
@@ -108,6 +108,11 @@
<convertor name="enum" src="org.apache.cocoon.forms.datatype.convertor.EnumConvertorBuilder"/>
</convertors>
</datatype>
+ <datatype name="bean" src="org.apache.cocoon.forms.datatype.typeimpl.BeanTypeBuilder">
+ <convertors default="bean" plain="bean">
+ <convertor name="bean" src="org.apache.cocoon.forms.datatype.convertor.BeanConvertorBuilder"/>
+ </convertors>
+ </datatype>
</datatypes>
<validation-rules>
<!-- old-style datatype validators (deprecated) -->
Added: cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertor.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertor.java?view=auto&rev=158332
==============================================================================
--- cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertor.java (added)
+++ cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertor.java Sun Mar 20 07:41:01 2005
@@ -0,0 +1,145 @@
+/*
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.forms.datatype.convertor;
+
+import org.apache.avalon.framework.CascadingRuntimeException;
+import org.apache.commons.jxpath.JXPathContext;
+
+import org.xml.sax.ContentHandler;
+import org.xml.sax.SAXException;
+
+import java.util.Locale;
+import java.util.Map;
+import java.util.WeakHashMap;
+
+
+/**
+ * Converts String representation of beans to bean instances and vice versa.
+ *
+ * <p>
+ * Sometimes the toString() method doesn't give a good representation of a
+ * Java Bean suited for selection list IDs. For this an optional
+ * <fd:id-path>jx-path</fd:id-path> attribute can be specified to
+ * have this convertor to use a different string representation.
+ * </p>
+ *
+ * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
+ * @version $Id: BeanConvertor.java,v 1.3 2004/12/30 13:37:45 giacomo Exp $
+ */
+public class BeanConvertor
+ implements Convertor
+{
+ //~ Instance fields --------------------------------------------------------
+
+ private Class m_class;
+
+ private Map m_objects = new WeakHashMap( );
+
+ private String m_idPath;
+
+ //~ Constructors -----------------------------------------------------------
+
+ /**
+ * Construct a new BeanConvertor for a class
+ *
+ * @param className The package-qualified name of the class implementing
+ * the typesafe enum pattern.
+ * @param idPath Path to the identity field of the bean
+ *
+ * @throws CascadingRuntimeException If the class cannot be found
+ */
+ public BeanConvertor( final String className,
+ final String idPath )
+ {
+ try
+ {
+ m_class = Class.forName( className );
+ }
+ catch( ClassNotFoundException e )
+ {
+ throw new CascadingRuntimeException( "Class " + className +
+ " not found", e );
+ }
+
+ m_idPath = idPath;
+ }
+
+ //~ Methods ----------------------------------------------------------------
+
+ /**
+ * @see org.apache.cocoon.forms.datatype.convertor.Convertor#getTypeClass()
+ */
+ public Class getTypeClass( )
+ {
+ return m_class;
+ }
+
+ /**
+ * @see org.apache.cocoon.forms.datatype.convertor.Convertor#convertFromString(java.lang.String,
+ * java.util.Locale,
+ * org.apache.cocoon.forms.datatype.convertor.Convertor.FormatCache)
+ */
+ public ConversionResult convertFromString( final String value,
+ final Locale locale,
+ final FormatCache formatCache )
+ {
+ return new ConversionResult( m_objects.get( value ) );
+ }
+
+ /**
+ * @see org.apache.cocoon.forms.datatype.convertor.Convertor#convertToString(java.lang.Object,
+ * java.util.Locale,
+ * org.apache.cocoon.forms.datatype.convertor.Convertor.FormatCache)
+ */
+ public String convertToString( final Object value,
+ final Locale locale,
+ final FormatCache formatCache )
+ {
+ String idValue = "";
+
+ if( null != value )
+ {
+ if( m_idPath != null )
+ {
+ final JXPathContext ctx = JXPathContext.newContext( value );
+ idValue = ctx.getValue( m_idPath ).toString( );
+ }
+ else
+ {
+ idValue = value.toString( );
+ }
+ }
+
+ m_objects.put( idValue, value );
+
+ return idValue;
+ }
+
+ /**
+ * We do not enerate any SAX events
+ *
+ * @param contentHandler The contentHandler
+ * @param locale The locale
+ *
+ * @throws SAXException Just in case of failure that could never happen
+ */
+ public void generateSaxFragment( final ContentHandler contentHandler,
+ final Locale locale )
+ throws SAXException
+ {
+ // intentionally empty
+ }
+}
Added: cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertorBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertorBuilder.java?view=auto&rev=158332
==============================================================================
--- cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertorBuilder.java (added)
+++ cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/convertor/BeanConvertorBuilder.java Sun Mar 20 07:41:01 2005
@@ -0,0 +1,79 @@
+/*
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.forms.datatype.convertor;
+
+import org.apache.cocoon.forms.Constants;
+import org.apache.cocoon.forms.util.DomHelper;
+
+import org.w3c.dom.Element;
+
+
+/**
+ * Creates {@link BeanConvertor}s
+ *
+ * <p>
+ * The optional <fd:bean>FQCN</fd:bean> attribute is used to give
+ * this convertor a hint of which concrete bean class we are going to work with.
+ * If this attribute is not specified java.lang.Object is used.
+ * <p>
+ * Sometimes the toString() method doesn't give a good representation of a
+ * Java Bean suited for selection list IDs. For this an optional
+ * <fd:id-path>jx-path</fd:id-path> attribute can be specified to
+ * have this convertor to use a different string representation.
+ * </p>
+ *
+ * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
+ * @version $Id: BeanConvertorBuilder.java,v 1.2 2004/12/27 13:30:48 giacomo Exp $
+ */
+public class BeanConvertorBuilder
+ implements ConvertorBuilder
+{
+ //~ Methods ----------------------------------------------------------------
+
+ /**
+ * Build a {@link BeanConvertor}
+ *
+ * @param configElement The configuration element
+ *
+ * @return An initialized {@link Convertor}
+ *
+ * @throws Exception In case of failure
+ */
+ public Convertor build( final Element configElement )
+ throws Exception
+ {
+ if( configElement == null )
+ {
+ return null;
+ }
+
+ final Element beanEl =
+ DomHelper.getChildElement( configElement, Constants.DEFINITION_NS,
+ "bean", false );
+ final String clazz =
+ ( ( beanEl == null ) ? Object.class.getName( )
+ : beanEl.getFirstChild( ).getNodeValue( ) );
+ final Element idPathEl =
+ DomHelper.getChildElement( configElement, Constants.DEFINITION_NS,
+ "id-path", false );
+ final String idPath =
+ ( ( idPathEl != null )
+ ? idPathEl.getFirstChild( ).getNodeValue( ) : null );
+ final BeanConvertor convertor = new BeanConvertor( clazz, idPath );
+
+ return convertor;
+ }
+}
Added: cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanType.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanType.java?view=auto&rev=158332
==============================================================================
--- cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanType.java (added)
+++ cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanType.java Sun Mar 20 07:41:01 2005
@@ -0,0 +1,75 @@
+/*
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.forms.datatype.typeimpl;
+
+import org.apache.cocoon.forms.datatype.convertor.Convertor;
+
+
+/**
+ * The CForm type of a bean
+ *
+ * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
+ * @version $Id: BeanType.java,v 1.1 2004/12/21 14:37:32 giacomo Exp $
+ */
+public class BeanType
+ extends AbstractDatatype
+{
+ //~ Constructors -----------------------------------------------------------
+
+ /**
+ * Creates a new BeanType object.
+ *
+ * @param arrayType whether it's an array or not
+ * @param builder The {@link BeanTypeBuilder}
+ */
+ public BeanType( final boolean arrayType,
+ final BeanTypeBuilder builder )
+ {
+ super( );
+ setArrayType( arrayType );
+ setBuilder( builder );
+ }
+
+ //~ Methods ----------------------------------------------------------------
+
+ /**
+ * @see org.apache.cocoon.forms.datatype.Datatype#getDescriptiveName()
+ */
+ public String getDescriptiveName( )
+ {
+ final Class c1 = this.getConvertor( ).getTypeClass( );
+
+ return this.getConvertor( ).getTypeClass( ).getName( );
+ }
+
+ /**
+ * We make sure the plain Convertor is the same
+ *
+ * @return The convertor
+ */
+ public Convertor getPlainConvertor( )
+ {
+ return getConvertor( );
+ }
+
+ /**
+ * @see org.apache.cocoon.forms.datatype.Datatype#getTypeClass()
+ */
+ public Class getTypeClass( )
+ {
+ return this.getConvertor( ).getTypeClass( );
+ }
+}
Added: cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanTypeBuilder.java
URL: http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanTypeBuilder.java?view=auto&rev=158332
==============================================================================
--- cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanTypeBuilder.java (added)
+++ cocoon/blocks/core/forms/trunk/java/org/apache/cocoon/forms/datatype/typeimpl/BeanTypeBuilder.java Sun Mar 20 07:41:01 2005
@@ -0,0 +1,49 @@
+/*
+ * 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.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cocoon.forms.datatype.typeimpl;
+
+import org.apache.cocoon.forms.datatype.Datatype;
+import org.apache.cocoon.forms.datatype.DatatypeManager;
+
+import org.w3c.dom.Element;
+
+
+/**
+ * Builder for {@link BeanType}
+ *
+ * @author <a href="mailto:giacomo@apache.org">Giacomo Pati</a>
+ * @version $Id: BeanTypeBuilder.java,v 1.1 2004/12/21 14:37:32 giacomo Exp $
+ */
+public class BeanTypeBuilder
+ extends AbstractDatatypeBuilder
+{
+ //~ Methods ----------------------------------------------------------------
+
+ /**
+ * @see org.apache.cocoon.forms.datatype.DatatypeBuilder#build(org.w3c.dom.Element,
+ * boolean, org.apache.cocoon.forms.datatype.DatatypeManager)
+ */
+ public Datatype build( final Element datatypeElement,
+ final boolean arrayType,
+ final DatatypeManager datatypeManager )
+ throws Exception
+ {
+ final BeanType type = new BeanType( arrayType, this );
+ buildValidationRules( datatypeElement, type, datatypeManager );
+ buildConvertor( datatypeElement, type );
+ return type;
+ }
+}
Modified: cocoon/blocks/core/forms/trunk/samples/flow/binding_example.js
URL: http://svn.apache.org/viewcvs/cocoon/blocks/core/forms/trunk/samples/flow/binding_example.js?view=diff&r1=158331&r2=158332
==============================================================================
--- cocoon/blocks/core/forms/trunk/samples/flow/binding_example.js (original)
+++ cocoon/blocks/core/forms/trunk/samples/flow/binding_example.js Sun Mar 20 07:41:01 2005
@@ -80,6 +80,8 @@
contact.setId("1");
contact.setFirstName("Hermann");
bean.addContact(contact);
+ bean.addDrink("Maer");
+ bean.addDrink("Leffe");
form.load(bean);
form.showForm("form2-display-pipeline");