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 2017/02/26 23:05:19 UTC
[06/11] incubator-tamaya-extensions git commit: TAMAYA-236: improve
ordinal handling.
TAMAYA-236: improve ordinal handling.
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/01610f6c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/tree/01610f6c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/diff/01610f6c
Branch: refs/heads/master
Commit: 01610f6c794e41b366882f17396cbb6b05167699
Parents: a315ab4
Author: anatole <an...@apache.org>
Authored: Thu Feb 23 01:01:37 2017 +0100
Committer: anatole <an...@apache.org>
Committed: Mon Feb 27 00:05:00 2017 +0100
----------------------------------------------------------------------
.../tamaya/events/FrozenPropertySource.java | 4 +-
.../tamaya/events/FrozenPropertySourceTest.java | 4 +-
.../tamaya/events/RandomPropertySource.java | 5 -
modules/functions/pom.xml | 5 +
.../functions/ConfigWrappingPropertySource.java | 1 -
.../functions/EnrichedPropertySource.java | 4 +-
.../functions/FilteredPropertySource.java | 4 +-
.../tamaya/functions/MappedPropertySource.java | 4 +-
.../functions/PropertySourceFunctions.java | 4 -
.../functions/ValueMappedPropertySource.java | 4 +-
.../cdi/DefaultConfigurationContext.java | 89 +-------
.../cdi/cfg/ProvidedPropertySource.java | 1 -
.../integration/cdi/cfg/TestPropertySource.java | 1 -
.../tamaya/inject/TestPropertySource.java | 5 -
.../internal/DefaultDynamicValueTest.java | 5 -
modules/mutable-config/bnd.bnd | 4 +-
.../MutableConfigurationProvider.java | 21 +-
.../tamaya/mutableconfig/Refreshable.java | 33 ---
.../RefreshablePropertySource.java | 27 ---
.../LazyRefreshablePropertySource.java | 219 -------------------
.../LazyRefreshablePropertySourceTest.java | 162 --------------
.../org/apache/tamaya/resolver/Resolver.java | 18 +-
.../internal/DefaultExpressionEvaluator.java | 19 +-
.../internal/ExpressionResolutionFilter.java | 11 +-
.../tamaya/resolver/MyTestPropertySource.java | 5 -
.../AbstractPathPropertySourceProvider.java | 1 -
.../PathBasedPropertySourceProvider.java | 5 -
.../tamaya/spisupport/BasePropertySource.java | 1 -
.../spisupport/DefaultConfigurationContext.java | 2 +-
.../spisupport/PropertySourceComparator.java | 39 +++-
.../spisupport/BasePropertySourceTest.java | 2 +-
31 files changed, 103 insertions(+), 606 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java b/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
index 81e6dca..53f1dda 100644
--- a/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
+++ b/modules/events/src/main/java/org/apache/tamaya/events/FrozenPropertySource.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.events;
import org.apache.tamaya.spi.PropertySource;
import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
import java.io.Serializable;
import java.util.Collections;
@@ -54,7 +55,7 @@ public final class FrozenPropertySource implements PropertySource, Serializable
this.properties.putAll(propertySource.getProperties());
this.properties.put("[meta]frozenAt", String.valueOf(System.currentTimeMillis()));
this.properties = Collections.unmodifiableMap(this.properties);
- this.ordinal = propertySource.getOrdinal();
+ this.ordinal = PropertySourceComparator.getOrdinal(propertySource);
this.name = propertySource.getName();
}
@@ -76,7 +77,6 @@ public final class FrozenPropertySource implements PropertySource, Serializable
return this.name;
}
- @Override
public int getOrdinal() {
return this.ordinal;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/events/src/test/java/org/apache/tamaya/events/FrozenPropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/FrozenPropertySourceTest.java b/modules/events/src/test/java/org/apache/tamaya/events/FrozenPropertySourceTest.java
index 1431228..dc02127 100644
--- a/modules/events/src/test/java/org/apache/tamaya/events/FrozenPropertySourceTest.java
+++ b/modules/events/src/test/java/org/apache/tamaya/events/FrozenPropertySourceTest.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.events;
import org.apache.tamaya.core.propertysource.SystemPropertySource;
import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
import org.junit.Test;
import java.util.Map;
@@ -50,7 +51,8 @@ public class FrozenPropertySourceTest {
@Test
public void testGetOrdinal() throws Exception {
PropertySource ps = FrozenPropertySource.of(myPS);
- assertEquals(myPS.getOrdinal(), ps.getOrdinal());
+ assertEquals(PropertySourceComparator.getOrdinal(myPS),
+ PropertySourceComparator.getOrdinal(ps));
}
@Test
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/events/src/test/java/org/apache/tamaya/events/RandomPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/events/src/test/java/org/apache/tamaya/events/RandomPropertySource.java b/modules/events/src/test/java/org/apache/tamaya/events/RandomPropertySource.java
index dead0d9..c4414f1 100644
--- a/modules/events/src/test/java/org/apache/tamaya/events/RandomPropertySource.java
+++ b/modules/events/src/test/java/org/apache/tamaya/events/RandomPropertySource.java
@@ -32,11 +32,6 @@ public class RandomPropertySource implements PropertySource{
private Map<String, String> data = new HashMap<>();
@Override
- public int getOrdinal() {
- return 0;
- }
-
- @Override
public String getName() {
return "random";
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/functions/pom.xml
----------------------------------------------------------------------
diff --git a/modules/functions/pom.xml b/modules/functions/pom.xml
index 2162fc4..3bd96cc 100644
--- a/modules/functions/pom.xml
+++ b/modules/functions/pom.xml
@@ -49,6 +49,11 @@ under the License.
<version>${project.version}</version>
<scope>test</scope>
</dependency>
+ <dependency>
+ <groupId>org.apache.tamaya.ext</groupId>
+ <artifactId>tamaya-spisupport</artifactId>
+ <version>${project.version}</version>
+ </dependency>
<dependency>
<groupId>org.hamcrest</groupId>
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/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
index 83a628a..a4bf810 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingPropertySource.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/ConfigWrappingPropertySource.java
@@ -48,7 +48,6 @@ final class ConfigWrappingPropertySource implements PropertySource {
this.config = Objects.requireNonNull(config);
}
- @Override
public int getOrdinal() {
return ordinal;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedPropertySource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedPropertySource.java
index de48fa8..d00e446 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedPropertySource.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/EnrichedPropertySource.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.functions;
import org.apache.tamaya.spi.PropertySource;
import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
import java.util.HashMap;
import java.util.Map;
@@ -50,9 +51,8 @@ class EnrichedPropertySource implements PropertySource {
}
- @Override
public int getOrdinal() {
- return basePropertySource.getOrdinal();
+ return PropertySourceComparator.getOrdinal(basePropertySource);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
index 7eccdee..92c6946 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/FilteredPropertySource.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.functions;
import org.apache.tamaya.spi.PropertySource;
import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
import java.util.HashMap;
import java.util.Map;
@@ -43,9 +44,8 @@ class FilteredPropertySource implements PropertySource {
this.filter = Objects.requireNonNull(filter);
}
- @Override
public int getOrdinal(){
- return baseSource.getOrdinal();
+ return PropertySourceComparator.getOrdinal(baseSource);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
index 3f85f53..793c62e 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/MappedPropertySource.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.functions;
import org.apache.tamaya.spi.PropertySource;
import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
import java.util.HashMap;
import java.util.Map;
@@ -52,9 +53,8 @@ class MappedPropertySource implements PropertySource {
this.keyMapper = Objects.requireNonNull(keyMapper);
}
- @Override
public int getOrdinal() {
- return this.propertySource.getOrdinal();
+ return PropertySourceComparator.getOrdinal(this.propertySource);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java b/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
index 93ff699..c3128c4 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/PropertySourceFunctions.java
@@ -40,10 +40,6 @@ public final class PropertySourceFunctions {
* Implementation of an empty propertySource.
*/
private static final PropertySource EMPTY_PROPERTYSOURCE = new PropertySource() {
- @Override
- public int getOrdinal() {
- return 0;
- }
@Override
public String getName() {
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java b/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
index a06b8b6..eb212f5 100644
--- a/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
+++ b/modules/functions/src/main/java/org/apache/tamaya/functions/ValueMappedPropertySource.java
@@ -20,6 +20,7 @@ package org.apache.tamaya.functions;
import org.apache.tamaya.spi.PropertySource;
import org.apache.tamaya.spi.PropertyValue;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
import java.util.HashMap;
import java.util.Map;
@@ -41,9 +42,8 @@ class ValueMappedPropertySource implements PropertySource{
this.source = Objects.requireNonNull(current);
}
- @Override
public int getOrdinal() {
- return source.getOrdinal();
+ return PropertySourceComparator.getOrdinal(source);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/injection/cdi-se/src/main/java/org/apache/tamaya/integration/cdi/DefaultConfigurationContext.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi-se/src/main/java/org/apache/tamaya/integration/cdi/DefaultConfigurationContext.java b/modules/injection/cdi-se/src/main/java/org/apache/tamaya/integration/cdi/DefaultConfigurationContext.java
index ae1f0bf..49f61a4 100644
--- a/modules/injection/cdi-se/src/main/java/org/apache/tamaya/integration/cdi/DefaultConfigurationContext.java
+++ b/modules/injection/cdi-se/src/main/java/org/apache/tamaya/integration/cdi/DefaultConfigurationContext.java
@@ -28,15 +28,14 @@ import org.apache.tamaya.spi.PropertySource;
import org.apache.tamaya.spi.PropertySourceProvider;
import org.apache.tamaya.spi.PropertyValueCombinationPolicy;
import org.apache.tamaya.spi.ServiceContextManager;
+import org.apache.tamaya.spisupport.PropertyFilterComparator;
+import org.apache.tamaya.spisupport.PropertySourceComparator;
-import javax.annotation.Priority;
import javax.enterprise.inject.Vetoed;
-import java.io.Serializable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.Lock;
@@ -77,13 +76,6 @@ public class DefaultConfigurationContext implements ConfigurationContext {
*/
private final ReentrantReadWriteLock propertySourceLock = new ReentrantReadWriteLock();
- /** Comparator used for ordering property sources. */
- private final PropertySourceComparator propertySourceComparator = new PropertySourceComparator();
-
- /** Comparator used for ordering property filters. */
- private final PropertyFilterComparator propertyFilterComparator = new PropertyFilterComparator();
-
-
/**
* The first time the Configuration system gets invoked we do initialize
* all our {@link PropertySource}s and
@@ -99,7 +91,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
propertySources.addAll(evaluatePropertySourcesFromProviders());
// now sort them according to their ordinal values
- Collections.sort(propertySources, new PropertySourceComparator());
+ Collections.sort(propertySources, PropertySourceComparator.getInstance());
immutablePropertySources = Collections.unmodifiableList(propertySources);
LOG.info("Registered " + immutablePropertySources.size() + " property sources: " +
@@ -108,7 +100,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
// as next step we pick up the PropertyFilters pretty much the same way
List<PropertyFilter> propertyFilters = new ArrayList<>();
propertyFilters.addAll(ServiceContextManager.getServiceContext().getServices(PropertyFilter.class));
- Collections.sort(propertyFilters, new PropertyFilterComparator());
+ Collections.sort(propertyFilters, PropertyFilterComparator.getInstance());
immutablePropertyFilters = Collections.unmodifiableList(propertyFilters);
LOG.info("Registered " + immutablePropertyFilters.size() + " property filters: " +
immutablePropertyFilters);
@@ -128,7 +120,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
// first we load all PropertySources which got registered via java.util.ServiceLoader
propertySources.addAll(builder.getPropertySources());
// now sort them according to their ordinal values
- Collections.sort(propertySources, propertySourceComparator);
+ Collections.sort(propertySources, PropertySourceComparator.getInstance());
immutablePropertySources = Collections.unmodifiableList(propertySources);
LOG.info("Registered " + immutablePropertySources.size() + " property sources: " +
immutablePropertySources);
@@ -136,7 +128,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
// as next step we pick up the PropertyFilters pretty much the same way
List<PropertyFilter> propertyFilters = new ArrayList<>();
propertyFilters.addAll(ServiceContextManager.getServiceContext().getServices(PropertyFilter.class));
- Collections.sort(propertyFilters, propertyFilterComparator);
+ Collections.sort(propertyFilters, PropertyFilterComparator.getInstance());
immutablePropertyFilters = Collections.unmodifiableList(propertyFilters);
LOG.info("Registered " + immutablePropertyFilters.size() + " property filters: " +
immutablePropertyFilters);
@@ -163,10 +155,10 @@ public class DefaultConfigurationContext implements ConfigurationContext {
" provided the following property sources: " + sources);
propertySources.addAll(sources);
}
-
return propertySources;
}
+ @Deprecated
@Override
public void addPropertySources(PropertySource... propertySourcesToAdd) {
Lock writeLock = propertySourceLock.writeLock();
@@ -174,7 +166,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
writeLock.lock();
List<PropertySource> newPropertySources = new ArrayList<>(this.immutablePropertySources);
newPropertySources.addAll(Arrays.asList(propertySourcesToAdd));
- Collections.sort(newPropertySources, new PropertySourceComparator());
+ Collections.sort(newPropertySources, PropertySourceComparator.getInstance());
this.immutablePropertySources = Collections.unmodifiableList(newPropertySources);
} finally {
@@ -182,71 +174,6 @@ public class DefaultConfigurationContext implements ConfigurationContext {
}
}
- /**
- * Comparator used for ordering PropertySources.
- */
- private static class PropertySourceComparator implements Comparator<PropertySource>, Serializable {
-
- private static final long serialVersionUID = 1L;
-
- /**
- * Order property source reversely, the most important come first.
- *
- * @param source1 the first PropertySource
- * @param source2 the second PropertySource
- * @return the comparison result.
- */
- private int comparePropertySources(PropertySource source1, PropertySource source2) {
- if (source1.getOrdinal() < source2.getOrdinal()) {
- return -1;
- } else if (source1.getOrdinal() > source2.getOrdinal()) {
- return 1;
- } else {
- return source1.getClass().getName().compareTo(source2.getClass().getName());
- }
- }
-
- @Override
- public int compare(PropertySource source1, PropertySource source2) {
- return comparePropertySources(source1, source2);
- }
- }
-
- /**
- * Comparator used for ordering PropertyFilters.
- */
- private static class PropertyFilterComparator implements Comparator<PropertyFilter>, Serializable{
-
- private static final long serialVersionUID = 1L;
-
- /**
- * Compare 2 filters for ordering the filter chain.
- *
- * @param filter1 the first filter
- * @param filter2 the second filter
- * @return the comparison result
- */
- private int comparePropertyFilters(PropertyFilter filter1, PropertyFilter filter2) {
- Priority prio1 = filter1.getClass().getAnnotation(Priority.class);
- Priority prio2 = filter2.getClass().getAnnotation(Priority.class);
- int ord1 = prio1 != null ? prio1.value() : 0;
- int ord2 = prio2 != null ? prio2.value() : 0;
-
- if (ord1 < ord2) {
- return -1;
- } else if (ord1 > ord2) {
- return 1;
- } else {
- return filter1.getClass().getName().compareTo(filter2.getClass().getName());
- }
- }
-
- @Override
- public int compare(PropertyFilter filter1, PropertyFilter filter2) {
- return comparePropertyFilters(filter1, filter2);
- }
- }
-
@Override
public List<PropertySource> getPropertySources() {
return immutablePropertySources;
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java b/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
index f7e3c6d..a5a1755 100644
--- a/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
+++ b/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/ProvidedPropertySource.java
@@ -40,7 +40,6 @@ class ProvidedPropertySource implements PropertySource{
config.put("{meta}source.type:"+getClass().getName(), "PropertySourceProvider");
}
- @Override
public int getOrdinal() {
return 10;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java b/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
index 75c55ca..ca09065 100644
--- a/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
+++ b/modules/injection/cdi-se/src/test/java/org/apache/tamaya/integration/cdi/cfg/TestPropertySource.java
@@ -52,7 +52,6 @@ public class TestPropertySource implements PropertySource{
config.put("{meta}source.type:"+getClass().getName(), "PropertySource");
}
- @Override
public int getOrdinal() {
return 10;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
index 0853fd1..321f7f4 100644
--- a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
+++ b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/TestPropertySource.java
@@ -42,11 +42,6 @@ public class TestPropertySource implements PropertySource {
}
@Override
- public int getOrdinal() {
- return 0;
- }
-
- @Override
public String getName() {
return getClass().getName();
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
----------------------------------------------------------------------
diff --git a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
index b3117fc..26ea2de 100644
--- a/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
+++ b/modules/injection/standalone/src/test/java/org/apache/tamaya/inject/internal/DefaultDynamicValueTest.java
@@ -68,11 +68,6 @@ public class DefaultDynamicValueTest {
ConfigurationProvider.getConfigurationContextBuilder().addPropertySources(
new PropertySource() {
@Override
- public int getOrdinal() {
- return 0;
- }
-
- @Override
public String getName() {
return "test";
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/mutable-config/bnd.bnd
----------------------------------------------------------------------
diff --git a/modules/mutable-config/bnd.bnd b/modules/mutable-config/bnd.bnd
index 89222d7..7df7f7e 100644
--- a/modules/mutable-config/bnd.bnd
+++ b/modules/mutable-config/bnd.bnd
@@ -1,2 +1,4 @@
Export-Package: \
- org.apache.tamaya.mutableconfig
\ No newline at end of file
+ org.apache.tamaya.mutableconfig
+Bundle-SymbolicName: org.apache.tamaya.mutableconfig
+Bundle-Version: 0.3-INCUBATING-SNAPSHOT
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
----------------------------------------------------------------------
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
index 2e167a1..1198c09 100644
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
+++ b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/MutableConfigurationProvider.java
@@ -42,21 +42,14 @@ public final class MutableConfigurationProvider {
/**
* URIs used by this query instance to identify the backends to use for write operations.
*/
- private static MutableConfigurationProviderSpi mutableConfigurationProviderSpi = loadSpi();
-
- /**
- * SPI loader method.
- * @throws ConfigException if loading fails.
- * @return the SPI, never null.
- */
- private static MutableConfigurationProviderSpi loadSpi() {
- try{
- return ServiceContextManager.getServiceContext().getService(
+ private static MutableConfigurationProviderSpi spi(){
+ MutableConfigurationProviderSpi spi = ServiceContextManager.getServiceContext().getService(
MutableConfigurationProviderSpi.class) ;
- } catch(Exception e){
+ if(spi==null){
throw new ConfigException("Failed to initialize MutableConfigurationProviderSpi - " +
"mutable configuration support.");
}
+ return spi;
}
@@ -70,7 +63,7 @@ public final class MutableConfigurationProvider {
* @return a new MutableConfiguration instance
*/
public static MutableConfiguration createMutableConfiguration(){
- return mutableConfigurationProviderSpi.createMutableConfiguration(
+ return spi().createMutableConfiguration(
ConfigurationProvider.getConfiguration(), getApplyMostSignificantOnlyChangePolicy());
}
@@ -82,7 +75,7 @@ public final class MutableConfigurationProvider {
* @return a new MutableConfiguration instance, with the given change policy active.
*/
public static MutableConfiguration createMutableConfiguration(ChangePropagationPolicy changePropgationPolicy){
- return mutableConfigurationProviderSpi.createMutableConfiguration(
+ return spi().createMutableConfiguration(
ConfigurationProvider.getConfiguration(), changePropgationPolicy);
}
@@ -109,7 +102,7 @@ public final class MutableConfigurationProvider {
* @return a new MutableConfiguration instance
*/
public static MutableConfiguration createMutableConfiguration(Configuration configuration, ChangePropagationPolicy changePropagationPolicy){
- return mutableConfigurationProviderSpi.createMutableConfiguration(configuration, changePropagationPolicy);
+ return spi().createMutableConfiguration(configuration, changePropagationPolicy);
}
/**
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/Refreshable.java
----------------------------------------------------------------------
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/Refreshable.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/Refreshable.java
deleted file mode 100644
index 685e5e5..0000000
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/Refreshable.java
+++ /dev/null
@@ -1,33 +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.mutableconfig;
-
-/**
- * Interface to be implemented by items that can be refreshed. By default
- * these are property sources, but more types may be supported at a later
- * point in time.
- */
-public interface Refreshable {
-
- /**
- * Refreshes the item by reloading its internal state.
- */
- void refresh();
-
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/RefreshablePropertySource.java
----------------------------------------------------------------------
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/RefreshablePropertySource.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/RefreshablePropertySource.java
deleted file mode 100644
index 573f6d3..0000000
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/RefreshablePropertySource.java
+++ /dev/null
@@ -1,27 +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.mutableconfig;
-
-import org.apache.tamaya.spi.PropertySource;
-
-/**
- * Simple implementation of a mutable {@link org.apache.tamaya.spi.PropertySource} for .properties files.
- */
-public interface RefreshablePropertySource extends PropertySource, Refreshable{
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySource.java
----------------------------------------------------------------------
diff --git a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySource.java b/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySource.java
deleted file mode 100644
index d5fce6f..0000000
--- a/modules/mutable-config/src/main/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySource.java
+++ /dev/null
@@ -1,219 +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.mutableconfig.propertysources;
-
-import org.apache.tamaya.events.ConfigEventManager;
-import org.apache.tamaya.events.FrozenPropertySource;
-import org.apache.tamaya.events.PropertySourceChange;
-import org.apache.tamaya.events.PropertySourceChangeBuilder;
-import org.apache.tamaya.functions.Supplier;
-import org.apache.tamaya.mutableconfig.RefreshablePropertySource;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spi.PropertyValue;
-import org.apache.tamaya.spisupport.BasePropertySource;
-
-import java.util.Map;
-import java.util.Objects;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Simple implementation of a mutable {@link PropertySource} for .properties files.
- */
-public class LazyRefreshablePropertySource extends BasePropertySource
-implements RefreshablePropertySource {
-
- /**
- * The logger.
- */
- private static final Logger LOG = Logger.getLogger(LazyRefreshablePropertySource.class.getName());
-
- /**
- * Default update interval is 1 minute.
- */
- private static final long DEFAULT_UPDATE_INTERVAL = 60000L;
-
- /**
- * The property source name.
- */
- private Supplier<PropertySource> propertySourceSupplier;
-
- /**
- * The current propertySource.
- */
- private PropertySource propertySource;
-
- /**
- * Timestamp of last read.
- */
- private long lastRead;
-
- /**
- * Interval, when the resource should try to update its contents.
- */
- private long updateInterval = DEFAULT_UPDATE_INTERVAL;
-
- private static boolean eventSupportLoaded = checkEventSupport();
-
- private static boolean checkEventSupport() {
- try{
- Class.forName("org.apache.tamaya.events.ConfigEventManager");
- return true;
- }catch(Exception e){
- return false;
- }
- }
-
-
- /**
- * Creates a new Properties based PropertySource based on the given URL.
- *
- * @param defaultOrdinal the default ordinal to be used.
- * @param propertySourceSupplier the property source supplier, not null.
- */
- private LazyRefreshablePropertySource(Supplier<PropertySource> propertySourceSupplier, int defaultOrdinal) {
- super(defaultOrdinal);
- this.propertySourceSupplier = Objects.requireNonNull(propertySourceSupplier);
- this.propertySource = Objects.requireNonNull(propertySourceSupplier.get());
- }
-
- /**
- * Creates a new Properties based PropertySource based on the given URL.
- *
- * @param propertySourceSupplier the property source supplier, not null.
- */
- private LazyRefreshablePropertySource(Supplier<PropertySource> propertySourceSupplier) {
- this.propertySourceSupplier = Objects.requireNonNull(propertySourceSupplier);
- this.propertySource = Objects.requireNonNull(propertySourceSupplier.get());
- }
-
- /**
- * Creates a new Properties based PropertySource based on the given URL.
- *
- * @param defaultOrdinal the default ordinal to be used.
- * @param propertySourceSupplier the property source supplier, not null.
- */
- public static LazyRefreshablePropertySource of(Supplier<PropertySource> propertySourceSupplier, int defaultOrdinal) {
- return new LazyRefreshablePropertySource(propertySourceSupplier, defaultOrdinal);
- }
-
- /**
- * Creates a new Properties based PropertySource based on the given URL.
- *
- * @param propertySourceSupplier the property source supplier, not null.
- */
- public static LazyRefreshablePropertySource of(Supplier<PropertySource> propertySourceSupplier) {
- return new LazyRefreshablePropertySource(propertySourceSupplier);
- }
-
- /**
- * Sets the current refreh interval.
- * @param millis the new refreh interval in millis.
- */
- public void setUpdateInterval(long millis){
- this.updateInterval = millis;
- }
-
- /**
- * Access the current refresh interval.
- * @return the current refresh interval.
- */
- public long getDefaultUpdateInterval(){
- return this.updateInterval;
- }
-
- @Override
- public PropertyValue get(String key) {
- checkLoad();
- return this.propertySource.get(key);
- }
-
- @Override
- public String getName() {
- return this.propertySource.getName();
- }
-
- @Override
- public Map<String, String> getProperties() {
- checkLoad();
- return this.propertySource.getProperties();
- }
-
-
- private void checkLoad() {
- if((lastRead+updateInterval)<System.currentTimeMillis()){
- refresh();
- }
- }
-
- /**
- * Reloads the property source from its supplier. If Tamaya's event module is loaded corresoinding
- * change events are triggered if changes were detected.
- */
- @Override
- public void refresh() {
- try{
- Object previous = null;
- if(eventSupportLoaded){
- previous = FrozenPropertySource.of(this.propertySource);
- }
- this.propertySource = Objects.requireNonNull(propertySourceSupplier.get());
- if(eventSupportLoaded){
- PropertySourceChange changeEvent = PropertySourceChangeBuilder.of(
- (PropertySource)previous)
- .addChanges(this.propertySource).build();
- if(!changeEvent.isEmpty()) {
- ConfigEventManager.fireEvent(changeEvent);
- }
- }
- } catch (Exception e) {
- LOG.log(Level.WARNING, "Cannot refresh property source " + propertySource.getName(), e);
- }
- }
-
- @Override
- public boolean equals(Object o) {
- if (this == o){
- return true;
- }
- if (!(o instanceof LazyRefreshablePropertySource)){
- return false;
- }
-
- LazyRefreshablePropertySource that = (LazyRefreshablePropertySource) o;
-
- return propertySource.getName().equals(that.propertySource.getName());
-
- }
-
- @Override
- public int hashCode() {
- return propertySource.getName().hashCode();
- }
-
- @Override
- public String toString() {
- return "RefreshablePropertySource{" +
- "\n name=" + getName() +
- "\n delegate=" + propertySource +
- "\n lastRead=" + lastRead +
- "\n updateInterval=" + updateInterval +
- "\n}";
- }
-}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/mutable-config/src/test/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/mutable-config/src/test/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySourceTest.java b/modules/mutable-config/src/test/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySourceTest.java
deleted file mode 100644
index e67ca59..0000000
--- a/modules/mutable-config/src/test/java/org/apache/tamaya/mutableconfig/propertysources/LazyRefreshablePropertySourceTest.java
+++ /dev/null
@@ -1,162 +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.mutableconfig.propertysources;
-
-import org.apache.tamaya.functions.Supplier;
-import org.apache.tamaya.spi.PropertySource;
-import org.apache.tamaya.spisupport.SimplePropertySource;
-import org.junit.Test;
-
-import static org.junit.Assert.*;
-
-/**
- * Tests for {@link LazyRefreshablePropertySource}. Created by atsticks on 11.11.16.
- */
-public class LazyRefreshablePropertySourceTest {
-
- private SimplePropertySource simplePropertySource = new SimplePropertySource(
- getClass().getClassLoader().getResource("test.properties")
- );
- private SimplePropertySource simplePropertySource2 = new SimplePropertySource(
- getClass().getClassLoader().getResource("test2.properties")
- );
- private volatile boolean selectFirst;
-
- @Test
- public void of() throws Exception {
- assertNotNull(LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }
- ));
- }
-
- @Test
- public void of_WithDefaultOrdinal() throws Exception {
- assertNotNull(LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }, 100
- ));
- }
-
- @Test
- public void get() throws Exception {
- LazyRefreshablePropertySource ps = LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }
- );
- assertEquals(ps.get("test1").getValue(), "test1");
- assertEquals(ps.get("test2").getValue(), "test2");
- assertNull(ps.get("test3"));
- }
-
- @Test
- public void getName() throws Exception {
- LazyRefreshablePropertySource ps = LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }
- );
- assertEquals(ps.getName(), simplePropertySource.getName());
- }
-
- @Test
- public void getProperties() throws Exception {
- LazyRefreshablePropertySource ps = LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }
- );
- assertEquals(ps.getProperties(), simplePropertySource.getProperties());
- }
-
- @Test
- public void refresh() throws Exception {
- LazyRefreshablePropertySource ps1 = LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- try {
- if (selectFirst) {
- return simplePropertySource;
- } else {
- return simplePropertySource2;
- }
- }finally{
- selectFirst = !selectFirst;
- }
- }
- }
- );
- // Simulate a refresh with the switching provider created above...
- ps1.setUpdateInterval(1L);
- if(ps1.get("test3")!=null){
- Thread.sleep(5L); // NOSONAR
- assertEquals("test4", ps1.get("test4").getValue());
- }else{
- Thread.sleep(5L); // NOSONAR
- assertNull("test3", ps1.get("test3"));
- }
- }
-
- @Test
- public void testEqualsAndHashCode() throws Exception {
- LazyRefreshablePropertySource ps1 = LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }
- );
- LazyRefreshablePropertySource ps2 = LazyRefreshablePropertySource.of(
- new Supplier<PropertySource>() {
- @Override
- public PropertySource get() {
- return simplePropertySource;
- }
- }
- );
- assertEquals(ps1, ps2);
- assertEquals(ps1.hashCode(), ps2.hashCode());
- }
-
- @Test
- public void testToString() throws Exception {
-
- }
-
-}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/resolver/src/main/java/org/apache/tamaya/resolver/Resolver.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/Resolver.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/Resolver.java
index eadb547..c2bc908 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/Resolver.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/Resolver.java
@@ -18,6 +18,7 @@
*/
package org.apache.tamaya.resolver;
+import org.apache.tamaya.ConfigException;
import org.apache.tamaya.resolver.spi.ExpressionEvaluator;
import org.apache.tamaya.resolver.spi.ExpressionResolver;
import org.apache.tamaya.spi.ServiceContextManager;
@@ -41,8 +42,15 @@ public final class Resolver {
* @return the filtered/evaluated value, including null.
*/
public static String evaluateExpression(String key, String value){
- return ServiceContextManager.getServiceContext().getService(ExpressionEvaluator.class)
- .evaluateExpression(key, value, true);
+ return evaluator().evaluateExpression(key, value, true);
+ }
+
+ private static ExpressionEvaluator evaluator() {
+ ExpressionEvaluator evaluator = ServiceContextManager.getServiceContext().getService(ExpressionEvaluator.class);
+ if(evaluator==null){
+ throw new ConfigException("No ExpressionEvaluator registered.");
+ }
+ return evaluator;
}
/**
@@ -62,8 +70,7 @@ public final class Resolver {
* @return the filtered/evaluated value, including null.
*/
public static String evaluateExpression(String value, boolean maskNotFound){
- return ServiceContextManager.getServiceContext().getService(ExpressionEvaluator.class)
- .evaluateExpression(null, value, maskNotFound);
+ return evaluator().evaluateExpression(null, value, maskNotFound);
}
/**
@@ -71,7 +78,6 @@ public final class Resolver {
* @return the resolvers currently known, never null.
*/
public static Collection<ExpressionResolver> getResolvers(){
- return ServiceContextManager.getServiceContext().getService(ExpressionEvaluator.class)
- .getResolvers();
+ return evaluator().getResolvers();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
index 85fe845..20e289b 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/DefaultExpressionEvaluator.java
@@ -37,7 +37,6 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
private static final Logger LOG = Logger.getLogger(DefaultExpressionEvaluator.class.getName());
- private final List<ExpressionResolver> resolvers = new ArrayList<>();
/**
* Comparator used (not needed with Java8).
@@ -50,16 +49,6 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
};
/**
- * Default constructor.
- */
- public DefaultExpressionEvaluator() {
- for (ExpressionResolver resolver : ServiceContextManager.getServiceContext().getServices(ExpressionResolver.class)) {
- resolvers.add(resolver);
- }
- Collections.sort(resolvers, RESOLVER_COMPARATOR);
- }
-
- /**
* Order ExpressionResolver reversely, the most important come first.
*
* @param res1 the first ExpressionResolver
@@ -161,7 +150,12 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
@Override
public Collection<ExpressionResolver> getResolvers() {
- return new ArrayList<>(this.resolvers);
+ List<ExpressionResolver> resolvers = new ArrayList<>();
+ for (ExpressionResolver resolver : ServiceContextManager.getServiceContext().getServices(ExpressionResolver.class)) {
+ resolvers.add(resolver);
+ }
+ Collections.sort(resolvers, RESOLVER_COMPARATOR);
+ return resolvers;
}
/**
@@ -229,6 +223,7 @@ public class DefaultExpressionEvaluator implements ExpressionEvaluator {
private String evaluateInternal(String unresolvedExpression, boolean maskUnresolved) {
String value = null;
// 1 check for explicit prefix
+ Collection<ExpressionResolver> resolvers = getResolvers();
for(ExpressionResolver resolver:resolvers){
if(unresolvedExpression.startsWith(resolver.getResolverPrefix())){
value = resolver.evaluate(unresolvedExpression.substring(resolver.getResolverPrefix().length()));
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
index 20e2c7a..bd90083 100644
--- a/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
+++ b/modules/resolver/src/main/java/org/apache/tamaya/resolver/internal/ExpressionResolutionFilter.java
@@ -18,6 +18,7 @@
*/
package org.apache.tamaya.resolver.internal;
+import org.apache.tamaya.ConfigException;
import org.apache.tamaya.resolver.spi.ExpressionEvaluator;
import org.apache.tamaya.spi.FilterContext;
import org.apache.tamaya.spi.PropertyFilter;
@@ -36,7 +37,13 @@ public class ExpressionResolutionFilter implements PropertyFilter {
private static final Logger LOG = Logger.getLogger(ExpressionResolutionFilter.class.getName());
- private final ExpressionEvaluator evaluator = ServiceContextManager.getServiceContext().getService(ExpressionEvaluator.class);
+ private final ExpressionEvaluator evaluator(){
+ ExpressionEvaluator evaluator = ServiceContextManager.getServiceContext().getService(ExpressionEvaluator.class);
+ if(evaluator==null){
+ throw new ConfigException("No ExpressionEvaluator registered.");
+ }
+ return evaluator;
+ }
/**
* Resolves an expression in the form current <code>${resolverId:expression}</code> or
@@ -79,7 +86,7 @@ public class ExpressionResolutionFilter implements PropertyFilter {
@Override
public String filterProperty(String valueToBeFiltered, FilterContext context){
LOG.finest("Resolving " + valueToBeFiltered + "(key=" + context.getKey() + ")");
- return evaluator.evaluateExpression(context.getKey(), valueToBeFiltered, true);
+ return evaluator().evaluateExpression(context.getKey(), valueToBeFiltered, true);
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
----------------------------------------------------------------------
diff --git a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
index 7d99cbc..1c26f31 100644
--- a/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
+++ b/modules/resolver/src/test/java/org/apache/tamaya/resolver/MyTestPropertySource.java
@@ -76,11 +76,6 @@ public class MyTestPropertySource implements PropertySource{
}
@Override
- public int getOrdinal() {
- return 0;
- }
-
- @Override
public String getName() {
return "test";
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java b/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
index 791f2c2..6a6398a 100644
--- a/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
+++ b/modules/resources/src/main/java/org/apache/tamaya/resource/AbstractPathPropertySourceProvider.java
@@ -150,7 +150,6 @@ public abstract class AbstractPathPropertySourceProvider implements PropertySour
this.properties.putAll(props);
}
- @Override
public int getOrdinal() {
PropertyValue configuredOrdinal = get(TAMAYA_ORDINAL);
if (configuredOrdinal != null) {
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
----------------------------------------------------------------------
diff --git a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java b/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
index 7ea9b4c..1299a0c 100644
--- a/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
+++ b/modules/resources/src/test/java/org/apache/tamaya/resource/internal/PathBasedPropertySourceProvider.java
@@ -70,11 +70,6 @@ public class PathBasedPropertySourceProvider extends AbstractPathPropertySourceP
}
@Override
- public int getOrdinal() {
- return 0;
- }
-
- @Override
public String getName() {
return name;
}
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/BasePropertySource.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/BasePropertySource.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/BasePropertySource.java
index 30ff90d..9ae130a 100644
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/BasePropertySource.java
+++ b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/BasePropertySource.java
@@ -106,7 +106,6 @@ public abstract class BasePropertySource implements PropertySource{
this.defaultOrdinal = defaultOrdinal;
}
- @Override
public int getOrdinal() {
Integer ordinal = this.ordinal;
if(ordinal!=null){
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/DefaultConfigurationContext.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/DefaultConfigurationContext.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/DefaultConfigurationContext.java
index 7b177a2..f5c97d6 100644
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/DefaultConfigurationContext.java
+++ b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/DefaultConfigurationContext.java
@@ -178,7 +178,7 @@ public class DefaultConfigurationContext implements ConfigurationContext {
b.append(" ");
appendFormatted(b, ps.getClass().getSimpleName(), 30);
appendFormatted(b, ps.getName(), 70);
- appendFormatted(b, String.valueOf(ps.getOrdinal()), 8);
+ appendFormatted(b, String.valueOf(PropertySourceComparator.getOrdinal(ps)), 8);
appendFormatted(b, String.valueOf(ps.isScannable()), 10);
if (ps.isScannable()) {
appendFormatted(b, String.valueOf(ps.getProperties().size()), 8);
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
index 71e3ffb..96fffad 100644
--- a/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
+++ b/modules/spi-support/src/main/java/org/apache/tamaya/spisupport/PropertySourceComparator.java
@@ -19,9 +19,14 @@
package org.apache.tamaya.spisupport;
import org.apache.tamaya.spi.PropertySource;
+import org.apache.tamaya.spi.PropertyValue;
+import javax.annotation.Priority;
import java.io.Serializable;
+import java.lang.reflect.Method;
import java.util.Comparator;
+import java.util.logging.Level;
+import java.util.logging.Logger;
/**
* Comparator for ordering of PropertySources based on their ordinal method and class name.
@@ -30,6 +35,8 @@ public class PropertySourceComparator implements Comparator<PropertySource>, Ser
/** serial version UID. */
private static final long serialVersionUID = 1L;
+ private static final Logger LOG = Logger.getLogger(PropertySourceComparator.class.getName());
+
private static final PropertySourceComparator INSTANCE = new PropertySourceComparator();
private PropertySourceComparator(){}
@@ -51,15 +58,43 @@ public class PropertySourceComparator implements Comparator<PropertySource>, Ser
* @return the comparison result.
*/
private int comparePropertySources(PropertySource source1, PropertySource source2) {
- if (source1.getOrdinal() < source2.getOrdinal()) {
+ if (getOrdinal(source1) < getOrdinal(source2)) {
return -1;
- } else if (source1.getOrdinal() > source2.getOrdinal()) {
+ } else if (getOrdinal(source1) > getOrdinal(source2)) {
return 1;
} else {
return source1.getClass().getName().compareTo(source2.getClass().getName());
}
}
+ public static int getOrdinal(PropertySource propertySource) {
+ PropertyValue ordinalValue = propertySource.get(PropertySource.TAMAYA_ORDINAL);
+ if(ordinalValue!=null){
+ try{
+ return Integer.parseInt(ordinalValue.getValue().trim());
+ }catch(Exception e){
+ LOG.finest("Failed to parse ordinal from " + PropertySource.TAMAYA_ORDINAL +
+ " in " + propertySource.getName()+": "+ordinalValue.getValue());
+ }
+ }
+ try {
+ Method method = propertySource.getClass().getMethod("getOrdinal");
+ if(int.class.equals(method.getReturnType())){
+ try {
+ return (int)method.invoke(propertySource);
+ } catch (Exception e) {
+ LOG.log(Level.FINEST, "Error calling int getOrdinal() on " + propertySource.getName(), e);
+ }
+ }
+ } catch (NoSuchMethodException e) {
+ LOG.finest("No int getOrdinal() method found in " + propertySource.getName());
+ }
+ Priority prio = propertySource.getClass().getAnnotation(Priority.class);
+ if(prio!=null){
+ return prio.value();
+ }
+ return 0;
+ }
@Override
public int compare(PropertySource source1, PropertySource source2) {
return comparePropertySources(source1, source2);
http://git-wip-us.apache.org/repos/asf/incubator-tamaya-extensions/blob/01610f6c/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
----------------------------------------------------------------------
diff --git a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
index dc24165..2cdac70 100644
--- a/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
+++ b/modules/spi-support/src/test/java/org/apache/tamaya/spisupport/BasePropertySourceTest.java
@@ -47,7 +47,7 @@ public class BasePropertySourceTest {
}
};
- Assert.assertEquals(56, defaultPropertySource.getOrdinal());
+ Assert.assertEquals(56, PropertySourceComparator.getOrdinal(defaultPropertySource));
Assert.assertEquals(1000, new OverriddenOrdinalPropertySource().getOrdinal());
// propertySource with invalid ordinal