1
2 /*
3 LoaderGenerator - tool for generated xml, sql and doml file needed for Octopus.
4
5
6 Copyright (C) 2003 Together
7
8 This library is free software; you can redistribute it and/or
9 modify it under the terms of the GNU Lesser General Public
10 License as published by the Free Software Foundation; either
11 version 2.1 of the License, or (at your option) any later version.
12
13 This library is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 Lesser General Public License for more details.
17
18 You should have received a copy of the GNU Lesser General Public
19 License along with this library; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21 */
22
23 package org.webdocwf.util.loader.generator;
24
25 import java.sql.Connection;
26 import java.sql.ResultSet;
27 import java.util.ArrayList;
28 import java.util.Arrays;
29 import java.util.Hashtable;
30 import java.util.List;
31
32 import org.webdocwf.util.loader.LoaderException;
33 import org.webdocwf.util.loader.logging.Logger;
34 import org.webdocwf.util.loader.logging.StandardLogger;
35
36 /***
37 *
38 * TableRelationshipsReader class read the data which describe database relationships
39 * between the tables.
40 * @author Radoslav Dutina
41 * @version 1.0
42 */
43 public class TableRelationshipsReader {
44
45 private static List listPrimaryKeys = null;
46 private static List listIndexVariables = null;
47 private static List listForeignVariables = null;
48 private Hashtable htIndexAndReplacement = new Hashtable();
49 private RelationshipsAttributes relationshipsAttributes = new RelationshipsAttributes();
50 private Logger logger;
51 /***
52 * Construct object TableRelationshipsReader with associated parameters.
53 * @param tableName is name of the table form which we retrieve data.
54 * @param conn is the named connection.
55 * @param catalogName is the name of the current database.
56 */
57 public TableRelationshipsReader(Connection conn, String tableName, String catalogName, InputParameters generatorParameters, int constraintCount) throws LoaderException{
58 setLogger();
59 this.logger.write("full", "TableRelationshipsReader is started.");
60 listPrimaryKeys = new ArrayList();
61 listIndexVariables = new ArrayList();
62 listForeignVariables = new ArrayList();
63 String maxConstraintLenght = generatorParameters.getMaxConstraintLength();
64 int maxConstraintInt = 0;
65 if (!maxConstraintLenght.equalsIgnoreCase("") && !maxConstraintLenght.equalsIgnoreCase("-1")) {
66 maxConstraintInt = Integer.parseInt(maxConstraintLenght);
67 }
68 // int constraintCount=0;
69
70 try {
71 boolean unique = false;
72 boolean app = false;
73 if(generatorParameters.getSourceType() != null &&
74 (generatorParameters.getSourceType().equals("Hsqldb") ||
75 generatorParameters.getSourceType().equals("HypersonicSQL") ||
76 generatorParameters.getSourceType().equals("DB2") )) {
77 catalogName = null;
78 }
79 //read meta data
80 ResultSet rs2 = conn.getMetaData().getIndexInfo(catalogName, null, tableName, false, true);
81 ResultSet rs3 = conn.getMetaData().getPrimaryKeys(catalogName, null, tableName);
82 ResultSet rs5 = conn.getMetaData().getImportedKeys(catalogName, null, tableName);
83
84 // read primary keys
85 while (rs3.next()) {
86 //primaryKeys
87 String primaryKeyName = rs3.getString(6);
88 if (maxConstraintInt > 0 && primaryKeyName.length() > maxConstraintInt) {
89 String newName = primaryKeyName.substring(0, maxConstraintInt - String.valueOf(constraintCount).length());
90 primaryKeyName = newName + String.valueOf(constraintCount);
91 constraintCount++;
92 }
93 listPrimaryKeys.add(primaryKeyName);
94 //columnName
95 listPrimaryKeys.add(rs3.getString(4));
96 }
97 rs3.close();
98
99 // read indexes
100 while (rs2.next()) {
101 if (rs2.getString(6) != null) {
102 //zoran comment this line,this was restrictive and preventing
103 // creating index on column that is primary key also
104 // if (!rs2.getString(9).equalsIgnoreCase(rs3.getString(4))) {
105 //unique
106 listIndexVariables.add(rs2.getString(4));
107 //index
108 String indexName = rs2.getString(6);
109 //ZK Added next line
110 String keyIndexName = indexName;
111 if (maxConstraintInt > 0 && indexName.length() > maxConstraintInt) {
112 String newName = indexName.substring(0, maxConstraintInt - String.valueOf(constraintCount).length());
113 indexName = newName + String.valueOf(constraintCount);
114 //constraintCount++;
115 //ZK 9.7 2004 Added next block of code.Fixed problem with generation of index on few columns.
116 if (!htIndexAndReplacement.containsKey(keyIndexName)) {
117 htIndexAndReplacement.put(keyIndexName, indexName);
118 constraintCount++;
119 } else {
120 indexName = htIndexAndReplacement.get(keyIndexName).toString();
121 }
122 //end
123 }
124 //index name
125 listIndexVariables.add(indexName);
126 //columnName
127 listIndexVariables.add(rs2.getString(9));
128 // }
129 }
130 }
131 rs2.close();
132
133 // read imported keys
134 while (rs5.next()) {
135 //ForeignKeyTable
136 listForeignVariables.add(rs5.getString(7));
137 //foreing key restrictions (lenght)
138 String foreignKeyName = rs5.getString(12);
139 if (maxConstraintInt > 0 && foreignKeyName.length() > maxConstraintInt) {
140 String newName = foreignKeyName.substring(0, maxConstraintInt - String.valueOf(constraintCount).length());
141 foreignKeyName = newName + String.valueOf(constraintCount);
142 constraintCount++;
143 }
144 //RelationShipName
145 listForeignVariables.add(foreignKeyName);
146 //ForeignKeyValue
147 listForeignVariables.add(rs5.getString(8));
148 //PrimaryKeyTable
149 listForeignVariables.add(rs5.getString(3));
150 //PrimariKeyValue
151 listForeignVariables.add(rs5.getString(4));
152 }
153 rs5.close();
154
155 RelationshipsAttributes.setTableName(tableName);
156 RelationshipsAttributes.setPrimaryKeys(getPrimaryKeys());
157 RelationshipsAttributes.setIndexVariables(getIndexVariables());
158 RelationshipsAttributes.setForeignVariables(getForeignVariables());
159
160 } catch (Exception e) {
161 LoaderException le = new LoaderException("Exception:",e);
162 this.logger.write("full", "Exception in class TableRelationshipsReader."+"\n"+le.getStackTraceAsString());
163 throw le;
164 }
165 this.logger.write("full", "TableRelationshipsReader is finished.");
166 }
167
168 /***
169 * This method sets the value of listPrimaryKeys parameters.
170 * @param primary_Keys is value of parameter.
171 */
172 public static void setPrimaryKeys(String[] primary_Keys) {
173 listPrimaryKeys = Arrays.asList(primary_Keys);
174 }
175
176 /***
177 * This method read the value of listPrimaryKeys parameters.
178 * @return value of parameter.
179 */
180 public static String[] getPrimaryKeys() {
181 String[] ret = new String[listPrimaryKeys.size()];
182 listPrimaryKeys.toArray(ret);
183 return ret;
184 }
185
186 /***
187 * This method sets the value of listIndexVariables parameters.
188 * @param index_Variables is value of parameter.
189 */
190 public static void setIndexVariables(String[] index_Variables) {
191 listIndexVariables = Arrays.asList(index_Variables);
192 }
193
194 /***
195 * This method read the value of listIndexVariables parameters.
196 * @return value of parameter.
197 */
198 public static String[] getIndexVariables() {
199 String[] ret = new String[listIndexVariables.size()];
200 listIndexVariables.toArray(ret);
201 return ret;
202 }
203
204 /***
205 * This method sets the value of listForeignVariables parameters.
206 * @param foreign_Variables is the value of parameter.
207 */
208 public static void setForeignVariables(String[] foreign_Variables) {
209 listForeignVariables = Arrays.asList(foreign_Variables);
210 }
211
212 /***
213 * This method read the value of listForeignVariables parameters.
214 * @return value of parameter.
215 */
216 public static String[] getForeignVariables() {
217 String[] ret = new String[listForeignVariables.size()];
218 listForeignVariables.toArray(ret);
219 return ret;
220 }
221
222 /***
223 * This method read the value of RelationshipsAttributes parameters.
224 * @return references to RelationshipsAttributes objects.
225 */
226 public RelationshipsAttributes getRelationshipsAttributes() {
227
228 return relationshipsAttributes;
229 }
230 /***
231 * This method will set logger object
232 * @param logger
233 */
234 private void setLogger() {
235 this.logger = StandardLogger.getCentralLogger();
236 }
237 }
This page was automatically generated by Maven