[java-identity-provider] 03/06: IDP-1516 Reduce guava dependencies attribute-filter-api

Rod Widdowson rdw at steadingsoftware.com
Sat Nov 2 12:31:44 EDT 2019


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

rdw pushed a commit to branch master
in repository java-identity-provider.

View the commit online:
http://git.shibboleth.net/view/?p=java-identity-provider.git;a=commit;h=93e68ddc38dd6467e56768abcd9a35abc8f8047f

commit 93e68ddc38dd6467e56768abcd9a35abc8f8047f
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Fri Nov 1 15:03:19 2019 +0000

    IDP-1516 Reduce guava dependencies attribute-filter-api
    
    https://issues.shibboleth.net/jira/browse/IDP-1516
    
    Also made a couple of live colelction getters non-live
---
 .../attribute/filter/AttributeFilterPolicy.java    | 14 ++----
 .../shibboleth/idp/attribute/filter/Matcher.java   |  4 +-
 .../idp/attribute/filter/MatcherFromPolicy.java    |  4 +-
 .../filter/context/AttributeFilterContext.java     | 51 ++++++++++------------
 .../filter/context/AttributeFilterWorkContext.java | 43 +++++++++---------
 .../idp/attribute/filter/MockMatcher.java          |  4 +-
 .../filter/context/AttributeFilterContextTest.java | 49 ---------------------
 7 files changed, 50 insertions(+), 119 deletions(-)

diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
index 039cbba..4f378d2 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/AttributeFilterPolicy.java
@@ -17,7 +17,6 @@
 
 package net.shibboleth.idp.attribute.filter;
 
-import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -30,18 +29,13 @@ import javax.annotation.concurrent.ThreadSafe;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.base.Predicates;
-import com.google.common.collect.Collections2;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.filter.PolicyRequirementRule.Tristate;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
 import net.shibboleth.utilities.java.support.annotation.ParameterName;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
-import net.shibboleth.utilities.java.support.collection.CollectionSupport;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiedInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
@@ -56,7 +50,7 @@ import net.shibboleth.utilities.java.support.logic.Constraint;
  * policies run this collection will contain the final result.
  */
 @ThreadSafe
-public class AttributeFilterPolicy extends AbstractIdentifiedInitializableComponent implements
+public final class AttributeFilterPolicy extends AbstractIdentifiedInitializableComponent implements
         UnmodifiableComponent {
 
     /** Class logger. */
@@ -80,16 +74,14 @@ public class AttributeFilterPolicy extends AbstractIdentifiedInitializableCompon
      */
     public AttributeFilterPolicy(@Nonnull @NotEmpty @ParameterName(name="policyId") final String policyId,
             @Nonnull final @ParameterName(name="requirementRule") PolicyRequirementRule requirementRule,
-            @Nullable @NullableElements final @ParameterName(name="attributeRules") 
+            @Nullable @NonnullElements final @ParameterName(name="attributeRules")
     Collection<AttributeRule> attributeRules) {
         setId(policyId);
 
         rule = Constraint.isNotNull(requirementRule, "Attribute filter policy activiation criterion can not be null");
 
-        final ArrayList<AttributeRule> checkedPolicies = new ArrayList<>();
-        CollectionSupport.addIf(checkedPolicies, attributeRules, Predicates.notNull());
         if (null != attributeRules) {
-            valuePolicies = List.copyOf(Collections2.filter(attributeRules, Predicates.notNull()));
+            valuePolicies = List.copyOf(attributeRules);
         } else {
             valuePolicies = Collections.emptyList();
         }
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
index 34d61fe..e7087ef 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/Matcher.java
@@ -24,8 +24,6 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.ThreadSafe;
 
-import com.google.common.collect.ImmutableSet;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
@@ -43,7 +41,7 @@ public interface Matcher extends IdentifiedComponent {
         /** {@inheritDoc} */
         @Override public Set<IdPAttributeValue> getMatchingValues(@Nonnull final IdPAttribute attribute,
                 @Nonnull final AttributeFilterContext filterContext) {
-            return ImmutableSet.copyOf(attribute.getValues());
+            return Set.copyOf(attribute.getValues());
         }
 
         @Override @Nullable public String getId() {
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
index 3db73f6..8bdce34 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/MatcherFromPolicy.java
@@ -26,8 +26,6 @@ import javax.annotation.Nullable;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import com.google.common.collect.ImmutableSet;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.filter.PolicyRequirementRule.Tristate;
@@ -84,7 +82,7 @@ public class MatcherFromPolicy extends BaseBridgingClass implements Matcher, Ide
             return Collections.emptySet();
         } else {
             log.debug("{} The rule returned TRUE, all values returned", getLogPrefix());
-            return ImmutableSet.copyOf(attribute.getValues());
+            return Set.copyOf(attribute.getValues());
         }
     }
     
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
index 66f7e7b..35a0214 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContext.java
@@ -18,30 +18,33 @@
 package net.shibboleth.idp.attribute.filter.context;
 
 import java.util.Collection;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Function;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.NotThreadSafe;
 
+import org.opensaml.messaging.context.BaseContext;
+import org.opensaml.profile.context.ProxiedRequesterContext;
+import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
+import org.opensaml.saml.metadata.resolver.MetadataResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.filter.AttributeFilter;
 import net.shibboleth.idp.attribute.filter.AttributeFilterException;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
+import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
+import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.service.ReloadableService;
 import net.shibboleth.utilities.java.support.service.ServiceableComponent;
 
-import org.opensaml.messaging.context.BaseContext;
-import org.opensaml.profile.context.ProxiedRequesterContext;
-import org.opensaml.saml.common.messaging.context.SAMLMetadataContext;
-import org.opensaml.saml.metadata.resolver.MetadataResolver;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /** A context supplying input to the {@link net.shibboleth.idp.attribute.filter.AttributeFilter} interface. */
 @NotThreadSafe
 public final class AttributeFilterContext extends BaseContext {
@@ -143,7 +146,7 @@ public final class AttributeFilterContext extends BaseContext {
      * 
      * @return attributes to be filtered
      */
-    @Nonnull @NonnullElements public Map<String,IdPAttribute> getPrefilteredIdPAttributes() {
+    @Nonnull @NonnullElements @NotLive @Unmodifiable public Map<String,IdPAttribute> getPrefilteredIdPAttributes() {
         return prefilteredAttributes;
     }
 
@@ -155,17 +158,14 @@ public final class AttributeFilterContext extends BaseContext {
      * @return this context;
      */
     @Nonnull public AttributeFilterContext setPrefilteredIdPAttributes(
-            @Nullable @NullableElements final Collection<IdPAttribute> attributes) {
+            @Nullable @NonnullElements final Collection<IdPAttribute> attributes) {
 
         if (attributes != null) {
-            prefilteredAttributes = new HashMap<>(attributes.size());
-            for (final IdPAttribute attribute : attributes) {
-                if (attribute != null) {
-                    prefilteredAttributes.put(attribute.getId(), attribute);
-                }
-            }
+            prefilteredAttributes = attributes.
+                    stream().
+                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, e -> e));
         } else {
-            prefilteredAttributes = new HashMap<>();
+            prefilteredAttributes = Collections.emptyMap();
         }
         
         return this;
@@ -176,7 +176,7 @@ public final class AttributeFilterContext extends BaseContext {
      * 
      * @return attributes left after the filtering process has run
      */
-    @Nonnull @NonnullElements public Map<String, IdPAttribute> getFilteredIdPAttributes() {
+    @Nonnull @NonnullElements @Unmodifiable @NotLive public Map<String, IdPAttribute> getFilteredIdPAttributes() {
         return filteredAttributes;
     }
 
@@ -188,17 +188,14 @@ public final class AttributeFilterContext extends BaseContext {
      * @return this context
      */
     @Nonnull public AttributeFilterContext setFilteredIdPAttributes(
-            @Nullable @NullableElements final Collection<IdPAttribute> attributes) {
-        
+            @Nullable @NonnullElements final Collection<IdPAttribute> attributes) {
+
         if (attributes != null) {
-            filteredAttributes = new HashMap<>(attributes.size());
-            for (final IdPAttribute attribute : attributes) {
-                if (attribute != null) {
-                    filteredAttributes.put(attribute.getId(), attribute);
-                }
-            }
+            filteredAttributes = attributes.
+                    stream().
+                    collect(Collectors.toUnmodifiableMap(IdPAttribute::getId, e -> e));
         } else {
-            filteredAttributes = new HashMap<>();
+            filteredAttributes = Collections.emptyMap();
         }
         
         return this;
diff --git a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
index 6676f1e..59f68e3 100644
--- a/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
+++ b/idp-attribute-filter-api/src/main/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterWorkContext.java
@@ -28,17 +28,16 @@ import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 import javax.annotation.concurrent.NotThreadSafe;
 
+import org.opensaml.messaging.context.BaseContext;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
-import net.shibboleth.utilities.java.support.annotation.constraint.NullableElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
-import org.opensaml.messaging.context.BaseContext;
-
 /**
  * A context which carries and collects information through the attribute filtering process, and coordinates data
  * between the filter implementation and the various resolver MatchFunctor implementations.
@@ -82,7 +81,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
      * @param attributeValues values for the attribute that are permitted to be released
      */
     public void addPermittedIdPAttributeValues(@Nonnull @NotEmpty final String attributeId,
-            @Nullable @NullableElements final Collection<IdPAttributeValue> attributeValues) {
+            @Nullable @NonnullElements final Collection<IdPAttributeValue> attributeValues) {
         final AttributeFilterContext parent = (AttributeFilterContext) getParent();
         final Map<String, IdPAttribute> prefilteredAttributes = parent.getPrefilteredIdPAttributes();
         final String trimmedAttributeId =
@@ -101,15 +100,14 @@ public final class AttributeFilterWorkContext extends BaseContext {
         }
 
         for (final IdPAttributeValue value : attributeValues) {
-            if (value != null) {
-                if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
-                    throw new IllegalArgumentException("permitted value is not a current value of attribute "
-                            + trimmedAttributeId);
-                }
-
-                if (!permittedAttributeValues.contains(value)) {
-                    permittedAttributeValues.add(value);
-                }
+            Constraint.isNotNull(value, "non null value cannot be added to permitted list");
+            if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
+                throw new IllegalArgumentException("permitted value is not a current value of attribute "
+                        + trimmedAttributeId);
+            }
+
+            if (!permittedAttributeValues.contains(value)) {
+                permittedAttributeValues.add(value);
             }
         }
     }
@@ -133,7 +131,7 @@ public final class AttributeFilterWorkContext extends BaseContext {
      * @param attributeValues values for the attribute that are not permitted to be released
      */
     public void addDeniedIdPAttributeValues(@Nonnull @NotEmpty final String attributeId,
-            @Nullable @NullableElements final Collection<IdPAttributeValue> attributeValues) {
+            @Nullable @NonnullElements final Collection<IdPAttributeValue> attributeValues) {
         final AttributeFilterContext parent = (AttributeFilterContext) getParent();
         final Map<String, IdPAttribute> prefilteredAttributes = parent.getPrefilteredIdPAttributes();
         final String trimmedAttributeId =
@@ -152,15 +150,14 @@ public final class AttributeFilterWorkContext extends BaseContext {
         }
 
         for (final IdPAttributeValue value : attributeValues) {
-            if (value != null) {
-                if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
-                    throw new IllegalArgumentException("denied value is not a current value of attribute "
-                            + trimmedAttributeId);
-                }
-
-                if (!deniedAttributeValues.contains(value)) {
-                    deniedAttributeValues.add(value);
-                }
+            Constraint.isNotNull(value, "non null value cannot be added to denied list");
+            if (!prefilteredAttributes.get(trimmedAttributeId).getValues().contains(value)) {
+                throw new IllegalArgumentException("denied value is not a current value of attribute "
+                        + trimmedAttributeId);
+            }
+
+            if (!deniedAttributeValues.contains(value)) {
+                deniedAttributeValues.add(value);
             }
         }
     }
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java
index 89e444d..69fe85e 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/MockMatcher.java
@@ -23,8 +23,6 @@ import java.util.LinkedHashSet;
 import java.util.Objects;
 import java.util.Set;
 
-import com.google.common.collect.ImmutableSet;
-
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.filter.context.AttributeFilterContext;
@@ -88,7 +86,7 @@ public class MockMatcher extends AbstractIdentifiedInitializableComponent implem
         }
 
         if (matchingValues == null) {
-            return ImmutableSet.copyOf(attribute.getValues());
+            return Set.copyOf(attribute.getValues());
         }
 
         LinkedHashSet<IdPAttributeValue> values = new LinkedHashSet<>();
diff --git a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
index 93ccfc4..0954c3a 100644
--- a/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
+++ b/idp-attribute-filter-api/src/test/java/net/shibboleth/idp/attribute/filter/context/AttributeFilterContextTest.java
@@ -66,31 +66,6 @@ public class AttributeFilterContextTest {
         Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute3"));
         Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute3"), attribute3);
 
-        context.getPrefilteredIdPAttributes().put(attribute1.getId(), attribute1);
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().size(), 3);
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute1"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute1"), attribute1);
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute2"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute2"), attribute2);
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute3"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute3"), attribute3);
-
-        context.getPrefilteredIdPAttributes().remove("attribute2");
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().size(), 2);
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute1"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute1"), attribute1);
-        Assert.assertFalse(context.getPrefilteredIdPAttributes().containsKey("attribute2"));
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute3"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute3"), attribute3);
-
-
-        context.getPrefilteredIdPAttributes().remove(null);
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().size(), 2);
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute1"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute1"), attribute1);
-        Assert.assertTrue(context.getPrefilteredIdPAttributes().containsKey("attribute3"));
-        Assert.assertEquals(context.getPrefilteredIdPAttributes().get("attribute3"), attribute3);
-
         context.setPrefilteredIdPAttributes(null);
         Assert.assertNotNull(context.getPrefilteredIdPAttributes());
         Assert.assertTrue(context.getPrefilteredIdPAttributes().isEmpty());
@@ -117,30 +92,6 @@ public class AttributeFilterContextTest {
         Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute3"));
         Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute3"), attribute3);
 
-        context.getFilteredIdPAttributes().put(attribute1.getId(), attribute1);
-        Assert.assertEquals(context.getFilteredIdPAttributes().size(), 3);
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute1"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute1"), attribute1);
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute2"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute2"), attribute2);
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute3"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute3"), attribute3);
-
-        context.getFilteredIdPAttributes().remove("attribute2");
-        Assert.assertEquals(context.getFilteredIdPAttributes().size(), 2);
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute1"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute1"), attribute1);
-        Assert.assertFalse(context.getFilteredIdPAttributes().containsKey("attribute2"));
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute3"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute3"), attribute3);
-
-        context.getFilteredIdPAttributes().remove(null);
-        Assert.assertEquals(context.getFilteredIdPAttributes().size(), 2);
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute1"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute1"), attribute1);
-        Assert.assertTrue(context.getFilteredIdPAttributes().containsKey("attribute3"));
-        Assert.assertEquals(context.getFilteredIdPAttributes().get("attribute3"), attribute3);
-
         context.setFilteredIdPAttributes(null);
         Assert.assertNotNull(context.getFilteredIdPAttributes());
         Assert.assertTrue(context.getFilteredIdPAttributes().isEmpty());

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


More information about the commits mailing list