/** * VMware Continuent Tungsten Replicator * Copyright (C) 2015 VMware, Inc. All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * Initial developer(s): Scott Martin * Contributor(s): Robert Hodges, Stephane Giron, Linas Virbalas */ package com.continuent.tungsten.replicator.database; import java.io.IOException; import java.io.InputStream; import java.io.Serializable; import java.sql.Types; /** * This class defines a Column * * @author <a href="mailto:scott.martin@continuent.com">Scott Martin</a> * @version 1.0 */ public class Column implements Serializable { private static final long serialVersionUID = 1L; String name; int type; // Type assignment from // java.sql.Types Boolean signed = null; long length; boolean notNull; // Is the column a NOT // NULL column Serializable value; int valueInputStreamLength; private int position; private boolean blob; private String typeDescription; /** * Creates a new <code>Database</code> object */ @Deprecated public Column() { // Never used this(null, Types.NULL); } public Column(String name, int type) { this(name, type, false); } public Column(String name, int type, boolean isNotNull) { this(name, type, 0, isNotNull); } public Column(String name, int type, boolean isNotNull, boolean isSigned) { this(name, type, 0, isNotNull); signed = isSigned; } public Column(String name, int type, int length) { this(name, type, length, false); } public Column(String name, int type, int length, boolean isNotNull) { this(name, type, length, isNotNull, null); } public Column(String name, int type, long colLength, boolean isNotNull, Serializable value) { this.name = name; this.type = type; this.length = colLength; this.notNull = isNotNull; this.value = value; // Do not set a default value for the signed flag - we need to know // whether it was actually set or not. // this.signed = true; this.blob = false; } public String getName() { return this.name; } public int getType() { return this.type; } public long getLength() { return this.length; } /** * Is the column a NOT NULL column */ public boolean isNotNull() { return this.notNull; } /** * Is the current value of the column NULL */ public boolean isNull() { return (this.value == null); } public void Dump() { System.out.format("%s\n", name); } public void setValue(Serializable value) { this.value = value; } public void setType(int type) { this.type = type; } public void setName(String name) { this.name = name; } public void setValue(short valueShort) { this.value = new Short(valueShort); } public void setValue(int valueInt) { this.value = new Integer(valueInt); } public void setValue(long valueLong) { this.value = new Long(valueLong); } public void setValue(String valueString) { value = valueString; } public void setValue(InputStream valueInputStream, int valueInputStreamLength) { byte[] byteArray = new byte[valueInputStreamLength]; try { valueInputStream.read(byteArray, 0, valueInputStreamLength); this.value = byteArray; } catch (IOException e) { throw new RuntimeException( "Unable to read input stream into column value: stream length=" + valueInputStreamLength, e); } } public void setValueNull() { this.value = null; } public Serializable getValue() { return this.value; } public int getValueInt() { return (Integer) this.value; } public long getValueLong() { return (Long) this.value; } public String getValueString() { return this.value.toString(); } public void setPosition(int columnIdx) { position = columnIdx; } public int getPosition() { return position; } /** * Returns value of the signed flag. If flag was not set, returns true by default. */ public boolean isSigned() { // Treat columns as signed, if not set explicitly. if (signed == null) return true; else return signed; } /** * Returns true only if the signed flag has been set explicitly and is not * in the default state. */ public boolean isSignedSet() { if (signed == null) return false; else return true; } public void setSigned(boolean signed) { this.signed = signed; } public boolean isBlob() { return blob; } public void setBlob(boolean blob) { this.blob = blob; } public String getTypeDescription() { return typeDescription; } public void setTypeDescription(String typeDescription) { this.typeDescription = typeDescription; } /** * {@inheritDoc} * * @see java.lang.Object#toString() */ public String toString() { return "Column name=" + name; } /** * Sets the length value. * * @param length The length to set. */ public void setLength(long length) { this.length = length; } }