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.apache.camel.Processor;
022 import org.apache.camel.model.ProcessorType;
023 import org.apache.camel.model.dataformat.ArtixDSContentType;
024 import org.apache.camel.model.dataformat.ArtixDSDataFormat;
025 import org.apache.camel.model.dataformat.CsvDataFormat;
026 import org.apache.camel.model.dataformat.DataFormatType;
027 import org.apache.camel.model.dataformat.HL7DataFormat;
028 import org.apache.camel.model.dataformat.JaxbDataFormat;
029 import org.apache.camel.model.dataformat.JsonDataFormat;
030 import org.apache.camel.model.dataformat.SerializationDataFormat;
031 import org.apache.camel.model.dataformat.StringDataFormat;
032 import org.apache.camel.model.dataformat.XMLBeansDataFormat;
033 import org.apache.camel.model.dataformat.XStreamDataFormat;
034 import org.apache.camel.model.dataformat.ZipDataFormat;
035 import org.apache.camel.spi.DataFormat;
036
037 /**
038 * An expression for constructing the different possible {@link DataFormat}
039 * options.
040 *
041 * @version $Revision: 63424 $
042 */
043 public class DataFormatClause<T extends ProcessorType> {
044 private final T processorType;
045 private final Operation operation;
046
047 /**
048 * {@link DataFormat} operations.
049 */
050 public enum Operation {
051 Marshal, Unmarshal
052 }
053
054 public DataFormatClause(T processorType, Operation operation) {
055 this.processorType = processorType;
056 this.operation = operation;
057 }
058
059 /**
060 * Uses the
061 * <a href="http://activemq.apache.org/camel/artix-data-services.html">Artix Data Services</a>
062 * data format for dealing with lots of different message formats such as SWIFT etc.
063 */
064 public T artixDS() {
065 return dataFormat(new ArtixDSDataFormat());
066 }
067
068 /**
069 * Uses the
070 * <a href="http://activemq.apache.org/camel/artix-data-services.html">Artix Data Services</a>
071 * data format with the specified type of ComplexDataObject
072 * for marshalling and unmarshalling messages using the dataObject's default Source and Sink.
073 */
074 public T artixDS(Class<?> dataObjectType) {
075 return dataFormat(new ArtixDSDataFormat(dataObjectType));
076 }
077
078
079 /**
080 * Uses the
081 * <a href="http://activemq.apache.org/camel/artix-data-services.html">Artix Data Services</a>
082 * data format with the specified type of ComplexDataObject
083 * for marshalling and unmarshalling messages using the dataObject's default Source and Sink.
084 */
085 public T artixDS(Class<?> elementType, ArtixDSContentType contentType) {
086 return dataFormat(new ArtixDSDataFormat(elementType, contentType));
087 }
088
089 /**
090 * Uses the
091 * <a href="http://activemq.apache.org/camel/artix-data-services.html">Artix Data Services</a>
092 * data format with the specified content type
093 * for marshalling and unmarshalling messages
094 */
095 public T artixDS(ArtixDSContentType contentType) {
096 return dataFormat(new ArtixDSDataFormat(contentType));
097 }
098
099 /**
100 * Uses the CSV data format
101 */
102 public T csv() {
103 return dataFormat(new CsvDataFormat());
104 }
105
106 /**
107 * Uses the HL7 data format
108 */
109 public T hl7() {
110 return dataFormat(new HL7DataFormat());
111 }
112
113 /**
114 * Uses the JAXB data format
115 */
116 public T jaxb() {
117 return dataFormat(new JaxbDataFormat());
118 }
119
120 /**
121 * Uses the JAXB data format turning pretty printing on or off
122 */
123 public T jaxb(boolean prettyPrint) {
124 return dataFormat(new JaxbDataFormat(prettyPrint));
125 }
126
127 /**
128 * Uses the Java Serialization data format
129 */
130 public T serialization() {
131 return dataFormat(new SerializationDataFormat());
132 }
133
134 /**
135 * Uses the String data format
136 */
137 public T string() {
138 return string(null);
139 }
140
141 /**
142 * Uses the String data format supporting encoding using given charset
143 */
144 public T string(String charset) {
145 StringDataFormat sdf = new StringDataFormat();
146 sdf.setCharset(charset);
147 return dataFormat(sdf);
148 }
149
150 /**
151 * Uses the JAXB data format
152 */
153 public T xmlBeans() {
154 return dataFormat(new XMLBeansDataFormat());
155 }
156
157 /**
158 * Uses the XStream data format
159 */
160 public T xstream() {
161 return dataFormat(new XStreamDataFormat());
162 }
163
164 /**
165 * Uses the JSON data format
166 */
167 public T json() {
168 return dataFormat(new JsonDataFormat());
169 }
170
171 private T dataFormat(DataFormatType dataFormatType) {
172 switch (operation) {
173 case Unmarshal:
174 return (T)processorType.unmarshal(dataFormatType);
175 case Marshal:
176 return (T)processorType.marshal(dataFormatType);
177 default:
178 throw new IllegalArgumentException("Unknown DataFormat operation: " + operation);
179 }
180 }
181
182 public T zip() {
183 ZipDataFormat zdf = new ZipDataFormat(Deflater.DEFAULT_COMPRESSION);
184 return dataFormat(zdf);
185 }
186
187 public T zip(int compressionLevel) {
188 ZipDataFormat zdf = new ZipDataFormat(compressionLevel);
189 return dataFormat(zdf);
190 }
191 }