/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2015 */ package com.ibm.streamsx.topology.internal.spljava; import static com.ibm.streams.operator.Type.Factory.getStreamSchema; import java.lang.reflect.Type; import java.util.Collections; import java.util.HashSet; import java.util.Set; import com.ibm.streams.operator.StreamSchema; import com.ibm.streams.operator.types.Blob; import com.ibm.streams.operator.types.XML; public class Schemas { @SuppressWarnings("unused") private static final Schemas forCoverage = new Schemas(); public static final StreamSchema STRING = getStreamSchema("tuple<rstring string>"); public static final StreamSchema BLOB = getStreamSchema("tuple<blob binary>"); public static final StreamSchema XML = getStreamSchema("tuple<xml document>"); public static final StreamSchema JAVA_OBJECT = getStreamSchema("tuple<blob " + SPLJavaObject.SPL_JAVA_OBJECT + ">"); private static final Set<Class<?>> DIRECT_SCHEMA_CLASSES; static { Set<Class<?>> directSchemaClasses = new HashSet<>(); directSchemaClasses.add(String.class); directSchemaClasses.add(Blob.class); directSchemaClasses.add(XML.class); DIRECT_SCHEMA_CLASSES = Collections.unmodifiableSet(directSchemaClasses); } private Schemas() { } public static boolean usesDirectSchema(Type type) { return DIRECT_SCHEMA_CLASSES.contains(type); } public StreamSchema getSPLSchema(Class<?> tupleClass) { if (String.class.equals(tupleClass)) return STRING; if (Blob.class.equals(tupleClass)) return BLOB; if (XML.class.equals(tupleClass)) return XML; throw new IllegalArgumentException(tupleClass.getName()); } /** * Return the SPL schema that will be used at runtime * to hold the java object tuple. */ public static StreamSchema getSPLMappingSchema(Type tupleType) { if (String.class.equals(tupleType)) { return STRING; } if (Blob.class.equals(tupleType)) { return BLOB; } if (XML.class.equals(tupleType)) { return XML; } return JAVA_OBJECT; } public static SPLMapping<?> getSPLMapping(StreamSchema schema) { if (STRING.equals(schema)) { return SPLMapping.JavaString; } if (JAVA_OBJECT.equals(schema)) { return new SPLJavaObject(schema); } if (BLOB.equals(schema)) { return SPLMapping.JavaBlob; } if (XML.equals(schema)) { return SPLMapping.JavaXML; } return new SPLTuple(schema); } }