New validators can be developed as classes implementing the
org.auelproject.datasift.Validator
interface, which is defined like this:
public interface Validator { public String getName(); public void setName(String name); public boolean hasConfigParameters(); public int getConfigParametersCount(); public boolean isConfigInitialized(); public Map getConfigParameterDefinitions(); public ConfigParameterDefinition getConfigParameterDefinition(String parameterName) throws IncorrectParameterException; public Map getConfigParameters() throws ConfigNotInitializedException; public Object getConfigParameter(String parameterName) throws ConfigNotInitializedException, IncorrectParameterException; public boolean isConfigParameterNull(String parameterName) throws ConfigNotInitializedException, IncorrectParameterException; public void setConfigParameters(Map parameters) throws ConfigParametersException; public int getDataParametersCount(); public boolean isDataInitialized(); public Map getDataParameterDefinitions(); public DataParameterDefinition getDataParameterDefinition(String parameterName) throws IncorrectParameterException; public Map getDataParameters() throws DataNotInitializedException; public Object getDataParameter(String parameterName) throws DataNotInitializedException, IncorrectParameterException; public boolean isDataParameterNull(String parameterName) throws DataNotInitializedException, IncorrectParameterException; public void setDataParameters(Map parameters) throws DataParametersException; public void reset(); public boolean validate() throws DataNotInitializedException, ConfigNotInitializedException; }
However, most of the logic developers will need to create a new Validator is
already provided by DataSift in the
org.auelproject.datasift.AbstractValidator
class.
By extending AbstractValidator
instead of implementing the
Validator
interface, the task of creating a new
resolver gets reduced to writing a class like this:
package mypackage; import java.util.Map; import org.auelproject.datasift.AbstractValidator; import org.auelproject.datasift.EntityUtils; public class MyValidator extends AbstractValidator { public Map doGetConfigParameterDefinitions() { /* * We should define here a Map with String objects as keys * and org.auelproject.datasift.ConfigParameterDefinition * objects as values (keys are parameter names, values * are their definitions), or, for convenience, use one of * the already defined configurations in EntityUtils. */ return EntityUtils.ACCEPT_NULL_CONFIG_PARAMETER; } public Map doGetDataParameterDefinitions() { /* * We should define here a Map with String objects as keys * and org.auelproject.datasift.DataParameterDefinition * objects as values (keys are parameter names, values * are their definitions), or, for convenience, use one of * the already defined data configurations in EntityUtils. * * As a standard, validators that receive a single data * parameter will name it "data" as defined in the * EntityUtils.SINGLE_DATA_STRING_PARAMETER, * EntityUtils.SINGLE_DATA_INTEGER_PARAMETER, etc. constants. */ return EntityUtils.SINGLE_DATA_STRING_PARAMETER; } protected boolean doValidate() { /* * If we had config parameters, we could access them with the * "getConfigParameterForProcess(String parameterName)" method. */ ... /* * We can access our data parameters with the * "getDataParameterForProcess(String parameterName)" method, * and the constants defined in EntityUtils can be used as * parameter names if they have standard names (e.g. "data"). */ String value = (String) getDataParameterForProcess( EntityUtils.SINGLE_DATA_PARAMETER_NAME); ... } protected void doReset() { // Perform any validator-specific reset operation. } }