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;
038:
039: import java.sql.ResultSet;
040: import java.sql.SQLException;
041: import java.util.ArrayList;
042: import java.util.Collections;
043: import java.util.List;
044:
045: import java.util.ResourceBundle;
046: import org.openide.util.NbBundle;
047:
048: /**
049: * @author Jonathan Giron
050: */
051: public class KeyColumn {
052: /**
053: * DatabaseMetaData ResultSet column name used to decode name of associated primary key
054: */
055: protected static final String RS_KEY_NAME = "PK_NAME"; // NOI18N
056:
057: private static final String RS_COLUMN_NAME = "COLUMN_NAME"; // NOI18N
058:
059: /**
060: * DatabaseMetaData ResultSet column name used to decode key sequence number
061: */
062: protected static final String RS_SEQUENCE_NUM = "KEY_SEQ"; // NOI18N
063:
064: /** Name of column */
065: protected String columnName;
066:
067: /** Name of key associated with this column */
068: protected String keyName;
069:
070: /** For composite keys, sequence of this column for the associated key */
071: protected int sequenceNum;
072:
073: /**
074: * Creates a List of (primary) KeyColumn instances from the given ResultSet.
075: *
076: * @param rs ResultSet containing primary key metadata as obtained from DatabaseMetaData
077: * @return List of KeyColumn instances based from metadata in rs
078: * @throws SQLException if SQL error occurs while reading in data from given ResultSet
079: */
080: public static List createPrimaryKeyColumnList(final ResultSet rs,
081: boolean odbcflag) throws SQLException {
082: if (rs == null) {
083: final ResourceBundle cMessages = NbBundle
084: .getBundle(KeyColumn.class);// NO i18n
085: throw new IllegalArgumentException(cMessages
086: .getString("ERROR_NULL_RS")
087: + "(ERROR_NULL_RS)");// NO
088: // i18n
089: }
090:
091: List pkColumns = Collections.EMPTY_LIST;
092:
093: if (rs != null && rs.next()) {
094: pkColumns = new ArrayList();
095:
096: do {
097: pkColumns.add(new KeyColumn(rs, odbcflag));
098: } while (rs.next());
099: }
100:
101: return pkColumns;
102: }
103:
104: /**
105: * Creates an instance of KeyColumn with the given values.
106: *
107: * @param name name of key
108: * @param column name of column
109: * @param colSequence sequence of this column within (composite) primary key
110: */
111: public KeyColumn(final String name, final String column,
112: final int colSequence) {
113: this .keyName = name;
114: this .columnName = column;
115: this .sequenceNum = colSequence;
116: }
117:
118: /** Creates a new instance of KeyColumn */
119: protected KeyColumn() {
120: }
121:
122: private KeyColumn(final ResultSet rs, boolean odbcflag)
123: throws SQLException {
124: if (rs == null) {
125: final ResourceBundle cMessages = NbBundle
126: .getBundle(KeyColumn.class);// NO i18n
127: throw new IllegalArgumentException(cMessages
128: .getString("ERROR_VALID_RS")
129: + "(ERROR_VALID_RS)");// NO
130: // i18n
131: }
132: // Order of the result set for odbc driver
133: // {6=PK_NAME, 5=KEY_SEQ, 4=COLUMN_NAME, 3=TABLE_NAME, 2=TABLE_SCHEM,
134: // 1=TABLE_CAT}
135: if (odbcflag) {
136: String tablecat = rs.getString(1);
137: String tablesch = rs.getString(2);
138: String tablename = rs.getString(3);
139: this .columnName = rs.getString(4);
140: this .sequenceNum = rs.getShort(5);
141: this .keyName = rs.getString(6);
142: } else {
143: this .keyName = rs.getString(KeyColumn.RS_KEY_NAME);
144: this .columnName = rs.getString(KeyColumn.RS_COLUMN_NAME);
145: this .sequenceNum = rs.getShort(KeyColumn.RS_SEQUENCE_NUM);
146: }
147: }
148:
149: /**
150: * Gets name of column name associate with this primary key.
151: *
152: * @return name of column
153: */
154: public String getColumnName() {
155: return this .columnName;
156: }
157:
158: /**
159: * Gets name of primary key with which this column is associated.
160: *
161: * @return name of associated PK
162: */
163: public String getName() {
164: return this .keyName;
165: }
166:
167: /**
168: * Gets sequence of this column within the (composite) primary key.
169: *
170: * @return column sequence
171: */
172: public int getColumnSequence() {
173: return this.sequenceNum;
174: }
175: }
|