src/org/objectweb/cjdbc/common/sql/schema/DatabaseSchema.java

説明を見る。
00001 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 00041 public class DatabaseSchema implements Serializable 00042 { 00044 private ArrayList tables; 00046 private ArrayList procedures; 00047 00051 public DatabaseSchema() 00052 { 00053 tables = new ArrayList(); 00054 procedures = new ArrayList(); 00055 } 00056 00063 public DatabaseSchema(int nbOfTables) 00064 { 00065 tables = new ArrayList(nbOfTables); 00066 procedures = new ArrayList(); 00067 } 00068 00075 public DatabaseSchema(DatabaseSchema schema) 00076 { 00077 if (schema == null) 00078 throw new IllegalArgumentException("Illegal null database schema in DatabaseSchema(DatabaseSchema) constructor"); 00079 00080 tables = new ArrayList(schema.getTables()); 00081 procedures = new ArrayList(schema.getProcedures()); 00082 } 00083 00089 public void addTable(DatabaseTable table) 00090 { 00091 if (table == null) 00092 throw new IllegalArgumentException("Illegal null database table in addTable(DatabaseTable) method"); 00093 tables.add(table); 00094 } 00095 00102 public void addProcedure(DatabaseProcedure procedure) 00103 { 00104 if (procedure == null) 00105 throw new IllegalArgumentException("Illegal null database table in addTable(DatabaseTable) method"); 00106 procedures.add(procedure); 00107 } 00108 00114 public void removeTable(DatabaseTable table) 00115 { 00116 if (table == null) 00117 throw new IllegalArgumentException("Illegal null database table in removeTable(DatabaseTable) method"); 00118 tables.remove(table); 00119 } 00120 00127 public void removeProcedure(DatabaseProcedure procedure) 00128 { 00129 if (procedure == null) 00130 throw new IllegalArgumentException("Illegal null database procedure in removeProcedure(DatabaseProcedure) method"); 00131 procedures.remove(procedure); 00132 } 00133 00142 public void mergeSchema(DatabaseSchema databaseSchema) throws SQLException 00143 { 00144 if (databaseSchema == null) 00145 throw new IllegalArgumentException("Illegal null database schema in mergeSchema(DatabaseSchema) method"); 00146 00147 ArrayList otherTables = databaseSchema.getTables(); 00148 if (otherTables.size() == 0) 00149 return; 00150 00151 DatabaseTable table, originalTable; 00152 int size = otherTables.size(); 00153 for (int i = 0; i < size; i++) 00154 { 00155 table = (DatabaseTable) otherTables.get(i); 00156 originalTable = getTable(table.getName()); 00157 if (originalTable == null) 00158 addTable(table); 00159 else 00160 originalTable.mergeColumns(table); 00161 } 00162 00163 ArrayList otherProcedures = databaseSchema.getProcedures(); 00164 if (otherProcedures.size() == 0) 00165 return; 00166 00167 DatabaseProcedure procedure, originalProcedure; 00168 int sizep = otherProcedures.size(); 00169 for (int i = 0; i < sizep; i++) 00170 { 00171 procedure = (DatabaseProcedure) otherProcedures.get(i); 00172 originalProcedure = getProcedure(procedure.getName()); 00173 if (originalProcedure == null) 00174 addProcedure(procedure); 00175 else 00176 originalProcedure.mergeParameters(procedure); 00177 } 00178 } 00179 00186 public ArrayList getTables() 00187 { 00188 return tables; 00189 } 00190 00197 public ArrayList getProcedures() 00198 { 00199 return procedures; 00200 } 00201 00209 public DatabaseTable getTable(String tableName) 00210 { 00211 if (tableName == null) 00212 return null; 00213 00214 DatabaseTable t; 00215 int size = tables.size(); 00216 for (int i = 0; i < size; i++) 00217 { 00218 t = (DatabaseTable) tables.get(i); 00219 if (tableName.compareTo(t.getName()) == 0) 00220 return t; 00221 } 00222 return null; 00223 } 00224 00232 public DatabaseProcedure getProcedure(String procedureName) 00233 { 00234 if (procedureName == null) 00235 return null; 00236 00237 DatabaseProcedure t; 00238 int size = procedures.size(); 00239 for (int i = 0; i < size; i++) 00240 { 00241 t = (DatabaseProcedure) procedures.get(i); 00242 if (procedureName.compareTo(t.getName()) == 0) 00243 return t; 00244 } 00245 return null; 00246 } 00247 00257 public DatabaseTable getTable(String tableName, boolean isCaseSensitive) 00258 { 00259 if (isCaseSensitive) 00260 return getTable(tableName); 00261 00262 if (tableName == null) 00263 return null; 00264 00265 DatabaseTable t; 00266 int size = tables.size(); 00267 for (int i = 0; i < size; i++) 00268 { 00269 t = (DatabaseTable) tables.get(i); 00270 if (tableName.equalsIgnoreCase(t.getName())) 00271 return t; 00272 } 00273 return null; 00274 } 00275 00283 public boolean hasTable(String tableName) 00284 { 00285 if (tableName == null) 00286 return false; 00287 00288 DatabaseTable t; 00289 int size = tables.size(); 00290 for (int i = 0; i < size; i++) 00291 { 00292 t = (DatabaseTable) tables.get(i); 00293 if (tableName.equals(t.getName())) 00294 return true; 00295 } 00296 return false; 00297 } 00298 00306 public boolean hasProcedure(String procedureName) 00307 { 00308 if (procedureName == null) 00309 return false; 00310 00311 DatabaseProcedure t; 00312 int size = procedures.size(); 00313 for (int i = 0; i < size; i++) 00314 { 00315 t = (DatabaseProcedure) procedures.get(i); 00316 if (procedureName.equals(t.getName())) 00317 return true; 00318 } 00319 return false; 00320 } 00321 00330 public boolean isCompatibleSubset(DatabaseSchema other) 00331 { 00332 DatabaseTable table, otherTable; 00333 int size = tables.size(); 00334 for (int i = 0; i < size; i++) 00335 { 00336 // Parse all tables 00337 table = (DatabaseTable) tables.get(i); 00338 otherTable = other.getTable(table.getName()); 00339 if (otherTable == null) 00340 return false; // Not present 00341 else if (!table.equalsIgnoreType(otherTable)) 00342 return false; // Not compatible 00343 } 00344 DatabaseProcedure procedure, otherProcedure; 00345 int sizep = procedures.size(); 00346 for (int i = 0; i < sizep; i++) 00347 { 00348 // Parse all procedures 00349 procedure = (DatabaseProcedure) procedures.get(i); 00350 otherProcedure = other.getProcedure(procedure.getName()); 00351 if (otherProcedure == null) 00352 return false; // Not present 00353 else if (!procedure.equals(otherProcedure)) 00354 return false; // Not compatible 00355 } 00356 return true; // Ok, all tables passed the test 00357 } 00358 00367 public boolean isCompatibleWith(DatabaseSchema other) 00368 { 00369 DatabaseTable table, otherTable; 00370 int size = tables.size(); 00371 for (int i = 0; i < size; i++) 00372 { // Parse all tables 00373 table = (DatabaseTable) tables.get(i); 00374 otherTable = other.getTable(table.getName()); 00375 if (otherTable == null) 00376 continue; // Not present in other schema 00377 else if (!table.equalsIgnoreType(otherTable)) 00378 return false; // Not compatible 00379 } 00380 DatabaseProcedure procedure, otherProcedure; 00381 int sizep = procedures.size(); 00382 for (int i = 0; i < sizep; i++) 00383 { // Parse all procedures 00384 procedure = (DatabaseProcedure) procedures.get(i); 00385 otherProcedure = other.getProcedure(procedure.getName()); 00386 if (otherProcedure == null) 00387 continue; // Not present 00388 else if (!procedure.equals(otherProcedure)) 00389 return false; // Not compatible 00390 } 00391 return true; // Ok, all tables passed the test 00392 } 00393 00401 public boolean equals(Object other) 00402 { 00403 boolean equal = true; 00404 if ((other == null) || !(other instanceof DatabaseSchema)) 00405 return false; 00406 if (tables == null) 00407 equal &= ((DatabaseSchema) other).getTables() == null; 00408 else 00409 equal &= tables.equals(((DatabaseSchema) other).getTables()); 00410 if (procedures == null) 00411 equal &= ((DatabaseSchema) other).getProcedures() == null; 00412 else 00413 equal &= procedures.equals(((DatabaseSchema) other).getProcedures()); 00414 return equal; 00415 } 00416 00422 public String getXml() 00423 { 00424 StringBuffer info = new StringBuffer(); 00425 info.append("<"+DatabasesXmlTags.ELT_DatabaseStaticSchema+">"); 00426 for(int i = 0; i < procedures.size();i++) 00427 info.append(((DatabaseProcedure) procedures.get(i)).getXml()); 00428 for (int i = 0; i < tables.size(); i++) 00429 info.append(((DatabaseTable) tables.get(i)).getXml()); 00430 info.append("</"+DatabasesXmlTags.ELT_DatabaseStaticSchema+">"); 00431 return info.toString(); 00432 } 00433 00434 }

CJDBCversion1.0.4に対してTue Oct 12 15:15:57 2004に生成されました。 doxygen 1.3.8