You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by bi...@apache.org on 2012/03/06 02:10:06 UTC
svn commit: r1297313 - in /camel/trunk: apache-camel/src/main/descriptors/
components/ components/camel-fop/ components/camel-fop/src/
components/camel-fop/src/main/ components/camel-fop/src/main/java/
components/camel-fop/src/main/java/org/ components...
Author: bibryam
Date: Tue Mar 6 01:10:05 2012
New Revision: 1297313
URL: http://svn.apache.org/viewvc?rev=1297313&view=rev
Log:
CAMEL-3551: Added new camel-fop component.
Added:
camel/trunk/components/camel-fop/
camel/trunk/components/camel-fop/pom.xml
camel/trunk/components/camel-fop/src/
camel/trunk/components/camel-fop/src/main/
camel/trunk/components/camel-fop/src/main/java/
camel/trunk/components/camel-fop/src/main/java/org/
camel/trunk/components/camel-fop/src/main/java/org/apache/
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java
camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java
camel/trunk/components/camel-fop/src/main/resources/
camel/trunk/components/camel-fop/src/main/resources/META-INF/
camel/trunk/components/camel-fop/src/main/resources/META-INF/services/
camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/
camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/
camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/
camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/
camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop
camel/trunk/components/camel-fop/src/test/
camel/trunk/components/camel-fop/src/test/data/
camel/trunk/components/camel-fop/src/test/data/conf/
camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml
camel/trunk/components/camel-fop/src/test/data/xml/
camel/trunk/components/camel-fop/src/test/data/xml/data.xml
camel/trunk/components/camel-fop/src/test/java/
camel/trunk/components/camel-fop/src/test/java/org/
camel/trunk/components/camel-fop/src/test/java/org/apache/
camel/trunk/components/camel-fop/src/test/java/org/apache/camel/
camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/
camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/
camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java
camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java
camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java
camel/trunk/components/camel-fop/src/test/resources/
camel/trunk/components/camel-fop/src/test/resources/xslt/
camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl
Modified:
camel/trunk/apache-camel/src/main/descriptors/common-bin.xml
camel/trunk/components/pom.xml
camel/trunk/parent/pom.xml
camel/trunk/platforms/karaf/features/pom.xml
camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties
camel/trunk/platforms/karaf/features/src/main/resources/features.xml
Modified: camel/trunk/apache-camel/src/main/descriptors/common-bin.xml
URL: http://svn.apache.org/viewvc/camel/trunk/apache-camel/src/main/descriptors/common-bin.xml?rev=1297313&r1=1297312&r2=1297313&view=diff
==============================================================================
--- camel/trunk/apache-camel/src/main/descriptors/common-bin.xml (original)
+++ camel/trunk/apache-camel/src/main/descriptors/common-bin.xml Tue Mar 6 01:10:05 2012
@@ -62,6 +62,7 @@
<include>org.apache.camel:camel-eventadmin</include>
<include>org.apache.camel:camel-exec</include>
<include>org.apache.camel:camel-flatpack</include>
+ <include>org.apache.camel:camel-fop</include>
<include>org.apache.camel:camel-freemarker</include>
<include>org.apache.camel:camel-ftp</include>
<include>org.apache.camel:camel-gae</include>
Added: camel/trunk/components/camel-fop/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/pom.xml?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/pom.xml (added)
+++ camel/trunk/components/camel-fop/pom.xml Tue Mar 6 01:10:05 2012
@@ -0,0 +1,75 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-parent</artifactId>
+ <version>2.10-SNAPSHOT</version>
+ <relativePath>../../parent</relativePath>
+ </parent>
+
+ <artifactId>camel-fop</artifactId>
+ <packaging>bundle</packaging>
+ <name>Camel :: FOP</name>
+ <description>Camel FOP support</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-core</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.xmlgraphics</groupId>
+ <artifactId>fop</artifactId>
+ <version>${fop-version}</version>
+ </dependency>
+
+ <!-- for testing -->
+ <dependency>
+ <groupId>org.apache.camel</groupId>
+ <artifactId>camel-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.pdfbox</groupId>
+ <artifactId>pdfbox</artifactId>
+ <version>1.6.0</version>
+ <scope>test</scope>
+ </dependency>
+
+ <!-- logging -->
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.slf4j</groupId>
+ <artifactId>slf4j-log4j12</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
Added: camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java (added)
+++ camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopComponent.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,35 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.impl.DefaultComponent;
+
+/**
+ * Represents the component that manages {@link FopEndpoint}.
+ */
+public class FopComponent extends DefaultComponent {
+
+ protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters)
+ throws Exception {
+ FopEndpoint endpoint = new FopEndpoint(uri, this, remaining);
+ setProperties(endpoint, parameters);
+ return endpoint;
+ }
+}
Added: camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java (added)
+++ camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopConstants.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,23 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+public interface FopConstants {
+ String CAMEL_FOP_RENDER = "CamelFop.Render.";
+ String CAMEL_FOP_ENCRYPT = "CamelFop.Encrypt.";
+ String CAMEL_FOP_OUTPUT_FORMAT = "CamelFop.Output.Format";
+}
Added: camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java (added)
+++ camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopEndpoint.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,86 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+import java.io.IOException;
+
+import org.xml.sax.SAXException;
+
+import org.apache.avalon.framework.configuration.Configuration;
+import org.apache.avalon.framework.configuration.ConfigurationException;
+import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
+import org.apache.camel.Consumer;
+import org.apache.camel.Processor;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultEndpoint;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FopFactory;
+
+/**
+ * Represents a Fop endpoint.
+ */
+public class FopEndpoint extends DefaultEndpoint {
+ private String userConfigURL;
+ private FopFactory fopFactory;
+ private String remaining;
+
+ public FopEndpoint(String uri, FopComponent component, String remaining) {
+ super(uri, component);
+ this.remaining = remaining;
+ this.fopFactory = FopFactory.newInstance();
+ }
+
+ public Producer createProducer() throws Exception {
+ return new FopProducer(this, fopFactory, remaining);
+ }
+
+ public Consumer createConsumer(Processor processor) throws Exception {
+ throw new UnsupportedOperationException("Consumer not supported for FOP endpoint");
+ }
+
+ public boolean isSingleton() {
+ return true;
+ }
+
+ FopFactory getFopFactory() {
+ return fopFactory;
+ }
+
+ public void setUserConfigURL(String userConfigURL) {
+ this.userConfigURL = userConfigURL;
+ updateConfigurations();
+ }
+
+ private void updateConfigurations() {
+ DefaultConfigurationBuilder cfgBuilder = new DefaultConfigurationBuilder();
+ Configuration cfg;
+ try {
+ cfg = cfgBuilder.buildFromFile(this.userConfigURL);
+ } catch (SAXException e) {
+ throw new RuntimeException(e);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ } catch (ConfigurationException e) {
+ throw new RuntimeException(e);
+ }
+ try {
+ fopFactory.setUserConfig(cfg);
+ } catch (FOPException e) {
+ throw new RuntimeException(e);
+ }
+ }
+}
Added: camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java (added)
+++ camel/trunk/components/camel-fop/src/main/java/org/apache/camel/component/fop/FopProducer.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,106 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+import java.io.ByteArrayOutputStream;
+import java.io.OutputStream;
+import java.util.Map;
+import javax.xml.transform.Result;
+import javax.xml.transform.Source;
+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.StreamSource;
+
+import org.apache.camel.Exchange;
+import org.apache.camel.RuntimeExchangeException;
+import org.apache.camel.impl.DefaultProducer;
+import org.apache.camel.util.IntrospectionSupport;
+import org.apache.fop.apps.FOPException;
+import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.apps.Fop;
+import org.apache.fop.apps.FopFactory;
+import org.apache.fop.pdf.PDFEncryptionParams;
+
+/**
+ * The Fop producer.
+ */
+public class FopProducer extends DefaultProducer {
+ private final FopFactory fopFactory;
+ private final String remaining;
+
+ public FopProducer(FopEndpoint endpoint, FopFactory fopFactory, String remaining) {
+ super(endpoint);
+ this.fopFactory = fopFactory;
+ this.remaining = remaining;
+ }
+
+ public void process(Exchange exchange) throws Exception {
+ FOUserAgent userAgent = fopFactory.newFOUserAgent();
+ Map<String, Object> headers = exchange.getIn().getHeaders();
+ setRenderParameters(userAgent, headers);
+ setEncryptionParameters(userAgent, headers);
+
+ String outputFormat = getOutputFormat(exchange);
+ Source src = exchange.getIn().getBody(StreamSource.class);
+
+ OutputStream out = transform(userAgent, outputFormat, src);
+ exchange.getOut().setBody(out);
+ }
+
+ private String getOutputFormat(Exchange exchange) {
+ String outputFormat = exchange.getIn()
+ .getHeader(FopConstants.CAMEL_FOP_OUTPUT_FORMAT, this.remaining, String.class);
+ if (outputFormat == null) {
+ throw new RuntimeExchangeException("Missing output format", exchange);
+ }
+
+ return outputFormat;
+ }
+
+ private OutputStream transform(FOUserAgent userAgent, String outputFormat, Source src)
+ throws FOPException, TransformerException {
+ OutputStream out = new ByteArrayOutputStream();
+ Fop fop = fopFactory.newFop(outputFormat, userAgent, out);
+ TransformerFactory factory = TransformerFactory.newInstance();
+ Transformer transformer = factory.newTransformer();
+
+ Result res = new SAXResult(fop.getDefaultHandler());
+ transformer.transform(src, res);
+ return out;
+ }
+
+ private void setEncryptionParameters(FOUserAgent userAgent, Map<String, Object> headers)
+ throws Exception {
+ Map<String, Object> encryptionParameters = IntrospectionSupport
+ .extractProperties(headers, FopConstants.CAMEL_FOP_ENCRYPT);
+ if (!encryptionParameters.isEmpty()) {
+ PDFEncryptionParams encryptionParams = new PDFEncryptionParams();
+ IntrospectionSupport.setProperties(encryptionParams, encryptionParameters);
+ userAgent.getRendererOptions().put("encryption-params", encryptionParams);
+ }
+ }
+
+ private void setRenderParameters(FOUserAgent userAgent, Map<String, Object> headers) throws Exception {
+ Map<String, Object> parameters = IntrospectionSupport
+ .extractProperties(headers, FopConstants.CAMEL_FOP_RENDER);
+ if (!parameters.isEmpty()) {
+ IntrospectionSupport.setProperties(userAgent, parameters);
+ }
+ }
+}
Added: camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop (added)
+++ camel/trunk/components/camel-fop/src/main/resources/META-INF/services/org/apache/camel/component/fop Tue Mar 6 01:10:05 2012
@@ -0,0 +1,18 @@
+#
+# 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.
+#
+
+class=org.apache.camel.component.fop.FopComponent
Added: camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml (added)
+++ camel/trunk/components/camel-fop/src/test/data/conf/testcfg.xml Tue Mar 6 01:10:05 2012
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<fop version="1.0">
+
+ <!-- Strict user configuration -->
+ <strict-configuration>true</strict-configuration>
+
+ <!-- Strict FO validation -->
+ <strict-validation>true</strict-validation>
+
+ <!-- Base URL for resolving relative URLs -->
+ <base>./</base>
+
+ <!-- Font Base URL for resolving relative font URLs -->
+ <font-base>./</font-base>
+
+ <!-- Source resolution in dpi (dots/pixels per inch) for determining the size of pixels in SVG and bitmap images, default: 72dpi -->
+ <source-resolution>96</source-resolution>
+ <!-- Target resolution in dpi (dots/pixels per inch) for specifying the target resolution for generated bitmaps, default: 72dpi -->
+ <target-resolution>72</target-resolution>
+
+ <!-- default page-height and page-width, in case
+ value is specified as auto -->
+ <default-page-settings height="11in" width="8.26in"/>
+
+ <!-- etc. etc..... -->
+</fop>
Added: camel/trunk/components/camel-fop/src/test/data/xml/data.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/data/xml/data.xml?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/test/data/xml/data.xml (added)
+++ camel/trunk/components/camel-fop/src/test/data/xml/data.xml Tue Mar 6 01:10:05 2012
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<projectteam>
+ <projectname>The Killer Application</projectname>
+ <member>
+ <name>John Doe</name>
+ <function>lead</function>
+ <email>jon.doe@killerapp.fun</email>
+ </member>
+ <member>
+ <name>Paul Coder</name>
+ <function>dev</function>
+ <email>paul.coder@killerapp.fun</email>
+ </member>
+ <member>
+ <name>Max Hacker</name>
+ <function>dev</function>
+ <email>max.hacker@killerapp.fun</email>
+ </member>
+ <member>
+ <name>Donna Book</name>
+ <function>doc</function>
+ <email>donna.book@killerapp.fun</email>
+ </member>
+ <member>
+ <name>Henry Tester</name>
+ <function>qa</function>
+ <email>henry.tester@killerapp.fun</email>
+ </member>
+</projectteam>
Added: camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java (added)
+++ camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopComponentTest.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,67 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+import java.io.FileInputStream;
+
+import org.apache.camel.EndpointInject;
+import org.apache.camel.Exchange;
+import org.apache.camel.Produce;
+import org.apache.camel.ProducerTemplate;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.component.mock.MockEndpoint;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.junit.Test;
+
+public class FopComponentTest extends CamelTestSupport {
+
+ @EndpointInject(uri = "mock:result")
+ protected MockEndpoint resultEndpoint;
+
+ @Produce(uri = "direct:start")
+ protected ProducerTemplate template;
+
+ @Test
+ public void createPdfUsingXmlDataAndXsltTransformation() throws Exception {
+ resultEndpoint.expectedMessageCount(1);
+ FileInputStream inputStream = new FileInputStream("src/test/data/xml/data.xml");
+
+ template.sendBody(inputStream);
+ resultEndpoint.assertIsSatisfied();
+
+ PDDocument document = PDDocument.load("target/data/result.pdf");
+ String pdfText = FopHelper.extractTextFrom(document);
+ assertTrue(pdfText.contains("Project")); //from xsl template
+ assertTrue(pdfText.contains("John Doe")); //from data xml
+ }
+
+ @Override
+ protected RouteBuilder createRouteBuilder() {
+ return new RouteBuilder() {
+ public void configure() {
+ from("direct:start")
+ .to("xslt:xslt/template.xsl")
+ .to("fop:application/pdf")
+ .setHeader(Exchange.FILE_NAME, constant("result.pdf"))
+ .to("file:target/data")
+ .to("mock:result");
+
+ }
+ };
+ }
+}
Added: camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java (added)
+++ camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopEndpointTest.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,101 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.Exchange;
+import org.apache.camel.Producer;
+import org.apache.camel.impl.DefaultExchange;
+import org.apache.camel.test.junit4.CamelTestSupport;
+import org.apache.fop.apps.MimeConstants;
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.junit.Test;
+
+public class FopEndpointTest extends CamelTestSupport {
+
+ @Test
+ public void generatePdfFromXslfoWithSpecificText() throws Exception {
+ Endpoint endpoint = context().getEndpoint("fop:application/pdf");
+ Producer producer = endpoint.createProducer();
+ Exchange exchange = new DefaultExchange(context);
+ exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test Content"));
+
+ producer.process(exchange);
+ PDDocument document = getDocumentFrom(exchange);
+ String content = FopHelper.extractTextFrom(document);
+ assertEquals("Test Content", content);
+ }
+
+ @Test
+ public void specifyCustomUserConfigurationFile() throws Exception {
+ FopEndpoint customConfiguredEndpoint = context()
+ .getEndpoint("fop:application/pdf?userConfigURL=src/test/data/conf/testcfg.xml",
+ FopEndpoint.class);
+ float customSourceResolution = customConfiguredEndpoint.getFopFactory().getSourceResolution();
+ assertEquals(96.0, customSourceResolution, 0.1);
+ }
+
+ @Test
+ public void setPDFRenderingMetadataPerDocument() throws Exception {
+ Endpoint endpoint = context().getEndpoint("fop:application/pdf");
+ Producer producer = endpoint.createProducer();
+ Exchange exchange = new DefaultExchange(context);
+ exchange.getIn().setHeader("CamelFop.Render.Creator", "Test User");
+ exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test Content"));
+
+ producer.process(exchange);
+ PDDocument document = getDocumentFrom(exchange);
+ String creator = FopHelper.getDocumentMetadataValue(document, COSName.CREATOR);
+ assertEquals("Test User", creator);
+ }
+
+ @Test
+ public void encryptPdfWithUserPassword() throws Exception {
+ Endpoint endpoint = context().getEndpoint("fop:application/pdf");
+ Producer producer = endpoint.createProducer();
+ Exchange exchange = new DefaultExchange(context);
+ exchange.getIn().setHeader("CamelFop.Encrypt.userPassword", "secret");
+ exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test Content"));
+
+ producer.process(exchange);
+ PDDocument document = getDocumentFrom(exchange);
+ assertTrue(document.isEncrypted());
+ }
+
+ @Test
+ public void overridePdfOutputFormatToPlainText() throws Exception {
+ String defaultOutputFormat = "application/pdf";
+ Endpoint endpoint = context().getEndpoint("fop:" + defaultOutputFormat);
+ Producer producer = endpoint.createProducer();
+ Exchange exchange = new DefaultExchange(context);
+ exchange.getIn().setHeader(FopConstants.CAMEL_FOP_OUTPUT_FORMAT, MimeConstants.MIME_PLAIN_TEXT);
+ exchange.getIn().setBody(FopHelper.decorateTextWithXSLFO("Test Content"));
+
+ producer.process(exchange);
+ String plainText = exchange.getOut().getBody(String.class).trim();
+ assertEquals("Test Content", plainText);
+ }
+
+ private PDDocument getDocumentFrom(Exchange exchange) throws IOException {
+ InputStream inputStream = exchange.getOut().getBody(InputStream.class);
+ return PDDocument.load(inputStream);
+ }
+}
Added: camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java (added)
+++ camel/trunk/components/camel-fop/src/test/java/org/apache/camel/component/fop/FopHelper.java Tue Mar 6 01:10:05 2012
@@ -0,0 +1,75 @@
+/**
+ * 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.
+ */
+package org.apache.camel.component.fop;
+
+import java.io.IOException;
+import java.io.StringWriter;
+import java.io.Writer;
+
+import org.apache.pdfbox.cos.COSName;
+import org.apache.pdfbox.exceptions.CryptographyException;
+import org.apache.pdfbox.pdmodel.PDDocument;
+import org.apache.pdfbox.pdmodel.PDDocumentInformation;
+import org.apache.pdfbox.pdmodel.encryption.BadSecurityHandlerException;
+import org.apache.pdfbox.pdmodel.encryption.DecryptionMaterial;
+import org.apache.pdfbox.pdmodel.encryption.StandardDecryptionMaterial;
+import org.apache.pdfbox.util.PDFTextStripper;
+
+public final class FopHelper {
+ private FopHelper() {
+ }
+
+ //decryption requires additional libraries
+ public static void decryptPDFN(PDDocument document, String password) throws
+ IOException, CryptographyException, BadSecurityHandlerException {
+ if (document.isEncrypted()) {
+ DecryptionMaterial decryptionMaterial = new StandardDecryptionMaterial(password);
+ document.openProtection(decryptionMaterial);
+ } else {
+ throw new RuntimeException("Document not encrypted");
+ }
+ }
+
+ public static String extractTextFrom(PDDocument document) throws IOException {
+ Writer output = new StringWriter();
+ PDFTextStripper stripper = new PDFTextStripper();
+ stripper.writeText(document, output);
+ return output.toString().trim();
+ }
+
+ public static String getDocumentMetadataValue(PDDocument document, COSName name) {
+ PDDocumentInformation info = document.getDocumentInformation();
+ return info.getDictionary().getString(name);
+ }
+
+ public static String decorateTextWithXSLFO(String text) {
+ return "<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">\n"
+ + " <fo:layout-master-set>\n"
+ + " <fo:simple-page-master master-name=\"only\">\n"
+ + " <fo:region-body region-name=\"xsl-region-body\" margin=\"0.7in\" padding=\"0\" />\n"
+ + " <fo:region-before region-name=\"xsl-region-before\" extent=\"0.7in\" />\n"
+ + " <fo:region-after region-name=\"xsl-region-after\" extent=\"0.7in\" />\n"
+ + " </fo:simple-page-master>\n"
+ + " </fo:layout-master-set>\n"
+ + " <fo:page-sequence master-reference=\"only\">\n"
+ + " <fo:flow flow-name=\"xsl-region-body\">\n"
+ + " <fo:block>" + text + "</fo:block>\n"
+ + " </fo:flow>\n"
+ + " </fo:page-sequence>\n"
+ + "</fo:root>";
+ }
+}
Added: camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl?rev=1297313&view=auto
==============================================================================
--- camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl (added)
+++ camel/trunk/components/camel-fop/src/test/resources/xslt/template.xsl Tue Mar 6 01:10:05 2012
@@ -0,0 +1,82 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<xsl:stylesheet version="1.1" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" exclude-result-prefixes="fo">
+ <xsl:output method="xml" version="1.0" omit-xml-declaration="no" indent="yes"/>
+ <xsl:param name="versionParam" select="'1.0'"/>
+ <!-- ========================= -->
+ <!-- root element: projectteam -->
+ <!-- ========================= -->
+ <xsl:template match="projectteam">
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="simpleA4">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block font-size="16pt" font-weight="bold" space-after="5mm">Project: <xsl:value-of select="projectname"/>
+
+ </fo:block>
+ <fo:block font-size="12pt" space-after="5mm">Version <xsl:value-of select="$versionParam"/>
+ </fo:block>
+ <fo:block font-size="10pt">
+ <fo:table table-layout="fixed" width="100%" border-collapse="separate">
+ <fo:table-column column-width="4cm"/>
+ <fo:table-column column-width="4cm"/>
+ <fo:table-column column-width="5cm"/>
+
+ <fo:table-body>
+ <xsl:apply-templates select="member"/>
+ </fo:table-body>
+ </fo:table>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </xsl:template>
+
+ <!-- ========================= -->
+ <!-- child element: member -->
+ <!-- ========================= -->
+ <xsl:template match="member">
+ <fo:table-row>
+ <xsl:if test="function = 'lead'">
+ <xsl:attribute name="font-weight">bold</xsl:attribute>
+ </xsl:if>
+
+ <fo:table-cell>
+ <fo:block>
+ <xsl:value-of select="name"/>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:value-of select="function"/>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>
+ <xsl:value-of select="email"/>
+ </fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </xsl:template>
+</xsl:stylesheet>
+
Modified: camel/trunk/components/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/components/pom.xml?rev=1297313&r1=1297312&r2=1297313&view=diff
==============================================================================
--- camel/trunk/components/pom.xml (original)
+++ camel/trunk/components/pom.xml Tue Mar 6 01:10:05 2012
@@ -76,6 +76,7 @@
<module>camel-eventadmin</module>
<module>camel-exec</module>
<module>camel-flatpack</module>
+ <module>camel-fop</module>
<module>camel-freemarker</module>
<module>camel-ftp</module>
<module>camel-gae</module>
Modified: camel/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/parent/pom.xml?rev=1297313&r1=1297312&r2=1297313&view=diff
==============================================================================
--- camel/trunk/parent/pom.xml (original)
+++ camel/trunk/parent/pom.xml Tue Mar 6 01:10:05 2012
@@ -69,6 +69,7 @@
<easymock-version>3.0</easymock-version>
<ehcache-bundle-version>2.4.3_1</ehcache-bundle-version>
<flatpack-version>3.2.0_1</flatpack-version>
+ <fop-version>1.0</fop-version>
<ftpserver-version>1.0.5</ftpserver-version>
<freemarker-version>2.3.18</freemarker-version>
<geronimo-el-spec-version>1.0.1</geronimo-el-spec-version>
@@ -391,6 +392,11 @@
</dependency>
<dependency>
<groupId>org.apache.camel</groupId>
+ <artifactId>camel-fop</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.camel</groupId>
<artifactId>camel-freemarker</artifactId>
<version>${project.version}</version>
</dependency>
Modified: camel/trunk/platforms/karaf/features/pom.xml
URL: http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/pom.xml?rev=1297313&r1=1297312&r2=1297313&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/features/pom.xml (original)
+++ camel/trunk/platforms/karaf/features/pom.xml Tue Mar 6 01:10:05 2012
@@ -60,6 +60,7 @@
<flatpack-bundle-version>3.2.0_2</flatpack-bundle-version>
<felix-configadmin-version>1.2.4</felix-configadmin-version>
<felix-framework-version>2.0.5</felix-framework-version>
+ <fop-bundle-version>1.0_2</fop-bundle-version>
<freemarker-bundle-version>2.3.18_1</freemarker-bundle-version>
<geronimo-el-version>1.0.1</geronimo-el-version>
<geronimo-ws-metadata-spec-version>1.1.3</geronimo-ws-metadata-spec-version>
Modified: camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties
URL: http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties?rev=1297313&r1=1297312&r2=1297313&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties (original)
+++ camel/trunk/platforms/karaf/features/src/main/resources/bundles.properties Tue Mar 6 01:10:05 2012
@@ -40,6 +40,7 @@ org.apache.servicemix.bundles/org.apache
org.apache.servicemix.bundles/org.apache.servicemix.bundles.commons-io/${commons-io-bundle-version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.dom4j/${dom4j-bundle-version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.flatpack/${flatpack-bundle-version}/jar
+org.apache.servicemix.bundles/org.apache.servicemix.bundles.fop/${fop-bundle-version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.freemarker/${freemarker-bundle-version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.hamcrest/${hamcrest-bundle-version}/jar
org.apache.servicemix.bundles/org.apache.servicemix.bundles.hapi/${hapi-bundle-version}/jar
Modified: camel/trunk/platforms/karaf/features/src/main/resources/features.xml
URL: http://svn.apache.org/viewvc/camel/trunk/platforms/karaf/features/src/main/resources/features.xml?rev=1297313&r1=1297312&r2=1297313&view=diff
==============================================================================
--- camel/trunk/platforms/karaf/features/src/main/resources/features.xml (original)
+++ camel/trunk/platforms/karaf/features/src/main/resources/features.xml Tue Mar 6 01:10:05 2012
@@ -276,6 +276,11 @@
<bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.flatpack/${flatpack-bundle-version}</bundle>
<bundle>mvn:org.apache.camel/camel-flatpack/${project.version}</bundle>
</feature>
+ <feature name='camel-fop' version='${pom.version}' resolver='(obr)' start-level='50'>
+ <feature version='${project.version}'>camel-core</feature>
+ <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.fop/${fop-bundle-version}</bundle>
+ <bundle>mvn:org.apache.camel/camel-fop/${project.version}</bundle>
+ </feature>
<feature name='camel-freemarker' version='${project.version}' resolver='(obr)' start-level='50'>
<feature version='${project.version}'>camel-core</feature>
<bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.freemarker/${freemarker-bundle-version}</bundle>