ivelin 2002/06/08 10:57:38
Modified: src/java/org/apache/cocoon/transformation
XMLFormTransformer.java
Log:
This patch will check to see if an xf:hidden element already has an
xf:value child and will add the value from the model if not.
by Andrew Timberlake
Revision Changes Path
1.7 +98 -30
xml-cocoon2/src/java/org/apache/cocoon/transformation/XMLFormTransformer.java
Index: XMLFormTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/XMLFormTransformer.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- XMLFormTransformer.java 6 Jun 2002 14:43:41 -0000 1.6
+++ XMLFormTransformer.java 8 Jun 2002 17:57:38 -0000 1.7
@@ -89,12 +89,12 @@
* but with populated values for the XPath references
* to the form's model attributes
*
- * The original code was built by Torsten Curdt as
- * part of the Preceptor API
*
- * @author Ivelin Ivanov <[EMAIL PROTECTED]>, May 2002
- * @author Michael Ratliff, [EMAIL PROTECTED] <[EMAIL PROTECTED]>, May
2002
- * @author Torsten Curdt <[EMAIL PROTECTED]>, March 2002
+ * @author: Ivelin Ivanov <[EMAIL PROTECTED]>, June 2002
+ * @author: Andrew Timberlake <[EMAIL PROTECTED]>, June 2002
+ * @author: Michael Ratliff, [EMAIL PROTECTED] <[EMAIL PROTECTED]>, May
2002
+ * @author: Torsten Curdt <[EMAIL PROTECTED]>, March 2002
+
*/
public class XMLFormTransformer extends AbstractSAXTransformer
@@ -174,7 +174,9 @@
public final static String TAG_SELECTBOOLEAN = "selectBoolean";
public final static String TAG_SELECTONE = "selectOne";
public final static String TAG_SELECTMANY = "selectMany";
-
+ public final static String TAG_VALUE = "value";
+ public final static String TAG_HIDDEN = "hidden";
+
/**
* grouping tag
*
@@ -246,6 +248,19 @@
/**
+ * Flag to let us know if the transformer is working
+ * on a hidden tag
+ */
+ private boolean isHiddenTag = false;
+
+ /**
+ * Flag to let us know that the hidden element contains
+ * a value child element.
+ */
+ private boolean hasHiddenTagValue = false;
+
+
+ /**
* the ref value of the current field
* used by the violations tag
*/
@@ -416,6 +431,18 @@
super.startElement( uri, name, raw, attributes);
this.ignoreHooksCount = 0;
}
+ // if we're within a xf:hidden element
+ // and a value sub-element has been provided
+ // in the markup, then it will be left
+ // unchanged. Otherwise we will
+ // render the value of the referenced model
+ // attribute
+ else if ( isHiddenTag && TAG_VALUE.equals( name ) )
+ {
+ hasHiddenTagValue = true;
+ super.startElement( uri, name, raw, attributes);
+ }
+
// if the currentForm is still not available
// then we can't process nested form tags
else if (currentForm != null)
@@ -445,6 +472,14 @@
{
super.startElement(uri, name, raw, attributes);
}
+ else if (TAG_HIDDEN.equals(name))
+ {
+ // raise the flag that we're within a hidden element
+ // since there are intricacies in
+ // handling the value sub-element
+ isHiddenTag = true;
+ startElementSimpleField( uri, name, raw, attributes,
currentForm );
+ }
else
{
getLogger().error("unknown element [" + String.valueOf(name) + "]");
@@ -613,30 +648,48 @@
getLogger().debug("Value of form [id=" + form.getId() + ", ref=" +
String.valueOf(ref) + "] = [" + value_ + "]") ;
- // render the value subelement(s)
- if (value_ instanceof Collection)
- {
- Iterator i=((Collection) value_).iterator();
- while (i.hasNext())
- {
- renderValueSubElement( i.next() );
- }
- }
- else if ( value_ != null && value_.getClass().isArray () )
- {
- int len = Array.getLength ( value_ );
- for (int i = 0; i < len; i++ )
- {
- renderValueSubElement( Array.get ( value_, i ) );
- }
- }
- else
- {
- renderValueSubElement( value_ );
- }
- } // end of startElementSimpleField
-
-
+ // Only render value sub-elements
+ // at this point
+ // if this is not a xf:hidden element.
+ if(! isHiddenTag) renderValueSubElements();
+ } // end of startElementSimpleField
+
+
+ /**
+ * Renders one or more xf:value elements
+ * depending on whether _value is a
+ * collection, array or not.
+ *
+ * @throws SAXException
+ */
+ private void renderValueSubElements() throws SAXException
+ {
+ // render the value subelement(s)
+ if (value_ instanceof Collection)
+ {
+ Iterator i=((Collection) value_).iterator();
+ while (i.hasNext())
+ {
+ renderValueSubElement( i.next() );
+ }
+ }
+ else if ( value_ != null && value_.getClass().isArray () )
+ {
+ int len = Array.getLength ( value_ );
+ for (int i = 0; i < len; i++ )
+ {
+ renderValueSubElement( Array.get ( value_, i ) );
+ }
+ }
+ else
+ {
+ renderValueSubElement( value_ );
+ }
+ }
+
+
+
+
/**
* Outputs a <xf:value> element.
* Used when transforming XMLForm elements
@@ -749,6 +802,21 @@
{
super.endElement(uri, name, raw);
}
+ else if (TAG_HIDDEN.equals(name))
+ {
+ isHiddenTag = false;
+ hasHiddenTagValue = false;
+ // if value sub-element was not
+ // provided in the markup
+ // then render the value of the referenced
+ // model attribute, like normally done
+ // for other elements
+ if(! hasHiddenTagValue)
+ {
+ renderValueSubElements();
+ }
+ super.endElement(uri, name, raw);
+ }
else
{
getLogger().error("unknown element [" + String.valueOf(name) + "]");
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]