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 a249c4956..c1a9f39ed 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 @@ -246,6 +246,8 @@ public class TaskanaEngineConfiguration { while (st.hasMoreTokens()) { classificationTypes.add(st.nextToken().trim().toUpperCase()); } + } else { + LOGGER.warn("Configuration issue. Classification type is missing"); } LOGGER.debug("Configured classificationTypes: {}", classificationTypes); } @@ -265,6 +267,8 @@ public class TaskanaEngineConfiguration { classificationCategoriesAux.add(st.nextToken().trim().toUpperCase()); } classificationCategoriesByTypeMap.put(type, classificationCategoriesAux); + } else { + LOGGER.warn("Configuration issue. Classification categories by type is missing"); } } } diff --git a/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java b/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java index c257049ce..da85a607c 100644 --- a/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java +++ b/lib/taskana-core/src/test/java/acceptance/config/TaskanaConfigAccTest.java @@ -2,10 +2,18 @@ package acceptance.config; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +import java.io.File; +import java.io.IOException; +import java.io.PrintWriter; import java.sql.SQLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import org.h2.store.fs.FileUtils; import org.junit.Test; import pro.taskana.configuration.TaskanaEngineConfiguration; @@ -50,4 +58,85 @@ public class TaskanaConfigAccTest extends TaskanaEngineImpl { assertFalse(getConfiguration().getClassificationCategoriesByType("TASK").contains("manual")); } + @Test + public void testDoesNotExistPropertyClassificationTypeOrItIsEmpty() throws IOException { + taskanaEngineConfiguration.setClassificationTypes(new ArrayList<>()); + String propertiesFileName = createNewConfigFile("/dummyTestConfig.properties", false, true); + String delimiter = ";"; + try { + getConfiguration().initTaskanaProperties(propertiesFileName, delimiter); + } finally { + deleteFile(propertiesFileName); + } + assertTrue(taskanaEngineConfiguration.getClassificationTypes().isEmpty()); + } + + @Test + public void testDoesNotExistPropertyClassificatioCategoryOrItIsEmpty() throws IOException { + taskanaEngineConfiguration.setClassificationTypes(new ArrayList<>()); + taskanaEngineConfiguration.setClassificationCategoriesByType(new HashMap<>()); + String propertiesFileName = createNewConfigFile("/dummyTestConfig.properties", true, false); + String delimiter = ";"; + try { + getConfiguration().initTaskanaProperties(propertiesFileName, delimiter); + } finally { + deleteFile(propertiesFileName); + } + assertNull(taskanaEngineConfiguration.getClassificationCategoriesByType( + taskanaEngineConfiguration.getClassificationTypes().get(0))); + } + + @Test + public void testWithCategoriesAndClassificationFilled() throws IOException { + taskanaEngineConfiguration.setClassificationTypes(new ArrayList()); + taskanaEngineConfiguration.setClassificationCategoriesByType(new HashMap>()); + String propertiesFileName = createNewConfigFile("/dummyTestConfig.properties", true, true); + String delimiter = ";"; + try { + getConfiguration().initTaskanaProperties(propertiesFileName, delimiter); + } finally { + deleteFile(propertiesFileName); + } + assertFalse(taskanaEngineConfiguration.getClassificationTypes().isEmpty()); + assertFalse(taskanaEngineConfiguration.getClassificationCategoriesByType( + taskanaEngineConfiguration.getClassificationTypes().get(0)).isEmpty()); + assertEquals(taskanaEngineConfiguration.getClassificationTypes().size(), 2); + assertEquals(taskanaEngineConfiguration.getClassificationCategoriesByType( + taskanaEngineConfiguration.getClassificationTypes().get(0)).size(), 4); + assertEquals(taskanaEngineConfiguration.getClassificationCategoriesByType( + taskanaEngineConfiguration.getClassificationTypes().get(1)).size(), 1); + } + + private String createNewConfigFile(String filename, boolean addingTypes, boolean addingClassification) + throws IOException { + String userHomeDirectroy = System.getProperty("user.home"); + String propertiesFileName = userHomeDirectroy + filename; + File f = new File(propertiesFileName); + if (!f.exists()) { + try (PrintWriter writer = new PrintWriter(propertiesFileName, "UTF-8")) { + writer.println("taskana.roles.Admin =Holger|Stefan"); + writer.println("taskana.roles.businessadmin = ebe | konstantin "); + writer.println("taskana.roles.user = nobody"); + if (addingTypes) { + writer.println("taskana.classification.types= TASK , document"); + } + if (addingClassification) { + writer.println("taskana.classification.categories.task= EXTERNAL, manual, autoMAtic, Process"); + writer.println("taskana.classification.categories.document= EXTERNAL"); + } + } catch (IOException e) { + throw e; + } + } + return propertiesFileName; + } + + private void deleteFile(String propertiesFileName) { + System.out.println("about to delete " + propertiesFileName); + File f = new File(propertiesFileName); + if (f.exists() && !f.isDirectory()) { + FileUtils.delete(propertiesFileName); + } + } + }