You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tamaya.apache.org by an...@apache.org on 2018/01/03 00:09:00 UTC
[04/18] incubator-tamaya-extensions git commit: Adapted to comply
with JSR API.
Adapted to comply with JSR API.
Signed-off-by: Anatole Tresch <an...@apache.org>
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/commit/581c92e7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/581c92e7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/581c92e7
Branch: refs/heads/configjsr
Commit: 581c92e70777af1fa9ec6a4af0ca8d95b334526b
Parents: 06f29e1
Author: Anatole Tresch <an...@apache.org>
Authored: Mon Dec 25 11:41:21 2017 +0100
Committer: Anatole Tresch <an...@apache.org>
Committed: Mon Dec 25 11:41:21 2017 +0100
----------------------------------------------------------------------
modules/functions/pom.xml | 5 -
.../tamaya/functions/CombinedConfiguration.java | 130 ++----
.../functions/ConfigWrappingConfigSource.java | 73 ++++
.../functions/ConfigWrappingPropertySource.java | 84 ----
.../functions/ConfigurationFunctions.java | 415 ++++++------------
.../tamaya/functions/EnrichedConfiguration.java | 138 ++----
.../tamaya/functions/FilteredConfiguration.java | 88 +---
.../tamaya/functions/MappedConfiguration.java | 92 ++--
.../functions/CombinedConfigurationTest.java | 420 ++++++-------------
.../functions/ConfigurationFunctionsTest.java | 38 +-
.../functions/EnrichedConfigurationTest.java | 355 +++++++---------
.../functions/MappedConfigurationTest.java | 11 +-
12 files changed, 620 insertions(+), 1229 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/pom.xml
----------------------------------------------------------------------
diff --git a/modules/functions/pom.xml b/modules/functions/pom.xml
index 839b67e..17de980 100644
--- a/modules/functions/pom.xml
+++ b/modules/functions/pom.xml
@@ -32,11 +32,6 @@ under the License.
<packaging>jar</packaging>
<dependencies>
- <dependency>
- <groupId>org.apache.tamaya</groupId>
- <artifactId>tamaya-api</artifactId>
- <version>${tamaya-apicore.version}</version>
- </dependency>
<!-- Test scope only, do not create a code dependency! -->
<dependency>
<groupId>org.apache.tamaya</groupId>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/CombinedConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/CombinedConfiguration.java b/modules/functions/src/main/java/org/apache/tamaya/functions/CombinedConfiguration.java
index 2e3f0cc..10961b4 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/CombinedConfiguration.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/CombinedConfiguration.java
@@ -18,19 +18,15 @@
*/
package org.apache.tamaya.functions;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-
+import javax.config.Config;
+import javax.config.spi.ConfigSource;
import java.util.*;
/**
* Combines a set of child configurations to a new one, by overriding the first entries with result from
* later instances.
*/
-class CombinedConfiguration implements Configuration{
+class CombinedConfiguration implements Config{
/** The name of the new configuration. */
private final String name;
@@ -38,85 +34,48 @@ class CombinedConfiguration implements Configuration{
* The configuration's in evaluation order. Instances with higher indices
* override results with lower ones.
*/
- private final ArrayList<Configuration> configurations = new ArrayList<>();
+ private final ArrayList<Config> configurations = new ArrayList<>();
/**
* Creates a combined configuration instance.
* @param configName the name of the new config.
* @param configs the configurations hereby instances with higher indices override results with lower ones.
*/
- public CombinedConfiguration(String configName, Configuration... configs) {
+ public CombinedConfiguration(String configName, Config... configs) {
this.name = configName;
if (null != configs) {
- for (Configuration config : configs) {
+ for (Config config : configs) {
if (config == null) {
continue;
}
-
- addConfiguration(config);
+ configurations.add(config);
}
}
}
@Override
- public String get(String key) {
- String curValue = null;
- for(Configuration config: getConfigurations()){
- String value = config.get(key);
- if(value!=null){
- curValue = value;
+ public <T> T getValue(String key, Class<T> type) {
+ T curValue = null;
+ for(Config config: configurations){
+ Optional<T> value = config.getOptionalValue(key, type);
+ if(value.isPresent()){
+ curValue = value.get();
}
}
return curValue;
}
@Override
- public String getOrDefault(String key, String defaultValue) {
+ public <T> Optional<T> getOptionalValue(String key, Class<T> type) {
Objects.requireNonNull(key, "Key must be given.");
- Objects.requireNonNull(defaultValue, "Value must be given.");
-
- String val = get(key);
-
- if (val == null) {
- return defaultValue;
- }
-
- return val;
- }
-
- @Override
- public <T> T getOrDefault(String key, Class<T> type, T defaultValue) {
Objects.requireNonNull(type, "Type must be given.");
- Objects.requireNonNull(key, "Key must be given.");
- Objects.requireNonNull(defaultValue, "Default value must be given.");
-
- T val = get(key, type);
- if(val==null){
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public <T> T get(String key, Class<T> type) {
- T curValue = null;
- for(Configuration config: getConfigurations()){
- T value = config.get(key, type);
- if(value!=null){
- curValue = value;
- }
- }
- return curValue;
- }
- @Override
- public <T> T get(String key, TypeLiteral<T> type) {
- T curValue = null;
- for(Configuration config: getConfigurations()){
- T value = config.get(key, type);
- if(value!=null){
+ Optional<T> curValue = Optional.empty();
+ for(Config config: configurations){
+ Optional<T> value = config.getOptionalValue(key, type);
+ if(value!=null && value.isPresent()){
curValue = value;
}
}
@@ -124,45 +83,21 @@ class CombinedConfiguration implements Configuration{
}
@Override
- public <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue) {
- Objects.requireNonNull(key, "Key must be given.");
- Objects.requireNonNull(type, "Type must be given.");
- Objects.requireNonNull(defaultValue, "Default value must be given.");
-
- T val = get(key, type);
- if(val==null){
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public Map<String, String> getProperties() {
- Map<String, String> result = new HashMap<>();
- for(Configuration ps : getConfigurations()){
- result.putAll(ps.getProperties());
+ public Iterable<String> getPropertyNames() {
+ Set<String> result = new HashSet<>();
+ for(Config ps : configurations){
+ ps.getPropertyNames().forEach(result::add);
}
return result;
}
@Override
- public Configuration with(ConfigOperator operator) {
- Objects.requireNonNull(operator, "Operator must be given.");
-
- return operator.operate(this);
- }
-
- @Override
- public <T> T query(ConfigQuery<T> query) {
- Objects.requireNonNull(query, "Query must be given.");
-
- return query.query(this);
- }
-
- @Override
- public ConfigurationContext getContext() {
- // TODO thjink on combining the participating contexts...
- return configurations.get(0).getContext();
+ public Iterable<ConfigSource> getConfigSources() {
+ List<ConfigSource> configSources = new ArrayList<>();
+ for(Config ps : configurations){
+ ps.getConfigSources().forEach(configSources::add);
+ }
+ return configSources;
}
@Override
@@ -173,13 +108,4 @@ class CombinedConfiguration implements Configuration{
'}';
}
- protected void addConfiguration(Configuration config) {
- configurations.add(config);
- }
-
- protected List<Configuration> getConfigurations() {
- return configurations;
- }
-
-
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingConfigSource.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingConfigSource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingConfigSource.java
new file mode 100644
index 0000000..3461ed4
--- /dev/null
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingConfigSource.java
@@ -0,0 +1,73 @@
+/*
+ * 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.tamaya.functions;
+
+import javax.config.Config;
+import javax.config.spi.ConfigSource;
+import java.util.*;
+
+/**
+ * PropertySource that wraps a Configuration instance.
+ */
+final class ConfigWrappingConfigSource implements ConfigSource {
+ /** The property source name. */
+ private final String name;
+ /** The ordinal. */
+ private final int ordinal;
+ /** The wrapped config. */
+ private final Config config;
+
+ /**
+ * Constructor.
+ * @param name the property source name, not null.
+ * @param ordinal ths ordinal
+ * @param config the wrapped config, not null.
+ */
+ public ConfigWrappingConfigSource(String name, int ordinal, Config config){
+ this.name = Objects.requireNonNull(name);
+ this.ordinal = ordinal;
+ this.config = Objects.requireNonNull(config);
+ }
+
+ public int getOrdinal() {
+ return ordinal;
+ }
+
+ @Override
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public String getValue(String key) {
+ return config.getOptionalValue(key, String.class).orElse(null);
+ }
+
+ @Override
+ public Map<String,String> getProperties() {
+ Map<String,String> result = new HashMap<>();
+ config.getPropertyNames().forEach(key -> result.put(key, config.getValue(key, String.class)));
+ return result;
+ }
+
+ @Override
+ public String toString(){
+ return "ConfigWrappingPropertySource(name="+name+", ordinal="+ordinal+", config="+config+")";
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingPropertySource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingPropertySource.java
deleted file mode 100644
index dbad205..0000000
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingPropertySource.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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.tamaya.functions;
-
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
-
-/**
- * PropertySource that wraps a Configuration instance.
- */
-final class ConfigWrappingPropertySource implements PropertySource {
- /** The property source name. */
- private final String name;
- /** The ordinal. */
- private final int ordinal;
- /** The wrapped config. */
- private final Configuration config;
-
- /**
- * Constructor.
- * @param name the property source name, not null.
- * @param ordinal ths ordinal
- * @param config the wrapped config, not null.
- */
- public ConfigWrappingPropertySource(String name, int ordinal, Configuration config){
- this.name = Objects.requireNonNull(name);
- this.ordinal = ordinal;
- this.config = Objects.requireNonNull(config);
- }
-
- public int getOrdinal() {
- return ordinal;
- }
-
- @Override
- public String getName() {
- return name;
- }
-
- @Override
- public PropertyValue get(String key) {
- return PropertyValue.of(key, config.get(key), getName());
- }
-
- @Override
- public Map<String, PropertyValue> getProperties() {
- Map<String,PropertyValue> result = new HashMap<>();
- for(Map.Entry<String,String> en:config.getProperties().entrySet()){
- result.put(en.getKey(), PropertyValue.of(en.getKey(), en.getValue(), getName()));
- }
- return result;
- }
-
- @Override
- public boolean isScannable() {
- return true;
- }
-
- @Override
- public String toString(){
- return "ConfigWrappingPropertySource(name="+name+", ordinal="+ordinal+", config="+config+")";
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
index ccb6396..76581b7 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigurationFunctions.java
@@ -18,26 +18,12 @@
*/
package org.apache.tamaya.functions;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-import org.apache.tamaya.spi.ConfigurationContextBuilder;
-import org.apache.tamaya.spi.PropertyConverter;
-import org.apache.tamaya.spi.PropertyFilter;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
-
+import javax.config.Config;
+import javax.config.spi.ConfigSource;
import java.net.Inet4Address;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-import java.util.TreeSet;
+import java.util.*;
+import java.util.function.Function;
+import java.util.function.UnaryOperator;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -54,56 +40,26 @@ public final class ConfigurationFunctions {
/**
* Implementation of an empty propertySource.
*/
- private static final Configuration EMPTY_CONFIGURATION = new Configuration() {
-
- @Override
- public String get(String key) {
- return null;
- }
-
- @Override
- public String getOrDefault(String key, String defaultValue) {
- return defaultValue;
- }
-
- @Override
- public <T> T getOrDefault(String key, Class<T> type, T defaultValue) {
- return defaultValue;
- }
+ private static final Config EMPTY_CONFIGURATION = new Config() {
@Override
- public <T> T get(String key, Class<T> type) {
+ public <T> T getValue(String key, Class<T> type) {
return null;
}
@Override
- public <T> T get(String key, TypeLiteral<T> type) {
- return null;
- }
-
- @Override
- public <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue) {
- return defaultValue;
+ public <T> Optional<T> getOptionalValue(String key, Class<T> type) {
+ return Optional.empty();
}
@Override
- public Map<String, String> getProperties() {
- return Collections.emptyMap();
+ public Iterable<String> getPropertyNames() {
+ return Collections.emptySet();
}
@Override
- public Configuration with(ConfigOperator operator) {
- return operator.operate(this);
- }
-
- @Override
- public <T> T query(ConfigQuery<T> query) {
- return query.query(this);
- }
-
- @Override
- public ConfigurationContext getContext() {
- return EMPTY_CONFIGURATION_CONTEXT;
+ public Iterable<ConfigSource> getConfigSources() {
+ return Collections.emptySet();
}
@Override
@@ -112,58 +68,6 @@ public final class ConfigurationFunctions {
}
};
- private static final ConfigurationContext EMPTY_CONFIGURATION_CONTEXT = new ConfigurationContext() {
- @Override
- public void addPropertySources(PropertySource... propertySourcesToAdd) {
- // ignore
- }
-
- @Override
- public List<PropertySource> getPropertySources() {
- return Collections.emptyList();
- }
-
- @Override
- public PropertySource getPropertySource(String name) {
- return null;
- }
-
- @Override
- public <T> void addPropertyConverter(TypeLiteral<T> typeToConvert, PropertyConverter<T> propertyConverter) {
- // ignore
- }
-
- @Override
- public Map<TypeLiteral<?>, List<PropertyConverter<?>>> getPropertyConverters() {
- return Collections.emptyMap();
- }
-
- @Override
- public <T> List<PropertyConverter<T>> getPropertyConverters(TypeLiteral<T> type) {
- return Collections.emptyList();
- }
-
- @Override
- public List<PropertyFilter> getPropertyFilters() {
- return Collections.emptyList();
- }
-
- @Override
- public PropertyValueCombinationPolicy getPropertyValueCombinationPolicy() {
- return PropertyValueCombinationPolicy.DEFAULT_OVERRIDING_COLLECTOR;
- }
-
- @Override
- public ConfigurationContextBuilder toBuilder() {
- throw new UnsupportedOperationException("Cannot build from ConfigurationContext.EMPTY.");
- }
-
- @Override
- public String toString(){
- return "ConfigurationContext.EMPTY";
- }
- };
-
/**
* Private singleton constructor.
*/
@@ -177,13 +81,8 @@ public final class ConfigurationFunctions {
* @param filter the filter, not null
* @return the section configuration, with the areaKey stripped away.
*/
- public static ConfigOperator filter(final PropertyMatcher filter) {
- return new ConfigOperator() {
- @Override
- public Configuration operate(Configuration config) {
- return new FilteredConfiguration(config, filter, "FilterClass: " + filter.getClass().getName());
- }
- };
+ public static UnaryOperator<Config> filter(final PropertyMatcher filter) {
+ return config -> new FilteredConfiguration(config, filter, "FilterClass: " + filter.getClass().getName());
}
/**
@@ -193,13 +92,8 @@ public final class ConfigurationFunctions {
* @param keyMapper the keyMapper, not null
* @return the section configuration, with the areaKey stripped away.
*/
- public static ConfigOperator map(final KeyMapper keyMapper) {
- return new ConfigOperator() {
- @Override
- public Configuration operate(Configuration config) {
- return new MappedConfiguration(config, keyMapper, null);
- }
- };
+ public static UnaryOperator<Config> map(final KeyMapper keyMapper) {
+ return config -> new MappedConfiguration(config, keyMapper, null);
}
/**
@@ -210,7 +104,7 @@ public final class ConfigurationFunctions {
* @param areaKey the section key, not null
* @return the section configuration, with the areaKey stripped away.
*/
- public static ConfigOperator section(String areaKey) {
+ public static UnaryOperator<Config> section(String areaKey) {
return section(areaKey, false);
}
@@ -222,30 +116,24 @@ public final class ConfigurationFunctions {
* @param stripKeys if set to true, the section key is stripped away fromMap the resulting key.
* @return the section configuration, with the areaKey stripped away.
*/
- public static ConfigOperator section(final String areaKey, final boolean stripKeys) {
- return new ConfigOperator() {
- @Override
- public Configuration operate(Configuration config) {
- Configuration filtered = new FilteredConfiguration(config,
- new PropertyMatcher() {
- @Override
- public boolean test(String k, String v) {
- return isKeyInSection(k, areaKey);
- }
- }, "section: " + areaKey);
+ public static UnaryOperator<Config> section(final String areaKey, final boolean stripKeys) {
+ return config -> {
+ Config filtered = new FilteredConfiguration(
+ config,
+ (k, v) -> isKeyInSection(k, areaKey),
+ "section: " + areaKey);
if (stripKeys) {
- return new MappedConfiguration(filtered, new KeyMapper(){
- @Override
- public String mapKey(String key) {
- if(key.startsWith(areaKey)) {
- return key.substring(areaKey.length());
- }
- return areaKey + key;
- }
- }, "stripped");
+ return new MappedConfiguration(
+ filtered,
+ key -> {
+ if(key.startsWith(areaKey)) {
+ return key.substring(areaKey.length());
+ }
+ return areaKey + key;
+ },
+ "stripped");
}
return filtered;
- }
};
}
@@ -283,19 +171,16 @@ public final class ConfigurationFunctions {
*
* @return s set with all sections, never {@code null}.
*/
- public static ConfigQuery<Set<String>> sections() {
- return new ConfigQuery<Set<String>>() {
- @Override
- public Set<String> query(Configuration config) {
+ public static Function<Config,Set<String>> sections() {
+ return config -> {
final Set<String> areas = new TreeSet<>();
- for (String s : config.getProperties().keySet()) {
+ for (String s : config.getPropertyNames()) {
int index = s.lastIndexOf('.');
if (index > 0) {
areas.add(s.substring(0, index));
}
}
return areas;
- }
};
}
@@ -307,12 +192,10 @@ public final class ConfigurationFunctions {
*
* @return s set with all transitive sections, never {@code null}.
*/
- public static ConfigQuery<Set<String>> transitiveSections() {
- return new ConfigQuery<Set<String>>() {
- @Override
- public Set<String> query(Configuration config) {
+ public static Function<Config,Set<String>> transitiveSections() {
+ return config -> {
final Set<String> transitiveAreas = new TreeSet<>();
- for (String s : config.query(sections())) {
+ for (String s : sections().apply(config)) {
transitiveAreas.add(s);
int index = s.lastIndexOf('.');
while (index > 0) {
@@ -322,7 +205,6 @@ public final class ConfigurationFunctions {
}
}
return transitiveAreas;
- }
};
}
@@ -335,20 +217,16 @@ public final class ConfigurationFunctions {
* @param predicate A predicate to deternine, which sections should be returned, not {@code null}.
* @return s set with all sections, never {@code null}.
*/
- public static ConfigQuery<Set<String>> sections(final Predicate<String> predicate) {
- return new ConfigQuery<Set<String>>() {
- @Override
- public Set<String> query(Configuration config) {
+ public static Function<Config,Set<String>> sections(final Predicate<String> predicate) {
+ return config -> {
Set<String> result = new TreeSet<>();
- for (String s : sections().query(config)) {
+ for (String s : sections().apply(config)) {
if (predicate.test(s)) {
result.add(s);
}
}
return result;
- }
};
-
}
/**
@@ -360,18 +238,15 @@ public final class ConfigurationFunctions {
* @param predicate A predicate to deternine, which sections should be returned, not {@code null}.
* @return s set with all transitive sections, never {@code null}.
*/
- public static ConfigQuery<Set<String>> transitiveSections(final Predicate<String> predicate) {
- return new ConfigQuery<Set<String>>() {
- @Override
- public Set<String> query(Configuration config) {
+ public static Function<Config,Set<String>> transitiveSections(final Predicate<String> predicate) {
+ return config -> {
Set<String> result = new TreeSet<>();
- for (String s : transitiveSections().query(config)) {
+ for (String s : transitiveSections().apply(config)) {
if (predicate.test(s)) {
result.add(s);
}
}
return result;
- }
};
}
@@ -382,7 +257,7 @@ public final class ConfigurationFunctions {
* @param sectionKeys the section keys, not null
* @return the section configuration, with the areaKey stripped away.
*/
- public static ConfigOperator sectionsRecursive(String... sectionKeys) {
+ public static UnaryOperator<Config> sectionsRecursive(String... sectionKeys) {
return sectionRecursive(false, sectionKeys);
}
@@ -395,20 +270,20 @@ public final class ConfigurationFunctions {
* by entries of the later instances.
* @return the resulting configuration instance.
*/
- public static Configuration combine(String configName, Configuration... configs) {
+ public static Config combine(String configName, Config... configs) {
return new CombinedConfiguration(configName, configs);
}
/**
- * Creates a {@link PropertySource}, based on the given {@link Configuration}. The keys and propertx map
+ * Creates a {@link ConfigSource}, based on the given {@link Config}. The keys and propertx map
* are dynamically calculated, so the returned PropertySource is a real dynamic wrapper.
* @param name the name of the property source, not null.
* @param ordinal ordinal of the property source.
* @param config the config to be mapped, not null.
* @return a property source wrapping the configuration.
*/
- public static PropertySource propertySourceFrom(final String name, final int ordinal, final Configuration config){
- return new ConfigWrappingPropertySource(name, ordinal, config);
+ public static ConfigSource propertySourceFrom(final String name, final int ordinal, final Config config){
+ return new ConfigWrappingConfigSource(name, ordinal, config);
}
/**
@@ -419,26 +294,19 @@ public final class ConfigurationFunctions {
* @param stripKeys if set to true, the section key is stripped away fromMap the resulting key.
* @return the section configuration, with the areaKey stripped away.
*/
- public static ConfigOperator sectionRecursive(final boolean stripKeys, final String... sectionKeys) {
- return new ConfigOperator() {
- @Override
- public Configuration operate(Configuration config) {
- Configuration filtered = new FilteredConfiguration(config, new PropertyMatcher() {
- @Override
- public boolean test(final String k, String v) {
- return isKeyInSections(k, sectionKeys);
- }
- }, "sections: " + Arrays.toString(sectionKeys));
- if (stripKeys) {
- return new MappedConfiguration(filtered, new KeyMapper() {
- @Override
- public String mapKey(String key) {
- return PropertySourceFunctions.stripSectionKeys(key, sectionKeys);
- }
- }, "stripped");
- }
- return filtered;
+ public static UnaryOperator<Config> sectionRecursive(final boolean stripKeys, final String... sectionKeys) {
+ return (config) -> {
+ Config filtered = new FilteredConfiguration(
+ config,
+ (k,v) -> isKeyInSections(k, sectionKeys),
+ "sections: " + Arrays.toString(sectionKeys));
+ if (stripKeys) {
+ return new MappedConfiguration(
+ filtered,
+ k -> PropertySourceFunctions.stripSectionKeys(k, sectionKeys),
+ "stripped");
}
+ return filtered;
};
}
@@ -447,7 +315,7 @@ public final class ConfigurationFunctions {
*
* @return the given query.
*/
- public static ConfigQuery<String> jsonInfo() {
+ public static Function<Config,String> jsonInfo() {
return jsonInfo(null);
}
@@ -458,29 +326,27 @@ public final class ConfigurationFunctions {
* parameters.
* @return the given query.
*/
- public static ConfigQuery<String> jsonInfo(final Map<String, String> info) {
- return new ConfigQuery<String>() {
- @Override
- public String query(Configuration config) {
- Map<String, String> props = new TreeMap<>(config.getProperties());
- props.put("__timestamp", String.valueOf(System.currentTimeMillis()));
- if(info!=null) {
- for (Map.Entry<String, String> en : info.entrySet()) {
- props.put("__" + escape(en.getKey()), escape(en.getValue()));
- }
+ public static Function<Config,String> jsonInfo(final Map<String, String> info) {
+ return config -> {
+ Map<String, String> props = new TreeMap<>();
+ config.getPropertyNames().forEach(key -> props.put(key, config.getValue(key, String.class)));
+ props.put("__timestamp", String.valueOf(System.currentTimeMillis()));
+ if(info!=null) {
+ for (Map.Entry<String, String> en : info.entrySet()) {
+ props.put("__" + escape(en.getKey()), escape(en.getValue()));
}
- StringBuilder builder = new StringBuilder(400).append("{\n");
- for (Map.Entry<String, String> en : props.entrySet()) {
- builder.append(" \"").append(escape(en.getKey())).append("\": \"" )
- .append(escape(en.getValue())).append("\",\n");
- }
- if(builder.toString().endsWith(",\n")){
- builder.setLength(builder.length()-2);
- builder.append('\n');
- }
- builder.append("}\n");
- return builder.toString();
}
+ StringBuilder builder = new StringBuilder(400).append("{\n");
+ for (Map.Entry<String, String> en : props.entrySet()) {
+ builder.append(" \"").append(escape(en.getKey())).append("\": \"" )
+ .append(escape(en.getValue())).append("\",\n");
+ }
+ if(builder.toString().endsWith(",\n")){
+ builder.setLength(builder.length()-2);
+ builder.append('\n');
+ }
+ builder.append("}\n");
+ return builder.toString();
};
}
@@ -489,7 +355,7 @@ public final class ConfigurationFunctions {
*
* @return the given query.
*/
- public static ConfigQuery<String> xmlInfo() {
+ public static Function<Config,String> xmlInfo() {
return xmlInfo(null);
}
@@ -500,25 +366,23 @@ public final class ConfigurationFunctions {
* parameters.
* @return the given query.
*/
- public static ConfigQuery<String> xmlInfo(final Map<String, String> info) {
- return new ConfigQuery<String>() {
- @Override
- public String query(Configuration config) {
- Map<String, String> props = new TreeMap<>(config.getProperties());
- props.put("__timestamp", String.valueOf(System.currentTimeMillis()));
- if(info!=null) {
- for (Map.Entry<String, String> en : info.entrySet()) {
- props.put("__" + escape(en.getKey()), escape(en.getValue()));
- }
- }
- StringBuilder builder = new StringBuilder(400);
- builder.append("<configuration>\n");
- for (Map.Entry<String, String> en : props.entrySet()) {
- builder.append(" <entry key=\"" + escape(en.getKey()) + "\">" + escape(en.getValue()) + "</entry>\n");
+ public static Function<Config,String> xmlInfo(final Map<String, String> info) {
+ return config -> {
+ Map<String, String> props = new TreeMap<>();
+ config.getPropertyNames().forEach(key -> props.put(key, config.getValue(key, String.class)));
+ props.put("__timestamp", String.valueOf(System.currentTimeMillis()));
+ if(info!=null) {
+ for (Map.Entry<String, String> en : info.entrySet()) {
+ props.put("__" + escape(en.getKey()), escape(en.getValue()));
}
- builder.append("</configuration>\n");
- return builder.toString();
}
+ StringBuilder builder = new StringBuilder(400);
+ builder.append("<configuration>\n");
+ for (Map.Entry<String, String> en : props.entrySet()) {
+ builder.append(" <entry key=\"" + escape(en.getKey()) + "\">" + escape(en.getValue()) + "</entry>\n");
+ }
+ builder.append("</configuration>\n");
+ return builder.toString();
};
}
@@ -527,7 +391,7 @@ public final class ConfigurationFunctions {
*
* @return the given query.
*/
- public static ConfigQuery<String> textInfo() {
+ public static Function<Config,String> textInfo() {
return textInfo(null);
}
@@ -536,27 +400,25 @@ public final class ConfigurationFunctions {
* @param info configuration values to use for filtering.
* @return the given query.
*/
- public static ConfigQuery<String> textInfo(final Map<String, String> info) {
- return new ConfigQuery<String>() {
- @Override
- public String query(Configuration config) {
- Map<String, String> props = new TreeMap<>(config.getProperties());
- props.put("__timestamp", String.valueOf(System.currentTimeMillis()));
- if(info!=null) {
- for (Map.Entry<String, String> en : info.entrySet()) {
- props.put("__" + escape(en.getKey()), escape(en.getValue()));
- }
+ public static Function<Config,String> textInfo(final Map<String, String> info) {
+ return config -> {
+ Map<String, String> props = new TreeMap<>();
+ config.getPropertyNames().forEach(key -> props.put(key, config.getValue(key, String.class)));
+ props.put("__timestamp", String.valueOf(System.currentTimeMillis()));
+ if(info!=null) {
+ for (Map.Entry<String, String> en : info.entrySet()) {
+ props.put("__" + escape(en.getKey()), escape(en.getValue()));
}
- StringBuilder builder = new StringBuilder(400).append("Configuration:\n");
- for (Map.Entry<String, String> en : props.entrySet()) {
- builder.append(" " + escape(en.getKey()) + ": " + escape(en.getValue()).replace("\n", "\n ") + ",\n");
- }
- if(builder.toString().endsWith(",\n")){
- builder.setLength(builder.length() - 2);
- }
- builder.append("\n");
- return builder.toString();
}
+ StringBuilder builder = new StringBuilder(400).append("Configuration:\n");
+ for (Map.Entry<String, String> en : props.entrySet()) {
+ builder.append(" " + escape(en.getKey()) + ": " + escape(en.getValue()).replace("\n", "\n ") + ",\n");
+ }
+ if(builder.toString().endsWith(",\n")){
+ builder.setLength(builder.length() - 2);
+ }
+ builder.append("\n");
+ return builder.toString();
};
}
@@ -566,13 +428,8 @@ public final class ConfigurationFunctions {
* @param override if true, all items existing are overridden by the new ones passed.
* @return the ConfigOperator, never null.
*/
- public static ConfigOperator addItems(final Map<String,Object> items, final boolean override){
- return new ConfigOperator() {
- @Override
- public Configuration operate(Configuration config) {
- return new EnrichedConfiguration(config,items, override);
- }
- };
+ public static UnaryOperator<Config> addItems(final Map<String,Object> items, final boolean override){
+ return config -> new EnrichedConfiguration(config,items, override);
}
/**
@@ -580,7 +437,7 @@ public final class ConfigurationFunctions {
* @param items the items, not null.
* @return the operator, never null.
*/
- public static ConfigOperator addItems(Map<String,Object> items){
+ public static UnaryOperator<Config> addItems(Map<String,Object> items){
return addItems(items, false);
}
@@ -589,7 +446,7 @@ public final class ConfigurationFunctions {
* @param items the items.
* @return the operator for replacing the items.
*/
- public static ConfigOperator replaceItems(Map<String,Object> items){
+ public static UnaryOperator<Config> replaceItems(Map<String,Object> items){
return addItems(items, true);
}
@@ -598,7 +455,7 @@ public final class ConfigurationFunctions {
*
* @return the given query.
*/
- public static ConfigQuery<String> htmlInfo() {
+ public static Function<Config,String> htmlInfo() {
return htmlInfo(null);
}
@@ -607,16 +464,13 @@ public final class ConfigurationFunctions {
* @param info configuration values to use for filtering.
* @return the given query.
*/
- public static ConfigQuery<String> htmlInfo(final Map<String, String> info) {
- return new ConfigQuery<String>() {
- @Override
- public String query(Configuration config) {
- StringBuilder builder = new StringBuilder();
- addHeader(builder);
- builder.append("<pre>\n").append(textInfo(info).query(config)).append("</pre>\n");
- addFooter(builder);
- return builder.toString();
- }
+ public static Function<Config,String> htmlInfo(final Map<String, String> info) {
+ return config -> {
+ StringBuilder builder = new StringBuilder();
+ addHeader(builder);
+ builder.append("<pre>\n").append(textInfo(info).apply(config)).append("</pre>\n");
+ addFooter(builder);
+ return builder.toString();
};
}
@@ -649,19 +503,12 @@ public final class ConfigurationFunctions {
}
/**
- * Accesses an empty {@link Configuration}.
- * @return an empty {@link Configuration}, never null.
+ * Accesses an empty {@link Config}.
+ * @return an empty {@link Config}, never null.
*/
- public static Configuration emptyConfiguration(){
+ public static Config emptyConfig(){
return EMPTY_CONFIGURATION;
}
- /**
- * Accesses an empty {@link ConfigurationContext}.
- * @return an empty {@link ConfigurationContext}, never null.
- */
- public static ConfigurationContext emptyConfigurationContext(){
- return EMPTY_CONFIGURATION_CONTEXT;
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedConfiguration.java b/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedConfiguration.java
index a223a45..0a9c549 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedConfiguration.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedConfiguration.java
@@ -18,22 +18,16 @@
*/
package org.apache.tamaya.functions;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import javax.config.Config;
+import javax.config.spi.ConfigSource;
+import java.util.*;
/**
* Configuration, that has values added or overridden.
*/
-class EnrichedConfiguration implements Configuration {
+class EnrichedConfiguration implements Config {
- private final Configuration baseConfiguration;
+ private final Config baseConfiguration;
private final Map<String, Object> addedProperties = new HashMap<>();
@@ -46,127 +40,59 @@ class EnrichedConfiguration implements Configuration {
* @param properties the properties to be added, not null.
* @param overriding true, if existing keys should be overriden, or config should be extended only.
*/
- EnrichedConfiguration(Configuration configuration, Map<String, Object> properties, boolean overriding) {
+ EnrichedConfiguration(Config configuration, Map<String, Object> properties, boolean overriding) {
this.baseConfiguration = Objects.requireNonNull(configuration);
this.addedProperties.putAll(properties);
this.overriding = overriding;
}
@Override
- public String get(String key) {
- Objects.requireNonNull(key, "Key must be given.");
-
- if (overriding) {
- Object val = addedProperties.get(key);
- if (val != null) {
- return val.toString();
- }
- return baseConfiguration.get(key);
- }
- String val = baseConfiguration.get(key);
- if (val != null) {
- return val;
- }
- Object val2 = addedProperties.get(key);
- if (val2 != null) {
- return val2.toString();
- }
- return null;
+ public <T> T getValue(String key, Class<T> type) {
+ return getOptionalValue(key, type).orElse(null);
}
@Override
- public String getOrDefault(String key, String defaultValue) {
+ public <T> Optional<T> getOptionalValue(String key, Class<T> type) {
Objects.requireNonNull(key, "Key must be given.");
- Objects.requireNonNull(defaultValue, "Default value must be given.");
-
- String val = get(key);
- if (val == null) {
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public <T> T getOrDefault(String key, Class<T> type, T defaultValue) {
- Objects.requireNonNull(key, "Key not given.");
- Objects.requireNonNull(type, "Class not given.");
- Objects.requireNonNull(defaultValue, "Default value not given.");
-
- T val = get(key, type);
- if (val == null) {
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public <T> T get(String key, Class<T> type) {
- return (T) get(key, TypeLiteral.of(type));
- }
-
- @Override
- public <T> T get(String key, TypeLiteral<T> type) {
+ Objects.requireNonNull(type, "Type must be given.");
if (overriding) {
Object val = addedProperties.get(key);
- if (val != null && type.getRawType().isAssignableFrom(val.getClass())) {
- return (T) val;
+ if (val != null){
+ if(type.isAssignableFrom(type)){
+ return Optional.of((T)val);
+ }else if(type == String.class) {
+ return Optional.of((T)val.toString());
+ }
+ return baseConfiguration.getOptionalValue(key, type);
}
- return baseConfiguration.get(key, type);
}
- T val = baseConfiguration.get(key, type);
- if (val != null) {
+ Optional<T> val = baseConfiguration.getOptionalValue(key, type);
+ if (val !=null && val.isPresent()) {
return val;
}
Object val2 = addedProperties.get(key);
- if (val2 != null && type.getRawType().isAssignableFrom(val2.getClass())) {
- return (T) val2;
- }
- return null;
- }
-
- @Override
- public <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue) {
- Objects.requireNonNull(key, "Key not given.");
- Objects.requireNonNull(type, "Type not given.");
- Objects.requireNonNull(defaultValue, "Default value not given.");
-
- T val = get(key, type);
- if (val == null) {
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public Map<String, String> getProperties() {
- Map<String, String> allProps = new HashMap<>();
- if (overriding) {
- allProps.putAll(baseConfiguration.getProperties());
- for (Map.Entry<String, Object> en : addedProperties.entrySet()) {
- allProps.put(en.getKey(), en.getValue().toString());
- }
- } else {
- for (Map.Entry<String, Object> en : addedProperties.entrySet()) {
- allProps.put(en.getKey(), en.getValue().toString());
+ if (val2 != null){
+ if(type.isAssignableFrom(val2.getClass())) {
+ return Optional.of((T) val2);
+ }else if(type == String.class) {
+ return Optional.of((T)val2.toString());
}
- allProps.putAll(baseConfiguration.getProperties());
}
- return allProps;
+ return Optional.empty();
}
- @Override
- public Configuration with(ConfigOperator operator) {
- return operator.operate(this);
- }
@Override
- public <T> T query(ConfigQuery<T> query) {
- return query.query(this);
+ public Iterable<String> getPropertyNames() {
+ Set<String> allKeys = new HashSet<>();
+ baseConfiguration.getPropertyNames().forEach(allKeys::add);
+ addedProperties.keySet().forEach(allKeys::add);
+ return allKeys;
}
@Override
- public ConfigurationContext getContext() {
- return baseConfiguration.getContext();
+ public Iterable<ConfigSource> getConfigSources() {
+ return baseConfiguration.getConfigSources();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java b/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
index e8acaaa..b61c730 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredConfiguration.java
@@ -18,101 +18,57 @@
*/
package org.apache.tamaya.functions;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import javax.config.Config;
+import javax.config.spi.ConfigSource;
+import java.util.*;
/**
* Configuration that filters part of the entries defined by a matcher predicate.
*/
-class FilteredConfiguration implements Configuration {
+class FilteredConfiguration implements Config {
- private final Configuration baseConfiguration;
+ private final Config baseConfiguration;
private final PropertyMatcher matcher;
private final String filterType;
- FilteredConfiguration(Configuration baseConfiguration, PropertyMatcher matcher, String filterType) {
+ FilteredConfiguration(Config baseConfiguration, PropertyMatcher matcher, String filterType) {
this.baseConfiguration = Objects.requireNonNull(baseConfiguration);
this.matcher = Objects.requireNonNull(matcher);
this.filterType = filterType!=null?filterType:this.matcher.toString();
}
@Override
- public String get(String key) {
- return get(key, String.class);
- }
-
- @Override
- public String getOrDefault(String key, String defaultValue) {
- String val = get(key);
- if(val==null){
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public <T> T getOrDefault(String key, Class<T> type, T defaultValue) {
- T val = get(key, type);
- if(val==null){
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public <T> T get(String key, Class<T> type) {
- return (T)get(key, TypeLiteral.of(type));
- }
-
- @Override
- public <T> T get(String key, TypeLiteral<T> type) {
- String value = baseConfiguration.get(key);
- if (matcher.test(key, value)) {
- return baseConfiguration.get(key, type);
+ public <T> T getValue(String key, Class<T> type) {
+ String stringValue = baseConfiguration.getValue(key, String.class);
+ if (matcher.test(key, stringValue)) {
+ return baseConfiguration.getValue(key, type);
}
return null;
}
@Override
- public <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue) {
- T val = get(key, type);
- if(val==null){
- return defaultValue;
+ public <T> Optional<T> getOptionalValue(String key, Class<T> type) {
+ Optional<String> value = baseConfiguration.getOptionalValue(key, String.class);
+ if(value.isPresent() && matcher.test(key, value.get())) {
+ return baseConfiguration.getOptionalValue(key, type);
}
- return val;
+ return Optional.empty();
}
@Override
- public Map<String, String> getProperties() {
- Map<String, String> result = new HashMap<>();
- for(Map.Entry<String,String> en:baseConfiguration.getProperties().entrySet()){
- if(matcher.test(en.getKey(), en.getValue())){
- result.put(en.getKey(), en.getValue());
+ public Iterable<String> getPropertyNames() {
+ Set<String> result = new HashSet<>();
+ for(String name:baseConfiguration.getPropertyNames()){
+ if(matcher.test(name, null)){
+ result.add(name);
}
}
return result;
}
@Override
- public Configuration with(ConfigOperator operator) {
- return null;
- }
-
- @Override
- public <T> T query(ConfigQuery<T> query) {
- return query.query(this);
- }
-
- @Override
- public ConfigurationContext getContext() {
- return baseConfiguration.getContext();
+ public Iterable<ConfigSource> getConfigSources() {
+ return this.baseConfiguration.getConfigSources();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java b/modules/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
index dd2547f..ec48b2f 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/MappedConfiguration.java
@@ -18,110 +18,66 @@
*/
package org.apache.tamaya.functions;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
-
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Objects;
+import javax.config.Config;
+import javax.config.spi.ConfigSource;
+import java.util.*;
import java.util.logging.Logger;
/**
* Configuration that filters part of the entries defined by a filter predicate.
*/
-class MappedConfiguration implements Configuration {
+class MappedConfiguration implements Config {
private static final Logger LOG = Logger.getLogger(MappedConfiguration.class.getName());
- private final Configuration baseConfiguration;
+ private final Config baseConfiguration;
private final KeyMapper keyMapper;
private final String mapType;
- MappedConfiguration(Configuration baseConfiguration, KeyMapper keyMapper, String mapType) {
+ MappedConfiguration(Config baseConfiguration, KeyMapper keyMapper, String mapType) {
this.baseConfiguration = Objects.requireNonNull(baseConfiguration);
this.keyMapper = Objects.requireNonNull(keyMapper);
this.mapType = mapType!=null?mapType:this.keyMapper.toString();
}
@Override
- public String get(String key) {
- return get(key, String.class);
- }
-
- @Override
- public String getOrDefault(String key, String defaultValue) {
- Objects.requireNonNull(key, "Key must be given");
- Objects.requireNonNull(defaultValue, "DefaultValue must be given.");
- String val = get(key);
-
- if(val==null){
- return defaultValue;
- }
- return val;
- }
-
- @Override
- public <T> T getOrDefault(String key, Class<T> type, T defaultValue) {
- T val = get(key, type);
- if(val==null){
- return defaultValue;
+ public <T> T getValue(String key, Class<T> type) {
+ String targetKey = keyMapper.mapKey(key);
+ if (targetKey != null) {
+ return baseConfiguration.getValue(targetKey, type);
}
- return val;
- }
+ LOG.finest("Configuration property hidden by KeyMapper, key="+key+", mapper="+keyMapper+", config="+this);
+ return null;
- @Override
- public <T> T get(String key, Class<T> type) {
- return (T)get(key, TypeLiteral.of(type));
}
@Override
- public <T> T get(String key, TypeLiteral<T> type) {
+ public <T> Optional<T> getOptionalValue(String key, Class<T> type) {
String targetKey = keyMapper.mapKey(key);
if (targetKey != null) {
- return baseConfiguration.get(targetKey, type);
+ return baseConfiguration.getOptionalValue(targetKey, type);
}
LOG.finest("Configuration property hidden by KeyMapper, key="+key+", mapper="+keyMapper+", config="+this);
- return null;
+ return Optional.empty();
}
- @Override
- public <T> T getOrDefault(String key, TypeLiteral<T> type, T defaultValue) {
- T val = get(key, type);
- if(val==null){
- return defaultValue;
- }
- return val;
- }
@Override
- public Map<String, String> getProperties() {
- Map<String, String> baseProps = baseConfiguration.getProperties();
- Map<String, String> props = new HashMap<>(baseProps.size());
- for(Map.Entry<String,String> en:baseProps.entrySet()){
- String targetKey = keyMapper.mapKey(en.getKey());
+ public Iterable<String> getPropertyNames() {
+ Iterable<String> propertyNames = baseConfiguration.getPropertyNames();
+ Set<String> result = new HashSet<>();
+ for(String key:propertyNames){
+ String targetKey = keyMapper.mapKey(key);
if (targetKey != null) {
- props.put(targetKey, en.getValue());
+ result.add(targetKey);
}
}
- return props;
- }
-
- @Override
- public Configuration with(ConfigOperator operator) {
- return operator.operate(this);
- }
-
- @Override
- public <T> T query(ConfigQuery<T> query) {
- return query.query(this);
+ return result;
}
@Override
- public ConfigurationContext getContext() {
- return baseConfiguration.getContext();
+ public Iterable<ConfigSource> getConfigSources() {
+ return baseConfiguration.getConfigSources();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/581c92e7/modules/functions/src/test/java/org/apache/tamaya/functions/CombinedConfigurationTest.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/test/java/org/apache/tamaya/functions/CombinedConfigurationTest.java b/modules/functions/src/test/java/org/apache/tamaya/functions/CombinedConfigurationTest.java
index 16cabeb..bb27ccd 100644
--- a/modules/functions/src/test/java/org/apache/tamaya/functions/CombinedConfigurationTest.java
+++ b/modules/functions/src/test/java/org/apache/tamaya/functions/CombinedConfigurationTest.java
@@ -18,21 +18,15 @@
*/
package org.apache.tamaya.functions;
-import org.apache.tamaya.ConfigOperator;
-import org.apache.tamaya.ConfigQuery;
-import org.apache.tamaya.Configuration;
-import org.apache.tamaya.TypeLiteral;
-import org.apache.tamaya.spi.ConfigurationContext;
+import org.apache.tamaya.base.DefaultConfigBuilder;
+import org.apache.tamaya.base.configsource.SimpleConfigSource;
import org.apache.tamaya.spisupport.DefaultConfiguration;
-import org.apache.tamaya.core.internal.CoreConfigurationBuilder;
-import org.apache.tamaya.spisupport.propertysource.SimplePropertySource;
import org.assertj.core.api.ThrowableAssert;
import org.junit.Test;
import org.mockito.Mockito;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Map;
+import javax.config.Config;
+import java.util.*;
import static java.util.Arrays.asList;
import static java.util.Collections.singletonMap;
@@ -40,53 +34,43 @@ import static org.apache.tamaya.functions.MethodNotMockedAnswer.NOT_MOCKED_ANSWE
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatThrownBy;
import static org.assertj.core.api.Assertions.within;
+import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
public class CombinedConfigurationTest {
- private Configuration configWithA1;
- private Configuration configWithA2;
- private Configuration configWithB;
- private Configuration configWithC;
- private Configuration configWithoutEntries;
+ private Config configWithA1;
+ private Config configWithA2;
+ private Config configWithB;
+ private Config configWithC;
+ private Config configWithoutEntries;
{
- SimplePropertySource sourceWithKeyA1 = new SimplePropertySource("A", singletonMap("a", "a1"));
- SimplePropertySource sourceWithKeyA2 = new SimplePropertySource("A", singletonMap("a", "a2"));
- SimplePropertySource sourceWithKeyB = new SimplePropertySource("B", singletonMap("b", "b"));
- SimplePropertySource sourceWithKeyC = new SimplePropertySource("C", singletonMap("c", "c"));
- SimplePropertySource sourceWithoutKeys = new SimplePropertySource("NONE", Collections.<String, String>emptyMap());
-
- Configuration ccWithA1 = new CoreConfigurationBuilder().addPropertySources(sourceWithKeyA1)
- .build();
- Configuration ccWithA2 = new CoreConfigurationBuilder().addPropertySources(sourceWithKeyA2)
- .build();
- Configuration ccWithB = new CoreConfigurationBuilder().addPropertySources(sourceWithKeyB)
- .build();
- Configuration ccWithC = new CoreConfigurationBuilder().addPropertySources(sourceWithKeyC)
- .build();
- Configuration ccWithoutEntries = new CoreConfigurationBuilder().addPropertySources(sourceWithoutKeys)
- .build();
-
- configWithA1 = new DefaultConfiguration(ccWithA1.getContext());
- configWithA2 = new DefaultConfiguration(ccWithA2.getContext());
- configWithB = new DefaultConfiguration(ccWithB.getContext());
- configWithC = new DefaultConfiguration(ccWithC.getContext());
- configWithoutEntries = new DefaultConfiguration(ccWithoutEntries.getContext());
+ SimpleConfigSource sourceWithKeyA1 = new SimpleConfigSource("A", singletonMap("a", "a1"));
+ SimpleConfigSource sourceWithKeyA2 = new SimpleConfigSource("A", singletonMap("a", "a2"));
+ SimpleConfigSource sourceWithKeyB = new SimpleConfigSource("B", singletonMap("b", "b"));
+ SimpleConfigSource sourceWithKeyC = new SimpleConfigSource("C", singletonMap("c", "c"));
+ SimpleConfigSource sourceWithoutKeys = new SimpleConfigSource("NONE", Collections.<String, String>emptyMap());
+
+ configWithA1 = new DefaultConfigBuilder().withSources(sourceWithKeyA1).build();
+ configWithA2 = new DefaultConfigBuilder().withSources(sourceWithKeyA2).build();
+ configWithB = new DefaultConfigBuilder().withSources(sourceWithKeyB).build();
+ configWithC = new DefaultConfigBuilder().withSources(sourceWithKeyC).build();
+ configWithoutEntries = new DefaultConfigBuilder().withSources(sourceWithoutKeys).build();
}
@Test
public void createCombinedConfigurationWithNullAsSingleConfiguration() {
CombinedConfiguration cc = new CombinedConfiguration("abc", null);
- assertThat(cc.get("nil")).isNull();
+ assertThat(cc.getValue("nil", String.class)).isNull();
}
@Test
public void createCombinedConfigurationWithNullNullAsSingleConfiguration() {
CombinedConfiguration cc = new CombinedConfiguration("abc", null, null);
- assertThat(cc.get("nil")).isNull();
+ assertThat(cc.getValue("nil", String.class)).isNull();
}
@Test
@@ -94,21 +78,21 @@ public class CombinedConfigurationTest {
CombinedConfiguration cc = new CombinedConfiguration("abc", configWithA1, configWithB, configWithC);
- assertThat(cc.get("key")).isNull();
+ assertThat(cc.getValue("key", String.class)).isNull();
}
@Test
public void requestedEntryIsInTheFirstAndThridConfiguration() {
CombinedConfiguration cc = new CombinedConfiguration("abc", configWithA1, configWithB, configWithA2);
- assertThat(cc.get("a")).isEqualTo("a2");
+ assertThat(cc.getValue("a", String.class)).isEqualTo("a2");
}
@Test
public void requestedEntryIsOnlyInOneConfiguration() {
CombinedConfiguration cc = new CombinedConfiguration("abc", configWithA1, configWithB, configWithC);
- assertThat(cc.get("b")).isEqualTo("b");
+ assertThat(cc.getValue("b", String.class)).isEqualTo("b");
}
/*
@@ -116,49 +100,25 @@ public class CombinedConfigurationTest {
*/
@Test
- public void getOrDefaultWithSignatureStringStringThrowsNPEIfKeyIsNull() {
+ public void getOptionalValueWithSignatureStringStringThrowsNPEIfKeyIsNull() {
final CombinedConfiguration cc = mock(CombinedConfiguration.class, CALLS_REAL_METHODS);
assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
@Override
public void call() throws Throwable {
- cc.getOrDefault(null, "d");
+ cc.getOptionalValue(null, String.class).orElse("d");
}
}).isInstanceOf(NullPointerException.class)
.hasMessage("Key must be given.");
}
@Test
- public void getOrDefaultWithSignatureStringStringThrowsNPEIfValueIsNull() {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, CALLS_REAL_METHODS);
-
- assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
- @Override
- public void call() throws Throwable {
- cc.getOrDefault("key", (String)null);
- }
- }).isInstanceOf(NullPointerException.class)
- .hasMessage("Value must be given.");
- }
-
- @Test
- public void getOrDefaultWithSignatureStringStringReturnsDefaultIfKeyIsUnknown() {
- CombinedConfiguration cc = mock(CombinedConfiguration.class);
- doReturn(null).when(cc).get("a");
- doCallRealMethod().when(cc).getOrDefault(anyString(), anyString());
-
- String result = cc.getOrDefault("a", "tzui");
+ public void getOptionalValueWithSignatureStringStringReturnsFoundValueIfKeyIsKnown() {
+ Config cfg = mock(Config.class);
+ doReturn(Optional.of("b")).when(cfg).getOptionalValue("a", String.class);
- assertThat(result).isEqualTo("tzui");
- }
-
- @Test
- public void getOrDefaultWithSignatureStringStringReturnsFoundValueIfKeyIsKnown() {
- CombinedConfiguration cc = mock(CombinedConfiguration.class);
- doReturn("b").when(cc).get(Mockito.eq("a"));
- doCallRealMethod().when(cc).getOrDefault(anyString(), anyString());
-
- String result = cc.getOrDefault("a", "z");
+ String result = new CombinedConfiguration("test", cfg)
+ .getOptionalValue("a", String.class).get();
assertThat(result).isEqualTo("b");
}
@@ -168,15 +128,15 @@ public class CombinedConfigurationTest {
*/
@Test
- public void getOrDefaultStringTypeLiteralTThrowsNPEIfKeyIsNull() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class);
- doCallRealMethod().when(cc).getOrDefault(anyString(), eq(TypeLiteral.of(Integer.class)),
- Mockito.any(Integer.class));
+ public void getOptionalValueStringTypeTThrowsNPEIfKeyIsNull() throws Exception {
+ final Config cfg = mock(Config.class);
+ doReturn(Optional.of(Integer.valueOf(67))).when(cfg).getOptionalValue("a", Integer.class);
assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
@Override
public void call() throws Throwable {
- cc.getOrDefault(null, TypeLiteral.of(Integer.class), 1);
+ new CombinedConfiguration("test", cfg)
+ .getOptionalValue(null, Integer.class).orElse(1);
}
}).isInstanceOf(NullPointerException.class)
.hasMessage("Key must be given.");
@@ -184,59 +144,40 @@ public class CombinedConfigurationTest {
}
@Test
- public void getOrDefaultStringTypeLiteralTThrowsNPEIfTypeIsNull() throws Exception {
+ public void getOptionalValueStringTypeThrowsNPEIfTypeIsNull() throws Exception {
final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).getOrDefault(anyString(), eq((TypeLiteral<Integer>)null),
- Mockito.any(Integer.class));
+ doCallRealMethod().when(cc).getOptionalValue(eq("a"), any(Class.class));
assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
@Override
public void call() throws Throwable {
- cc.<Integer>getOrDefault("a", (TypeLiteral<Integer>)null, 1);
+ cc.<Integer>getOptionalValue("a", (Class)null);
}
}).isInstanceOf(NullPointerException.class)
.hasMessage("Type must be given.");
}
@Test
- public void getOrDefaultStringTypeLiteralTThrowsNPEIfDefaultValueIsNull() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).getOrDefault(anyString(), eq(TypeLiteral.of(Integer.class)),
- Mockito.any(Integer.class));
-
- assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
- @Override
- public void call() throws Throwable {
- cc.getOrDefault("a", TypeLiteral.of(Integer.class), null);
- }
- }).isInstanceOf(NullPointerException.class)
- .hasMessage("Default value must be given.");
- }
-
- @Test
- public void getOrDefaultStringTypeLiteralTReturnsDefaultValueIfKeyIsUnknown() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doReturn(null).when(cc).get(eq("a"), eq(TypeLiteral.<Integer>of(Integer.class)));
- doCallRealMethod().when(cc).getOrDefault(anyString(), eq(TypeLiteral.of(Integer.class)),
- Mockito.any(Integer.class));
-
- TypeLiteral<Integer> typeLiteral = TypeLiteral.of(Integer.class);
- Integer result = cc.<Integer>getOrDefault("a", typeLiteral, 789);
-
- assertThat(result).isEqualTo(789);
+ public void getOptionalValueStringTypeTReturnsEmptyOptionalIfKeyIsUnknown() throws Exception {
+ final Config cfg = mock(Config.class);
+ doReturn(null).when(cfg).getOptionalValue(any(), any(Class.class));
+ Optional<Integer> val = new CombinedConfiguration("test", cfg)
+ .getOptionalValue("b", Integer.class);
+ assertNotNull(val);
+ assertFalse(val.isPresent());
}
@Test
- public void getOrDefaultStringTypeLiteralTReturnsFoundValueIfKeyIsKnown() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doReturn(999).when(cc).get(eq("a"), eq(TypeLiteral.<Integer>of(Integer.class)));
- doCallRealMethod().when(cc).getOrDefault(anyString(), eq(TypeLiteral.of(Integer.class)),
- Mockito.anyInt());
-
- Integer result = cc.<Integer>getOrDefault("a", TypeLiteral.<Integer>of(Integer.class), 789);
-
- assertThat(result).isEqualTo(999);
+ public void getOptionalValueStringTypeReturnsFoundValueIfKeyIsKnown() throws Exception {
+ final Config cfg = mock(Config.class);
+ doReturn(Optional.of(Integer.valueOf(768))).when(cfg).getOptionalValue("a", Integer.class);
+
+ Optional<Integer> val = new CombinedConfiguration("test", cfg)
+ .getOptionalValue("a", Integer.class);
+ assertNotNull(val);
+ assertTrue(val.isPresent());
+ assertEquals(Integer.valueOf(768), val.get());
}
/*
@@ -244,72 +185,38 @@ public class CombinedConfigurationTest {
*/
@Test
- public void getOrDefaultStringClassTThrowsNPEIfKeyIsNull() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class);
- doCallRealMethod().when(cc).getOrDefault(anyString(), Mockito.any(Class.class),
- Mockito.any(Integer.class));
-
+ public void getOptionalValueStringClassTThrowsNPEIfKeyIsNull() throws Exception {
+ final Config cfg = mock(Config.class,NOT_MOCKED_ANSWER);
assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
@Override
public void call() throws Throwable {
- cc.getOrDefault(null, Integer.class, 1);
+ new CombinedConfiguration("test", cfg).getOptionalValue(null, Integer.class);
}
}).isInstanceOf(NullPointerException.class)
.hasMessage("Key must be given.");
}
@Test
- public void getOrDefaultStringClassTThrowsNPEIfTypeIsNull() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class);
- doCallRealMethod().when(cc).getOrDefault(anyString(), Mockito.any(Class.class), Mockito.anyInt());
+ public void getOptionalValueStringClassTThrowsNPEIfTypeIsNull() throws Exception {
+ final Config cfg = mock(Config.class,NOT_MOCKED_ANSWER);
assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
@Override
public void call() throws Throwable {
- cc.getOrDefault("a", (Class<Integer>) null, 1);
+ new CombinedConfiguration("test", cfg)
+ .getOptionalValue("a", (Class<Integer>) null);
}
}).isInstanceOf(NullPointerException.class)
.hasMessage("Type must be given.");
}
@Test
- public void getOrDefaultStringClassTThrowsNPEIfDefaultValueIsNull() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).getOrDefault(anyString(), any(Class.class),
- Mockito.any(Integer.class));
-
- assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
- @Override
- public void call() throws Throwable {
- cc.getOrDefault("a", Integer.class, null);
- }
- }).isInstanceOf(NullPointerException.class)
- .hasMessage("Default value must be given.");
- }
-
- @Test
- public void getOrDefaultStringClassTReturnsDefaultValueIfKeyIsUnknown() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doReturn(null).when(cc).get(eq("a"), any(Class.class));
- doCallRealMethod().when(cc).getOrDefault(anyString(), any(Class.class),
- Mockito.any(Integer.class));
-
- TypeLiteral<Integer> typeLiteral = TypeLiteral.of(Integer.class);
- Integer result = cc.<Integer>getOrDefault("a", Integer.class, 789);
-
- assertThat(result).isEqualTo(789);
- }
-
-
- @Test
- public void getOrDefaultStringClassTReturnsFoundValueIfKeyIsKnown() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doReturn(999).when(cc).get(eq("a"), any(Class.class));
- doCallRealMethod().when(cc).getOrDefault(anyString(), any(Class.class),
- Mockito.anyInt());
-
- Integer result = cc.<Integer>getOrDefault("a", Integer.class, 789);
-
+ public void getOptionalValueStringClassTReturnsFoundValueIfKeyIsKnown() throws Exception {
+ final Config cfg = mock(Config.class);
+ doReturn(Optional.of(Integer.valueOf(999))).when(cfg).getOptionalValue(eq("a"), any(Class.class));
+ doReturn(Optional.of(Integer.valueOf(999))).when(cfg).getOptionalValue(eq("a"), any(Class.class));
+ Integer result = new CombinedConfiguration("test", cfg)
+ .getOptionalValue("a", Integer.class).orElse(789);
assertThat(result).isEqualTo(999);
}
@@ -319,152 +226,79 @@ public class CombinedConfigurationTest {
@Test
public void getPropertiesReturnsEmptyMapIfAllConfigurationsAreEmpty() throws Exception {
- Map<String, String> propsOfA = new HashMap<>();
- Map<String, String> propsOfB = new HashMap<>();
- Map<String, String> propsOfC = new HashMap<>();
-
- Configuration configA = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
- Configuration configB = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
- Configuration configC = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
+ Iterable<String> namesOfA = new HashSet<>();
+ Iterable<String> namesOfB = new HashSet<>();
+ Iterable<String> namesOfC = new HashSet<>();
- doReturn(propsOfA).when(configA).getProperties();
- doReturn(propsOfB).when(configB).getProperties();
- doReturn(propsOfC).when(configC).getProperties();
+ Config configA = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+ Config configB = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+ Config configC = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
- CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
-
- doReturn(asList(configA, configB, configC)).when(cc).getConfigurations();
- doCallRealMethod().when(cc).getProperties();
-
- Map<String, String> result = cc.getProperties();
+ doReturn(namesOfA).when(configA).getPropertyNames();
+ doReturn(namesOfB).when(configB).getPropertyNames();
+ doReturn(namesOfC).when(configC).getPropertyNames();
+ CombinedConfiguration cc = new CombinedConfiguration("test", configA, configB, configC);
+ Iterable<String> result = cc.getPropertyNames();
assertThat(result).isEmpty();
}
@Test
- public void getPropertiesReturnsLastValueOfManyForAGivenKey() throws Exception {
- Map<String, String> propsOfA = new HashMap<String, String>() {{ put("a", "A"); }};
- Map<String, String> propsOfB = new HashMap<String, String>() {{ put("b", "B"); }};
- Map<String, String> propsOfC = new HashMap<String, String>() {{ put("a", "Z"); }};
-
- Configuration configA = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
- Configuration configB = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
- Configuration configC = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
-
- doReturn(propsOfA).when(configA).getProperties();
- doReturn(propsOfB).when(configB).getProperties();
- doReturn(propsOfC).when(configC).getProperties();
-
- CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
-
- doReturn(asList(configA, configB, configC)).when(cc).getConfigurations();
- doCallRealMethod().when(cc).getProperties();
-
- Map<String, String> result = cc.getProperties();
-
- assertThat(result).containsEntry("a", "Z")
- .doesNotContainEntry("a", "A");
+ public void getPropertyValueReturnsLastValueOfManyForAGivenKey() throws Exception {
+ Set<String> propsOfA = new HashSet<String>() {{ add("a"); }};
+ Set<String> propsOfB = new HashSet<String>() {{ add("a"); }};
+ Set<String> propsOfC = new HashSet<String>() {{ add("a"); }};
+
+ Config configA = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+ Config configB = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+ Config configC = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+
+ doReturn(Optional.of("A")).when(configA).getOptionalValue(eq("a"), any());
+ doReturn(Optional.of("B")).when(configB).getOptionalValue(eq("a"), any());
+ doReturn(Optional.of("C")).when(configC).getOptionalValue(eq("a"), any());
+ doReturn(Optional.empty()).when(configA).getOptionalValue(eq("foo"), any());
+ doReturn(Optional.empty()).when(configB).getOptionalValue(eq("foo"), any());
+ doReturn(Optional.empty()).when(configC).getOptionalValue(eq("foo"), any());
+ doReturn(propsOfA).when(configA).getPropertyNames();
+ doReturn(propsOfB).when(configB).getPropertyNames();
+ doReturn(propsOfC).when(configC).getPropertyNames();
+
+ CombinedConfiguration cc = new CombinedConfiguration("test", configA, configB, configC);
+ Iterable<String> result = cc.getPropertyNames();
+
+ assertThat(result).hasSize(1)
+ .contains("a");
+ assertThat(cc.getValue("a", String.class))
+ .isEqualTo("C");
+ assertThat(cc.getValue("foo", String.class))
+ .isNull();
}
@Test
- public void getPropertiesReturnsAllProperties() throws Exception {
- Map<String, String> propsOfA = new HashMap<String, String>() {{ put("a", "A"); }};
- Map<String, String> propsOfB = new HashMap<String, String>() {{ put("b", "B"); }};
- Map<String, String> propsOfC = new HashMap<String, String>() {{ put("c", "C"); }};
-
- Configuration configA = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
- Configuration configB = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
- Configuration configC = Mockito.mock(Configuration.class, NOT_MOCKED_ANSWER);
+ public void getPropertyNamesReturnsAllProperties() throws Exception {
+ Set<String> propsOfA = new HashSet<String>() {{ add("a"); }};
+ Set<String> propsOfB = new HashSet<String>() {{ add("b"); }};
+ Set<String> propsOfC = new HashSet<String>() {{ add("c"); }};
- doReturn(propsOfA).when(configA).getProperties();
- doReturn(propsOfB).when(configB).getProperties();
- doReturn(propsOfC).when(configC).getProperties();
+ Config configA = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+ Config configB = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
+ Config configC = Mockito.mock(Config.class, NOT_MOCKED_ANSWER);
- CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
+ doReturn("A").when(configA).getValue("a", String.class);
+ doReturn("B").when(configB).getValue("b", String.class);
+ doReturn("C").when(configC).getValue("c", String.class);
+ doReturn(propsOfA).when(configA).getPropertyNames();
+ doReturn(propsOfB).when(configB).getPropertyNames();
+ doReturn(propsOfC).when(configC).getPropertyNames();
- doReturn(asList(configA, configB, configC)).when(cc).getConfigurations();
- doCallRealMethod().when(cc).getProperties();
-
- Map<String, String> result = cc.getProperties();
+ CombinedConfiguration cc = new CombinedConfiguration("test", configA, configB, configC);
+ Iterable<String> result = cc.getPropertyNames();
assertThat(result).hasSize(3)
- .containsEntry("a", "A")
- .containsEntry("b", "B")
- .containsEntry("c", "C");
- }
-
- /*
- * Tests for with(ConfigOperator)
- */
-
- @Test
- public void withWithIndentityOperatorReturnsEqualConfiguration() throws Exception {
- class IdentityOpr implements ConfigOperator {
- @Override
- public Configuration operate(Configuration config) {
- return config;
- }
- }
-
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).with(Mockito.any(ConfigOperator.class));
-
- Configuration result = cc.with(new IdentityOpr());
-
- assertThat(result).isNotNull()
- .isEqualTo(result);
- }
-
- @Test
- public void withWithNullAsOperatorParmeterThrowsNPE() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).with(Mockito.any(ConfigOperator.class));
-
- assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
- @Override
- public void call() throws Throwable {
- cc.with(null);
- }
- }).isInstanceOf(NullPointerException.class)
- .hasMessage("Operator must be given.");
- }
-
- /*
- * Tests for query(ConfigQuery)
- */
-
- @Test
- public void queryWithNullAsQueryParameterThrowsNPE() throws Exception {
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).query(Mockito.any(ConfigQuery.class));
-
- assertThatThrownBy(new ThrowableAssert.ThrowingCallable() {
- @Override
- public void call() throws Throwable {
- cc.query(null);
- }
- }).isInstanceOf(NullPointerException.class)
- .hasMessage("Query must be given.");
- }
-
- @Test
- public void queryWithRealQueryReturnsCorrectResult() throws Exception {
- class GetZahl implements ConfigQuery<Integer> {
- @Override
- public Integer query(Configuration config) {
- return config.get("zahl", Integer.class);
- }
- }
-
- final CombinedConfiguration cc = mock(CombinedConfiguration.class, NOT_MOCKED_ANSWER);
- doCallRealMethod().when(cc).query(Mockito.any(ConfigQuery.class));
- doReturn(1).when(cc).<Integer>get(eq("zahl"), eq(Integer.class));
-
- Integer result = cc.query(new GetZahl());
-
- assertThat(result).isEqualTo(1);
+ .contains("a")
+ .contains("b")
+ .contains("c");
}
- // ConfigurationContext getContext(); none one three
}
\ No newline at end of file