/* * Copyright 2016 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.casemgmt; import java.text.MessageFormat; import java.util.ArrayList; 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.HttpHeaders; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.ws.rs.core.Variant; import org.jbpm.casemgmt.api.CaseCommentNotFoundException; import org.jbpm.casemgmt.api.model.CaseStatus; import org.kie.api.runtime.process.ProcessInstance; import org.kie.server.api.model.cases.CaseAdHocFragmentList; import org.kie.server.api.model.cases.CaseCommentList; import org.kie.server.api.model.cases.CaseDefinition; import org.kie.server.api.model.cases.CaseDefinitionList; import org.kie.server.api.model.cases.CaseInstanceList; import org.kie.server.api.model.cases.CaseMilestoneList; import org.kie.server.api.model.cases.CaseRoleAssignmentList; import org.kie.server.api.model.cases.CaseStageList; import org.kie.server.api.model.instance.NodeInstanceList; import org.kie.server.api.model.instance.ProcessInstanceList; import org.kie.server.remote.rest.common.Header; import org.kie.server.services.api.KieServerRegistry; import org.kie.server.services.casemgmt.CaseManagementRuntimeDataServiceBase; import org.kie.server.services.casemgmt.CaseManagementServiceBase; 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.casemgmt.Messages.*; @Path("server/" + CASE_URI) public class CaseResource extends AbstractCaseResource { private static final Logger logger = LoggerFactory.getLogger(CaseResource.class); private CaseManagementServiceBase caseManagementServiceBase; public CaseResource() { } public CaseResource(final CaseManagementServiceBase caseManagementServiceBase, final CaseManagementRuntimeDataServiceBase caseManagementRuntimeDataServiceBase, final KieServerRegistry context) { super(caseManagementRuntimeDataServiceBase, context); this.caseManagementServiceBase = caseManagementServiceBase; } @POST @Path(START_CASE_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response startCase(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_DEF_ID) String caseDefId, String payload) { return invokeCaseOperation(headers, containerId, null, (Variant v, String type, Header... customHeaders) -> { String response = caseManagementServiceBase.startCase(containerId, caseDefId, payload, type); logger.debug("Returning CREATED response for start case with content '{}'", response); return createResponse(response, v, Response.Status.CREATED, customHeaders); }); } @GET @Path(CASE_INSTANCE_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstance(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("withData") @DefaultValue("false") boolean withData, @QueryParam("withRoles") @DefaultValue("false") boolean withRoles, @QueryParam("withMilestones") @DefaultValue("false") boolean withMilestones, @QueryParam("withStages") @DefaultValue("false") boolean withStages) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { String response = caseManagementServiceBase.getCaseInstance(containerId, caseId, withData, withRoles, withMilestones, withStages, type); logger.debug("Returning OK response for get case instance with content '{}'", response); return createResponse(response, v, Response.Status.OK, customHeaders); }); } @DELETE @Path(CASE_INSTANCE_DELETE_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response cancelCaseInstance(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("destroy") @DefaultValue("false") boolean destroy) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { caseManagementServiceBase.cancelCaseInstance(containerId, caseId, destroy); logger.debug("Returning NO CONTENT response after cancelling a case with id {}", caseId); return noContent(v, customHeaders); }); } @PUT @Path(REOPEN_CASE_PUT_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response reopenCase(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_DEF_ID) String caseDefId, @PathParam(CASE_ID) String caseId, String payload) { return invokeCaseOperation(headers, containerId, null, (Variant v, String type, Header... customHeaders) -> { caseManagementServiceBase.reopenCase(caseId, containerId, caseDefId, payload, type); logger.debug("Returning CREATED response for reopen case {}", caseId); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @GET @Path(CASE_FILE_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceData(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to load case file data of case {}", caseId); String response = this.caseManagementServiceBase.getCaseFileData(containerId, caseId, type); logger.debug("Returning OK response with content '{}'", response); return createResponse(response, v, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_FILE_BY_NAME_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceDataByName(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_FILE_ITEM) String caseDataName) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to load case file data of case {}", caseId); String response = this.caseManagementServiceBase.getCaseFileDataByName(containerId, caseId, caseDataName, type); logger.debug("Returning OK response with content '{}'", response); return createResponse(response, v, Response.Status.OK, customHeaders); }); } @POST @Path(CASE_FILE_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response putCaseInstanceData(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to put case file data of case {}", caseId); this.caseManagementServiceBase.putCaseFileData(containerId, caseId, payload, type); logger.debug("Returning OK response"); return createResponse("", v, Response.Status.OK, customHeaders); }); } @POST @Path(CASE_FILE_BY_NAME_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response putCaseInstanceDataByName(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_FILE_ITEM) String caseDataName, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to put case file data of case {}", caseId); this.caseManagementServiceBase.putCaseFileDataByName(containerId, caseId, caseDataName, payload, type); logger.debug("Returning OK response"); return createResponse("", v, Response.Status.OK, customHeaders); }); } @DELETE @Path(CASE_FILE_DELETE_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response deleteCaseInstanceData(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam(CASE_FILE_ITEM) List<String> variableNames) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { if (variableNames == null || variableNames.isEmpty()) { return notFound("Variable names to remove from case file not provided", v, customHeaders); } logger.debug("About to remove case file data of case {}", caseId); this.caseManagementServiceBase.removeCaseFileDataByName(containerId, caseId, variableNames); logger.debug("Returning NO_CONTENT response"); return noContent(v, customHeaders); }); } @POST @Path(CASE_DYNAMIC_TASK_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addDynamicTaskToCase(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to add dynamic task to case {}", caseId); this.caseManagementServiceBase.addDynamicTask(containerId, caseId, null, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @POST @Path(CASE_DYNAMIC_TASK_IN_STAGE_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addDynamicTaskToCase(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_STAGE_ID) String stageId, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to add dynamic task stage {} in case {}", stageId, caseId); this.caseManagementServiceBase.addDynamicTask(containerId, caseId, stageId, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @POST @Path(CASE_DYNAMIC_PROCESS_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addDynamicProcessToCase(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(PROCESS_ID) String processId, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to add dynamic subprocess {} in case {}", processId, caseId); this.caseManagementServiceBase.addDynamicSubprocess(containerId, caseId, null, processId, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @POST @Path(CASE_DYNAMIC_PROCESS_IN_STAGE_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addDynamicProcessToCase(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_STAGE_ID) String stageId, @PathParam(PROCESS_ID) String processId, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to add dynamic subprocess stage {} in case {}", stageId, caseId); this.caseManagementServiceBase.addDynamicSubprocess(containerId, caseId, stageId, processId, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @PUT @Path(CASE_DYNAMIC_TASK_IN_STAGE_PUT_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response triggerAdHocNodeInStage(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_STAGE_ID) String stageId, @PathParam(CASE_NODE_NAME) String adHocName, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to trigger ad hoc task {} in stage {} and in case {}", adHocName, stageId, caseId); this.caseManagementServiceBase.triggerAdHocNode(containerId, caseId, stageId, adHocName, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @PUT @Path(CASE_DYNAMIC_TASK_PUT_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response triggerAdHocNode(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_NODE_NAME) String adHocName, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to trigger ad hoc task {} in case {}", adHocName, caseId); this.caseManagementServiceBase.triggerAdHocNode(containerId, caseId, null, adHocName, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @GET @Path(CASE_MILESTONES_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceMilestones(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("achievedOnly") @DefaultValue("true") boolean achievedOnly, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for milestones in case {} achieved only = {}", caseId, achievedOnly); CaseMilestoneList responseObject = this.caseManagementRuntimeDataServiceBase.getMilestones(containerId, caseId, achievedOnly, page, pageSize); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_STAGES_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceStages(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("activeOnly") @DefaultValue("true") boolean activeOnly, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for stages in case {} active only = {}", caseId, activeOnly); CaseStageList responseObject = this.caseManagementRuntimeDataServiceBase.getStages(containerId, caseId, activeOnly, page, pageSize); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_AD_HOC_FRAGMENTS_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceAdHocFragments(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for adhoc fragments in case {}", caseId); CaseAdHocFragmentList responseObject = this.caseManagementRuntimeDataServiceBase.getAdHocFragments(containerId, caseId); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_PROCESS_INSTANCES_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceProcessInstance(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("status") List<Integer> status, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize, @QueryParam("sort") String sort, @QueryParam("sortOrder") @DefaultValue("true") boolean sortOrder) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { List<Integer> actualStatus = status; if (status == null || status.isEmpty()) { actualStatus = new ArrayList<Integer>(); actualStatus.add(ProcessInstance.STATE_ACTIVE); } logger.debug("About to look for process instances in case {} with status {}", caseId, actualStatus); ProcessInstanceList responseObject = this.caseManagementRuntimeDataServiceBase.getProcessInstancesForCase(containerId, caseId, actualStatus, page, pageSize, sort, sortOrder); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_NODE_INSTANCES_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceActiveNodes(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("completed") @DefaultValue("false") Boolean completed, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for active nodes in case {}", caseId); NodeInstanceList responseObject = null; if (completed) { responseObject = this.caseManagementRuntimeDataServiceBase.getCompletedNodes(containerId, caseId, page, pageSize); } else { responseObject = this.caseManagementRuntimeDataServiceBase.getActiveNodes(containerId, caseId, page, pageSize); } logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_ROLES_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceRoleAssignments(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for role assignments in case {}", caseId); CaseRoleAssignmentList responseObject = this.caseManagementServiceBase.getRoleAssignment(containerId, caseId); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @PUT @Path(CASE_ROLES_PUT_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addRoleAssignment(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_ROLE_NAME) String roleName, @QueryParam("user") String user, @QueryParam("group") String group) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to assign user {}, group {} for role {} in case {}", user, group, roleName, caseId); this.caseManagementServiceBase.assignToRole(containerId, caseId, roleName, user, group); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @DELETE @Path(CASE_ROLES_DELETE_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response removeRoleAssignment(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_ROLE_NAME) String roleName, @QueryParam("user") String user, @QueryParam("group") String group) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to remove user {}, group {} from role {} in case {}", user, group, roleName, caseId); this.caseManagementServiceBase.removeFromRole(containerId, caseId, roleName, user, group); logger.debug("Returning NO_CONTENT response"); return noContent(v, customHeaders); }); } @GET @Path(CASE_COMMENTS_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstanceComments(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for comments in case {}", caseId); CaseCommentList responseObject = this.caseManagementServiceBase.getComments(containerId, caseId, page, pageSize); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @POST @Path(CASE_COMMENTS_POST_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response addComment(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @QueryParam("author") String author, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to add comment to case {}", caseId); this.caseManagementServiceBase.addCommentToCase(containerId, caseId, author, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); }); } @PUT @Path(CASE_COMMENTS_PUT_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response updateComment(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_COMMENT_ID) String commentId, @QueryParam("author") String author, String payload) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to update comment {} in case {}", commentId, caseId); try { this.caseManagementServiceBase.updateCommentInCase(containerId, caseId, commentId, author, payload, type); logger.debug("Returning CREATED response"); return createResponse("", v, Response.Status.CREATED, customHeaders); } catch(CaseCommentNotFoundException e) { return notFound( MessageFormat.format(CASE_COMMENT_NOT_FOUND, commentId, caseId), v, customHeaders); } }); } @DELETE @Path(CASE_COMMENTS_DELETE_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response removeComment(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_ID) String caseId, @PathParam(CASE_COMMENT_ID) String commentId) { return invokeCaseOperation(headers, containerId, caseId, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to remove comment {} from case {}", commentId, caseId); try { this.caseManagementServiceBase.removeCommentFromCase(containerId, caseId, commentId); logger.debug("Returning NO_CONTENT response"); return noContent(v, customHeaders); } catch(CaseCommentNotFoundException e) { return notFound( MessageFormat.format(CASE_COMMENT_NOT_FOUND, commentId, caseId), v, customHeaders); } }); } /* * basic queries through container */ @GET @Path(CASE_INSTANCES_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstancesByContainer(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @QueryParam("status") List<String> status, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize, @QueryParam("sort") String sort, @QueryParam("sortOrder") @DefaultValue("true") boolean sortOrder) { return invokeCaseOperation(headers, containerId, null, (Variant v, String type, Header... customHeaders) -> { List<String> actualStatus = status; if (status == null || status.isEmpty()) { actualStatus = new ArrayList<String>(); actualStatus.add(CaseStatus.OPEN.getName()); } logger.debug("About to look for case instances in container {} with status {}", containerId, actualStatus); CaseInstanceList responseObject = this.caseManagementRuntimeDataServiceBase.getCaseInstancesByContainer(containerId, actualStatus, page, pageSize, sort, sortOrder); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_INSTANCES_BY_DEF_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseInstancesByDefinition(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_DEF_ID) String caseDefId, @QueryParam("status") List<String> status, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize, @QueryParam("sort") String sort, @QueryParam("sortOrder") @DefaultValue("true") boolean sortOrder) { return invokeCaseOperation(headers, containerId, null, (Variant v, String type, Header... customHeaders) -> { List<String> actualStatus = status; if (status == null || status.isEmpty()) { actualStatus = new ArrayList<String>(); actualStatus.add(CaseStatus.OPEN.getName()); } logger.debug("About to look for case instances with case definition id {} with status {}", caseDefId, actualStatus); CaseInstanceList responseObject = this.caseManagementRuntimeDataServiceBase.getCaseInstancesByDefinition(containerId, caseDefId, actualStatus, page, pageSize, sort, sortOrder); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_ALL_DEFINITIONS_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseDefinitionsByContainer(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @QueryParam("page") @DefaultValue("0") Integer page, @QueryParam("pageSize") @DefaultValue("10") Integer pageSize, @QueryParam("sort") String sort, @QueryParam("sortOrder") @DefaultValue("true") boolean sortOrder) { return invokeCaseOperation(headers, containerId, null, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for case definitions in container {}", containerId); CaseDefinitionList responseObject = this.caseManagementRuntimeDataServiceBase.getCaseDefinitionsByContainer(containerId, page, pageSize, sort, sortOrder); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); }); } @GET @Path(CASE_DEFINITIONS_BY_ID_GET_URI) @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) public Response getCaseDefinitionsByDefinition(@javax.ws.rs.core.Context HttpHeaders headers, @PathParam(CONTAINER_ID) String containerId, @PathParam(CASE_DEF_ID) String caseDefId) { return invokeCaseOperation(headers, containerId, null, (Variant v, String type, Header... customHeaders) -> { logger.debug("About to look for case definition with id {} in container {}", caseDefId, containerId); try { CaseDefinition responseObject = this.caseManagementRuntimeDataServiceBase.getCaseDefinition(containerId, caseDefId); logger.debug("Returning OK response with content '{}'", responseObject); return createCorrectVariant(responseObject, headers, Response.Status.OK, customHeaders); } catch (IllegalStateException e) { return notFound( MessageFormat.format(CASE_DEFINITION_NOT_FOUND, caseDefId, containerId), v, customHeaders); } }); } }