package liquibase.integration.ant.type;
import liquibase.Liquibase;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.taskdefs.Property;
import org.apache.tools.ant.types.DataType;
import org.apache.tools.ant.types.PropertySet;
import org.apache.tools.ant.types.Reference;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class ChangeLogParametersType extends DataType {
private List<PropertySet> propertySets;
private List<Property> parameters;
public ChangeLogParametersType(Project project) {
setProject(project);
propertySets = new LinkedList<PropertySet>();
parameters = new LinkedList<Property>();
}
public void applyParameters(Liquibase liquibase) {
for(Property parameter : getChangeLogParameters()) {
liquibase.setChangeLogParameter(parameter.getName(), parameter.getValue());
}
for(PropertySet propertySet : getPropertySets()) {
Properties properties = propertySet.getProperties();
for(Map.Entry<Object, Object> entry : properties.entrySet()) {
liquibase.setChangeLogParameter((String) entry.getKey(), entry.getValue());
}
}
}
@Override
public void setRefid(Reference ref) {
if(!propertySets.isEmpty() || !parameters.isEmpty()) {
throw tooManyAttributes();
}
super.setRefid(ref);
}
public List<PropertySet> getPropertySets() {
return isReference() ? ((ChangeLogParametersType) getCheckedRef()).getPropertySets() : propertySets;
}
public void addConfigured(PropertySet propertySet) {
propertySets.add(propertySet);
}
public List<Property> getChangeLogParameters() {
return isReference() ? ((ChangeLogParametersType) getCheckedRef()).getChangeLogParameters() : parameters;
}
public void addConfiguredChangeLogParameter(Property parameter) {
parameters.add(parameter);
}
}