[java-metadata-aggregator] branch master updated: MDA-254 - Make ItemIdentificationStrategy generic

Ian Young ian at iay.org.uk
Wed Jul 29 14:59:59 UTC 2020


This is an automated email from the git hooks/post-receive script.

iay pushed a commit to branch master
in repository java-metadata-aggregator.

View the commit online:
http://git.shibboleth.net/view/?p=java-metadata-aggregator.git;a=commit;h=47c0cc79efa9bf20c73d2633eb0bfdb355188aa7

The following commit(s) were added to refs/heads/master by this push:
       new  47c0cc7   MDA-254 - Make ItemIdentificationStrategy generic
47c0cc7 is described below

commit 47c0cc79efa9bf20c73d2633eb0bfdb355188aa7
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Wed Jul 29 15:59:40 2020 +0100

    MDA-254 - Make ItemIdentificationStrategy generic
    
    https://issues.shibboleth.net/jira/browse/MDA-254
---
 ...bstractCompositeItemIdentificationStrategy.java | 10 +++---
 .../FirstItemIdItemIdentificationStrategy.java     |  8 +++--
 .../metadata/ItemIdentificationStrategy.java       |  8 +++--
 ...trationAuthorityItemIdentificationStrategy.java |  6 ++--
 .../AbstractItemMetadataSelectionStage.java        |  6 ++--
 ...actCompositeItemIdentificationStrategyTest.java | 37 ++++++++++++++++++++++
 .../FirstItemIdItemIdentificationStrategyTest.java |  8 ++---
 ...ionAuthorityItemIdentificationStrategyTest.java | 20 ++++++------
 8 files changed, 74 insertions(+), 29 deletions(-)

diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java
index 6d9de2a..a0d95d4 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java
@@ -37,10 +37,12 @@ import net.shibboleth.utilities.java.support.primitive.StringSupport;
  * 
  * If the extra identifier is <code>null</code>, only the basic identifier is used.
  *
+ * @param <T> type of {@link Item} to be identified
+ *
  * @since 0.9.0
  */
 @ThreadSafe
-public abstract class AbstractCompositeItemIdentificationStrategy implements ItemIdentificationStrategy {
+public abstract class AbstractCompositeItemIdentificationStrategy<T> implements ItemIdentificationStrategy<T> {
 
     /** Identifier to use if an {@link Item} does not have an {@link ItemId}. Default value: "unidentified" */
     @Nonnull @NotEmpty @GuardedBy("this")
@@ -71,7 +73,7 @@ public abstract class AbstractCompositeItemIdentificationStrategy implements Ite
      * @param item {@link Item} to extract a basic identifier from
      * @return a basic identifier for the {@link Item}, or <code>null</code>
      */
-    @Nullable abstract String getBasicIdentifier(@Nonnull final Item<?> item);
+    @Nullable abstract String getBasicIdentifier(@Nonnull final Item<T> item);
     
     /**
      * Get an extra identifier for the {@link Item}.
@@ -79,10 +81,10 @@ public abstract class AbstractCompositeItemIdentificationStrategy implements Ite
      * @param item {@link Item} to extract an extra identifier from
      * @return an extra identifier for the {@link Item}, or <code>null</code>
      */
-    @Nullable abstract String getExtraIdentifier(@Nonnull final Item<?> item);
+    @Nullable abstract String getExtraIdentifier(@Nonnull final Item<T> item);
 
     @Override
-    @Nonnull public String getItemIdentifier(@Nonnull final Item<?> item) {
+    @Nonnull public String getItemIdentifier(@Nonnull final Item<T> item) {
         Constraint.isNotNull(item, "Item can not equal null");
 
         final StringBuilder res = new StringBuilder();
diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
index b8041bd..80c35ad 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
@@ -26,12 +26,14 @@ import javax.annotation.concurrent.Immutable;
 /**
  * Strategy that returns the first {@link ItemId} associated with an {@link Item} or, if no {@link ItemId} is
  * associated with the item, a generic identifier is returned.
+ *
+ * @param <T> type of {@link Item} to be identified
  */
 @Immutable
-public class FirstItemIdItemIdentificationStrategy extends AbstractCompositeItemIdentificationStrategy {
+public class FirstItemIdItemIdentificationStrategy<T> extends AbstractCompositeItemIdentificationStrategy<T> {
 
     @Override
-    @Nullable protected String getBasicIdentifier(@Nonnull final Item<?> item) {
+    @Nullable protected String getBasicIdentifier(@Nonnull final Item<T> item) {
         final List<ItemId> itemIds = item.getItemMetadata().get(ItemId.class);
         if (!itemIds.isEmpty()) {
             return itemIds.get(0).getId();
@@ -40,7 +42,7 @@ public class FirstItemIdItemIdentificationStrategy extends AbstractCompositeItem
     }
 
     @Override
-    @Nullable protected String getExtraIdentifier(@Nonnull final Item<?> item) {
+    @Nullable protected String getExtraIdentifier(@Nonnull final Item<T> item) {
         return null;
     }
 
diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/ItemIdentificationStrategy.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/ItemIdentificationStrategy.java
index aab7999..1eec94e 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/ItemIdentificationStrategy.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/ItemIdentificationStrategy.java
@@ -21,14 +21,16 @@ import javax.annotation.Nonnull;
 import javax.annotation.concurrent.ThreadSafe;
 
 /**
- * Strategy for determining a displayable identifier for a given {@link Item}.
+ * Strategy for determining a human-readable identifier for a given {@link Item}.
  * 
  * <p>
  * All implementations of this interface <strong>must</strong> be thread-safe.
  * </p>
+ *
+ * @param <T> type of {@link Item} to be identified
  */
 @ThreadSafe
-public interface ItemIdentificationStrategy {
+public interface ItemIdentificationStrategy<T> {
 
     /**
      * Gets an identifier for the item.
@@ -37,6 +39,6 @@ public interface ItemIdentificationStrategy {
      * 
      * @return the identifier, never <code>null</code>
      */
-    @Nonnull String getItemIdentifier(@Nonnull Item<?> item);
+    @Nonnull String getItemIdentifier(@Nonnull Item<T> item);
 
 }
diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategy.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategy.java
index 539d2af..8d9fab5 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategy.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategy.java
@@ -42,10 +42,12 @@ import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
  * specified blacklist, and it can be mapped to a simpler value for display if
  * desired.
  *
+ * @param <T> type of {@link Item} to be identified
+ *
  * @since 0.9.0
  */
 @ThreadSafe
-public class RegistrationAuthorityItemIdentificationStrategy extends FirstItemIdItemIdentificationStrategy {
+public class RegistrationAuthorityItemIdentificationStrategy<T> extends FirstItemIdItemIdentificationStrategy<T> {
 
     /**
      * Set of registration authorities to be ignored.
@@ -107,7 +109,7 @@ public class RegistrationAuthorityItemIdentificationStrategy extends FirstItemId
      * @return registration authority name, or <code>null</code>.
      */
     @Override
-    @Nullable protected String getExtraIdentifier(@Nonnull final Item<?> item) {
+    @Nullable protected String getExtraIdentifier(@Nonnull final Item<T> item) {
         final List<RegistrationAuthority> regAuths = item.getItemMetadata().get(RegistrationAuthority.class);
         
         // nothing to return if there isn't a registration authority
diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/pipeline/AbstractItemMetadataSelectionStage.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/pipeline/AbstractItemMetadataSelectionStage.java
index 3b17e0c..7a55bd6 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/pipeline/AbstractItemMetadataSelectionStage.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/pipeline/AbstractItemMetadataSelectionStage.java
@@ -53,7 +53,7 @@ public abstract class AbstractItemMetadataSelectionStage<T> extends AbstractStag
 
     /** Strategy used to generate item identifiers for logging purposes. */
     @Nonnull @GuardedBy("this")
-    private ItemIdentificationStrategy identificationStrategy = new FirstItemIdItemIdentificationStrategy();
+    private ItemIdentificationStrategy<T> identificationStrategy = new FirstItemIdItemIdentificationStrategy<>();
 
     /**
      * Gets the {@link ItemMetadata} classes that, if an item contains them, will cause the {@link Item} to be
@@ -85,7 +85,7 @@ public abstract class AbstractItemMetadataSelectionStage<T> extends AbstractStag
      * 
      * @return strategy used to generate {@link Item} identifiers for logging purposes
      */
-    @Nonnull public final synchronized ItemIdentificationStrategy getItemIdentificationStrategy() {
+    @Nonnull public final synchronized ItemIdentificationStrategy<T> getItemIdentificationStrategy() {
         return identificationStrategy;
     }
 
@@ -94,7 +94,7 @@ public abstract class AbstractItemMetadataSelectionStage<T> extends AbstractStag
      * 
      * @param strategy strategy used to generate {@link Item} identifiers for logging purposes, can not be null
      */
-    public synchronized void setIdentificationStrategy(@Nonnull final ItemIdentificationStrategy strategy) {
+    public synchronized void setIdentificationStrategy(@Nonnull final ItemIdentificationStrategy<T> strategy) {
         throwSetterPreconditionExceptions();
         identificationStrategy = Constraint.isNotNull(strategy, "Item identification strategy can not be null");
     }
diff --git a/aggregator-pipeline/src/test/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategyTest.java b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategyTest.java
new file mode 100644
index 0000000..1c7d65d
--- /dev/null
+++ b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategyTest.java
@@ -0,0 +1,37 @@
+
+package net.shibboleth.metadata;
+
+import org.testng.Assert;
+import org.testng.annotations.Test;
+
+public class AbstractCompositeItemIdentificationStrategyTest {
+
+    /**
+     * Specialised identification strategy for {@link Item}<{@link String}>.
+     */
+    static class StringItemIdentificationStrategy extends AbstractCompositeItemIdentificationStrategy<String> {
+
+        @Override
+        String getBasicIdentifier(Item<String> item) {
+            return "[basic:" + item.unwrap() + "]";
+        }
+
+        @Override
+        String getExtraIdentifier(Item<String> item) {
+            return "[extra:" + item.unwrap() + "]";
+        }
+        
+    }
+
+    /**
+     * Test the construction and execution of a type-specialised item identification strategy.
+     */
+    @Test
+    public void testSpecificType() {
+        final Item<String> item = new MockItem("howdy");
+        final ItemIdentificationStrategy<String> strat = new StringItemIdentificationStrategy();
+        final var id = strat.getItemIdentifier(item);
+        Assert.assertEquals(id, "[basic:howdy] ([extra:howdy])");
+    }
+
+}
diff --git a/aggregator-pipeline/src/test/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategyTest.java b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategyTest.java
index 1ad9c43..2ae1470 100644
--- a/aggregator-pipeline/src/test/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategyTest.java
+++ b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategyTest.java
@@ -25,7 +25,7 @@ public class FirstItemIdItemIdentificationStrategyTest {
 
     @Test
     public void unidentified() {
-        final FirstItemIdItemIdentificationStrategy strat = new FirstItemIdItemIdentificationStrategy();
+        final var strat = new FirstItemIdItemIdentificationStrategy<String>();
         Assert.assertEquals(strat.getNoItemIdIdentifier(), "unidentified");
         final Item<String> item = new MockItem("item");
         final String res = strat.getItemIdentifier(item);
@@ -34,7 +34,7 @@ public class FirstItemIdItemIdentificationStrategyTest {
     
     @Test
     public void setNoItemIdIdentifier() {
-        final FirstItemIdItemIdentificationStrategy strat = new FirstItemIdItemIdentificationStrategy();
+        final var strat = new FirstItemIdItemIdentificationStrategy<String>();
         strat.setNoItemIdIdentifier("mu");
         Assert.assertEquals(strat.getNoItemIdIdentifier(), "mu");
         final Item<String> item = new MockItem("item");
@@ -44,7 +44,7 @@ public class FirstItemIdItemIdentificationStrategyTest {
     
     @Test
     public void oneIdentifier() {
-        final FirstItemIdItemIdentificationStrategy strat = new FirstItemIdItemIdentificationStrategy();
+        final var strat = new FirstItemIdItemIdentificationStrategy<String>();
         final Item<String> item = new MockItem("item");
         item.getItemMetadata().put(new ItemId("id"));
         final String res = strat.getItemIdentifier(item);
@@ -53,7 +53,7 @@ public class FirstItemIdItemIdentificationStrategyTest {
 
     @Test
     public void twoIdentifiers() {
-        final FirstItemIdItemIdentificationStrategy strat = new FirstItemIdItemIdentificationStrategy();
+        final var strat = new FirstItemIdItemIdentificationStrategy<String>();
         final Item<String> item = new MockItem("item");
         item.getItemMetadata().put(new ItemId("first"));
         item.getItemMetadata().put(new ItemId("second"));
diff --git a/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategyTest.java b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategyTest.java
index 17e4bf2..69a4867 100644
--- a/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategyTest.java
+++ b/aggregator-pipeline/src/test/java/net/shibboleth/metadata/dom/saml/mdrpi/RegistrationAuthorityItemIdentificationStrategyTest.java
@@ -32,15 +32,15 @@ import net.shibboleth.metadata.MockItem;
 
 public class RegistrationAuthorityItemIdentificationStrategyTest {
 
-    private RegistrationAuthorityItemIdentificationStrategy makeStrat() {
-        final RegistrationAuthorityItemIdentificationStrategy strat = new RegistrationAuthorityItemIdentificationStrategy();
+    private RegistrationAuthorityItemIdentificationStrategy<String> makeStrat() {
+        final var strat = new RegistrationAuthorityItemIdentificationStrategy<String>();
         strat.setNoItemIdIdentifier("mu");
         return strat;
     }
     
     @Test
     public void base_unidentified() {
-        final RegistrationAuthorityItemIdentificationStrategy strat = new RegistrationAuthorityItemIdentificationStrategy();
+        final var strat = new RegistrationAuthorityItemIdentificationStrategy<String>();
         Assert.assertEquals(strat.getNoItemIdIdentifier(), "unidentified");
         final Item<String> item = new MockItem("item");
         final String res = strat.getItemIdentifier(item);
@@ -49,7 +49,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
     
     @Test
     public void base_setNoItemIdIdentifier() {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         strat.setNoItemIdIdentifier("mu2");
         Assert.assertEquals(strat.getNoItemIdIdentifier(), "mu2");
         final Item<String> item = new MockItem("item");
@@ -59,7 +59,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
     
     @Test
     public void base_oneIdentifier() {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         final Item<String> item = new MockItem("item");
         item.getItemMetadata().put(new ItemId("id"));
         final String res = strat.getItemIdentifier(item);
@@ -68,7 +68,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
 
     @Test
     public void base_twoIdentifiers() {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         final Item<String> item = new MockItem("item");
         item.getItemMetadata().put(new ItemId("first"));
         item.getItemMetadata().put(new ItemId("second"));
@@ -78,7 +78,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
 
     @Test
     public void getItemIdentifier() {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         
         final Item<String> item2 = new MockItem("item 2");
         Assert.assertEquals(strat.getItemIdentifier(item2), "mu");
@@ -88,7 +88,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
     
     @Test
     public void withRegistrationAuthority() throws Exception {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         final Item<String> item = new MockItem("present");
         item.getItemMetadata().put(new ItemId("uk002232"));
         item.getItemMetadata().put(new RegistrationAuthority("http://ukfederation.org.uk"));
@@ -97,7 +97,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
 
     @Test
     public void ignoredAuthority() throws Exception {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         final Item<String> item = new MockItem("present");
         item.getItemMetadata().put(new ItemId("uk002232"));
         item.getItemMetadata().put(new RegistrationAuthority("http://ukfederation.org.uk"));
@@ -111,7 +111,7 @@ public class RegistrationAuthorityItemIdentificationStrategyTest {
     
     @Test
     public void mappedAuthority() throws Exception {
-        final RegistrationAuthorityItemIdentificationStrategy strat = makeStrat();
+        final var strat = makeStrat();
         final Map<String, String> nameMap = new HashMap<>();
         nameMap.put("http://ukfederation.org.uk", "UKf");
         strat.setRegistrationAuthorityDisplayNames(nameMap);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the commits mailing list