You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by il...@apache.org on 2013/02/26 14:15:08 UTC
svn commit: r1450159 -
/cocoon/cocoon3/trunk/cocoon-optional/src/main/java/org/apache/cocoon/optional/pipeline/components/sax/fop/FopSerializer.java
Author: ilgrosso
Date: Tue Feb 26 13:15:08 2013
New Revision: 1450159
URL: http://svn.apache.org/r1450159
Log:
[COCOON3-99] Applying provided patch with some minor rework
Modified:
cocoon/cocoon3/trunk/cocoon-optional/src/main/java/org/apache/cocoon/optional/pipeline/components/sax/fop/FopSerializer.java
Modified: cocoon/cocoon3/trunk/cocoon-optional/src/main/java/org/apache/cocoon/optional/pipeline/components/sax/fop/FopSerializer.java
URL: http://svn.apache.org/viewvc/cocoon/cocoon3/trunk/cocoon-optional/src/main/java/org/apache/cocoon/optional/pipeline/components/sax/fop/FopSerializer.java?rev=1450159&r1=1450158&r2=1450159&view=diff
==============================================================================
--- cocoon/cocoon3/trunk/cocoon-optional/src/main/java/org/apache/cocoon/optional/pipeline/components/sax/fop/FopSerializer.java (original)
+++ cocoon/cocoon3/trunk/cocoon-optional/src/main/java/org/apache/cocoon/optional/pipeline/components/sax/fop/FopSerializer.java Tue Feb 26 13:15:08 2013
@@ -19,6 +19,10 @@
package org.apache.cocoon.optional.pipeline.components.sax.fop;
import java.io.OutputStream;
+import java.net.URL;
+import java.util.Map;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
import org.apache.cocoon.pipeline.ProcessingException;
import org.apache.cocoon.pipeline.caching.CacheKey;
@@ -30,11 +34,19 @@ import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.xmlgraphics.util.MimeConstants;
-import org.xml.sax.ContentHandler;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class FopSerializer extends AbstractSAXSerializer implements CachingPipelineComponent {
- private final static FopFactory FOP_FACTORY = FopFactory.newInstance();
+ /**
+ * This class log.
+ */
+ private static final Logger LOG = LoggerFactory.getLogger(FopSerializer.class);
+
+ private static final FopFactory FOP_FACTORY = FopFactory.newInstance();
+
+ private static final String USER_CONFIG_PATH = "userConfigPath";
private String outputFormat;
@@ -47,11 +59,13 @@ public class FopSerializer extends Abstr
/**
* Create a new FOP serializer that produces the specified mime
- *
+ *
* @param outputFormat the output's mime type
* @see {@link MimeConstants}
*/
- public FopSerializer(String outputFormat) {
+ public FopSerializer(final String outputFormat) {
+ super();
+
if (outputFormat == null) {
throw new IllegalArgumentException("The parameter 'outputFormat' mustn't be null.");
}
@@ -59,17 +73,49 @@ public class FopSerializer extends Abstr
this.outputFormat = outputFormat;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @see org.apache.cocoon.pipeline.component.PipelineComponent#setConfiguration(java.util.Map)
+ *
+ * If you want to set an user configuration on the FOP factory, just add the 'userConfigPath' sitemap parameter,
+ * whose value is relative path to the COB-INF/ path. Example:
+ *
+ * <map:serialize type="fo2pdf"> <map:parameter name="userConfigPath"
+ * value="fopconf/fop.xconf"/> </map:serialize>
+ *
+ * This permits to store the user configuration (together with the fonts you might want to load) in the cocoon block
+ * sources.
+ */
+ @Override
+ public void setConfiguration(final Map<String, ? extends Object> configuration) {
+ super.setConfiguration(configuration);
+
+ if (configuration.containsKey(USER_CONFIG_PATH)) {
+ final String userConfigPath = (String) configuration.get(USER_CONFIG_PATH);
+ final URL userConfigURL = this.getClass().getResource("/COB-INF/" + userConfigPath);
+
+ final DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
+ try {
+ final Configuration config = cfgBuilder.build(userConfigURL.openStream());
+ FOP_FACTORY.setUserConfig(config);
+ } catch (Exception e) {
+ LOG.error("User configuration not set", e);
+ }
+ }
+
+ }
+
+ @Override
public CacheKey constructCacheKey() {
return new SimpleCacheKey();
}
@Override
- public void setOutputStream(OutputStream outputStream) {
+ public void setOutputStream(final OutputStream outputStream) {
try {
- Fop fop = FOP_FACTORY.newFop(this.outputFormat, outputStream);
- ContentHandler fopContentHandler = fop.getDefaultHandler();
-
- this.setContentHandler(fopContentHandler);
+ final Fop fop = FOP_FACTORY.newFop(this.outputFormat, outputStream);
+ this.setContentHandler(fop.getDefaultHandler());
} catch (FOPException e) {
throw new ProcessingException("Impossible to initialize FOPSerializer", e);
}