public HistoricCaseInstanceResponse createHistoricCaseInstanceResponse(HistoricCaseInstance caseInstance, RestUrlBuilder urlBuilder) { HistoricCaseInstanceResponse result = new HistoricCaseInstanceResponse(); result.setBusinessKey(caseInstance.getBusinessKey()); result.setName(caseInstance.getName()); result.setEndTime(caseInstance.getEndTime()); result.setId(caseInstance.getId()); result.setCaseDefinitionId(caseInstance.getCaseDefinitionId()); result.setCaseDefinitionUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_CASE_DEFINITION, caseInstance.getCaseDefinitionId())); result.setStartTime(caseInstance.getStartTime()); result.setStartUserId(caseInstance.getStartUserId()); result.setUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_HISTORIC_CASE_INSTANCE, caseInstance.getId())); result.setTenantId(caseInstance.getTenantId()); return result; }
public HistoricMilestoneInstanceResponse createHistoricMilestoneInstanceResponse(HistoricMilestoneInstance historicMilestoneInstance, RestUrlBuilder urlBuilder) { HistoricMilestoneInstanceResponse result = new HistoricMilestoneInstanceResponse(); result.setId(historicMilestoneInstance.getId()); result.setUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_HISTORIC_MILESTONE_INSTANCE, historicMilestoneInstance.getId())); result.setName(historicMilestoneInstance.getName()); result.setElementId(historicMilestoneInstance.getElementId()); result.setTimestamp(historicMilestoneInstance.getTimeStamp()); result.setCaseInstanceId(historicMilestoneInstance.getCaseInstanceId()); result.setHistoricCaseInstanceUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_HISTORIC_CASE_INSTANCE, historicMilestoneInstance.getCaseInstanceId())); result.setCaseDefinitionId(historicMilestoneInstance.getCaseDefinitionId()); result.setCaseDefinitionUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_CASE_DEFINITION, historicMilestoneInstance.getCaseDefinitionId())); return result; }
protected HistoricCaseInstance getHistoricCaseInstanceFromRequest(String caseInstanceId) { HistoricCaseInstance caseInstance = historyService.createHistoricCaseInstanceQuery().caseInstanceId(caseInstanceId).singleResult(); if (caseInstance == null) { throw new FlowableObjectNotFoundException("Could not find a case instance with id '" + caseInstanceId + "'.", HistoricCaseInstance.class); } if (restApiInterceptor != null) { restApiInterceptor.accessHistoryCaseInfoById(caseInstance); } return caseInstance; }
public HistoricPlanItemInstanceResponse createHistoricPlanItemInstanceResponse(HistoricPlanItemInstance historicPlanItemInstance, RestUrlBuilder urlBuilder) { HistoricPlanItemInstanceResponse result = new HistoricPlanItemInstanceResponse(); result.setId(historicPlanItemInstance.getId()); result.setName(historicPlanItemInstance.getName()); result.setState(historicPlanItemInstance.getState()); result.setCaseDefinitionId(historicPlanItemInstance.getCaseDefinitionId()); result.setCaseInstanceId(historicPlanItemInstance.getCaseInstanceId()); result.setStageInstanceId(historicPlanItemInstance.getStageInstanceId()); result.setStage(historicPlanItemInstance.isStage()); result.setElementId(historicPlanItemInstance.getElementId()); result.setPlanItemDefinitionId(historicPlanItemInstance.getPlanItemDefinitionId()); result.setPlanItemDefinitionType(historicPlanItemInstance.getPlanItemDefinitionType()); result.setCreateTime(historicPlanItemInstance.getCreateTime()); result.setLastAvailableTime(historicPlanItemInstance.getLastAvailableTime()); result.setLastEnabledTime(historicPlanItemInstance.getLastEnabledTime()); result.setLastDisabledTime(historicPlanItemInstance.getLastDisabledTime()); result.setLastStartedTime(historicPlanItemInstance.getLastStartedTime()); result.setLastSuspendedTime(historicPlanItemInstance.getLastSuspendedTime()); result.setCompletedTime(historicPlanItemInstance.getCompletedTime()); result.setOccurredTime(historicPlanItemInstance.getOccurredTime()); result.setTerminatedTime(historicPlanItemInstance.getTerminatedTime()); result.setExitTime(historicPlanItemInstance.getExitTime()); result.setEndedTime(historicPlanItemInstance.getEndedTime()); result.setStartUserId(historicPlanItemInstance.getStartUserId()); result.setReferenceId(historicPlanItemInstance.getReferenceId()); result.setReferenceType(historicPlanItemInstance.getReferenceType()); result.setTenantId(historicPlanItemInstance.getTenantId()); result.setUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_HISTORIC_PLANITEM_INSTANCE, historicPlanItemInstance.getId())); result.setHistoricCaseInstanceUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_HISTORIC_CASE_INSTANCE, historicPlanItemInstance.getCaseInstanceId())); result.setCaseDefinitionUrl(urlBuilder.buildUrl(CmmnRestUrls.URL_CASE_DEFINITION, historicPlanItemInstance.getCaseDefinitionId()));
HistoricCaseInstance caseInstance = cmmnHistoryService.createHistoricCaseInstanceQuery().caseInstanceId(caseInstanceId).singleResult(); if (caseInstance == null) { throw new BadRequestException("No case instance found with id " + caseInstanceId); CmmnModel pojoModel = cmmnRepositoryService.getCmmnModel(caseInstance.getCaseDefinitionId()); throw new InternalServerErrorException("Case definition could not be found with id " + caseInstance.getCaseDefinitionId()); List<HistoricPlanItemInstance> planItemInstances = cmmnHistoryService.createHistoricPlanItemInstanceQuery().planItemInstanceCaseInstanceId(caseInstanceId).list(); if (CollectionUtils.isNotEmpty(planItemInstances)) { for (HistoricPlanItemInstance planItemInstance : planItemInstances) { if (planItemInstance.getCompletedTime() != null || planItemInstance.getTerminatedTime() != null || planItemInstance.getOccurredTime() != null) { completedPlanItemInstances.add(planItemInstance.getPlanItemDefinitionId()); } else if (PlanItemInstanceState.ACTIVE.equals(planItemInstance.getState())) { activePlanItemInstances.add(planItemInstance.getPlanItemDefinitionId()); } else if (PlanItemInstanceState.AVAILABLE.equals(planItemInstance.getState())) { availablePlanItemInstances.add(planItemInstance.getPlanItemDefinitionId());
protected void assertCaseInstanceNotEnded(CaseInstance caseInstance) { assertTrue("Found no plan items for case instance", cmmnRuntimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId()).count() > 0); assertTrue("No runtime case instance found", cmmnRuntimeService.createCaseInstanceQuery().caseInstanceId(caseInstance.getId()).count() > 0); assertNull("Historical case instance is already marked as ended", cmmnHistoryService.createHistoricCaseInstanceQuery().caseInstanceId(caseInstance.getId()).singleResult().getEndTime()); }
public static void deleteHistoricCaseInstance(CmmnEngineConfiguration cmmnEngineConfiguration, String caseInstanceId) { HistoricCaseInstanceEntityManager historicCaseInstanceEntityManager = cmmnEngineConfiguration.getHistoricCaseInstanceEntityManager(); HistoricCaseInstanceEntity historicCaseInstance = historicCaseInstanceEntityManager.findById(caseInstanceId); HistoricMilestoneInstanceEntityManager historicMilestoneInstanceEntityManager = cmmnEngineConfiguration.getHistoricMilestoneInstanceEntityManager(); historicMilestoneInstanceEntityManager.findHistoricMilestoneInstancesByQueryCriteria(new HistoricMilestoneInstanceQueryImpl().milestoneInstanceCaseInstanceId(historicCaseInstance.getId())) .forEach(m -> historicMilestoneInstanceEntityManager.delete(m.getId())); HistoricPlanItemInstanceEntityManager historicPlanItemInstanceEntityManager = cmmnEngineConfiguration.getHistoricPlanItemInstanceEntityManager(); historicPlanItemInstanceEntityManager.findByCriteria(new HistoricPlanItemInstanceQueryImpl().planItemInstanceCaseInstanceId(historicCaseInstance.getId())) .forEach(p -> historicPlanItemInstanceEntityManager.delete(p.getId())); CommandContextUtil.getHistoricIdentityLinkService().deleteHistoricIdentityLinksByScopeIdAndScopeType(historicCaseInstance.getId(), ScopeTypes.CMMN); if (cmmnEngineConfiguration.isEnableEntityLinks()) { CommandContextUtil.getHistoricEntityLinkService().deleteHistoricEntityLinksByScopeIdAndScopeType(historicCaseInstance.getId(), ScopeTypes.CMMN); } historicCaseInstanceEntityManager.delete(historicCaseInstance); // Also delete any sub cases that may be active historicCaseInstanceEntityManager.createHistoricCaseInstanceQuery().caseInstanceParentId(caseInstanceId).list() .forEach(c -> deleteHistoricCaseInstance(cmmnEngineConfiguration, c.getId())); }
public RestVariable getVariableFromRequest(boolean includeBinary, String caseInstanceId, String variableName, HttpServletRequest request) { HistoricCaseInstance caseObject = getHistoricCaseInstanceFromRequest(caseInstanceId); HistoricVariableInstance variable = historyService.createHistoricVariableInstanceQuery() .caseInstanceId(caseObject.getId()) .variableName(variableName) .singleResult(); if (variable == null || variable.getValue() == null) { throw new FlowableObjectNotFoundException("Historic case instance '" + caseInstanceId + "' variable value for " + variableName + " couldn't be found.", VariableInstanceEntity.class); } else { return restResponseFactory.createRestVariable(variableName, variable.getValue(), null, caseInstanceId, CmmnRestResponseFactory.VARIABLE_HISTORY_CASE, includeBinary); } } }
query.excludeTaskVariables(); query.taskId(queryRequest.getTaskId()); query.planItemInstanceId(queryRequest.getPlanItemInstanceId()); query.caseInstanceId(queryRequest.getCaseInstanceId()); query.variableName(queryRequest.getVariableName()); query.variableNameLike(queryRequest.getVariableNameLike());
protected void assertCaseInstanceEnded(CaseInstance caseInstance) { long count = cmmnRuntimeService.createPlanItemInstanceQuery().caseInstanceId(caseInstance.getId()).count(); assertEquals(createCaseInstanceEndedErrorMessage(caseInstance, count), 0, count); assertEquals("Runtime case instance found", 0, cmmnRuntimeService.createCaseInstanceQuery().caseInstanceId(caseInstance.getId()).count()); assertEquals(1, cmmnHistoryService.createHistoricCaseInstanceQuery().caseInstanceId(caseInstance.getId()).finished().count()); }
.findHistoricMilestoneInstancesByQueryCriteria(new HistoricMilestoneInstanceQueryImpl().milestoneInstanceCaseDefinitionId(caseDefinitionId)); for (HistoricMilestoneInstance historicMilestoneInstance : historicMilestoneInstances) { historicMilestoneInstanceEntityManager.delete(historicMilestoneInstance.getId()); .forEach(p -> historicPlanItemInstanceEntityManager.delete(p.getId())); .findHistoricalVariableInstancesByScopeIdAndScopeType(historicCaseInstanceEntity.getId(), ScopeTypes.CMMN); for (HistoricVariableInstanceEntity historicVariableInstanceEntity : historicVariableInstanceEntities) { historicVariableInstanceEntityManager.delete(historicVariableInstanceEntity); historicIdentityLinkEntityManager.deleteHistoricIdentityLinksByScopeIdAndScopeType(historicCaseInstanceEntity.getId(), ScopeTypes.CMMN); historicCaseInstanceEntityManager.delete(historicCaseInstanceEntity.getId());
@ApiOperation(value = " Delete a historic case instance", tags = { "History Case" }, nickname = "deleteHistoricCaseInstance") @ApiResponses(value = { @ApiResponse(code = 204, message = "Indicates that the historic process instance was deleted."), @ApiResponse(code = 404, message = "Indicates that the historic process instance could not be found.") }) @DeleteMapping(value = "/cmmn-history/historic-case-instances/{caseInstanceId}") public void deleteCaseInstance(@ApiParam(name = "caseInstanceId") @PathVariable String caseInstanceId, HttpServletResponse response) { HistoricCaseInstance caseInstance = getHistoricCaseInstanceFromRequest(caseInstanceId); if (restApiInterceptor != null) { restApiInterceptor.deleteHistoricCase(caseInstance); } cmmnhistoryService.deleteHistoricCaseInstance(caseInstance.getId()); response.setStatus(HttpStatus.NO_CONTENT.value()); }
@ApiOperation(value = "Get a historic plan item instance", tags = {"History PlanItem"}, nickname = "getHistoricPlanItemInstance") @ApiResponses(value = { @ApiResponse(code = 200, message = "Indicates that the historic plan item instances could be found."), @ApiResponse(code = 404, message = "Indicates that the historic plan item instances could not be found.")}) @GetMapping(value = "/cmmn-history/historic-planitem-instances/{planItemInstanceId}", produces = "application/json") public HistoricPlanItemInstanceResponse getPlanItemInstance(@ApiParam(name = "planItemInstanceId") @PathVariable String planItemInstanceId, HttpServletRequest request) { HistoricPlanItemInstance planItemInstance = historyService.createHistoricPlanItemInstanceQuery().planItemInstanceId(planItemInstanceId).singleResult(); if (planItemInstance == null) { throw new FlowableObjectNotFoundException("Could not find a plan item instance with id '" + planItemInstanceId + "'.", HistoricPlanItemInstance.class); } if (restApiInterceptor != null) { restApiInterceptor.accessHistoryPlanItemInfoById(planItemInstance); } return restResponseFactory.createHistoricPlanItemInstanceResponse(planItemInstance); }
public RestVariable getVariableFromRequest(boolean includeBinary, String varInstanceId, HttpServletRequest request) { HistoricVariableInstance varObject = historyService.createHistoricVariableInstanceQuery().id(varInstanceId).singleResult(); if (varObject == null) { throw new FlowableObjectNotFoundException("Historic variable instance '" + varInstanceId + "' couldn't be found.", VariableInstanceEntity.class); } else { if (restApiInterceptor != null) { restApiInterceptor.accessHistoryVariableInfoById(varObject); } return restResponseFactory.createRestVariable(varObject.getVariableName(), varObject.getValue(), null, varInstanceId, CmmnRestResponseFactory.VARIABLE_HISTORY_VARINSTANCE, includeBinary); } }
@ApiOperation(value = "Get a historic milestone instance by id", tags = {"History Milestone"}, nickname = "getHistoricMilestoneInstanceById") @ApiResponses(value = { @ApiResponse(code = 200, message = "Indicates that the historic milestone instances could be found."), @ApiResponse(code = 404, message = "Indicates that the historic milestone instances could not be found.")}) @GetMapping(value = "/cmmn-history/historic-milestone-instances/{milestoneInstanceId}", produces = "application/json") public HistoricMilestoneInstanceResponse getMilestoneInstance(@ApiParam(name = "milestoneInstanceId") @PathVariable String milestoneInstanceId, HttpServletRequest request) { HistoricMilestoneInstance milestoneInstance = historyService.createHistoricMilestoneInstanceQuery().milestoneInstanceId(milestoneInstanceId).singleResult(); if (milestoneInstance == null) { throw new FlowableObjectNotFoundException("Could not find a milestone instance with id '" + milestoneInstanceId + "'.", HistoricMilestoneInstance.class); } if (restApiInterceptor != null) { restApiInterceptor.accessHistoryMilestoneInfoById(milestoneInstance); } return restResponseFactory.createHistoricMilestoneInstanceResponse(milestoneInstance); } }
protected void assertCaseInstanceEnded(CaseInstance caseInstance, int nrOfExpectedMilestones) { assertCaseInstanceEnded(caseInstance); assertEquals(0, cmmnRuntimeService.createMilestoneInstanceQuery().milestoneInstanceCaseInstanceId(caseInstance.getId()).count()); assertEquals(nrOfExpectedMilestones, cmmnHistoryService.createHistoricMilestoneInstanceQuery().milestoneInstanceCaseInstanceId(caseInstance.getId()).count()); }
@Override public Object execute(CommandContext commandContext) { if (caseInstanceId == null) { throw new FlowableIllegalArgumentException("caseInstanceId is null"); } // Check if case instance is still running HistoricCaseInstance instance = CommandContextUtil.getHistoricCaseInstanceEntityManager(commandContext).findById(caseInstanceId); if (instance == null) { throw new FlowableObjectNotFoundException("No historic case instance found with id: " + caseInstanceId, HistoricCaseInstance.class); } if (instance.getEndTime() == null) { throw new FlowableException("Case instance is still running, cannot delete historic case instance: " + caseInstanceId); } CommandContextUtil.getCmmnHistoryManager(commandContext).recordHistoricCaseInstanceDeleted(caseInstanceId); return null; }
Optional.ofNullable(queryRequest.getWithoutTenantId()).ifPresent(withoutTenant -> { if (withoutTenant) { query.planItemInstanceWithoutTenantId();
protected void addVariables(HistoricVariableInstanceQuery variableInstanceQuery, List<QueryVariable> variables) { for (QueryVariable variable : variables) { if (variable.getVariableOperation() == null) { throw new FlowableIllegalArgumentException("Variable operation is missing for variable: " + variable.getName()); } if (variable.getValue() == null) { throw new FlowableIllegalArgumentException("Variable value is missing for variable: " + variable.getName()); } boolean nameLess = variable.getName() == null; Object actualValue = restResponseFactory.getVariableValue(variable); // A value-only query is only possible using equals-operator if (nameLess) { throw new FlowableIllegalArgumentException("Value-only query (without a variable-name) is not supported"); } switch (variable.getVariableOperation()) { case EQUALS: variableInstanceQuery.variableValueEquals(variable.getName(), actualValue); break; default: throw new FlowableIllegalArgumentException("Unsupported variable query operation: " + variable.getVariableOperation()); } } } }
@ApiOperation(value = "List identity links of a historic case instance", nickname="listHistoricCaseInstanceIdentityLinks", tags = { "History Case" }, notes = "") @ApiResponses(value = { @ApiResponse(code = 200, message = "Indicates request was successful and the identity links are returned", response = HistoricIdentityLinkResponse.class, responseContainer = "List"), @ApiResponse(code = 404, message = "Indicates the process instance could not be found..") }) @GetMapping(value = "/cmmn-history/historic-case-instances/{caseInstanceId}/identitylinks", produces = "application/json") public List<HistoricIdentityLinkResponse> getCaseIdentityLinks(@ApiParam(name = "caseInstanceId") @PathVariable String caseInstanceId, HttpServletRequest request) { HistoricCaseInstance caseInstance = getHistoricCaseInstanceFromRequest(caseInstanceId); List<HistoricIdentityLink> identityLinks = historyService.getHistoricIdentityLinksForCaseInstance(caseInstance.getId()); if (identityLinks != null) { return restResponseFactory.createHistoricIdentityLinkResponseList(identityLinks); } return new ArrayList<>(); } }