package org.jbpm.services.task.audit.service;
import static org.kie.internal.query.QueryParameterIdentifiers.ACTUAL_OWNER_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.CREATED_BY_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.CREATED_ON_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.DATE_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.DEPLOYMENT_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.DURATION_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.END_DATE_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.MESSAGE_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.PROCESS_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.PROCESS_INSTANCE_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.START_DATE_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_ACTIVATION_TIME_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_DESCRIPTION_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_DUE_DATE_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_NAME_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_PARENT_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_PRIORITY_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_PROCESS_SESSION_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_STATUS_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_VARIABLE_NAME_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TASK_VARIABLE_VALUE_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.TYPE_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.USER_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.WORK_ITEM_ID_LIST;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.persistence.EntityManager;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Predicate;
import javax.persistence.metamodel.Attribute;
import org.jbpm.query.jpa.data.QueryCriteria;
import org.jbpm.query.jpa.data.QueryWhere;
import org.jbpm.services.task.audit.impl.model.AuditTaskImpl_;
import org.jbpm.services.task.audit.impl.model.BAMTaskSummaryImpl_;
import org.jbpm.services.task.audit.impl.model.TaskEventImpl_;
import org.jbpm.services.task.audit.impl.model.TaskVariableImpl_;
import org.jbpm.services.task.persistence.AbstractTaskQueryCriteriaUtil;
import org.kie.internal.task.api.TaskPersistenceContext;
public class TaskAuditQueryCriteriaUtil extends AbstractTaskQueryCriteriaUtil {
// Query Field Info -----------------------------------------------------------------------------------------------------------
public final static Map<Class, Map<String, Attribute>> criteriaAttributes
= new ConcurrentHashMap<Class, Map<String, Attribute>>();
@Override
protected synchronized boolean initializeCriteriaAttributes() {
if( AuditTaskImpl_.taskId == null ) {
// EMF/persistence has not been initialized:
// When a persistence unit (EntityManagerFactory) is initialized,
// the fields of classes annotated with @StaticMetamodel are filled using reflection
return false;
}
// do not do initialization twice (slow performance, otherwise it doesn't matter)
if( ! criteriaAttributes.isEmpty() ) {
return true;
}
// AuditTaskImpl
addCriteria(criteriaAttributes, TASK_ID_LIST, AuditTaskImpl_.taskId);
addCriteria(criteriaAttributes, PROCESS_ID_LIST, AuditTaskImpl_.processId);
addCriteria(criteriaAttributes, TASK_STATUS_LIST, AuditTaskImpl_.status);
addCriteria(criteriaAttributes, ACTUAL_OWNER_ID_LIST, AuditTaskImpl_.actualOwner);
addCriteria(criteriaAttributes, DEPLOYMENT_ID_LIST, AuditTaskImpl_.deploymentId);
addCriteria(criteriaAttributes, ID_LIST, AuditTaskImpl_.id);
addCriteria(criteriaAttributes, CREATED_ON_LIST, AuditTaskImpl_.createdOn);
addCriteria(criteriaAttributes, TASK_PARENT_ID_LIST, AuditTaskImpl_.parentId);
addCriteria(criteriaAttributes, CREATED_BY_LIST, AuditTaskImpl_.createdBy);
addCriteria(criteriaAttributes, PROCESS_INSTANCE_ID_LIST, AuditTaskImpl_.processInstanceId);
addCriteria(criteriaAttributes, TASK_ACTIVATION_TIME_LIST, AuditTaskImpl_.activationTime);
addCriteria(criteriaAttributes, TASK_DESCRIPTION_LIST, AuditTaskImpl_.description);
addCriteria(criteriaAttributes, TASK_PRIORITY_LIST, AuditTaskImpl_.priority);
addCriteria(criteriaAttributes, TASK_NAME_LIST, AuditTaskImpl_.name);
addCriteria(criteriaAttributes, TASK_PROCESS_SESSION_ID_LIST, AuditTaskImpl_.processSessionId);
addCriteria(criteriaAttributes, TASK_DUE_DATE_LIST, AuditTaskImpl_.dueDate);
addCriteria(criteriaAttributes, WORK_ITEM_ID_LIST, AuditTaskImpl_.workItemId);
// BAMTaskSummaryImpl
addCriteria(criteriaAttributes, TASK_ID_LIST, BAMTaskSummaryImpl_.taskId);
addCriteria(criteriaAttributes, START_DATE_LIST, BAMTaskSummaryImpl_.startDate);
addCriteria(criteriaAttributes, DURATION_LIST, BAMTaskSummaryImpl_.duration);
addCriteria(criteriaAttributes, PROCESS_INSTANCE_ID_LIST, BAMTaskSummaryImpl_.processInstanceId);
addCriteria(criteriaAttributes, TASK_STATUS_LIST, BAMTaskSummaryImpl_.status);
addCriteria(criteriaAttributes, USER_ID_LIST, BAMTaskSummaryImpl_.userId);
addCriteria(criteriaAttributes, END_DATE_LIST, BAMTaskSummaryImpl_.endDate);
addCriteria(criteriaAttributes, CREATED_ON_LIST, BAMTaskSummaryImpl_.createdDate);
addCriteria(criteriaAttributes, TASK_NAME_LIST, BAMTaskSummaryImpl_.taskName);
addCriteria(criteriaAttributes, ID_LIST, BAMTaskSummaryImpl_.pk);
// TaskEventImpl
addCriteria(criteriaAttributes, MESSAGE_LIST, TaskEventImpl_.message);
addCriteria(criteriaAttributes, TASK_ID_LIST, TaskEventImpl_.taskId);
addCriteria(criteriaAttributes, ID_LIST, TaskEventImpl_.id);
addCriteria(criteriaAttributes, PROCESS_INSTANCE_ID_LIST, TaskEventImpl_.processInstanceId);
addCriteria(criteriaAttributes, DATE_LIST, TaskEventImpl_.logTime);
addCriteria(criteriaAttributes, USER_ID_LIST, TaskEventImpl_.userId);
addCriteria(criteriaAttributes, TYPE_LIST, TaskEventImpl_.type);
addCriteria(criteriaAttributes, WORK_ITEM_ID_LIST, TaskEventImpl_.workItemId);
// TaskVariableImpl
addCriteria(criteriaAttributes, ID_LIST, TaskVariableImpl_.id);
addCriteria(criteriaAttributes, TASK_ID_LIST, TaskVariableImpl_.taskId);
addCriteria(criteriaAttributes, PROCESS_INSTANCE_ID_LIST, TaskVariableImpl_.processInstanceId);
addCriteria(criteriaAttributes, PROCESS_ID_LIST, TaskVariableImpl_.processId);
addCriteria(criteriaAttributes, TASK_VARIABLE_NAME_ID_LIST, TaskVariableImpl_.name);
addCriteria(criteriaAttributes, TASK_VARIABLE_VALUE_ID_LIST, TaskVariableImpl_.value);
addCriteria(criteriaAttributes, DATE_LIST, TaskVariableImpl_.modificationDate);
addCriteria(criteriaAttributes, TYPE_LIST, TaskVariableImpl_.type);
return true;
}
// Implementation specific logic ----------------------------------------------------------------------------------------------
private final TaskJPAAuditService taskAuditService;
public TaskAuditQueryCriteriaUtil(TaskJPAAuditService service) {
super(null);
initialize(criteriaAttributes);
this.taskAuditService = service;
}
public TaskAuditQueryCriteriaUtil(TaskPersistenceContext context) {
super(context);
initialize(criteriaAttributes);
this.taskAuditService = null;
}
@Override
protected EntityManager getEntityManager() {
if( this.persistenceContext == null ) {
return this.taskAuditService.getEntityManager();
} else {
return super.getEntityManager();
}
}
@Override
protected Object joinTransaction(EntityManager em ) {
if( this.persistenceContext == null ) {
return this.taskAuditService.joinTransaction(em);
} else {
super.joinTransaction(em);
return true;
}
}
@Override
protected void closeEntityManager(EntityManager em, Object transaction) {
if( this.persistenceContext == null ) {
this.taskAuditService.closeEntityManager(em, transaction);
}
// em closed outside of this class when used within HT
}
// Implementation specific methods --------------------------------------------------------------------------------------------
@Override
protected <R,T> Predicate implSpecificCreatePredicateFromSingleCriteria(
CriteriaQuery<R> query,
CriteriaBuilder builder,
Class queryType,
QueryCriteria criteria,
QueryWhere queryWhere) {
throw new IllegalStateException("List id " + criteria.getListId() + " is not supported for queries on " + queryType.getSimpleName() + ".");
}
}