[java-metadata-aggregator] 02/02: Adapt to upstream immutability contract changes

Ian Young ian at iay.org.uk
Wed Mar 8 10:49:50 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=9e28b7b641a540fdf10a8bf593b509f591602cfb

commit 9e28b7b641a540fdf10a8bf593b509f591602cfb
Author: Ian Young <ian at iay.org.uk>
AuthorDate: Wed Mar 8 10:49:39 2023 +0000

    Adapt to upstream immutability contract changes
---
 .../metadata/dom/saml/EntityFilterStage.java       | 20 +++++------
 .../metadata/dom/saml/EntityRoleFilterStage.java   | 42 ++++++++++------------
 .../EntityRegistrationAuthorityFilterStage.java    | 19 +++++-----
 3 files changed, 34 insertions(+), 47 deletions(-)

diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityFilterStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityFilterStage.java
index 98c50e3..5087234 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityFilterStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityFilterStage.java
@@ -140,33 +140,29 @@ public class EntityFilterStage extends AbstractFilteringStage<Element> {
      * @return true if the descriptor should be removed, false otherwise
      */
     protected boolean processEntitiesDescriptor(@Nonnull final Element entitiesDescriptor) {
-        Iterator<Element> descriptorItr;
-        Element descriptor;
+        boolean remove = true;
 
         final List<Element> childEntitiesDescriptors =
                 ElementSupport.getChildElements(entitiesDescriptor, SAMLMetadataSupport.ENTITIES_DESCRIPTOR_NAME);
-        descriptorItr = childEntitiesDescriptors.iterator();
-        while (descriptorItr.hasNext()) {
-            descriptor = descriptorItr.next();
+        for (final var descriptor : childEntitiesDescriptors) {
             if (processEntitiesDescriptor(descriptor)) {
                 entitiesDescriptor.removeChild(descriptor);
-                descriptorItr.remove();
+            } else {
+                remove = false;
             }
         }
 
         final List<Element> childEntityDescriptors =
                 ElementSupport.getChildElements(entitiesDescriptor, SAMLMetadataSupport.ENTITY_DESCRIPTOR_NAME);
-        descriptorItr = childEntityDescriptors.iterator();
-        while (descriptorItr.hasNext()) {
-            descriptor = descriptorItr.next();
+        for (final var descriptor : childEntityDescriptors) {
             if (processEntityDescriptor(descriptor)) {
                 entitiesDescriptor.removeChild(descriptor);
-                descriptorItr.remove();
+            } else {
+                remove = false;
             }
         }
 
-        if (childEntitiesDescriptors.isEmpty() && childEntityDescriptors.isEmpty()
-                && isRemovingEntitylessEntitiesDescriptor()) {
+        if (remove && isRemovingEntitylessEntitiesDescriptor()) {
             return true;
         }
 
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityRoleFilterStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityRoleFilterStage.java
index caf301b..310220a 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityRoleFilterStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/EntityRoleFilterStage.java
@@ -185,32 +185,29 @@ public class EntityRoleFilterStage extends AbstractFilteringStage<Element> {
      * @return true if the descriptor should be removed, false otherwise
      */
     protected boolean processEntitiesDescriptor(@Nonnull final Element entitiesDescriptor) {
-        Iterator<Element> descriptorItr;
+        boolean remove = true;
 
         final List<Element> childEntitiesDescriptors =
                 ElementSupport.getChildElements(entitiesDescriptor, SAMLMetadataSupport.ENTITIES_DESCRIPTOR_NAME);
-        descriptorItr = childEntitiesDescriptors.iterator();
-        while (descriptorItr.hasNext()) {
-            final var descriptor = descriptorItr.next();
+        for (final var descriptor : childEntitiesDescriptors) {
             if (processEntitiesDescriptor(descriptor)) {
                 entitiesDescriptor.removeChild(descriptor);
-                descriptorItr.remove();
+            } else {
+                remove = false;
             }
         }
 
         final List<Element> childEntityDescriptors =
                 ElementSupport.getChildElements(entitiesDescriptor, SAMLMetadataSupport.ENTITY_DESCRIPTOR_NAME);
-        descriptorItr = childEntityDescriptors.iterator();
-        while (descriptorItr.hasNext()) {
-            final var descriptor = descriptorItr.next();
+        for (final var descriptor : childEntityDescriptors) {
             if (processEntityDescriptor(descriptor)) {
                 entitiesDescriptor.removeChild(descriptor);
-                descriptorItr.remove();
+            } else {
+                remove = false;
             }
         }
 
-        if (childEntitiesDescriptors.isEmpty() && childEntityDescriptors.isEmpty()
-                && isRemovingEntitylessEntitiesDescriptor()) {
+        if (remove && isRemovingEntitylessEntitiesDescriptor()) {
             return true;
         }
 
@@ -234,8 +231,8 @@ public class EntityRoleFilterStage extends AbstractFilteringStage<Element> {
 
         log.debug("{} pipeline stage filtering roles from EntityDescriptor {}", getId(), entityId);
 
-        final List<Element> roles = getFilteredRoles(entityId, entityDescriptor);
-        if (roles.isEmpty() && isRemovingRolelessEntities()) {
+        final boolean hasRoles = hasFilteredRoles(entityId, entityDescriptor);
+        if (!hasRoles && isRemovingRolelessEntities()) {
             return true;
         }
 
@@ -243,19 +240,17 @@ public class EntityRoleFilterStage extends AbstractFilteringStage<Element> {
     }
 
     /**
-     * Iterates over the roles of a EntitiesDescriptor, filters out the appropriate ones and returns the rest.
+     * Iterates over the roles of an EntityDescriptor and filters out the appropriate ones.
      * 
      * @param entityId ID of the entity whose roles are being processed
      * @param entityDescriptor descriptor of entity whose roles are being processed
      * 
-     * @return the list of roles remaining after processing
+     * @return <code>true</code> if the EntityDescriptor has any roles remaining after processing
      */
-    protected List<Element> getFilteredRoles(@Nonnull final String entityId, @Nonnull final Element entityDescriptor) {
+    private boolean hasFilteredRoles(@Nonnull final String entityId, @Nonnull final Element entityDescriptor) {
+        boolean remains = false;
         final List<Element> childElements = ElementSupport.getChildElements(entityDescriptor);
-
-        final Iterator<Element> childItr = childElements.iterator();
-        while (childItr.hasNext()) {
-            final Element child = childItr.next();
+        for (final var child : childElements) {
             final QName childQName = QNameSupport.getNodeQName(child);
 
             final QName roleIdentifier;
@@ -264,25 +259,24 @@ public class EntityRoleFilterStage extends AbstractFilteringStage<Element> {
             } else if (NAMED_ROLES.contains(childQName)) {
                 roleIdentifier = childQName;
             } else {
-                childItr.remove();
                 continue;
             }
 
-            final boolean isDesignatedRole = getDesignatedRoles().contains(roleIdentifier);
             if (roleIdentifier != null) {
+                final boolean isDesignatedRole = getDesignatedRoles().contains(roleIdentifier);
                 if ((isWhitelistingRoles() && !isDesignatedRole) || (!isWhitelistingRoles() && isDesignatedRole)) {
                     log.debug("{} pipeline stage removing role {} from EntityDescriptor {}", new Object[] {getId(),
                             roleIdentifier, entityId,});
                     entityDescriptor.removeChild(child);
-                    childItr.remove();
                 } else {
                     log.debug("{} pipeline did not remove role {} from EntityDescriptor {}", new Object[] {getId(),
                             roleIdentifier, entityId,});
+                    remains = true;
                 }
             }
         }
 
-        return childElements;
+        return remains;
     }
 
 }
diff --git a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/EntityRegistrationAuthorityFilterStage.java b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/EntityRegistrationAuthorityFilterStage.java
index bef92a5..4ff2477 100644
--- a/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/EntityRegistrationAuthorityFilterStage.java
+++ b/mda-framework/src/main/java/net/shibboleth/metadata/dom/saml/mdrpi/EntityRegistrationAuthorityFilterStage.java
@@ -165,7 +165,7 @@ public class EntityRegistrationAuthorityFilterStage extends AbstractFilteringSta
      * @return true if the descriptor should be removed, false otherwise
      */
     protected boolean processEntitiesDescriptor(@Nonnull final Element entitiesDescriptor) {
-        Iterator<Element> descriptorItr;
+        boolean remove = true;
 
         if (filterOutDescriptor(entitiesDescriptor)) {
             return true;
@@ -173,28 +173,25 @@ public class EntityRegistrationAuthorityFilterStage extends AbstractFilteringSta
 
         final List<Element> childEntitiesDescriptors =
                 ElementSupport.getChildElements(entitiesDescriptor, SAMLMetadataSupport.ENTITIES_DESCRIPTOR_NAME);
-        descriptorItr = childEntitiesDescriptors.iterator();
-        while (descriptorItr.hasNext()) {
-            final Element descriptor = descriptorItr.next();
+        for (final var descriptor : childEntitiesDescriptors) {
             if (processEntitiesDescriptor(descriptor)) {
                 entitiesDescriptor.removeChild(descriptor);
-                descriptorItr.remove();
+            } else {
+                remove = false;
             }
         }
 
         final List<Element> childEntityDescriptors =
                 ElementSupport.getChildElements(entitiesDescriptor, SAMLMetadataSupport.ENTITY_DESCRIPTOR_NAME);
-        descriptorItr = childEntityDescriptors.iterator();
-        while (descriptorItr.hasNext()) {
-            final Element descriptor = descriptorItr.next();
+        for (final var descriptor : childEntityDescriptors) {
             if (filterOutDescriptor(descriptor)) {
                 entitiesDescriptor.removeChild(descriptor);
-                descriptorItr.remove();
+            } else {
+                remove = false;
             }
         }
 
-        if (childEntitiesDescriptors.isEmpty() && childEntityDescriptors.isEmpty() &&
-                isRemovingEntitylessEntitiesDescriptor()) {
+        if (remove && isRemovingEntitylessEntitiesDescriptor()) {
             return true;
         }
 

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


More information about the commits mailing list