001: /*
002: * The contents of this file are subject to the terms of the Common Development
003: * and Distribution License (the License). You may not use this file except in
004: * compliance with the License.
005: *
006: * You can obtain a copy of the License at http://www.netbeans.org/cddl.html
007: * or http://www.netbeans.org/cddl.txt.
008: *
009: * When distributing Covered Code, include this CDDL Header Notice in each file
010: * and include the License file at http://www.netbeans.org/cddl.txt.
011: * If applicable, add the following below the CDDL Header, with the fields
012: * enclosed by brackets [] replaced by your own identifying information:
013: * "Portions Copyrighted [year] [name of copyright owner]"
014: *
015: * The Original Software is NetBeans. The Initial Developer of the Original
016: * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun
017: * Microsystems, Inc. All Rights Reserved.
018: */
019:
020: /*
021: *
022: * Copyright 2005 Sun Microsystems, Inc.
023: *
024: * Licensed under the Apache License, Version 2.0 (the "License");
025: * you may not use this file except in compliance with the License.
026: * You may obtain a copy of the License at
027: *
028: * http://www.apache.org/licenses/LICENSE-2.0
029: *
030: * Unless required by applicable law or agreed to in writing, software
031: * distributed under the License is distributed on an "AS IS" BASIS,
032: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
033: * See the License for the specific language governing permissions and
034: * limitations under the License.
035: *
036: */
037: package org.netbeans.modules.jdbcwizard.builder.dbmodel;
038:
039: import java.util.List;
040:
041: /**
042: * Interface describing index metadata for data sources providing information in a database or
043: * database-like format. Implementing classes must support the Cloneable interface.
044: *
045: * @author
046: */
047: public interface Index extends Cloneable {
048:
049: /**
050: * Gets (optional) name of this index.
051: *
052: * @return Index name, or null if none was defined
053: */
054: public String getName();
055:
056: /**
057: * Gets reference to JDBCTable that owns this Index.
058: *
059: * @return parent JDBCTable
060: */
061: public DBTable getParent();
062:
063: /**
064: * Gets type of index.
065: *
066: * @return index type, as enumerated in DatabaseMetaData
067: * @see java.sql.DatabaseMetaData#tableIndexClustered
068: * @see java.sql.DatabaseMetaData#tableIndexHashed
069: * @see java.sql.DatabaseMetaData#tableIndexOther
070: */
071: public int getType();
072:
073: /**
074: * Indicates whether this index enforces uniqueness
075: *
076: * @return true if index enforces uniqueness, false otherwise
077: */
078: public boolean isUnique();
079:
080: /**
081: * Gets sort order, if any, used in this index
082: *
083: * @return String indicating sort order; 'A' for ascending, 'D' for descending, null if no sort
084: * order is established
085: */
086: public String getSortSequence();
087:
088: /**
089: * Gets cardinality of this index
090: *
091: * @return value representing cardinality of the index
092: */
093: public int getCardinality();
094:
095: /**
096: * Gets read-only List of Strings (in sequential order) representing names of indexed columns.
097: *
098: * @return List of names of indexed columns
099: */
100: public List getColumnNames();
101:
102: /**
103: * Gets count of indexed columns.
104: *
105: * @return column count
106: */
107: public int getColumnCount();
108:
109: /**
110: * Gets ordinal (base-one) sequence of the given DBColumn in this Index, provided it exists. The
111: * return value ranges from 1 (first column) to n, where n is the total number of columns
112: * indexed, or -1 if col is not indexed by this instance.
113: *
114: * @param col DBColumn whose sequence is requested
115: * @return ordinal sequence of col, starting with 1 if the column is the first in a composite
116: * index; -1 if col is not indexed by this instance
117: */
118: public int getSequence(DBColumn col);
119:
120: /**
121: * Gets name of the column positioned as the iColumn-th column, if any, indexed by this Index.
122: * iColumn ranges from 1 (first column) to n, where n is the total number of columns indexed.
123: *
124: * @param iColumn index of column whose name is requested
125: * @return name of iColumn-th indexed column, or null if no column exists at the given position.
126: */
127: public String getColumnName(int iColumn);
128:
129: /**
130: * Indicates whether the column represented by the given columnName is indexed by this instance.
131: *
132: * @param columnName name of column to test
133: * @return true if columnName is indexed by this instance, false otherwise.
134: */
135: public boolean contains(String columnName);
136:
137: /**
138: * Indicates whether this column is indexed by this instance.
139: *
140: * @param col DBColumn to test
141: * @return true if columnName is indexed by this instance, false otherwise.
142: */
143: public boolean contains(DBColumn col);
144: }
|