Closes #2211 classificationTypes are List instead of Set, because of sorting

This commit is contained in:
arolfes 2023-04-12 10:43:20 +02:00 committed by Alex
parent 54382bc8f5
commit d73beb3a3c
3 changed files with 18 additions and 18 deletions

View File

@ -100,7 +100,7 @@ class TaskanaConfigurationTest {
Arrays.stream(TaskanaRole.values()) Arrays.stream(TaskanaRole.values())
.collect(Collectors.toMap(Function.identity(), r -> Set.of()))); .collect(Collectors.toMap(Function.identity(), r -> Set.of())));
// classification configuration // classification configuration
assertThat(configuration.getClassificationTypes()).isEqualTo(Collections.emptySet()); assertThat(configuration.getClassificationTypes()).isEqualTo(Collections.emptyList());
assertThat(configuration.getClassificationCategoriesByType()) assertThat(configuration.getClassificationCategoriesByType())
.isEqualTo(Collections.emptyMap()); .isEqualTo(Collections.emptyMap());
// working time configuration // working time configuration
@ -171,7 +171,7 @@ class TaskanaConfigurationTest {
Map.entry(TaskanaRole.TASK_ADMIN, Set.of("taskadmin-1", "taskadmin-2")), Map.entry(TaskanaRole.TASK_ADMIN, Set.of("taskadmin-1", "taskadmin-2")),
Map.entry(TaskanaRole.TASK_ROUTER, Set.of("taskrouter-1", "taskrouter-2")))); Map.entry(TaskanaRole.TASK_ROUTER, Set.of("taskrouter-1", "taskrouter-2"))));
// classification configuration // classification configuration
assertThat(configuration.getClassificationTypes()).isEqualTo(Set.of("TASK", "DOCUMENT")); assertThat(configuration.getClassificationTypes()).isEqualTo(List.of("TASK", "DOCUMENT"));
assertThat(configuration.getClassificationCategoriesByType()) assertThat(configuration.getClassificationCategoriesByType())
.isEqualTo( .isEqualTo(
Map.ofEntries( Map.ofEntries(
@ -247,7 +247,7 @@ class TaskanaConfigurationTest {
Map.entry(TaskanaRole.TASK_ADMIN, Set.of("task_admin")), Map.entry(TaskanaRole.TASK_ADMIN, Set.of("task_admin")),
Map.entry(TaskanaRole.TASK_ROUTER, Set.of("task_router"))); Map.entry(TaskanaRole.TASK_ROUTER, Set.of("task_router")));
// classification configuration // classification configuration
Set<String> expectedClassificationTypes = Set.of("TYPE_A", "TYPE_B"); List<String> expectedClassificationTypes = List.of("TYPE_A", "TYPE_B");
Map<String, Set<String>> expectedClassificationCategories = Map<String, Set<String>> expectedClassificationCategories =
Map.of("TYPE_A", Set.of("CATEGORY_A"), "TYPE_B", Set.of("CATEGORY_B")); Map.of("TYPE_A", Set.of("CATEGORY_A"), "TYPE_B", Set.of("CATEGORY_B"));
// working time configuration // working time configuration
@ -435,7 +435,7 @@ class TaskanaConfigurationTest {
// authentication configuration // authentication configuration
.roleMap(Map.of(TaskanaRole.ADMIN, Set.of("admin"))) .roleMap(Map.of(TaskanaRole.ADMIN, Set.of("admin")))
// classification configuration // classification configuration
.classificationTypes(Set.of("typeA", "typeB")) .classificationTypes(List.of("typeA", "typeB"))
.classificationCategoriesByType( .classificationCategoriesByType(
Map.of("typeA", Set.of("categoryA"), "typeB", Set.of("categoryB"))) Map.of("typeA", Set.of("categoryA"), "typeB", Set.of("categoryB")))
// working time configuration // working time configuration
@ -624,7 +624,7 @@ class TaskanaConfigurationTest {
new TaskanaConfiguration.Builder( new TaskanaConfiguration.Builder(
TestContainerExtension.createDataSourceForH2(), false, "TASKANA") TestContainerExtension.createDataSourceForH2(), false, "TASKANA")
// necessary to bypass validation since Classification Categories will be an empty Map // necessary to bypass validation since Classification Categories will be an empty Map
.classificationTypes(Set.of("")); .classificationTypes(List.of(""));
initializeWithMutableCollectionsAsMapValues(builder); initializeWithMutableCollectionsAsMapValues(builder);
Stream<Field> fields = Stream<Field> fields =
ReflectionUtil.retrieveAllFields(TaskanaConfiguration.class).stream() ReflectionUtil.retrieveAllFields(TaskanaConfiguration.class).stream()
@ -672,7 +672,7 @@ class TaskanaConfigurationTest {
new TaskanaConfiguration.Builder( new TaskanaConfiguration.Builder(
TestContainerExtension.createDataSourceForH2(), false, "TASKANA") TestContainerExtension.createDataSourceForH2(), false, "TASKANA")
// necessary to bypass validation since Classification Categories will be an empty Map // necessary to bypass validation since Classification Categories will be an empty Map
.classificationTypes(Set.of()); .classificationTypes(List.of());
initializeWithMutableMaps(builder); initializeWithMutableMaps(builder);
Stream<Field> fields = Stream<Field> fields =
ReflectionUtil.retrieveAllFields(TaskanaConfiguration.class).stream() ReflectionUtil.retrieveAllFields(TaskanaConfiguration.class).stream()
@ -919,7 +919,7 @@ class TaskanaConfigurationTest {
TaskanaConfiguration.Builder builder = TaskanaConfiguration.Builder builder =
new TaskanaConfiguration.Builder( new TaskanaConfiguration.Builder(
TestContainerExtension.createDataSourceForH2(), false, "TASKANA") TestContainerExtension.createDataSourceForH2(), false, "TASKANA")
.classificationTypes(Set.of("valid")) .classificationTypes(List.of("valid"))
.classificationCategoriesByType(Map.of("does_not_exist", Set.of("a", "b"))); .classificationCategoriesByType(Map.of("does_not_exist", Set.of("a", "b")));
ThrowingCallable call = builder::build; ThrowingCallable call = builder::build;
@ -938,7 +938,7 @@ class TaskanaConfigurationTest {
TaskanaConfiguration.Builder builder = TaskanaConfiguration.Builder builder =
new TaskanaConfiguration.Builder( new TaskanaConfiguration.Builder(
TestContainerExtension.createDataSourceForH2(), false, "TASKANA") TestContainerExtension.createDataSourceForH2(), false, "TASKANA")
.classificationTypes(Set.of("type1", "type2")) .classificationTypes(List.of("type1", "type2"))
.classificationCategoriesByType(Map.of("type1", Set.of("a", "b"))); .classificationCategoriesByType(Map.of("type1", Set.of("a", "b")));
ThrowingCallable call = builder::build; ThrowingCallable call = builder::build;
@ -948,7 +948,7 @@ class TaskanaConfigurationTest {
.hasMessageContaining( .hasMessageContaining(
"Some Classification Categories for parameter classificationTypes " "Some Classification Categories for parameter classificationTypes "
+ "(taskana.classification.types) are missing. " + "(taskana.classification.types) are missing. "
+ "configured: [TYPE2, TYPE1] detected: [TYPE1]"); + "configured: [TYPE1, TYPE2] detected: [TYPE1]");
} }
@ParameterizedTest @ParameterizedTest
@ -988,7 +988,7 @@ class TaskanaConfigurationTest {
void should_MakeClassificationTypesUpperCase() { void should_MakeClassificationTypesUpperCase() {
TaskanaConfiguration configuration = TaskanaConfiguration configuration =
new Builder(TestContainerExtension.createDataSourceForH2(), false, "TASKANA") new Builder(TestContainerExtension.createDataSourceForH2(), false, "TASKANA")
.classificationTypes(Set.of("a", "b")) .classificationTypes(List.of("a", "b"))
.classificationCategoriesByType( .classificationCategoriesByType(
Map.ofEntries(Map.entry("a", Set.of()), Map.entry("b", Set.of()))) Map.ofEntries(Map.entry("a", Set.of()), Map.entry("b", Set.of())))
.build(); .build();
@ -1000,7 +1000,7 @@ class TaskanaConfigurationTest {
void should_MakeClassificationCategoriesUpperCase() { void should_MakeClassificationCategoriesUpperCase() {
TaskanaConfiguration configuration = TaskanaConfiguration configuration =
new Builder(TestContainerExtension.createDataSourceForH2(), false, "TASKANA") new Builder(TestContainerExtension.createDataSourceForH2(), false, "TASKANA")
.classificationTypes(Set.of("type_a", "type_b")) .classificationTypes(List.of("type_a", "type_b"))
.classificationCategoriesByType( .classificationCategoriesByType(
Map.ofEntries( Map.ofEntries(
Map.entry("type_a", Set.of("a", "b")), Map.entry("type_b", Set.of("c", "d")))) Map.entry("type_a", Set.of("a", "b")), Map.entry("type_b", Set.of("c", "d"))))

View File

@ -67,7 +67,7 @@ public class TaskanaConfiguration {
// endregion // endregion
// region classification configuration // region classification configuration
private final Set<String> classificationTypes; private final List<String> classificationTypes;
private final Map<String, Set<String>> classificationCategoriesByType; private final Map<String, Set<String>> classificationCategoriesByType;
// endregion // endregion
@ -142,7 +142,7 @@ public class TaskanaConfiguration {
Collectors.toUnmodifiableMap( Collectors.toUnmodifiableMap(
Entry::getKey, e -> Collections.unmodifiableSet(e.getValue()))); Entry::getKey, e -> Collections.unmodifiableSet(e.getValue())));
// classification configuration // classification configuration
this.classificationTypes = Collections.unmodifiableSet(builder.classificationTypes); this.classificationTypes = Collections.unmodifiableList(builder.classificationTypes);
this.classificationCategoriesByType = this.classificationCategoriesByType =
builder.classificationCategoriesByType.entrySet().stream() builder.classificationCategoriesByType.entrySet().stream()
.collect( .collect(
@ -252,7 +252,7 @@ public class TaskanaConfiguration {
return roleMap; return roleMap;
} }
public Set<String> getClassificationTypes() { public List<String> getClassificationTypes() {
return classificationTypes; return classificationTypes;
} }
@ -629,7 +629,7 @@ public class TaskanaConfiguration {
// region classification configuration // region classification configuration
@TaskanaProperty("taskana.classification.types") @TaskanaProperty("taskana.classification.types")
private Set<String> classificationTypes = new HashSet<>(); private List<String> classificationTypes = new ArrayList<>();
@TaskanaProperty("taskana.classification.categories") @TaskanaProperty("taskana.classification.categories")
private Map<String, Set<String>> classificationCategoriesByType = new HashMap<>(); private Map<String, Set<String>> classificationCategoriesByType = new HashMap<>();
@ -928,7 +928,7 @@ public class TaskanaConfiguration {
// region classification configuration // region classification configuration
public Builder classificationTypes(Set<String> classificationTypes) { public Builder classificationTypes(List<String> classificationTypes) {
this.classificationTypes = classificationTypes; this.classificationTypes = classificationTypes;
return this; return this;
} }
@ -1171,7 +1171,7 @@ public class TaskanaConfiguration {
private void adjustConfiguration() { private void adjustConfiguration() {
domains = domains.stream().map(String::toUpperCase).collect(Collectors.toList()); domains = domains.stream().map(String::toUpperCase).collect(Collectors.toList());
classificationTypes = classificationTypes =
classificationTypes.stream().map(String::toUpperCase).collect(Collectors.toSet()); classificationTypes.stream().map(String::toUpperCase).collect(Collectors.toList());
classificationCategoriesByType = classificationCategoriesByType =
classificationCategoriesByType.entrySet().stream() classificationCategoriesByType.entrySet().stream()
.map( .map(

View File

@ -78,7 +78,7 @@ public class TaskanaEngineController {
*/ */
@GetMapping(path = RestEndpoints.URL_CLASSIFICATION_TYPES) @GetMapping(path = RestEndpoints.URL_CLASSIFICATION_TYPES)
@Transactional(readOnly = true, rollbackFor = Exception.class) @Transactional(readOnly = true, rollbackFor = Exception.class)
public ResponseEntity<Set<String>> getClassificationTypes() { public ResponseEntity<List<String>> getClassificationTypes() {
return ResponseEntity.ok(taskanaConfiguration.getClassificationTypes()); return ResponseEntity.ok(taskanaConfiguration.getClassificationTypes());
} }