cdi source and filter detection
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/0cb288d0 Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/0cb288d0 Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/0cb288d0 Branch: refs/heads/master Commit: 0cb288d092ef8131c84dfab33870a65331ecd079 Parents: 6d0c4a2 Author: rmannibucau <rmannibu...@apache.org> Authored: Mon Nov 7 09:35:09 2016 +0100 Committer: rmannibucau <rmannibu...@apache.org> Committed: Mon Nov 7 09:35:09 2016 +0100 ---------------------------------------------------------------------- .../impl/config/ConfigurationExtension.java | 29 +++++++++++++ .../core/api/config/injectable/CdiFilter.java | 39 +++++++++++++++++ .../core/api/config/injectable/CdiSource.java | 44 ++++++++++++++++++++ .../InjectableConfigPropertyTest.java | 10 ++++- .../api/config/injectable/SettingsBean.java | 8 ++++ 5 files changed, 129 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0cb288d0/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigurationExtension.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigurationExtension.java b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigurationExtension.java index accabae..63b1867 100644 --- a/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigurationExtension.java +++ b/deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/config/ConfigurationExtension.java @@ -47,8 +47,10 @@ import org.apache.deltaspike.core.api.config.ConfigProperty; import org.apache.deltaspike.core.api.config.ConfigResolver; import org.apache.deltaspike.core.api.config.PropertyFileConfig; import org.apache.deltaspike.core.api.exclude.Exclude; +import org.apache.deltaspike.core.api.provider.BeanProvider; import org.apache.deltaspike.core.spi.activation.Deactivatable; import org.apache.deltaspike.core.spi.config.BaseConfigPropertyProducer; +import org.apache.deltaspike.core.spi.config.ConfigFilter; import org.apache.deltaspike.core.spi.config.ConfigSource; import org.apache.deltaspike.core.spi.config.ConfigValidator; import org.apache.deltaspike.core.util.ClassDeactivationUtils; @@ -85,6 +87,9 @@ public class ConfigurationExtension implements Extension, Deactivatable private final Set<Type> dynamicConfigTypes = new HashSet<Type>(); private Bean<DynamicBeanProducer> dynamicProducer; + private final List<Bean<? extends ConfigSource>> cdiSources = new ArrayList<Bean<? extends ConfigSource>>(); + private final List<Bean<? extends ConfigFilter>> cdiFilters = new ArrayList<Bean<? extends ConfigFilter>>(); + @SuppressWarnings("UnusedDeclaration") protected void init(@Observes BeforeBeanDiscovery beforeBeanDiscovery) { @@ -120,6 +125,21 @@ public class ConfigurationExtension implements Extension, Deactivatable propertyFileConfigClasses.add(pcsClass); } + public void findSources(@Observes ProcessBean<? extends ConfigSource> source) + { + final Class<?> beanClass = source.getBean().getBeanClass(); + if (beanClass != null && beanClass.getName().startsWith("org.apache.deltaspike.core.impl.config.")) // built-in + { + return; + } + cdiSources.add(source.getBean()); + } + + public void findFilters(@Observes ProcessBean<? extends ConfigFilter> filter) + { + cdiFilters.add(filter.getBean()); + } + public void findDynamicProducer(@Observes ProcessBean<DynamicBeanProducer> processBean) { dynamicProducer = processBean.getBean(); @@ -178,10 +198,19 @@ public class ConfigurationExtension implements Extension, Deactivatable configSources.addAll(createPropertyConfigSource(propertyFileConfigClass)); } + for (final Bean bean : cdiSources) + { + configSources.add(BeanProvider.getContextualReference(ConfigSource.class, bean)); + } // finally add all ConfigResolver.addConfigSources(configSources); + for (final Bean bean : cdiFilters) + { + ConfigResolver.addConfigFilter(BeanProvider.getContextualReference(ConfigFilter.class, bean)); + } + processConfigurationValidation(adv); } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0cb288d0/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiFilter.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiFilter.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiFilter.java new file mode 100644 index 0000000..8ca6031 --- /dev/null +++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiFilter.java @@ -0,0 +1,39 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.deltaspike.test.core.api.config.injectable; + +import org.apache.deltaspike.core.spi.config.ConfigFilter; + +import javax.enterprise.context.ApplicationScoped; + +@ApplicationScoped +public class CdiFilter implements ConfigFilter +{ + @Override + public String filterValue(final String key, final String value) + { + return "custom-source.test".equals(key) ? new StringBuilder(value).reverse().toString() : value; + } + + @Override + public String filterValueForLog(final String key, final String value) + { + return value; + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0cb288d0/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiSource.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiSource.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiSource.java new file mode 100644 index 0000000..facd83f --- /dev/null +++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/CdiSource.java @@ -0,0 +1,44 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.deltaspike.test.core.api.config.injectable; + +import org.apache.deltaspike.core.impl.config.MapConfigSource; + +import javax.enterprise.context.ApplicationScoped; +import java.util.HashMap; +import java.util.Map; + +@ApplicationScoped +public class CdiSource extends MapConfigSource +{ + public CdiSource() { + super(create()); + } + + private static Map<String, String> create() { + final Map<String, String> map = new HashMap<String, String>(); + map.put("custom-source.test", "eulav"); + return map; + } + + @Override + public String getConfigName() { + return "cdi-test"; + } +} http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0cb288d0/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/InjectableConfigPropertyTest.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/InjectableConfigPropertyTest.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/InjectableConfigPropertyTest.java index d6f11c2..aea89ed 100644 --- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/InjectableConfigPropertyTest.java +++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/InjectableConfigPropertyTest.java @@ -111,9 +111,17 @@ public class InjectableConfigPropertyTest } @Test - public void checkDynamicConvertedInjections() throws MalformedURLException { + public void checkDynamicConvertedInjections() throws MalformedURLException + { SettingsBean settingsBean = BeanProvider.getContextualReference(SettingsBean.class, false); assertEquals(asList(new URL("http://localhost"), new URL("http://127.0.0.1")), settingsBean.getUrlList()); assertEquals(singletonList(new URL("http://127.0.0.2")), settingsBean.getUrlListFromProperties()); } + + @Test + public void checkCdiSourceFilter() throws MalformedURLException + { + SettingsBean settingsBean = BeanProvider.getContextualReference(SettingsBean.class, false); + assertEquals("value", settingsBean.getCustomSourceValue()); + } } http://git-wip-us.apache.org/repos/asf/deltaspike/blob/0cb288d0/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/SettingsBean.java ---------------------------------------------------------------------- diff --git a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/SettingsBean.java b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/SettingsBean.java index b542e77..b8848e4 100644 --- a/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/SettingsBean.java +++ b/deltaspike/core/impl/src/test/java/org/apache/deltaspike/test/core/api/config/injectable/SettingsBean.java @@ -105,6 +105,10 @@ public class SettingsBean @ConfigProperty(name = "urlListFromProperties", converter = UrlList.class) private List<URL> urlListFromProperties; + @Inject + @ConfigProperty(name = "custom-source.test") + private String customSourceValue; + protected SettingsBean() { } @@ -215,6 +219,10 @@ public class SettingsBean return urlListFromProperties; } + public String getCustomSourceValue() { + return customSourceValue; + } + public static class UrlList implements ConfigResolver.Converter<List<URL>> { @Override