001: /*
002: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
003: *
004: * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved.
005: *
006: * The contents of this file are subject to the terms of either the GNU
007: * General Public License Version 2 only ("GPL") or the Common
008: * Development and Distribution License("CDDL") (collectively, the
009: * "License"). You may not use this file except in compliance with the
010: * License. You can obtain a copy of the License at
011: * http://www.netbeans.org/cddl-gplv2.html
012: * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
013: * specific language governing permissions and limitations under the
014: * License. When distributing the software, include this License Header
015: * Notice in each file and include the License file at
016: * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this
017: * particular file as subject to the "Classpath" exception as provided
018: * by Sun in the GPL Version 2 section of the License file that
019: * accompanied this code. If applicable, add the following below the
020: * License Header, with the fields enclosed by brackets [] replaced by
021: * your own identifying information:
022: * "Portions Copyrighted [year] [name of copyright owner]"
023: *
024: * Contributor(s):
025: *
026: * The Original Software is NetBeans. The Initial Developer of the Original
027: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
028: * Microsystems, Inc. All Rights Reserved.
029: *
030: * If you wish your version of this file to be governed by only the CDDL
031: * or only the GPL Version 2, indicate your decision by adding
032: * "[Contributor] elects to include this software in this distribution
033: * under the [CDDL or GPL Version 2] license." If you do not indicate a
034: * single choice of license, a recipient has the option to distribute
035: * your version of this file under either the CDDL, the GPL Version 2 or
036: * to extend the choice of license to its licensees as provided above.
037: * However, if you add GPL Version 2 code and therefore, elected the GPL
038: * Version 2 license, then the option applies only if the new code is
039: * made subject to such option by the copyright holder.
040: */
041: package org.netbeans.modules.sql.framework.model;
042:
043: import java.util.List;
044: import java.util.Map;
045: import java.util.Set;
046:
047: /**
048: * Interface describing table metadata for data sources providing information in a
049: * database or database-like format. Implementing classes must support the
050: * Cloneable interface.
051: *
052: * @author Sudhendra Seshachala, Jonathan Giron
053: */
054: public interface DBTable extends Cloneable {
055:
056: /**
057: * Gets the user-defined name of this DBTable object.
058: *
059: * @return table name
060: */
061: public String getName();
062:
063: /**
064: * Gets the user-defined description String, if any, defined for this
065: * instance.
066: *
067: * @return description String, for this DBTable or null if none was defined.
068: */
069: public String getDescription();
070:
071: /**
072: * Gets name of the schema, if any, to which this DBTable belongs.
073: *
074: * @return schema name, or null if it doesn't belong to a schema
075: */
076: public String getSchema();
077:
078: /**
079: * Gets name of the catalog, if any, to which this DBTable belongs.
080: *
081: * @return catalog name, or null if it doesn't belong to a catalog
082: */
083: public String getCatalog();
084:
085: /**
086: * Get the column map for this table.
087: *
088: * @return Column metadata for this table.
089: */
090: public Map<String, DBColumn> getColumns();
091:
092: /**
093: * Gets the DBColumn associated with the given name
094: *
095: * @param columnName column name
096: * @return The column value
097: */
098: public DBColumn getColumn(String columnName);
099:
100: /**
101: * Gets a read-only List of DBColumn instances contained in this table.
102: *
103: * @return read-only List of DBColumns
104: */
105: public List<DBColumn> getColumnList();
106:
107: /**
108: * Get the DatabaseModel that contains this table.
109: *
110: * @return the instance of data source
111: */
112: public DatabaseModel getParent();
113:
114: /**
115: * Gets PrimaryKey, if any, defined on this table.
116: *
117: * @return PrimaryKey instance containing metadata for this table's PK,
118: * or null if no PK is defined
119: */
120: public PrimaryKey getPrimaryKey();
121:
122: /**
123: * Gets a List of ForeignKeys defined on columns in this DBTable.
124: *
125: * @return List of ForeignKeys defined on columns of this table; returns
126: * empty List if no ForeignKeys exist
127: */
128: public List<ForeignKey> getForeignKeys();
129:
130: /**
131: * Gets the ForeignKey instance, if any, associated with the given FK name.
132: *
133: * @param fkName name of FK to locate
134: * @return ForeignKey associated with fkName, or null if not found.
135: */
136: public ForeignKey getForeignKey(String fkName);
137:
138: /**
139: * Gets a read-only Set of DBTables, if any, whose primary keys are
140: * referenced by foreign key columns in this table.
141: *
142: * @return read-only List of names of tables referenced by columns in this
143: * table; returns empty List if this DBTable has no FK columns.
144: */
145: public Set getReferencedTables();
146:
147: /**
148: * Indicates whether the given table is referenced by one or more foreign
149: * key in this table.
150: *
151: * @param pkTarget table whose relationship with this table are to be checked
152: * @return true if this table has one or more FKs that reference pkTarget,
153: * false otherwise
154: */
155: public boolean references(DBTable pkTarget);
156:
157: /**
158: * Gets ForeignKey, if any, that references a corresponding PrimaryKey in
159: * the given DBTable.
160: *
161: * @param target DBTable whose relationship to this table is to be tested
162: * @return ForeignKey instance representing reference to target, or null
163: * if no such reference exists.
164: */
165: public ForeignKey getReferenceFor(DBTable target);
166:
167: /**
168: * Gets List of Index objects representing indices defined on columns of
169: * this table.
170: *
171: * @return List of Indexes defined on this table; returns empty List if no
172: * indexes are defined.
173: */
174: public List<Index> getIndexes();
175:
176: /**
177: * Gets Index, if any, associated with the given name.
178: *
179: * @param indexName name of index, if any, to be retrieved
180: * @return Index instance associated with indexName, or null if none was
181: * found.
182: */
183: public Index getIndex(String indexName);
184: }
|