00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 package org.objectweb.cjdbc.common.sql.schema;
00026
00027 import java.io.Serializable;
00028 import java.sql.SQLException;
00029 import java.util.ArrayList;
00030
00031 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags;
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 public class DatabaseSchema implements Serializable
00042 {
00043
00044 private ArrayList tables;
00045
00046 private ArrayList procedures;
00047
00048
00049
00050
00051 public DatabaseSchema()
00052 {
00053 tables = new ArrayList();
00054 procedures = new ArrayList();
00055 }
00056
00057
00058
00059
00060
00061
00062
00063 public DatabaseSchema(int nbOfTables)
00064 {
00065 tables = new ArrayList(nbOfTables);
00066 procedures = new ArrayList();
00067 }
00068
00069
00070
00071
00072
00073
00074
00075 public DatabaseSchema(DatabaseSchema schema)
00076 {
00077 if (schema == null)
00078 throw new IllegalArgumentException(
00079 "Illegal null database schema in DatabaseSchema(DatabaseSchema) constructor");
00080
00081 tables = new ArrayList(schema.getTables());
00082 procedures = new ArrayList(schema.getProcedures());
00083 }
00084
00085
00086
00087
00088
00089
00090 public void addTable(DatabaseTable table)
00091 {
00092 if (table == null)
00093 throw new IllegalArgumentException(
00094 "Illegal null database table in addTable(DatabaseTable) method");
00095 tables.add(table);
00096 }
00097
00098
00099
00100
00101
00102
00103
00104 public void addProcedure(DatabaseProcedure procedure)
00105 {
00106 if (procedure == null)
00107 throw new IllegalArgumentException(
00108 "Illegal null database table in addTable(DatabaseTable) method");
00109 procedures.add(procedure);
00110 }
00111
00112
00113
00114
00115
00116
00117 public void removeTable(DatabaseTable table)
00118 {
00119 if (table == null)
00120 throw new IllegalArgumentException(
00121 "Illegal null database table in removeTable(DatabaseTable) method");
00122 tables.remove(table);
00123 }
00124
00125
00126
00127
00128
00129
00130
00131 public void removeProcedure(DatabaseProcedure procedure)
00132 {
00133 if (procedure == null)
00134 throw new IllegalArgumentException(
00135 "Illegal null database procedure in removeProcedure(DatabaseProcedure) method");
00136 procedures.remove(procedure);
00137 }
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147 public void mergeSchema(DatabaseSchema databaseSchema) throws SQLException
00148 {
00149 if (databaseSchema == null)
00150 throw new IllegalArgumentException(
00151 "Illegal null database schema in mergeSchema(DatabaseSchema) method");
00152
00153 ArrayList otherTables = databaseSchema.getTables();
00154 if (otherTables.size() == 0)
00155 return;
00156
00157 DatabaseTable table, originalTable;
00158 int size = otherTables.size();
00159 for (int i = 0; i < size; i++)
00160 {
00161 table = (DatabaseTable) otherTables.get(i);
00162 originalTable = getTable(table.getName());
00163 if (originalTable == null)
00164 addTable(table);
00165 else
00166 originalTable.mergeColumns(table);
00167 }
00168
00169 ArrayList otherProcedures = databaseSchema.getProcedures();
00170 if (otherProcedures.size() == 0)
00171 return;
00172
00173 DatabaseProcedure procedure, originalProcedure;
00174 int sizep = otherProcedures.size();
00175 for (int i = 0; i < sizep; i++)
00176 {
00177 procedure = (DatabaseProcedure) otherProcedures.get(i);
00178 originalProcedure = getProcedure(procedure.getName());
00179 if (originalProcedure == null)
00180 addProcedure(procedure);
00181 else
00182 originalProcedure.mergeParameters(procedure);
00183 }
00184 }
00185
00186
00187
00188
00189
00190
00191
00192 public ArrayList getTables()
00193 {
00194 return tables;
00195 }
00196
00197
00198
00199
00200
00201
00202
00203 public ArrayList getProcedures()
00204 {
00205 return procedures;
00206 }
00207
00208
00209
00210
00211
00212
00213
00214
00215 public DatabaseTable getTable(String tableName)
00216 {
00217 if (tableName == null)
00218 return null;
00219
00220 DatabaseTable t;
00221 int size = tables.size();
00222 for (int i = 0; i < size; i++)
00223 {
00224 t = (DatabaseTable) tables.get(i);
00225 if (tableName.compareTo(t.getName()) == 0)
00226 return t;
00227 }
00228 return null;
00229 }
00230
00231
00232
00233
00234
00235
00236
00237
00238 public DatabaseProcedure getProcedure(String procedureName)
00239 {
00240 if (procedureName == null)
00241 return null;
00242
00243 DatabaseProcedure t;
00244 int size = procedures.size();
00245 for (int i = 0; i < size; i++)
00246 {
00247 t = (DatabaseProcedure) procedures.get(i);
00248 if (procedureName.compareTo(t.getName()) == 0)
00249 return t;
00250 }
00251 return null;
00252 }
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263 public DatabaseTable getTable(String tableName, boolean isCaseSensitive)
00264 {
00265 if (isCaseSensitive)
00266 return getTable(tableName);
00267
00268 if (tableName == null)
00269 return null;
00270
00271 DatabaseTable t;
00272 int size = tables.size();
00273 for (int i = 0; i < size; i++)
00274 {
00275 t = (DatabaseTable) tables.get(i);
00276 if (tableName.equalsIgnoreCase(t.getName()))
00277 return t;
00278 }
00279 return null;
00280 }
00281
00282
00283
00284
00285
00286
00287
00288
00289 public boolean hasTable(String tableName)
00290 {
00291 if (tableName == null)
00292 return false;
00293
00294 DatabaseTable t;
00295 int size = tables.size();
00296 for (int i = 0; i < size; i++)
00297 {
00298 t = (DatabaseTable) tables.get(i);
00299 if (tableName.equals(t.getName()))
00300 return true;
00301 }
00302 return false;
00303 }
00304
00305
00306
00307
00308
00309
00310
00311
00312 public boolean hasProcedure(String procedureName)
00313 {
00314 if (procedureName == null)
00315 return false;
00316
00317 DatabaseProcedure t;
00318 int size = procedures.size();
00319 for (int i = 0; i < size; i++)
00320 {
00321 t = (DatabaseProcedure) procedures.get(i);
00322 if (procedureName.equals(t.getName()))
00323 return true;
00324 }
00325 return false;
00326 }
00327
00328
00329
00330
00331
00332
00333
00334
00335
00336 public boolean isCompatibleSubset(DatabaseSchema other)
00337 {
00338 if (other == null)
00339 return false;
00340
00341 DatabaseTable table, otherTable;
00342 int size = tables.size();
00343 for (int i = 0; i < size; i++)
00344 {
00345
00346 table = (DatabaseTable) tables.get(i);
00347 otherTable = other.getTable(table.getName());
00348 if (otherTable == null)
00349 return false;
00350 else if (!table.equalsIgnoreType(otherTable))
00351 return false;
00352 }
00353 DatabaseProcedure procedure, otherProcedure;
00354 int sizep = procedures.size();
00355 for (int i = 0; i < sizep; i++)
00356 {
00357
00358 procedure = (DatabaseProcedure) procedures.get(i);
00359 otherProcedure = other.getProcedure(procedure.getName());
00360 if (otherProcedure == null)
00361 return false;
00362 else if (!procedure.equals(otherProcedure))
00363 return false;
00364 }
00365 return true;
00366 }
00367
00368
00369
00370
00371
00372
00373
00374
00375
00376 public boolean isCompatibleWith(DatabaseSchema other)
00377 {
00378 DatabaseTable table, otherTable;
00379 int size = tables.size();
00380 for (int i = 0; i < size; i++)
00381 {
00382 table = (DatabaseTable) tables.get(i);
00383 otherTable = other.getTable(table.getName());
00384 if (otherTable == null)
00385 continue;
00386 else if (!table.equalsIgnoreType(otherTable))
00387 return false;
00388 }
00389 DatabaseProcedure procedure, otherProcedure;
00390 int sizep = procedures.size();
00391 for (int i = 0; i < sizep; i++)
00392 {
00393 procedure = (DatabaseProcedure) procedures.get(i);
00394 otherProcedure = other.getProcedure(procedure.getName());
00395 if (otherProcedure == null)
00396 continue;
00397 else if (!procedure.equals(otherProcedure))
00398 return false;
00399 }
00400 return true;
00401 }
00402
00403
00404
00405
00406
00407
00408
00409
00410 public boolean equals(Object other)
00411 {
00412 boolean equal = true;
00413 if ((other == null) || !(other instanceof DatabaseSchema))
00414 return false;
00415 if (tables == null)
00416 equal &= ((DatabaseSchema) other).getTables() == null;
00417 else
00418 equal &= tables.equals(((DatabaseSchema) other).getTables());
00419 if (procedures == null)
00420 equal &= ((DatabaseSchema) other).getProcedures() == null;
00421 else
00422 equal &= procedures.equals(((DatabaseSchema) other).getProcedures());
00423 return equal;
00424 }
00425
00426
00427
00428
00429
00430
00431 public String getXml()
00432 {
00433 StringBuffer info = new StringBuffer();
00434 info.append("<" + DatabasesXmlTags.ELT_DatabaseStaticSchema + ">");
00435 for (int i = 0; i < procedures.size(); i++)
00436 info.append(((DatabaseProcedure) procedures.get(i)).getXml());
00437 for (int i = 0; i < tables.size(); i++)
00438 info.append(((DatabaseTable) tables.get(i)).getXml());
00439 info.append("</" + DatabasesXmlTags.ELT_DatabaseStaticSchema + ">");
00440 return info.toString();
00441 }
00442
00443 }