[java-metadata-aggregator] 01/02: Nullability: rework ElementMatcher and ElementMaker as functional interfaces

Ian Young ian at iay.org.uk
Tue Apr 4 07:01:48 UTC 2023


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

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

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

commit 58a176c4e8ed34fe8e763cfbd7df18629f4058d5
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Tue Apr 4 06:50:42 2023 +0100

    Nullability: rework ElementMatcher and ElementMaker as functional interfaces
---
 .../net/shibboleth/metadata/dom/Container.java     | 41 ++++++++++-----------
 .../net/shibboleth/metadata/dom/ElementMaker.java  | 35 +++++-------------
 .../shibboleth/metadata/dom/ElementMatcher.java    | 33 +++++------------
 .../{ElementMaker.java => SimpleElementMaker.java} | 10 +++---
 ...ementMatcher.java => SimpleElementMatcher.java} | 10 +++---
 .../metadata/dom/saml/AttributeElementMaker.java   |  8 ++---
 .../metadata/dom/saml/AttributeElementMatcher.java | 10 +++---
 .../dom/saml/AttributeValueElementMaker.java       |  8 ++---
 .../dom/saml/AttributeValueElementMatcher.java     | 10 +++---
 .../shibboleth/metadata/dom/saml/SAMLSupport.java  | 23 ++++++------
 .../saml/mdattr/EntityAttributeAddingStage.java    |  6 ++--
 .../metadata/dom/saml/mdattr/MDAttrSupport.java    | 15 ++++----
 .../net/shibboleth/metadata/dom/ContainerTest.java | 42 +++++++++++-----------
 .../shibboleth/metadata/dom/ElementMakerTest.java  |  8 ++---
 .../metadata/dom/ElementMatcherTest.java           | 12 +++----
 .../dom/saml/AttributeElementMakerTest.java        |  2 +-
 .../dom/saml/AttributeElementMatcherTest.java      | 10 +++---
 .../dom/saml/AttributeValueElementMakerTest.java   |  2 +-
 .../dom/saml/AttributeValueElementMatcherTest.java | 12 ++++---
 19 files changed, 125 insertions(+), 172 deletions(-)

diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/Container.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/Container.java
index ce70672..d4820a0 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/Container.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/Container.java
@@ -19,12 +19,11 @@ package net.shibboleth.metadata.dom;
 
 import java.util.ArrayList;
 import java.util.List;
-import java.util.function.Function;
-import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import net.shibboleth.shared.annotation.constraint.NonnullElements;
 import net.shibboleth.shared.logic.Constraint;
 import net.shibboleth.shared.xml.ElementSupport;
 
@@ -205,17 +204,16 @@ public class Container {
     }
 
     /**
-     * Find an existing child matching the {@link Predicate}, if there is one.
+     * Find an existing child matching the {@link ElementMatcher}, if there is one.
      * 
-     * @param matcher {@link Predicate} to match against existing children
+     * @param matcher {@link ElementMatcher} to match against existing children
      * @return a child {@link Container} whose {@link Element} matches
-     *      the supplied {@link Predicate}.
+     *      the supplied {@link ElementMatcher}.
      */
-    @Nullable
-    public Container findChild(@Nonnull final Predicate<Element> matcher) {
+    public @Nullable Container findChild(final @Nonnull ElementMatcher matcher) {
         for (final Element e : ElementSupport.getChildElements(element)) {
             assert e != null;
-            if (matcher.test(e)) {
+            if (matcher.match(e)) {
                 return new Container(e, this);
             }
         }
@@ -223,17 +221,16 @@ public class Container {
     }
 
     /**
-     * Find all existing children matching the {@link Predicate}.
+     * Find all existing children matching the {@link ElementMatcher}.
      * 
-     * @param matcher {@link Predicate} to match against existing children
+     * @param matcher {@link ElementMatcher} to match against existing children
      * @return a {@link List} of all matching children
      */
-    @Nonnull
-    public List<Container> findChildren(@Nonnull final Predicate<Element> matcher) {
+    public @Nonnull @NonnullElements List<Container> findChildren(final @Nonnull ElementMatcher matcher) {
         final List<Container> list = new ArrayList<>();
         for (final Element e : ElementSupport.getChildElements(element)) {
             assert e != null;
-            if (matcher.test(e)) {
+            if (matcher.match(e)) {
                 list.add(new Container(e, this));
             }
         }
@@ -256,30 +253,28 @@ public class Container {
     /**
      * Add a child to the container.
      * 
-     * @param maker {@link Function} to create the new child element
+     * @param maker {@link ElementMaker} to create the new child element
      * @param adder strategy class to place the new child inside the container
      * @return a container wrapping the new child element
      */
-    @Nonnull
-    public Container addChild(@Nonnull final Function<Container, Element> maker,
+    public @Nonnull Container addChild(@Nonnull final ElementMaker maker,
             @Nonnull final ChildAddingStrategy adder) {
-        final Element child = maker.apply(this);
+        final Element child = maker.make(this);
         assert child != null;
         return addChild(child, adder);
     }
 
     /**
-     * Locate a child container matching the {@link Predicate}, creating one
+     * Locate a child container matching the {@link ElementMatcher}, creating one
      * if necessary.
      * 
-     * @param matcher {@link Predicate} to match against existing children
-     * @param maker a {@link Function} to create a new child {@link Element}
+     * @param matcher {@link ElementMatcher} to match against existing children
+     * @param maker a {@link ElementMaker} to create a new child {@link Element}
      * @param adder a {@link ChildAddingStrategy} determining where to place the new child
      * @return a child {@link Container}, possibly just created
      */
-    @Nonnull
-    public Container locateChild(@Nonnull final Predicate<Element> matcher,
-            @Nonnull final Function<Container, Element> maker,
+    public @Nonnull Container locateChild(final @Nonnull ElementMatcher matcher,
+            @Nonnull final ElementMaker maker,
             @Nonnull final ChildAddingStrategy adder) {
 
         // Return an existing child if one exists
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java
index 0a20c71..4377f00 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java
@@ -14,44 +14,27 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package net.shibboleth.metadata.dom;
 
-import java.util.function.Function;
-
 import javax.annotation.Nonnull;
-import javax.annotation.concurrent.Immutable;
-import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
 
-import net.shibboleth.shared.xml.ElementSupport;
-
 /**
- * Basic maker class for {@link Element}s for use with the {@link Container} system.
+ * Functional interface allowing for the construction of a new {@link Element}
+ * within the given {@link Container}.
  *
  * @since 0.10.0
  */
- at Immutable
-public class ElementMaker implements Function<Container, Element> {
-
-    /** Qualified name for the {@link Element} to be created. */
-    @Nonnull private final QName name;
+ at FunctionalInterface
+public interface ElementMaker {
 
     /**
-     * Constructor.
-     * 
-     * @param qname qualified name for the {@link Element} to be created
+     * Construct an {@link Element} within the given {@link Container}.
+     *
+     * @param container parent {@link Container} for the new {@link Element}
+     * @return newly constructed {@link Element}
      */
-    public ElementMaker(@Nonnull final QName qname) {
-        name = qname;
-    }
-
-    @Override
-    public Element apply(final Container input) {
-        final var element = input.unwrap().getOwnerDocument();
-        assert element != null;
-        return ElementSupport.constructElement(element, name);
-    }
+    @Nonnull Element make(@Nonnull Container container);
 
 }
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java
index f37c60b..72d5166 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java
@@ -14,43 +14,26 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
 package net.shibboleth.metadata.dom;
 
-import java.util.function.Predicate;
-
 import javax.annotation.Nonnull;
-import javax.annotation.concurrent.Immutable;
-import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
 
-import net.shibboleth.shared.logic.Constraint;
-import net.shibboleth.shared.xml.ElementSupport;
-
 /**
- * Basic matcher class for {@link Element}s for use with the {@link Container} system.
+ * Functional interface representing matching an {@link Element}.
  *
  * @since 0.10.0
  */
- at Immutable
-public class ElementMatcher implements Predicate<Element> {
-
-    /** Element {@link QName} to match. */
-    @Nonnull private final QName qname;
+ at FunctionalInterface
+public interface ElementMatcher {
 
     /**
-     * Constructor.
-     * 
-     * @param qnameToMatch qualified name ({@link QName}) to match
+     * Match an {@link Element} against specified criteria.
+     *
+     * @param input the {@link Element} to match
+     * @return <code>true</code> if the {@link Element} matches
      */
-    public ElementMatcher(@Nonnull final QName qnameToMatch) {
-        qname = Constraint.isNotNull(qnameToMatch, "qnameToMatch must not be null");
-    }
-
-    @Override
-    public boolean test(final Element input) {
-        return ElementSupport.isElementNamed(input, qname);
-    }
+    boolean match(@Nonnull Element input);
 
 }
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/SimpleElementMaker.java
similarity index 85%
copy from mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java
copy to mda-framework/src/main/java/net/shibboleth/metadata/dom/SimpleElementMaker.java
index 0a20c71..5850a67 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMaker.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/SimpleElementMaker.java
@@ -17,8 +17,6 @@
 
 package net.shibboleth.metadata.dom;
 
-import java.util.function.Function;
-
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.Immutable;
 import javax.xml.namespace.QName;
@@ -33,7 +31,7 @@ import net.shibboleth.shared.xml.ElementSupport;
  * @since 0.10.0
  */
 @Immutable
-public class ElementMaker implements Function<Container, Element> {
+public class SimpleElementMaker implements ElementMaker {
 
     /** Qualified name for the {@link Element} to be created. */
     @Nonnull private final QName name;
@@ -43,13 +41,13 @@ public class ElementMaker implements Function<Container, Element> {
      * 
      * @param qname qualified name for the {@link Element} to be created
      */
-    public ElementMaker(@Nonnull final QName qname) {
+    public SimpleElementMaker(@Nonnull final QName qname) {
         name = qname;
     }
 
     @Override
-    public Element apply(final Container input) {
-        final var element = input.unwrap().getOwnerDocument();
+    public @Nonnull Element make(final @Nonnull Container container) {
+        final var element = container.unwrap().getOwnerDocument();
         assert element != null;
         return ElementSupport.constructElement(element, name);
     }
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/SimpleElementMatcher.java
similarity index 86%
copy from mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java
copy to mda-framework/src/main/java/net/shibboleth/metadata/dom/SimpleElementMatcher.java
index f37c60b..946d988 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/ElementMatcher.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/SimpleElementMatcher.java
@@ -17,8 +17,6 @@
 
 package net.shibboleth.metadata.dom;
 
-import java.util.function.Predicate;
-
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.Immutable;
 import javax.xml.namespace.QName;
@@ -34,22 +32,22 @@ import net.shibboleth.shared.xml.ElementSupport;
  * @since 0.10.0
  */
 @Immutable
-public class ElementMatcher implements Predicate<Element> {
+public class SimpleElementMatcher implements ElementMatcher {
 
     /** Element {@link QName} to match. */
-    @Nonnull private final QName qname;
+    private final @Nonnull QName qname;
 
     /**
      * Constructor.
      * 
      * @param qnameToMatch qualified name ({@link QName}) to match
      */
-    public ElementMatcher(@Nonnull final QName qnameToMatch) {
+    public SimpleElementMatcher(@Nonnull final QName qnameToMatch) {
         qname = Constraint.isNotNull(qnameToMatch, "qnameToMatch must not be null");
     }
 
     @Override
-    public boolean test(final Element input) {
+    public boolean match(final @Nonnull Element input) {
         return ElementSupport.isElementNamed(input, qname);
     }
 
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMaker.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMaker.java
index f0943bb..d311232 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMaker.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMaker.java
@@ -23,7 +23,7 @@ import javax.annotation.concurrent.Immutable;
 import org.w3c.dom.Element;
 
 import net.shibboleth.metadata.dom.Container;
-import net.shibboleth.metadata.dom.ElementMaker;
+import net.shibboleth.metadata.dom.SimpleElementMaker;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
@@ -33,7 +33,7 @@ import net.shibboleth.shared.logic.Constraint;
  * @since 0.10.0
  */
 @Immutable
-public class AttributeElementMaker extends ElementMaker {
+public class AttributeElementMaker extends SimpleElementMaker {
 
     /** Value for the <code>Name</code> XML attribute. */
     @Nonnull
@@ -56,8 +56,8 @@ public class AttributeElementMaker extends ElementMaker {
     }
 
     @Override
-    public Element apply(final Container container) {
-        final Element newElement = super.apply(container);
+    public @Nonnull Element make(final @Nonnull Container container) {
+        final Element newElement = super.make(container);
         newElement.setAttributeNS(null, "Name", attributeName);
         newElement.setAttributeNS(null, "NameFormat", attributeNameFormat);
         return newElement;
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcher.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcher.java
index dfd141f..c6a5da2 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcher.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcher.java
@@ -22,18 +22,18 @@ import javax.annotation.concurrent.Immutable;
 
 import org.w3c.dom.Element;
 
-import net.shibboleth.metadata.dom.ElementMatcher;
+import net.shibboleth.metadata.dom.SimpleElementMatcher;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
- * Match {@link java.util.function.Predicate} for SAML <code>Attribute</code> elements with specific
+ * {@link ElementMatcher} for SAML <code>Attribute</code> elements with specific
  * <code>Name</code> and <code>NameFormat</code> attributes,
  * for use with the {@link net.shibboleth.metadata.dom.Container} system.
  *
  * @since 0.10.0
  */
 @Immutable
-public class AttributeElementMatcher extends ElementMatcher {
+public class AttributeElementMatcher extends SimpleElementMatcher {
 
     /** <code>NameFormat</code> attribute value to match. */
     @Nonnull private final String matchFormat;
@@ -54,9 +54,9 @@ public class AttributeElementMatcher extends ElementMatcher {
     }
 
     @Override
-    public boolean test(@Nonnull final Element element) {
+    public boolean match(@Nonnull final Element element) {
         // check for element name
-        if (!super.test(element)) {
+        if (!super.match(element)) {
             return false;
         }
 
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMaker.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMaker.java
index 5e32c35..e59d744 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMaker.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMaker.java
@@ -23,7 +23,7 @@ import javax.annotation.concurrent.Immutable;
 import org.w3c.dom.Element;
 
 import net.shibboleth.metadata.dom.Container;
-import net.shibboleth.metadata.dom.ElementMaker;
+import net.shibboleth.metadata.dom.SimpleElementMaker;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
@@ -31,7 +31,7 @@ import net.shibboleth.shared.logic.Constraint;
  * for use with the {@link Container} system.
  */
 @Immutable
-public class AttributeValueElementMaker extends ElementMaker {
+public class AttributeValueElementMaker extends SimpleElementMaker {
 
     /** Value for the attribute. */
     @Nonnull
@@ -48,8 +48,8 @@ public class AttributeValueElementMaker extends ElementMaker {
     }
 
     @Override
-    public Element apply(@Nonnull final Container container) {
-        final Element newElement = super.apply(container);
+    public Element make(@Nonnull final Container container) {
+        final Element newElement = super.make(container);
         newElement.setTextContent(attributeValue);
         return newElement;
     }
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcher.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcher.java
index 150e3bb..ed8c016 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcher.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcher.java
@@ -22,16 +22,16 @@ import javax.annotation.concurrent.Immutable;
 
 import org.w3c.dom.Element;
 
-import net.shibboleth.metadata.dom.ElementMatcher;
+import net.shibboleth.metadata.dom.SimpleElementMatcher;
 import net.shibboleth.shared.logic.Constraint;
 
 /**
- * Match {@link java.util.function.Predicate} for SAML <code>AttributeValue</code> elements with specific
+ * {@link ElementMatcher} for SAML <code>AttributeValue</code> elements with specific
  * text values,
  * for use with the {@link net.shibboleth.metadata.dom.Container} system.
  */
 @Immutable
-public class AttributeValueElementMatcher extends ElementMatcher {
+public class AttributeValueElementMatcher extends SimpleElementMatcher {
 
     /** <code>Attribute</code> value to match. */
     @Nonnull private final String matchValue;
@@ -47,9 +47,9 @@ public class AttributeValueElementMatcher extends ElementMatcher {
     }
 
     @Override
-    public boolean test(@Nonnull final Element element) {
+    public boolean match(@Nonnull final Element element) {
         // check for element name
-        if (!super.test(element)) {
+        if (!super.match(element)) {
             return false;
         }
 
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java
index b028519..7e3567e 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/SAMLSupport.java
@@ -17,9 +17,6 @@
 
 package net.shibboleth.metadata.dom.saml;
 
-import java.util.function.Function;
-import java.util.function.Predicate;
-
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.ThreadSafe;
 import javax.xml.namespace.QName;
@@ -29,7 +26,9 @@ import org.w3c.dom.Element;
 
 import net.shibboleth.metadata.dom.Container;
 import net.shibboleth.metadata.dom.ElementMaker;
+import net.shibboleth.metadata.dom.SimpleElementMaker;
 import net.shibboleth.metadata.dom.ElementMatcher;
+import net.shibboleth.metadata.dom.SimpleElementMatcher;
 
 /**
  * Helper class for dealing with SAML documents.
@@ -49,7 +48,8 @@ public final class SAMLSupport {
     public static final @Nonnull QName ATTRIBUTE_NAME = new QName(SAML_NS, "Attribute", SAML_PREFIX);
     
     /** Unspecified default <code>NameFormat</code> value for <code>Attribute</code> elements. */
-    public static final @Nonnull String ATTRNAME_FORMAT_UNSPECIFIED = "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified";
+    public static final @Nonnull String ATTRNAME_FORMAT_UNSPECIFIED =
+            "urn:oasis:names:tc:SAML:2.0:attrname-format:unspecified";
     
     /** saml:AttributeValue element. */
     public static final @Nonnull QName ATTRIBUTE_VALUE_NAME = new QName(SAML_NS, "AttributeValue", SAML_PREFIX);
@@ -59,16 +59,16 @@ public final class SAMLSupport {
      *
      * @since 0.10.0
      */
-    public static final @Nonnull Predicate<Element> EXTENSIONS_MATCHER =
-            new ElementMatcher(SAMLMetadataSupport.EXTENSIONS_NAME);
+    public static final @Nonnull ElementMatcher EXTENSIONS_MATCHER =
+            new SimpleElementMatcher(SAMLMetadataSupport.EXTENSIONS_NAME);
 
     /**
      * Maker for the <code>Extensions</code> element, for use with the {@link Container} system.
      *
      * @since 0.10.0
      */
-    public static final @Nonnull Function<Container, Element> EXTENSIONS_MAKER =
-            new ElementMaker(SAMLMetadataSupport.EXTENSIONS_NAME);
+    public static final @Nonnull ElementMaker EXTENSIONS_MAKER =
+            new SimpleElementMaker(SAMLMetadataSupport.EXTENSIONS_NAME);
 
     /** Constructor. */
     private SAMLSupport() {
@@ -81,13 +81,14 @@ public final class SAMLSupport {
      * @param attribute <code>Attribute</code> {@link Element}
      * @return <code>NameFormat</code> value, or the "unspecified" default
      */
-    @Nonnull
-    public static String extractAttributeNameFormat(@Nonnull final Element attribute) {
+    public static @Nonnull String extractAttributeNameFormat(@Nonnull final Element attribute) {
         final Attr attr = attribute.getAttributeNode("NameFormat");
         if (attr == null) {
             return ATTRNAME_FORMAT_UNSPECIFIED;
         }
-        return attr.getValue();
+        final var value = attr.getValue();
+        assert value != null;
+        return value;
     }
 
 }
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/EntityAttributeAddingStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/EntityAttributeAddingStage.java
index f82d958..9df0610 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/EntityAttributeAddingStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/EntityAttributeAddingStage.java
@@ -18,7 +18,6 @@
 package net.shibboleth.metadata.dom.saml.mdattr;
 
 import java.util.List;
-import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.GuardedBy;
@@ -29,6 +28,7 @@ import org.w3c.dom.Element;
 
 import net.shibboleth.metadata.Item;
 import net.shibboleth.metadata.dom.Container;
+import net.shibboleth.metadata.dom.ElementMatcher;
 import net.shibboleth.metadata.dom.saml.AttributeElementMaker;
 import net.shibboleth.metadata.dom.saml.AttributeElementMatcher;
 import net.shibboleth.metadata.dom.saml.AttributeValueElementMaker;
@@ -167,11 +167,11 @@ public class EntityAttributeAddingStage extends AbstractStage<Element> {
      * Attribute container elements.
      * 
      * @param attributes {@link List} of Attribute {@link Container}s
-     * @param matcher {@link Predicate} that matches the {@link Element} we are looking for
+     * @param matcher {@link ElementMatcher} that matches the {@link Element} we are looking for
      * @return true iff the value appears somewhere in the list of containers
      */
     private boolean attributeValuePresent(@Nonnull final List<Container> attributes,
-            @Nonnull final Predicate<Element> matcher) {
+            @Nonnull final ElementMatcher matcher) {
         for (final Container attribute : attributes) {
             if (attribute.findChild(matcher) != null) {
                 return true;
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/MDAttrSupport.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/MDAttrSupport.java
index c6c855e..6ee85e8 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/MDAttrSupport.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdattr/MDAttrSupport.java
@@ -17,18 +17,15 @@
 
 package net.shibboleth.metadata.dom.saml.mdattr;
 
-import java.util.function.Function;
-import java.util.function.Predicate;
-
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.ThreadSafe;
 import javax.xml.namespace.QName;
 
-import org.w3c.dom.Element;
-
 import net.shibboleth.metadata.dom.Container;
 import net.shibboleth.metadata.dom.ElementMaker;
 import net.shibboleth.metadata.dom.ElementMatcher;
+import net.shibboleth.metadata.dom.SimpleElementMaker;
+import net.shibboleth.metadata.dom.SimpleElementMatcher;
 
 /**
  * Helper class for dealing with MDAttr metadata.
@@ -52,16 +49,16 @@ public final class MDAttrSupport {
      *
      * @since 0.10.0
      */
-    public static final @Nonnull Predicate<Element> ENTITY_ATTRIBUTES_MATCHER =
-            new ElementMatcher(ENTITY_ATTRIBUTES_NAME);
+    public static final @Nonnull ElementMatcher ENTITY_ATTRIBUTES_MATCHER =
+            new SimpleElementMatcher(ENTITY_ATTRIBUTES_NAME);
 
     /**
      * Maker for the <code>EntityAttributes</code> element, for use with the {@link Container} system.
      *
      * @since 0.10.0
      */
-    public static final @Nonnull Function<Container, Element> ENTITY_ATTRIBUTES_MAKER =
-            new ElementMaker(ENTITY_ATTRIBUTES_NAME);
+    public static final @Nonnull ElementMaker ENTITY_ATTRIBUTES_MAKER =
+            new SimpleElementMaker(ENTITY_ATTRIBUTES_NAME);
 
     /** Constructor. */
     private MDAttrSupport() {
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/ContainerTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/ContainerTest.java
index 77f7bed..fb1e224 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/ContainerTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/ContainerTest.java
@@ -2,8 +2,6 @@
 package net.shibboleth.metadata.dom;
 
 import java.util.List;
-import java.util.function.Function;
-import java.util.function.Predicate;
 
 import javax.annotation.Nonnull;
 
@@ -111,10 +109,10 @@ public class ContainerTest extends BaseDOMTest {
         assert e1 != null;
         final Container c1 = new Container(e1);
 
-        c1.addChild(new Function<Container, Element>(){
+        c1.addChild(new ElementMaker(){
 
             @Override
-            public Element apply(Container input) {
+            public @Nonnull Element make(@Nonnull Container input) {
                 final Element e2 = doc.createElementNS("ns", "child");
                 e2.setTextContent("child value");
                 return e2;
@@ -125,10 +123,10 @@ public class ContainerTest extends BaseDOMTest {
         final Element ok = readXMLData("add1.xml");
         assertXMLIdentical(ok, e1);
 
-        c1.addChild(new Function<Container, Element>(){
+        c1.addChild(new ElementMaker(){
 
             @Override
-            public Element apply(Container input) {
+            public @Nonnull Element make(@Nonnull Container input) {
                 final Element e3 = doc.createElementNS("ns", "child2");
                 e3.setTextContent("child 2 value");
                 return e3;
@@ -146,10 +144,10 @@ public class ContainerTest extends BaseDOMTest {
         assert e1 != null;
         final Container c1 = new Container(e1);
 
-        c1.addChild(new Function<Container, Element>(){
+        c1.addChild(new ElementMaker(){
 
             @Override
-            public Element apply(Container input) {
+            public @Nonnull Element make(@Nonnull Container input) {
                 final Element e2 = doc.createElementNS("ns", "child");
                 e2.setTextContent("child value");
                 return e2;
@@ -160,10 +158,10 @@ public class ContainerTest extends BaseDOMTest {
         final Element ok = readXMLData("add1.xml");
         assertXMLIdentical(ok, e1);
 
-        c1.addChild(new Function<Container, Element>(){
+        c1.addChild(new ElementMaker(){
 
             @Override
-            public Element apply(Container input) {
+            public @Nonnull Element make(@Nonnull Container input) {
                 final Element e3 = doc.createElementNS("ns", "child2");
                 e3.setTextContent("child 2 value");
                 return e3;
@@ -195,10 +193,10 @@ public class ContainerTest extends BaseDOMTest {
     @Test
     public void findChild() throws Exception {
         final Container root = new Container(readXMLData("find.xml"));
-        final Container child = root.findChild(new Predicate<Element>(){
+        final Container child = root.findChild(new ElementMatcher(){
 
             @Override
-            public boolean test(Element input) {
+            public boolean match(@Nonnull Element input) {
                 return "findme".equals(input.getLocalName());
             }
             
@@ -210,10 +208,10 @@ public class ContainerTest extends BaseDOMTest {
     @Test
     public void findChildren() throws Exception {
         final Container root = new Container(readXMLData("find.xml"));
-        final List<Container> children = root.findChildren(new Predicate<Element>(){
+        final List<Container> children = root.findChildren(new ElementMatcher(){
 
             @Override
-            public boolean test(Element input) {
+            public boolean match(@Nonnull Element input) {
                 return "findme".equals(input.getLocalName());
             }
             
@@ -231,18 +229,18 @@ public class ContainerTest extends BaseDOMTest {
         assert e1 != null;
         final Container c1 = new Container(e1);
 
-        c1.locateChild(new Predicate<Element>(){
+        c1.locateChild(new ElementMatcher(){
 
             @Override
-            public boolean test(Element input) {
+            public boolean match(@Nonnull Element input) {
                 return "child".equals(input.getLocalName());
             }
             
             
-        }, new Function<Container, Element>(){
+        }, new ElementMaker(){
 
             @Override
-            public Element apply(Container input) {
+            public @Nonnull Element make(@Nonnull Container input) {
                 final Element e2 = doc.createElementNS("ns", "child");
                 e2.setTextContent("child value");
                 return e2;
@@ -255,18 +253,18 @@ public class ContainerTest extends BaseDOMTest {
 
         // same again should NOT change the result for locate
 
-        c1.locateChild(new Predicate<Element>(){
+        c1.locateChild(new ElementMatcher(){
 
             @Override
-            public boolean test(Element input) {
+            public boolean match(@Nonnull Element input) {
                 return "child".equals(input.getLocalName());
             }
             
             
-        }, new Function<Container, Element>(){
+        }, new ElementMaker(){
 
             @Override
-            public Element apply(Container input) {
+            public @Nonnull Element make(@Nonnull Container input) {
                 final Element e2 = doc.createElementNS("ns", "child");
                 e2.setTextContent("child value");
                 return e2;
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMakerTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMakerTest.java
index 3792a7b..52b371c 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMakerTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMakerTest.java
@@ -1,8 +1,6 @@
 
 package net.shibboleth.metadata.dom;
 
-import java.util.function.Function;
-
 import javax.xml.namespace.QName;
 
 import org.testng.Assert;
@@ -15,18 +13,18 @@ public class ElementMakerTest extends BaseDOMTest {
     private final Document doc;
 
     protected ElementMakerTest() throws Exception {
-        super(ElementMaker.class);
+        super(SimpleElementMaker.class);
         setUp();
         doc = getParserPool().newDocument();
     }
 
     @Test
     public void apply() {
-        final Function<Container, Element> maker = new ElementMaker(new QName("ns", "local"));
+        final var maker = new SimpleElementMaker(new QName("ns", "local"));
         final Element root = doc.createElementNS("ns", "root");
         assert root != null;
         final Container rootContainer = new Container(root);
-        final Element newElement = maker.apply(rootContainer);
+        final Element newElement = maker.make(rootContainer);
         Assert.assertNotNull(newElement);
         Assert.assertEquals(newElement.getLocalName(), "local");
         Assert.assertEquals(newElement.getNamespaceURI(), "ns");
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMatcherTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMatcherTest.java
index 2345209..06c6587 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMatcherTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/ElementMatcherTest.java
@@ -12,18 +12,18 @@ public class ElementMatcherTest extends BaseDOMTest {
     private final Document doc;
 
     protected ElementMatcherTest() throws Exception {
-        super(ElementMatcher.class);
+        super(SimpleElementMatcher.class);
         setUp();
         doc = getParserPool().newDocument();
     }
 
     @Test
     public void matcher() throws Exception {
-        final var matcher = new ElementMatcher(new QName("ns", "xxx"));
-        Assert.assertTrue(matcher.test(doc.createElementNS("ns", "xxx")));
-        Assert.assertFalse(matcher.test(doc.createElementNS("ns", "yyy")));
-        Assert.assertFalse(matcher.test(doc.createElementNS("ns2", "xxx")));
-        Assert.assertFalse(matcher.test(doc.createElementNS("ns2", "yyy")));
+        final ElementMatcher matcher = new SimpleElementMatcher(new QName("ns", "xxx"));
+        Assert.assertTrue(matcher.match(doc.createElementNS("ns", "xxx")));
+        Assert.assertFalse(matcher.match(doc.createElementNS("ns", "yyy")));
+        Assert.assertFalse(matcher.match(doc.createElementNS("ns2", "xxx")));
+        Assert.assertFalse(matcher.match(doc.createElementNS("ns2", "yyy")));
     }
 
 }
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMakerTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMakerTest.java
index 294f6b1..edcd85c 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMakerTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMakerTest.java
@@ -27,7 +27,7 @@ public class AttributeElementMakerTest extends BaseDOMTest {
         final Element root = doc.createElementNS("ns", "root");
         assert root != null;
         final Container rootContainer = new Container(root);
-        final Element newElement = maker.apply(rootContainer);
+        final Element newElement = maker.make(rootContainer);
         Assert.assertNotNull(newElement);
         Assert.assertEquals(newElement.getLocalName(), "Attribute");
         Assert.assertEquals(newElement.getNamespaceURI(), SAMLSupport.SAML_NS);
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcherTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcherTest.java
index ce3abf5..0856dfc 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcherTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeElementMatcherTest.java
@@ -31,13 +31,13 @@ public class AttributeElementMatcherTest extends BaseDOMTest {
         final var matcher1 = new AttributeElementMatcher("name", "name-format");
         attr.setAttribute("Name", "name");
         attr.setAttribute("NameFormat", "name-format");
-        Assert.assertTrue(matcher1.test(attr));
+        Assert.assertTrue(matcher1.match(attr));
 
         final var matcher2 = new AttributeElementMatcher("name2", "name-format");
-        Assert.assertFalse(matcher2.test(attr));
+        Assert.assertFalse(matcher2.match(attr));
 
         final var matcher3 = new AttributeElementMatcher("name", "name-format2");
-        Assert.assertFalse(matcher3.test(attr));
+        Assert.assertFalse(matcher3.match(attr));
     }
 
     @Test
@@ -45,10 +45,10 @@ public class AttributeElementMatcherTest extends BaseDOMTest {
         attr.setAttribute("Name", "name");
 
         final var matcher1 = new AttributeElementMatcher("name", SAMLSupport.ATTRNAME_FORMAT_UNSPECIFIED);
-        Assert.assertTrue(matcher1.test(attr));
+        Assert.assertTrue(matcher1.match(attr));
 
         final var matcher2 = new AttributeElementMatcher("name2", SAMLSupport.ATTRNAME_FORMAT_UNSPECIFIED);
-        Assert.assertFalse(matcher2.test(attr));
+        Assert.assertFalse(matcher2.match(attr));
     }
 
 }
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMakerTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMakerTest.java
index 5e79b5a..2c8b497 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMakerTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMakerTest.java
@@ -24,7 +24,7 @@ public class AttributeValueElementMakerTest extends BaseDOMTest {
         final var maker = new AttributeValueElementMaker("value text");
         final Element root = doc.createElementNS("ns", "root");
         final Container rootContainer = new Container(root);
-        final Element newElement = maker.apply(rootContainer);
+        final Element newElement = maker.make(rootContainer);
         Assert.assertNotNull(newElement);
         Assert.assertEquals(newElement.getLocalName(), "AttributeValue");
         Assert.assertEquals(newElement.getNamespaceURI(), SAMLSupport.SAML_NS);
diff --git a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcherTest.java b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcherTest.java
index 13cceb2..08f5fde 100644
--- a/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcherTest.java
+++ b/mda-framework/src/test/java/net/shibboleth/metadata/dom/saml/AttributeValueElementMatcherTest.java
@@ -1,6 +1,8 @@
 
 package net.shibboleth.metadata.dom.saml;
 
+import javax.annotation.Nonnull;
+
 import org.testng.Assert;
 import org.testng.annotations.BeforeMethod;
 import org.testng.annotations.Test;
@@ -12,7 +14,7 @@ import net.shibboleth.shared.xml.ElementSupport;
 
 public class AttributeValueElementMatcherTest extends BaseDOMTest {
 
-    private final Document doc;
+    private final @Nonnull Document doc;
     private Element value;
 
     protected AttributeValueElementMatcherTest() throws Exception {
@@ -31,18 +33,18 @@ public class AttributeValueElementMatcherTest extends BaseDOMTest {
         final var matcher1 = new AttributeValueElementMatcher("value");
 
         value.setTextContent("value");
-        Assert.assertTrue(matcher1.test(value));
+        Assert.assertTrue(matcher1.match(value));
 
         value.setTextContent("other");
-        Assert.assertFalse(matcher1.test(value));
+        Assert.assertFalse(matcher1.match(value));
 
         final var matcher2 = new AttributeValueElementMatcher("other");
 
         value.setTextContent("value");
-        Assert.assertFalse(matcher2.test(value));
+        Assert.assertFalse(matcher2.match(value));
 
         value.setTextContent("other");
-        Assert.assertTrue(matcher2.test(value));
+        Assert.assertTrue(matcher2.match(value));
     }
 
 }

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


More information about the commits mailing list