import java.util.*;
/**
*
*/
/**
* @author Uisleandro
*
*/
public class MyTable {
private String tableName;
//HashTable replaced by Map
private Map<String, MyColumn> columns;
private Map<String, MyColumn> pk_columns;
//The name of the foreign key columns, used after as indexes
private ArrayList<String> fkNames;
private float size;
private float weight;
public MyTable(String table){
this.tableName = table;
this.columns = new HashMap<String, MyColumn>();
this.pk_columns = new HashMap<String, MyColumn>();
this.fkNames = new ArrayList<String>();
this.weight = 1F;
}
public MyTable(String table, float weight){
this.tableName = table;
this.columns = new HashMap<String, MyColumn>();
this.pk_columns = new HashMap<String, MyColumn>();
this.fkNames = new ArrayList<String>();
this.weight = weight;
}
/**
* @return the size of this table in Bytes
*/
public float getSize() {
return this.size;
}
/**
* @return the weight, in this case the number of insertions inside the database;
*/
public float getWeight() {
return weight;
}
/**
* @param weight the weight to set
*/
public void setWeight(int weight) {
this.weight = weight;
}
/*
* @param column
* @param size
* */
public void addColumn(String columnName, MyColumn columnType){
if(columnType == null){
System.out.println("Erro: MyTableAdapter: columnType == null");
return;
}
if(columnType.isFK()){
this.fkNames.add(columnName);
}
//Just count the size, no need to put it on insert.
if(columnType.getAutoIncrement()){
this.size += columnType.getSize();
if(!this.pk_columns.containsKey(columnName))
{
this.pk_columns.put(columnName, columnType);
}
return;
}
if(!this.columns.containsKey(columnName))
{
this.size += columnType.getSize();
this.columns.put(columnName, columnType);
}
}
/**
* @return Collection of columns from this MyTable instance
*/
public Map<String, MyColumn> getColumns(){
return this.columns;
}
/**
* @return The name of the table represented by this MyTable instance
*/
public String getTable(){
return this.tableName;
}
/**
* @return ArrayList containing the foreign key names
*/
public ArrayList<String> getFkNames(){
return this.fkNames;
}
/**
* @param o
* @return
*/
public Boolean pointsTo(MyTable o){
Iterator<String> it = this.getFkNames().iterator();
while(it.hasNext()){
if(this.getColumns().get(it.next()).getRefTable().equals(o.getTable())){
return true;
}
}
return false;
}
@Override
public String toString(){
return this.tableName;
}
/**
* @param args
*/
public static void main(String[] args) {
MyTable tabela = new MyTable("cargo");
tabela.addColumn("Cargo_id", new MyPKColumn() );
tabela.addColumn("fk_Empresa_id", new MyFKColumn("empresa", "Empresa_id") );
tabela.addColumn("Cargo_Nome", new MyColumn("varchar", 45) );
tabela = new MyTable("cargo_possui_risco_ocupacional");
tabela.addColumn("fk_Cargo_id", new MyPKColumn() );
tabela.addColumn("fk_Risco_id", new MyPKColumn() );
tabela = new MyTable("categoria_de_exames");
tabela.addColumn("Categoria_De_Exames_id", new MyPKColumn() );
tabela.addColumn("Categoria_De_Exames_Nome", new MyColumn("varchar", 45) );
tabela = new MyTable("empresa");
tabela.addColumn("Empresa_id", new MyPKColumn() );
tabela.addColumn("fk_User_id", new MyFKColumn("user", "User_id") );
tabela.addColumn("Empresa_Nome", new MyColumn("varchar", 45) );
tabela.addColumn("Empresa_CNPJ", new MyColumn("varchar", 21) );
tabela.addColumn("Empresa_IE", new MyColumn("varchar", 21) );
tabela = new MyTable("especialidade");
tabela.addColumn("Especialidade_id", new MyPKColumn() );
tabela.addColumn("Especialidade_Nome", new MyColumn("varchar", 45) );
tabela = new MyTable("exame");
tabela.addColumn("Exame_id", new MyPKColumn() );
tabela.addColumn("Exame_Nome", new MyColumn("varchar", 60) );
tabela.addColumn("Exame_Descricao", new MyColumn("varchar", 9000) );
tabela = new MyTable("funcionario");
tabela.addColumn("Funcionario_id", new MyPKColumn() );
tabela.addColumn("fk_User_id", new MyPKColumn() );
tabela.addColumn("Funcionario_Nome", new MyColumn("varchar", 45) );
tabela.addColumn("Funcionario_Matricula", new MyColumn("varchar", 11) );
tabela = new MyTable("funcionario_possui_cargo");
tabela.addColumn("fk_Funcionario_id", new MyPKColumn() );
tabela.addColumn("fk_Cargo_id", new MyPKColumn() );
tabela = new MyTable("funcionario_realiza_pacote_de_exames");
tabela.addColumn("fk_Funcionario_id", new MyPKColumn() );
tabela.addColumn("fk_Pacote_De_exames_id", new MyPKColumn() );
tabela.addColumn("Data_De_Entrega", new MyPKColumn() );
tabela.addColumn("Pacote_Realizado_id", new MyColumn("int", null) );
tabela.addColumn("fk_Medico_id", new MyColumn("int", null) );
tabela.addColumn("Laldo_Medico", new MyColumn("text", 65535) );
tabela = new MyTable("medico");
tabela.addColumn("fk_User_id", new MyPKColumn() );
tabela.addColumn("Nome", new MyColumn("varchar", 45) );
tabela.addColumn("CRM", new MyColumn("varchar", 21) );
tabela = new MyTable("medico_possui_especialidade");
tabela.addColumn("fk_Medico_id", new MyPKColumn() );
tabela.addColumn("fk_Especialidade_id", new MyPKColumn() );
tabela = new MyTable("pacote_de_exames");
tabela.addColumn("Pacote_De_Exames_id", new MyPKColumn() );
tabela.addColumn("fk_Categoria_De_Exames_id", new MyFKColumn("categoria_de_exames", "Categoria_De_Exames_id") );
tabela.addColumn("fk_Medico_id", new MyFKColumn("medico", "fk_User_id") );
tabela.addColumn("Pacote_De_Exames_Descricao", new MyColumn("varchar", 9000) );
tabela = new MyTable("pacote_de_exames_possui_exame");
tabela.addColumn("fk_Pacote_De_exames_id", new MyPKColumn() );
tabela.addColumn("fk_Exame_id", new MyPKColumn() );
tabela = new MyTable("resultado_do_exame");
tabela.addColumn("Resultado_Do_Exame_id", new MyPKColumn() );
tabela.addColumn("fk_Exame_id", new MyPKColumn() );
tabela.addColumn("fk_Pacote_Realizado", new MyFKColumn("funcionario_realiza_pacote_de_exames", "Pacote_Realizado_id") );
tabela.addColumn("Data_Do_Exame", new MyColumn("date", null) );
tabela.addColumn("Resultado_Descricao", new MyColumn("text", 65535) );
tabela = new MyTable("risco_ocupacional");
tabela.addColumn("Risco_id", new MyPKColumn() );
tabela.addColumn("fk_Medico_id", new MyFKColumn("medico", "fk_User_id") );
tabela.addColumn("Risco_Nome", new MyColumn("varchar", 45) );
tabela.addColumn("Risco_Descricao", new MyColumn("text", 65535) );
tabela = new MyTable("role");
tabela.addColumn("Role_id", new MyPKColumn() );
tabela.addColumn("RoleName", new MyColumn("varchar", 45) );
tabela = new MyTable("user");
tabela.addColumn("User_id", new MyPKColumn() );
tabela.addColumn("User_Name", new MyColumn("varchar", 45) );
tabela.addColumn("Password", new MyColumn("varchar", 45) );
tabela.addColumn("fk_Role_id", new MyFKColumn("role", "Role_id") );
System.out.println("End");
/*
SELECT * FROM information_schema.KEY_COLUMN_USAGE K WHERE CONSTRAINT_SCHEMA = 'pcmso';
#CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, CONSTRAINT_NAME, TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, ORDINAL_POSITION, POSITION_IN_UNIQUE_CONSTRAINT, REFERENCED_TABLE_SCHEMA, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
SELECT * FROM information_schema.`COLUMNS` C, information_schema.KEY_COLUMN_USAGE K;
UIS: idéia: atribuir pesos para as tabelas..
*/
}
}