TAMAYA-199: Ensured ServiceContext does sort services along their priorities, reusing existing comparators.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/commit/33722ab0 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/tree/33722ab0 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tamaya/diff/33722ab0 Branch: refs/heads/master Commit: 33722ab03c1900adb94730b52a6543e59844e14d Parents: 4950b41 Author: anatole <[email protected]> Authored: Mon Dec 19 23:56:33 2016 +0100 Committer: anatole <[email protected]> Committed: Mon Dec 19 23:57:15 2016 +0100 ---------------------------------------------------------------------- .../tamaya/core/internal/DefaultServiceContext.java | 1 + .../tamaya/core/internal/PriorityServiceComparator.java | 10 ++++++++++ .../tamaya/core/internal/PropertyFilterComparator.java | 10 ++++++++++ .../tamaya/core/internal/PropertySourceComparator.java | 10 ++++++++++ .../tamaya/core/internal/DefaultServiceContextTest.java | 10 ++++------ 5 files changed, 35 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/33722ab0/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java index 757f9c0..9e1fe1c 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java +++ b/code/core/src/main/java/org/apache/tamaya/core/internal/DefaultServiceContext.java @@ -77,6 +77,7 @@ public final class DefaultServiceContext implements ServiceContext { for (T t : ServiceLoader.load(serviceType)) { services.add(t); } + Collections.sort(services, PriorityServiceComparator.getInstance()); services = Collections.unmodifiableList(services); } catch (ServiceConfigurationError e) { Logger.getLogger(DefaultServiceContext.class.getName()).log(Level.WARNING, http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/33722ab0/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java index c0cfca6..671c3fb 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java +++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PriorityServiceComparator.java @@ -26,6 +26,16 @@ import java.util.Comparator; */ public class PriorityServiceComparator implements Comparator<Object> { + private static final PriorityServiceComparator INSTANCE = new PriorityServiceComparator(); + + /** + * Get the shared instance of the comparator. + * @return the shared instance, never null. + */ + public static PriorityServiceComparator getInstance(){ + return INSTANCE; + } + @Override public int compare(Object o1, Object o2) { int prio = getPriority(o1) - getPriority(o2); http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/33722ab0/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java index abf22be..e0bd8e0 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java +++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertyFilterComparator.java @@ -31,6 +31,16 @@ public class PropertyFilterComparator implements Comparator<PropertyFilter>, Ser private static final long serialVersionUID = 1L; + private static final PropertyFilterComparator INSTANCE = new PropertyFilterComparator(); + + /** + * Get the shared instance of the comparator. + * @return the shared instance, never null. + */ + public static PropertyFilterComparator getInstance(){ + return INSTANCE; + } + /** * Compare 2 filters for ordering the filter chain. * http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/33722ab0/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java ---------------------------------------------------------------------- diff --git a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java index 24ee1f2..f686ee3 100644 --- a/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java +++ b/code/core/src/main/java/org/apache/tamaya/core/internal/PropertySourceComparator.java @@ -30,6 +30,16 @@ public class PropertySourceComparator implements Comparator<PropertySource>, Ser private static final long serialVersionUID = 1L; + private static final PropertySourceComparator INSTANCE = new PropertySourceComparator(); + + /** + * Get the shared instance of the comparator. + * @return the shared instance, never null. + */ + public static PropertySourceComparator getInstance(){ + return INSTANCE; + } + /** * Order property source reversely, the most important come first. * http://git-wip-us.apache.org/repos/asf/incubator-tamaya/blob/33722ab0/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultServiceContextTest.java ---------------------------------------------------------------------- diff --git a/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultServiceContextTest.java b/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultServiceContextTest.java index 9999a8e..13b2eb6 100644 --- a/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultServiceContextTest.java +++ b/code/core/src/test/java/org/apache/tamaya/core/internal/DefaultServiceContextTest.java @@ -75,15 +75,13 @@ public class DefaultServiceContextTest { } { - Collection<MultiImplsInterface> services = context.getServices(MultiImplsInterface.class); + List<MultiImplsInterface> services = context.getServices(MultiImplsInterface.class); Assert.assertNotNull(services); Assert.assertEquals(3, services.size()); - for (MultiImplsInterface service : services) { - Assert.assertTrue(service instanceof MultiImpl1 || - service instanceof MultiImpl2 || - service instanceof MultiImpl3); - } + Assert.assertTrue(services.get(0) instanceof MultiImpl2); + Assert.assertTrue(services.get(1) instanceof MultiImpl1); + Assert.assertTrue(services.get(2) instanceof MultiImpl3); } }
