You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by je...@apache.org on 2010/07/15 09:45:37 UTC

svn commit: r964334 - in /xmlgraphics/fop/trunk/test/java/org/apache/fop/threading: AvalonAdapter.java FOPTestbed.java FOProcessor.java FOProcessorImpl.java IFProcessorImpl.java Processor.java sample.cfg.xml

Author: jeremias
Date: Thu Jul 15 07:45:37 2010
New Revision: 964334

URL: http://svn.apache.org/viewvc?rev=964334&view=rev
Log:
Refactored the multi-threading harness a bit to support IF conversion.

Added:
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java   (with props)
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java   (with props)
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/Processor.java
      - copied, changed from r964313, xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessor.java
Removed:
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessor.java
Modified:
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOPTestbed.java
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessorImpl.java
    xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/sample.cfg.xml

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java?rev=964334&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java Thu Jul 15 07:45:37 2010
@@ -0,0 +1,58 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.threading;
+
+import org.apache.avalon.framework.logger.Logger;
+
+import org.apache.fop.events.Event;
+import org.apache.fop.events.EventFormatter;
+import org.apache.fop.events.EventListener;
+import org.apache.fop.events.model.EventSeverity;
+
+/**
+ * Redirects events to an Avalon logger.
+ */
+class AvalonAdapter implements EventListener {
+
+    private final Logger logger;
+    private String filename;
+
+    public AvalonAdapter(Logger logger, String filename) {
+        this.logger = logger;
+        this.filename = filename;
+    }
+
+    public void processEvent(Event event) {
+        String msg = EventFormatter.format(event);
+        EventSeverity severity = event.getSeverity();
+        if (severity == EventSeverity.INFO) {
+            //logger.info(filename + ": " + msg);
+        } else if (severity == EventSeverity.WARN) {
+            //logger.warn(filename + ": "  + msg);
+        } else if (severity == EventSeverity.ERROR) {
+            logger.error(filename + ": "  + msg);
+        } else if (severity == EventSeverity.FATAL) {
+            logger.fatalError(filename + ": "  + msg);
+        } else {
+            assert false;
+        }
+    }
+
+}
\ No newline at end of file

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/AvalonAdapter.java
------------------------------------------------------------------------------
    svn:keywords = Id

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOPTestbed.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOPTestbed.java?rev=964334&r1=964333&r2=964334&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOPTestbed.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOPTestbed.java Thu Jul 15 07:45:37 2010
@@ -56,7 +56,7 @@ public class FOPTestbed extends Abstract
     private int threads;
     private File outputDir;
     private Configuration fopCfg;
-    private FOProcessor foprocessor;
+    private Processor foprocessor;
     private boolean writeToDevNull;
 
     private int counter = 0;
@@ -74,7 +74,7 @@ public class FOPTestbed extends Abstract
         for (int i = 0; i < entries.length; i++) {
             this.taskList.add(new TaskDef(entries[i]));
         }
-        this.fopCfg = configuration.getChild("foprocessor");
+        this.fopCfg = configuration.getChild("processor");
     }
 
     /** {@inheritDoc} */
@@ -177,11 +177,11 @@ public class FOPTestbed extends Abstract
      * Creates a new FOProcessor.
      * @return the newly created instance
      */
-    public FOProcessor createFOProcessor() {
+    public Processor createFOProcessor() {
         try {
             Class clazz = Class.forName(this.fopCfg.getAttribute("class",
                     "org.apache.fop.threading.FOProcessorImpl"));
-            FOProcessor fop = (FOProcessor)clazz.newInstance();
+            Processor fop = (Processor)clazz.newInstance();
             ContainerUtil.enableLogging(fop, getLogger());
             ContainerUtil.configure(fop, this.fopCfg);
             ContainerUtil.initialize(fop);
@@ -206,13 +206,15 @@ public class FOPTestbed extends Abstract
             this.fo = cfg.getAttribute("fo", null);
             if (this.fo == null) {
                 this.xml = cfg.getAttribute("xml");
-                this.xslt = cfg.getAttribute("xslt");
-                TransformerFactory factory = TransformerFactory.newInstance();
-                Source xsltSource = new StreamSource(new File(xslt));
-                try {
-                    this.templates = factory.newTemplates(xsltSource);
-                } catch (TransformerConfigurationException tce) {
-                    throw new ConfigurationException("Invalid XSLT", tce);
+                this.xslt = cfg.getAttribute("xslt", null);
+                if (this.xslt != null) {
+                    TransformerFactory factory = TransformerFactory.newInstance();
+                    Source xsltSource = new StreamSource(new File(xslt));
+                    try {
+                        this.templates = factory.newTemplates(xsltSource);
+                    } catch (TransformerConfigurationException tce) {
+                        throw new ConfigurationException("Invalid XSLT", tce);
+                    }
                 }
             }
         }
@@ -249,9 +251,9 @@ public class FOPTestbed extends Abstract
 
         private TaskDef def;
         private int num;
-        private FOProcessor fop;
+        private Processor fop;
 
-        public Task(TaskDef def, int num, FOProcessor fop) {
+        public Task(TaskDef def, int num, Processor fop) {
             this.def = def;
             this.num = num;
             this.fop = fop;

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessorImpl.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessorImpl.java?rev=964334&r1=964333&r2=964334&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessorImpl.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessorImpl.java Thu Jul 15 07:45:37 2010
@@ -43,16 +43,12 @@ import org.apache.fop.apps.FOUserAgent;
 import org.apache.fop.apps.Fop;
 import org.apache.fop.apps.FopFactory;
 import org.apache.fop.apps.MimeConstants;
-import org.apache.fop.events.Event;
-import org.apache.fop.events.EventFormatter;
-import org.apache.fop.events.EventListener;
-import org.apache.fop.events.model.EventSeverity;
 
 /**
- * Default implementation of the FOProcessor interface using FOP.
+ * Default implementation of the {@link Processor} interface using FOP.
  */
 public class FOProcessorImpl extends AbstractLogEnabled
-            implements FOProcessor, Configurable, Initializable {
+            implements Processor, Configurable, Initializable {
 
     private FopFactory fopFactory = FopFactory.newInstance();
     private TransformerFactory factory = TransformerFactory.newInstance();
@@ -83,7 +79,8 @@ public class FOProcessorImpl extends Abs
         try {
             URL url = new URL(src.getSystemId());
             String filename = FilenameUtils.getName(url.getPath());
-            foUserAgent.getEventBroadcaster().addEventListener(new AvalonAdapter(filename));
+            foUserAgent.getEventBroadcaster().addEventListener(
+                    new AvalonAdapter(getLogger(), filename));
         } catch (MalformedURLException mfue) {
             throw new RuntimeException(mfue);
         }
@@ -107,30 +104,4 @@ public class FOProcessorImpl extends Abs
     public String getTargetFileExtension() {
         return this.fileExtension;
     }
-
-    private class AvalonAdapter implements EventListener {
-
-        private String filename;
-
-        public AvalonAdapter(String filename) {
-            this.filename = filename;
-        }
-
-        public void processEvent(Event event) {
-            String msg = EventFormatter.format(event);
-            EventSeverity severity = event.getSeverity();
-            if (severity == EventSeverity.INFO) {
-                //getLogger().info(filename + ": " + msg);
-            } else if (severity == EventSeverity.WARN) {
-                //getLogger().warn(filename + ": "  + msg);
-            } else if (severity == EventSeverity.ERROR) {
-                getLogger().error(filename + ": "  + msg);
-            } else if (severity == EventSeverity.FATAL) {
-                getLogger().fatalError(filename + ": "  + msg);
-            } else {
-                assert false;
-            }
-        }
-
-    }
 }
\ No newline at end of file

Added: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java?rev=964334&view=auto
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java (added)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java Thu Jul 15 07:45:37 2010
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.threading;
+
+import java.io.OutputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+import javax.xml.transform.Templates;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.sax.SAXResult;
+import javax.xml.transform.stream.StreamResult;
+
+import org.xml.sax.ContentHandler;
+
+import org.apache.avalon.framework.activity.Initializable;
+import org.apache.avalon.framework.configuration.Configurable;
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.logger.AbstractLogEnabled;
+import org.apache.commons.io.FilenameUtils;
+
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.apps.MimeConstants;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFException;
+import org.apache.fop.render.intermediate.IFParser;
+import org.apache.fop.render.intermediate.IFUtil;
+
+/**
+ * Implementation of the {@link Processor} interface that renders IF XML to a final output format.
+ */
+public class IFProcessorImpl extends AbstractLogEnabled
+            implements Processor, Configurable, Initializable {
+
+    private FopFactory fopFactory = FopFactory.newInstance();
+    private TransformerFactory factory = TransformerFactory.newInstance();
+    private String userconfig;
+    private String mime;
+    private String fileExtension;
+
+    /** {@inheritDoc} */
+    public void configure(Configuration configuration) throws ConfigurationException {
+        this.userconfig = configuration.getChild("userconfig").getValue(null);
+        this.mime = configuration.getChild("mime").getValue(MimeConstants.MIME_PDF);
+        this.fileExtension = configuration.getChild("extension").getValue(".pdf");
+    }
+
+    /** {@inheritDoc} */
+    public void initialize() throws Exception {
+        if (this.userconfig != null) {
+            getLogger().debug("Setting user config: " + userconfig);
+            fopFactory.setUserConfig(this.userconfig);
+        }
+    }
+
+    /** {@inheritDoc}
+     * @throws IFException */
+    public void process(Source src, Templates templates, OutputStream out)
+                throws org.apache.fop.apps.FOPException, java.io.IOException, IFException {
+        FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
+        foUserAgent.setBaseURL(src.getSystemId());
+        try {
+            URL url = new URL(src.getSystemId());
+            String filename = FilenameUtils.getName(url.getPath());
+            foUserAgent.getEventBroadcaster().addEventListener(
+                    new AvalonAdapter(getLogger(), filename));
+        } catch (MalformedURLException mfue) {
+            throw new RuntimeException(mfue);
+        }
+
+        //Setup target handler
+        IFDocumentHandler targetHandler = fopFactory.getRendererFactory().createDocumentHandler(
+                foUserAgent, mime);
+
+        //Setup fonts
+        IFUtil.setupFonts(targetHandler);
+        targetHandler.setResult(new StreamResult(out));
+
+        try {
+            Transformer transformer;
+            if (templates == null) {
+                transformer = factory.newTransformer();
+            } else {
+                transformer = templates.newTransformer();
+            }
+            IFParser parser = new IFParser();
+            ContentHandler contentHandler = parser.getContentHandler(targetHandler, foUserAgent);
+            Result res = new SAXResult(contentHandler);
+            transformer.transform(src, res);
+        } catch (TransformerException e) {
+            throw new FOPException(e);
+        }
+    }
+
+    /** {@inheritDoc} */
+    public String getTargetFileExtension() {
+        return this.fileExtension;
+    }
+
+}
\ No newline at end of file

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/IFProcessorImpl.java
------------------------------------------------------------------------------
    svn:keywords = Id

Copied: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/Processor.java (from r964313, xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessor.java)
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/Processor.java?p2=xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/Processor.java&p1=xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessor.java&r1=964313&r2=964334&rev=964334&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/FOProcessor.java (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/Processor.java Thu Jul 15 07:45:37 2010
@@ -25,9 +25,9 @@ import javax.xml.transform.Source;
 import javax.xml.transform.Templates;
 
 /**
- * Represents an FO processor.
+ * Represents a processor.
  */
-public interface FOProcessor {
+public interface Processor {
 
     /**
      * Process a file.

Modified: xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/sample.cfg.xml
URL: http://svn.apache.org/viewvc/xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/sample.cfg.xml?rev=964334&r1=964333&r2=964334&view=diff
==============================================================================
--- xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/sample.cfg.xml (original)
+++ xmlgraphics/fop/trunk/test/java/org/apache/fop/threading/sample.cfg.xml Thu Jul 15 07:45:37 2010
@@ -2,13 +2,13 @@
 <config prompt="false">
   <threads>2</threads>
   <output-dir>C:/Dev/FOP/temp/out</output-dir>
-  <foprocessor class="org.apache.fop.threading.FOProcessorImpl">
+  <processor class="org.apache.fop.threading.FOProcessorImpl">
     <!--
     <userconfig>C:/Dev/FOP/temp/userconfig.xml</userconfig>
     -->
     <mime>application/pdf</mime>
     <extension>.pdf</extension>
-  </foprocessor>
+  </processor>
   <tasks repeat="2">
     <task fo="C:/Dev/FOP/temp/helloworld.fo"/>
     <task xml="C:/Dev/FOP/temp/page-x-of-y.xml" xslt="C:/Dev/FOP/temp/page-x-of-y.xsl"/>



---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org