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 org.netbeans.modules.sql.framework.model.DBColumn;
044: import java.util.List;
045:
046: /**
047: * Interface describing foreign-key metadata for data sources providing information
048: * in a database or database-like format. Implementing classes must support the
049: * Cloneable interface.
050: *
051: * @author Jonathan Giron
052: */
053: public interface ForeignKey extends Cloneable {
054:
055: /**
056: * Gets user-defined name for this Foreign Key.
057: *
058: * @return FK name
059: */
060: public String getName();
061:
062: /**
063: * Gets name, if any, of associated primary key
064: *
065: * @return name of this primary key; may be null if no name exists for the PK
066: */
067: public String getPKName();
068:
069: /**
070: * Gets read-only List of Strings (in sequential order) representing names
071: * of columns comprising this ForeignKey.
072: *
073: * @return List of column names
074: */
075: public List<String> getColumnNames();
076:
077: /**
078: * Gets read-only List of Strings (in key sequence order) representing
079: * names of PK columns referenced by elements of this ForeignKey.
080: *
081: * @return List of PK column names referenced by this ForeignKey
082: */
083: public List<String> getPKColumnNames();
084:
085: /**
086: * Gets name of PK column, if any, which the FK column (represented by the
087: * given column name) references.
088: *
089: * @param fkColumnName name of FK column whose referenced PK column is to
090: * be retrieved
091: * @return name of matching PK column, or null if fkColumnName is not an FK
092: * column
093: */
094: public String getMatchingPKColumn(String fkColumnName);
095:
096: /**
097: * Gets name of table containing PK columns referenced by this ForeignKey.
098: *
099: * @return PK table name
100: */
101: public String getPKTable();
102:
103: /**
104: * Gets name of schema, if any, to which PK table belongs.
105: *
106: * @return schema name for PK table; null if no schema name is defined
107: */
108: public String getPKSchema();
109:
110: /**
111: * Gets name of catalog, if any, to which PK table belongs.
112: *
113: * @return catalog name for PK table; null if no catalog name is defined
114: */
115: public String getPKCatalog();
116:
117: /**
118: * Gets reference to DBTable that owns this primary key.
119: *
120: * @return parent DBTable
121: */
122: public DBTable getParent();
123:
124: /**
125: * Gets count of columns participating in this ForeignKey.
126: *
127: * @return column count
128: */
129: public int getColumnCount();
130:
131: /**
132: * Gets name of the column positioned as the iColumn-th column, if any,
133: * participating in this ForeignKey. iColumn ranges from 1 (first column)
134: * to n, where n is the total number of columns in this ForeignKey.
135: *
136: * @param iColumn index of column whose name is requested
137: * @return name of iColumn-th DBColumn in this ForeignKey, or null if no
138: * column exists at the given position.
139: */
140: public String getColumnName(int iColumn);
141:
142: /**
143: * Gets ordinal (base-one) sequence of the given DBColumn in this FK,
144: * provided it is part of this FK. The return value ranges from 1 (first
145: * column) to n, where n is the total number of columns in this ForeignKey,
146: * or -1 if col is not part of the ForeignKey.
147: *
148: * @param col DBColumn whose sequence is requested
149: * @return ordinal sequence of col, starting with 1 if the column is the
150: * first in a composite key; -1 if col does not participate in this
151: * ForeignKey
152: */
153: public int getSequence(DBColumn col);
154:
155: /**
156: * Gets enumerated update rule associated with columns of this ForeignKey,
157: * as defined in java.sql.DatabaseMetaData.
158: *
159: * @return int value representing associated update rule
160: * @see java.sql.DatabaseMetaData
161: */
162: public int getUpdateRule();
163:
164: /**
165: * Gets enumerated delete rule associated with columns of this ForeignKey,
166: * as defined in java.sql.DatabaseMetaData.
167: *
168: * @return int value representing associated delete rule
169: * @see java.sql.DatabaseMetaData
170: */
171: public int getDeleteRule();
172:
173: /**
174: * Gets enumerated deferrability rule associated with columns of this
175: * ForeignKey, as defined in java.sql.DatabaseMetaData.
176: *
177: * @return int value representing associated deferrability rule
178: * @see java.sql.DatabaseMetaData
179: */
180: public int getDeferrability();
181:
182: /**
183: * Indicates whether this ForeignKey contains the column represented by
184: * the given name.
185: *
186: * @param fkColumnName name of column to test
187: * @return true if this ForeignKey contains the column referenced by
188: * fkColumnName, false otherwise.
189: */
190: public boolean contains(String fkColumnName);
191:
192: /**
193: * Indicates whether this ForeignKey contains the given column.
194: *
195: * @param fkCol ETLColumn to test
196: * @return true if this ForeignKey contains fkCol, false otherwise
197: */
198: public boolean contains(DBColumn fkCol);
199:
200: /**
201: * Indicates whether this ForeignKey references columns in the DBTable
202: * represented by the given tuple of (table name, schema name, catalog name).
203: *
204: * @param pk PrimaryKey whose relationship to this FK is to be tested
205: * @return true if this FK references columns in pk; false otherwise
206: */
207: public boolean references(PrimaryKey pk);
208: }
|