Creating your own Automation Validation
You can create your own Automation Validation.
Conditions:
- The new Automation Validation class must implement the “Validation” interface.
- The new Automation Validation class must be declared in the package “com.openkm.plugin.automation.validation”.
- The new Automation Validation class must be annotated with “@PluginImplementation”.
- The new Automation Validation class must extend “BasePlugin”.
Automation Validation interface:
package com.openkm.plugin.automation;
import com.openkm.db.bean.AutomationRule.EnumEvents;import net.xeoh.plugins.base.Plugin;
import java.util.List;import java.util.Map;
public interface Validation extends Plugin {
String METHOD = "isValid";
boolean isValid(Map<String, Object> env, Object... params) throws AutomationException;
String getName();
String getParamType00();
String getParamSrc00();
String getParamDesc00();
String getParamType01();
String getParamSrc01();
String getParamDesc01();
String getParamType02();
String getParamSrc02();
String getParamDesc02();
List<EnumEvents> getValidEventsAtPre();
List<EnumEvents> getValidEventsAtPost();}The new class must be loaded into the package com.openkm.plugin.automation.validation because the application plugin system will try to load it from there.
Method descriptions
Section titled “Method descriptions”| Method | Type | Description |
|---|---|---|
| isValid(Map<String, Object> env, Object… params) | boolean | The method executed by the automation event evaluates whether conditions are true or false. |
| getName() | String | Sets the name that will be shown in the administrator user interface selector list. |
| getParamType00 getParamType01 getParamType02 |
String | Sets the parameter type. Available values: - Automation.PARAM_TYPE_EMPTY - Automation.PARAM_TYPE_TEXT - Automation.PARAM_TYPE_INTEGER - Automation.PARAM_TYPE_BOOLEAN - Automation.PARAM_TYPE_TEXTAREA - Automation.PARAM_TYPE_CODE - Automation.PARAM_TYPE_USER - Automation.PARAM_TYPE_ROLE - Automation.PARAM_TYPE_OMR When the value is set to Automation.PARAM_TYPE_EMPTY. The parameters work as a logical group. [ getParamType00 + getParamSrc00 + getParamDesc00 ] |
| getParamSrc00 getParamSrc01 getParamSrc02 |
String | Sets the source type. Available values: - Automation.PARAM_SOURCE_EMPTY - Automation.PARAM_SOURCE_FOLDER - Automation.PARAM_SOURCE_OMR |
| getParamDesc00 getParamDesc00 getParamDesc00 |
String | The parameter description. |
| getValidEventsAtPre() | List |
Returns a list of events. The method returns a list of valid events for pre-validation. |
| getValidEventsAtPost() | List |
Returns a list of events. The method returns a list of valid events for post-validation. |
Understanding the env variable
Section titled “Understanding the env variable”The env variable present in the isValid method is a Map of values injected by automation. These map values provide information about the node involved in the event and other related information.
For example, to retrieve the node that caused the event.
NodeBase node = automationUtils.getNodeToEvaluate(env);Understanding the params variable
Section titled “Understanding the params variable”The params variable present in the isValid method is an array of Objects. This array is filled by the automation event based on the number of parameters set in the Validation class (which will not be the Automation.PARAM_TYPE_EMPTY value).
The array can contain several objects of distinct types; it is necessary to retrieve the parameters as the correct object type.
For example, to retrieve the first parameter as a String object.
String param00 = AutomationUtils.getString(0, params);Description of available ParamType values:
Section titled “Description of available ParamType values:”| Property | Description |
|---|---|
| Automation.PARAM_TYPE_EMPTY | Indicates an empty value. |
| Automation.PARAM_TYPE_TEXT | Indicates that a text value will be required. |
| Automation.PARAM_TYPE_INTEGER | Indicates that an integer value will be required. |
| Automation.PARAM_TYPE_BOOLEAN | Indicates that a boolean value will be required. |
| Automation.PARAM_TYPE_TEXTAREA | Indicates that a text area value will be required. |
| Automation.PARAM_TYPE_CODE | Indicates that a code will be required. |
| Automation.PARAM_TYPE_USER | Indicates that a valid application user will be required. |
| Automation.PARAM_TYPE_ROLE | Indicates that a valid application role will be required. |
| Automation.PARAM_TYPE_OMR | Indicates that a valid OMR id - object mark recognition - will be required. |
Description of available Src values:
Section titled “Description of available Src values:”| Property | Description |
|---|---|
| PARAM_SOURCE_EMPTY | Indicates an empty source. |
| PARAM_SOURCE_FOLDER | Indicates that the source must be a folder. |
| PARAM_SOURCE_OMR | Indicates that the source must be a valid OMR - object mark recognition -. |
Example
Section titled “Example”PathContains class:
package com.openkm.plugin.automation.validation;
import com.openkm.api.OKMRepository;import com.openkm.db.bean.Automation;import com.openkm.db.bean.AutomationRule.EnumEvents;import com.openkm.db.bean.NodeBase;import com.openkm.db.service.NodeBaseSrv;import com.openkm.plugin.BasePlugin;import com.openkm.plugin.automation.AutomationException;import com.openkm.plugin.automation.AutomationUtils;import com.openkm.plugin.automation.Validation;import net.xeoh.plugins.base.annotations.PluginImplementation;import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;import java.util.List;import java.util.Map;import java.util.stream.Collectors;import java.util.stream.Stream;
/** * Check if the current parent path contains a designed one. The only parameter * is a path and will test if this one is included in the actual parent. */@PluginImplementationpublic class PathContains extends BasePlugin implements Validation {
private static ArrayList<EnumEvents> EVENTS_AT_PRE = Stream.of(EnumEvents.EVENT_DOCUMENT_CREATE, EnumEvents.EVENT_DOCUMENT_UPDATE, EnumEvents.EVENT_DOCUMENT_DELETE, EnumEvents.EVENT_DOCUMENT_RENAME, EnumEvents.EVENT_DOCUMENT_MOVE, EnumEvents.EVENT_DOCUMENT_RESTORE_VERSION, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI_FOR_PREVIEW, EnumEvents.EVENT_DOCUMENT_PRINT, EnumEvents.EVENT_DOCUMENT_STAMP, EnumEvents.EVENT_RECORD_CREATE, EnumEvents.EVENT_RECORD_DELETE, EnumEvents.EVENT_FOLDER_CREATE, EnumEvents.EVENT_FOLDER_DELETE, EnumEvents.EVENT_MAIL_CREATE, EnumEvents.EVENT_MAIL_DOWNLOAD_FROM_UI, EnumEvents.EVENT_LINK_CREATE, EnumEvents.EVENT_TEXT_EXTRACTOR, EnumEvents.EVENT_PROPERTY_GROUP_ADD, EnumEvents.EVENT_PROPERTY_GROUP_SET, EnumEvents.EVENT_PROPERTY_GROUP_REMOVE ).collect(Collectors.toCollection(ArrayList::new));
private static ArrayList<EnumEvents> EVENTS_AT_POST = Stream.of(EnumEvents.EVENT_DOCUMENT_CREATE, EnumEvents.EVENT_DOCUMENT_UPDATE, EnumEvents.EVENT_DOCUMENT_DELETE, EnumEvents.EVENT_DOCUMENT_RENAME, EnumEvents.EVENT_DOCUMENT_MOVE, EnumEvents.EVENT_DOCUMENT_RESTORE_VERSION, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI, EnumEvents.EVENT_DOCUMENT_DOWNLOAD_FROM_UI_FOR_PREVIEW, EnumEvents.EVENT_DOCUMENT_PRINT, EnumEvents.EVENT_DOCUMENT_STAMP, EnumEvents.EVENT_RECORD_CREATE, EnumEvents.EVENT_RECORD_DELETE, EnumEvents.EVENT_FOLDER_CREATE, EnumEvents.EVENT_FOLDER_DELETE, EnumEvents.EVENT_MAIL_CREATE, EnumEvents.EVENT_MAIL_DOWNLOAD_FROM_UI, EnumEvents.EVENT_LINK_CREATE, EnumEvents.EVENT_TEXT_EXTRACTOR, EnumEvents.EVENT_PROPERTY_GROUP_ADD, EnumEvents.EVENT_PROPERTY_GROUP_SET, EnumEvents.EVENT_PROPERTY_GROUP_REMOVE, EnumEvents.EVENT_MAIL_IMPORT_ATTACHMENTS ).collect(Collectors.toCollection(ArrayList::new));
@Autowired private AutomationUtils automationUtils;
@Autowired private OKMRepository okmRepository;
@Autowired private NodeBaseSrv nodeBaseSrv;
@Override public boolean isValid(Map<String, Object> env, Object... params) throws AutomationException { try { String fldUuid = automationUtils.getString(0, params); NodeBase node = automationUtils.getNodeToEvaluate(env); String parentPath = nodeBaseSrv.getPathFromUuid(node.getParent()); String fldPath = okmRepository.getNodePath(null, fldUuid);
if (parentPath.startsWith(fldPath)) { return true; } else { return false; } } catch (Exception e) { throw new AutomationException("PathContains exception", e); } }
@Override public String getName() { return "PathContains"; }
@Override public String getParamType00() { return Automation.PARAM_TYPE_TEXT; }
@Override public String getParamSrc00() { return Automation.PARAM_SOURCE_FOLDER; }
@Override public String getParamDesc00() { return "String"; }
@Override public String getParamType01() { return Automation.PARAM_TYPE_EMPTY; }
@Override public String getParamSrc01() { return Automation.PARAM_SOURCE_EMPTY; }
@Override public String getParamDesc01() { return ""; }
@Override public String getParamType02() { return Automation.PARAM_TYPE_EMPTY; }
@Override public String getParamSrc02() { return Automation.PARAM_SOURCE_EMPTY; }
@Override public String getParamDesc02() { return ""; }
@Override public List<EnumEvents> getValidEventsAtPre() { return EVENTS_AT_PRE; }
@Override public List<EnumEvents> getValidEventsAtPost() { return EVENTS_AT_POST; }}