package com.pti.fsc.wfe.workitem.handler;
import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import org.jbpm.bpmn2.handler.WorkItemHandlerRuntimeException;
import org.jbpm.persistence.processinstance.ProcessInstanceExtra;
import org.kie.api.runtime.KieSession;
import org.kie.api.runtime.process.WorkItemHandler;
import org.kie.api.runtime.process.WorkflowProcessInstance;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.pti.fsc.wfe.workitem.WorkItemConstants;
public abstract class AbstractWorkItemHandler implements WorkItemHandler {
/**
* logger
*/
private static Logger logger = LoggerFactory.getLogger(AbstractWorkItemHandler.class);
/**
* Kie session
*/
private KieSession ksession;
/**
* default constructor
*/
public AbstractWorkItemHandler() {
}
/**
* constructor
*
* @param ksession
* - KieSession
*/
public AbstractWorkItemHandler(KieSession ksession) {
this.ksession = ksession;
}
/**
* Get the internal KieSession reference
*
* @return KieSession
*/
protected KieSession getKsession() {
return ksession;
}
/**
* handle exception
*
* @param cause
* - Throwable
* @param service
* - String
* @param operation
* - String
*/
protected void handleException(Throwable cause, String service, String operation) {
WorkItemHandlerRuntimeException wihRe = null;
if (cause instanceof InvocationTargetException) {
Throwable realCause = cause.getCause();
wihRe = new WorkItemHandlerRuntimeException(realCause);
wihRe.setStackTrace(realCause.getStackTrace());
} else {
wihRe = new WorkItemHandlerRuntimeException(cause);
wihRe.setStackTrace(cause.getStackTrace());
}
wihRe.setInformation("service", service);
wihRe.setInformation("operation", operation);
wihRe.setInformation(WorkItemHandlerRuntimeException.WORKITEMHANDLERTYPE, this.getClass().getSimpleName());
throw wihRe;
}
/**
* Make sure the passed string value
always has value or zero
* length if it is null
*
* @param value
* - String
* @return String
*/
protected String nonNull(String value) {
if (value == null) {
return "";
}
return value;
}
/**
* test if the specified string is null or has no characters
*
* @param value
* - String
* @return true indicating it is null or has no characters
*/
protected boolean isEmpty(String value) {
if (null == value || "".equals(value))
return true;
return false;
}
/**
* Temporarily save self-defined variable "wfe_client_id" which is in extra
* table and has a variant in process variable table
*
* @param parameters
* - Map
* @param processInstanceId
* - long
*/
protected void saveWfClientId(Map parameters, final long processInstanceId) {
logger.debug("------ KieSession>>>"+ksession);
WorkflowProcessInstance processInstance =
(WorkflowProcessInstance)ksession.getProcessInstance(processInstanceId);
logger.debug("------ ProcessInstance>>>"+processInstance);
String wfeClientId =
(String)processInstance.getVariable(ProcessInstanceExtra.COLUMN_PREFIX + WorkItemConstants.WFE_CLIENT_ID);
parameters.put(WorkItemConstants.JAVA_NAMING_PROVIDER_URL, wfeClientId);
}
}