package liquibase.sql.visitor; import liquibase.ContextExpression; import liquibase.Labels; import liquibase.change.CheckSum; import liquibase.parser.NamespaceDetails; import liquibase.parser.core.ParsedNode; import liquibase.parser.core.ParsedNodeException; import liquibase.resource.ResourceAccessor; import liquibase.serializer.ReflectionSerializer; import liquibase.serializer.core.string.StringChangeLogSerializer; import liquibase.util.ObjectUtil; import liquibase.util.StringUtils; import java.util.HashSet; import java.util.Set; public abstract class AbstractSqlVisitor implements SqlVisitor { private Set<String> applicableDbms; private boolean applyToRollback; private ContextExpression contexts; private Labels labels; @Override public Set<String> getApplicableDbms() { return applicableDbms; } @Override public void setApplicableDbms(Set<String> applicableDbms) { this.applicableDbms = applicableDbms; } @Override public boolean isApplyToRollback() { return applyToRollback; } @Override public void setApplyToRollback(boolean applyToRollback) { this.applyToRollback = applyToRollback; } @Override public ContextExpression getContexts() { return contexts; } @Override public void setContexts(ContextExpression contexts) { this.contexts = contexts; } public Labels getLabels() { return labels; } public void setLabels(Labels labels) { this.labels = labels; } @Override public CheckSum generateCheckSum() { return CheckSum.compute(new StringChangeLogSerializer().serialize(this, false)); } @Override public Set<String> getSerializableFields() { return ReflectionSerializer.getInstance().getFields(this); } @Override public Object getSerializableFieldValue(String field) { return ReflectionSerializer.getInstance().getValue(this, field); } @Override public String getSerializedObjectName() { return getName(); } @Override public SerializationType getSerializableFieldType(String field) { return SerializationType.NAMED_FIELD; } @Override public String getSerializedObjectNamespace() { return GENERIC_CHANGELOG_EXTENSION_NAMESPACE; } @Override public String getSerializableFieldNamespace(String field) { return getSerializedObjectNamespace(); } @Override public void load(ParsedNode parsedNode, ResourceAccessor resourceAccessor) throws ParsedNodeException { for (ParsedNode childNode : parsedNode.getChildren()) { try { if (childNode.getName().equals("dbms")) { this.setApplicableDbms(new HashSet<String>(StringUtils.splitAndTrim((String) childNode.getValue(), ","))); } else if (childNode.getName().equals("applyToRollback")) { Boolean value = childNode.getValue(Boolean.class); if (value != null) { setApplyToRollback(value); } } else if (childNode.getName().equals("context") || childNode.getName().equals("contexts")) { setContexts(new ContextExpression((String) childNode.getValue())); } else if (ObjectUtil.hasWriteProperty(this, childNode.getName())) { Object value = childNode.getValue(); if (value != null) { value = value.toString(); } ObjectUtil.setProperty(this, childNode.getName(), (String) value); } } catch (Exception e) { throw new ParsedNodeException("Error setting property", e); } } } @Override public ParsedNode serialize() { throw new RuntimeException("TODO"); } }