liquibase.snapshot.SnapshotControl Maven / Gradle / Ivy
package liquibase.snapshot;
import liquibase.database.Database;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.logging.LogFactory;
import liquibase.servicelocator.ServiceLocator;
import liquibase.structure.DatabaseObject;
import liquibase.structure.core.Catalog;
import liquibase.structure.core.DatabaseObjectFactory;
import liquibase.structure.core.Schema;
import liquibase.util.StringUtils;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
public class SnapshotControl {
private Set> types;
public SnapshotControl(Database database) {
setTypes(DatabaseObjectFactory.getInstance().getStandardTypes(), database);
}
public SnapshotControl(Database database, Class... types) {
if (types == null || types.length == 0) {
setTypes(DatabaseObjectFactory.getInstance().getStandardTypes(), database);
} else {
setTypes(new HashSet>(Arrays.asList(types)), database);
}
}
public SnapshotControl(Database database, String types) {
setTypes(DatabaseObjectFactory.getInstance().parseTypes(types), database);
}
private void setTypes(Set> types, Database database) {
this.types = new HashSet>();
for (Class type : types) {
addType(type, database);
}
}
public boolean addType(Class type, Database database) {
boolean added = this.types.add(type);
if (added) {
for (Class container : SnapshotGeneratorFactory.getInstance().getContainerTypes(type, database)) {
addType(container, database);
}
}
return added;
}
public Set> getTypesToInclude() {
return types;
}
public boolean shouldInclude(Class type) {
return types.contains(type);
}
}