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.automation.validation".
  • The new Automation Validation class must be annotated with "@PluginImplementation".

Validation interface:

package com.openkm.automation;

import java.util.Map;

import net.xeoh.plugins.base.Plugin;

public interface Validation extends Plugin {
	public static final String METHOD = "isValid";
	
	boolean isValid(Map<String, Object> env, Object... params);
	public boolean hasPost();
	public boolean hasPre();
	public String getName();
	public String getParamType00();
	public String getParamSrc00();
	public String getParamDesc00();
	public String getParamType01();
	public String getParamSrc01();
	public String getParamDesc01();
	public String getParamType02();
	public String getParamSrc02();
	public String getParamDesc02();
	public List<EnumEvents> getValidEventsAtPre();
	public List<EnumEvents> getValidEventsAtPost();
}

More information about Register a new plugin.

Methods description

MethodTypeDescription

isValid(Map<String, Object> env, Object... params)

boolean

The method executed by the Automation event to evaluate if conditions are true or false.

hasPost()

boolean

When returns true,  indicates the isValid(...) method can be used in Automation post stage.

More information about automation stages at Automation.

hasPre()

boolean

When returns true,  indicates the isValid(...) method can be used in Automation pre stage.

More information about automation stages at Automation.

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

Set 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<EnumEvents>

Return a list of events.

The method returns a list of valid events for the validation in pre.

getValidEventsAtPost()

List<EnumEvents>

Return a list of events.

The method returns a list of valid events for the validation in post.

Understanding env variable

The env variable is present on isValid method, it is a Map of values injected by automation. These map values provide information about the node involved on event and other related information.

It takes some time, until you take control of AutomationUtils class, because they are centralized, the methods for retrieve data.

Take a look at Variables by automation event to know what variables are available for each event.

 For example to retrieve the uuid of the node that caused the event.

String uuid = AutomationUtils.getUuid(env);

Understanding params variable

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

The array can have serveral Objects with a distinct type, it is necessary to retrieve the parameters to the correct object type.

It takes some time, until you take control of AutomationUtils class, because they are centralized, the methods to retrieve parameters.

For example to retrive the first parameters as String object.

String param00 = AutomationUtils.getString(0, params);

Description of available ParamType values:

PropertyDescription

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:

PropertyDescription

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

PathContains class:

package com.openkm.automation.validation;

import java.util.Map;

import net.xeoh.plugins.base.annotations.PluginImplementation;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.openkm.api.OKMRepository;
import com.openkm.automation.AutomationUtils;
import com.openkm.automation.Validation;
import com.openkm.dao.bean.Automation;

/**
 * PathContains
 * 
 */
@PluginImplementation
public class PathContains implements Validation {
	private static Logger log = LoggerFactory.getLogger(PathContains.class);

	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_CONVERSION_PDF,
					EnumEvents.EVENT_CONVERSION_SWF, EnumEvents.EVENT_CONVERSION_THUMBNAIL, 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_CONVERSION_PDF,
					EnumEvents.EVENT_CONVERSION_SWF, EnumEvents.EVENT_CONVERSION_THUMBNAIL, EnumEvents.EVENT_PROPERTY_GROUP_ADD, EnumEvents.EVENT_PROPERTY_GROUP_SET,
					EnumEvents.EVENT_PROPERTY_GROUP_REMOVE
					).collect(Collectors.toCollection(ArrayList::new));
	
	@Override
	public boolean isValid(Map<String, Object> env, Object... params) {
		try {
			String uuid = AutomationUtils.getString(0, params);
			String parentPath = AutomationUtils.getParentPath(env);
			String path = OKMRepository.getInstance().getNodePath(null, uuid);
			
			if (parentPath.startsWith(path)) {
				return true;
			} else {
				return false;
			}
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
		
		return false;
	}
	
	@Override
	public boolean hasPost() {
		return true;
	}
	
	@Override
	public boolean hasPre() {
		return false;
	}
	
	@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;
	}
}