package com.frameworkset.common.poolman.sql;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public class TableMetaData implements Comparable,Serializable{
private String tableName;
private String tableType;
private String schema;
private String remarks;
private Set<ColumnMetaData> columns = new TreeSet<ColumnMetaData>();
private Set<ColumnMetaData> primaryKeys = new TreeSet<ColumnMetaData>();
private Set<ColumnMetaData> foreignKeys = new TreeSet<ColumnMetaData>();
private Map<String,ColumnMetaData> columnsIdx = new HashMap<String,ColumnMetaData>();
private Map<String,ColumnMetaData> primarysIdx = new HashMap<String,ColumnMetaData>();
private Map<String,ColumnMetaData> foreignsIdx = new HashMap<String,ColumnMetaData>();
public Set<ColumnMetaData> getColumns() {
return columns;
}
public void addColumns(ColumnMetaData column) {
this.columns.add(column);
column.setTableMetaData(this);
this.columnsIdx.put(column.getColumnName().toLowerCase(),column);
}
public String getRemarks() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
}
public String getTableName() {
return tableName;
}
public void setTableName(String tableName) {
this.tableName = tableName;
}
public String getTableType() {
return tableType;
}
public void setTableType(String tableType) {
this.tableType = tableType;
}
public Set<ColumnMetaData> getPrimaryKeys() {
return primaryKeys;
}
public void addPrimaryKey(ColumnMetaData column)
{
this.primaryKeys.add(column);
column.setTableMetaData(this);
this.primarysIdx.put(column.getColumnName().toLowerCase(),column);
}
public Set<ColumnMetaData> getForeignKeys() {
return foreignKeys;
}
public void addForeignKey(ColumnMetaData foreignKey)
{
this.foreignKeys.add(foreignKey);
foreignKey.setTableMetaData(this);
this.foreignsIdx.put(foreignKey.getColumnName().toLowerCase(),foreignKey);
}
public ForeignKeyMetaData getForeignKeyMetaData(String columnName)
{
return (ForeignKeyMetaData)this.foreignsIdx.get(columnName.toLowerCase());
}
public PrimaryKeyMetaData getPrimaryKeyMetaData(String columnName)
{
return (PrimaryKeyMetaData )this.primarysIdx.get(columnName.toLowerCase());
}
public ColumnMetaData getColumnMetaData(String columnName) {
return (ColumnMetaData)columnsIdx.get(columnName.toLowerCase());
}
public String toString()
{
StringBuffer ret = new StringBuffer();
ret.append(this.tableName).append("(");
Object[] objs = this.columns.toArray();
boolean flag = false;
ret.append("\r\n").append(" Columns:");
for(int i = 0; i < objs.length; i ++)
{
if(flag)
ret.append("\r\n")
.append(objs[i].toString());
else
{
flag = true;
ret.append("\r\n").append(objs[i].toString());
}
}
ret.append("\r\n").append(" PrimaryKeys:");
Object[] prks = this.primaryKeys.toArray();
for(int i = 0; i < prks.length; i ++)
{
if(flag)
ret.append("\r\n")
.append(prks[i].toString());
else
{
flag = true;
ret.append("\r\n").append(prks[i].toString());
}
}
ret.append("\r\n").append(" ForeignKeys:");
Object[] fks = this.foreignKeys.toArray();
for(int i = 0; i < fks.length; i ++)
{
if(flag)
ret.append("\r\n")
.append(fks[i].toString());
else
{
flag = true;
ret.append("\r\n").append(fks[i].toString());
}
}
ret.append(")");
return ret.toString();
}
public String getSchema() {
return schema;
}
public void setSchema(String schema) {
this.schema = schema;
}
public int hashCode()
{
return this.tableName.toLowerCase().hashCode();
}
public boolean equals(Object obj)
{
if(obj instanceof TableMetaData)
{
TableMetaData temp = (TableMetaData)obj;
if(temp != null)
return temp.getTableName().equalsIgnoreCase(this.tableName);
else
return false;
}
else
return false;
}
public int compareTo(Object obj) {
if(obj instanceof TableMetaData)
{
TableMetaData temp = (TableMetaData)obj;
if(temp != null)
{
int ret = this.tableName.toLowerCase().compareTo(temp.getTableName().toLowerCase());
return ret;
}
else
{
return 0;
}
}
else
return 0;
}
}