package liquibase.diff.output.changelog;
import liquibase.change.Change;
import liquibase.diff.compare.CompareControl;
import liquibase.util.ObjectUtil;
public abstract class AbstractChangeGenerator implements ChangeGenerator {
@Override
public Change[] fixSchema(Change[] changes, CompareControl.SchemaComparison[] schemaComparisons) {
if (changes == null || this instanceof UnexpectedObjectChangeGenerator) {
return changes;
}
for (Change change : changes) {
for (String field : change.getSerializableFields()) {
if (field.toLowerCase().contains("schemaname") || field.toLowerCase().contains("catalogname")) {
Object value = change.getSerializableFieldValue(field);
if (value != null && value instanceof String) {
String newValue = CompareControl.SchemaComparison.convertSchema((String) value, schemaComparisons);
if (newValue != null && !newValue.equalsIgnoreCase((String) value)) {
ObjectUtil.setProperty(change, field, newValue);
}
}
}
}
}
return changes;
}
@Override
public Change[] fixOutputAsSchema(Change[] changes, CompareControl.SchemaComparison[] schemaComparisons) {
if (changes == null) {
return null;
}
for (Change change : changes) {
for (String field : change.getSerializableFields()) {
if (field.toLowerCase().contains("schemaname") || field.toLowerCase().contains("catalogname")) {
Object value = change.getSerializableFieldValue(field);
if (schemaComparisons != null && value != null && value instanceof String) {
for (CompareControl.SchemaComparison comparison : schemaComparisons) {
if (comparison.getOutputSchemaAs() != null
&& comparison.getComparisonSchema() != null
&& (comparison.getComparisonSchema().getSchemaName().equalsIgnoreCase((String) value)
|| comparison.getComparisonSchema().getCatalogName().equalsIgnoreCase((String) value))
) {
ObjectUtil.setProperty(change, field, comparison.getOutputSchemaAs());
}
}
}
}
}
}
return changes;
}
}