package liquibase.snapshot; import liquibase.database.Database; import liquibase.database.structure.*; import liquibase.util.StringUtils; import java.util.Collection; import java.util.HashSet; import java.util.Set; public class DatabaseSnapshot { private Database database; private Set<Table> tables = new HashSet<Table>(); private Set<View> views = new HashSet<View>(); private Set<ForeignKey> foreignKeys = new HashSet<ForeignKey>(); private Set<UniqueConstraint> uniqueConstraints = new HashSet<UniqueConstraint>(); private Set<Index> indexes = new HashSet<Index>(); private Set<PrimaryKey> primaryKeys = new HashSet<PrimaryKey>(); private Set<Sequence> sequences = new HashSet<Sequence>(); private String schema; private Table databaseChangeLogTable; private Table databaseChangeLogLockTable; public DatabaseSnapshot(Database database, String requestedSchema) { this.database = database; this.schema = requestedSchema; } public Database getDatabase() { return database; } public Set<Table> getTables() { return tables; } public Set<View> getViews() { return views; } public Set<ForeignKey> getForeignKeys() { return foreignKeys; } public Set<Index> getIndexes() { return indexes; } public Set<PrimaryKey> getPrimaryKeys() { return primaryKeys; } public Set<Sequence> getSequences() { return sequences; } public Set<UniqueConstraint> getUniqueConstraints() { return this.uniqueConstraints; } public Table getTable(String tableName) { for (Table table : getTables()) { if (table.getName().equalsIgnoreCase(tableName)) { return table; } } return null; } public ForeignKey getForeignKey(String foreignKeyName) { for (ForeignKey fk : getForeignKeys()) { if (fk.getName().equalsIgnoreCase(foreignKeyName)) { return fk; } } return null; } public Sequence getSequence(String sequenceName) { for (Sequence sequence : getSequences()) { if (sequence.getName().equalsIgnoreCase(sequenceName)) { return sequence; } } return null; } public Index getIndex(String indexName) { for (Index index : getIndexes()) { if (StringUtils.trimToEmpty(index.getName()).equalsIgnoreCase(indexName)) { return index; } } return null; } public View getView(String viewName) { for (View view : getViews()) { if (view.getName().equalsIgnoreCase(viewName)) { return view; } } return null; } public PrimaryKey getPrimaryKey(String pkName) { for (PrimaryKey pk : getPrimaryKeys()) { if (pk.getName().equalsIgnoreCase(pkName)) { return pk; } } return null; } public PrimaryKey getPrimaryKeyForTable(String tableName) { for (PrimaryKey pk : getPrimaryKeys()) { if (pk.getTable().getName().equalsIgnoreCase(tableName)) { return pk; } } return null; } public UniqueConstraint getUniqueConstraint(String ucName) { for (UniqueConstraint uc : getUniqueConstraints()) { if (uc.getName().equalsIgnoreCase(ucName)) { return uc; } } return null; } public String getSchema() { return schema; } public boolean isPrimaryKey(Column columnInfo) { for (PrimaryKey pk : getPrimaryKeys()) { if (columnInfo.getTable() == null) { continue; } if (pk.getTable().getName().equalsIgnoreCase(columnInfo.getTable().getName())) { if (pk.getColumnNamesAsList().contains(columnInfo.getName())) { return true; } } } return false; } public Collection<Column> getColumns() { Set<Column> returnSet = new HashSet<Column>(); for (Table table : getTables()) { for (Column column : table.getColumns()) { returnSet.add(column); } } return returnSet; } public Column getColumn(String tableName, String columnName) { for (Table table : getTables()) { for (Column column : table.getColumns()) { if (table.getName().equalsIgnoreCase(tableName) && column.getName().equalsIgnoreCase(columnName)) { return column; } } } return null; } public boolean hasDatabaseChangeLogTable() { return databaseChangeLogTable != null; } public Table getDatabaseChangeLogTable() { return databaseChangeLogTable; } public void setDatabaseChangeLogTable(Table table) { this.databaseChangeLogTable = table; } public Table getDatabaseChangeLogLockTable() { return databaseChangeLogLockTable; } public void setDatabaseChangeLogLockTable(Table table) { this.databaseChangeLogLockTable = table; } }