/*
* Copyright 2014 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.
* You may obtain a copy of the License at
*
* 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.kie.services.impl;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jbpm.services.api.AdHocUserTaskService;
import org.jbpm.services.task.utils.TaskFluent;
import org.kie.api.task.model.I18NText;
import org.kie.api.task.model.Task;
import org.kie.internal.task.api.InternalTaskService;
import org.kie.internal.task.api.TaskModelProvider;
import org.kie.internal.task.api.model.InternalI18NText;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class AdHocUserTaskServiceImpl implements AdHocUserTaskService, VariablesAware {
private static final Logger logger = LoggerFactory.getLogger(AdHocUserTaskServiceImpl.class);
private InternalTaskService nonProcessScopedTaskService;
public void setNonProcessScopedTaskService(InternalTaskService nonProcessScopedTaskService) {
this.nonProcessScopedTaskService = nonProcessScopedTaskService;
}
protected InternalTaskService getInternalTaskService() {
return this.nonProcessScopedTaskService;
}
@Override
public long addTask(
final String taskName,
int priority,
Date dueDate, final List<String> users, List<String> groups, String identity,
String taskformName, String deploymentId, Long processInstanceId, Map<String, Object> params,
boolean autoStart, boolean autoClaim) {
TaskFluent taskFluent = new TaskFluent().setName(taskName)
.setPriority(priority)
.setDueDate(dueDate)
.setFormName(taskformName);
if (deploymentId != null && !deploymentId.equals("")) {
taskFluent.setDeploymentID(deploymentId);
} else {
taskFluent.setDeploymentID(null);
}
if (processInstanceId > 0) {
taskFluent.setProcessInstanceId(processInstanceId);
}
for (String user : users) {
taskFluent.addPotentialUser(user);
}
for (String group : groups) {
taskFluent.addPotentialGroup(group);
}
taskFluent.setAdminUser("Administrator");
taskFluent.setAdminGroup("Administrators");
Task task = taskFluent.getTask();
if(params == null){
params = new HashMap<String, Object>();
}
long taskId = nonProcessScopedTaskService.addTask(taskFluent.getTask(), params);
if (autoStart) {
nonProcessScopedTaskService.start(taskId, identity);
}
if (autoClaim) {
nonProcessScopedTaskService.claim(taskId, identity);
}
return taskId;
}
@Override
public void updateTask(long taskId, int priority, String taskDescription,
Date dueDate) {
nonProcessScopedTaskService.setPriority(taskId, priority);
if (taskDescription != null) {
InternalI18NText text = (InternalI18NText) TaskModelProvider.getFactory().newI18NText();
text.setLanguage("en-UK");
text.setText(taskDescription);
List<I18NText> names = new ArrayList<I18NText>();
names.add(text);
nonProcessScopedTaskService.setDescriptions(taskId, names);
}
if (dueDate != null) {
nonProcessScopedTaskService.setExpirationDate(taskId, dueDate);
}
}
@Override
public <T> T process(T variables, ClassLoader cl) {
// do nothing here as there is no need to process variables
return variables;
}
@Override
public long addTask(Task task, Map<String, Object> params) {
return nonProcessScopedTaskService.addTask(task, params);
}
}