TSK-870: Create new Id for imported workbasket
This commit is contained in:
parent
469452b50b
commit
ad026b7879
|
@ -104,7 +104,7 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
|||
public Workbasket createWorkbasket(Workbasket newWorkbasket)
|
||||
throws InvalidWorkbasketException, NotAuthorizedException, WorkbasketAlreadyExistException,
|
||||
DomainNotFoundException {
|
||||
LOGGER.debug("entry to createtWorkbasket(workbasket)", newWorkbasket);
|
||||
LOGGER.debug("entry to createWorkbasket(workbasket)", newWorkbasket);
|
||||
taskanaEngine.checkRoleMembership(TaskanaRole.BUSINESS_ADMIN, TaskanaRole.ADMIN);
|
||||
|
||||
WorkbasketImpl workbasket = (WorkbasketImpl) newWorkbasket;
|
||||
|
@ -143,7 +143,11 @@ public class WorkbasketServiceImpl implements WorkbasketService {
|
|||
try {
|
||||
taskanaEngine.openConnection();
|
||||
workbasket.setModified(Instant.now());
|
||||
workbasketMapper.update(workbasket);
|
||||
if (workbasket.getId() == null || workbasket.getId().isEmpty()) {
|
||||
workbasketMapper.updateByKeyAndDomain(workbasket);
|
||||
} else {
|
||||
workbasketMapper.update(workbasket);
|
||||
}
|
||||
LOGGER.debug("Method updateWorkbasket() updated workbasket '{}'", workbasket.getId());
|
||||
return workbasket;
|
||||
} finally {
|
||||
|
|
|
@ -160,6 +160,9 @@ public interface WorkbasketMapper {
|
|||
@Update("UPDATE WORKBASKET SET MODIFIED = #{workbasket.modified}, KEY = #{workbasket.key}, NAME = #{workbasket.name}, DOMAIN = #{workbasket.domain}, TYPE = #{workbasket.type}, DESCRIPTION = #{workbasket.description}, OWNER = #{workbasket.owner}, CUSTOM_1 = #{workbasket.custom1}, CUSTOM_2 = #{workbasket.custom2}, CUSTOM_3 = #{workbasket.custom3}, CUSTOM_4 = #{workbasket.custom4}, ORG_LEVEL_1 = #{workbasket.orgLevel1}, ORG_LEVEL_2 = #{workbasket.orgLevel2}, ORG_LEVEL_3 = #{workbasket.orgLevel3}, ORG_LEVEL_4 = #{workbasket.orgLevel4}, MARKED_FOR_DELETION = #{workbasket.markedForDeletion} WHERE id = #{workbasket.id}")
|
||||
void update(@Param("workbasket") WorkbasketImpl workbasket);
|
||||
|
||||
@Update("UPDATE WORKBASKET SET MODIFIED = #{workbasket.modified}, NAME = #{workbasket.name}, TYPE = #{workbasket.type}, DESCRIPTION = #{workbasket.description}, OWNER = #{workbasket.owner}, CUSTOM_1 = #{workbasket.custom1}, CUSTOM_2 = #{workbasket.custom2}, CUSTOM_3 = #{workbasket.custom3}, CUSTOM_4 = #{workbasket.custom4}, ORG_LEVEL_1 = #{workbasket.orgLevel1}, ORG_LEVEL_2 = #{workbasket.orgLevel2}, ORG_LEVEL_3 = #{workbasket.orgLevel3}, ORG_LEVEL_4 = #{workbasket.orgLevel4}, MARKED_FOR_DELETION = #{workbasket.markedForDeletion} WHERE KEY = #{workbasket.key} AND DOMAIN = #{workbasket.domain}")
|
||||
void updateByKeyAndDomain(@Param("workbasket") WorkbasketImpl workbasket);
|
||||
|
||||
@Delete("DELETE FROM WORKBASKET where id = #{id}")
|
||||
void delete(@Param("id") String id);
|
||||
}
|
||||
|
|
|
@ -188,6 +188,30 @@ public class CreateWorkbasketAccTest extends AbstractAccTest {
|
|||
duplicateWorkbasketWithSmallX = workbasketService.createWorkbasket(duplicateWorkbasketWithSmallX);
|
||||
}
|
||||
|
||||
@WithAccessId(
|
||||
userName = "user_1_2",
|
||||
groupNames = {"businessadmin"})
|
||||
@Test(expected = WorkbasketAlreadyExistException.class)
|
||||
public void testCreateWorkbasketWithAlreadyExistingKeyAndDomainAndEmptyIdUpdatesOlderWorkbasket()
|
||||
throws DomainNotFoundException, InvalidWorkbasketException, NotAuthorizedException, WorkbasketAlreadyExistException {
|
||||
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
|
||||
// First create a new Workbasket.
|
||||
Workbasket wb = workbasketService.newWorkbasket("newKey", "DOMAIN_A");
|
||||
wb.setType(WorkbasketType.GROUP);
|
||||
wb.setName("this name");
|
||||
wb = workbasketService.createWorkbasket(wb);
|
||||
|
||||
// Second create a new Workbasket with same Key and Domain.
|
||||
Workbasket sameKeyAndDomain = workbasketService.newWorkbasket("newKey", "DOMAIN_A");
|
||||
sameKeyAndDomain.setType(WorkbasketType.TOPIC);
|
||||
sameKeyAndDomain.setName("new name");
|
||||
sameKeyAndDomain = workbasketService.createWorkbasket(sameKeyAndDomain);
|
||||
|
||||
assertEquals(wb.getId(), sameKeyAndDomain.getId());
|
||||
assertEquals(WorkbasketType.TOPIC, sameKeyAndDomain.getType());
|
||||
assertEquals("new name", sameKeyAndDomain.getName());
|
||||
}
|
||||
|
||||
@WithAccessId(
|
||||
userName = "user_1_2",
|
||||
groupNames = {"businessadmin"})
|
||||
|
|
|
@ -116,6 +116,24 @@ public class WorkbasketDefinitionControllerIntTest {
|
|||
assertEquals(HttpStatus.OK, responseImport.getStatusCode());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testNoErrorWhenImportWithSameIdButDifferentKeyAndDomain()
|
||||
throws IOException {
|
||||
ResponseEntity<List<WorkbasketDefinitionResource>> response = template.exchange(
|
||||
server + port + "/v1/workbasket-definitions?domain=DOMAIN_A",
|
||||
HttpMethod.GET, request, new ParameterizedTypeReference<List<WorkbasketDefinitionResource>>() {
|
||||
|
||||
});
|
||||
|
||||
List<String> list = new ArrayList<>();
|
||||
WorkbasketDefinitionResource wbDef = response.getBody().get(0);
|
||||
list.add(objMapper.writeValueAsString(wbDef));
|
||||
wbDef.getWorkbasket().setKey("new Key for this WB");
|
||||
list.add(objMapper.writeValueAsString(wbDef));
|
||||
ResponseEntity<String> responseImport = importRequest(list);
|
||||
assertEquals(HttpStatus.OK, responseImport.getStatusCode());
|
||||
}
|
||||
|
||||
private ResponseEntity<String> importRequest(List<String> clList) throws IOException {
|
||||
File tmpFile = File.createTempFile("test", ".tmp");
|
||||
FileWriter writer = new FileWriter(tmpFile);
|
||||
|
|
|
@ -38,6 +38,7 @@ import pro.taskana.exceptions.WorkbasketAlreadyExistException;
|
|||
import pro.taskana.exceptions.WorkbasketNotFoundException;
|
||||
import pro.taskana.rest.resource.WorkbasketDefinitionResource;
|
||||
import pro.taskana.rest.resource.WorkbasketDefinitionResourceAssembler;
|
||||
import pro.taskana.rest.resource.WorkbasketResource;
|
||||
|
||||
/**
|
||||
* Controller for all {@link WorkbasketDefinitionResource} related endpoints.
|
||||
|
@ -133,7 +134,8 @@ public class WorkbasketDefinitionController {
|
|||
if (systemIds.containsKey(logicalId(importedWb))) {
|
||||
workbasket = workbasketService.updateWorkbasket(importedWb);
|
||||
} else {
|
||||
workbasket = workbasketService.createWorkbasket(importedWb);
|
||||
Workbasket wbWithoutId = removeId(importedWb);
|
||||
workbasket = workbasketService.createWorkbasket(wbWithoutId);
|
||||
}
|
||||
|
||||
// Since we would have a n² runtime when doing a lookup and updating the access items we decided to
|
||||
|
@ -171,6 +173,12 @@ public class WorkbasketDefinitionController {
|
|||
return response;
|
||||
}
|
||||
|
||||
private Workbasket removeId(Workbasket importedWb) {
|
||||
WorkbasketResource wbRes = new WorkbasketResource(importedWb);
|
||||
wbRes.setWorkbasketId(null);
|
||||
return workbasketDefinitionAssembler.toModel(wbRes);
|
||||
}
|
||||
|
||||
private String logicalId(WorkbasketSummary workbasket) {
|
||||
return logicalId(workbasket.getKey(), workbasket.getDomain());
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue