package liquibase.snapshot;
import liquibase.database.Database;
import liquibase.diff.compare.DatabaseObjectComparatorFactory;
import liquibase.exception.DatabaseException;
import liquibase.structure.DatabaseObject;
import liquibase.structure.core.Schema;
import java.util.Arrays;
import java.util.List;
import java.util.SortedSet;
import java.util.TreeSet;
public class MockDatabaseSnapshot extends DatabaseSnapshot {
private final List<DatabaseObject> configuredObjects;
public MockDatabaseSnapshot(List<DatabaseObject> configuredObjects, DatabaseObject[] examples, Database database, SnapshotControl snapshotControl) throws DatabaseException, InvalidExampleException {
super(null, database, snapshotControl);
this.configuredObjects = configuredObjects;
init(examples);
}
@Override
protected SnapshotGeneratorChain createGeneratorChain(Class<? extends DatabaseObject> databaseObjectType, Database database) {
return new SnapshotGeneratorChain(new TreeSet<SnapshotGenerator>(Arrays.asList(new MockSnapshotGenerator())));
}
private class MockSnapshotGenerator implements SnapshotGenerator, Comparable<SnapshotGenerator> {
@Override
public int getPriority(Class<? extends DatabaseObject> objectType, Database database) {
return PRIORITY_DEFAULT;
}
@Override
public <T extends DatabaseObject> T snapshot(T example, DatabaseSnapshot snapshot, SnapshotGeneratorChain chain) throws DatabaseException, InvalidExampleException {
for (DatabaseObject object : configuredObjects) {
if (DatabaseObjectComparatorFactory.getInstance().isSameObject(object, example, null, MockDatabaseSnapshot.this.getDatabase())) {
return (T) object;
}
}
return null;
}
@Override
public int compareTo(SnapshotGenerator o) {
return this.toString().compareTo(o.toString());
}
@Override
public Class<? extends DatabaseObject>[] addsTo() {
return null;
}
@Override
public Class<? extends SnapshotGenerator>[] replaces() {
return null;
}
}
}