Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 584A4200C28 for ; Mon, 27 Feb 2017 00:05:30 +0100 (CET) Received: by cust-asf.ponee.io (Postfix) id 56B56160B6E; Sun, 26 Feb 2017 23:05:30 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 5AD60160B78 for ; Mon, 27 Feb 2017 00:05:28 +0100 (CET) Received: (qmail 15655 invoked by uid 500); 26 Feb 2017 23:05:27 -0000 Mailing-List: contact commits-help@tamaya.incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tamaya.incubator.apache.org Delivered-To: mailing list commits@tamaya.incubator.apache.org Received: (qmail 15645 invoked by uid 99); 26 Feb 2017 23:05:27 -0000 Received: from pnap-us-west-generic-nat.apache.org (HELO spamd2-us-west.apache.org) (209.188.14.142) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 26 Feb 2017 23:05:27 +0000 Received: from localhost (localhost [127.0.0.1]) by spamd2-us-west.apache.org (ASF Mail Server at spamd2-us-west.apache.org) with ESMTP id ED35F1A020D for ; Sun, 26 Feb 2017 23:05:26 +0000 (UTC) X-Virus-Scanned: Debian amavisd-new at spamd2-us-west.apache.org X-Spam-Flag: NO X-Spam-Score: -6.567 X-Spam-Level: X-Spam-Status: No, score=-6.567 tagged_above=-999 required=6.31 tests=[KAM_ASCII_DIVIDERS=0.8, RCVD_IN_DNSWL_HI=-5, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, RP_MATCHES_RCVD=-2.999, SPF_NEUTRAL=0.652] autolearn=disabled Received: from mx1-lw-eu.apache.org ([10.40.0.8]) by localhost (spamd2-us-west.apache.org [10.40.0.9]) (amavisd-new, port 10024) with ESMTP id oQszLo60fRPy for ; Sun, 26 Feb 2017 23:05:17 +0000 (UTC) Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by mx1-lw-eu.apache.org (ASF Mail Server at mx1-lw-eu.apache.org) with SMTP id 675445FE03 for ; Sun, 26 Feb 2017 23:05:15 +0000 (UTC) Received: (qmail 14863 invoked by uid 99); 26 Feb 2017 23:05:14 -0000 Received: from git1-us-west.apache.org (HELO git1-us-west.apache.org) (140.211.11.23) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 26 Feb 2017 23:05:14 +0000 Received: by git1-us-west.apache.org (ASF Mail Server at git1-us-west.apache.org, from userid 33) id 634E6DFFB9; Sun, 26 Feb 2017 23:05:14 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: anatole@apache.org To: commits@tamaya.incubator.apache.org Date: Sun, 26 Feb 2017 23:05:19 -0000 Message-Id: In-Reply-To: References: X-Mailer: ASF-Git Admin Mailer Subject: [06/11] incubator-tamaya-extensions git commit: TAMAYA-236: improve ordinal handling. archived-at: Sun, 26 Feb 2017 23:05:30 -0000 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 Authored: Thu Feb 23 01:01:37 2017 +0100 Committer: anatole 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 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. ${project.version} test + + org.apache.tamaya.ext + tamaya-spisupport + ${project.version} + org.hamcrest 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 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 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 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, 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, 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 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 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 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 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 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 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 getProperties() { - checkLoad(); - return this.propertySource.getProperties(); - } - - - private void checkLoad() { - if((lastRead+updateInterval)() { - @Override - public PropertySource get() { - return simplePropertySource; - } - } - )); - } - - @Test - public void of_WithDefaultOrdinal() throws Exception { - assertNotNull(LazyRefreshablePropertySource.of( - new Supplier() { - @Override - public PropertySource get() { - return simplePropertySource; - } - }, 100 - )); - } - - @Test - public void get() throws Exception { - LazyRefreshablePropertySource ps = LazyRefreshablePropertySource.of( - new Supplier() { - @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() { - @Override - public PropertySource get() { - return simplePropertySource; - } - } - ); - assertEquals(ps.getName(), simplePropertySource.getName()); - } - - @Test - public void getProperties() throws Exception { - LazyRefreshablePropertySource ps = LazyRefreshablePropertySource.of( - new Supplier() { - @Override - public PropertySource get() { - return simplePropertySource; - } - } - ); - assertEquals(ps.getProperties(), simplePropertySource.getProperties()); - } - - @Test - public void refresh() throws Exception { - LazyRefreshablePropertySource ps1 = LazyRefreshablePropertySource.of( - new Supplier() { - @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() { - @Override - public PropertySource get() { - return simplePropertySource; - } - } - ); - LazyRefreshablePropertySource ps2 = LazyRefreshablePropertySource.of( - new Supplier() { - @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 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 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 getResolvers() { - return new ArrayList<>(this.resolvers); + List 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 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 ${resolverId:expression} 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, 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, 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