[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