[java-metadata-aggregator] 02/02: Refactor FirstItemIdItemIdentificationStrategy for extensibility.

Ian Young ian at iay.org.uk
Fri Dec 11 03:45:07 EST 2015


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

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

commit bd88ce2ac280c7756c5d9a0a8ce4b961b9a6260a
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Fri Dec 11 08:46:05 2015 +0000

    Refactor FirstItemIdItemIdentificationStrategy for extensibility.
---
 ...stractCompositeItemIdentificationStrategy.java} | 59 +++++++++++++++++-----
 .../FirstItemIdItemIdentificationStrategy.java     | 47 +++++------------
 2 files changed, 60 insertions(+), 46 deletions(-)

diff --git a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java
similarity index 54%
copy from aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
copy to aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java
index e25ed60..311125a 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/AbstractCompositeItemIdentificationStrategy.java
@@ -17,19 +17,27 @@
 
 package net.shibboleth.metadata;
 
-import java.util.List;
-
 import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+import javax.annotation.concurrent.ThreadSafe;
 
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
- * 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.
+ * Abstract class implementing a generic two-part strategy for item identification.
+ * 
+ * Generating the two components of the identifier is delegated to subclasses.
+ * The basic and extra identifiers are then combined into a composite identifier
+ * for display.
+ * 
+ * If the basic identifier is <code>null</code>, a configured default is used.
+ * 
+ * If the extra identifier is <code>null</code>, only the basic identifier is used.
  */
-public class FirstItemIdItemIdentificationStrategy implements ItemIdentificationStrategy {
+ at ThreadSafe
+public abstract class AbstractCompositeItemIdentificationStrategy implements ItemIdentificationStrategy {
 
     /** Identifier to use if an {@link Item} does not have an {@link ItemId}. Default value: "unidentified" */
     private String noItemIdIdentifier = "unidentified";
@@ -53,15 +61,42 @@ public class FirstItemIdItemIdentificationStrategy implements ItemIdentification
                 Constraint.isNotNull(StringSupport.trimOrNull(identifier), "Identifier can not be null or empty");
     }
 
-    /** {@inheritDoc} */
-    @Override @Nonnull public String getItemIdentifier(@Nonnull final Item<?> item) {
+    /**
+     * Get a basic identifier for the {@link Item}.
+     * 
+     * @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);
+    
+    /**
+     * Get an extra identifier for the {@link Item}.
+     * 
+     * @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);
+
+    @Override
+    @Nonnull public String getItemIdentifier(@Nonnull final Item<?> item) {
         Constraint.isNotNull(item, "Item can not equal null");
-        
-        List<ItemId> itemIds = item.getItemMetadata().get(ItemId.class);
-        if (itemIds != null && !itemIds.isEmpty()) {
-            return itemIds.get(0).getId();
+
+        final StringBuilder res = new StringBuilder();
+        final String basic = getBasicIdentifier(item);
+        if (basic == null) {
+            res.append(getNoItemIdIdentifier());
         } else {
-            return noItemIdIdentifier;
+            res.append(basic);
         }
+        
+        final String extra = getExtraIdentifier(item);
+        if (extra != null) {
+            res.append("( ");
+            res.append(extra);
+            res.append(")");
+        }
+        
+        return res.toString();
     }
+
 }
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 e25ed60..27795d9 100644
--- a/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
+++ b/aggregator-pipeline/src/main/java/net/shibboleth/metadata/FirstItemIdItemIdentificationStrategy.java
@@ -20,48 +20,27 @@ package net.shibboleth.metadata;
 import java.util.List;
 
 import javax.annotation.Nonnull;
-
-import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.logic.Constraint;
-import net.shibboleth.utilities.java.support.primitive.StringSupport;
+import javax.annotation.Nullable;
 
 /**
  * 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.
  */
-public class FirstItemIdItemIdentificationStrategy implements ItemIdentificationStrategy {
-
-    /** Identifier to use if an {@link Item} does not have an {@link ItemId}. Default value: "unidentified" */
-    private String noItemIdIdentifier = "unidentified";
+public class FirstItemIdItemIdentificationStrategy extends AbstractCompositeItemIdentificationStrategy {
 
-    /**
-     * Gets the identifier to use if an {@link Item} does not have an {@link ItemId}.
-     * 
-     * @return identifier to use if an {@link Item} does not have an {@link ItemId}
-     */
-    public String getNoItemIdIdentifier() {
-        return noItemIdIdentifier;
-    }
-
-    /**
-     * Sets the identifier to use if an {@link Item} does not have an {@link ItemId}.
-     * 
-     * @param identifier identifier to use if an {@link Item} does not have an {@link ItemId}
-     */
-    public void setNoItemIdIdentifier(@Nonnull @NotEmpty final String identifier) {
-        noItemIdIdentifier =
-                Constraint.isNotNull(StringSupport.trimOrNull(identifier), "Identifier can not be null or empty");
-    }
-
-    /** {@inheritDoc} */
-    @Override @Nonnull public String getItemIdentifier(@Nonnull final Item<?> item) {
-        Constraint.isNotNull(item, "Item can not equal null");
-        
-        List<ItemId> itemIds = item.getItemMetadata().get(ItemId.class);
-        if (itemIds != null && !itemIds.isEmpty()) {
+    @Override
+    @Nullable protected String getBasicIdentifier(@Nonnull final Item<?> item) {
+        final List<ItemId> itemIds = item.getItemMetadata().get(ItemId.class);
+        if (!itemIds.isEmpty()) {
             return itemIds.get(0).getId();
         } else {
-            return noItemIdIdentifier;
+            return null;
         }
     }
+
+    @Override
+    @Nullable protected String getExtraIdentifier(@Nonnull final Item<?> item) {
+        return null;
+    }
+
 }

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


More information about the commits mailing list