From fde7b55deef0a82dbaf0c5ed39184495598b760c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Mon, 28 Dec 2009 20:39:53 +0000 Subject: [PATCH] * opened up factory methods to return the concrete type created * added @reverse@ method to create @OrderAwarePluginRegistry@ with the reverse order of the plugins git-svn-id: svn+ssh://svn.synyx.de/var/svn/synyx/opensource/hera/trunk@8471 5a64d73e-33d6-4ccc-9058-23f8668ecac9 --- .../hera/core/OrderAwarePluginRegistry.java | 62 +++++++++++++++++-- .../synyx/hera/core/SimplePluginRegistry.java | 8 +-- 2 files changed, 60 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/synyx/hera/core/OrderAwarePluginRegistry.java b/core/src/main/java/org/synyx/hera/core/OrderAwarePluginRegistry.java index b6803c0..e39ba3a 100644 --- a/core/src/main/java/org/synyx/hera/core/OrderAwarePluginRegistry.java +++ b/core/src/main/java/org/synyx/hera/core/OrderAwarePluginRegistry.java @@ -18,7 +18,25 @@ public class OrderAwarePluginRegistry, S> extends SimplePluginRegistry { @SuppressWarnings("unchecked") - private Comparator comparator = new AnnotationAwareOrderComparator(); + private static final Comparator DEFAULT_COMPARATOR = + new AnnotationAwareOrderComparator(); + + private static final Comparator REVERSE_COMPARATOR = + new Comparator() { + + public int compare(Object o1, Object o2) { + + return -1 * DEFAULT_COMPARATOR.compare(o1, o2); + } + }; + + private Comparator comparator; + + + protected OrderAwarePluginRegistry(Comparator comparator) { + + this.comparator = comparator; + } /** @@ -28,9 +46,9 @@ public class OrderAwarePluginRegistry, S> extends * @param * @return */ - public static > PluginRegistry create() { + public static > OrderAwarePluginRegistry create() { - return new OrderAwarePluginRegistry(); + return new OrderAwarePluginRegistry(DEFAULT_COMPARATOR); } @@ -42,10 +60,30 @@ public class OrderAwarePluginRegistry, S> extends * @param plugins * @return */ - public static > PluginRegistry create( - List plugins) { + public static > OrderAwarePluginRegistry create( + List plugins) { - PluginRegistry registry = create(); + OrderAwarePluginRegistry registry = create(); + registry.setPlugins(plugins); + + return registry; + } + + + /** + * Creates a new {@link OrderAwarePluginRegistry} with the given plugins and + * the order of the plugins reverted. + * + * @param + * @param + * @param plugins + * @return + */ + public static > OrderAwarePluginRegistry createReverse( + List plugins) { + + OrderAwarePluginRegistry registry = + new OrderAwarePluginRegistry(REVERSE_COMPARATOR); registry.setPlugins(plugins); return registry; @@ -77,4 +115,16 @@ public class OrderAwarePluginRegistry, S> extends super.addPlugin(plugin); Collections.sort(getPlugins(), comparator); } + + + /** + * Returns a new {@link OrderAwarePluginRegistry} with the order of the + * plugins reverted. + * + * @return + */ + public OrderAwarePluginRegistry reverse() { + + return createReverse(getPlugins()); + } } diff --git a/core/src/main/java/org/synyx/hera/core/SimplePluginRegistry.java b/core/src/main/java/org/synyx/hera/core/SimplePluginRegistry.java index 09ec1a3..915ab65 100644 --- a/core/src/main/java/org/synyx/hera/core/SimplePluginRegistry.java +++ b/core/src/main/java/org/synyx/hera/core/SimplePluginRegistry.java @@ -52,7 +52,7 @@ public class SimplePluginRegistry, S> implements * @param * @return */ - public static > PluginRegistry create() { + public static > SimplePluginRegistry create() { return new SimplePluginRegistry(); } @@ -65,10 +65,10 @@ public class SimplePluginRegistry, S> implements * @param * @return */ - public static > PluginRegistry create( - List plugins) { + public static > SimplePluginRegistry create( + List plugins) { - PluginRegistry registry = create(); + SimplePluginRegistry registry = create(); registry.setPlugins(plugins); return registry;