Updated Branches: refs/heads/master edf0e1d35 -> 494af0005
CAMEL-6887 Supporting to set the ContentMetadata of the Payload object through message header Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/494af000 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/494af000 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/494af000 Branch: refs/heads/master Commit: 494af000565e256281091850688a632f7c15ec3c Parents: 626a5ab Author: Willem Jiang <ningji...@apache.org> Authored: Wed Oct 23 21:39:53 2013 +0800 Committer: Willem Jiang <ningji...@apache.org> Committed: Wed Oct 23 21:41:47 2013 +0800 ---------------------------------------------------------------------- .../component/jclouds/JcloudsConstants.java | 5 +++ .../jclouds/JcloudsPayloadConverter.java | 42 +++++++++++++++++++- 2 files changed, 45 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/494af000/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsConstants.java ---------------------------------------------------------------------- diff --git a/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsConstants.java b/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsConstants.java index fd15f86..e5481ef 100644 --- a/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsConstants.java +++ b/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsConstants.java @@ -34,6 +34,11 @@ public final class JcloudsConstants { public static final String CREATE_NODE = "CamelJcloudsCreateNode"; public static final String DESTROY_NODE = "CamelJcloudsDestroyNode"; public static final String RUN_SCRIPT = "CamelJcloudsRunScript"; + + public static final String CONTENT_LANGUAGE = "CamelJcloudsContentLanguage"; + public static final String CONTENT_ENCODING = "CamelJcloudsContentEncoding"; + public static final String CONTENT_DISPOSITION = "CamelJcloudsContentDisposition"; + public static final String PAYLOAD_EXPIRES = "CamelJcloudsPayloadExpires"; public static final String IMAGE_ID = "CamelJcloudsImageId"; public static final String LOCATION_ID = "CamelJcloudsLocationId"; http://git-wip-us.apache.org/repos/asf/camel/blob/494af000/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java ---------------------------------------------------------------------- diff --git a/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java b/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java index 11e904b..57a9269 100644 --- a/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java +++ b/components/camel-jclouds/src/main/java/org/apache/camel/component/jclouds/JcloudsPayloadConverter.java @@ -19,6 +19,8 @@ package org.apache.camel.component.jclouds; import java.io.File; import java.io.IOException; import java.io.InputStream; +import java.util.Date; + import javax.xml.transform.stream.StreamSource; import com.google.common.io.ByteStreams; import com.google.common.io.InputSupplier; @@ -31,6 +33,7 @@ import org.apache.camel.converter.stream.CachedOutputStream; import org.apache.camel.converter.stream.StreamSourceCache; import org.apache.camel.spi.TypeConverterRegistry; import org.apache.camel.util.IOHelper; +import org.apache.camel.util.ObjectHelper; import org.jclouds.io.Payload; import org.jclouds.io.payloads.ByteArrayPayload; import org.jclouds.io.payloads.FilePayload; @@ -58,6 +61,40 @@ public final class JcloudsPayloadConverter { public static Payload toPayload(File file) { return new FilePayload(file); } + + protected static Payload setContentMetadata(Payload payload, Exchange exchange) { + // Just add an NPE check on the payload + if (exchange == null) { + return payload; + } + + String contentType = exchange.getIn().getHeader(Exchange.CONTENT_TYPE, String.class); + String contentEncoding = exchange.getIn().getHeader(Exchange.CONTENT_ENCODING, String.class); + String contentDisposition = exchange.getIn().getHeader(JcloudsConstants.CONTENT_DISPOSITION, String.class); + String contentLanguage = exchange.getIn().getHeader(JcloudsConstants.CONTENT_LANGUAGE, String.class); + Date payloadExpires = exchange.getIn().getHeader(JcloudsConstants.PAYLOAD_EXPIRES, Date.class); + + if (ObjectHelper.isNotEmpty(contentType)) { + payload.getContentMetadata().setContentType(contentType); + } + + if (ObjectHelper.isNotEmpty(contentEncoding)) { + payload.getContentMetadata().setContentEncoding(contentEncoding); + } + + if (ObjectHelper.isNotEmpty(contentDisposition)) { + payload.getContentMetadata().setContentDisposition(contentDisposition); + } + + if (ObjectHelper.isNotEmpty(contentLanguage)) { + payload.getContentMetadata().setContentLanguage(contentLanguage); + } + + if (ObjectHelper.isNotEmpty(payloadExpires)) { + payload.getContentMetadata().setExpires(payloadExpires); + } + return payload; + } @Converter public static Payload toPayload(InputStream is, Exchange exchange) throws IOException { @@ -76,11 +113,11 @@ public final class JcloudsPayloadConverter { @Converter public static Payload toPayload(StreamSource source, Exchange exchange) throws IOException { - return toPayload(new StreamSourceCache(source, exchange)); + return toPayload(new StreamSourceCache(source, exchange), exchange); } @Converter - public static Payload toPayload(final StreamSourceCache cache) throws IOException { + public static Payload toPayload(final StreamSourceCache cache, Exchange exchange) throws IOException { long contentLength = ByteStreams.length(new InputSupplier<InputStream>() { @Override public InputStream getInput() throws IOException { @@ -90,6 +127,7 @@ public final class JcloudsPayloadConverter { cache.reset(); InputStreamPayload payload = new InputStreamPayload(cache.getInputStream()); payload.getContentMetadata().setContentLength(contentLength); + setContentMetadata(payload, exchange); return payload; }