/* * JBoss, Home of Professional Open Source. * See the COPYRIGHT.txt file distributed with this work for information * regarding copyright ownership. Some portions may be licensed * to Red Hat, Inc. under one or more contributor license agreements. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library 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 * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA. */ package org.teiid.metadata; import java.util.Collections; import org.teiid.core.types.DataTypeManagerService; import org.teiid.core.util.StringUtil; import org.teiid.designer.runtime.version.spi.ITeiidServerVersion; import org.teiid.designer.runtime.version.spi.TeiidServerVersion.Version; public abstract class BaseColumn extends AbstractMetadataRecord { private static final long serialVersionUID = 6382258617714856616L; public static final String DEFAULT_HANDLING = AbstractMetadataRecord.RELATIONAL_URI + "default_handling"; //$NON-NLS-1$ public static final String EXPRESSION_DEFAULT = "expression"; //$NON-NLS-1$ public static final String SPATIAL_SRID = MetadataFactory.SPATIAL_URI + "srid"; //$NON-NLS-1$ public static final String SPATIAL_TYPE = MetadataFactory.SPATIAL_URI + "type"; //$NON-NLS-1$ public static final String SPATIAL_COORD_DIMENSION = MetadataFactory.SPATIAL_URI + "coord_dimension"; //$NON-NLS-1$ public enum NullType { No_Nulls { @Override public String toString() { return "No Nulls"; //$NON-NLS-1$ } }, Nullable, Unknown } private final ITeiidServerVersion teiidVersion; private String datatypeUUID; private String runtimeType; private String defaultValue; private int length; private int scale; private int radix; private int precision; private NullType nullType; private int position; private Datatype datatype; private int arrayDimensions; private String nativeType; public BaseColumn(ITeiidServerVersion teiidVersion) { this.teiidVersion = teiidVersion; } /** * @return the teiidVersion */ public ITeiidServerVersion getTeiidVersion() { return this.teiidVersion; } public String getDefaultValue() { return defaultValue; } public String getDatatypeUUID() { return datatypeUUID; } public String getRuntimeType() { return runtimeType; } public Class<?> getJavaType() { return DataTypeManagerService.getInstance(teiidVersion).getDataTypeClass(runtimeType); } public int getLength() { return length; } public int getPrecision() { return precision; } public int getScale() { return scale; } public int getRadix() { return radix; } /** * 1 based ordinal position * @return */ public int getPosition() { return position; } public NullType getNullType() { if (nullType == null) { return NullType.Unknown; } return nullType; } public void setLength(int i) { length = i; } public void setPrecision(int i) { precision = i; } public void setScale(int i) { scale = i; } public void setRadix(int i) { radix = i; } public void setNullType(NullType i) { nullType = i; } public void setPosition(int i) { position = i; } public void setRuntimeType(String string) { runtimeType = string; } public void setDatatypeUUID(String string) { datatypeUUID = string; } public void setDefaultValue(String object) { defaultValue = object; } public Datatype getDatatype() { return datatype; } public void setDatatype(Datatype datatype) { setDatatype(datatype, false, 0); } public void setDatatype(Datatype datatype, boolean copyAttributes) { setDatatype(datatype, copyAttributes, 0); } public void setDatatype(Datatype datatype, boolean copyAttributes, int arrayDimensions) { this.datatype = datatype; this.arrayDimensions = arrayDimensions; if (datatype != null) { this.datatypeUUID = this.datatype.getUUID(); this.runtimeType = this.datatype.getRuntimeTypeName(); if (arrayDimensions > 0) { this.runtimeType += StringUtil.join(Collections.nCopies(arrayDimensions, "[]"), ""); //$NON-NLS-1$ //$NON-NLS-2$ } if (copyAttributes) { this.radix = this.datatype.getRadix(); this.length = this.datatype.getLength(); this.precision = this.datatype.getPrecision(); this.scale = this.datatype.getScale(); this.nullType = this.datatype.getNullType(); } } } /** * Get the array dimensions. * @return */ public int getArrayDimensions() { return arrayDimensions; } public String getNativeType() { return nativeType; } /** * @param nativeType The nativeType to set. * @since 4.2 */ public void setNativeType(String nativeType) { this.nativeType = nativeType; } }