cziegeler 02/05/28 06:08:13
Modified: src/java/org/apache/cocoon/components/source
SitemapSource.java
src/java/org/apache/cocoon/components/source/impl
SitemapSource.java
src/java/org/apache/cocoon/generation FileGenerator.java
FragmentExtractorGenerator.java HTMLGenerator.java
src/java/org/apache/cocoon/reading ResourceReader.java
src/java/org/apache/cocoon/serialization
AbstractTextSerializer.java FOPSerializer.java
SVGSerializer.java
src/java/org/apache/cocoon/sitemap ContentAggregator.java
src/java/org/apache/cocoon/transformation
EncodeURLTransformer.java FilterTransformer.java
FragmentExtractorTransformer.java
RoleFilterTransformer.java
SourceWritingTransformer.java TraxTransformer.java
XMLFormTransformer.java
Log:
Moved more components from Cacheable to CacheablePC
Revision Changes Path
1.16 +1 -2
xml-cocoon2/src/java/org/apache/cocoon/components/source/SitemapSource.java
Index: SitemapSource.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/SitemapSource.java,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- SitemapSource.java 27 May 2002 14:56:28 -0000 1.15
+++ SitemapSource.java 28 May 2002 13:08:12 -0000 1.16
@@ -65,7 +65,6 @@
import org.apache.cocoon.environment.Source;
import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
import org.apache.cocoon.serialization.Serializer;
-import org.apache.cocoon.util.HashUtil;
import org.apache.cocoon.xml.AbstractXMLConsumer;
import org.apache.cocoon.xml.ContentHandlerWrapper;
import org.apache.cocoon.xml.XMLConsumer;
@@ -88,7 +87,7 @@
*
* @deprecated by the Avalon Excalibur Source Resolving
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: SitemapSource.java,v 1.15 2002/05/27 14:56:28 cziegeler Exp $
+ * @version CVS $Id: SitemapSource.java,v 1.16 2002/05/28 13:08:12 cziegeler Exp $
*/
public final class SitemapSource
1.9 +1 -2
xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java
Index: SitemapSource.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/components/source/impl/SitemapSource.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- SitemapSource.java 27 May 2002 14:56:28 -0000 1.8
+++ SitemapSource.java 28 May 2002 13:08:12 -0000 1.9
@@ -70,7 +70,6 @@
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.wrapper.EnvironmentWrapper;
import org.apache.cocoon.serialization.Serializer;
-import org.apache.cocoon.util.HashUtil;
import org.apache.cocoon.xml.AbstractXMLConsumer;
import org.apache.cocoon.xml.ContentHandlerWrapper;
import org.apache.cocoon.xml.XMLConsumer;
@@ -93,7 +92,7 @@
* Description of a source which is defined by a pipeline.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: SitemapSource.java,v 1.8 2002/05/27 14:56:28 cziegeler Exp $
+ * @version CVS $Id: SitemapSource.java,v 1.9 2002/05/28 13:08:12 cziegeler Exp $
*/
public final class SitemapSource
1.12 +2 -2
xml-cocoon2/src/java/org/apache/cocoon/generation/FileGenerator.java
Index: FileGenerator.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/generation/FileGenerator.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- FileGenerator.java 28 May 2002 09:06:33 -0000 1.11
+++ FileGenerator.java 28 May 2002 13:08:12 -0000 1.12
@@ -67,12 +67,12 @@
*
* The <code>FileGenerator</code> is a class that reads XML from a source
* and generates SAX Events.
- * The FileGenerator implements the <code>Cacheable</code> interface.
+ * The FileGenerator implements the <code>CacheableProcessingComponent</code>
interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
* (Apache Software Foundation, Exoffice Technologies)
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: FileGenerator.java,v 1.11 2002/05/28 09:06:33 cziegeler Exp $
+ * @version CVS $Id: FileGenerator.java,v 1.12 2002/05/28 13:08:12 cziegeler Exp $
*/
public class FileGenerator extends ComposerGenerator
implements CacheableProcessingComponent {
1.9 +9 -11
xml-cocoon2/src/java/org/apache/cocoon/generation/FragmentExtractorGenerator.java
Index: FragmentExtractorGenerator.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/generation/FragmentExtractorGenerator.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- FragmentExtractorGenerator.java 21 May 2002 06:08:05 -0000 1.8
+++ FragmentExtractorGenerator.java 28 May 2002 13:08:12 -0000 1.9
@@ -53,14 +53,12 @@
import org.apache.avalon.framework.component.ComponentException;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.sax.XMLDeserializer;
-import org.apache.cocoon.util.HashUtil;
import org.apache.excalibur.store.Store;
-
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.xml.sax.SAXException;
import java.io.IOException;
@@ -77,10 +75,10 @@
* <p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Paul Russell</a>
- * @version CVS $Id: FragmentExtractorGenerator.java,v 1.8 2002/05/21 06:08:05
cziegeler Exp $
+ * @version CVS $Id: FragmentExtractorGenerator.java,v 1.9 2002/05/28 13:08:12
cziegeler Exp $
*/
public class FragmentExtractorGenerator extends ComposerGenerator
- implements Cacheable {
+ implements CacheableProcessingComponent {
/**
* Generate the unique key.
@@ -88,8 +86,8 @@
*
* @return The generated key hashes the src
*/
- public long generateKey() {
- return HashUtil.hash(source);
+ public java.io.Serializable generateKey() {
+ return this.source;
}
/**
@@ -98,8 +96,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- return NOPCacheValidity.CACHE_VALIDITY;
+ public SourceValidity generateValidity() {
+ return NOPValidity.SHARED_INSTANCE;
}
public void generate() throws SAXException {
1.15 +21 -26
xml-cocoon2/src/java/org/apache/cocoon/generation/HTMLGenerator.java
Index: HTMLGenerator.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/generation/HTMLGenerator.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- HTMLGenerator.java 21 Mar 2002 04:31:35 -0000 1.14
+++ HTMLGenerator.java 28 May 2002 13:08:12 -0000 1.15
@@ -56,17 +56,16 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.ResourceNotFoundException;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.TimeStampCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.avalon.excalibur.xml.xpath.XPathProcessor;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
-import org.apache.cocoon.environment.Source;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.util.HashUtil;
import org.apache.cocoon.xml.dom.DOMStreamer;
import org.apache.cocoon.xml.XMLUtils;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceValidity;
import org.w3c.dom.NodeList;
import org.w3c.tidy.Tidy;
import org.xml.sax.SAXException;
@@ -87,10 +86,10 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Nicola Ken Barozzi</a>
- * @version CVS $Id: HTMLGenerator.java,v 1.14 2002/03/21 04:31:35 vgritsenko Exp $
+ * @version CVS $Id: HTMLGenerator.java,v 1.15 2002/05/28 13:08:12 cziegeler Exp $
*/
public class HTMLGenerator extends ComposerGenerator
-implements Cacheable, Disposable {
+implements CacheableProcessingComponent, Disposable {
/** The source */
private Source inputSource;
@@ -118,7 +117,7 @@
public void recycle() {
super.recycle();
if (this.inputSource != null) {
- this.inputSource.recycle();
+ this.resolver.release( this.inputSource );
this.inputSource = null;
}
this.xpath = null;
@@ -146,7 +145,11 @@
super.source = query.toString();
}
- this.inputSource = resolver.resolve(super.source);
+ try {
+ this.inputSource = resolver.resolveURI(super.source);
+ } catch (SourceException se) {
+ throw new ProcessingException("Unable to resolve " + super.source, se);
+ }
}
/**
@@ -157,17 +160,14 @@
* @return The generated key or <code>0</code> if the component
* is currently not cacheable.
*/
- public long generateKey() {
- if (this.inputSource.getLastModified() != 0) {
- if (this.xpath != null) {
- StringBuffer buffer = new
StringBuffer(this.inputSource.getSystemId());
- buffer.append(':').append(this.xpath);
- return HashUtil.hash(buffer.toString());
- } else {
- return HashUtil.hash(this.inputSource.getSystemId());
- }
+ public java.io.Serializable generateKey() {
+ if (this.xpath != null) {
+ StringBuffer buffer = new StringBuffer(this.inputSource.getSystemId());
+ buffer.append(':').append(this.xpath);
+ return buffer.toString();
+ } else {
+ return this.inputSource.getSystemId();
}
- return 0;
}
/**
@@ -178,11 +178,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- if (this.inputSource.getLastModified() != 0) {
- return new TimeStampCacheValidity(this.inputSource.getLastModified());
- }
- return null;
+ public SourceValidity generateValidity() {
+ return this.inputSource.getValidity();
}
/**
@@ -241,8 +238,6 @@
+ this.inputSource.getSystemId(), e);
} catch (SAXException e){
getLogger().error("HTMLGenerator.generate()", e);
- throw e;
- } catch (ProcessingException e){
throw e;
} catch (Exception e){
getLogger().error("Could not setup jtidy", e);
1.10 +7 -13
xml-cocoon2/src/java/org/apache/cocoon/reading/ResourceReader.java
Index: ResourceReader.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/reading/ResourceReader.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ResourceReader.java 24 May 2002 08:52:33 -0000 1.9
+++ ResourceReader.java 28 May 2002 13:08:12 -0000 1.10
@@ -56,11 +56,8 @@
import org.apache.excalibur.source.SourceException;
import org.apache.excalibur.source.SourceValidity;
import org.apache.excalibur.source.impl.validity.TimeStampValidity;
-
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.SourceCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.environment.Context;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Response;
@@ -91,11 +88,11 @@
* </dl>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
- * @version CVS $Id: ResourceReader.java,v 1.9 2002/05/24 08:52:33 cziegeler Exp $
+ * @version CVS $Id: ResourceReader.java,v 1.10 2002/05/28 13:08:12 cziegeler Exp $
*/
public class ResourceReader
extends AbstractReader
- implements Cacheable {
+ implements CacheableProcessingComponent {
/** The source */
private Source inputSource;
@@ -131,8 +128,8 @@
*
* @return The generated key hashes the src
*/
- public long generateKey() {
- return HashUtil.hash(this.inputSource.getSystemId());
+ public java.io.Serializable generateKey() {
+ return this.inputSource.getSystemId();
}
/**
@@ -141,11 +138,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- if (this.inputSource.getValidity() != null) {
- return new SourceCacheValidity(this.inputSource.getValidity());
- }
- return null;
+ public SourceValidity generateValidity() {
+ return this.inputSource.getValidity();
}
/**
1.10 +9 -9
xml-cocoon2/src/java/org/apache/cocoon/serialization/AbstractTextSerializer.java
Index: AbstractTextSerializer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/serialization/AbstractTextSerializer.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- AbstractTextSerializer.java 22 Feb 2002 07:03:55 -0000 1.9
+++ AbstractTextSerializer.java 28 May 2002 13:08:13 -0000 1.10
@@ -54,12 +54,12 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.cocoon.Constants;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.util.TraxErrorHandler;
import org.apache.cocoon.xml.AbstractXMLPipe;
import org.apache.cocoon.xml.XMLConsumer;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.ext.LexicalHandler;
@@ -85,11 +85,11 @@
* (Apache Software Foundation, Exoffice Technologies)
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Sylvain Wallez</a>
- * @version CVS $Id: AbstractTextSerializer.java,v 1.9 2002/02/22 07:03:55
cziegeler Exp $
+ * @version CVS $Id: AbstractTextSerializer.java,v 1.10 2002/05/28 13:08:13
cziegeler Exp $
*/
public abstract class AbstractTextSerializer
extends AbstractSerializer
-implements Configurable, Cacheable {
+implements Configurable, CacheableProcessingComponent {
/**
* The trax <code>TransformerFactory</code> used by this serializer.
@@ -266,8 +266,8 @@
* @return The generated key or <code>0</code> if the component
* is currently not cacheable.
*/
- public long generateKey() {
- return 1;
+ public java.io.Serializable generateKey() {
+ return "1";
}
/**
@@ -278,8 +278,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- return NOPCacheValidity.CACHE_VALIDITY;
+ public SourceValidity generateValidity() {
+ return NOPValidity.SHARED_INSTANCE;
}
/**
1.8 +11 -11
xml-cocoon2/src/java/org/apache/cocoon/serialization/FOPSerializer.java
Index: FOPSerializer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/serialization/FOPSerializer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FOPSerializer.java 19 Mar 2002 09:05:56 -0000 1.7
+++ FOPSerializer.java 28 May 2002 13:08:13 -0000 1.8
@@ -54,12 +54,12 @@
import org.apache.avalon.framework.configuration.Configuration;
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.logger.Loggable;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.renderer.ExtendableRendererFactory;
import org.apache.cocoon.components.renderer.RendererFactory;
import org.apache.cocoon.util.ClassUtils;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.apache.fop.apps.Driver;
import org.apache.fop.apps.Options;
import org.apache.fop.render.Renderer;
@@ -68,11 +68,11 @@
/**
* @author ?
- * @version CVS $Id: FOPSerializer.java,v 1.7 2002/03/19 09:05:56 sylvain Exp $
+ * @version CVS $Id: FOPSerializer.java,v 1.8 2002/05/28 13:08:13 cziegeler Exp $
*/
public class FOPSerializer
extends AbstractSerializer
-implements Configurable, Cacheable {
+implements Configurable, CacheableProcessingComponent {
/**
* The <code>Options</code> used by FOP.
@@ -103,7 +103,7 @@
* The renderer name if configured
*/
protected String rendererName;
-
+
/**
* Should we set the content length ?
*/
@@ -126,7 +126,7 @@
// No config file specified
}
}
-
+
this.setContentLength =
conf.getChild("set-content-length").getValueAsBoolean(true);
}
@@ -221,8 +221,8 @@
* @return The generated key or <code>0</code> if the component
* is currently not cacheable.
*/
- public long generateKey() {
- return 1;
+ public java.io.Serializable generateKey() {
+ return "1";
}
/**
@@ -233,8 +233,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- return NOPCacheValidity.CACHE_VALIDITY;
+ public SourceValidity generateValidity() {
+ return NOPValidity.SHARED_INSTANCE;
}
/**
1.6 +9 -9
xml-cocoon2/src/java/org/apache/cocoon/serialization/SVGSerializer.java
Index: SVGSerializer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/serialization/SVGSerializer.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- SVGSerializer.java 22 Feb 2002 07:03:55 -0000 1.5
+++ SVGSerializer.java 28 May 2002 13:08:13 -0000 1.6
@@ -65,9 +65,7 @@
import org.apache.batik.transcoder.TranscodingHints;
import org.apache.batik.util.ParsedURL;
import org.apache.cocoon.Constants;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.transcoder.ExtendableTranscoderFactory;
import org.apache.cocoon.components.transcoder.TranscoderFactory;
import org.apache.cocoon.components.url.ParsedContextURLProtocolHandler;
@@ -76,6 +74,8 @@
import org.apache.cocoon.util.ClassUtils;
import org.apache.cocoon.xml.XMLConsumer;
import org.apache.cocoon.xml.dom.SVGBuilder;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.w3c.dom.Document;
import org.xml.sax.ContentHandler;
import org.xml.sax.SAXException;
@@ -90,10 +90,10 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Davanum Srinivas</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Ross Burton</a>
- * @version CVS $Id: SVGSerializer.java,v 1.5 2002/02/22 07:03:55 cziegeler Exp $
+ * @version CVS $Id: SVGSerializer.java,v 1.6 2002/05/28 13:08:13 cziegeler Exp $
*/
public class SVGSerializer extends SVGBuilder
-implements Composable, Serializer, Configurable, Poolable, Cacheable,
Contextualizable {
+implements Composable, Serializer, Configurable, Poolable,
CacheableProcessingComponent, Contextualizable {
/**
* Get the context
@@ -288,8 +288,8 @@
* @return The generated key or <code>0</code> if the component
* is currently not cacheable.
*/
- public long generateKey() {
- return 1;
+ public java.io.Serializable generateKey() {
+ return "1";
}
/**
@@ -300,8 +300,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- return NOPCacheValidity.CACHE_VALIDITY;
+ public SourceValidity generateValidity() {
+ return NOPValidity.SHARED_INSTANCE;
}
/**
1.5 +48 -41
xml-cocoon2/src/java/org/apache/cocoon/sitemap/ContentAggregator.java
Index: ContentAggregator.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/sitemap/ContentAggregator.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- ContentAggregator.java 22 Feb 2002 07:03:55 -0000 1.4
+++ ContentAggregator.java 28 May 2002 13:08:13 -0000 1.5
@@ -53,16 +53,15 @@
import org.apache.avalon.excalibur.pool.Recyclable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.AggregatedCacheValidity;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.TimeStampCacheValidity;
-import org.apache.cocoon.environment.Source;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.generation.Generator;
-import org.apache.cocoon.util.HashUtil;
import org.apache.cocoon.xml.ContentHandlerWrapper;
import org.apache.cocoon.xml.XMLConsumer;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.AggregatedValidity;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
@@ -73,13 +72,17 @@
import java.util.Map;
/**
+ * This generator implements the sitemap content aggregation.
+ * It combines several parts into one big XML document which is streamed
+ * into the pipeline.
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Giacomo Pati</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: ContentAggregator.java,v 1.4 2002/02/22 07:03:55 cziegeler Exp
$
+ * @version CVS $Id: ContentAggregator.java,v 1.5 2002/05/28 13:08:13 cziegeler Exp
$
*/
public class ContentAggregator
extends ContentHandlerWrapper
-implements Generator, Cacheable, Recyclable {
+implements Generator, CacheableProcessingComponent, Recyclable {
/** the root element of the aggregated content */
protected Element rootElement;
@@ -96,6 +99,9 @@
/** The element used for the current part */
protected Element currentElement;
+ /** The SourceResolver */
+ protected SourceResolver resolver;
+
/** This object holds the part parts :) */
protected final class Part {
public String uri;
@@ -145,7 +151,7 @@
}
try {
- part.source.toSAX(this);
+ this.resolver.toSAX(part.source, this);
} finally {
if (part.element != null) {
this.endElem(part.element);
@@ -165,39 +171,34 @@
*
* @return The generated key hashes the src
*/
- public long generateKey() {
+ public java.io.Serializable generateKey() {
try {
- long key = HashUtil.hash("CA(" +
- this.rootElement.prefix +
- ':' +
- this.rootElement.name +
- '<' + this.rootElement.namespace + ">)");
+ StringBuffer buffer = new StringBuffer();
+ buffer.append("CA(")
+ .append(this.rootElement.prefix).append(':')
+ .append(this.rootElement.name).append('<')
+ .append(this.rootElement.namespace).append(">)");
Source current;
for (int i = 0; i < this.parts.size(); i++) {
final Part part = (Part)this.parts.get(i);
current = part.source;
- if (current.getLastModified() == 0) {
- return 0;
+ if (part.element == null) {
+ buffer.append("P=")
+ .append(part.stripRootElement).append(':')
+ .append(current.getSystemId()).append(';');
} else {
- if (part.element == null) {
- key += HashUtil.hash("P=" +
- part.stripRootElement + ':' +
- current.getSystemId() + ';');
- } else {
- key += HashUtil.hash("P=" +
- part.element.prefix +
- ':' +
- part.element.name +
- '<' + part.element.namespace + ">:" +
- part.stripRootElement + ':' +
- current.getSystemId() + ';');
- }
+ buffer.append("P=")
+ .append(part.element.prefix).append(':')
+ .append(part.element.name)
+ .append('<').append(part.element.namespace).append(">:")
+ .append(part.stripRootElement).append(':')
+ .append(current.getSystemId()).append(';');
}
}
- return key;
+ return buffer.toString();
} catch (Exception e) {
getLogger().error("ContentAggregator: could not generateKey", e);
- return 0;
+ return null;
}
}
@@ -207,16 +208,17 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
+ public SourceValidity generateValidity() {
try {
- AggregatedCacheValidity v = new AggregatedCacheValidity();
+ AggregatedValidity v = new AggregatedValidity();
Source current;
for (int i = 0; i < this.parts.size(); i++) {
current = ((Part)this.parts.get(i)).source;
- if (current.getLastModified() == 0) {
- return null;
+ SourceValidity sv = current.getValidity();
+ if (sv == null) {
+ return null;
} else {
- v.add(new TimeStampCacheValidity(current.getLastModified()));
+ v.add(sv);
}
}
return v;
@@ -287,9 +289,10 @@
super.recycle();
this.rootElement = null;
for (Iterator i = this.parts.iterator(); i.hasNext();)
- ((Part)i.next()).source.recycle();
+ this.resolver.release(((Part)i.next()).source);
this.parts.clear();
this.currentElement = null;
+ this.resolver = null;
}
/**
@@ -299,9 +302,13 @@
public void setup(SourceResolver resolver, Map objectModel, String src,
Parameters par)
throws ProcessingException, SAXException, IOException {
// get the Source for each part
- for(int i=0; i<this.parts.size();i++) {
- final Part current = (Part)this.parts.get(i);
- current.source = resolver.resolve(current.uri);
+ try {
+ for(int i=0; i<this.parts.size();i++) {
+ final Part current = (Part)this.parts.get(i);
+ current.source = resolver.resolveURI(current.uri);
+ }
+ } catch (SourceException se) {
+ throw new ProcessingException("Unable to resolve source.", se);
}
}
1.2 +11 -11
xml-cocoon2/src/java/org/apache/cocoon/transformation/EncodeURLTransformer.java
Index: EncodeURLTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/EncodeURLTransformer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- EncodeURLTransformer.java 14 Mar 2002 07:09:50 -0000 1.1
+++ EncodeURLTransformer.java 28 May 2002 13:08:13 -0000 1.2
@@ -57,15 +57,15 @@
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.Response;
import org.apache.cocoon.environment.Session;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.transformation.AbstractTransformer;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.apache.regexp.RE;
import org.apache.regexp.RESyntaxException;
import org.xml.sax.Attributes;
@@ -110,7 +110,7 @@
* </pre></tt>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Bernhard Huber</a>
- * @version CVS $Id: EncodeURLTransformer.java,v 1.1 2002/03/14 07:09:50
cziegeler Exp $
+ * @version CVS $Id: EncodeURLTransformer.java,v 1.2 2002/05/28 13:08:13
cziegeler Exp $
*
* @cocoon:name encodeURL
* @cocoon:status scratchpad
@@ -125,7 +125,7 @@
public class EncodeURLTransformer
extends AbstractTransformer
- implements Configurable {
+ implements Configurable, CacheableProcessingComponent {
/**
* Configuration name for specifying excluding patterns,
@@ -250,11 +250,11 @@
*
* @return The generated key hashes the src
*/
- public long generateKey() {
+ public java.io.Serializable generateKey() {
if ( null == this.session ) {
- return 1;
+ return "1";
}
- return 0;
+ return null;
}
/**
@@ -263,9 +263,9 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
+ public SourceValidity generateValidity() {
if ( null == this.session ) {
- return NOPCacheValidity.CACHE_VALIDITY;
+ return NOPValidity.SHARED_INSTANCE;
}
return null;
}
@@ -319,7 +319,7 @@
* </p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Bernhard Huber</a>
- * @version CVS $Id: EncodeURLTransformer.java,v 1.1 2002/03/14 07:09:50
cziegeler Exp $
+ * @version CVS $Id: EncodeURLTransformer.java,v 1.2 2002/05/28 13:08:13
cziegeler Exp $
*/
public class ElementAttributeMatching {
/**
1.8 +9 -10
xml-cocoon2/src/java/org/apache/cocoon/transformation/FilterTransformer.java
Index: FilterTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/FilterTransformer.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- FilterTransformer.java 22 Feb 2002 07:03:56 -0000 1.7
+++ FilterTransformer.java 28 May 2002 13:08:13 -0000 1.8
@@ -52,11 +52,10 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.util.HashUtil;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.AttributesImpl;
@@ -79,12 +78,12 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Sven Beauprez</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Carsten Ziegeler</a>
- * @version CVS $Id: FilterTransformer.java,v 1.7 2002/02/22 07:03:56 cziegeler Exp
$
+ * @version CVS $Id: FilterTransformer.java,v 1.8 2002/05/28 13:08:13 cziegeler Exp
$
*/
public class FilterTransformer
extends AbstractTransformer
-implements Cacheable {
+implements CacheableProcessingComponent {
private static final String ELEMENT = "element-name";
private static final String COUNT = "count";
@@ -131,10 +130,10 @@
* @return The generated key or <code>0</code> if the component
* is currently not cacheable.
*/
- public long generateKey() {
+ public java.io.Serializable generateKey() {
final StringBuffer hash = new StringBuffer(this.elementName);
hash.append('<').append(this.count).append('>').append(this.blocknr);
- return HashUtil.hash(hash);
+ return hash;
}
/**
@@ -145,8 +144,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- return NOPCacheValidity.CACHE_VALIDITY;
+ public SourceValidity generateValidity() {
+ return NOPValidity.SHARED_INSTANCE;
}
/** BEGIN SAX ContentHandler handlers **/
1.15 +13 -13
xml-cocoon2/src/java/org/apache/cocoon/transformation/FragmentExtractorTransformer.java
Index: FragmentExtractorTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/FragmentExtractorTransformer.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- FragmentExtractorTransformer.java 21 May 2002 06:08:05 -0000 1.14
+++ FragmentExtractorTransformer.java 28 May 2002 13:08:13 -0000 1.15
@@ -61,14 +61,14 @@
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.NOPCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.sax.XMLSerializer;
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.util.HashUtil;
+import org.apache.excalibur.source.SourceValidity;
+import org.apache.excalibur.source.impl.validity.NOPValidity;
import org.apache.excalibur.store.Store;
@@ -97,10 +97,10 @@
* <p>
*
* @author <a href="mailto:[EMAIL PROTECTED]">Paul Russell</a>
- * @version CVS $Id: FragmentExtractorTransformer.java,v 1.14 2002/05/21 06:08:05
cziegeler Exp $
+ * @version CVS $Id: FragmentExtractorTransformer.java,v 1.15 2002/05/28 13:08:13
cziegeler Exp $
*/
public class FragmentExtractorTransformer extends AbstractTransformer
- implements Cacheable, Configurable, Composable, Disposable, Recyclable {
+ implements CacheableProcessingComponent, Configurable, Composable, Disposable,
Recyclable {
private static final String EXTRACT_URI_NAME = "extract-uri";
private static final String EXTRACT_ELEMENT_NAME = "extract-element";
@@ -160,7 +160,7 @@
public void compose(ComponentManager manager) throws ComponentException {
this.manager = manager;
}
-
+
/**
* Release all resources.
*/
@@ -169,7 +169,7 @@
this.serializer = null;
this.manager = null;
}
-
+
/**
* Recycle this component
*/
@@ -184,8 +184,8 @@
*
* @return The generated key hashes the src
*/
- public long generateKey() {
- return 1;
+ public java.io.Serializable generateKey() {
+ return "1";
}
/**
@@ -194,8 +194,8 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
- return NOPCacheValidity.CACHE_VALIDITY;
+ public SourceValidity generateValidity() {
+ return NOPValidity.SHARED_INSTANCE;
}
/**
@@ -328,7 +328,7 @@
try {
store = (Store) this.manager.lookup(Store.TRANSIENT_STORE);
- store.store(id, this.serializer.getSAXFragment());
+ store.store(id, this.serializer.getSAXFragment());
} catch (ComponentException ce) {
getLogger().error("Could not lookup for transient store.",
ce);
throw new SAXException("Could not lookup for transient
store.", ce);
@@ -341,7 +341,7 @@
this.manager.release(this.serializer);
this.serializer = null;
}
-
+
getLogger().debug("FragmentExtractorTransformer stored document
" + id + ".");
// Insert ref.
1.7 +3 -3
xml-cocoon2/src/java/org/apache/cocoon/transformation/RoleFilterTransformer.java
Index: RoleFilterTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/RoleFilterTransformer.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- RoleFilterTransformer.java 22 Feb 2002 07:03:56 -0000 1.6
+++ RoleFilterTransformer.java 28 May 2002 13:08:13 -0000 1.7
@@ -87,7 +87,7 @@
* will work as expected.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Id: RoleFilterTransformer.java,v 1.6 2002/02/22 07:03:56 cziegeler
Exp $
+ * @version CVS $Id: RoleFilterTransformer.java,v 1.7 2002/05/28 13:08:13 cziegeler
Exp $
*/
public class RoleFilterTransformer extends FilterTransformer {
private final static String URI = "http://apache.org/cocoon/role-filter/1.0";
@@ -107,8 +107,8 @@
/**
* Disable caching
*/
- public long generateKey() {
- return 0;
+ public java.io.Serializable generateKey() {
+ return null;
}
public final void startElement(String uri, String loc, String raw, Attributes a)
1.2 +0 -2
xml-cocoon2/src/java/org/apache/cocoon/transformation/SourceWritingTransformer.java
Index: SourceWritingTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/SourceWritingTransformer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- SourceWritingTransformer.java 21 May 2002 08:29:35 -0000 1.1
+++ SourceWritingTransformer.java 28 May 2002 13:08:13 -0000 1.2
@@ -62,8 +62,6 @@
import org.apache.avalon.framework.configuration.ConfigurationException;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.serialization.Serializer;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
import org.apache.cocoon.environment.SourceResolver;
import org.apache.cocoon.components.source.SourceUtil;
import org.apache.cocoon.components.source.WriteableSource;
1.27 +21 -29
xml-cocoon2/src/java/org/apache/cocoon/transformation/TraxTransformer.java
Index: TraxTransformer.java
===================================================================
RCS file:
/home/cvs/xml-cocoon2/src/java/org/apache/cocoon/transformation/TraxTransformer.java,v
retrieving revision 1.26
retrieving revision 1.27
diff -u -r1.26 -r1.27
--- TraxTransformer.java 2 May 2002 12:09:21 -0000 1.26
+++ TraxTransformer.java 28 May 2002 13:08:13 -0000 1.27
@@ -52,6 +52,7 @@
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceException;
+import org.apache.excalibur.source.SourceValidity;
import org.apache.avalon.excalibur.xml.xslt.XSLTProcessor;
import org.apache.avalon.excalibur.xml.xslt.XSLTProcessorException;
import org.apache.avalon.framework.activity.Disposable;
@@ -65,9 +66,7 @@
import org.apache.avalon.framework.logger.Loggable;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
-import org.apache.cocoon.caching.CacheValidity;
-import org.apache.cocoon.caching.Cacheable;
-import org.apache.cocoon.caching.SourceCacheValidity;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.browser.Browser;
import org.apache.cocoon.components.deli.Deli;
import org.apache.cocoon.environment.Session;
@@ -75,7 +74,6 @@
import org.apache.cocoon.environment.ObjectModelHelper;
import org.apache.cocoon.environment.Request;
import org.apache.cocoon.environment.SourceResolver;
-import org.apache.cocoon.util.HashUtil;
import org.apache.cocoon.xml.XMLConsumer;
import org.xml.sax.SAXException;
@@ -159,10 +157,10 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Ovidiu Predescu</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Mark H. Butler</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
- * @version CVS $Id: TraxTransformer.java,v 1.26 2002/05/02 12:09:21 cziegeler Exp $
+ * @version CVS $Id: TraxTransformer.java,v 1.27 2002/05/28 13:08:13 cziegeler Exp $
*/
public class TraxTransformer extends AbstractTransformer
-implements Transformer, Composable, Configurable, Cacheable, Disposable {
+implements Transformer, Composable, Configurable, CacheableProcessingComponent,
Disposable {
/** The Browser service instance */
private Browser browser = null;
@@ -331,26 +329,23 @@
*
* @return The generated key hashes the src
*/
- public long generateKey() {
- if (this.inputSource.getValidity() != null) {
- HashMap map = getLogicSheetParameters();
- if (map == null) {
- return HashUtil.hash(this.inputSource.getSystemId());
- }
+ public java.io.Serializable generateKey() {
+ HashMap map = this.getLogicSheetParameters();
+ if (map == null) {
+ return this.inputSource.getSystemId();
+ }
- StringBuffer sb = new StringBuffer();
- sb.append(this.inputSource.getSystemId());
- Set entries = map.entrySet();
- for(Iterator i=entries.iterator(); i.hasNext();){
- sb.append(';');
- Map.Entry entry = (Map.Entry)i.next();
- sb.append(entry.getKey());
- sb.append('=');
- sb.append(entry.getValue());
- }
- return HashUtil.hash(sb.toString());
+ StringBuffer sb = new StringBuffer();
+ sb.append(this.inputSource.getSystemId());
+ Set entries = map.entrySet();
+ for(Iterator i=entries.iterator(); i.hasNext();){
+ sb.append(';');
+ Map.Entry entry = (Map.Entry)i.next();
+ sb.append(entry.getKey());
+ sb.append('=');
+ sb.append(entry.getValue());
}
- return 0;
+ return sb.toString();
}
/**
@@ -359,17 +354,14 @@
* @return The generated validity object or <code>null</code> if the
* component is currently not cacheable.
*/
- public CacheValidity generateValidity() {
+ public SourceValidity generateValidity() {
/*
* VG: Key is generated using parameter/value pairs,
* so this information does not need to be verified again
* (if parameter added/removed or value changed, key should
* change also), only stylesheet's modified time is included.
*/
- if (this.inputSource.getValidity() != null) {
- return new SourceCacheValidity(this.inputSource.getValidity());
- }
- return null;
+ return this.inputSource.getValidity();
}
/**
1.3 +156 -161
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.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- XMLFormTransformer.java 20 May 2002 07:27:53 -0000 1.2
+++ XMLFormTransformer.java 28 May 2002 13:08:13 -0000 1.3
@@ -58,7 +58,7 @@
import java.util.Collection;
import java.util.SortedSet;
import java.util.Stack;
-import java.lang.reflect.Array;
+import java.lang.reflect.Array;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
@@ -84,12 +84,12 @@
import org.apache.cocoon.components.xmlform.Form;
/**
- * Transforms a document with XMLForm
+ * Transforms a document with XMLForm
* elements into a document in the same namespace,
* but with populated values for the XPath references
* to the form's model attributes
*
- * The original code was built by Torsten Curdt as
+ * The original code was built by Torsten Curdt as
* part of the Preceptor API
*
* @author: Ivelin Ivanov <[EMAIL PROTECTED]>, May 2002
@@ -97,23 +97,18 @@
* @author: Torsten Curdt <[EMAIL PROTECTED]>, March 2002
*/
-public class XMLFormTransformer extends AbstractSAXTransformer
+public class XMLFormTransformer extends AbstractSAXTransformer
{
-
- //implements Cacheable {
-
-
-
public final static String NS = "http://xml.apache.org/cocoon/xmlform/2002";
private final static String NS_PREFIX = "xf";
public final static Attributes NOATTR = new AttributesImpl();
private final static String XMLNS_PREFIX = "xmlns";
- /**
+ /**
* The main tag in the XMLForm namespace
* almost all other tags have to appear within the form tag
- * The id attribute refers to a xmlform.Form object
+ * The id attribute refers to a xmlform.Form object
* available in the current Request or Session
*
* <form id="form-feedback">
@@ -124,7 +119,7 @@
public final static String TAG_FORM = "form";
public final static String TAG_FORM_ATTR_ID = "id";
- /**
+ /**
* the only tag which can be used outside of the form tag
* with reference to the form id,
* <output ref="user/age" id="form-feedback"/>
@@ -132,7 +127,7 @@
public final static String TAG_OUTPUT = "output";
public final static String TAG_OUTPUT_ATTR_FORM = TAG_FORM;
- /**
+ /**
* can be used directly under the form tag
* to enlist all field violations or
* within a field tag to enlist only the violations for the field.
@@ -159,7 +154,7 @@
*
*/
public final static String TAG_INSERTVIOLATIONS = "violations";
-
+
/** the name of the elements which replace the violations tag */
public final static String TAG_VIOLATION = "violation";
@@ -167,7 +162,7 @@
public final static String TAG_SUBMIT = "submit";
public final static String TAG_CANCEL = "cancel";
public final static String TAG_RESET = "reset";
-
+
public final static String TAG_CAPTION = "caption";
public final static String TAG_TEXTBOX = "textbox";
public final static String TAG_TEXTAREA = "textarea";
@@ -175,9 +170,9 @@
public final static String TAG_SELECTBOOLEAN = "selectBoolean";
public final static String TAG_SELECTONE = "selectOne";
public final static String TAG_SELECTMANY = "selectMany";
-
+
/**
- * grouping tag
+ * grouping tag
*
* <pre>
* <group ref="address">
@@ -193,13 +188,13 @@
* </input>
* </group>
* </pre>
- *
+ *
*
*/
public final static String TAG_GROUP = "group";
-
- /**
- * repeat tag
+
+ /**
+ * repeat tag
*
* <repeat nodeset="/cart/items/item">
* <input ref="." .../><html:br/>
@@ -210,68 +205,68 @@
public final static String TAG_REPEAT = "repeat";
-
- /**
- * this attribute is used within the
+
+ /**
+ * this attribute is used within the
* <code>repeat</code> tag
* to represent an XPath node set selector from
* the underlying xmlform model.
*/
public final static String TAG_REPEAT_ATTR_NODESET = "nodeset";
-
+
/**
- * The current fully expanded reference
+ * The current fully expanded reference
* in the form model.
*
*/
private String cannonicalRef = null;
-
+
/**
- * Tracks the current repeat tag depth,
+ * Tracks the current repeat tag depth,
* when there is one in scope
*/
private int repeatTagDepth = -1;
/**
- * The nodeset selector string of the
+ * The nodeset selector string of the
* currently processed repeat tag (if any)
*/
private String nodeset = null;
-
-
+
+
/**
* The flag annotating if the transformer is
* working on a repeat tag
*/
private boolean isRecording = false;
-
-
+
+
/**
* the ref value of the current field
* used by the violations tag
*/
private Stack refStack = null;
-
+
/**
* Tracks the current depth of the XML tree
*/
private int currentTagDepth = 0;
-
- /**
+
+ /**
* this attribute is used within all field tags
- * to represent an XPath reference to the attribute of
+ * to represent an XPath reference to the attribute of
* the underlying model.
*/
public final static String TAG_COMMON_ATTR_REF = "ref";
-
+
// the current Form being processed
private Form currentForm;
private Object value_;
-
+
/**
* Setup the next round.
@@ -288,15 +283,15 @@
Parameters par)
throws ProcessingException,
SAXException,
- IOException
+ IOException
{
super.setup( resolver, objectModel, src, par );
- if (request == null)
+ if (request == null)
{
getLogger().debug("no request object");
throw new ProcessingException("no request object");
}
-
+
// set the XMLForm namespace as the one
// this transformer is interested to work on
namespaceURI = NS;
@@ -311,7 +306,7 @@
nodeset = null;
}
-
+
/**
* Start processing elements of our namespace.
* This hook is invoked for each sax event with our namespace.
@@ -324,7 +319,7 @@
String name,
String raw,
Attributes attributes )
- throws ProcessingException, IOException, SAXException
+ throws ProcessingException, IOException, SAXException
{
try
{
@@ -332,7 +327,7 @@
// when outputting the elements themselves
this.ignoreHooksCount = 1;
- if (this.getLogger().isDebugEnabled() == true)
+ if (this.getLogger().isDebugEnabled() == true)
{
this.getLogger().debug("BEGIN startTransformingElement uri=" + uri + ",
name=" + name + ", raw=" + raw + ", attr=" + attributes + ")");
}
@@ -377,7 +372,7 @@
{
throw new SAXException( name + " element should provide a '" +
TAG_REPEAT_ATTR_NODESET + "' attribute" );
}
-
+
// open the repeat tag in the output document
super.startElement( uri, name, raw, attributes);
// and start recording its content
@@ -388,32 +383,32 @@
// if this tag has a "ref" attribute, then
// add its value to the refStack
String aref = attributes.getValue( TAG_COMMON_ATTR_REF );
- if ( aref != null )
+ if ( aref != null )
{
// put on top of the ref stack the full ref
// append the new ref to the last stack top if not referencing the root
cannonicalRef = aref.startsWith ("/") ? aref : ( ((Entry)
refStack.peek()).getValue() + "/" + aref );
Entry entry = new Entry( new Integer(currentTagDepth), cannonicalRef);
refStack.push( entry );
-
+
// replace the ref attribute's value(path) with its full cannonical form
AttributesImpl atts = new AttributesImpl( attributes );
int refIdx = atts.getIndex ( TAG_COMMON_ATTR_REF );
atts.setValue ( refIdx, cannonicalRef );
- attributes = atts;
+ attributes = atts;
}
- // match tag name and apply transformation logic
- if (TAG_FORM.equals(name))
+ // match tag name and apply transformation logic
+ if (TAG_FORM.equals(name))
{
- startElementForm( uri, name, raw, attributes );
+ startElementForm( uri, name, raw, attributes );
}
- else if ( TAG_OUTPUT.equals(name) )
+ else if ( TAG_OUTPUT.equals(name) )
{
startElementOutput( uri, name, raw, attributes );
} // end if TAG_OUTPUT
- else if ( TAG_CAPTION.equals( name ) )
- {
+ else if ( TAG_CAPTION.equals( name ) )
+ {
super.startElement( uri, name, raw, attributes);
this.ignoreHooksCount = 0;
}
@@ -421,32 +416,32 @@
// then we can't process nested form tags
else if (currentForm != null)
{
- if (TAG_INSERTVIOLATIONS.equals(name))
+ if (TAG_INSERTVIOLATIONS.equals(name))
{
startElementViolations( uri, name, raw, attributes );
} // end if TAG_INSERTVIOLATIONS
- else if (
+ else if (
TAG_TEXTBOX.equals(name) ||
TAG_TEXTAREA.equals(name) ||
TAG_PASSWORD.equals(name) ||
TAG_SELECTBOOLEAN.equals(name) ||
- TAG_SELECTONE.equals(name))
+ TAG_SELECTONE.equals(name))
{
startElementSimpleField( uri, name, raw, attributes, currentForm );
}
- else if (TAG_SELECTMANY.equals(name))
+ else if (TAG_SELECTMANY.equals(name))
{
startElementSimpleField( uri, name, raw, attributes, currentForm );
}
else if (
TAG_SUBMIT.equals(name) ||
TAG_CANCEL.equals(name) ||
- TAG_RESET.equals(name) )
+ TAG_RESET.equals(name) )
{
super.startElement(uri, name, raw, attributes);
}
- else
+ else
{
getLogger().error("unknown element [" + String.valueOf(name) + "]");
super.startElement(uri, name, raw, attributes);
@@ -454,21 +449,21 @@
}
} // end else (not a repeat tag)
}
- finally
+ finally
{
// reset ignore counter
this.ignoreHooksCount = 0;
}
-
- if (this.getLogger().isDebugEnabled() == true)
+
+ if (this.getLogger().isDebugEnabled() == true)
{
this.getLogger().debug("END startTransformingElement");
}
} // end of startTransformingElement
- protected void startElementForm(String uri, String name, String raw, Attributes
attributes) throws SAXException
+ protected void startElementForm(String uri, String name, String raw, Attributes
attributes) throws SAXException
{
String id = attributes.getValue(TAG_FORM_ATTR_ID);
@@ -481,8 +476,8 @@
super.startElement(uri, name, raw, attributes);
- // load up the referenced form
- currentForm = Form.lookup( objectModel, id );
+ // load up the referenced form
+ currentForm = Form.lookup( objectModel, id );
// if the form wasn't found, we're in trouble
if (currentForm == null)
@@ -491,9 +486,9 @@
}
} // end of startElementForm
-
-
- protected void startElementViolations(String uri, String name, String raw,
Attributes attributes) throws SAXException
+
+
+ protected void startElementViolations(String uri, String name, String raw,
Attributes attributes) throws SAXException
{
SortedSet violations = currentForm.getViolations();
@@ -502,9 +497,9 @@
// if we're immediately under the form tag
// and parent "ref" attribute is not available
- if ( refStack.isEmpty () )
+ if ( refStack.isEmpty () )
{
- for (Iterator it = violations.iterator(); it.hasNext();)
+ for (Iterator it = violations.iterator(); it.hasNext();)
{
Violation violation = (Violation) it.next();
@@ -523,14 +518,14 @@
// now start the element
super.startElement(uri, TAG_VIOLATION, NS_PREFIX + ":" + TAG_VIOLATION,
atts);
- // set message
+ // set message
String vm = violation.getMessage();
super.characters( vm.toCharArray(), 0, vm.length());
super.endElement(uri, TAG_VIOLATION, NS_PREFIX + ":" + TAG_VIOLATION);
}
- } // end if (currentRef_ == null)
- else
+ } // end if (currentRef_ == null)
+ else
{
Entry entry = (Entry) refStack.peek ();
String currentRef = (String) entry.getValue ();
@@ -544,10 +539,10 @@
// we're only interested in violations
// with matching reference
if ( !currentRef.equals (nextViolation.getPath () ) ) break;
-
+
// render <violation> tag
super.startElement(uri, TAG_VIOLATION, NS_PREFIX + ":" + TAG_VIOLATION,
attributes );
- // set message
+ // set message
String vm = nextViolation.getMessage();
super.characters( vm.toCharArray(), 0, vm.length());
super.endElement(uri, TAG_VIOLATION, NS_PREFIX + ":" + TAG_VIOLATION);
@@ -555,22 +550,22 @@
}
} // end of startElementViolations
-
+
/**
* Since the ouput tag is the only one which can be used
* outside of a form tag, it needs some special treatment
*
*/
- protected void startElementOutput(String uri, String name, String raw, Attributes
attributes)
+ protected void startElementOutput(String uri, String name, String raw, Attributes
attributes)
throws SAXException
{
- // we will either use the locally referenced form id
+ // we will either use the locally referenced form id
// or the global id. At least one of the two must be available
Form form = null;
String formAttr = attributes.getValue( TAG_OUTPUT_ATTR_FORM );
- if (formAttr == null)
+ if (formAttr == null)
{
if (currentForm == null)
{
@@ -582,14 +577,14 @@
{
form = Form.lookup( objectModel, formAttr );
}
-
+
startElementSimpleField( uri, name, raw, attributes, form );
} // end of startElementOutput
-
-
- protected void startElementSimpleField(String uri, String name, String raw,
Attributes attributes, Form form)
+
+
+ protected void startElementSimpleField(String uri, String name, String raw,
Attributes attributes, Form form)
throws SAXException
{
String ref = attributes.getValue(TAG_COMMON_ATTR_REF);
@@ -598,7 +593,7 @@
{
throw new SAXException( name + " element should provide a '" +
TAG_COMMON_ATTR_REF + "' attribute" );
}
-
+
if ( form == null)
{
throw new SAXException( name + " element should be either nested within a
form tag or provide a form attribute" );
@@ -617,11 +612,11 @@
// render the value subelement(s)
if (value_ instanceof Collection)
{
- Iterator i=((Collection) value_).iterator();
- while (i.hasNext())
- {
+ Iterator i=((Collection) value_).iterator();
+ while (i.hasNext())
+ {
renderValueSubElement( i.next() );
- }
+ }
}
else if ( value_ != null && value_.getClass().isArray () )
{
@@ -634,31 +629,31 @@
else
{
renderValueSubElement( value_ );
- }
+ }
} // end of startElementSimpleField
-
+
/**
* Outputs a <xf:value> element.
* Used when transforming XMLForm elements
* with reference to the model
*
- * @param vobj provides the text content
+ * @param vobj provides the text content
* within the <xf:value> element
- *
+ *
*/
protected void renderValueSubElement( Object vobj )
throws SAXException
{
super.startElement( NS, "value", NS_PREFIX + ":" + "value", NOATTR);
- if (vobj != null)
+ if (vobj != null)
{
String v = String.valueOf( vobj );
super.characters(v.toCharArray(),0,v.length());
}
- super.endElement( NS, "value", NS_PREFIX + ":" + "value" );
+ super.endElement( NS, "value", NS_PREFIX + ":" + "value" );
}
-
+
/**
* Start processing elements of our namespace.
* This hook is invoked for each sax event with our namespace.
@@ -670,22 +665,22 @@
String uri,
String name,
String raw)
- throws ProcessingException, IOException, SAXException
+ throws ProcessingException, IOException, SAXException
{
- if (this.getLogger().isDebugEnabled() == true)
+ if (this.getLogger().isDebugEnabled() == true)
{
this.getLogger().debug("BEGIN endTransformingElement uri=" + uri + ",
name=" + name + ", raw=" + raw + ")");
}
-
+
try
{
// avoid endless loop for elements in our namespace
this.ignoreHooksCount = 1;
-
+
// when the end of an active repeat tag is reached
- // stop recording, unroll the repeat tag content
+ // stop recording, unroll the repeat tag content
// for each node in the node set,
// then close the repeat tag
if (TAG_REPEAT.equals( name) && (repeatTagDepth == currentTagDepth))
@@ -712,7 +707,7 @@
{
Entry entry = (Entry) refStack.peek();
Integer refDepth = (Integer) entry.getKey ();
- if ( currentTagDepth <= refDepth.intValue () )
+ if ( currentTagDepth <= refDepth.intValue () )
{
refStack.pop();
cannonicalRef = refStack.isEmpty () ? "" : (String)( (Entry)
(refStack.peek ()) ).getValue();
@@ -720,11 +715,11 @@
}
- if (TAG_INSERTVIOLATIONS.equals(name))
+ if (TAG_INSERTVIOLATIONS.equals(name))
{
// all violations were rendered completely in the startElement method
}
- else if (TAG_FORM.equals(name))
+ else if (TAG_FORM.equals(name))
{
// nullify currentForm since we're getting out of its scope
currentForm = null;
@@ -734,23 +729,23 @@
TAG_TEXTBOX.equals(name) ||
TAG_PASSWORD.equals(name) ||
TAG_SELECTBOOLEAN.equals(name) ||
- TAG_SELECTONE.equals(name) )
+ TAG_SELECTONE.equals(name) )
{
super.endElement(uri, name, raw);
}
- else if (TAG_SELECTMANY.equals(name))
+ else if (TAG_SELECTMANY.equals(name))
{
super.endElement(uri, name, raw);
}
- else if (TAG_SUBMIT.equals(name))
+ else if (TAG_SUBMIT.equals(name))
{
super.endElement(uri, name, raw);
- }
- else if ( TAG_CAPTION.equals( name ) )
- {
+ }
+ else if ( TAG_CAPTION.equals( name ) )
+ {
super.endElement(uri, name, raw);
}
- else
+ else
{
getLogger().error("unknown element [" + String.valueOf(name) + "]");
super.endElement(uri, name, raw);
@@ -765,23 +760,23 @@
// track the tree depth
--currentTagDepth;
}
-
- if (this.getLogger().isDebugEnabled() == true)
+
+ if (this.getLogger().isDebugEnabled() == true)
{
this.getLogger().debug("END endTransformingElement");
}
-
+
} // end of endTransformingElement
-
+
/**
* Unroll the repeat tag.
* For each node in the repeat tag's nodeset selector result,
- * render a <code>group</code> tag with a <code>ref</code>
+ * render a <code>group</code> tag with a <code>ref</code>
* attribute which points to the location of the current node
* in the nodeset. Within each <code>group</code> tag,
* output the content of the repeat tag,
- * by resolving all form model references within nested xmlform tags,
+ * by resolving all form model references within nested xmlform tags,
* relative to the <code>ref</code> attribute of the <code>group</code> element.
*
* @param docFragment the content of the repeat tag
@@ -808,7 +803,7 @@
atts.addAttribute( null, TAG_COMMON_ATTR_REF, TAG_COMMON_ATTR_REF, "CDATA",
nextNodeLocation);
super.startElement(NS, TAG_GROUP, NS_PREFIX + ":" + TAG_GROUP, atts);
- if (value_ != null)
+ if (value_ != null)
{
// stream back the recorder repeat content
DOMStreamer streamer = new DOMStreamer( this, this);
@@ -824,55 +819,55 @@
ignoreHooksCount = oldIgnoreHooksCount;
}
} // unrollRepeatTag
-
-
-
+
+
+
/**
* refStack entry.
*/
private static class Entry implements Map.Entry {
- Object key;
- Object value;
+ Object key;
+ Object value;
+
+ Entry(Object key, Object value) {
+ this.key = key;
+ this.value = value;
+ }
+
+ // Map.Entry Ops
+
+ public Object getKey() {
+ return key;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+
+ public Object setValue(Object value) {
+ Object oldValue = this.value;
+ this.value = value;
+ return oldValue;
+ }
- Entry(Object key, Object value) {
- this.key = key;
- this.value = value;
- }
-
- // Map.Entry Ops
-
- public Object getKey() {
- return key;
- }
-
- public Object getValue() {
- return value;
- }
-
- public Object setValue(Object value) {
- Object oldValue = this.value;
- this.value = value;
- return oldValue;
- }
-
- public boolean equals(Object o) {
- if (!(o instanceof Map.Entry))
- return false;
- Map.Entry e = (Map.Entry)o;
-
- return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
- (value==null ? e.getValue()==null : value.equals(e.getValue()));
- }
-
- public int hashCode() {
- return getKey().hashCode () ^ (value==null ? 0 : value.hashCode());
- }
-
- public String toString() {
- return key+"="+value;
- }
+ public boolean equals(Object o) {
+ if (!(o instanceof Map.Entry))
+ return false;
+ Map.Entry e = (Map.Entry)o;
+
+ return (key==null ? e.getKey()==null : key.equals(e.getKey())) &&
+ (value==null ? e.getValue()==null : value.equals(e.getValue()));
+ }
+
+ public int hashCode() {
+ return getKey().hashCode () ^ (value==null ? 0 : value.hashCode());
+ }
+
+ public String toString() {
+ return key+"="+value;
+ }
}
}
----------------------------------------------------------------------
In case of troubles, e-mail: [EMAIL PROTECTED]
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]