/*
* 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.kie.server.remote.rest.jbpm;
import java.text.MessageFormat;
import java.util.List;
import javax.ws.rs.DELETE;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Variant;
import org.jbpm.services.api.TaskNotFoundException;
import org.kie.server.api.model.instance.TaskEventInstanceList;
import org.kie.server.remote.rest.common.Header;
import org.kie.server.services.api.KieServerRegistry;
import org.kie.server.services.jbpm.RuntimeDataServiceBase;
import org.kie.server.services.jbpm.UserTaskServiceBase;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import static org.kie.server.api.rest.RestURI.*;
import static org.kie.server.remote.rest.common.util.RestUtils.*;
import static org.kie.server.remote.rest.jbpm.resources.Messages.*;
@Path("server/" + TASK_URI)
public class UserTaskResource {
public static final Logger logger = LoggerFactory.getLogger(UserTaskResource.class);
private UserTaskServiceBase userTaskServiceBase;
private RuntimeDataServiceBase runtimeDataServiceBase;
private KieServerRegistry context;
public UserTaskResource() {
}
public UserTaskResource(UserTaskServiceBase userTaskServiceBase, RuntimeDataServiceBase runtimeDataServiceBase, KieServerRegistry context) {
this.userTaskServiceBase = userTaskServiceBase;
this.runtimeDataServiceBase = runtimeDataServiceBase;
this.context = context;
}
@PUT
@Path(TASK_INSTANCE_ACTIVATE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response activate(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.activate(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_CLAIM_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response claim(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.claim(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_COMPLETE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response complete(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId, @QueryParam("auto-progress") boolean autoProgress, String payload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
if (autoProgress) {
userTaskServiceBase.completeAutoProgress(containerId, taskId, userId, payload, type);
} else {
userTaskServiceBase.complete(containerId, taskId, userId, payload, type);
}
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_DELEGATE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response delegate(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId, @QueryParam("targetUser") String targetUserId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.delegate(containerId, taskId, userId, targetUserId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_EXIT_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response exit(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.exit(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_FAIL_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response fail(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId, String payload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.fail(containerId, taskId, userId, payload, type);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_FORWARD_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response forward(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId, @QueryParam("targetUser") String targetUserId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.forward(containerId, taskId, userId, targetUserId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_RELEASE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response release(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.release(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_RESUME_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response resume(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.resume(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_SKIP_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response skip(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.skip(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_START_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response start(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.start(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_STOP_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response stop(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.stop(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_SUSPEND_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response suspend(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.suspend(containerId, taskId, userId);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_NOMINATE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response nominate(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId, @QueryParam("potOwner") List<String> potentialOwners) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.nominate(containerId, taskId, userId, potentialOwners);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_PRIORITY_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response setPriority(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String priorityPayload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.setPriority(containerId, taskId, priorityPayload, type);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_EXPIRATION_DATE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response setExpirationDate(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String datePayload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.setExpirationDate(containerId, taskId, datePayload, type);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_SKIPABLE_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response setSkipable(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String skipablePayload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.setSkipable(containerId, taskId, skipablePayload, type);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_NAME_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response setName(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String namePayload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.setName(containerId, taskId, namePayload, type);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_DESCRIPTION_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response setDescription(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String descriptionPayload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.setDescription(containerId, taskId, descriptionPayload, type);
return createResponse("", v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@PUT
@Path(TASK_INSTANCE_OUTPUT_DATA_PUT_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response saveContent(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String payload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.saveContent(containerId, taskId, payload, type);
logger.debug("Returning CREATED response with content '{}'", response);
return createResponse(response, v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_OUTPUT_DATA_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getTaskOutputContentByTaskId(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getTaskOutputContentByTaskId(containerId, taskId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_INPUT_DATA_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getTaskInputContentByTaskId(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getTaskInputContentByTaskId(containerId, taskId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@DELETE
@Path(TASK_INSTANCE_CONTENT_DATA_DELETE_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response deleteContent(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @PathParam("contentId") Long contentId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.deleteContent(containerId, taskId, contentId);
// produce 204 NO_CONTENT response code
return noContent(v, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@POST
@Path(TASK_INSTANCE_COMMENT_ADD_POST_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response addComment(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, String payload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.addComment(containerId, taskId, payload, type);
logger.debug("Returning CREATED response with content '{}'", response);
return createResponse(response, v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@DELETE
@Path(TASK_INSTANCE_COMMENT_DELETE_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response deleteComment(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @PathParam("commentId") Long commentId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.deleteComment(containerId, taskId, commentId);
// produce 204 NO_CONTENT response code
return noContent(v, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_COMMENTS_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getCommentsByTaskId(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getCommentsByTaskId(containerId, taskId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_COMMENT_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getCommentById(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @PathParam("commentId") Long commentId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getCommentById(containerId, taskId, commentId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@POST
@Path(TASK_INSTANCE_ATTACHMENT_ADD_POST_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response addAttachment(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @QueryParam("user") String userId, @QueryParam("name") String name, String attachmentPayload) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.addAttachment(containerId, taskId, userId, name, attachmentPayload, type);
logger.debug("Returning CREATED response with content '{}'", response);
return createResponse(response, v, Response.Status.CREATED, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@DELETE
@Path(TASK_INSTANCE_ATTACHMENT_DELETE_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response deleteAttachment(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @PathParam("attachmentId") Long attachmentId) {
Variant v = getVariant(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
userTaskServiceBase.deleteAttachment(containerId, taskId, attachmentId);
// produce 204 NO_CONTENT response code
return noContent(v, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_ATTACHMENT_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getAttachmentById(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @PathParam("attachmentId") Long attachmentId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getAttachmentById(containerId, taskId, attachmentId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_ATTACHMENT_CONTENT_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getAttachmentContentById(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId, @PathParam("attachmentId") Long attachmentId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getAttachmentContentById(containerId, taskId, attachmentId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_ATTACHMENTS_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getAttachmentsByTaskId(@Context HttpHeaders headers, @PathParam("id") String containerId,
@PathParam("tInstanceId") Long taskId) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getAttachmentsByTaskId(containerId, taskId, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e){
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getTask(@Context HttpHeaders headers, @PathParam("id") String containerId, @PathParam("tInstanceId") Long taskId,
@QueryParam("withInputData") boolean withInput, @QueryParam("withOutputData") boolean withOutput, @QueryParam("withAssignments") boolean withAssignments) {
Variant v = getVariant(headers);
String type = getContentType(headers);
Header conversationIdHeader = buildConversationIdHeader(containerId, context, headers);
try {
String response = userTaskServiceBase.getTask(containerId, taskId, withInput, withOutput, withAssignments, type);
logger.debug("Returning OK response with content '{}'", response);
return createResponse(response, v, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e) {
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
@GET
@Path(TASK_INSTANCE_EVENTS_GET_URI)
@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public Response getTaskEvents(@Context HttpHeaders headers, @PathParam("id") String containerId, @PathParam("tInstanceId") Long taskId,
@QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize,
@QueryParam("sort") String sort, @QueryParam("sortOrder") @DefaultValue("true") boolean sortOrder) {
Variant v = getVariant(headers);
// no container id available so only used to transfer conversation id if given by client
Header conversationIdHeader = buildConversationIdHeader("", context, headers);
try {
TaskEventInstanceList result = runtimeDataServiceBase.getTaskEvents(taskId, page, pageSize, sort, sortOrder);
return createCorrectVariant(result, headers, Response.Status.OK, conversationIdHeader);
} catch (TaskNotFoundException e) {
return notFound(MessageFormat.format(TASK_INSTANCE_NOT_FOUND, taskId), v, conversationIdHeader);
} catch (Exception e) {
logger.error("Unexpected error during processing {}", e.getMessage(), e);
return internalServerError(MessageFormat.format(UNEXPECTED_ERROR, e.getMessage()), v, conversationIdHeader);
}
}
}