/* * Copyright (C) 2000 - 2008 TagServlet Ltd * * This file is part of Open BlueDragon (OpenBD) CFML Server Engine. * * OpenBD is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * Free Software Foundation,version 3. * * OpenBD is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with OpenBD. If not, see http://www.gnu.org/licenses/ * * Additional permission under GNU GPL version 3 section 7 * * If you modify this Program, or any covered work, by linking or combining * it with any of the JARS listed in the README.txt (or a modified version of * (that library), containing parts covered by the terms of that JAR, the * licensors of this Program grant you additional permission to convey the * resulting work. * README.txt @ http://www.openbluedragon.org/license/README.txt * * http://www.openbluedragon.org/ */ package com.naryx.tagfusion.cfm.engine; import java.util.Enumeration; import java.util.Hashtable; import org.w3c.dom.Document; import com.naryx.tagfusion.cfm.xml.cfXmlData; import com.naryx.tagfusion.cfm.xml.ws.encoding.ser.QueryBean; import com.naryx.tagfusion.cfm.xml.ws.encoding.ser.StructMap; public class cfDataFactory { private static Hashtable<String, Byte> typesAndTypeNames = new Hashtable<String, Byte>(); private static Hashtable<String, Class<?>> typesAndTypeClasses = new Hashtable<String, Class<?>>(); private static Hashtable<String, Class<?>> typesAndJavaClasses = new Hashtable<String, Class<?>>(); // static constructor static { // standard types typesAndTypeNames.put("ARRAY", new Byte(cfData.CFARRAYDATA)); typesAndTypeNames.put("BINARY", new Byte(cfData.CFBINARYDATA)); typesAndTypeNames.put("BOOLEAN", new Byte(cfData.CFBOOLEANDATA)); typesAndTypeNames.put("DATE", new Byte(cfData.CFDATEDATA)); typesAndTypeNames.put("NUMERIC", new Byte(cfData.CFNUMBERDATA)); typesAndTypeNames.put("QUERY", new Byte(cfData.CFQUERYRESULTDATA)); typesAndTypeNames.put("STRING", new Byte(cfData.CFSTRINGDATA)); typesAndTypeNames.put("STRUCT", new Byte(cfData.CFSTRUCTDATA)); // new types typesAndTypeNames.put("GUID", new Byte(cfData.CFSTRINGDATA)); typesAndTypeNames.put("UUID", new Byte(cfData.CFSTRINGDATA)); // non-standard types typesAndTypeNames.put("UNKNOWN", new Byte(cfData.UNKNOWN)); typesAndTypeNames.put("COMPONENT", new Byte(cfData.CFCOMPONENTOBJECTDATA)); typesAndTypeNames.put("JAVA", new Byte(cfData.CFJAVAOBJECTDATA)); typesAndTypeNames.put("LDATA", new Byte(cfData.CFLDATA)); typesAndTypeNames.put("NULL", new Byte(cfData.CFNULLDATA)); typesAndTypeNames.put("OTHER", new Byte(cfData.OTHER)); typesAndTypeNames.put("ANY", new Byte(cfData.OTHER)); typesAndTypeNames.put("VOID", new Byte(cfData.CFNULLDATA)); typesAndTypeNames.put("QUERY", new Byte(cfData.CFQUERYRESULTDATA)); typesAndTypeNames.put("VARIABLENAME", new Byte(cfData.OTHER)); // classes typesAndTypeClasses.put("ARRAY", cfArrayData.class); typesAndTypeClasses.put("BINARY", cfBinaryData.class); typesAndTypeClasses.put("BOOLEAN", cfBooleanData.class); typesAndTypeClasses.put("DATE", cfDateData.class); typesAndTypeClasses.put("NUMERIC", cfNumberData.class); typesAndTypeClasses.put("QUERY", cfQueryInterface.class); typesAndTypeClasses.put("STRING", cfStringData.class); typesAndTypeClasses.put("STRUCT", cfStructData.class); typesAndTypeClasses.put("GUID", cfStringData.class); typesAndTypeClasses.put("UUID", cfStringData.class); typesAndTypeClasses.put("QUERY", cfQueryResultData.class); typesAndTypeClasses.put("XML", cfXmlData.class); typesAndTypeClasses.put("UNKNOWN", cfData.class); typesAndTypeClasses.put("COMPONENT", cfComponentData.class); typesAndTypeClasses.put("JAVA", cfJavaObjectData.class); typesAndTypeClasses.put("NULL", cfNullData.class); typesAndTypeClasses.put("OTHER", cfData.class); typesAndTypeClasses.put("ANY", cfData.class); // java types typesAndJavaClasses.put("ARRAY", Object[].class); typesAndJavaClasses.put("BINARY", byte[].class); typesAndJavaClasses.put("BOOLEAN", Boolean.class); typesAndJavaClasses.put("DATE", java.util.Date.class); typesAndJavaClasses.put("NUMERIC", Double.class); typesAndJavaClasses.put("STRING", String.class); typesAndJavaClasses.put("STRUCT", StructMap.class); typesAndJavaClasses.put("GUID", String.class); typesAndJavaClasses.put("UUID", String.class); typesAndJavaClasses.put("QUERY", QueryBean.class); typesAndJavaClasses.put("XML", Document.class); typesAndJavaClasses.put("UNKNOWN", Object.class); typesAndJavaClasses.put("COMPONENT", StructMap.class); typesAndJavaClasses.put("JAVA", Object.class); typesAndJavaClasses.put("OTHER", Object.class); typesAndJavaClasses.put("ANY", Object.class); } public static byte getDatatypeByteValue(String name) { Byte type = null; type = typesAndTypeNames.get(name.toUpperCase()); if(type == null) { type = new Byte(cfData.UNKNOWN); } return type.byteValue(); } public static String getDatatypeString( cfData data ) { if ( data.getDataType() == cfData.OTHER ) { return new String( "any" ); } else if ( data.getDataType() == cfData.CFCOMPONENTOBJECTDATA ) { cfComponentData componentData = (cfComponentData)data; return componentData.getComponentName() + ", " + componentData.getComponentPath(); } return data.getDataTypeName(); } public static Class<?> getDatatypeJavaClass(String type) { String name = null; Enumeration<?> enumer = typesAndJavaClasses.keys(); while (enumer.hasMoreElements()) { name = (String)enumer.nextElement(); if (name.equalsIgnoreCase(type.trim())) return typesAndJavaClasses.get(name); } return null; } }