liquibase.structure.AbstractDatabaseObject Maven / Gradle / Ivy
package liquibase.structure;
import liquibase.exception.UnexpectedLiquibaseException;
import liquibase.parser.core.ParsedNode;
import liquibase.parser.core.ParsedNodeException;
import liquibase.resource.ResourceAccessor;
import liquibase.serializer.LiquibaseSerializable;
import liquibase.util.StringUtils;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
public abstract class AbstractDatabaseObject implements DatabaseObject {
private Map attributes = new HashMap();
private String snapshotId;
@Override
public String getObjectTypeName() {
return StringUtils.lowerCaseFirst(getClass().getSimpleName());
}
@Override
public String getSnapshotId() {
return snapshotId;
}
@Override
public void setSnapshotId(String snapshotId) {
if (snapshotId == null) {
throw new UnexpectedLiquibaseException("Must be a non null snapshot id");
}
if (this.snapshotId != null) {
throw new UnexpectedLiquibaseException("snapshotId already set");
}
this.snapshotId = snapshotId;
}
@Override
public boolean snapshotByDefault() {
return true;
}
@Override
public int compareTo(Object o) {
return this.getName().compareTo(((AbstractDatabaseObject) o).getName());
}
@Override
public Set getAttributes() {
return attributes.keySet();
}
@Override
public T getAttribute(String attribute, Class type) {
return (T) attributes.get(attribute);
}
@Override
public T getAttribute(String attribute, T defaultValue) {
T value = (T) attributes.get(attribute);
if (value == null) {
return defaultValue;
}
return value;
}
@Override
public DatabaseObject setAttribute(String attribute, Object value) {
if (value == null) {
attributes.remove(attribute);
} else {
attributes.put(attribute, value);
}
return this;
}
@Override
public String getSerializedObjectName() {
return getObjectTypeName();
}
@Override
public String getSerializedObjectNamespace() {
return STANDARD_SNAPSHOT_NAMESPACE;
}
@Override
public Set getSerializableFields() {
TreeSet fields = new TreeSet(attributes.keySet());
fields.add("snapshotId");
return fields;
}
@Override
public Object getSerializableFieldValue(String field) {
if (field.equals("snapshotId")) {
return snapshotId;
}
if (!attributes.containsKey(field)) {
throw new UnexpectedLiquibaseException("Unknown field "+field);
}
Object value = attributes.get(field);
if (value instanceof DatabaseObject) {
try {
DatabaseObject clone = (DatabaseObject) value.getClass().newInstance();
clone.setName(((DatabaseObject) value).getName());
clone.setSnapshotId(((DatabaseObject) value).getSnapshotId());
return clone;
} catch (Exception e) {
throw new UnexpectedLiquibaseException(e);
}
}
return value;
}
@Override
public LiquibaseSerializable.SerializationType getSerializableFieldType(String field) {
if (getSerializableFieldValue(field) instanceof DatabaseObject) {
return LiquibaseSerializable.SerializationType.NAMED_FIELD;
} else {
return LiquibaseSerializable.SerializationType.NAMED_FIELD;
}
}
@Override
public void load(ParsedNode parsedNode, ResourceAccessor resourceAccessor) throws ParsedNodeException {
throw new RuntimeException("TODO");
}
@Override
public ParsedNode serialize() {
throw new RuntimeException("TODO");
}
@Override
public String toString() {
return getName();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy