src/org/objectweb/cjdbc/common/sql/schema/DatabaseTable.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 import java.util.Iterator; 00031 00032 import org.objectweb.cjdbc.common.xml.DatabasesXmlTags; 00033 00045 public class DatabaseTable implements Serializable 00046 { 00048 private String name; 00049 00051 private ArrayList columns; 00052 00058 public DatabaseTable(String name) 00059 { 00060 this(name, new ArrayList()); 00061 } 00062 00069 public DatabaseTable(String name, int nbOfColumns) 00070 { 00071 this(name, new ArrayList(nbOfColumns)); 00072 } 00073 00080 private DatabaseTable(String name, ArrayList columns) 00081 { 00082 if (name == null) 00083 throw new IllegalArgumentException("Illegal null database table name in DatabaseTable constructor"); 00084 00085 this.name = name; 00086 this.columns = columns; 00087 } 00088 00094 public String getName() 00095 { 00096 return name; 00097 } 00098 00106 public void addColumn(DatabaseColumn column) 00107 { 00108 columns.add(column); 00109 } 00110 00118 public void remove(String columnName) 00119 { 00120 columns.remove(getColumn(columnName)); 00121 } 00122 00130 public void remove(DatabaseColumn column) 00131 { 00132 columns.remove(column); 00133 } 00134 00143 public void mergeColumns(DatabaseTable table) throws SQLException 00144 { 00145 if (table == null) 00146 return; 00147 00148 ArrayList otherColumns = table.getColumns(); 00149 if (otherColumns == null) 00150 return; 00151 00152 DatabaseColumn c, original; 00153 int size = otherColumns.size(); 00154 for (int i = 0; i < size; i++) 00155 { 00156 c = (DatabaseColumn) otherColumns.get(i); 00157 original = getColumn(c.getName()); 00158 if (original == null) 00159 addColumn(c); 00160 else 00161 { 00162 if (!original.equalsIgnoreType(c)) 00163 throw new SQLException( 00164 "Unable to merge tables: column '" 00165 + c.getName() 00166 + "' definition mismatch"); 00167 } 00168 } 00169 } 00170 00179 public ArrayList getColumns() 00180 { 00181 return columns; 00182 } 00183 00193 public ArrayList getUniqueColumns() 00194 { 00195 ArrayList cols = new ArrayList(); 00196 Iterator i; 00197 DatabaseColumn c; 00198 00199 for (i = columns.iterator(); i.hasNext();) 00200 { 00201 c = (DatabaseColumn) i.next(); 00202 if (c.isUnique()) 00203 cols.add(c); 00204 } 00205 return cols; 00206 } 00207 00215 public DatabaseColumn getColumn(String columnName) 00216 { 00217 DatabaseColumn c; 00218 for (Iterator i = columns.iterator(); i.hasNext();) 00219 { 00220 c = (DatabaseColumn) i.next(); 00221 if (columnName.equalsIgnoreCase(c.getName())) 00222 return c; 00223 00224 } 00225 return null; 00226 } 00227 00236 public DatabaseColumn getColumn(String columnName, boolean isCaseSensitive) 00237 { 00238 if (!isCaseSensitive) 00239 return getColumn(columnName); 00240 00241 DatabaseColumn c; 00242 for (Iterator i = columns.iterator(); i.hasNext();) 00243 { 00244 c = (DatabaseColumn) i.next(); 00245 if (columnName.equals(c.getName())) 00246 return c; 00247 00248 } 00249 return null; 00250 } 00251 00259 public boolean equals(Object other) 00260 { 00261 if ((other == null) || !(other instanceof DatabaseTable)) 00262 return false; 00263 00264 DatabaseTable t = (DatabaseTable) other; 00265 return (t.getName().equals(name)) && (t.getColumns().equals(columns)); 00266 } 00267 00276 public boolean equalsIgnoreType(Object other) 00277 { 00278 if ((other == null) || !(other instanceof DatabaseTable)) 00279 return false; 00280 00281 DatabaseTable t = (DatabaseTable) other; 00282 if (!t.getName().equals(name)) 00283 return false; 00284 00285 DatabaseColumn c1, c2; 00286 Iterator iter = columns.iterator(); 00287 while (iter.hasNext()) 00288 { 00289 c1 = (DatabaseColumn) iter.next(); 00290 c2 = t.getColumn(c1.getName()); 00291 00292 if (!c1.equalsIgnoreType(c2)) 00293 return false; // Not compatible 00294 } 00295 return true; 00296 } 00297 00303 public String getXml() 00304 { 00305 StringBuffer info = new StringBuffer(); 00306 info.append( 00307 "<" 00308 + DatabasesXmlTags.ELT_DatabaseTable 00309 + " " 00310 + DatabasesXmlTags.ATT_tableName 00311 + "=\"" 00312 + name 00313 + "\" " 00314 + DatabasesXmlTags.ATT_nbOfColumns 00315 + "=\"" 00316 + columns.size() 00317 + "\">"); 00318 for (int i = 0; i < columns.size(); i++) 00319 info.append(((DatabaseColumn) columns.get(i)).getXml()); 00320 info.append("</" + DatabasesXmlTags.ELT_DatabaseTable + ">"); 00321 return info.toString(); 00322 } 00323 }

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