package arida.ufc.br.moap.core.imp; import java.util.HashMap; import java.util.Set; import org.apache.commons.lang3.Validate; import org.apache.commons.lang3.builder.ToStringBuilder; /** * * Parameters commonly used in algorithms.With this parameters is possible * represent some algorithm you want, because the input of an algorithm can be a * representation of itself. * * @author franzejr */ public class Parameters { /* * All parameters from an algorithm */ private HashMap<String, Object> parameters = new HashMap<String, Object>(); private HashMap<String, Class<? extends Object>> parametersClass = new HashMap<String, Class<? extends Object>>(); /* * You can add a Parameter,to do it, you need to * specify the parameter name and the value */ public void addParam(String name, Object value) { parameters.put(name, value); parametersClass.put(name, value.getClass()); } public void addClass(String name, Class<? extends Object> c) { parametersClass.put(name, c); } /* * @return Parameter */ public Object getParamValue(String paramName) { return parameters.get(paramName); } public Class<? extends Object> getParamClass(String paramName) { return parametersClass.get(paramName); } /* * Remove a parameter */ public void removeParam(String o) { parameters.remove(o); } /* * Update a Parameter */ public void updateParam(String name, Object o) { parameters.put(name, o); } public Set<String> getParameters() { return this.parameters.keySet(); } @Override public String toString() { ToStringBuilder toString = new ToStringBuilder(this); if (this.parameters.values().size() > 0) { for (String s : this.parameters.keySet()) { toString.append(s, this.parameters.get(s)); } } else { for (String s : this.parametersClass.keySet()) { toString.append(s, this.parametersClass.get(s).getName()); } } return toString.toString(); } public boolean validate(Parameters params) { // Set<String> diff = new HashSet<String>(input.getParameters()); // diff.removeAll(this.parameters.getParameters()); // // if(!diff.isEmpty()){ // throw new MissingParameter(); // } Validate.notEmpty(params.getParameters(), "Expected " + this.toString()); for (String s : this.parametersClass.keySet()) { // Validate the input Validate.isTrue(params.getParameters().contains(s), "Parameter should contain %s of type %s", s, this.getParamClass(s)); // Validate the input type Validate.isInstanceOf(this.getParamClass(s), params.getParamValue(s), "Parameter for %s should be %s", s, this.getParamClass(s)); } return true; } }