001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 package org.apache.camel.builder; 018 019 import java.util.zip.Deflater; 020 021 import org.w3c.dom.Node; 022 023 import org.apache.camel.model.DataFormatDefinition; 024 import org.apache.camel.model.ProcessorDefinition; 025 import org.apache.camel.model.dataformat.ArtixDSContentType; 026 import org.apache.camel.model.dataformat.ArtixDSDataFormat; 027 import org.apache.camel.model.dataformat.CsvDataFormat; 028 import org.apache.camel.model.dataformat.GzipDataFormat; 029 import org.apache.camel.model.dataformat.HL7DataFormat; 030 import org.apache.camel.model.dataformat.JaxbDataFormat; 031 import org.apache.camel.model.dataformat.JsonDataFormat; 032 import org.apache.camel.model.dataformat.JsonLibrary; 033 import org.apache.camel.model.dataformat.RssDataFormat; 034 import org.apache.camel.model.dataformat.SerializationDataFormat; 035 import org.apache.camel.model.dataformat.StringDataFormat; 036 import org.apache.camel.model.dataformat.TidyMarkupDataFormat; 037 import org.apache.camel.model.dataformat.XMLBeansDataFormat; 038 import org.apache.camel.model.dataformat.XMLSecurityDataFormat; 039 import org.apache.camel.model.dataformat.XStreamDataFormat; 040 import org.apache.camel.model.dataformat.ZipDataFormat; 041 042 /** 043 * An expression for constructing the different possible {@link org.apache.camel.spi.DataFormat} 044 * options. 045 * 046 * @version $Revision: 782535 $ 047 */ 048 public class DataFormatClause<T extends ProcessorDefinition> { 049 private final T processorType; 050 private final Operation operation; 051 052 /** 053 * {@link org.apache.camel.spi.DataFormat} operations. 054 */ 055 public enum Operation { 056 Marshal, Unmarshal 057 } 058 059 public DataFormatClause(T processorType, Operation operation) { 060 this.processorType = processorType; 061 this.operation = operation; 062 } 063 064 /** 065 * Uses the 066 * <a href="http://camel.apache.org/artix-data-services.html">Artix Data Services</a> 067 * data format for dealing with lots of different message formats such as SWIFT etc. 068 */ 069 public T artixDS() { 070 return dataFormat(new ArtixDSDataFormat()); 071 } 072 073 /** 074 * Uses the 075 * <a href="http://camel.apache.org/artix-data-services.html">Artix Data Services</a> 076 * data format with the specified type of ComplexDataObject 077 * for marshalling and unmarshalling messages using the dataObject's default Source and Sink. 078 */ 079 public T artixDS(Class<?> dataObjectType) { 080 return dataFormat(new ArtixDSDataFormat(dataObjectType)); 081 } 082 083 084 /** 085 * Uses the 086 * <a href="http://camel.apache.org/artix-data-services.html">Artix Data Services</a> 087 * data format with the specified type of ComplexDataObject 088 * for marshalling and unmarshalling messages using the dataObject's default Source and Sink. 089 */ 090 public T artixDS(Class<?> elementType, ArtixDSContentType contentType) { 091 return dataFormat(new ArtixDSDataFormat(elementType, contentType)); 092 } 093 094 /** 095 * Uses the 096 * <a href="http://camel.apache.org/artix-data-services.html">Artix Data Services</a> 097 * data format with the specified content type 098 * for marshalling and unmarshalling messages 099 */ 100 public T artixDS(ArtixDSContentType contentType) { 101 return dataFormat(new ArtixDSDataFormat(contentType)); 102 } 103 104 /** 105 * Uses the CSV data format 106 */ 107 public T csv() { 108 return dataFormat(new CsvDataFormat()); 109 } 110 111 /** 112 * Uses the HL7 data format 113 */ 114 public T hl7() { 115 return dataFormat(new HL7DataFormat()); 116 } 117 118 /** 119 * Uses the JAXB data format 120 */ 121 public T jaxb() { 122 return dataFormat(new JaxbDataFormat()); 123 } 124 125 /** 126 * Uses the JAXB data format turning pretty printing on or off 127 */ 128 public T jaxb(boolean prettyPrint) { 129 return dataFormat(new JaxbDataFormat(prettyPrint)); 130 } 131 132 /** 133 * Uses the RSS data format 134 */ 135 public T rss() { 136 return dataFormat(new RssDataFormat()); 137 } 138 139 /** 140 * Uses the Java Serialization data format 141 */ 142 public T serialization() { 143 return dataFormat(new SerializationDataFormat()); 144 } 145 146 /** 147 * Uses the String data format 148 */ 149 public T string() { 150 return string(null); 151 } 152 153 /** 154 * Uses the String data format supporting encoding using given charset 155 */ 156 public T string(String charset) { 157 StringDataFormat sdf = new StringDataFormat(); 158 sdf.setCharset(charset); 159 return dataFormat(sdf); 160 } 161 162 /** 163 * Uses the JAXB data format 164 */ 165 public T xmlBeans() { 166 return dataFormat(new XMLBeansDataFormat()); 167 } 168 169 /** 170 * Return WellFormed HTML (an XML Document) either 171 * {@link java.lang.String} or {@link org.w3c.dom.Node} 172 */ 173 public T tidyMarkup(Class<?> dataObjectType) { 174 return dataFormat(new TidyMarkupDataFormat(dataObjectType)); 175 } 176 177 /** 178 * Return TidyMarkup in the default format 179 * as {@link org.w3c.dom.Node} 180 */ 181 public T tidyMarkup() { 182 return dataFormat(new TidyMarkupDataFormat(Node.class)); 183 } 184 185 186 /** 187 * Uses the XStream data format 188 */ 189 public T xstream() { 190 return dataFormat(new XStreamDataFormat()); 191 } 192 193 /** 194 * Uses the JSON data format using the XStream json library 195 */ 196 public T json() { 197 return dataFormat(new JsonDataFormat()); 198 } 199 200 /** 201 * Uses the JSON data format 202 * 203 * @param library the json library to use 204 */ 205 public T json(JsonLibrary library) { 206 return dataFormat(new JsonDataFormat(library)); 207 } 208 209 /** 210 * Uses the JSON data format 211 * 212 * @param type the json type to use 213 * @param unmarshalType unmarshal type for json jackson type 214 */ 215 public T json(JsonLibrary type, Class<?> unmarshalType) { 216 JsonDataFormat json = new JsonDataFormat(type); 217 json.setUnmarshalType(unmarshalType); 218 return dataFormat(json); 219 } 220 221 /** 222 * Uses the XML Security data format 223 */ 224 public T secureXML() { 225 XMLSecurityDataFormat xsdf = new XMLSecurityDataFormat(); 226 return dataFormat(xsdf); 227 } 228 229 /** 230 * Uses the XML Security data format 231 */ 232 public T secureXML(String secureTag, boolean secureTagContents) { 233 XMLSecurityDataFormat xsdf = new XMLSecurityDataFormat(secureTag, secureTagContents); 234 return dataFormat(xsdf); 235 } 236 237 /** 238 * Uses the XML Security data format 239 */ 240 public T secureXML(String secureTag, boolean secureTagContents, String passPhrase) { 241 XMLSecurityDataFormat xsdf = new XMLSecurityDataFormat(secureTag, secureTagContents, passPhrase); 242 return dataFormat(xsdf); 243 } 244 245 /** 246 * Uses the XML Security data format 247 */ 248 public T secureXML(String secureTag, boolean secureTagContents, String passPhrase, String xmlCipherAlgorithm) { 249 XMLSecurityDataFormat xsdf = new XMLSecurityDataFormat(secureTag, secureTagContents, passPhrase, xmlCipherAlgorithm); 250 return dataFormat(xsdf); 251 } 252 253 /** 254 * Uses the ZIP deflater data format 255 */ 256 public T zip() { 257 ZipDataFormat zdf = new ZipDataFormat(Deflater.DEFAULT_COMPRESSION); 258 return dataFormat(zdf); 259 } 260 261 /** 262 * Uses the ZIP deflater data format 263 */ 264 public T zip(int compressionLevel) { 265 ZipDataFormat zdf = new ZipDataFormat(compressionLevel); 266 return dataFormat(zdf); 267 } 268 269 /** 270 * Uses the GZIP deflater data format 271 */ 272 public T gzip() { 273 GzipDataFormat gzdf = new GzipDataFormat(); 274 return dataFormat(gzdf); 275 } 276 277 @SuppressWarnings("unchecked") 278 private T dataFormat(DataFormatDefinition dataFormatType) { 279 switch (operation) { 280 case Unmarshal: 281 return (T)processorType.unmarshal(dataFormatType); 282 case Marshal: 283 return (T)processorType.marshal(dataFormatType); 284 default: 285 throw new IllegalArgumentException("Unknown DataFormat operation: " + operation); 286 } 287 } 288 }