All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.efaps.db.databases.information.TableInformation Maven / Gradle / Ivy

Go to download

eFaps is a framework used to map objects with or without attached files to a relational database and optional file systems (only for attaches files). Configurable access control can be provided down to object and attribute level depending on implementation and use case. Depending on requirements, events (like triggers) allow to implement business logic and to separate business logic from user interface. The framework includes integrations (e.g. webdav, full text search) and a web application as 'simple' configurable user interface. Some best practises, example web application modules (e.g. team work module) support administrators and implementers using this framework.

There is a newer version: 3.2.0
Show newest version
/*
 * Copyright 2003 - 2012 The eFaps Team
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * Revision:        $Rev: 7483 $
 * Last Changed:    $Date: 2012-05-11 11:57:38 -0500 (Fri, 11 May 2012) $
 * Last Changed By: $Author: [email protected] $
 */

package org.efaps.db.databases.information;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.UUID;

import org.apache.commons.lang.builder.ToStringBuilder;
import org.efaps.db.databases.AbstractDatabase;
import org.efaps.util.cache.CacheObjectInterface;

/**
 * Class used to return information about a SQL table.
 *
 * @author The eFaps Team
 * @version $Id: TableInformation.java 7483 2012-05-11 16:57:38Z [email protected] $
 */
public class TableInformation
    implements CacheObjectInterface
{
    /**
     * Stores the map between a column name and the column information itself.
     *
     * @see #getColInfo(String)
     * @see #addColInfo(String, Set, int, int, boolean)
     */
    private final Map colMap = new HashMap();

    /**
     * Stores the map between a unique key name and the unique key information
     * itself.
     *
     * @see #getUKInfo(String)
     * @see #addUniqueKeyColumn(String, String)
     */
    private final Map ukMap = new HashMap();

    /**
     * Stores the map between comma separated string of column names of a unique
     * key and the unique key itself.
     *
     * @see #getUKInfoByColNames(String)
     * @see #addUniqueKeyColumn(String, String)
     */
    private final Map ukColMap = new HashMap();

    /**
     * Stores the map between a name of a foreign key and the information about
     * the foreign key itself. The name of all foreign keys are in upper case.
     *
     * @see #getFKInfo(String)
     * @see #addForeignKey(String, String, String, String, boolean)
     */
    private final Map fkMap = new HashMap();

    /**
     * SQL table name.
     *
     * @see #TableInformation(String)
     * @see #getName()
     */
    private final String name;

    /**
     * Initialize this table information instance for given
     * _tableName.
     *
     * @param _tableName    name of SQL table for which the information
     *                      is searched
     */
    public TableInformation(final String _tableName)
    {
        this.name = _tableName.toUpperCase();
    }

    /**
     * Appends the column information for given values for column
     * _colName.
     *
     * @param _colName      name of the column
     * @param _colTypes     eFaps types of the column
     * @param _size         size (for character)
     * @param _scale        scale (for number)
     * @param _isNullable   is the column nullable?
     * @see #colMap
     */
    public void addColInfo(final String _colName,
                              final Set _colTypes,
                              final int _size,
                              final int _scale,
                              final boolean _isNullable)
    {
        this.colMap.put(_colName.toUpperCase(),
                        new ColumnInformation(_colName, _colTypes, _size, _scale, _isNullable));
    }

    /**
     * Adds an unique key information to this table information.
     *
     * @param _ukName   name of unique key
     * @param _colIndex index of the column for given unique key
     * @param _colName  name of the column for given unique key
     * @see #ukMap
     * @see #ukColMap
     */
    public void addUniqueKeyColumn(final String _ukName,
                                   final int _colIndex,
                                   final String _colName)
    {
        final String ukName = _ukName.toUpperCase();
        final UniqueKeyInformation uki;
        if (!this.ukMap.containsKey(ukName))  {
            uki = new UniqueKeyInformation(_ukName);
            this.ukMap.put(ukName, uki);
        } else  {
            uki = this.ukMap.get(ukName);
        }
        uki.appendColumnName(_colIndex, _colName);

//        this.ukColMap.put(uki.getColumnNames(), uki);
    }

    /**
     * Fetches all foreign keys for this table.
     *
     * @param _fkName       name of foreign key
     * @param _colName      name of column name
     * @param _refTableName name of referenced SQL table
     * @param _refColName   name of column within referenced SQL table
     * @param _cascade      delete cascade activated
     * @see #fkMap
     */
    public void addForeignKey(final String _fkName,
                              final String _colName,
                              final String _refTableName,
                              final String _refColName,
                              final boolean _cascade)
    {
        this.fkMap.put(_fkName.toUpperCase(),
                       new ForeignKeyInformation(_fkName, _colName, _refTableName, _refColName, _cascade));
    }

    /**
     * 

Returns for given column name (of the SQL table) the column * information. If the column does not exists in the table, a * null is returned.

*

The name of given column is searched independently of upper and / or * lower case.

* * @param _columnName name of column for which the column information is * searched * @return column information for given column name; or null * if column does not exists in the table * @see #colMap */ public ColumnInformation getColInfo(final String _columnName) { return (_columnName != null) ? this.colMap.get(_columnName.toUpperCase()) : null; } /** *

Returns for given name of unique key (of the SQL table) the * information about the unique key, or if the given name of unique key is * not defined, a null is returned.

*

The name of the given unique key is searched independently of upper * and / or lower case.

* * @param _ukName name of unique key which is searched * @return unique key information * @see #ukMap */ public UniqueKeyInformation getUKInfo(final String _ukName) { return (_ukName != null) ? this.ukMap.get(_ukName.toUpperCase()) : null; } /** *

Returns for given name of unique key _ukColName (of the * SQL table) the information about the unique key, or if the given name of * unique key is not defined, a null is returned.

*

The name of the given unique key is searched independently of upper * and / or lower case.

* * @param _ukColName name of column names for which the unique key is * searched * @return unique key information * @see #ukColMap */ public UniqueKeyInformation getUKInfoByColNames(final String _ukColName) { return (_ukColName != null) ? this.ukColMap.get(_ukColName.toUpperCase()) : null; } /** *

Returns for given name of foreign key _fkName (of the * SQL table) the information about the foreign key, or if the given name * of foreign key is not defined, a null is returned.

*

The name of the given foreign key is searched independently of upper * and / or lower case.

* * @param _fkName name of foreign key which is searched * @return foreign key information * @see #fkMap */ public ForeignKeyInformation getFKInfo(final String _fkName) { return (_fkName != null) ? this.fkMap.get(_fkName.toUpperCase()) : null; } /** * Returns the string representation of this class instance. The * information includes {@link #name}, {@link #colMap}, {@link #ukMap} and * {@link #fkMap}. * * @return string representation of this table information */ @Override public String toString() { return new ToStringBuilder(this) .append("name", this.name) .append("columns", this.colMap.values()) .append("unique keys", this.ukMap.values()) .append("foreign keys", this.fkMap.values()) .toString(); } /** * Returns the {@link #name table name}. * * @return table name * @see #name */ @Override public String getName() { return this.name; } /** * An id does not exists for the table information and so an error will * be always thrown if this method is called. The method is only required * to implement interface {@link CacheObjectInterface}, * @return nothing because an error will be always thrown */ @Override public long getId() { throw new Error("id does not exists for the table information"); } /** * An UUID does not exists for the table information and so an error will * be always thrown if this method is called. The method is only required * to implement interface {@link CacheObjectInterface}, * * @return nothing because an error will be always thrown */ @Override public UUID getUUID() { throw new Error("UUID does not exists for the table information"); } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy