[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