[java-identity-provider] branch master updated: IDP-1516 Reduce guava dependence.

Rod Widdowson rdw at steadingsoftware.com
Wed Oct 30 11:40:42 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=71167bd123eedb3049ebf95812318f7153908065

The following commit(s) were added to refs/heads/master by this push:
       new  71167bd   IDP-1516 Reduce guava dependence.
71167bd is described below

commit 71167bd123eedb3049ebf95812318f7153908065
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Wed Oct 30 15:39:05 2019 +0000

    IDP-1516 Reduce guava dependence.
    
    https://issues.shibboleth.net/jira/browse/IDP-1516
    
    Fix a lot of annotations.  Streamline a lot of Collection -> Map
    conversions.  Convert several gratuitous @Nullable @NonnnullElements
    to @Nonnull @NonnullElements anootaions (with precisely one mainline
    fix needed)
---
 .../net/shibboleth/idp/attribute/IdPAttribute.java | 13 +++-----
 .../idp/attribute/context/AttributeContext.java    | 39 +++++++++-------------
 .../idp/attribute/AttributeContextTest.java        |  3 --
 .../attribute/resolver/AbstractResolverPlugin.java | 20 +++++------
 .../context/AttributeResolutionContext.java        | 29 +++++++---------
 .../resolver/AbstractResolverPluginTest.java       |  2 --
 .../idp/attribute/resolver/MockDataConnector.java  |  5 +--
 .../ad/mapped/impl/MappedAttributeDefinition.java  |  2 +-
 .../resolver/ad/mapped/impl/ValueMap.java          |  2 +-
 .../dc/http/impl/AbstractHTTPSearchBuilder.java    |  2 +-
 .../idp/profile/impl/FilterAttributes.java         |  3 +-
 11 files changed, 49 insertions(+), 71 deletions(-)

diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
index 76474d5..231a43f 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/IdPAttribute.java
@@ -171,13 +171,10 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
      * @return the unmodifiable, non null-containing output.
      */
     @SuppressWarnings("unchecked")
-    @Nonnull @Unmodifiable private Map<Locale, String> checkedNamesFrom(@Nonnull final Map<Locale, String> inputMap) {
+    @Nonnull @Unmodifiable private final Map<Locale, String> checkedNamesFrom(@Nonnull @NonnullElements
+            final Map<Locale, String> inputMap) {
         
-        if (inputMap.isEmpty()) {
-            return Collections.emptyMap();
-        }
-        return Map.ofEntries((Entry<Locale, String>[])
-                inputMap.
+        return Map.ofEntries(inputMap.
                 entrySet().
                 stream().
                 map(filterEntry).
@@ -189,7 +186,7 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
      * 
      * @param newNames the new names for this attribute
      */
-    public void setDisplayNames(@Nonnull final Map<Locale, String> newNames) {
+    public void setDisplayNames(@Nonnull @NonnullElements final Map<Locale, String> newNames) {
         displayNames = checkedNamesFrom(
                 Constraint.isNotNull(newNames, "Display Names should not be null"));
     }
@@ -208,7 +205,7 @@ public class IdPAttribute implements Comparable<IdPAttribute>, Cloneable {
      * 
      * @param newDescriptions the new descriptions for this attribute
      */
-    public void setDisplayDescriptions(@Nonnull final Map<Locale, String> newDescriptions) {
+    public void setDisplayDescriptions(@Nonnull @NonnullElements final Map<Locale, String> newDescriptions) {
         displayDescriptions = checkedNamesFrom(
                 Constraint.isNotNull(newDescriptions, "Display Descriptions should not be null"));
     }
diff --git a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
index 3c31bdc..3f16bb4 100644
--- a/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
+++ b/idp-attribute-api/src/main/java/net/shibboleth/idp/attribute/context/AttributeContext.java
@@ -21,6 +21,7 @@ import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
@@ -71,18 +72,14 @@ public final class AttributeContext extends BaseContext {
      * 
      * @param newAttributes the attributes
      */
-    public void setIdPAttributes(@Nullable final Collection<IdPAttribute> newAttributes) {
-        if (newAttributes == null || newAttributes.isEmpty()) {
-            attributes = Collections.emptyMap();
-            return;
-        }
-
-        final HashMap<String,IdPAttribute> checkedAttributes = new HashMap<>(newAttributes.size());
-        for (final IdPAttribute attribute : newAttributes) {
-            checkedAttributes.put(attribute.getId(), Constraint.isNotNull(attribute, "Cannot set null attributes"));
-        }
+    public void setIdPAttributes(@Nonnull @NonnullElements final Collection<IdPAttribute> newAttributes) {
+        Constraint.isNotNull(newAttributes, "Attributes inserted into AttributeContext should not be null");
 
-        attributes = Map.copyOf(checkedAttributes);
+        attributes = newAttributes.
+                stream().
+                collect(Collectors.collectingAndThen(
+                            Collectors.toMap(IdPAttribute::getId, a -> a),
+                            Collections::unmodifiableMap));
     }
     
     
@@ -104,20 +101,16 @@ public final class AttributeContext extends BaseContext {
      * 
      * @param newAttributes the attributes
      */
-    public void setUnfilteredIdPAttributes(@Nullable final Collection<IdPAttribute> newAttributes) {
+    public void setUnfilteredIdPAttributes(@Nonnull @NonnullElements final Collection<IdPAttribute> newAttributes) {
+        Constraint.isNotNull(newAttributes, "Attributes inserted into AttributeContext should not be null");
         if (null != unfilteredAttributes) {
             log.error("Unfiltered attributes have already been set in this flow.");
         }
-        if (newAttributes == null || newAttributes.isEmpty()) {
-            unfilteredAttributes = Collections.emptyMap();
-            return;
-        }
-
-        final HashMap<String,IdPAttribute> checkedAttributes = new HashMap<>(newAttributes.size());
-        for (final IdPAttribute attribute : newAttributes) {
-            checkedAttributes.put(attribute.getId(), Constraint.isNotNull(attribute, "non null Attribute"));
-        }
-
-        unfilteredAttributes = Map.copyOf(checkedAttributes);
+        
+        unfilteredAttributes = newAttributes.
+                stream().
+                collect(Collectors.collectingAndThen(
+                            Collectors.toMap(IdPAttribute::getId, a -> a),
+                            Collections::unmodifiableMap));
     }
 }
\ No newline at end of file
diff --git a/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeContextTest.java b/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeContextTest.java
index 24e50c6..16a006b 100644
--- a/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeContextTest.java
+++ b/idp-attribute-api/src/test/java/net/shibboleth/idp/attribute/AttributeContextTest.java
@@ -49,9 +49,6 @@ public class AttributeContextTest {
         context.setIdPAttributes(Arrays.asList(new IdPAttribute("foo"), new IdPAttribute("bar")));
         contextAttributes(context, 2);
         
-        context.setIdPAttributes(null);
-        contextAttributes(context, 0);
-        
         context.setIdPAttributes(Collections.emptySet());
         contextAttributes(context, 0);
     }
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
index d6b9adb..26ce79c 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPlugin.java
@@ -162,15 +162,13 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      * 
      * @param dependencies unmodifiable list of dependencies for this plugin
      */
-    public void setAttributeDependencies(@Nullable final Set<ResolverAttributeDefinitionDependency> dependencies) {
+    public void setAttributeDependencies(@Nonnull @NonnullElements
+            final Set<ResolverAttributeDefinitionDependency> dependencies) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        Constraint.isNotNull(dependencies, "Attribute Dependencies cannot be null");
 
-        if (dependencies != null) {
-            attributeDependencies = Set.copyOf(dependencies);
-        } else {
-            attributeDependencies = Collections.emptySet(); 
-        }
+        attributeDependencies = Set.copyOf(dependencies);
     }
     
     /**
@@ -178,15 +176,13 @@ public abstract class AbstractResolverPlugin<ResolvedType> extends AbstractIdent
      * 
      * @param dependencies unmodifiable list of dependencies for this plugin
      */
-    public void setDataConnectorDependencies(@Nullable final Set<ResolverDataConnectorDependency> dependencies) {
+    public void setDataConnectorDependencies(@Nonnull @NonnullElements
+            final Set<ResolverDataConnectorDependency> dependencies) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
+        Constraint.isNotNull(dependencies, "DataConnector Dependencies cannot be null");
 
-        if (dependencies != null) {
-            dataConnectorDependencies = Set.copyOf(dependencies);
-        } else {
-            dataConnectorDependencies = Collections.emptySet();
-        }
+        dataConnectorDependencies = Set.copyOf(dependencies);
     }
 
 
diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
index ad456d5..e280570 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/context/AttributeResolutionContext.java
@@ -19,14 +19,18 @@ package net.shibboleth.idp.attribute.resolver.context;
 
 import java.util.Collection;
 import java.util.Collections;
-import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
+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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.resolver.AttributeResolver;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
@@ -34,17 +38,12 @@ import net.shibboleth.idp.attribute.transcoding.AttributeTranscoderRegistry;
 import net.shibboleth.utilities.java.support.annotation.constraint.Live;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotLive;
-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 net.shibboleth.utilities.java.support.service.ReloadableService;
 import net.shibboleth.utilities.java.support.service.ServiceableComponent;
 
-import org.opensaml.messaging.context.BaseContext;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 /** A context supplying input to the {@link net.shibboleth.idp.attribute.resolver.AttributeResolver} interface. */
 @NotThreadSafe
 public final class AttributeResolutionContext extends BaseContext {
@@ -301,18 +300,14 @@ public final class AttributeResolutionContext extends BaseContext {
      * @return this context
      */
     @Nullable public AttributeResolutionContext setResolvedIdPAttributes(
-            @Nullable final Collection<IdPAttribute> attributes) {
-        
-        final Map<String,IdPAttribute> copy = new HashMap<>(attributes.size());
-        
-        if (attributes != null) {
-            for (final IdPAttribute attribute : attributes) {
-                copy.put(attribute.getId(), Constraint.isNotNull(attribute, "Resolved Attributes Cannot be null"));
-            }
-        }
-        
-        resolvedAttributes = Map.copyOf(copy);
+            @Nonnull @NonnullElements final Collection<IdPAttribute> attributes) {
         
+        Constraint.isNotNull(attributes, "Null attribute set cannot be inserted into a context");
+        resolvedAttributes = attributes.
+                stream().
+                collect(Collectors.collectingAndThen(
+                            Collectors.toMap(IdPAttribute::getId, a -> a),
+                            Collections::unmodifiableMap));
         return this;
     }
 
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
index 1ef1ad9..ffae1f9 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/AbstractResolverPluginTest.java
@@ -92,8 +92,6 @@ public class AbstractResolverPluginTest {
     @Test public void dependencies() {
         MockBaseAttributeResolver plugin = new MockBaseAttributeResolver("foo", "bar");
 
-        plugin.setAttributeDependencies(null);
-        plugin.setDataConnectorDependencies(null);
         Assert.assertNotNull(plugin.getAttributeDependencies());
         Assert.assertTrue(plugin.getAttributeDependencies().isEmpty());
         Assert.assertNotNull(plugin.getDataConnectorDependencies());
diff --git a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/MockDataConnector.java b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/MockDataConnector.java
index 8c0c4e3..b6a20e4 100644
--- a/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/MockDataConnector.java
+++ b/idp-attribute-resolver-api/src/test/java/net/shibboleth/idp/attribute/resolver/MockDataConnector.java
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.attribute.resolver;
 
+import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
 
@@ -62,8 +63,8 @@ public class MockDataConnector extends AbstractDataConnector {
             Set<ResolverAttributeDefinitionDependency> attrDepends, 
             Set<ResolverDataConnectorDependency> dcDepends
             ) throws ComponentInitializationException {
-        setAttributeDependencies(attrDepends);
-        setDataConnectorDependencies(dcDepends);
+        setAttributeDependencies(attrDepends == null? Collections.emptySet() : attrDepends);
+        setDataConnectorDependencies(dcDepends == null? Collections.emptySet() : dcDepends);
         setId(id);
         values = connectorValues;
         initialize();
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
index cf0715a..32b83a1 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/MappedAttributeDefinition.java
@@ -85,7 +85,7 @@ public class MappedAttributeDefinition extends AbstractAttributeDefinition {
      * 
      * @param mappings functions used to map an input value to an output value
      */
-    public void setValueMaps(@Nullable final Collection<ValueMap> mappings) {
+    public void setValueMaps(@Nullable @NonnullElements final Collection<ValueMap> mappings) {
         ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
index ab445d6..fe338f6 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/mapped/impl/ValueMap.java
@@ -82,7 +82,7 @@ public class ValueMap implements Function<String, Set<StringAttributeValue>> {
      *
      * @param newValues functions used to map an input value to an output value
      */
-    public void setSourceValues(@Nullable final Collection<SourceValue> newValues) {
+    public void setSourceValues(@Nullable @NonnullElements final Collection<SourceValue> newValues) {
 
         sourceValues = newValues != null ? Set.copyOf(newValues) : Collections.emptySet();
     }
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
index aa3e8b8..69f0e02 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/http/impl/AbstractHTTPSearchBuilder.java
@@ -96,7 +96,7 @@ public abstract class AbstractHTTPSearchBuilder extends AbstractInitializableCom
                 
         Constraint.isNotNull(headers, "Map of headers cannot be null");
         
-         headerList = headers.
+        headerList = headers.
                 entrySet().
                 stream().
                 map(e-> new Pair<>(
diff --git a/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/FilterAttributes.java b/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/FilterAttributes.java
index 0210953..5ce1cd5 100644
--- a/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/FilterAttributes.java
+++ b/idp-profile-impl/src/main/java/net/shibboleth/idp/profile/impl/FilterAttributes.java
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.profile.impl;
 
+import java.util.Collections;
 import java.util.function.Function;
 
 import javax.annotation.Nonnull;
@@ -383,7 +384,7 @@ public class FilterAttributes extends AbstractProfileAction {
             log.error("{} Error encountered while filtering attributes", getLogPrefix(), e);
             if (maskFailures) {
                 log.warn("Filter error masked, clearing resolved attributes");
-                attributeContext.setIdPAttributes(null);
+                attributeContext.setIdPAttributes(Collections.emptySet());
             } else {
                 ActionSupport.buildEvent(profileRequestContext, IdPEventIds.UNABLE_FILTER_ATTRIBS);
             }

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


More information about the commits mailing list