/**
* Copyright (c) 2004-2011 Wang Jinbao(Julian Wong), http://www.ralasafe.com
* Licensed under the MIT license: http://www.opensource.org/licenses/mit-license.php
*/
package org.ralasafe.db;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
/**
* Helper class for define a table.
*/
public class TableNewer {
private String tableName;
private Map columnMap=new HashMap();
private Map typeMap=new HashMap();
private Map functionMap=new HashMap();
private Map columnJavaBeanAttributeClassMap;
private String[] columnJavaBeanAttributeClazz;
private String[] columnNames;
private String[] idColumnNames;
private String[] uniqueColumnNames;
private String mappingClass;
private int id;
public String[] getColumnJavaBeanAttributeClazz() {
return columnJavaBeanAttributeClazz;
}
public void setColumnJavaBeanAttributeClazz(
String[] columnJavaBeanAttributeClazz ) {
this.columnJavaBeanAttributeClazz=columnJavaBeanAttributeClazz;
if( columnNames!=null ) {
columnJavaBeanAttributeClassMap=new HashMap();
for( int i=0; i<columnJavaBeanAttributeClazz.length; i++ ) {
String attrClazz=columnJavaBeanAttributeClazz[i];
columnJavaBeanAttributeClassMap.put( columnNames[i], attrClazz );
}
}
}
public void put( String columnName, ColumnAdapter adapter ) {
columnMap.put( columnName, adapter );
}
public void put( String columnName, Type type ) {
typeMap.put( columnName, type );
}
public void put( String columnName, String function ) {
functionMap.put( columnName, function );
}
public String[] getColumnNames() {
return columnNames;
}
public void setColumnNames( String[] columnNames ) {
this.columnNames=columnNames;
if( columnJavaBeanAttributeClazz!=null ) {
columnJavaBeanAttributeClassMap=new HashMap();
for( int i=0; i<columnJavaBeanAttributeClazz.length; i++ ) {
String attrClazz=columnJavaBeanAttributeClazz[i];
columnJavaBeanAttributeClassMap.put( columnNames[i], attrClazz );
}
}
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id=id;
}
public String[] getIdColumnNames() {
return idColumnNames;
}
public void setIdColumnNames( String[] idColumnNames ) {
this.idColumnNames=idColumnNames;
}
public String[] getUniqueColumnNames() {
return uniqueColumnNames;
}
public void setUniqueColumnNames( String[] uniqueColumnNames ) {
this.uniqueColumnNames=uniqueColumnNames;
}
public String getTableName() {
return tableName;
}
public void setTableName( String tableName ) {
this.tableName=tableName.toLowerCase();
}
public void setMappingClass( String mappingClass ) {
this.mappingClass=mappingClass;
}
public String getMappingClass() {
return this.mappingClass;
}
public Table getTable() {
Table table=new Table();
table.setId( id );
table.setColumnNames( columnNames );
Column[] cols=getColumnByName( columnNames );
table.setColumns( cols );
String[] exceptIdColumnNames=getExceptIdColumnNames();
table.setExceptIdColumnNames( exceptIdColumnNames );
table.setExceptIdColumns( getColumnByName( exceptIdColumnNames ) );
table.setIdColumnNames( idColumnNames );
table.setIdColumns( getColumnByName( idColumnNames ) );
table.setName( tableName );
table.setUniqueColumnNames( uniqueColumnNames );
table.setUniqueColumns( getColumnByName( uniqueColumnNames ) );
table.setMappingClass(mappingClass);
return table;
}
private String[] getExceptIdColumnNames() {
Set set=new HashSet();
if( idColumnNames!=null ) {
for( int i=0; i<idColumnNames.length; i++ ) {
set.add( idColumnNames[i] );
}
}
String[] names=new String[columnNames.length-set.size()];
int addIndex=0;
for( int i=0; i<columnNames.length; i++ ) {
String name=columnNames[i];
if( !set.contains( name ) ) {
names[addIndex]=name;
addIndex++;
}
}
return names;
}
public Column[] getColumnByName( String[] columnNames ) {
if( columnNames==null )
return null;
Column[] cols=new Column[columnNames.length];
for( int i=0; i<cols.length; i++ ) {
Column column=new Column();
String name=columnNames[i];
column.setName( name );
ColumnAdapter adapter=(ColumnAdapter) columnMap.get( name );
//if no adapter, create one
if( adapter==null ) {
if( MapStorgeObject.class.getName().equals( mappingClass ) ) {
adapter=new MapStorgeColumnAdapter( name );
} else {
// javabean
String attrClass=(String) columnJavaBeanAttributeClassMap.get( name );
if( attrClass==null ) {
attrClass="java.lang.Object";
}
adapter=new JavaBeanColumnAdapter( name, attrClass );
}
columnMap.put( name, adapter );
}
column.setAdapter( adapter );
column.setType( (Type) typeMap.get( name ) );
column.setFunction((String)functionMap.get( name ));
cols[i]=column;
}
return cols;
}
}