/** * Copyright (c) 2010 Kenn Hussey and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Kenn Hussey - Initial API and implementation */ package org.eclipse.emf.oda.ecore.impl; import org.eclipse.datatools.connectivity.oda.OdaException; import org.eclipse.emf.ecore.EClass; import org.eclipse.emf.ecore.EClassifier; import org.eclipse.emf.ecore.EEnum; import org.eclipse.emf.ecore.EcorePackage; /** * Defines the data types that are supported by EMF ODA runtime driver. */ public final class DataTypes { /** * Returns the display length of the specified type. * @param type the type * @return the column display length, or -1 if unknown * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnDisplayLength(int) */ public static int getDisplayLength(EClassifier type) { // unknown return -1; } public static final int nullableUnknown = 0; public static final int noNulls = 1; public static final int nullable = 2; /** * Returns whether null values are allowed for the specified type. * @param type the type * @return the nullability of the type * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#isNullable(int) * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#isNullable(int) */ public static int isNullable(EClassifier type) { if (type instanceof EClass) { return nullable; } else if (type instanceof EEnum) { return noNulls; } else { if (type.getEPackage() == EcorePackage.eINSTANCE) { switch (type.getClassifierID()) { case EcorePackage.EBOOLEAN: case EcorePackage.EBYTE: case EcorePackage.ECHAR: case EcorePackage.EDOUBLE: case EcorePackage.EFLOAT: case EcorePackage.EINT: case EcorePackage.ELONG: case EcorePackage.ESHORT: return noNulls; default: return nullable; } } else { return nullableUnknown; } } } /** * Returns the maximum number of decimal digits of the specified type. * @param type the type * @return the type precision, or -1 if not applicable * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getPrecision(int) * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getPrecision(int) */ public static int getPrecision(EClassifier type) { // not applicable return -1; } /** * Returns the maximum number of digits to the right of the decimal * point of the specified type. * @param type the type * @return the type scale, or -1 if not applicable * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getScale(int) * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getScale(int) */ public static int getScale(EClassifier type) { // not applicable return -1; } /** * Returns the data provider specific code of the specified type. * @param type the type * @return the native data type code of the type * @throws OdaException if data source error occurs * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterType(int) * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnType(int) */ public static int getType(EClassifier type) throws OdaException { if (type instanceof EClass) { return EcorePackage.EJAVA_OBJECT; } else if (type instanceof EEnum) { return EcorePackage.EENUMERATOR; } else { return EcorePackage.eINSTANCE == type.getEPackage() ? type.getClassifierID() : EcorePackage.EJAVA_OBJECT; } } /** * Returns the data provider specific name of the specified type. * @param type the type * @return the native data type name of the type * @throws OdaException if data source error occurs * @see org.eclipse.datatools.connectivity.oda.IParameterMetaData#getParameterTypeName(int) * @see org.eclipse.datatools.connectivity.oda.IResultSetMetaData#getColumnTypeName(int) */ public static String getTypeName(EClassifier type) throws OdaException { if (type instanceof EClass) { return EcorePackage.Literals.EJAVA_OBJECT.getName(); } else if (type instanceof EEnum) { return EcorePackage.Literals.EENUMERATOR.getName(); } else { return EcorePackage.eINSTANCE == type.getEPackage() ? type.getName() : EcorePackage.Literals.EJAVA_OBJECT.getName(); } } }