Design Custom Standardization and Validation Rules that can be applied to a Table Field. Standardization and Validation rules are written as simple Java POJO along with custom Annotations that allow the system to transform policies to/from the User Interface.
Below is the mapping of the User Interface Object and its respective to Domain Model
User Interface (UI) class | Domain Class |
---|---|
FieldStandardizationRule | StandardizationPolicy |
FieldValidationRule | ValidationPolicy |
To understand how the system uses the annotations to automatically transform the objects click here.
-
Policy Constructor rules
The StandardizationPolicy and ValidationPolicy must follow one of the following rules
- Have a no arg constructor
- or Have a constructor with parameters each annotated with @PolicyPropertyRef (See examples below)
- or be a singleton with a private constructor and a public static instance() method (See examples below)
-
Standardization Policies must implement the StandardizationPolicy interface and be annotated with @Standardizer
-
Validator Policies must implement the Validator interface and be annotated with @Validator
- Create a class that implements
com.thinkbiganalytics.policy.standardization.StandardizationPolicy
- Add the
@Standardizer
annotation to the class - Annotate any field inputs with
@PolicyProperty
and any Constructor arguments with@PolicyPropertyRef
- Create a class that implements
com.thinkbiganalytics.policy.validation.ValidationPolicy
- Add the
@Validator
annotation to the class - Annotate any field inputs with
@PolicyProperty
and any Constructor arguments with@PolicyPropertyRef
Purpose: Annotate any Parameter that is needed to be captured the User Interface in order to create the Standardization or Validation Policy.
Attribute | Required | Default Value | Description |
---|---|---|---|
name | Y | Unique Name for the User Inerface and Domain to match. NOTE This will also become the User Interface Display Name, (displayName attribute) if one is not specified |
|
displayName | N | name value above | The display name on the UI |
value | N | default value on the UI | |
placeholder | N | Html Placeholder attribute | |
type | N | string | Render Types. Available Options (number, string, select, regex, date) |
selectableValues | N | If type is select this is the Array of Strings that will be in the list Optionally use the property below for a label/value render |
|
labelValues | N | If type is select this is the Array of Label/Values that will be in the list |
Purpose: Annotate any Constructor Parameter that references a given @PolicyProperty
Attribute | Required | Description |
---|---|---|
name | Y | This name should match the @PolicyProperty name |
Purpose: Annotate the Class to inform the system and the User Interface that this is a Standardizer
Attribute | Required | Description |
---|---|---|
name | Y | This name of the Standardizer. This will be displayed on the User Interface |
description | N | Short Description of the Standardizer. This will be displayed on the User Interface |
Purpose: Annotate the Class to inform the system and the User Interface that this is a Validator
Attribute | Required | Description |
---|---|---|
name | Y | This name of the Validator. This will be displayed on the User Interface |
description | N | Short Description of the Validator. This will be displayed on the User Interface |
- Create a new Java Class that implements the StandardizationPolicy class
- Augment your Class with the @Standardizer annotation
@Standardizer(name = "Default Value", description = "Applies a default value if null")
public class DefaultValueStandardizer implements StandardizationPolicy, AcceptsEmptyValues {
@Override
public String convertValue(String value) {
return StringUtils.defaultString(value, defaultStr);
}
}
- If fields are needed to be captured by the User interface annotate the fields with the @PolicyProperty annotation
@Standardizer(name = "Default Value", description = "Applies a default value if null")
public class DefaultValueStandardizer implements StandardizationPolicy, AcceptsEmptyValues {
@PolicyProperty(name = "Default Value", hint = "If the value is null it will use this supplied value")
private String defaultStr;
...
}
- Either supply a no arg Constructor, or supply a Constructor with the @PolicyPropertyRef indicating which property the parameter refers to.
Note: The Name attribute of @PolicyPropertyRef matches on the name attribute of @PolicyProperty
@Standardizer(name = "Default Value", description = "Applies a default value if null")
public class DefaultValueStandardizer implements StandardizationPolicy, AcceptsEmptyValues {
@PolicyProperty(name = "Default Value", hint = "If the value is null it will use this supplied value")
private String defaultStr;
public DefaultValueStandardizer(@PolicyPropertyRef(name = "Default Value") String defaultStr) {
this.defaultStr = defaultStr;
}
@Override
public String convertValue(String value) {
return StringUtils.defaultString(value, defaultStr);
}
}
Note: If your StandardizationPolicy does not require inputs you can make it a Singelton class and the System will use the singelton if you implement a static method instance
@Standardizer(name = "Strip Non Numeric", description = "Remove any characters that are not numeric")
public class StripNonNumeric extends SimpleRegexReplacer {
private static final StripNonNumeric instance = new StripNonNumeric();
public static StripNonNumeric instance() {
return instance;
}
private StripNonNumeric() {
super("[^\\d.]", "");
}
@Override
public String convertValue(String value) {
return super.convertValue(value);
}
}
Notice above the default constructor is private, but there is a static instance method.
To Be Documented.
The field-policies-controller module discovers all classes on the classpath that have either a @Standardizer
or @Validator
and creates default User Interface Objects that are then displayed when a user creates a new Field Policy.
The com.thinkbiganalytics.policy.AvaliablePolicies
class exposes these objects using Reflection. The com.thinkbiganalytics.policy.rest.controller.FieldPolicyRestController
surfaces these so the User Interface can display the available options to the user.
In the field-policies-core module 2 classes are used to do the Standardization and Validation transformation
com.thinkbiganalytics.standardization.transform.StandardizationAnnotationTransformer;
com.thinkbiganalytics.standardization.transform.ValidatorAnnotationTransformer;
Additional Transformers are used that utilize these 2 classes to Transform multiple policies on a Field
com.thinkbiganalytics.policy.FieldPolicyTransfomer;
com.thinkbiganalytics.policy.FieldPoliciesJsonTransfomer;
The com.thinkbiganalytics.policy.FieldPoliciesJsonTransfomer
is used by the spark-validate-cleanse module to convert a JSON string that has come from the User Interface and create Domain StandardizationPolicy and ValidationPolicy Objects.