@Override public ConfigResolver.TypedResolver<T> parameterizedBy(String propertyName) { this.propertyParameter = propertyName; if (propertyParameter != null && !propertyParameter.isEmpty()) { String parameterValue = ConfigResolver .resolve(propertyParameter) .withCurrentProjectStage(projectStageAware) .getValue(); if (parameterValue != null && !parameterValue.isEmpty()) { this.parameterValue = parameterValue; } } return this; }
private void logConfiguration() { Boolean logConfig = ConfigResolver.resolve(ConfigResolver.DELTASPIKE_LOG_CONFIG).as(Boolean.class).getValue(); if (logConfig != null && logConfig && LOG.isLoggable(Level.INFO)) { StringBuilder sb = new StringBuilder(1 << 16); // first log out the config sources in descendent ordinal order sb.append("ConfigSources: "); ConfigSource[] configSources = ConfigResolver.getConfigSources(); for (ConfigSource configSource : configSources) { sb.append("\n\t").append(configSource.getOrdinal()).append(" - ").append(configSource.getConfigName()); } // and all the entries in no guaranteed order Map<String, String> allProperties = ConfigResolver.getAllProperties(); sb.append("\n\nConfigured Values:"); for (Map.Entry<String, String> entry : allProperties.entrySet()) { sb.append("\n\t") .append(entry.getKey()) .append(" = ") .append(ConfigResolver.filterConfigValueForLog(entry.getKey(), entry.getValue())); } LOG.info(sb.toString()); } }
public <T> ConfigResolver.TypedResolver<T> asResolver(final String key, final String stringDefault, final Type ipCls, final Class<? extends ConfigResolver.Converter> converterType, final String parameterizedBy, final boolean projectStageAware, final boolean evaluate) { final ConfigResolver.UntypedResolver<String> untypedResolver = ConfigResolver.resolve(key); final ConfigResolver.TypedResolver<T> resolver = (ConfigResolver.Converter.class == converterType ? untypedResolver.as(Class.class.cast(ipCls)) : untypedResolver.as(ipCls, BeanProvider.getContextualReference(converterType))) .withCurrentProjectStage(projectStageAware); if (!ConfigProperty.NULL.equals(stringDefault)) { resolver.withStringDefault(stringDefault); } if (!ConfigProperty.NULL.equals(parameterizedBy)) { resolver.parameterizedBy(parameterizedBy); } return resolver.evaluateVariables(evaluate); } }
public <T> ConfigResolver.TypedResolver<T> asResolver(final String key, final String stringDefault, final Type ipCls, final Class<? extends ConfigResolver.Converter> converterType, final String parameterizedBy, final boolean projectStageAware, final boolean evaluate) { final ConfigResolver.UntypedResolver<String> untypedResolver = ConfigResolver.resolve(key); final ConfigResolver.TypedResolver<T> resolver = (ConfigResolver.Converter.class == converterType ? untypedResolver.as(Class.class.cast(ipCls)) : untypedResolver.as(ipCls, BeanProvider.getContextualReference(converterType))) .withCurrentProjectStage(projectStageAware); if (!ConfigProperty.NULL.equals(stringDefault)) { resolver.withStringDefault(stringDefault); } if (!ConfigProperty.NULL.equals(parameterizedBy)) { resolver.parameterizedBy(parameterizedBy); } return resolver.evaluateVariables(evaluate); } }
@Test public void testConverter() { Assert.assertEquals(new GregorianCalendar(2014, 12, 24).getTime(), ConfigResolver.resolve("deltaspike.test.date-value") .as(Date.class, new TestDateConverter()).getValue()); // test fallback to default Assert.assertEquals(new GregorianCalendar(2015, 01, 01).getTime(), ConfigResolver.resolve("deltaspike.test.INVALID-date-value") .as(Date.class, new TestDateConverter()) .withDefault(new GregorianCalendar(2015, 01, 01).getTime()) .getValue()); }
@Test public void testConfiguredListValues_WithEscaping() { List<String> escapedValues = ConfigResolver.resolve("test.list.value.escaped.list").asList().getValue(); Assert.assertNotNull(escapedValues); Assert.assertEquals(3, escapedValues.size()); Assert.assertTrue(escapedValues.contains("val,ue1")); Assert.assertTrue(escapedValues.contains("value2")); Assert.assertTrue(escapedValues.contains("val\\ue3")); }
@Test public void testConfiguredListValues_WithWhitespace() { List<String> emails = ConfigResolver.resolve("test.list.value.emails").asList().getValue(); Assert.assertNotNull(emails); Assert.assertEquals(3, emails.size()); Assert.assertTrue(emails.contains("test1@apache.org")); Assert.assertTrue(emails.contains("test2@apache.org")); Assert.assertTrue(emails.contains("test3@apache.org")); }
@Test public void testConfiguredListValues_WithDefault() { List<Integer> intValues = ConfigResolver.resolve("test.list.not_existing").as(Integer.class).asList().withDefault(Arrays.asList(99, 88, 77)).getValue(); Assert.assertNotNull(intValues); Assert.assertEquals(3, intValues.size()); Assert.assertTrue(intValues.contains(99)); Assert.assertTrue(intValues.contains(88)); Assert.assertTrue(intValues.contains(77)); }
@Test public void testValidTypes() { Assert.assertEquals("configured", ConfigResolver.resolve("deltaspike.test.string-value").getValue()); Assert.assertEquals(Boolean.FALSE, ConfigResolver.resolve("deltaspike.test.boolean-value").as(Boolean.class) .getValue()); Assert.assertEquals(TestConfigSource.class, ConfigResolver.resolve("deltaspike.test.class-value").as(Class .class).getValue()); Assert.assertEquals(5l, (int) ConfigResolver.resolve("deltaspike.test.integer-value").as(Integer.class) .getValue()); Assert.assertEquals(8589934592l, (long) ConfigResolver.resolve("deltaspike.test.long-value").as(Long.class) .getValue()); Assert.assertEquals(-1.1f, (float) ConfigResolver.resolve("deltaspike.test.float-value").as(Float.class) .getValue(), 0); Assert.assertEquals(4e40d, (double) ConfigResolver.resolve("deltaspike.test.double-value").as(Double.class) .getValue(), 0); }
@Test public void testConfiguredListValues_OtherType() { List<Integer> intValues = ConfigResolver.resolve("test.list.intvalues").as(Integer.class).asList().getValue(); Assert.assertNotNull(intValues); Assert.assertEquals(4, intValues.size()); Assert.assertTrue(intValues.contains(3)); Assert.assertTrue(intValues.contains(7)); Assert.assertTrue(intValues.contains(11)); Assert.assertTrue(intValues.contains(17)); }
@Test public void testProjectStageAware() { Assert.assertEquals("unittestvalue", ConfigResolver.resolve("testkey") .withCurrentProjectStage(true) .getValue()); Assert.assertEquals("testvalue", ConfigResolver.resolve("testkey") .withCurrentProjectStage(false) .getValue()); // property without PS, with PS-aware Assert.assertEquals("testvalue", ConfigResolver.resolve("testkey2") .withCurrentProjectStage(true) .getValue()); }
@Test public void testConfiguredListValues_NotExisting() { List<Integer> intValues = ConfigResolver.resolve("test.list.not_existing").as(Integer.class).asList().getValue(); Assert.assertNotNull(intValues); Assert.assertEquals(0, intValues.size()); }
@Test public void testConfigVariableRecursiveDeclaration() { String url = ConfigResolver.getPropertyValue("deltaspike.test.recursive.variable1", "", true); Assert.assertEquals("pre-crazy-post/ohgosh/crazy", url); ConfigResolver.TypedResolver<String> tr = ConfigResolver.resolve("deltaspike.test.recursive.variable1") .evaluateVariables(true).logChanges(true); Assert.assertEquals("pre-crazy-post/ohgosh/crazy", tr.getValue()); }
@Test public void testStrict() { Assert.assertEquals("TestDataSource", ConfigResolver.resolve("dataSource") .withCurrentProjectStage(true) .parameterizedBy("dbvendor") .strictly(true) .getValue()); // no base.param, no value for base.param.ps Assert.assertEquals(null, ConfigResolver.resolve("dataSource") .withCurrentProjectStage(true) .parameterizedBy("dbvendor3") .strictly(true) .getValue()); // valid base.param, but no base.param.ps Assert.assertEquals(null, ConfigResolver.resolve("dataSource") .withCurrentProjectStage(true) .parameterizedBy("dbvendor2") .strictly(true) .getValue()); }
@Test public void testTypedResolver_OnChange() { final String key = "non.existing.key"; final AtomicInteger valueChanged = new AtomicInteger(0); ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve(key) .logChanges(true) .onChange((k, oldValue, newValue) -> { Assert.assertEquals(key, k); valueChanged.incrementAndGet(); }); Assert.assertNull(resolver.getValue()); setTestConfigSourceValue(key, "somevalue"); Assert.assertEquals("somevalue", resolver.getValue()); Assert.assertEquals(1, valueChanged.get()); setTestConfigSourceValue(key, "newvalue"); Assert.assertEquals("newvalue", resolver.getValue()); Assert.assertEquals(2, valueChanged.get()); // this time we do not change anything Assert.assertEquals("newvalue", resolver.getValue()); Assert.assertEquals(2, valueChanged.get()); // last change setTestConfigSourceValue(key, null); Assert.assertNull(resolver.getValue()); Assert.assertEquals(3, valueChanged.get()); }
@Test public void testTypedResolver_NonExistingValue() { final String key = "non.existing.key"; ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve(key) .logChanges(true); Assert.assertNull(resolver.getValue()); setTestConfigSourceValue(key, "somevalue"); Assert.assertEquals("somevalue", resolver.getValue()); setTestConfigSourceValue(key, null); Assert.assertNull(resolver.getValue()); }
@Test public void testGets() { ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve("dataSource") .withCurrentProjectStage(true) .parameterizedBy("dbvendor") .withDefault("TESTDEFAULT"); Assert.assertEquals("TestDataSource", resolver.getValue()); Assert.assertEquals("dataSource", resolver.getKey()); Assert.assertEquals("TESTDEFAULT", resolver.getDefaultValue()); Assert.assertEquals("dataSource.mysql.UnitTest", resolver.getResolvedKey()); ConfigResolver.TypedResolver<String> resolver2 = ConfigResolver.resolve("testkey2") .withCurrentProjectStage(true) .parameterizedBy("INVALIDPARAMETER"); Assert.assertEquals("testvalue", resolver2.getValue()); Assert.assertEquals("testkey2", resolver2.getResolvedKey()); }
@Test public void testWithCacheTime() throws Exception { ConfigResolver.TypedResolver<String> resolver = ConfigResolver.resolve("dataSource") .withCurrentProjectStage(true) .parameterizedBy("dbvendor") .cacheFor(TimeUnit.MILLISECONDS, 5) .withDefault("TESTDEFAULT"); Assert.assertEquals("TestDataSource", resolver.getValue()); Assert.assertEquals("TestDataSource", resolver.getValue()); Assert.assertEquals("dataSource", resolver.getKey()); Assert.assertEquals("TESTDEFAULT", resolver.getDefaultValue()); Assert.assertEquals("dataSource.mysql.UnitTest", resolver.getResolvedKey()); // because the clock steps in certain OS is only 16ms Thread.sleep(35L); Assert.assertEquals("TestDataSource", resolver.getValue()); }
@Test public void testGetProjectStageAwarePropertyValue() { ProjectStageProducer.setProjectStage(ProjectStage.UnitTest); Assert.assertNull(ConfigResolver.getProjectStageAwarePropertyValue("notexisting", null)); Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey")); Assert.assertEquals("unittestvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey")); Assert.assertEquals("unittestvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey", null)); Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey2")); Assert.assertEquals("testvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey2")); Assert.assertEquals("testvalue", ConfigResolver.getProjectStageAwarePropertyValue("testkey2", null)); Assert.assertEquals("testvalue", ConfigResolver.getPropertyValue("testkey3")); Assert.assertEquals("", ConfigResolver.getProjectStageAwarePropertyValue("testkey3")); Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.getProjectStageAwarePropertyValue("testkey3", DEFAULT_VALUE)); Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.getProjectStageAwarePropertyValue("deltaspike.test.projectstagefallback", DEFAULT_VALUE)); Assert.assertEquals("", ConfigResolver.getProjectStageAwarePropertyValue("deltaspike.test.projectstagefallback")); Assert.assertEquals(DEFAULT_VALUE, ConfigResolver.resolve("deltaspike.test.projectstagefallback").as(String.class).withDefault(DEFAULT_VALUE).withCurrentProjectStage(true).getValue()); Assert.assertEquals("", ConfigResolver.resolve("deltaspike.test.projectstagefallback").as(String.class).withCurrentProjectStage(true).getValue()); }