/*
* Copyright 2015 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
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.DEPLOYMENT_ID_LIST;
import static org.kie.internal.query.QueryParameterIdentifiers.ID_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.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.WORK_ITEM_ID_LIST;
import java.util.Date;
import org.jbpm.process.audit.JPAAuditLogService;
import org.jbpm.process.audit.query.AbstractAuditQueryBuilderImpl;
import org.jbpm.services.task.audit.impl.model.AuditTaskImpl;
import org.kie.api.runtime.CommandExecutor;
import org.kie.api.task.model.Status;
import org.kie.internal.task.api.AuditTask;
import org.kie.internal.task.query.AuditTaskQueryBuilder;
public class AuditTaskQueryBuilderImpl extends AbstractAuditQueryBuilderImpl<AuditTaskQueryBuilder, AuditTask> implements AuditTaskQueryBuilder {
public AuditTaskQueryBuilderImpl(CommandExecutor cmdService) {
super(cmdService);
}
public AuditTaskQueryBuilderImpl(JPAAuditLogService jpaAuditService) {
super(jpaAuditService);
}
@Override
public AuditTaskQueryBuilder taskId(long... taskId) {
addLongParameter(TASK_ID_LIST, "task id", taskId);
return this;
}
@Override
public AuditTaskQueryBuilder taskIdRange( Long taskIdMin, Long taskIdMax ) {
long [] params = { taskIdMin, taskIdMax };
addRangeParameters(TASK_ID_LIST, "task id", taskIdMin, taskIdMax );
return this;
}
@Override
public AuditTaskQueryBuilder taskStatus(Status... status) {
String [] stringStatuses = null;
if( status != null ) {
stringStatuses = new String[status.length];
for( int i = 0; i < status.length; ++i ) {
stringStatuses[i] = status[i].toString();
}
}
addObjectParameter(TASK_STATUS_LIST, "task status", stringStatuses);
return this;
}
@Override
public AuditTaskQueryBuilder actualOwner( String... actualOwnerUserId ) {
addObjectParameter(ACTUAL_OWNER_ID_LIST, "actual owner", actualOwnerUserId);
return this;
}
@Override
public AuditTaskQueryBuilder deploymentId( String... deploymentId ) {
addObjectParameter(DEPLOYMENT_ID_LIST, "deployment id", deploymentId);
return this;
}
@Override
public AuditTaskQueryBuilder id( long... id ) {
addLongParameter(ID_LIST, "id", id);
return this;
}
@Override
public AuditTaskQueryBuilder createdOn( Date... createdOn ) {
addObjectParameter(CREATED_ON_LIST, "created on", createdOn);
return this;
}
@Override
public AuditTaskQueryBuilder createdOnRange( Date createdOnMin, Date createdOnMax ) {
addRangeParameters(CREATED_ON_LIST, "created on", createdOnMin, createdOnMax);
return this;
}
@Override
public AuditTaskQueryBuilder taskParentId( long... parentId ) {
addLongParameter(TASK_PARENT_ID_LIST, "parent id", parentId);
return this;
}
@Override
public AuditTaskQueryBuilder createdBy( String... createdByUserId ) {
addObjectParameter(CREATED_BY_LIST, "created by", createdByUserId);
return this;
}
@Override
public AuditTaskQueryBuilder activationTime( Date... activationTime ) {
addObjectParameter(TASK_ACTIVATION_TIME_LIST, "activation time", activationTime);
return this;
}
@Override
public AuditTaskQueryBuilder activationTimeRange( Date activationTimeMin, Date activationTimeMax ) {
addRangeParameters(TASK_ACTIVATION_TIME_LIST, "activation time", activationTimeMin, activationTimeMax);
return this;
}
@Override
public AuditTaskQueryBuilder taskName(String... name) {
addObjectParameter(TASK_NAME_LIST, "task name", name);
return this;
}
@Override
public AuditTaskQueryBuilder description(String... description) {
addObjectParameter(TASK_DESCRIPTION_LIST, "task description", description);
return this;
}
@Override
public AuditTaskQueryBuilder workItemId(long... workItemId) {
addLongParameter(WORK_ITEM_ID_LIST, "work item id", workItemId);
return this;
}
@Override
public AuditTaskQueryBuilder priority( int... priority ) {
addIntParameter(TASK_PRIORITY_LIST, "priority", priority);
return this;
}
@Override
public AuditTaskQueryBuilder processSessionId( long... processSessionId ) {
addLongParameter(TASK_PROCESS_SESSION_ID_LIST, "priority session id", processSessionId);
return this;
}
@Override
public AuditTaskQueryBuilder dueDate( Date... dueDate ) {
addObjectParameter(TASK_DUE_DATE_LIST, "due date", dueDate);
return this;
}
@Override
public AuditTaskQueryBuilder dueDateRange( Date dueDateMin, Date dueDateMax ) {
addRangeParameters(TASK_DUE_DATE_LIST, "due date", dueDateMin, dueDateMax);
return this;
}
@Override
public AuditTaskQueryBuilder ascending( org.kie.internal.task.query.AuditTaskQueryBuilder.OrderBy field ) {
String listId = convertOrderByToListId(field);
this.queryWhere.setAscending(listId);
return this;
}
@Override
public AuditTaskQueryBuilder descending( org.kie.internal.task.query.AuditTaskQueryBuilder.OrderBy field ) {
String listId = convertOrderByToListId(field);
this.queryWhere.setDescending(listId);
return this;
}
private String convertOrderByToListId(org.kie.internal.task.query.AuditTaskQueryBuilder.OrderBy field) {
String listId;
switch( field ) {
case activationTime:
listId = TASK_ACTIVATION_TIME_LIST;
break;
case taskId:
listId = TASK_ID_LIST;
break;
case createdOn:
listId = CREATED_ON_LIST;
break;
case processId:
listId = PROCESS_ID_LIST;
break;
case processInstanceId:
listId = PROCESS_INSTANCE_ID_LIST;
break;
default:
throw new IllegalArgumentException("Unknown 'order-by' field: " + field.toString() );
}
return listId;
}
@Override
protected Class<AuditTask> getResultType() {
return AuditTask.class;
}
@Override
protected Class<AuditTaskImpl> getQueryType() {
return AuditTaskImpl.class;
}
}