Skip to content

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 under 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 Type Description
isValid(Map<String, Object> env, Object… params) boolean The method executed by the Automation event to evaluate whether conditions are true or false.
getName() String Sets the name that will be shown in the administrative 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
getParamDesc01
getParamDesc02
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.

The env variable is present in the isValid method; it 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);

The params variable is present in the isValid method; it is an array of Objects. This array is filled by the Automation event based on the number of parameters set on the Validation class (which will not be Automation.PARAM_TYPE_EMPTY).

The array can have 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 - optical mark recognition - will be required.
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 - optical mark recognition.

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.
*/
@PluginImplementation
public 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;
}
}