/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.model;
// Persistence
import net.codjo.persistent.AbstractPersistent;
import net.codjo.persistent.Reference;
import java.util.List;
import java.util.Map;
/**
* Cette classe fournit des informations sur la d�finition d'une table de la base.
*
* @version $Revision: 1.3 $
*
*/
public class Table extends AbstractPersistent implements TableRecordingMode {
private String tableName;
private String dbTableName;
private String step;
private String source;
private int recordingMode;
private Map allColumns = null;
private List pkNames = null;
private String application;
/**
* Constructeur.
*
* @param ref La reference de la table.
* @param dbTableName Le nom physique de la table.
* @param tableName Le nom fonctionel de la table.
* @param step Le niveau de formatage de la table.
* @param source Le systeme d'origine de la table (ex: "GPI")
* @param recordingMode Le mode d'historisation
* @param application L'application � laquelle appartient la table (ex :
* "INFOCENTRE").
*
* @see net.codjo.model.TableRecordingMode
*/
public Table(Reference ref, String dbTableName, String tableName, String step,
String source, int recordingMode, String application) {
super(ref);
init(dbTableName, tableName, step, source, recordingMode, application);
}
/**
* Constructor for the Table object
*
* @param ref La reference de la table
* @param dbTableName Le nom physique de la table.
* @param allColumns Toutes les colonnes de la table
* @param pkNames Liste des cles primaires
*/
Table(Reference ref, String dbTableName, Map allColumns, List pkNames) {
super(ref);
init(dbTableName, null, null, null, 0, null);
setAllColumns(allColumns);
setPkNames(pkNames);
}
/**
* Positionne le nom fonctionnel de la table.
*
* @param newTableName The new TableName value
*/
public void setTableName(String newTableName) {
tableName = newTableName;
setSynchronized(false);
}
/**
* Sets the AllColumns attribute of the Table object
*
* @param newAllColumns The new AllColumns value
*
* @throws IllegalArgumentException TODO
*/
public void setAllColumns(Map newAllColumns) {
if (allColumns != null) {
throw new IllegalArgumentException("Colonnes deja positionnees");
}
if (newAllColumns != null && newAllColumns.size() == 0) {
newAllColumns = null;
}
allColumns = newAllColumns;
}
/**
* Sets the PkNames attribute of the Table object
*
* @param newPkNames The new PkNames value
*
* @throws IllegalArgumentException TODO
*/
public void setPkNames(List newPkNames) {
if (pkNames != null) {
throw new IllegalArgumentException();
}
pkNames = newPkNames;
}
/**
* Retourne l'identifiant de cette table
*
* @return DB_TABLE_NAME_ID
*/
public Integer getTableId() {
return (Integer)getId();
}
/**
* Retourne le nom physique de la table.
*
* @return Le nom physique de la table.
*/
public String getDBTableName() {
return dbTableName;
}
/**
* Retourne le nom fonctionnel de la table. Ce nom peut etre non renseigne.
*
* @return Le nom fonctionel de la table (ou null).
*/
public String getTableName() {
if (tableName == null) {
return getDBTableName();
}
else {
return tableName;
}
}
/**
* Retourne le type SQL de la colonne. Attention : Si la colonne est inexistante une
* exception NullPointerException sera lance.
*
* @param columnName Le nom physique de la colonne.
*
* @return Le type SQL
*
* @see java.sql.Types
*/
public int getColumnSqlType(String columnName) {
return ((Integer)getAllColumns().get(columnName)).intValue();
}
/**
* Retourne le niveau de formatage de la table. Cette information est optionnelle.
*
* @return Le niveau de formatage de la table (ou null).
*/
public String getTableStep() {
return step;
}
/**
* Retourne le nombre de colonne de la table.
*
* @return Le nombre de colonnes de la table
*/
public int getNumberOfCol() {
return getAllColumns().size();
}
/**
* Retourne le systeme d'origine de la table (ex: "GPI"). Cette information est
* optionnelle.
*
* @return The Source value
*/
public String getSource() {
return source;
}
/**
* Retourne toutes les colonnes de la table.
*
* @return Map (clef = nom de la colonne) (valeur = type SQL)
*/
public Map getAllColumns() {
if (allColumns == null) {
setAllColumns(getTableHome().determineAllColumns(getDBTableName()));
}
return allColumns;
}
/**
* Retourne le nom de l'application � laquelle appartient la Table.
*
* @return Le nom de l'application.
*/
public String getApplication() {
return application;
}
/**
* Retourne le mode d'historisation de la table.
*
* @return Le mode d'historisation.
*
* @see net.codjo.model.TableRecordingMode
*/
public int getRecordingMode() {
return recordingMode;
}
/**
* Gets the PkNames attribute of the Table object
*
* @return The PkNames value
*/
public List getPkNames() {
if (pkNames == null) {
pkNames = getTableHome().determinePkNames(getDBTableName());
}
return pkNames;
}
/**
* Indique si la colonne fait partie de la table.
*
* @param dbColumnName Nom physique de la colonne
*
* @return <code>true</code> si appartient a la table
*/
public boolean containsColumn(String dbColumnName) {
return getAllColumns().containsKey(dbColumnName);
}
/**
* DOCUMENT ME!
*
* @return -
*/
public String toString() {
if (tableName == null) {
return dbTableName;
}
return tableName;
}
/**
* Permet de tester l'�galit� entre des objets de ce type
*
* @param obj L'objet � tester
*
* @return Egalit� VRAI/FAUX
*/
public boolean equals(Object obj) {
if (obj instanceof Table) {
return dbTableName.equals(((Table)obj).dbTableName);
}
return false;
}
/**
* Gets the TableHome attribute of the Table object
*
* @return The TableHome value
*/
private TableHome getTableHome() {
return (TableHome)getReference().getModel();
}
/**
* Initialisation de l'objet
*
* @param dbTableName -
* @param tableName -
* @param step -
* @param source -
* @param recordingMode -
* @param application -
*
* @throws IllegalArgumentException TODO
*/
private void init(String dbTableName, String tableName, String step, String source,
int recordingMode, String application) {
if (dbTableName == null) {
throw new IllegalArgumentException("Nom physique de la table incorrect");
}
if (tableName != null && "".equals(tableName)) {
tableName = null;
}
this.tableName = tableName;
this.dbTableName = dbTableName;
this.step = step;
this.source = source;
this.recordingMode = recordingMode;
this.application = application;
}
}