TSK-1038: Removed java precondition check and use db exception instead

This commit is contained in:
Mustapha Zorgati 2020-01-28 08:53:04 +01:00
parent 6e1d6cf20f
commit 7cce420b76
2 changed files with 17 additions and 13 deletions

View File

@ -7,6 +7,7 @@ import java.util.HashSet;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
import org.apache.ibatis.exceptions.PersistenceException;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
@ -200,16 +201,22 @@ public class WorkbasketServiceImpl implements WorkbasketService {
"WorkbasketAccessItem %s refers to a not existing workbasket", "WorkbasketAccessItem %s refers to a not existing workbasket",
workbasketAccessItem)); workbasketAccessItem));
} }
boolean accessIdAlreadyExists = try {
getWorkbasketAccessItems(workbasketAccessItem.getWorkbasketId()).stream()
.map(WorkbasketAccessItem::getAccessId)
.anyMatch(i -> i.equals(workbasketAccessItem.getAccessId()));
if (accessIdAlreadyExists) {
throw new WorkbasketAccessItemAlreadyExistException(accessItem);
}
workbasketAccessMapper.insert(accessItem); workbasketAccessMapper.insert(accessItem);
LOGGER.debug( LOGGER.debug(
"Method createWorkbasketAccessItem() created workbaskteAccessItem {}", accessItem); "Method createWorkbasketAccessItem() created workbaskteAccessItem {}", accessItem);
} catch (PersistenceException e) {
List<String> accessItemExistsIdentifier =
Arrays.asList(
"SQLCODE=-803", // DB2
"uc_accessid_wbid", // POSTGRES
"UC_ACCESSID_WBID_INDEX_E" // H2
);
if (accessItemExistsIdentifier.stream().anyMatch(e.getMessage()::contains)) {
throw new WorkbasketAccessItemAlreadyExistException(accessItem);
}
throw e;
}
return accessItem; return accessItem;
} finally { } finally {
taskanaEngine.returnConnection(); taskanaEngine.returnConnection();

View File

@ -234,10 +234,7 @@ class CreateWorkbasketAccTest extends AbstractAccTest {
userName = "user_1_2", userName = "user_1_2",
groupNames = {"businessadmin"}) groupNames = {"businessadmin"})
@Test @Test
void testCreateDuplicateWorkbasketAccessListFails() void testCreateDuplicateWorkbasketAccessListFails() throws Exception {
throws NotAuthorizedException, InvalidArgumentException, WorkbasketNotFoundException,
InvalidWorkbasketException, WorkbasketAlreadyExistException, DomainNotFoundException,
WorkbasketAccessItemAlreadyExistException {
WorkbasketService workbasketService = taskanaEngine.getWorkbasketService(); WorkbasketService workbasketService = taskanaEngine.getWorkbasketService();
final int before = workbasketService.createWorkbasketQuery().domainIn("DOMAIN_A").list().size(); final int before = workbasketService.createWorkbasketQuery().domainIn("DOMAIN_A").list().size();