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: * Sun Public License Notice
022: *
023: * The contents of this file are subject to the Sun Public License
024: * Version 1.0 (the "License"). You may not use this file except in
025: * compliance with the License. A copy of the License is available at
026: * http://www.sun.com/
027: *
028: * The Original Code is NetBeans. The Initial Developer of the Original
029: * Code is Sun Microsystems, Inc. Portions Copyright 1997-2004 Sun
030: * Microsystems, Inc. All Rights Reserved.
031: */
032:
033: package org.netbeans.modules.sql.project.dbmodel;
034:
035: import java.sql.ResultSet;
036: import java.sql.SQLException;
037: import java.util.ArrayList;
038: import java.util.Collections;
039: import java.util.List;
040:
041: //Internationalization
042: import java.util.Locale;
043: import java.text.MessageFormat;
044: import java.util.ResourceBundle;
045:
046: /**
047: *
048: * @author Jonathan Giron
049: * @version
050: */
051: public class KeyColumn {
052: /**
053: * DatabaseMetaData ResultSet column name used to decode name of associated
054: * primary key
055: */
056: protected static final String RS_KEY_NAME = "PK_NAME"; // NOI18N
057:
058: private static final String RS_COLUMN_NAME = "COLUMN_NAME"; // NOI18N
059:
060: /**
061: * DatabaseMetaData ResultSet column name used to decode key sequence number
062: */
063: protected static final String RS_SEQUENCE_NUM = "KEY_SEQ"; // NOI18N
064:
065: /** Name of column */
066: protected String columnName;
067:
068: /** Name of key associated with this column */
069: protected String keyName;
070:
071: /** For composite keys, sequence of this column for the associated key */
072: protected int sequenceNum;
073:
074: /**
075: * Creates a List of (primary) KeyColumn instances from the given ResultSet.
076: *
077: * @param rs ResultSet containing primary key metadata as obtained from
078: * DatabaseMetaData
079: * @return List of KeyColumn instances based from metadata in rs
080: *
081: * @throws SQLException if SQL error occurs while reading in data from
082: * given ResultSet
083: */
084: public static List createPrimaryKeyColumnList(ResultSet rs)
085: throws SQLException {
086: if (rs == null) {
087: Locale locale = Locale.getDefault();
088: ResourceBundle cMessages = ResourceBundle.getBundle(
089: "com/stc/oracle/builder/Bundle", locale); // NO i18n
090: throw new IllegalArgumentException(cMessages
091: .getString("ERROR_NULL_RS")
092: + "(ERROR_NULL_RS)");// NO i18n
093: }
094:
095: List pkColumns = Collections.EMPTY_LIST;
096:
097: if (rs != null && rs.next()) {
098: pkColumns = new ArrayList();
099:
100: do {
101: pkColumns.add(new KeyColumn(rs));
102: } while (rs.next());
103: }
104:
105: return pkColumns;
106: }
107:
108: /**
109: * Creates an instance of KeyColumn with the given values.
110: *
111: * @param name name of key
112: * @param column name of column
113: * @param colSequence sequence of this column within (composite) primary key
114: */
115: public KeyColumn(String name, String column, int colSequence) {
116: keyName = name;
117: columnName = column;
118: sequenceNum = colSequence;
119: }
120:
121: /** Creates a new instance of KeyColumn */
122: protected KeyColumn() {
123: }
124:
125: private KeyColumn(ResultSet rs) throws SQLException {
126: if (rs == null) {
127: Locale locale = Locale.getDefault();
128: ResourceBundle cMessages = ResourceBundle.getBundle(
129: "com/stc/oracle/builder/Bundle", locale); // NO i18n
130: throw new IllegalArgumentException(cMessages
131: .getString("ERROR_VALID_RS")
132: + "(ERROR_VALID_RS)");// NO i18n
133: }
134:
135: keyName = rs.getString(RS_KEY_NAME);
136: columnName = rs.getString(RS_COLUMN_NAME);
137: sequenceNum = rs.getShort(RS_SEQUENCE_NUM);
138: }
139:
140: /**
141: * Gets name of column name associate with this primary key.
142: *
143: * @return name of column
144: */
145: public String getColumnName() {
146: return columnName;
147: }
148:
149: /**
150: * Gets name of primary key with which this column is associated.
151: *
152: * @return name of associated PK
153: */
154: public String getName() {
155: return keyName;
156: }
157:
158: /**
159: * Gets sequence of this column within the (composite) primary key.
160: *
161: * @return column sequence
162: */
163: public int getColumnSequence() {
164: return sequenceNum;
165: }
166: }
|