[java-identity-provider] branch master updated: IDP-1121 remove AttributeDef and DataConnector getters from the Attribute Resolver Implementation

Rod Widdowson rdw at steadingsoftware.com
Thu Apr 18 05:38:26 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=bc13ec3b3a6ea9c117d4ea4a4fb3dff6971b6270

The following commit(s) were added to refs/heads/master by this push:
       new  bc13ec3   IDP-1121 remove AttributeDef and DataConnector getters from the Attribute Resolver Implementation
bc13ec3 is described below

commit bc13ec3b3a6ea9c117d4ea4a4fb3dff6971b6270
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Thu Apr 18 10:24:26 2019 +0100

    IDP-1121 remove AttributeDef and DataConnector getters from the Attribute Resolver Implementation
    
    https://issues.shibboleth.net/jira/browse/IDP-1121
---
 .../idp/attribute/resolver/AttributeResolver.java  | 20 ++++-------
 .../resolver/impl/AttributeResolverImpl.java       | 19 +++++++++--
 .../impl/AttributeResolverServiceGaugeSet.java     | 12 ++++---
 .../AbstractSAMLAttributeDesignatorsMapper.java    | 39 +++++++++++-----------
 .../mapping/AbstractSAMLAttributesMapper.java      | 37 ++++++++++----------
 5 files changed, 66 insertions(+), 61 deletions(-)

diff --git a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AttributeResolver.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AttributeResolver.java
index 8d2e837..1c7c8b3 100644
--- a/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AttributeResolver.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/AttributeResolver.java
@@ -17,14 +17,14 @@
 
 package net.shibboleth.idp.attribute.resolver;
 
-import java.util.Map;
+import java.util.Collection;
 
 import javax.annotation.Nonnull;
 import javax.annotation.concurrent.ThreadSafe;
 
+import net.shibboleth.idp.attribute.AttributeEncoder;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
-import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
-import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.IdentifiedComponent;
 
 /**
@@ -40,18 +40,12 @@ import net.shibboleth.utilities.java.support.component.IdentifiedComponent;
 public interface AttributeResolver extends IdentifiedComponent {
 
     /**
-     * Gets the collection of attribute definitions for this resolver.
+     * Gets all the {@link AttributeEncoder}s for this resolver. Each encoder is linked
+     * (via being in an {@link Pair} to the name of the attribute it is associated with.
      * 
-     * @return attribute definitions loaded in to this resolver
+     * @return The Attribute Encoders loaded in to this resolver
      */
-    @Nonnull @NonnullElements @Unmodifiable Map<String, AttributeDefinition> getAttributeDefinitions();
-
-    /**
-     * Gets the unmodifiable collection of data connectors for this resolver.
-     * 
-     * @return data connectors loaded in to this resolver
-     */
-    @Nonnull @NonnullElements @Unmodifiable Map<String, DataConnector> getDataConnectors();
+    @Nonnull Collection<Pair<String, AttributeEncoder<?>>> getAllEncoders();
 
     /**
      * Resolves the attribute for the give request. Note, if attributes are requested,
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
index f5219f0..d2168fe 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverImpl.java
@@ -41,6 +41,7 @@ import org.slf4j.LoggerFactory;
 import com.google.common.collect.ImmutableMap;
 
 import net.shibboleth.ext.spring.service.AbstractServiceableComponent;
+import net.shibboleth.idp.attribute.AttributeEncoder;
 import net.shibboleth.idp.attribute.EmptyAttributeValue;
 import net.shibboleth.idp.attribute.IdPAttribute;
 import net.shibboleth.idp.attribute.IdPAttributeValue;
@@ -60,6 +61,7 @@ import net.shibboleth.utilities.java.support.annotation.constraint.NullableEleme
 import net.shibboleth.utilities.java.support.annotation.constraint.Unmodifiable;
 import net.shibboleth.utilities.java.support.collection.LazyList;
 import net.shibboleth.utilities.java.support.collection.LazySet;
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
@@ -130,7 +132,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * 
      * @return attribute definitions loaded in to this resolver
      */
-    @Override @Nonnull @NonnullElements @Unmodifiable public Map<String, AttributeDefinition> 
+    @Nonnull @NonnullElements @Unmodifiable public Map<String, AttributeDefinition>
         getAttributeDefinitions() {
         return attributeDefinitions;
     }
@@ -164,7 +166,7 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
      * 
      * @return data connectors loaded in to this resolver
      */
-    @Override @Nonnull @NonnullElements @Unmodifiable public Map<String, DataConnector> getDataConnectors() {
+    @Nonnull @NonnullElements @Unmodifiable public Map<String, DataConnector> getDataConnectors() {
         return dataConnectors;
     }
     
@@ -629,5 +631,16 @@ public class AttributeResolverImpl extends AbstractServiceableComponent<Attribut
             }
         }
     }
-    
+
+    /** {@inheritDoc} */
+    public Collection<Pair<String, AttributeEncoder<?>>> getAllEncoders() {
+        final Collection<Pair<String, AttributeEncoder<?>>> result = new HashSet<>();
+
+        for (final AttributeDefinition attributeDef : getAttributeDefinitions().values()) {
+            for (final AttributeEncoder encoder : attributeDef.getAttributeEncoders()) {
+                result.add(new Pair<>(attributeDef.getId(), encoder));
+            }
+        }
+        return result;
+    }
 }
\ No newline at end of file
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
index 86aee3f..b70a1b8 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/impl/AttributeResolverServiceGaugeSet.java
@@ -62,11 +62,13 @@ public class AttributeResolverServiceGaugeSet extends ReloadableServiceGaugeSet
                         if (component != null) {
                             try {                                
                                 final AttributeResolver resolver = component.getComponent();
-                                final Collection<DataConnector> connectors = resolver.getDataConnectors().values();
-                                
-                                for (final DataConnector connector: connectors) {
-                                    if (connector.getLastFail() != null) {
-                                        mapBuilder.put(connector.getId(), connector.getLastFail());
+                                if (resolver instanceof AttributeResolverImpl) {
+                                    final Collection<DataConnector> connectors =
+                                            ((AttributeResolverImpl) resolver).getDataConnectors().values();
+                                    for (final DataConnector connector: connectors) {
+                                        if (connector.getLastFail() != null) {
+                                            mapBuilder.put(connector.getId(), connector.getLastFail());
+                                        }
                                     }
                                 }
                             } finally {
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributeDesignatorsMapper.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributeDesignatorsMapper.java
index c15b765..cccd896 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributeDesignatorsMapper.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributeDesignatorsMapper.java
@@ -27,27 +27,27 @@ import java.util.Map.Entry;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.saml.saml1.core.AttributeDesignator;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+
 import net.shibboleth.idp.attribute.AttributeEncoder;
 import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.resolver.AttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.AttributeResolver;
 import net.shibboleth.idp.saml.attribute.encoding.AttributeDesignatorMapperProcessor;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import org.opensaml.saml.saml1.core.AttributeDesignator;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Supplier;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
-
 /**
  * The class contains the mechanics to go from a list of {@link AttributeDesignator}s to a {@link Multimap} of
  * {@link String},{@link IdPAttribute} (or derived, or null). The representation as a {@link Multimap} is useful for
@@ -96,19 +96,18 @@ public abstract class AbstractSAMLAttributeDesignatorsMapper<OutType extends IdP
         
         final Multimap<AbstractSAMLAttributeDesignatorMapper<OutType>,String> theMappers = HashMultimap.create();
 
-        for (final AttributeDefinition attributeDef : resolver.getAttributeDefinitions().values()) {
-            for (final AttributeEncoder encoder : attributeDef.getAttributeEncoders()) {
-                if (encoder instanceof AttributeDesignatorMapperProcessor) {
-                    // There is an appropriate reverse mapper.
-                    final AttributeDesignatorMapperProcessor factory = (AttributeDesignatorMapperProcessor) encoder;
-                    final AbstractSAMLAttributeDesignatorMapper<OutType> mapper = mapperFactory.get();
-                    factory.populateAttributeMapper(mapper);
+        for (final Pair<String, AttributeEncoder<?>> pair : resolver.getAllEncoders()) {
+            if (pair.getSecond() instanceof AttributeDesignatorMapperProcessor) {
+                // There is an appropriate reverse mapper.
+                final AttributeDesignatorMapperProcessor factory =
+                        (AttributeDesignatorMapperProcessor) pair.getSecond();
+                final AbstractSAMLAttributeDesignatorMapper<OutType> mapper = mapperFactory.get();
+                factory.populateAttributeMapper(mapper);
 
-                    theMappers.put(mapper, attributeDef.getId());
-                }
+                theMappers.put(mapper, pair.getFirst());
             }
         }
-
+        
         mappers = new ArrayList<>(theMappers.values().size());
 
         for (final Entry<AbstractSAMLAttributeDesignatorMapper<OutType>,Collection<String>> entry
diff --git a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributesMapper.java b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributesMapper.java
index 7ba120b..61e88bb 100644
--- a/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributesMapper.java
+++ b/idp-saml-api/src/main/java/net/shibboleth/idp/saml/attribute/mapping/AbstractSAMLAttributesMapper.java
@@ -27,27 +27,27 @@ import java.util.Map.Entry;
 import javax.annotation.Nonnull;
 import javax.annotation.Nullable;
 
+import org.opensaml.saml.saml2.core.Attribute;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Supplier;
+import com.google.common.collect.ArrayListMultimap;
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.Multimap;
+
 import net.shibboleth.idp.attribute.AttributeEncoder;
 import net.shibboleth.idp.attribute.IdPAttribute;
-import net.shibboleth.idp.attribute.resolver.AttributeDefinition;
 import net.shibboleth.idp.attribute.resolver.AttributeResolver;
 import net.shibboleth.idp.saml.attribute.encoding.AttributeMapperProcessor;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullElements;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.collection.Pair;
 import net.shibboleth.utilities.java.support.component.AbstractIdentifiableInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 
-import org.opensaml.saml.saml2.core.Attribute;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.base.Supplier;
-import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.Multimap;
-
 /**
  * The class contains the mechanics to go from a list of {@link Attribute}s (or derived) to a {@link Multimap} of
  * {@link String},{@link IdPAttribute} (or derived, or null). The representation as a {@link Multimap} is useful for
@@ -97,16 +97,13 @@ public abstract class AbstractSAMLAttributesMapper<InType extends Attribute, Out
 
         theMappers = HashMultimap.create();
 
-        for (final AttributeDefinition attributeDef : resolver.getAttributeDefinitions().values()) {
-            for (final AttributeEncoder encode : attributeDef.getAttributeEncoders()) {
-                if (encode instanceof AttributeMapperProcessor) {
-                    // There is an appropriate reverse mapper
-                    final AttributeMapperProcessor factory = (AttributeMapperProcessor) encode;
-                    final AbstractSAMLAttributeMapper<InType,OutType> mapper = mapperFactory.get();
-                    factory.populateAttributeMapper(mapper);
-
-                    theMappers.put(mapper, attributeDef.getId());
-                }
+        for (final Pair<String, AttributeEncoder<?>> pair : resolver.getAllEncoders()) {
+            if (pair.getSecond() instanceof AttributeMapperProcessor) {
+                // There is an appropriate reverse mapper
+                final AttributeMapperProcessor factory = (AttributeMapperProcessor) pair.getSecond();
+                final AbstractSAMLAttributeMapper<InType,OutType> mapper = mapperFactory.get();
+                factory.populateAttributeMapper(mapper);
+                theMappers.put(mapper, pair.getFirst());
             }
         }
 

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


More information about the commits mailing list