[java-identity-provider COMMIT] in /trunk: idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicat...

noreply at shibboleth.net noreply at shibboleth.net
Thu Aug 15 15:28:00 EDT 2013


Author: scantor
Date: Thu Aug 15 15:27:59 2013
New Revision: 4689

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=4689&view=rev
Log:
Exact match predicate for principal comparison

Added:
    trunk/idp-authn-impl/src/main/java/net/shibboleth/idp/authn/impl/ExactPrincipalEvalPredicateFactory.java   (with props)
    trunk/idp-authn-impl/src/test/java/net/shibboleth/idp/authn/impl/ExactPrincipalEvalPredicateFactoryTest.java   (with props)
Modified:
    trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicateFactoryRegistry.java

Modified: trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicateFactoryRegistry.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicateFactoryRegistry.java?rev=4689&r1=4688&r2=4689&view=diff
==============================================================================
--- trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicateFactoryRegistry.java (original)
+++ trunk/idp-authn-api/src/main/java/net/shibboleth/idp/authn/PrincipalEvalPredicateFactoryRegistry.java Thu Aug 15 15:27:59 2013
@@ -17,6 +17,7 @@
 
 package net.shibboleth.idp.authn;
 
+import java.security.Principal;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 
@@ -28,13 +29,14 @@
 
 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.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
 /**
- * A registry of mappings between a type of matching operator and a corresponding
- * {@link PrincipalEvalPredicateFactory} that returns predicates enforcing
- * a particular set of matching rules for that operator.
+ * A registry of mappings between a custom {@link Principal} subtype with a matching operator
+ * and a corresponding {@link PrincipalEvalPredicateFactory} that returns predicates enforcing
+ * a particular set of matching rules for that operator and subtype.
  */
 public final class PrincipalEvalPredicateFactoryRegistry {
 
@@ -42,7 +44,7 @@
     private final Logger log = LoggerFactory.getLogger(PrincipalEvalPredicateFactoryRegistry.class);
     
     /** Storage for the registry mappings. */
-    private Map<String, PrincipalEvalPredicateFactory> registry;
+    private Map<Pair<Class<? extends Principal>, String>, PrincipalEvalPredicateFactory> registry;
 
     /** Constructor. */
     public PrincipalEvalPredicateFactoryRegistry() {
@@ -54,27 +56,32 @@
      * 
      * @param fromMap  map to populate registry with
      */
-    public PrincipalEvalPredicateFactoryRegistry(
-            @Nonnull @NonnullElements Map<String, PrincipalEvalPredicateFactory> fromMap) {
+    public PrincipalEvalPredicateFactoryRegistry(@Nonnull @NonnullElements
+            Map<Pair<Class<? extends Principal>, String>, PrincipalEvalPredicateFactory> fromMap) {
         registry = new ConcurrentHashMap(Constraint.isNotNull(fromMap, "Source map cannot be null"));
     }
     
     /**
-     * Get a registered predicate factory for a given operator string, if any.
+     * Get a registered predicate factory for a given principal type and operator string, if any.
      * 
+     * @param principalType a principal subtype
      * @param operator  an operator string
      * @return a corresponding predicate factory, or null
      */
-    @Nullable public PrincipalEvalPredicateFactory lookup(@Nonnull @NotEmpty final String operator) {
+    @Nullable public PrincipalEvalPredicateFactory lookup(@Nonnull final Class<? extends Principal> principalType,
+            @Nonnull @NotEmpty final String operator) {
+        Constraint.isNotNull(principalType, "Principal subtype cannot be null");
         String trimmed = Constraint.isNotNull(StringSupport.trimOrNull(operator), "Operator cannot be null or empty");
         
-        PrincipalEvalPredicateFactory factory = registry.get(trimmed);
+        Pair key = new Pair(principalType, trimmed);
+        PrincipalEvalPredicateFactory factory = registry.get(key);
         if (factory != null) {
-            log.debug("Registry located predicate factory of type {} for operator {}", factory.getClass().getName(),
-                    trimmed);
+            log.debug("Registry located predicate factory of type {} for principal type {} and operator {}",
+                    factory.getClass().getName(), principalType, trimmed);
             return factory;
         } else {
-            log.debug("Registry failed to locate predicate factory for operator {}", trimmed);
+            log.debug("Registry failed to locate predicate factory for principal type {} and operator {}",
+                    principalType, trimmed);
             return null;
         }
     }
@@ -82,27 +89,33 @@
     /**
      * Register a predicate factory for a given operator string.
      * 

[... 38 lines stripped ...]


More information about the commits mailing list