/*
* JBoss, Home of Professional Open Source.
*
* See the LEGAL.txt file distributed with this work for information regarding copyright ownership and licensing.
*
* See the AUTHORS.txt file distributed with this work for a full listing of individual contributors.
*/
package org.teiid.designer.relational.model;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.osgi.util.NLS;
import org.teiid.core.designer.ModelerCoreException;
import org.teiid.designer.core.ModelerCore;
import org.teiid.designer.core.types.DatatypeManager;
import org.teiid.designer.relational.Messages;
import org.teiid.designer.relational.RelationalPlugin;
/**
* Handles basic datatype lookup for Teiid-supported Runtime types
*
* @since 8.0
*/
public class DatatypeProcessor {
public static final String DATATYPE_STRING = "string"; //$NON-NLS-1$
public static final String DATATYPE_VARCHAR = "varchar"; //$NON-NLS-1$
public static final String DATATYPE_CHAR = "char"; //$NON-NLS-1$
public static final String DATATYPE_BOOLEAN = "boolean"; //$NON-NLS-1$
public static final String DATATYPE_BYTE = "byte"; //$NON-NLS-1$
public static final String DATATYPE_TINYINT = "tinyint"; //$NON-NLS-1$
public static final String DATATYPE_SHORT = "short"; //$NON-NLS-1$
public static final String DATATYPE_SMALLINT = "smallint"; //$NON-NLS-1$
public static final String DATATYPE_INTEGER = "integer"; //$NON-NLS-1$
public static final String DATATYPE_SERIAL = "serial"; //$NON-NLS-1$
public static final String DATATYPE_LONG = "long"; //$NON-NLS-1$
public static final String DATATYPE_BIGINT = "bigint"; //$NON-NLS-1$
public static final String DATATYPE_BIGINTEGER = "biginteger"; //$NON-NLS-1$
public static final String DATATYPE_FLOAT = "float"; //$NON-NLS-1$
public static final String DATATYPE_REAL = "real"; //$NON-NLS-1$
public static final String DATATYPE_DOUBLE = "double"; //$NON-NLS-1$
public static final String DATATYPE_BIGDECIMAL = "bigdecimal"; //$NON-NLS-1$
public static final String DATATYPE_DECIMAL = "decimal"; //$NON-NLS-1$
public static final String DATATYPE_DATE = "date"; //$NON-NLS-1$
public static final String DATATYPE_TIME = "time"; //$NON-NLS-1$
public static final String DATATYPE_TIMESTAMP = "timestamp"; //$NON-NLS-1$
public static final String DATATYPE_OBJECT = "object"; //$NON-NLS-1$
public static final String DATATYPE_BLOB = "blob"; //$NON-NLS-1$
public static final String DATATYPE_CLOB = "clob"; //$NON-NLS-1$
public static final String DATATYPE_XML = "xml"; //$NON-NLS-1$
public static final String DATATYPE_INT = "int"; //$NON-NLS-1$
public static final String DEFAULT_DATATYPE = "string"; //$NON-NLS-1$
public static final int DEFAULT_DATATYPE_LENGTH = 0;
private DatatypeManager datatypeManager;
private EObject objectDatatype;
/**
* DatatypeProcessor
*/
public DatatypeProcessor() {
super();
this.datatypeManager = ModelerCore.getWorkspaceDatatypeManager();
}
/**
* For a given datatype name or 'identifier', returns an <code>EObject</code> runtime datatype
*
* @param identifier the string identifier
* @return the EObject
*/
public EObject findDatatype( final String identifier ) {
String convertedTypeName = identifier;
if( DATATYPE_SERIAL.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_INTEGER;
} else if( DATATYPE_VARCHAR.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_STRING;
} else if( DATATYPE_TINYINT.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_BYTE;
} else if( DATATYPE_SMALLINT.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_SHORT;
} else if( DATATYPE_BIGINT.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_LONG;
} else if( DATATYPE_REAL.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_FLOAT;
} else if( DATATYPE_XML.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_OBJECT;
} else if( DATATYPE_INTEGER.equalsIgnoreCase(identifier) ) {
convertedTypeName = DATATYPE_INT;
}
EObject result = null;
try {
result = this.datatypeManager.getBuiltInDatatype(convertedTypeName);
if (result == null) {
result = this.datatypeManager.findDatatype(convertedTypeName);
}
} catch (ModelerCoreException e) {
RelationalPlugin.Util.log(IStatus.WARNING, NLS.bind(Messages.datatypeProcessor_error_finding_datatatype, convertedTypeName));
result = getObjectDatatype();
}
return result;
}
private EObject getObjectDatatype() {
if( this.objectDatatype == null ) {
try {
objectDatatype = this.datatypeManager.getBuiltInDatatype(DATATYPE_OBJECT);
} catch (ModelerCoreException e) {
RelationalPlugin.Util.log(IStatus.WARNING, NLS.bind(Messages.datatypeProcessor_error_finding_datatatype, DATATYPE_OBJECT));
}
}
return this.objectDatatype;
}
}