diff --git a/lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java b/lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java index e9c1c9200..777d2f06b 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java +++ b/lib/taskana-core/src/main/java/pro/taskana/TaskanaRole.java @@ -1,5 +1,11 @@ package pro.taskana; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +import pro.taskana.exceptions.SystemException; + /** * This enum contains all roles that are known to taskana. */ @@ -16,17 +22,17 @@ public enum TaskanaRole { } public static TaskanaRole fromPropertyName(String name) { - if (USER.propertyName.equalsIgnoreCase(name)) { - return TaskanaRole.USER; - } else if (BUSINESS_ADMIN.propertyName.equalsIgnoreCase(name)) { - return TaskanaRole.BUSINESS_ADMIN; - } else if (ADMIN.propertyName.equalsIgnoreCase(name)) { - return TaskanaRole.ADMIN; - } else if (MONITOR.propertyName.equalsIgnoreCase(name)) { - return TaskanaRole.MONITOR; - } else { - return null; - } + return Arrays.stream(TaskanaRole.values()) + .filter(x -> x.propertyName.equalsIgnoreCase(name)) + .findFirst() + .orElseThrow(() -> new SystemException( + "Internal System error when processing role property " + name)); + } + + public static List getValidPropertyNames() { + return Arrays.stream(values()) + .map(TaskanaRole::getPropertyName) + .collect(Collectors.toList()); } public String getPropertyName() { diff --git a/lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java b/lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java index 3e5b042b1..e3d72963b 100644 --- a/lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java +++ b/lib/taskana-core/src/main/java/pro/taskana/configuration/TaskanaEngineConfiguration.java @@ -12,6 +12,7 @@ import java.time.Instant; import java.time.LocalDate; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -224,7 +225,7 @@ public class TaskanaEngineConfiguration { LOGGER.debug("CleanupJob configuration: first run at {}", cleanupJobFirstRun); LOGGER.debug("CleanupJob configuration: runs every {}", cleanupJobRunEvery); LOGGER.debug("CleanupJob configuration: minimum age of tasks to be cleanup up is {}", - cleanupJobMinimumAge); + cleanupJobMinimumAge); LOGGER.debug("TaskCleanupJob configuration: all completed task with the same parent business property id {}", taskCleanupJobAllCompletedSameParentBusiness); } @@ -298,36 +299,27 @@ public class TaskanaEngineConfiguration { } private void initTaskanaRoles(Properties props, String rolesSeparator) { - List validPropertyNames = Arrays.stream(TaskanaRole.values()) - .map(TaskanaRole::getPropertyName) - .collect(Collectors.toList()); - for (Object obj : props.keySet()) { - String propertyName = ((String) obj); - if (validPropertyNames.contains(propertyName.toLowerCase().trim())) { - String propertyValue = props.getProperty(propertyName); - Set roleMemberSet = new HashSet<>(); - StringTokenizer st = new StringTokenizer(propertyValue, rolesSeparator); - while (st.hasMoreTokens()) { - String token = st.nextToken().toLowerCase().trim(); - roleMemberSet.add(token); - } - TaskanaRole key = TaskanaRole.fromPropertyName(propertyName); - if (key != null) { - roleMap.put(key, roleMemberSet); - } else { - LOGGER.error("Internal System error when processing role property {}.", propertyName); - throw new SystemException( - "Internal System error when processing role property " + propertyName); - } - } - } + List validPropertyNames = TaskanaRole.getValidPropertyNames(); + + props.keySet() + .stream() + .map(String::valueOf) + .filter(propertyName -> validPropertyNames.contains(propertyName.toLowerCase().trim())) + .forEach(validPropertyName -> roleMap.put(TaskanaRole.fromPropertyName(validPropertyName), + getTokensWithCollection(props.getProperty(validPropertyName), rolesSeparator))); + ensureRoleMapIsFullyInitialized(); if (LOGGER.isDebugEnabled()) { roleMap.forEach( (k, v) -> LOGGER.debug("Found Taskana RoleConfig {} : {} ", k, LoggerUtils.setToString(v))); } + } + private HashSet getTokensWithCollection(String str, String rolesSeparator) { + return Collections.list(new StringTokenizer(str, rolesSeparator)).stream() + .map(token -> String.valueOf(token).toLowerCase().trim()) + .collect(Collectors.toCollection(HashSet::new)); } private Properties readPropertiesFromFile(String propertiesFile) {