org.kualigan.tools.liquibase.DiffResult Maven / Gradle / Ivy
package org.kualigan.tools.liquibase;
import liquibase.database.Database;
import liquibase.diff.ObjectDifferences;
import liquibase.diff.StringDiff;
import liquibase.diff.compare.CompareControl;
import liquibase.diff.compare.DatabaseObjectComparatorFactory;
import liquibase.exception.DatabaseException;
import liquibase.snapshot.DatabaseSnapshot;
import liquibase.structure.DatabaseObject;
import java.io.*;
import java.util.*;
public class DiffResult {
private DatabaseSnapshot referenceSnapshot;
private DatabaseSnapshot comparisonSnapshot;
private CompareControl compareControl;
private StringDiff productNameDiff;
private StringDiff productVersionDiff;
private Set missingObjects = new HashSet();
private Set unexpectedObjects = new HashSet();
private Map changedObjects = new HashMap();
public DiffResult(DatabaseSnapshot referenceDatabaseSnapshot, DatabaseSnapshot comparisonDatabaseSnapshot, CompareControl compareControl) {
this.referenceSnapshot = referenceDatabaseSnapshot;
this.comparisonSnapshot = comparisonDatabaseSnapshot;
this.compareControl = compareControl;
}
public DatabaseSnapshot getReferenceSnapshot() {
return referenceSnapshot;
}
public DatabaseSnapshot getComparisonSnapshot() {
return comparisonSnapshot;
}
public StringDiff getProductNameDiff() {
return productNameDiff;
}
public void setProductNameDiff(StringDiff productNameDiff) {
this.productNameDiff = productNameDiff;
}
public StringDiff getProductVersionDiff() {
return productVersionDiff;
}
public void setProductVersionDiff(StringDiff productVersionDiff) {
this.productVersionDiff = productVersionDiff;
}
public CompareControl getCompareControl() {
return compareControl;
}
public Set extends DatabaseObject> getMissingObjects() {
return missingObjects;
}
public Set getMissingObjects(Class type) {
Set returnSet = new HashSet();
for (DatabaseObject obj : missingObjects) {
if (type.isAssignableFrom(obj.getClass())) {
returnSet.add(obj);
}
}
return returnSet;
}
public SortedSet getMissingObjects(Class type, Comparator comparator) {
TreeSet set = new TreeSet(comparator);
set.addAll(getMissingObjects(type));
return set;
}
public T getMissingObject(T example) {
Database accordingTo = getComparisonSnapshot().getDatabase();
DatabaseObjectComparatorFactory comparator = DatabaseObjectComparatorFactory.getInstance();
for (T obj : (Set) getMissingObjects(example.getClass())) {
if (comparator.isSameObject(obj, example, accordingTo)) {
return obj;
}
}
return null;
}
public void addMissingObject(DatabaseObject obj) {
missingObjects.add(obj);
}
public Set extends DatabaseObject> getUnexpectedObjects() {
return unexpectedObjects;
}
public Set getUnexpectedObjects(Class type) {
Set returnSet = new HashSet();
for (DatabaseObject obj : unexpectedObjects) {
if (type.isAssignableFrom(obj.getClass())) {
returnSet.add(obj);
}
}
return returnSet;
}
public SortedSet getUnexpectedObjects(Class type, Comparator comparator) {
TreeSet set = new TreeSet(comparator);
set.addAll(getUnexpectedObjects(type));
return set;
}
public T getUnexpectedObject(T example) {
Database accordingTo = this.getComparisonSnapshot().getDatabase();
DatabaseObjectComparatorFactory comparator = DatabaseObjectComparatorFactory.getInstance();
for (T obj : (Set) getUnexpectedObjects(example.getClass())) {
if (comparator.isSameObject(obj, example, accordingTo)) {
return obj;
}
}
return null;
}
public void addUnexpectedObject(DatabaseObject obj) {
unexpectedObjects.add(obj);
}
public Map getChangedObjects() {
return changedObjects;
}
public Map getChangedObjects(Class type) {
Map returnSet = new HashMap();
for (Map.Entry obj : changedObjects.entrySet()) {
if (type.isAssignableFrom(obj.getKey().getClass())) {
returnSet.put(obj.getKey(), obj.getValue());
}
}
return returnSet;
}
public SortedMap getChangedObjects(Class type, Comparator comparator) {
SortedMap map = new TreeMap(comparator);
map.putAll(getChangedObjects(type));
return map;
}
public ObjectDifferences getChangedObject(DatabaseObject example) {
Database accordingTo = this.getComparisonSnapshot().getDatabase();
DatabaseObjectComparatorFactory comparator = DatabaseObjectComparatorFactory.getInstance();
for (Map.Entry extends DatabaseObject, ObjectDifferences> entry : getChangedObjects(example.getClass()).entrySet()) {
if (comparator.isSameObject(entry.getKey(), example, accordingTo)) {
return entry.getValue();
}
}
return null;
}
public void addChangedObject(DatabaseObject obj, ObjectDifferences differences) {
changedObjects.put(obj, differences);
}
public boolean areEqual() throws DatabaseException, IOException {
// boolean differencesInData = false;
// if (compareControl.shouldDiffData()) {
// List changeSets = new ArrayList();
// addInsertDataChanges(changeSets, dataDir);
// differencesInData = !changeSets.isEmpty();
// }
return missingObjects.size() == 0 && unexpectedObjects.size() == 0 && changedObjects.size() == 0;
}
public Set> getComparedTypes() {
return compareControl.getComparedTypes();
}
}