You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by an...@apache.org on 2005/09/18 07:37:17 UTC
svn commit: r289891 - in /cocoon/trunk:
src/java/org/apache/cocoon/transformation/XIncludeTransformer.java status.xml
Author: antonio
Date: Sat Sep 17 22:37:11 2005
New Revision: 289891
URL: http://svn.apache.org/viewcvs?rev=289891&view=rev
Log:
<action dev="AG" type="add" fixes-bug="31600" due-to="Frans Englich" due-to-email="frans.englich@telia.com">
Caching support for XInclude Transformer
</action>
Modified:
cocoon/trunk/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java
cocoon/trunk/status.xml
Modified: cocoon/trunk/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java
URL: http://svn.apache.org/viewcvs/cocoon/trunk/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java?rev=289891&r1=289890&r2=289891&view=diff
==============================================================================
--- cocoon/trunk/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java (original)
+++ cocoon/trunk/src/java/org/apache/cocoon/transformation/XIncludeTransformer.java Sat Sep 17 22:37:11 2005
@@ -1,5 +1,5 @@
/*
- * Copyright 1999-2004 The Apache Software Foundation.
+ * Copyright 1999-2005 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.
@@ -20,6 +20,7 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
+import java.io.Serializable;
import java.net.MalformedURLException;
import java.util.Map;
@@ -30,7 +31,9 @@
import org.apache.avalon.framework.service.Serviceable;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.ResourceNotFoundException;
+import org.apache.cocoon.caching.CacheableProcessingComponent;
import org.apache.cocoon.components.source.SourceUtil;
+import org.apache.cocoon.components.source.impl.MultiSourceValidity;
import org.apache.cocoon.components.xpointer.XPointer;
import org.apache.cocoon.components.xpointer.XPointerContext;
import org.apache.cocoon.components.xpointer.parser.ParseException;
@@ -43,6 +46,7 @@
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.xml.sax.Attributes;
import org.xml.sax.ContentHandler;
import org.xml.sax.Locator;
@@ -64,9 +68,9 @@
* and on the content of fallback elements (with loop inclusion detection).
*
* @author <a href="mailto:balld@webslingerZ.com">Donald Ball</a> (wrote the original version)
- * @version CVS $Id$
+ * @version SVN $Id$
*/
-public class XIncludeTransformer extends AbstractTransformer implements Serviceable {
+public class XIncludeTransformer extends AbstractTransformer implements Serviceable, CacheableProcessingComponent {
protected SourceResolver resolver;
protected ServiceManager manager;
private XIncludePipe xIncludePipe;
@@ -79,11 +83,16 @@
public static final String XINCLUDE_INCLUDE_ELEMENT_HREF_ATTRIBUTE = "href";
public static final String XINCLUDE_INCLUDE_ELEMENT_PARSE_ATTRIBUTE = "parse";
+ private static final String XINCLUDE_CACHE_KEY = "XInclude";
+
+ /** The {@link SourceValidity} instance associated with this request. */
+ private MultiSourceValidity validity;
public void setup(SourceResolver resolver, Map objectModel, String source, Parameters parameters)
throws ProcessingException, SAXException, IOException {
this.resolver = resolver;
- this.xIncludePipe = new XIncludePipe();
+ this.validity = new MultiSourceValidity(resolver, MultiSourceValidity.CHECK_ALWAYS);
+ this.xIncludePipe = new XIncludePipe();
this.xIncludePipe.enableLogging(getLogger());
this.xIncludePipe.init(null);
super.setContentHandler(xIncludePipe);
@@ -106,10 +115,21 @@
this.manager = manager;
}
+ /** Key to be used for caching */
+ public Serializable getKey() {
+ return XINCLUDE_CACHE_KEY;
+ }
+
+ /** Get the validity for this transform */
+ public SourceValidity getValidity() {
+ return this.validity;
+ }
+
public void recycle()
{
// Reset all variables to initial state.
this.resolver = null;
+ this.validity = null;
this.xIncludePipe = null;
super.recycle();
}
@@ -158,6 +178,12 @@
return href;
}
+ public void endDocument() throws SAXException {
+ // We won't be getting any more sources so mark the MultiSourceValidity as finished.
+ validity.close();
+ super.endDocument();
+ }
+
public void startElement(String uri, String name, String raw, Attributes attr) throws SAXException {
if (xIncludeLevel == 1 && useFallback && XINCLUDE_NAMESPACE_URI.equals(uri) && XINCLUDE_FALLBACK_ELEMENT.equals(name)) {
fallbackLevel++;
@@ -172,7 +198,7 @@
return;
} else if (xIncludeLevel > 0 && fallbackLevel > 0) {
fallbackLevel++;
- }
+ }
xmlBaseSupport.startElement(uri, name, raw, attr);
if (XINCLUDE_NAMESPACE_URI.equals(uri)) {
@@ -367,6 +393,9 @@
getLogger().debug("URL: " + url.getURI() + "\nSuffix: " + suffix);
}
+ // add the source to the SourceValidity
+ validity.addSource(url);
+
// check loop inclusion
String canonicURI = url.getURI() + (suffix.length() > 0 ? "#" + suffix: "");
if (isLoopInclusion(canonicURI))
@@ -453,7 +482,7 @@
}
return false;
}
-
+
private String getLocation() {
if (this.locator == null) {
return "unknown location";
Modified: cocoon/trunk/status.xml
URL: http://svn.apache.org/viewcvs/cocoon/trunk/status.xml?rev=289891&r1=289890&r2=289891&view=diff
==============================================================================
--- cocoon/trunk/status.xml (original)
+++ cocoon/trunk/status.xml Sat Sep 17 22:37:11 2005
@@ -561,6 +561,9 @@
</action>
</release>
<release version="2.1.8" date="TBD">
+ <action dev="AG" type="add" fixes-bug="31600" due-to="Frans Englich" due-to-email="frans.englich@telia.com">
+ Caching support for XInclude Transformer
+ </action>
<action dev="SW" type="add" due-to="Max Pfingsthorn" due-to-email="max.pfingsthorn@gmail.com">
CForms block: new form libraries features. You can now define form definition and binding
library files and import them for reuse and/or extension in regular definition and binding files.