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