1 /*
2 * Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
3 * The software in this package is published under the terms of the CPAL v1.0
4 * license, a copy of which has been included with this distribution in the
5 * LICENSE.txt file.
6 */
7 package org.mule.api.transformer;
8
9 import org.mule.transformer.types.DataTypeFactory;
10
11 import java.io.Serializable;
12
13 /**
14 * Defines a Java type associated with additional information about the data. This may be a mime
15 * type for the type or for collections, the collection item type can be stored with the collection
16 * type.
17 *
18 * @since 3.0.0
19 */
20 public interface DataType<T> extends Serializable, Cloneable
21 {
22 public static final String ANY_MIME_TYPE = "*/*";
23
24 /**
25 * The object type of the source object to transform.
26 *
27 * @return the class object of the source object. This must not be null
28 */
29 Class<?> getType();
30
31 /**
32 * The mime type of the the source object to transform.
33 *
34 * @return the mime type of the source object. This may be null if the mime type is not known, or if the mime type is
35 * not needed
36 */
37 String getMimeType();
38
39 /**
40 * The encoding for the object to transform
41 */
42 String getEncoding();
43
44 /**
45 * The encoding for the object to transform
46 */
47 void setEncoding(String encoding);
48
49 /**
50 * The mime type of the the source object to transform.
51 *
52 * @param mimeType the mime type of the source object. This may be null if the mime type is not known, or if the mime type is
53 * not needed
54 */
55 void setMimeType(String mimeType);
56
57 /**
58 * Used to determine if this data type is compatible with the data type passed in. This checks to see if the mime types are
59 * equal and whether the Java types are assignable
60 *
61 * @param dataType the dataType object to compare with
62 * @return true if the mime types are the same and this type can be assigned to the dataType.type.
63 */
64 boolean isCompatibleWith(DataType dataType);
65
66 /**
67 * Create an exact copy of this datatype
68 */
69 DataType cloneDataType();
70
71 DataType<byte[]> BYTE_ARRAY_DATA_TYPE = (DataType<byte[]>) DataTypeFactory.createImmutable(byte[].class);
72
73 DataType<String> STRING_DATA_TYPE = (DataType<String>) DataTypeFactory.createImmutable(String.class);
74 }