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