001 /* 002 * JBoss DNA (http://www.jboss.org/dna) 003 * See the COPYRIGHT.txt file distributed with this work for information 004 * regarding copyright ownership. Some portions may be licensed 005 * to Red Hat, Inc. under one or more contributor license agreements. 006 * See the AUTHORS.txt file in the distribution for a full listing of 007 * individual contributors. 008 * 009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA 010 * is licensed to you under the terms of the GNU Lesser General Public License as 011 * published by the Free Software Foundation; either version 2.1 of 012 * the License, or (at your option) any later version. 013 * 014 * JBoss DNA is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 017 * Lesser General Public License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this software; if not, write to the Free 021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 023 */ 024 package org.jboss.dna.common.jdbc.model.spi; 025 026 import java.util.Set; 027 import java.util.HashSet; 028 import org.jboss.dna.common.jdbc.model.api.BestRowIdentifier; 029 import org.jboss.dna.common.jdbc.model.api.BestRowIdentifierScopeType; 030 import org.jboss.dna.common.jdbc.model.api.Catalog; 031 import org.jboss.dna.common.jdbc.model.api.ForeignKey; 032 import org.jboss.dna.common.jdbc.model.api.Index; 033 import org.jboss.dna.common.jdbc.model.api.PrimaryKey; 034 import org.jboss.dna.common.jdbc.model.api.Privilege; 035 import org.jboss.dna.common.jdbc.model.api.Schema; 036 import org.jboss.dna.common.jdbc.model.api.Table; 037 import org.jboss.dna.common.jdbc.model.api.TableColumn; 038 import org.jboss.dna.common.jdbc.model.api.TableType; 039 040 /** 041 * Provides all core database table specific metadata. 042 * 043 * @author <a href="mailto:litsenko_sergey@yahoo.com">Sergiy Litsenko</a> 044 */ 045 public class TableBean extends SchemaObjectBean implements Table { 046 private static final long serialVersionUID = -1315274844163173964L; 047 private Set<TableColumn> columns = new HashSet<TableColumn>(); 048 private Set<ForeignKey> foreignKeys = new HashSet<ForeignKey>(); 049 private Set<Index> indexes = new HashSet<Index>(); 050 private Set<TableColumn> versionColumns = new HashSet<TableColumn>(); 051 private Set<Privilege> privileges = new HashSet<Privilege>(); 052 private Set<BestRowIdentifier> bestRowIdentifiers = new HashSet<BestRowIdentifier>(); 053 private TableType tableType; 054 private Catalog typeCatalog; 055 private Schema typeSchema; 056 private String typeName; 057 private String selfReferencingColumnName; 058 private String referenceGeneration; 059 private PrimaryKey primaryKey; 060 private Table superTable; 061 062 /** 063 * Default constructor 064 */ 065 public TableBean() { 066 } 067 068 /** 069 * Returns type of table such as: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". 070 * 071 * @return type of table. 072 */ 073 public TableType getTableType() { 074 return tableType; 075 } 076 077 /** 078 * Sets type of table such as: "TABLE", "VIEW", "SYSTEM TABLE", "GLOBAL TEMPORARY", "LOCAL TEMPORARY", "ALIAS", "SYNONYM". 079 * 080 * @param tableType the type of table. 081 */ 082 public void setTableType( TableType tableType ) { 083 this.tableType = tableType; 084 } 085 086 /** 087 * Gets type catalog 088 * 089 * @return types catalog (may be <code>null</code>) 090 */ 091 public Catalog getTypeCatalog() { 092 return typeCatalog; 093 } 094 095 /** 096 * Sets type catalog 097 * 098 * @param typeCatalog the types catalog (may be <code>null</code>) 099 */ 100 public void setTypeCatalog( Catalog typeCatalog ) { 101 this.typeCatalog = typeCatalog; 102 } 103 104 /** 105 * Gets type schema 106 * 107 * @return types schema (may be <code>null</code>) 108 */ 109 public Schema getTypeSchema() { 110 return typeSchema; 111 } 112 113 /** 114 * Sets type schema 115 * 116 * @param typeSchema the types schema (may be <code>null</code>) 117 */ 118 public void setTypeSchema( Schema typeSchema ) { 119 this.typeSchema = typeSchema; 120 } 121 122 /** 123 * Gets type name 124 * 125 * @return types name (may be <code>null</code>) 126 */ 127 public String getTypeName() { 128 return typeName; 129 } 130 131 /** 132 * Sets type name 133 * 134 * @param typeName types name (may be <code>null</code>) 135 */ 136 public void setTypeName( String typeName ) { 137 this.typeName = typeName; 138 } 139 140 /** 141 * Gets name of the designated "identifier" column of a typed table (may be <code>null</code>) 142 * 143 * @return name of the designated "identifier" column of a typed table (may be <code>null</code>) 144 */ 145 public String getSelfReferencingColumnName() { 146 return selfReferencingColumnName; 147 } 148 149 /** 150 * Sets name of the designated "identifier" column of a typed table (may be <code>null</code>) 151 * 152 * @param selfReferencingColumnName the name of the designated "identifier" column of a typed table (may be <code>null</code>) 153 */ 154 public void setSelfReferencingColumnName( String selfReferencingColumnName ) { 155 this.selfReferencingColumnName = selfReferencingColumnName; 156 } 157 158 /** 159 * specifies how values in getSelfReferencingColumnName () are created. Values are "SYSTEM", "USER", "DERIVED". (may be 160 * <code>null</code>) 161 * 162 * @return how values in getSelfReferencingColumnName () are created. 163 */ 164 public String getReferenceGeneration() { 165 return referenceGeneration; 166 } 167 168 /** 169 * specifies how values in getSelfReferencingColumnName () are created. Values are "SYSTEM", "USER", "DERIVED". (may be 170 * <code>null</code>) 171 * 172 * @param referenceGeneration how values in getSelfReferencingColumnName () are created. 173 */ 174 public void setReferenceGeneration( String referenceGeneration ) { 175 this.referenceGeneration = referenceGeneration; 176 } 177 178 /** 179 * Gets a set of table columns 180 * 181 * @return a set of table columns. 182 */ 183 public Set<TableColumn> getColumns() { 184 return columns; 185 } 186 187 /** 188 * Adds TableColumn 189 * 190 * @param column the TableColumn 191 */ 192 public void addColumn( TableColumn column ) { 193 columns.add(column); 194 } 195 196 /** 197 * deletes TableColumn 198 * 199 * @param column the TableColumn 200 */ 201 public void deleteColumn( TableColumn column ) { 202 columns.remove(column); 203 } 204 205 /** 206 * Returns table column for specified column name or null 207 * 208 * @param columnName the name of column 209 * @return table column for specified column name or null. 210 */ 211 public TableColumn findColumnByName( String columnName ) { 212 for (TableColumn c : columns) { 213 if (c.getName().equals(columnName)) { 214 return c; 215 } 216 } 217 // return nothing 218 return null; 219 } 220 221 /** 222 * Gets a table primary key 223 * 224 * @return a table primary key. 225 */ 226 public PrimaryKey getPrimaryKey() { 227 return primaryKey; 228 } 229 230 /** 231 * Sets a table primary key 232 * 233 * @param primaryKey the table primary key. 234 */ 235 public void setPrimaryKey( PrimaryKey primaryKey ) { 236 this.primaryKey = primaryKey; 237 } 238 239 /** 240 * Gets a set of table foreign key columns 241 * 242 * @return a set of table foreign keys. 243 */ 244 public Set<ForeignKey> getForeignKeys() { 245 return foreignKeys; 246 } 247 248 /** 249 * adds ForeignKey 250 * 251 * @param foreignKey the ForeignKey 252 */ 253 public void addForeignKey( ForeignKey foreignKey ) { 254 foreignKeys.add(foreignKey); 255 } 256 257 /** 258 * deletes ForeignKey 259 * 260 * @param foreignKey the ForeignKey 261 */ 262 public void deleteForeignKey( ForeignKey foreignKey ) { 263 foreignKeys.remove(foreignKey); 264 } 265 266 /** 267 * Returns table foreign key for specified name or null 268 * 269 * @param fkName the name of foreign key 270 * @return table foreign key for specified name or null. 271 */ 272 public ForeignKey findForeignKeyByName( String fkName ) { 273 for (ForeignKey fk : foreignKeys) { 274 if (fk.getName().equals(fkName)) { 275 return fk; 276 } 277 } 278 // return nothing 279 return null; 280 } 281 282 /** 283 * Gets a set of table indexes 284 * 285 * @return a set of table indexes. 286 */ 287 public Set<Index> getIndexes() { 288 return indexes; 289 } 290 291 /** 292 * adds Index 293 * 294 * @param index the Index 295 */ 296 public void addIndex( Index index ) { 297 indexes.add(index); 298 } 299 300 /** 301 * deletes Index 302 * 303 * @param index the Index 304 */ 305 public void deleteIndex( Index index ) { 306 indexes.remove(index); 307 } 308 309 /** 310 * Returns table index for specified name or null 311 * 312 * @param indexName the name of index 313 * @return table index for specified name or null. 314 */ 315 public Index findIndexByName( String indexName ) { 316 for (Index i : indexes) { 317 if (i.getName().equals(indexName)) { 318 return i; 319 } 320 } 321 // return nothing 322 return null; 323 } 324 325 /** 326 * Gets a set of table version columns 327 * 328 * @return a set of table version columns. 329 */ 330 public Set<TableColumn> getVersionColumns() { 331 return versionColumns; 332 } 333 334 /** 335 * adds version column 336 * 337 * @param tableColumn the TableColumn 338 */ 339 public void addVersionColumn( TableColumn tableColumn ) { 340 versionColumns.add(tableColumn); 341 } 342 343 /** 344 * deletes version column 345 * 346 * @param tableColumn the version column 347 */ 348 public void deleteVersionColumn( TableColumn tableColumn ) { 349 versionColumns.remove(tableColumn); 350 } 351 352 /** 353 * Returns table version column for specified name or null 354 * 355 * @param columnName the name of Version Column 356 * @return table Version Column for specified name or null. 357 */ 358 public TableColumn findVersionColumnByName( String columnName ) { 359 for (TableColumn c : versionColumns) { 360 if (c.getName().equals(columnName)) { 361 return c; 362 } 363 } 364 // return nothing 365 return null; 366 } 367 368 /** 369 * Gets table privileges. 370 * 371 * @return set of table privileges 372 */ 373 public Set<Privilege> getPrivileges() { 374 return privileges; 375 } 376 377 /** 378 * Adds table priviledge 379 * 380 * @param privilege the table priviledge 381 */ 382 public void addPrivilege( Privilege privilege ) { 383 privileges.add(privilege); 384 } 385 386 /** 387 * Deletes table priviledge 388 * 389 * @param privilege the table priviledge 390 */ 391 public void deletePrivilege( Privilege privilege ) { 392 privileges.remove(privilege); 393 } 394 395 /** 396 * Searches priviledge by name 397 * 398 * @param priviledgeName the priviledge name to search 399 * @return priviledge if found, otherwise return null 400 */ 401 public Privilege findPriviledgeByName( String priviledgeName ) { 402 for (Privilege p : privileges) { 403 if (p.getName().equals(priviledgeName)) { 404 return p; 405 } 406 } 407 // return nothing 408 return null; 409 } 410 411 /** 412 * Retrieves a set of descriptions of a table's optimal set of columns that uniquely identifies a row in temporary scopes. 413 * 414 * @return BestRowIdentifier set that uniquely identifies a row in scopes. 415 */ 416 public Set<BestRowIdentifier> getBestRowIdentifiers() { 417 return bestRowIdentifiers; 418 } 419 420 /** 421 * Adds BestRowIdentifier 422 * 423 * @param bestRowIdentifier the BestRowIdentifier 424 */ 425 public void addBestRowIdentifier( BestRowIdentifier bestRowIdentifier ) { 426 bestRowIdentifiers.add(bestRowIdentifier); 427 } 428 429 /** 430 * deletes BestRowIdentifier 431 * 432 * @param bestRowIdentifier the BestRowIdentifier 433 */ 434 public void deleteBestRowIdentifier( BestRowIdentifier bestRowIdentifier ) { 435 bestRowIdentifiers.remove(bestRowIdentifier); 436 } 437 438 /** 439 * Searches the BestRowIdentifier by scope 440 * 441 * @param scopeType the scope of best row identifier 442 * @return BestRowIdentifier if any 443 */ 444 public BestRowIdentifier findBestRowIdentifierByScopeType( BestRowIdentifierScopeType scopeType ) { 445 for (BestRowIdentifier bri : bestRowIdentifiers) { 446 if (bri.getScopeType().equals(scopeType)) { 447 return bri; 448 } 449 } 450 // return nothing 451 return null; 452 } 453 454 // =============================================================== 455 // ------------------- JDBC 3.0 --------------------------------- 456 // =============================================================== 457 458 /** 459 * Retrieves a description of the table hierarchies defined in a particular schema in this database. Only the immediate super 460 * type/ sub type relationship is modeled. 461 * 462 * @return super table for this table 463 * @since 1.4 (JDBC 3.0) 464 */ 465 public Table getSuperTable() { 466 return superTable; 467 } 468 469 /** 470 * Sets a description of the table hierarchies defined in a particular schema in this database. Only the immediate super type/ 471 * sub type relationship is modeled. 472 * 473 * @param superTable the super table for this table 474 * @since 1.4 (JDBC 3.0) 475 */ 476 public void setSuperTable( Table superTable ) { 477 this.superTable = superTable; 478 } 479 }