nl.uu.cs.ape.sat.constraints.ConstraintTemplate Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of APE Show documentation
Show all versions of APE Show documentation
APE is a command line tool and an API for the automated exploration of possible computational pipelines (workflows) from large collections of computational tools.
package nl.uu.cs.ape.sat.constraints;
import nl.uu.cs.ape.sat.automaton.ModuleAutomaton;
import nl.uu.cs.ape.sat.automaton.TypeAutomaton;
import nl.uu.cs.ape.sat.models.AtomMappings;
import nl.uu.cs.ape.sat.models.logic.constructs.TaxonomyPredicate;
import nl.uu.cs.ape.sat.utils.APEDomainSetup;
import org.json.JSONArray;
import org.json.JSONObject;
import java.util.List;
/**
* The {@code ConstraintTemplate} class is an abstract class used to represent a general constraint template.
*
* @author Vedran Kasalica
*/
public abstract class ConstraintTemplate {
/**
* Identification String of the constraint template.
*/
String constraintID;
/**
* Description of the constraint.
*/
String description;
/**
* List of all the parameters of the constraint.
*/
List parameters;
/**
* Instantiates a new Constraint template.
*
* @param id Constraint ID.
* @param parameters Set of {@link ConstraintTemplateParameter} the constraint requires.
* @param description Description of the constraint.
*/
public ConstraintTemplate(String id, List parameters, String description) {
this.constraintID = id;
this.parameters = parameters;
this.description = description;
}
/**
* Sets constraint id.
*
* @param constraintID the constraint id
*/
public void setConstraintID(String constraintID) {
this.constraintID = constraintID;
}
/**
* Gets description.
*
* @return the description
*/
public String getDescription() {
return this.description;
}
/**
* Gets no of parameters.
*
* @return the no of parameters
*/
public int getNoOfParameters() {
return this.parameters.size();
}
/**
* Gets constraint id.
*
* @return the constraint id
*/
public String getConstraintID() {
return this.constraintID;
}
/**
* Gets parameter templates that are expected to be provided. The template is
*
* @return The field {@link #parameters}.
*/
public List getParameters() {
return parameters;
}
/**
* Returns the Constraint parameter at the specified position in this list.
*
* @param index Index of the element to return.
* @return The Constraint parameter at the specified position in this list.
*/
public ConstraintTemplateParameter getParameter(int index) {
return parameters.get(index);
}
/**
* Method will return a CNF representation of the constraint in DIMACS format.
* It will use predefined mapping function and all the atoms will be mapped to
* numbers accordingly.
*
* @param list Array of input parameters.
* @param domainSetup Domain with all the modules.
* @param moduleAutomaton Module automaton.
* @param typeAutomaton Type automaton.
* @param mappings Set of the mappings for the literals.
* @return The String CNF representation of the constraint. null in case of incorrect number of constraint parameters.
*/
public abstract String getConstraint(List list, APEDomainSetup domainSetup, ModuleAutomaton moduleAutomaton,
TypeAutomaton typeAutomaton, AtomMappings mappings);
/**
* Print the template for encoding the constraint, containing the template ID, description and required number of parameters.
*
* @return String representing the description.
*/
public String printConstraintCode() {
return toJSON().toString(3) + ",\n";
}
/**
* Convert the constraint template to a JSONObject.
*
* @return the JSONObject representing the constraint template.
*/
public JSONObject toJSON() {
JSONObject currJson = new JSONObject();
currJson.put("constraintID", constraintID);
currJson.put("description", description);
JSONArray params = new JSONArray();
for (ConstraintTemplateParameter param : parameters) {
params.put(param.toJSON());
}
currJson.put("parameters", params);
return currJson;
}
/**
* Throwing an error in case of having a wrong number of parameters in the constraints file.
*
* @param givenParameters Provided number of parameters.
*/
public void throwParametersError(int givenParameters) {
System.err.println("Error in the constraints file.\nConstraint: " + this.description + "\nExpected number of parameters: " + parameters.size() + ".\nProvided number of parameters: " + givenParameters);
}
}