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