Skip to content

Commit

Permalink
feat(decision): provide delete reason when deleting decision instances
Browse files Browse the repository at this point in the history
related to CAM-8503
  • Loading branch information
romansmirnov committed Dec 7, 2017
1 parent 962de3f commit 41502b2
Show file tree
Hide file tree
Showing 9 changed files with 106 additions and 64 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public class DeleteHistoricDecisionInstancesDto {

protected List<String> historicDecisionInstanceIds;
protected HistoricDecisionInstanceQueryDto historicDecisionInstanceQuery;
protected String deleteReason;

public List<String> getHistoricDecisionInstanceIds() {
return historicDecisionInstanceIds;
Expand All @@ -37,4 +38,12 @@ public void setHistoricDecisionInstanceQuery(HistoricDecisionInstanceQueryDto hi
this.historicDecisionInstanceQuery = historicDecisionInstanceQuery;
}

public String getDeleteReason() {
return deleteReason;
}

public void setDeleteReason(String deleteReason) {
this.deleteReason = deleteReason;
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ public BatchDto deleteAsync(DeleteHistoricDecisionInstancesDto dto) {
}

try {
Batch batch = processEngine.getHistoryService().deleteHistoricDecisionInstancesAsync(dto.getHistoricDecisionInstanceIds(), decisionInstanceQuery);
List<String> historicDecisionInstanceIds = dto.getHistoricDecisionInstanceIds();
String deleteReason = dto.getDeleteReason();
Batch batch = processEngine.getHistoryService().deleteHistoricDecisionInstancesAsync(historicDecisionInstanceIds, decisionInstanceQuery, deleteReason);
return BatchDto.fromBatch(batch);
}
catch (BadUserRequestException e) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,11 +296,13 @@ public void testDeleteAsync() {

when(historyServiceMock.deleteHistoricDecisionInstancesAsync(
anyListOf(String.class),
any(HistoricDecisionInstanceQuery.class)
any(HistoricDecisionInstanceQuery.class),
anyString()
)).thenReturn(batchEntity);

Map<String, Object> messageBodyJson = new HashMap<String, Object>();
messageBodyJson.put("historicDecisionInstanceIds", ids);
messageBodyJson.put("deleteReason", "a-delete-reason");

Response response = given()
.contentType(ContentType.JSON).body(messageBodyJson)
Expand All @@ -310,7 +312,7 @@ public void testDeleteAsync() {

verifyBatchJson(response.asString());

verify(historyServiceMock, times(1)).deleteHistoricDecisionInstancesAsync(eq(ids), eq((HistoricDecisionInstanceQuery) null));
verify(historyServiceMock, times(1)).deleteHistoricDecisionInstancesAsync(eq(ids), eq((HistoricDecisionInstanceQuery) null), eq("a-delete-reason"));
}

@Test
Expand All @@ -319,13 +321,15 @@ public void testDeleteAsyncWithQuery() {

when(historyServiceMock.deleteHistoricDecisionInstancesAsync(
anyListOf(String.class),
any(HistoricDecisionInstanceQuery.class)
any(HistoricDecisionInstanceQuery.class),
anyString()
)).thenReturn(batchEntity);

Map<String, Object> messageBodyJson = new HashMap<String, Object>();
HistoricDecisionInstanceQueryDto query = new HistoricDecisionInstanceQueryDto();
query.setDecisionDefinitionKey("decision");
messageBodyJson.put("historicDecisionInstanceQuery", query);
messageBodyJson.put("deleteReason", "a-delete-reason");

Response response = given()
.contentType(ContentType.JSON).body(messageBodyJson)
Expand All @@ -335,7 +339,7 @@ public void testDeleteAsyncWithQuery() {

verifyBatchJson(response.asString());

verify(historyServiceMock, times(1)).deleteHistoricDecisionInstancesAsync(eq((List<String>) null), any(HistoricDecisionInstanceQuery.class));
verify(historyServiceMock, times(1)).deleteHistoricDecisionInstancesAsync(eq((List<String>) null), any(HistoricDecisionInstanceQuery.class), eq("a-delete-reason"));
}

@Test
Expand All @@ -344,7 +348,8 @@ public void testDeleteAsyncWithIdsAndQuery() {

when(historyServiceMock.deleteHistoricDecisionInstancesAsync(
anyListOf(String.class),
any(HistoricDecisionInstanceQuery.class)
any(HistoricDecisionInstanceQuery.class),
anyString()
)).thenReturn(batchEntity);

Map<String, Object> messageBodyJson = new HashMap<String, Object>();
Expand All @@ -354,6 +359,7 @@ public void testDeleteAsyncWithIdsAndQuery() {

List<String> ids = Arrays.asList(MockProvider.EXAMPLE_DECISION_INSTANCE_ID);
messageBodyJson.put("historicDecisionInstanceIds", ids);
messageBodyJson.put("deleteReason", "a-delete-reason");

Response response = given()
.contentType(ContentType.JSON).body(messageBodyJson)
Expand All @@ -363,13 +369,13 @@ public void testDeleteAsyncWithIdsAndQuery() {

verifyBatchJson(response.asString());

verify(historyServiceMock, times(1)).deleteHistoricDecisionInstancesAsync(eq(ids), any(HistoricDecisionInstanceQuery.class));
verify(historyServiceMock, times(1)).deleteHistoricDecisionInstancesAsync(eq(ids), any(HistoricDecisionInstanceQuery.class), eq("a-delete-reason"));
}

@Test
public void testDeleteAsyncWithBadRequestQuery() {
doThrow(new BadUserRequestException("process instance ids are empty"))
.when(historyServiceMock).deleteHistoricDecisionInstancesAsync(eq((List<String>) null), eq((HistoricDecisionInstanceQuery) null));
.when(historyServiceMock).deleteHistoricDecisionInstancesAsync(eq((List<String>) null), eq((HistoricDecisionInstanceQuery) null), anyString());

given()
.contentType(ContentType.JSON).body(EMPTY_JSON_OBJECT)
Expand Down
14 changes: 6 additions & 8 deletions engine/src/main/java/org/camunda/bpm/engine/HistoryService.java
Original file line number Diff line number Diff line change
Expand Up @@ -314,31 +314,29 @@ public interface HistoryService {
void deleteHistoricDecisionInstanceByInstanceId(String historicDecisionInstanceId);

/**
* Deletes historic decision instances asynchronously based on a list of decision instances. Query result and
* list of ids will be merged.
* Deletes historic decision instances asynchronously based on a list of decision instances.
*
* @throws BadUserRequestException
* when no decision instances are found with the given ids or ids are null.
* @throws AuthorizationException
* If the user has no {@link Permissions#DELETE_HISTORY} permission on {@link Resources#DECISION_DEFINITION}
* or no {@link Permissions#CREATE} permission on {@link Resources#BATCH}.
*/
Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds);
Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds, String deleteReason);

/**
* Deletes historic decision instances asynchronously based on query of decision instances. Query result and
* list of ids will be merged.
* Deletes historic decision instances asynchronously based on query of decision instances.
*
* @throws BadUserRequestException
* when no decision instances are found with the given ids or ids are null.
* @throws AuthorizationException
* If the user has no {@link Permissions#DELETE_HISTORY} permission on {@link Resources#DECISION_DEFINITION}
* or no {@link Permissions#CREATE} permission on {@link Resources#BATCH}.
*/
Batch deleteHistoricDecisionInstancesAsync(HistoricDecisionInstanceQuery query);
Batch deleteHistoricDecisionInstancesAsync(HistoricDecisionInstanceQuery query, String deleteReason);

/**
* Deletes historic decision instances asynchronously based on query and a list of decision instances. Query result and
* Deletes historic decision instances asynchronously based on query and a list of decision instances, whereby query result and
* list of ids will be merged.
*
* @throws BadUserRequestException
Expand All @@ -347,7 +345,7 @@ public interface HistoryService {
* If the user has no {@link Permissions#DELETE_HISTORY} permission on {@link Resources#DECISION_DEFINITION}
* or no {@link Permissions#CREATE} permission on {@link Resources#BATCH}.
*/
Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds, HistoricDecisionInstanceQuery query);
Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds, HistoricDecisionInstanceQuery query, String deleteReason);

/**
* creates a native query to search for {@link HistoricProcessInstance}s via SQL
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -195,16 +195,16 @@ public void deleteHistoricDecisionInstanceByInstanceId(String historicDecisionIn
commandExecutor.execute(new DeleteHistoricDecisionInstanceByInstanceIdCmd(historicDecisionInstanceId));
}

public Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds) {
return deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null);
public Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds, String deleteReason) {
return deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null, deleteReason);
}

public Batch deleteHistoricDecisionInstancesAsync(HistoricDecisionInstanceQuery query) {
return deleteHistoricDecisionInstancesAsync(null, query);
public Batch deleteHistoricDecisionInstancesAsync(HistoricDecisionInstanceQuery query, String deleteReason) {
return deleteHistoricDecisionInstancesAsync(null, query, deleteReason);
}

public Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds, HistoricDecisionInstanceQuery query) {
return commandExecutor.execute(new DeleteHistoricDecisionInstancesBatchCmd(decisionInstanceIds, query));
public Batch deleteHistoricDecisionInstancesAsync(List<String> decisionInstanceIds, HistoricDecisionInstanceQuery query, String deleteReason) {
return commandExecutor.execute(new DeleteHistoricDecisionInstancesBatchCmd(decisionInstanceIds, query, deleteReason));
}

public NativeHistoricProcessInstanceQuery createNativeHistoricProcessInstanceQuery() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,12 @@ public class DeleteHistoricDecisionInstancesBatchCmd extends AbstractIDBasedBatc

protected List<String> historicProcessInstanceIds;
protected HistoricDecisionInstanceQuery historicDecisionInstanceQuery;
protected String deleteReason;

public DeleteHistoricDecisionInstancesBatchCmd(List<String> historicDecisionInstanceIds, HistoricDecisionInstanceQuery historicDecisionInstanceQuery) {
public DeleteHistoricDecisionInstancesBatchCmd(List<String> historicDecisionInstanceIds, HistoricDecisionInstanceQuery historicDecisionInstanceQuery, String deleteReason) {
this.historicProcessInstanceIds = historicDecisionInstanceIds;
this.historicDecisionInstanceQuery = historicDecisionInstanceQuery;
this.deleteReason = deleteReason;
}

protected List<String> collectHistoricDecisionInstanceIds() {
Expand Down Expand Up @@ -94,6 +96,7 @@ protected void writeUserOperationLog(CommandContext commandContext, int numInsta
propertyChanges.add(new PropertyChange("nrOfInstances", null, numInstances));
propertyChanges.add(new PropertyChange("async", null, true));
propertyChanges.add(new PropertyChange("type", null, "history"));
propertyChanges.add(new PropertyChange("deleteReason", null, deleteReason));

commandContext.getOperationLogManager()
.logDecisionInstanceOperation(UserOperationLogEntry.OPERATION_TYPE_DELETE, propertyChanges);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ public void executeBatch() {

HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query, null);

if (batch != null) {
Job job = managementService.createJobQuery().jobDefinitionId(batch.getSeedJobDefinitionId()).singleResult();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ public void removeBatches() {
@Test
public void createBatchDeletionByIds() {
// when
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null);

// then
assertBatchCreated(batch, 10);
Expand All @@ -126,7 +126,7 @@ public void createBatchDeletionByInvalidIds() {
thrown.expect(BadUserRequestException.class);

// when
historyService.deleteHistoricDecisionInstancesAsync((List<String>) null);
historyService.deleteHistoricDecisionInstancesAsync((List<String>) null, null);
}

@Test
Expand All @@ -135,7 +135,7 @@ public void createBatchDeletionByQuery() {
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

// when
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query, null);

// then
assertBatchCreated(batch, 10);
Expand All @@ -147,7 +147,7 @@ public void createBatchDeletionByInvalidQuery() {
thrown.expect(BadUserRequestException.class);

// when
historyService.deleteHistoricDecisionInstancesAsync((HistoricDecisionInstanceQuery) null);
historyService.deleteHistoricDecisionInstancesAsync((HistoricDecisionInstanceQuery) null, null);
}

@Test
Expand All @@ -159,7 +159,7 @@ public void createBatchDeletionByInvalidQueryByKey() {
thrown.expect(BadUserRequestException.class);

// when
historyService.deleteHistoricDecisionInstancesAsync(query);
historyService.deleteHistoricDecisionInstancesAsync(query, null);
}

@Test
Expand All @@ -168,7 +168,7 @@ public void createBatchDeletionByIdsAndQuery() {
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

// when
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query, null);

// then
assertBatchCreated(batch, 10);
Expand All @@ -177,7 +177,7 @@ public void createBatchDeletionByIdsAndQuery() {
@Test
public void createSeedJobByIds() {
// when
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null);

// then there exists a seed job definition with the batch id as
// configuration
Expand Down Expand Up @@ -213,7 +213,7 @@ public void createSeedJobByQuery() {
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

// when
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query, null);

// then there exists a seed job definition with the batch id as
// configuration
Expand Down Expand Up @@ -249,7 +249,7 @@ public void createSeedJobByIdsAndQuery() {
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

// when
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query, null);

// then there exists a seed job definition with the batch id as
// configuration
Expand Down Expand Up @@ -284,7 +284,7 @@ public void createDeletionJobsByIds() {
// given
rule.getProcessEngineConfiguration().setBatchJobsPerSeed(5);

Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null);

JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch);
JobDefinition deletionJobDefinition = helper.getExecutionJobDefinition(batch);;
Expand Down Expand Up @@ -317,7 +317,7 @@ public void createDeletionJobsByQuery() {

HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query, null);

JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch);
JobDefinition deletionJobDefinition = helper.getExecutionJobDefinition(batch);;
Expand Down Expand Up @@ -350,7 +350,7 @@ public void createDeletionJobsByIdsAndQuery() {

HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);

Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query, null);

JobDefinition seedJobDefinition = helper.getSeedJobDefinition(batch);
JobDefinition deletionJobDefinition = helper.getExecutionJobDefinition(batch);;
Expand Down Expand Up @@ -379,7 +379,7 @@ public void createDeletionJobsByIdsAndQuery() {
@Test
public void createMonitorJobByIds() {
// given
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null);

// when
helper.executeSeedJob(batch);
Expand All @@ -403,7 +403,7 @@ public void createMonitorJobByIds() {
public void createMonitorJobByQuery() {
// given
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query, null);

// when
helper.executeSeedJob(batch);
Expand All @@ -427,7 +427,7 @@ public void createMonitorJobByQuery() {
public void createMonitorJobByIdsAndQuery() {
// given
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query, null);

// when
helper.executeSeedJob(batch);
Expand All @@ -450,7 +450,7 @@ public void createMonitorJobByIdsAndQuery() {
@Test
public void deleteInstancesByIds() {
// given
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, null);

helper.executeSeedJob(batch);
List<Job> deletionJobs = helper.getExecutionJobs(batch);
Expand All @@ -469,7 +469,7 @@ public void deleteInstancesByIds() {
public void deleteInstancesByQuery() {
// given
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(query, null);

helper.executeSeedJob(batch);
List<Job> deletionJobs = helper.getExecutionJobs(batch);
Expand All @@ -487,7 +487,7 @@ public void deleteInstancesByQuery() {
public void deleteInstancesByIdsAndQuery() {
// given
HistoricDecisionInstanceQuery query = historyService.createHistoricDecisionInstanceQuery().decisionDefinitionKey(DECISION);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query);
Batch batch = historyService.deleteHistoricDecisionInstancesAsync(decisionInstanceIds, query, null);

helper.executeSeedJob(batch);
List<Job> deletionJobs = helper.getExecutionJobs(batch);
Expand Down
Loading

0 comments on commit 41502b2

Please sign in to comment.