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