blob: 2e33caa520d7ae2d766cef49196cd3630fd815ee [file] [log] [blame]
Index: src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java,v
retrieving revision 1.4
diff -u -r1.4 FOPSerializer.java
--- src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java 21 Nov 2002 18:18:48 -0000 1.4
+++ src/blocks/fop/java/org/apache/cocoon/serialization/FOPSerializer.java 5 Dec 2002 09:21:13 -0000
@@ -63,18 +63,28 @@
import org.apache.cocoon.components.url.URLFactory;
import org.apache.cocoon.util.ClassUtils;
import org.apache.cocoon.environment.URLFactorySourceResolver;
-import org.apache.cocoon.environment.Source;
+import org.apache.cocoon.environment.Environment;
+import org.apache.excalibur.source.Source;
+import org.apache.excalibur.source.SourceResolver;
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.messaging.MessageHandler;
import org.apache.fop.render.Renderer;
-import org.apache.fop.configuration.ConfigurationParser;
+import org.apache.fop.fo.FOUserAgent;
+import org.apache.cocoon.components.RequestLifecycleComponent;
+import org.apache.avalon.framework.component.Component;
+import org.apache.cocoon.ProcessingException;
+import org.xml.sax.SAXException;
+import org.apache.cocoon.components.RequestLifecycleComponent;
+
+import java.io.IOException;
+import java.util.Map;
import java.io.OutputStream;
import java.io.File;
import java.io.Serializable;
+import java.io.InputStream;
+import java.net.URL;
import java.net.MalformedURLException;
/**
@@ -84,7 +94,7 @@
*/
public class FOPSerializer
extends AbstractSerializer
-implements Composable, Configurable, CacheableProcessingComponent {
+implements Composable, Configurable, CacheableProcessingComponent, RequestLifecycleComponent {
/**
* The Renderer Factory to use
@@ -97,6 +107,11 @@
protected Driver driver;
/**
+ * The current <code>FOUserAgent</code>.
+ */
+ protected FOUserAgent userAgent;
+
+ /**
* The current <code>Renderer</code>.
*/
protected Renderer renderer;
@@ -145,24 +160,6 @@
public void configure(Configuration conf) throws ConfigurationException {
this.logger = getLogger().getChildLogger("fop");
- MessageHandler.setScreenLogger(this.logger);
-
- // FIXME: VG: Initialize static FOP configuration with defaults, only once.
- // FOP has static config, but that's going to change in the near future.
- // Then this code should be reviewed.
- synchronized (FOPSerializer.class) {
- if (!configured) {
- try {
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Loading default configuration");
- }
- new Options();
- } catch (Exception e) {
- getLogger().error("Cannot load default configuration. Proceeding.", e);
- }
- configured = true;
- }
- }
this.setContentLength = conf.getChild("set-content-length").getValueAsBoolean(true);
@@ -180,28 +177,6 @@
// New syntax: Element user-config contains URL
configUrl = conf.getChild("user-config").getValue(null);
}
- if(configUrl != null) {
- URLFactory urlFactory = null;
- Source configSource = null;
- try {
- // FIXME: How to do without URLFactory but relative to context?
- urlFactory = (URLFactory)manager.lookup(URLFactory.ROLE);
- URLFactorySourceResolver urlResolver = new URLFactorySourceResolver(urlFactory, manager);
- configSource = urlResolver.resolve(configUrl);
- if (getLogger().isDebugEnabled()) {
- getLogger().debug("Loading configuration from " + configSource.getSystemId());
- }
- configSource.toSAX(new ConfigurationParser());
- } catch (Exception e) {
- getLogger().warn("Cannot load configuration from " + configUrl);
- throw new ConfigurationException("Cannot load configuration from " + configUrl, e);
- } finally {
- manager.release(urlFactory);
- if (configSource != null) {
- configSource.recycle();
- }
- }
- }
// Get the mime type.
this.mimetype = conf.getAttribute("mime-type");
@@ -233,6 +208,22 @@
+ "no renderer was specified in the sitemap configuration."
);
}
+ this.renderer.setCreator("Cocoon");
+
+ userAgent = new FOUserAgent();
+ userAgent.enableLogging(this.logger);
+ //userAgent.setBaseURL(source.getSystemId());
+
+ // load the fop driver
+ this.driver = new Driver();
+ driver.enableLogging(this.logger);
+ driver.setUserAgent(userAgent);
+
+ driver.setRenderer(this.renderer);
+
+ //driver.configure(conf);
+ driver.initialize();
+
}
/**
@@ -242,27 +233,39 @@
return mimetype;
}
+ public void setup(final org.apache.cocoon.environment.SourceResolver resolver, Map objectModel)
+ throws ProcessingException, SAXException, IOException {
+
+ userAgent = new FOUserAgent() {
+ public InputStream getStream(String uri) {
+ try {
+ Environment env = (Environment) resolver;
+ org.apache.cocoon.environment.Source source = null;
+ org.apache.cocoon.components.source.CocoonSourceFactory ccf;
+ ccf = new org.apache.cocoon.components.source.CocoonSourceFactory(null, manager);
+ ccf.enableLogging(logger);
+ source = ccf.getSource(env, "/" + uri);
+ getLogger().debug("Loading image from " + source.getSystemId());
+ InputStream is = source.getInputStream();
+ getLogger().debug("input stream: " + is + ":" + is.available());
+ return is;
+ } catch (Exception e) {
+ getLogger().error("Cannot load source", e);
+ }
+ return null;
+ }
+ };
+ userAgent.enableLogging(this.logger);
+ //userAgent.setBaseURL(source.getSystemId());
+
+ driver.setUserAgent(userAgent);
+ }
+
/**
* Create the FOP driver
* Set the <code>OutputStream</code> where the XML should be serialized.
*/
public void setOutputStream(OutputStream out) {
- // load the fop driver
- this.driver = new Driver();
- this.driver.setLogger(this.logger);
- if (this.rendererName == null) {
- this.renderer = factory.createRenderer(mimetype);
- } else {
- try {
- this.renderer = (Renderer)ClassUtils.newInstance(this.rendererName);
- } catch (Exception e) {
- if (getLogger().isWarnEnabled()) {
- getLogger().warn("Cannot load class " + this.rendererName, e);
- }
- throw new CascadingRuntimeException("Cannot load class " + this.rendererName, e);
- }
- }
- this.driver.setRenderer(this.renderer);
this.driver.setOutputStream(out);
setContentHandler(this.driver.getContentHandler());
}
@@ -296,8 +299,7 @@
*/
public void recycle() {
super.recycle();
- this.driver = null;
- this.renderer = null;
+ this.driver.reset();
}
/**
@@ -307,3 +309,4 @@
return this.setContentLength;
}
}
+
Index: src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java
===================================================================
RCS file: /home/cvspublic/xml-cocoon2/src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java,v
retrieving revision 1.24
diff -u -r1.24 AbstractProcessingPipeline.java
--- src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java 11 Oct 2002 08:36:30 -0000 1.24
+++ src/java/org/apache/cocoon/components/pipeline/AbstractProcessingPipeline.java 5 Dec 2002 09:21:13 -0000
@@ -62,6 +62,7 @@
import org.apache.cocoon.ConnectionResetException;
import org.apache.cocoon.ProcessingException;
import org.apache.cocoon.components.CocoonComponentManager;
+import org.apache.cocoon.components.RequestLifecycleComponent;
import org.apache.cocoon.components.treeprocessor.ProcessingNode;
import org.apache.cocoon.environment.Environment;
import org.apache.cocoon.environment.ObjectModelHelper;
@@ -392,6 +393,15 @@
environment.getObjectModel(),
(String)transformerSourceItt.next(),
(Parameters)transformerParamItt.next()
+ );
+ }
+
+ // WARNING: quick hack
+ // setup the serializer
+ if(this.serializer instanceof RequestLifecycleComponent) {
+ ((RequestLifecycleComponent)this.serializer).setup(
+ environment,
+ environment.getObjectModel()
);
}