FileDocCategorySizeDatePackage
TableImpl.javaAPI DocExample4236Tue Dec 08 01:21:00 GMT 1998oisoft.togetherx.scripts.SQL.impl

TableImpl.java

package oisoft.togetherx.scripts.SQL.impl;

import java.util.Enumeration;

import COM.objectspace.jgl.HashMap;

import oisoft.togetherx.scriptapi.UML.UMLClass;
import oisoft.togetherx.scriptapi.UML.UMLAttribute;

import oisoft.togetherx.scripts.SQL.*;

class TableImpl implements SQLTable{
  private SQLModelImpl myModel;
  private UMLClass myClass;
  private String myName;
  private HashMap myColumns = new HashMap();
  private HashMap myForeignColumns = new HashMap();

  TableImpl(UMLClass clazz, SQLModelImpl model){
    myClass = clazz;
    myModel = model;
  }

  public SQLModel getModel(){
    return myModel;
  }
  public String getCatalog(){
    return null;
  }
  public String getSchema(){
    return null;
  }
  public String getName(){
    if( myName == null ){
      myName = myModel.createTableName(myClass.toShortString());
    }
    return myName;
  }
  /**
    @todo create tag for table type
    @see java.sql.DatabaseMetaData#getTables
  */
  public String getType(){
    return "TABLE";
  }
  /**
    @todo Use doc from model for remarks
  */
  public String getRemarks(){
    return "";
  }
  public Enumeration getColumns(){
    return getColumns(true);
  }
  public Enumeration getColumns(boolean showForeign){
    return new ColumnEnumeration(this,myModel,showForeign);
  }
  /**
    @todo Implement it!
  */
  public Enumeration getConstraints(){
    return new TableConstraintEnumeration(this);
  }

  public Enumeration getPrimaryKeyColumns(){
    return getPrimaryKeyColumns(true);
  }
  public Enumeration getPrimaryKeyColumns(boolean showForeign){
    return new ColumnEnumeration(this,myModel,showForeign,true);
    //return new FilterEnumeration(getColumns(showForeign),new PrimaryKeyColumnFilter());
  }

  UMLClass getUMLClass(){
    return myClass;
  }

  SQLColumn getColumn(UMLAttribute attribute){
    return getColumn(attribute,false);
  }

  private SQLColumn getColumn(UMLAttribute attribute, boolean forcePrimaryKey){
    SQLColumn result = (SQLColumn)myColumns.get(attribute);
    if( result == null ){
      boolean nullable = !attribute.hasProperty(tagNamePrimaryKey());
      result = new ColumnImpl(attribute,nullable,forcePrimaryKey,this);
      myColumns.put(attribute,result);
    }
    return result;
  }

  SQLColumn getForeignKeyColumn(ColumnImpl column, boolean forcePrimaryKey){
    //return getColumn(column.getAttribute(),forcePrimaryKey);
    SQLColumn result = (SQLColumn)myForeignColumns.get(column);
    if( result == null ){
      boolean nullable = !column.getAttribute().hasProperty(tagNamePrimaryKey());
      result = new ColumnImpl(column.getAttribute(),nullable,forcePrimaryKey,this,true);
      myForeignColumns.put(column,result);
    }
    return result;
  }

  String createColumnName(ColumnImpl column){
    String fullName = null;
    if( column.isForeignKey() ){
      fullName = prefixForeignKey()+column.getAttribute().getName();
    }
    else{
      fullName = column.getAttribute().getName();
    }
    String result = myModel.getNameConstraints().shorten(fullName,
      myModel.getNameConstraints().getMaxColumnNameLength());
    return myModel.dereserve(result);
  }
  String prefixForeignKey(){
    return "FK_";
  }
  String getPrimaryKeyName(){
    String fullName = "PK_"+getName();
    String result = myModel.getNameConstraints().shorten(fullName,
      myModel.getNameConstraints().getMaxColumnNameLength());
    return myModel.getUniqueName(result,myModel.getNameConstraints().getMaxColumnNameLength());
  }
  String getForeignKeyName(SQLForeignKey fk){
    String fullName = "CONSTRAINT_FK_"+fk.getReferencedTable().getName();
    String result = myModel.getNameConstraints().shorten(fullName,
      myModel.getNameConstraints().getMaxColumnNameLength());
    return myModel.getUniqueName(result,myModel.getNameConstraints().getMaxColumnNameLength());
  }

  SQLDiagramTags getTags(){
    return myModel.getTags();
  }

  private String tagNamePrimaryKey(){
    return getTags().attributePrimaryKey();
  }
}