/*
* GeoTools - The Open Source Java GIS Toolkit
* http://geotools.org
*
* (C) 2003-2008, Open Source Geospatial Foundation (OSGeo)
*
* 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;
* version 2.1 of the License.
*
* 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.
*/
/*
* 26-may-2005 D. Adler Move returnFIDColumnsAsAttributes here
* from subclasses.
* 17-Jul-2006 D. Adler GEOT-728 Refactor FIDMapper classes
*/
package org.geotools.data.jdbc.fidmapper;
/**
* Abstract implementation providing common methods that usually are coded the
* same way in all fid mappers.
*
* @author wolf
* @source $URL$
* @deprecated scheduled for removal in 2.7, use classes in org.geotools.jdbc
*/
public abstract class AbstractFIDMapper implements FIDMapper {
protected boolean[] autoIncrement = new boolean[1];
protected int[] colDecimalDigits = new int[1];
protected String[] colNames = new String[1];
protected int[] colSizes = new int[1];
protected int[] colTypes = new int[1];
protected String tableName = null;
protected String tableSchemaName = null;
/** Set if table FID columns are to be returned as business attributes. */
protected boolean returnFIDColumnsAsAttributes = false;
/**
* Default constructor for AbstractFIDMapper
*
*/
public AbstractFIDMapper() {
}
/**
* Set common values for all FID mappers.
*
* @param tableSchemaName
* @param tableName
*/
public AbstractFIDMapper(String tableSchemaName, String tableName) {
this.tableSchemaName = tableSchemaName;
this.tableName = tableName;
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#getColumnCount()
*/
public int getColumnCount() {
if (colNames[0] == null) return 0;
else return colNames.length;
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#getColumnCount()
*/
protected int getColumnDecimalDigits() {
return getColumnDecimalDigits(0);
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#getColumnDecimalDigits(int)
*/
public int getColumnDecimalDigits(int colIndex) {
if (colIndex > 0 && colIndex < getColumnCount()) {
return colDecimalDigits[colIndex];
} else {
return 0;
}
}
protected String getColumnName() {
return getColumnName(0);
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#getColumnName(int)
*/
public String getColumnName(int colIndex) {
if (colIndex >= 0 && colIndex < getColumnCount()) {
return colNames[colIndex];
} else {
return null;
}
}
protected int getColumnSize() {
return getColumnSize(0);
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#getColumnSize(int)
*/
public int getColumnSize(int colIndex) {
if (colIndex >= 0 && colIndex < getColumnCount()) {
return colSizes[colIndex];
} else {
return -1;
}
}
protected int getColumnType() {
return getColumnType(0);
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#getColumnType(int)
*/
public int getColumnType(int colIndex) {
if (colIndex >= 0 && colIndex < getColumnCount()) {
return colTypes[colIndex];
} else {
throw new ArrayIndexOutOfBoundsException(colIndex);
}
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#hasAutoIncrementColumns()
*/
public boolean hasAutoIncrementColumns() {
for (int i = 0; i < getColumnCount(); i++) {
if (isAutoIncrement(i)) {
return true;
}
}
return false;
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#initSupportStructures()
*/
public void initSupportStructures() {
// nothing to do
}
protected boolean isAutoIncrement() {
return isAutoIncrement(0);
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#isAutoIncrement(int)
*/
public boolean isAutoIncrement(int colIndex) {
if (colIndex >= 0 && colIndex < getColumnCount()) {
return autoIncrement[colIndex];
} else {
return true;
}
}
/**
* Convenience since most FID mappers should be persistent, override on the
* specific ones that aren't.
*
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#isVolatile()
*/
public boolean isVolatile() {
return false;
}
/**
* @see org.geotools.data.jdbc.fidmapper.FIDMapper#returnFIDColumnsAsAttributes()
*/
public boolean returnFIDColumnsAsAttributes() {
return returnFIDColumnsAsAttributes;
}
protected void setInfo(String colName, int colType,
int colSize, int colDecimalDigits, boolean autoIncrement) {
this.colNames[0] = colName;
this.colTypes[0] = colType;
this.colSizes[0] = colSize;
this.colDecimalDigits[0] = colDecimalDigits;
this.autoIncrement[0] = autoIncrement;
}
/**
* Create a nice string representation of a FID Mapper
*
*
* @return the String representation
*/
public String toString() {
String mapperName = getClass().toString();
String colInfo = "";
if (getColumnCount() > 0) {
colInfo = getColumnName(0) + ":" + getColumnType(0) + ":"
+ getColumnSize(0) + ":" + getColumnDecimalDigits(0);
}
String s = mapperName + ":" + getColumnCount() + ":" + colInfo + ":"
+ returnFIDColumnsAsAttributes() + ":"
+ hasAutoIncrementColumns() + ":" + "";
return s;
}
public String getTableName() {
return tableName;
}
public String getTableSchemaName() {
return tableSchemaName;
}
}