[java-identity-provider COMMIT] in /trunk/idp-attribute-resolver-impl/src: main/java/net/shibboleth/idp/attribute/res...

noreply at shibboleth.net noreply at shibboleth.net
Tue Jul 29 04:59:24 EDT 2014


Author: rdw
Date: Tue Jul 29 04:59:24 2014
New Revision: 6351

URL: http://svn.shibboleth.net/view/java-identity-provider?rev=6351&view=rev
Log:
Add profileContext to scripted attribute definition (+tests)

Modified:
    trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
    trunk/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeTest.java
    trunk/idp-attribute-resolver-impl/src/test/resources/data/net/shibboleth/idp/attribute/resolver/impl/ad/context.script
    trunk/idp-attribute-resolver-impl/src/test/resources/data/net/shibboleth/idp/attribute/resolver/impl/ad/jdk8/context.script

Modified: trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java
URL: http://svn.shibboleth.net/view/java-identity-provider/trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java?rev=6351&r1=6350&r2=6351&view=diff
==============================================================================
--- trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java (original)
+++ trunk/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/ad/impl/ScriptedAttributeDefinition.java Tue Jul 29 04:59:24 2014
@@ -35,14 +35,20 @@
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolverWorkContext;
+import net.shibboleth.idp.profile.context.RelyingPartyContext;
 import net.shibboleth.utilities.java.support.annotation.constraint.NonnullAfterInit;
 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 net.shibboleth.utilities.java.support.scripting.EvaluableScript;
 
+import org.opensaml.messaging.context.navigate.ParentContextLookup;
+import org.opensaml.profile.context.ProfileRequestContext;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
+
+import com.google.common.base.Function;
+import com.google.common.base.Functions;
 
 import edu.internet2.middleware.shibboleth.common.attribute.provider.V2SAMLProfileRequestContext;
 
@@ -74,14 +80,25 @@
     @Nonnull private final Logger log = LoggerFactory.getLogger(ScriptedAttributeDefinition.class);
 
     /** Script to be evaluated. */
-    private EvaluableScript script;
+    @NonnullAfterInit private EvaluableScript script;
+
+    /** Strategy used to locate the {@link ProfileRequestContext} to use. */
+    @Nonnull private Function<AttributeResolutionContext, ProfileRequestContext> prcLookupStrategy;
+
+    /** Constructor. */
+    public ScriptedAttributeDefinition() {
+        // Defaults to ProfileRequestContext -> RelyingPartyContext -> AttributeContext.
+        prcLookupStrategy =
+                Functions.compose(new ParentContextLookup<RelyingPartyContext, ProfileRequestContext>(),
+                        new ParentContextLookup<AttributeResolutionContext, RelyingPartyContext>());
+    }
 
     /**
      * Gets the script to be evaluated.
      * 
      * @return the script to be evaluated
      */
-    @Nullable @NonnullAfterInit public EvaluableScript getScript() {
+    @NonnullAfterInit public EvaluableScript getScript() {
         return script;
     }
 
@@ -95,6 +112,29 @@
         ComponentSupport.ifDestroyedThrowDestroyedComponentException(this);
 
         script = Constraint.isNotNull(definitionScript, "Attribute definition script cannot be null");
+    }
+
+    /**
+     * Set the strategy used to locate the {@link ProfileRequestContext} associated with a given
+     * {@link AttributeResolutionContext}.
+     * 
+     * @param strategy strategy used to locate the {@link ProfileRequestContext} associated with a given
+     *            {@link AttributeResolutionContext}
+     */
+    public void setProfileRequestContextLookupStrategy(
+            @Nonnull final Function<AttributeResolutionContext, ProfileRequestContext> strategy) {
+        ComponentSupport.ifInitializedThrowUnmodifiabledComponentException(this);
+
+        prcLookupStrategy = Constraint.isNotNull(strategy, "ProfileRequestContext lookup strategy cannot be null");
+    }
+
+    /** {@inheritDoc} */
+    @Override protected void doInitialize() throws ComponentInitializationException {
+        super.doInitialize();
+
+        if (null == script) {
+            throw new ComponentInitializationException(getLogPrefix() + " no script was configured");
+        }
     }
 
     /** {@inheritDoc} */
@@ -129,15 +169,6 @@
                     + result.getClass().toString() + ")");
         }
 
-    }
-
-    /** {@inheritDoc} */
-    @Override protected void doInitialize() throws ComponentInitializationException {

[... 87 lines stripped ...]


More information about the commits mailing list