From 741e0e5dc034254b2610751f419af4bf3619e2dc Mon Sep 17 00:00:00 2001 From: jensp Date: Wed, 6 Jul 2016 13:22:39 +0000 Subject: [PATCH] CCM NG: Loader for configuration parameters from the integration.properties file git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4190 8810af33-2d31-482b-a856-94f89814c4df --- .../configuration/ConfigurationManager.java | 3 + .../libreccm/configuration/EnumSetting.java | 9 +- .../configuration/LocalizedStringSetting.java | 5 + .../configuration/StringListSetting.java | 42 +-- .../libreccm/modules/ConfigurationLoader.java | 264 ++++++++++++++++++ .../ConfigurationManagerTest.java | 9 +- ...ion.java => TestExampleConfiguration.java} | 2 +- .../modules/ConfigurationLoaderTest.java | 141 ++++++++++ .../org/libreccm/modules/DatasetsTest.java | 84 ++++++ .../ConfigurationLoaderTest/log4j2.xml | 18 ++ .../test-integration.properties | 5 + .../ConfigurationLoaderTest/after-load.yml | 23 ++ 12 files changed, 580 insertions(+), 25 deletions(-) create mode 100644 ccm-core/src/main/java/org/libreccm/modules/ConfigurationLoader.java rename ccm-core/src/test/java/org/libreccm/configuration/{ExampleConfiguration.java => TestExampleConfiguration.java} (98%) create mode 100644 ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java create mode 100644 ccm-core/src/test/java/org/libreccm/modules/DatasetsTest.java create mode 100644 ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/log4j2.xml create mode 100644 ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/test-integration.properties create mode 100644 ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.yml diff --git a/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationManager.java b/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationManager.java index 2b0a3fdda..33c17eefe 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationManager.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationManager.java @@ -95,6 +95,9 @@ public class ConfigurationManager { * * @return An instance of the configuration class with all settings set to * the values stored in the registry. + * + * @throws IllegalArgumentException if the provided class is not annotated + * with {@link Configuration}. */ public T findConfiguration(final Class confClass) { if (confClass == null) { diff --git a/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java b/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java index 4b4c90b97..e0ccacce9 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/EnumSetting.java @@ -41,7 +41,7 @@ import javax.persistence.JoinTable; */ @Entity public class EnumSetting - extends AbstractSetting> implements Serializable { + extends AbstractSetting> implements Serializable { private static final long serialVersionUID = 1763168269981687340L; @@ -67,11 +67,16 @@ public class EnumSetting } public void addEnumValue(final String value) { + if (value == null) { + this.value = new HashSet<>(); + } this.value.add(value); } public void removeEnumValue(final String value) { - this.value.remove(value); + if (this.value != null) { + this.value.remove(value); + } } @Override diff --git a/ccm-core/src/main/java/org/libreccm/configuration/LocalizedStringSetting.java b/ccm-core/src/main/java/org/libreccm/configuration/LocalizedStringSetting.java index e3ea1ccbb..476538178 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/LocalizedStringSetting.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/LocalizedStringSetting.java @@ -53,6 +53,11 @@ public class LocalizedStringSetting @JoinColumn(name = "ENTRY_ID")})) private LocalizedString value; + public LocalizedStringSetting() { + super(); + value = new LocalizedString(); + } + @Override public LocalizedString getValue() { return value; diff --git a/ccm-core/src/main/java/org/libreccm/configuration/StringListSetting.java b/ccm-core/src/main/java/org/libreccm/configuration/StringListSetting.java index 0b00089e1..6256b06fc 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/StringListSetting.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/StringListSetting.java @@ -33,22 +33,25 @@ import javax.persistence.JoinTable; /** * Setting for a list of strings. In contrast to the {@link EnumSetting} which * uses a {@link java.util.Set} a list maintains the order of its elements. - * + * * @author Jens Pelzetter */ @Entity public class StringListSetting extends AbstractSetting> { private static final long serialVersionUID = 7093818804712916413L; - + @ElementCollection(fetch = FetchType.EAGER) @JoinTable(name = "SETTINGS_STRING_LIST", schema = DB_SCHEMA, - joinColumns = {@JoinColumn(name = "LIST_ID")}) + joinColumns = { + @JoinColumn(name = "LIST_ID")}) private List value; - + /** * Returns a copy of the list managed by this setting. + * + * @return */ @Override public List getValue() { @@ -58,33 +61,38 @@ public class StringListSetting extends AbstractSetting> { return new ArrayList<>(value); } } - + /** * Replaces the list managed by this setting. - * - * @param value + * + * @param value */ @Override public void setValue(final List value) { this.value = value; } - + /** * Adds a value to the list. - * + * * @param value The value to add. */ public void addListValue(final String value) { + if (this.value == null) { + this.value = new ArrayList<>(); + } this.value.add(value); } - + /** * Removes a value from the list. - * + * * @param value the value to add. */ public void removeListValue(final String value) { - this.value.remove(value); + if (this.value != null) { + this.value.remove(value); + } } @Override @@ -109,15 +117,15 @@ public class StringListSetting extends AbstractSetting> { if (!other.canEqual(this)) { return false; } - + return Objects.equals(value, other.getValue()); } - + @Override public boolean canEqual(final Object obj) { return obj instanceof StringListSetting; } - + @Override public String toString(final String data) { final StringBuilder listValues = new StringBuilder(); @@ -131,10 +139,10 @@ public class StringListSetting extends AbstractSetting> { }); } listValues.append(" }"); - + return super.toString(String.format(", value = %s%s", listValues.toString(), data)); } - + } diff --git a/ccm-core/src/main/java/org/libreccm/modules/ConfigurationLoader.java b/ccm-core/src/main/java/org/libreccm/modules/ConfigurationLoader.java new file mode 100644 index 000000000..37dcab3e9 --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/modules/ConfigurationLoader.java @@ -0,0 +1,264 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; +import org.libreccm.configuration.AbstractSetting; +import org.libreccm.configuration.BigDecimalSetting; +import org.libreccm.configuration.BooleanSetting; +import org.libreccm.configuration.Configuration; +import org.libreccm.configuration.DoubleSetting; +import org.libreccm.configuration.EnumSetting; +import org.libreccm.configuration.LocalizedStringSetting; +import org.libreccm.configuration.LongSetting; +import org.libreccm.configuration.Setting; +import org.libreccm.configuration.StringListSetting; +import org.libreccm.configuration.StringSetting; +import org.libreccm.l10n.LocalizedString; + +import java.io.IOException; +import java.io.InputStream; +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.List; +import java.util.Locale; +import java.util.Properties; +import java.util.Set; + +import javax.persistence.EntityManager; +import javax.persistence.EntityTransaction; +import javax.transaction.Transaction; + +/** + * A helper class used by the {@link ModuleManager} to load the initial + * configuration values for the configurations of a module from the bundle and + * store them in the database. + * + * If no entry for a setting is found in the integration properties the default + * value defined in the configuration class is not changed. If value defined in + * the bundle can not be converted to the correct type an warning is written + * into the Log and the value is ignored. + * + * If the bundle does not provide integration properties, a warning is written + * into the log. + * + * @author Jens Pelzetter + */ +class ConfigurationLoader { + + private static final Logger LOGGER = LogManager.getLogger( + ConfigurationLoader.class); + + private final EntityManager entityManager; + private final Properties integration; + + public ConfigurationLoader(final EntityManager entityManager) { + this.entityManager = entityManager; + + integration = new Properties(); + try (final InputStream inputStream = getClass().getResourceAsStream( + "/integration.properties")) { + + if (inputStream == null) { + LOGGER.warn("No integration properties found. Using empty " + + "properties."); + } else { + LOGGER.info("Loading integration properties."); + integration.load(inputStream); + } + + } catch (IOException ex) { + LOGGER.warn( + "Failed to load integration properties file. Using empty" + + "integration properties", ex); + } + } + + public void loadConfigurations(final CcmModule ccmModule) { + final Module module = ccmModule.getClass().getAnnotation(Module.class); + + final Class[] configurations = module.configurations(); + for (final Class configuration : configurations) { + loadConfiguration(configuration); + } + } + + /** + * Loads the values for a specific configuration class from the integration + * properties. The method will iterate over all settings defined in the + * provided configuration class and try to find an entry for the setting in + * the integration properties. If an entry in the integration properties is + * found the method will try to convert the value to the type of the + * setting. If this fails a warning is written to the log. + * + * @param confClass + */ + public void loadConfiguration(final Class confClass) { + if (confClass.getAnnotation(Configuration.class) == null) { + throw new IllegalArgumentException(String.format( + "Provided class \"%s\" is not annotated with \"%s\".", + confClass.getName(), + Configuration.class.getName())); + } + + final String confName = confClass.getName(); + + final Field[] fields = confClass.getDeclaredFields(); + for (final Field field : fields) { + field.setAccessible(true); + if (field.getAnnotation(Setting.class) == null) { + continue; + } + + final String settingName = getSettingName(field); + final String propertyName = String.join(".", confName, settingName); + if (integration.containsKey(propertyName)) { + createSetting(confName, + settingName, + field, + integration.getProperty(propertyName)); + } + + } + } + + /** + * Helper method for generating the name of a setting. This method does not + * check if the provided field is annotated with {@link Setting}. The caller + * is responsible to do that. Passing a field without the {@code Setting} + * annotation to this method will result in a {@code NullPointerException}. + * + * @param field The setting field. + * + * @return The name of the field or if the {@link Setting} annotation of the + * field has a name value, the value of that field. + */ + private String getSettingName(final Field field) { + LOGGER.debug(String.format("Trying to get setting name from field: " + + "\"%s\"", + field.getName())); + final Setting annotation = field.getAnnotation(Setting.class); + + if (annotation.name() == null || annotation.name().isEmpty()) { + return field.getName(); + } else { + return annotation.name(); + } + } + + private void createSetting(final String confName, + final String settingName, + final Field field, + final String valueStr) { + final String settingType = field.getType().getName(); + + final AbstractSetting setting; + if (BigDecimal.class.getName().equals(settingType)) { + try { + final BigDecimal value = new BigDecimal(valueStr); + final BigDecimalSetting bigDecimalSetting + = new BigDecimalSetting(); + bigDecimalSetting.setValue(value); + setting = bigDecimalSetting; + } catch (NumberFormatException ex) { + LOGGER.warn("Can't convert value \"{}\" for setting {}.{} from " + + "integration properties to BigDecimal.", + valueStr, confName, settingName); + return; + } + } else if (Boolean.class.getName().equals(settingType) + || "boolean".equals(settingType)) { + final Boolean value = Boolean.valueOf(valueStr); + final BooleanSetting booleanSetting = new BooleanSetting(); + booleanSetting.setValue(value); + setting = booleanSetting; + } else if (Double.class.getName().equals(settingType) + || "double".equals(settingType)) { + try { + final Double value = Double.valueOf(valueStr); + final DoubleSetting doubleSetting = new DoubleSetting(); + doubleSetting.setValue(value); + setting = doubleSetting; + } catch (NumberFormatException ex) { + LOGGER.warn("Can't convert value \"{}\" for setting {}.{} from " + + "integration properties to Double.", + valueStr, confName, settingName); + return; + } + } else if (Set.class.getName().equals(settingType)) { + final String[] tokens = valueStr.split(","); + final EnumSetting enumSetting = new EnumSetting(); + for (final String token : tokens) { + enumSetting.addEnumValue(token.trim()); + } + setting = enumSetting; + } else if (LocalizedString.class.getName().equals(settingType)) { + final String[] tokens = valueStr.split(","); + final LocalizedStringSetting l10nSetting + = new LocalizedStringSetting(); + for (final String token : tokens) { + final String[] parts = token.split(":"); + if (parts.length != 2) { + LOGGER.warn("Error reading values for " + + "LocalizedStringSetting {}. Token \"{}\" " + + "does not have the correct format " + + "\"locale:value\".", + confName, settingName, token); + continue; + } + l10nSetting.getValue().addValue(new Locale(parts[0]), parts[1]); + } + setting = l10nSetting; + } else if (Long.class.getName().equals(settingType) + || "long".equals(settingType)) { + try { + final Long value = Long.parseLong(valueStr); + final LongSetting longSetting = new LongSetting(); + longSetting.setValue(value); + setting = longSetting; + } catch (NumberFormatException ex) { + LOGGER.warn("Can't convert value \"{}\" for setting {}.{} from " + + "integration properties to Long.", + valueStr, confName, settingName); + return; + } + } else if (List.class.getName().equals(settingType)) { + final String[] tokens = valueStr.split(","); + final StringListSetting listSetting = new StringListSetting(); + for (final String token : tokens) { + listSetting.addListValue(token.trim()); + } + setting = listSetting; + } else if (String.class.getName().equals(settingType)) { + final StringSetting strSetting = new StringSetting(); + strSetting.setValue(valueStr); + setting = strSetting; + } else { + throw new IllegalArgumentException(String.format( + "No setting type for field type \"%s\" available.", + settingType)); + } + + setting.setConfigurationClass(confName); + setting.setName(settingName); + entityManager.persist(setting); + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/configuration/ConfigurationManagerTest.java b/ccm-core/src/test/java/org/libreccm/configuration/ConfigurationManagerTest.java index 12c8bcdf0..934670bec 100644 --- a/ccm-core/src/test/java/org/libreccm/configuration/ConfigurationManagerTest.java +++ b/ccm-core/src/test/java/org/libreccm/configuration/ConfigurationManagerTest.java @@ -35,7 +35,6 @@ import org.jboss.arquillian.persistence.UsingDataSet; import org.jboss.arquillian.transaction.api.annotation.TransactionMode; import org.jboss.arquillian.transaction.api.annotation.Transactional; import org.jboss.shrinkwrap.api.ShrinkWrap; -import org.jboss.shrinkwrap.api.asset.EmptyAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; @@ -160,8 +159,8 @@ public class ConfigurationManagerTest { "datasets/org/libreccm/configuration/ConfigurationManagerTest/data.yml") @InSequence(1100) public void loadConfiguration() { - final ExampleConfiguration configuration = configurationManager - .findConfiguration(ExampleConfiguration.class); + final TestExampleConfiguration configuration = configurationManager + .findConfiguration(TestExampleConfiguration.class); assertThat(configuration, is(not(nullValue()))); assertThat(configuration.getPrice(), @@ -184,8 +183,8 @@ public class ConfigurationManagerTest { + "after-save-changed.yml") @InSequence(1200) public void saveConfiguration() { - final ExampleConfiguration configuration = configurationManager - .findConfiguration(ExampleConfiguration.class); + final TestExampleConfiguration configuration = configurationManager + .findConfiguration(TestExampleConfiguration.class); configuration.setPrice(new BigDecimal("109.99")); configuration.setItemsPerPage(30L); diff --git a/ccm-core/src/test/java/org/libreccm/configuration/ExampleConfiguration.java b/ccm-core/src/test/java/org/libreccm/configuration/TestExampleConfiguration.java similarity index 98% rename from ccm-core/src/test/java/org/libreccm/configuration/ExampleConfiguration.java rename to ccm-core/src/test/java/org/libreccm/configuration/TestExampleConfiguration.java index 8e3d4d366..4d0c76b7b 100644 --- a/ccm-core/src/test/java/org/libreccm/configuration/ExampleConfiguration.java +++ b/ccm-core/src/test/java/org/libreccm/configuration/TestExampleConfiguration.java @@ -27,7 +27,7 @@ import java.util.Set; * @author Jens Pelzetter */ @Configuration -public class ExampleConfiguration { +public class TestExampleConfiguration { @Setting private BigDecimal price; diff --git a/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java b/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java new file mode 100644 index 000000000..15898b3f4 --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/ConfigurationLoaderTest.java @@ -0,0 +1,141 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules; + +import org.jboss.arquillian.container.test.api.Deployment; +import org.jboss.arquillian.junit.Arquillian; +import org.jboss.arquillian.persistence.CreateSchema; +import org.jboss.arquillian.persistence.PersistenceTest; +import org.jboss.arquillian.persistence.ShouldMatchDataSet; +import org.jboss.arquillian.transaction.api.annotation.TransactionMode; +import org.jboss.arquillian.transaction.api.annotation.Transactional; +import org.jboss.shrinkwrap.api.ShrinkWrap; +import org.jboss.shrinkwrap.api.asset.EmptyAsset; +import org.jboss.shrinkwrap.api.spec.WebArchive; +import org.jboss.shrinkwrap.resolver.api.maven.Maven; +import org.jboss.shrinkwrap.resolver.api.maven.PomEquippedResolveStage; +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.libreccm.configuration.ExampleConfiguration; +import org.libreccm.tests.categories.IntegrationTest; + +import java.io.File; + +import javax.inject.Inject; +import javax.persistence.EntityManager; + + +/** + * + * @author Jens Pelzetter + */ +@Category(IntegrationTest.class) +@RunWith(Arquillian.class) +@PersistenceTest +@Transactional(TransactionMode.COMMIT) +@CreateSchema({"create_ccm_core_schema.sql"}) +public class ConfigurationLoaderTest { + + @Inject + private EntityManager entityManager; + + public ConfigurationLoaderTest() { + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + + @Deployment + public static WebArchive createDeployment() { + final PomEquippedResolveStage pom = Maven + .resolver() + .loadPomFromFile("pom.xml"); + final PomEquippedResolveStage dependencies = pom + .importCompileAndRuntimeDependencies(); + final File[] libs = dependencies.resolve().withTransitivity().asFile(); + + for (File lib : libs) { + System.err.printf("Adding file '%s' to test archive...%n", + lib.getName()); + } + + return ShrinkWrap + .create(WebArchive.class, + "LibreCCM-org.libreccm.modules.ConfigurationLoaderTest.war") + //.addPackage(org.libreccm.categorization.Category.class.getPackage()) + .addPackage(org.libreccm.configuration.Configuration.class + .getPackage()) + //.addPackage(org.libreccm.core.CcmObject.class.getPackage()) + .addPackage(org.libreccm.jpa.EntityManagerProducer.class + .getPackage()) + .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class + .getPackage()) + .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()) + .addClass(org.libreccm.modules.ConfigurationLoader.class) + //.addPackage(org.libreccm.security.Permission.class.getPackage()) + //.addPackage(org.libreccm.workflow.Workflow.class.getPackage()) + .addPackage(org.libreccm.tests.categories.IntegrationTest.class + .getPackage()) + .addPackage(org.libreccm.testutils.EqualsVerifier.class. + getPackage()) + .addPackage(org.libreccm.cdi.utils.CdiUtil.class.getPackage()) + .addAsLibraries(libs) + .addAsResource("test-persistence.xml", + "META-INF/persistence.xml") + .addAsResource( + "configs/org/libreccm/modules/ConfigurationLoaderTest/" + + "log4j2.xml", + "log4j2.xml") +// .addAsWebInfResource(EmptyAsset.INSTANCE, "web.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml") + .addAsResource( + "configs/org/libreccm/modules/ConfigurationLoaderTest/" + + "test-integration.properties", "integration.properties"); + } + + @Test + @ShouldMatchDataSet( + value = "datasets/org/libreccm/modules/ConfigurationLoaderTest/" + + "after-load.yml", + excludeColumns = {"setting_id", "entry_id"}) + public void loadConfiguration() { + final ConfigurationLoader confLoader = new ConfigurationLoader( + entityManager); + confLoader.loadConfiguration(ExampleConfiguration.class); + } + +} diff --git a/ccm-core/src/test/java/org/libreccm/modules/DatasetsTest.java b/ccm-core/src/test/java/org/libreccm/modules/DatasetsTest.java new file mode 100644 index 000000000..0a872b3c3 --- /dev/null +++ b/ccm-core/src/test/java/org/libreccm/modules/DatasetsTest.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2016 LibreCCM Foundation. + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301 USA + */ +package org.libreccm.modules; + +import static org.libreccm.testutils.DatasetType.*; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.experimental.categories.Category; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.libreccm.tests.categories.UnitTest; +import org.libreccm.testutils.DatasetType; +import org.libreccm.testutils.DatasetsVerifier; + +import java.util.Arrays; +import java.util.Collection; + +import static org.junit.Assert.*; + +/** + * + * @author Jens Pelzetter + */ +@RunWith(Parameterized.class) +@Category(UnitTest.class) +public class DatasetsTest extends DatasetsVerifier { + + @Parameterized.Parameters(name = "Dataset {0}") + public static Collection data() { + return Arrays.asList(new String[]{ + "/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.yml",}); + } + + public DatasetsTest(final String datasetPath) { + super(datasetPath); + } + + @Override + public String[] getSchemas() { + return new String[]{"ccm_core"}; + } + + @Override + public DatasetType getDatasetType() { + return YAML; + } + + @BeforeClass + public static void setUpClass() { + } + + @AfterClass + public static void tearDownClass() { + } + + @Before + public void setUp() { + } + + @After + public void tearDown() { + } + +} diff --git a/ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/log4j2.xml b/ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/log4j2.xml new file mode 100644 index 000000000..d67e94776 --- /dev/null +++ b/ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/log4j2.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + diff --git a/ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/test-integration.properties b/ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/test-integration.properties new file mode 100644 index 000000000..855015247 --- /dev/null +++ b/ccm-core/src/test/resources/configs/org/libreccm/modules/ConfigurationLoaderTest/test-integration.properties @@ -0,0 +1,5 @@ +foo.bar=This should be ignored +org.libreccm.configuration.ExampleConfiguration.enabled=true +org.libreccm.configuration.ExampleConfiguration.itemsPerPage=100 +org.libreccm.configuration.ExampleConfiguration.title=de:Versuch,en:Test + diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.yml b/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.yml new file mode 100644 index 000000000..2281b584a --- /dev/null +++ b/ccm-core/src/test/resources/datasets/org/libreccm/modules/ConfigurationLoaderTest/after-load.yml @@ -0,0 +1,23 @@ +ccm_core.settings: + - setting_id: -100 + configuration_class: org.libreccm.configuration.ExampleConfiguration + name: enabled + setting_value_boolean: true + dtype: BooleanSetting + - setting_id: -110 + configuration_class: org.libreccm.configuration.ExampleConfiguration + name: itemsPerPage + setting_value_long: 100 + dtype: LongSetting + - setting_id: -120 + configuration_class: org.libreccm.configuration.ExampleConfiguration + name: title + dtype: LocalizedStringSetting +ccm_core.settings_l10n_str_values: + - entry_id: -120 + locale: de + localized_value: Versuch + - entry_id: -120 + locale: en + localized_value: Test +