| 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() |
| ); |
| } |
| |