[java-identity-provider] 02/05: IDP-1179 Move the RDBMS StatementBuilders to api

Rod Widdowson rdw at steadingsoftware.com
Fri Nov 22 03:28:06 EST 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=e3c50cf51e9db328b7fc729297982dbf600e29dc

commit e3c50cf51e9db328b7fc729297982dbf600e29dc
Author: Rod Widdowson <rdw at steadingsoftware.com>
AuthorDate: Mon Nov 18 15:56:55 2019 +0000

    IDP-1179  Move the RDBMS StatementBuilders to api
    
    https://issues.shibboleth.net/jira/browse/IDP-1179
    
    Create a  V2 Version (still in impl) which injects the 'requestContext'
---
 idp-attribute-resolver-api/pom.xml                 |  4 ++
 .../rdbms}/AbstractExecutableStatementBuilder.java |  3 +-
 .../rdbms}/FormatExecutableStatementBuilder.java   |  2 +-
 .../TemplatedExecutableStatementBuilder.java       | 21 ++++++----
 ...mpatibleTemplateExecutableStatementBuilder.java | 49 ++++++++++++++++++++++
 .../dc/rdbms/impl/RDBMSDataConnectorTest.java      |  2 +
 .../dc/rdbms/impl/RDBMSDataConnectorParser.java    |  4 +-
 .../rdbms-attribute-resolver-spring-context.xml    |  2 +-
 ...bms-attribute-resolver-spring-props-context.xml |  2 +-
 9 files changed, 73 insertions(+), 16 deletions(-)

diff --git a/idp-attribute-resolver-api/pom.xml b/idp-attribute-resolver-api/pom.xml
index c32966a..354066a 100644
--- a/idp-attribute-resolver-api/pom.xml
+++ b/idp-attribute-resolver-api/pom.xml
@@ -47,6 +47,10 @@
 			<artifactId>bcprov-jdk15on</artifactId>
 		</dependency>
 
+		<dependency>
+			<groupId>org.apache.velocity</groupId>
+			<artifactId>velocity-engine-core</artifactId>
+		</dependency>
         <!-- Provided Dependencies -->
 
         <!-- Runtime Dependencies -->
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
similarity index 96%
rename from idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java
rename to idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
index 63871fa..73a811a 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/AbstractExecutableStatementBuilder.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/AbstractExecutableStatementBuilder.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.dc.rdbms.impl;
+package net.shibboleth.idp.attribute.resolver.dc.rdbms;
 
 import java.sql.Connection;
 import java.sql.ResultSet;
@@ -32,7 +32,6 @@ import net.shibboleth.idp.attribute.IdPAttributeValue;
 import net.shibboleth.idp.attribute.resolver.ResolutionException;
 import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder;
-import net.shibboleth.idp.attribute.resolver.dc.rdbms.ExecutableStatement;
 import net.shibboleth.utilities.java.support.component.AbstractInitializableComponent;
 import net.shibboleth.utilities.java.support.component.ComponentSupport;
 import net.shibboleth.utilities.java.support.logic.Constraint;
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
similarity index 98%
rename from idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java
rename to idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
index 77f1c94..572e228 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/FormatExecutableStatementBuilder.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/FormatExecutableStatementBuilder.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.dc.rdbms.impl;
+package net.shibboleth.idp.attribute.resolver.dc.rdbms;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
similarity index 93%
rename from idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java
rename to idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
index fd81e2e..4a11864 100644
--- a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/TemplatedExecutableStatementBuilder.java
+++ b/idp-attribute-resolver-api/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/TemplatedExecutableStatementBuilder.java
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-package net.shibboleth.idp.attribute.resolver.dc.rdbms.impl;
+package net.shibboleth.idp.attribute.resolver.dc.rdbms;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -43,8 +43,6 @@ import org.apache.velocity.exception.VelocityException;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import edu.internet2.middleware.shibboleth.common.attribute.provider.V2SAMLProfileRequestContext;
-
 /**
  * An {@link net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder} that generates the SQL statement to
  * be executed by evaluating a {@link Template} against the currently resolved attributes within a
@@ -173,17 +171,14 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
     /**
      * Apply the context to the template. {@inheritDoc}
      */
-    @Override protected String getSQLQuery(@Nonnull final AttributeResolutionContext resolutionContext,
+    @Override
+    public final String getSQLQuery(@Nonnull final AttributeResolutionContext resolutionContext,
             @Nonnull final Map<String, List<IdPAttributeValue>> dependencyAttributes) throws ResolutionException {
         final VelocityContext context = new VelocityContext();
         log.trace("Creating search filter using attribute resolution context {}", resolutionContext);
         context.put("resolutionContext", resolutionContext);
 
-        if (isV2Compatibility()) {
-            final V2SAMLProfileRequestContext requestContext = new V2SAMLProfileRequestContext(resolutionContext, null);
-            log.trace("Adding v2 request context {}", requestContext);
-            context.put("requestContext", requestContext);
-        }
+        addExtraVelocityContext(context, resolutionContext);
 
         // inject dependencies
         if (dependencyAttributes != null && !dependencyAttributes.isEmpty()) {
@@ -211,6 +206,14 @@ public class TemplatedExecutableStatementBuilder extends AbstractExecutableState
         }
     }
 
+    /** Method to allow private additions to the velocity context.
+     * @param velocityContext where to add the information
+     * @param resolutionContext current resolution context
+     */
+    protected void addExtraVelocityContext(@Nonnull final VelocityContext velocityContext,
+            @Nonnull final AttributeResolutionContext resolutionContext) {
+    }
+
     /** {@inheritDoc} */
     @Override protected void doInitialize() throws ComponentInitializationException {
         super.doInitialize();
diff --git a/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/V2CompatibleTemplateExecutableStatementBuilder.java b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/V2CompatibleTemplateExecutableStatementBuilder.java
new file mode 100644
index 0000000..210aec3
--- /dev/null
+++ b/idp-attribute-resolver-impl/src/main/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/V2CompatibleTemplateExecutableStatementBuilder.java
@@ -0,0 +1,49 @@
+/*
+ * Licensed to the University Corporation for Advanced Internet Development,
+ * Inc. (UCAID) under one or more contributor license agreements.  See the
+ * NOTICE file distributed with this work for additional information regarding
+ * copyright ownership. The UCAID licenses this file to You under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file except in
+ * compliance with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package net.shibboleth.idp.attribute.resolver.dc.rdbms.impl;
+
+import javax.annotation.Nonnull;
+
+import org.apache.velocity.VelocityContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import edu.internet2.middleware.shibboleth.common.attribute.provider.V2SAMLProfileRequestContext;
+import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
+import net.shibboleth.idp.attribute.resolver.dc.rdbms.TemplatedExecutableStatementBuilder;
+
+/**
+ * A {@link TemplatedExecutableStatementBuilder} which also injects an
+ * {@link V2SAMLProfileRequestContext} into the spring context.
+ */
+public class V2CompatibleTemplateExecutableStatementBuilder extends TemplatedExecutableStatementBuilder {
+
+    /** Class logger. */
+    private final Logger log = LoggerFactory.getLogger(V2CompatibleTemplateExecutableStatementBuilder.class);
+
+    /** {@inheritDoc} */
+    protected void addExtraVelocityContext(@Nonnull final VelocityContext velocityContext,
+            @Nonnull final AttributeResolutionContext resolutionContext) {
+        if (isV2Compatibility()) {
+            final V2SAMLProfileRequestContext requestContext = new V2SAMLProfileRequestContext(resolutionContext, null);
+            log.trace("Adding v2 request context {}", requestContext);
+            velocityContext.put("requestContext", requestContext);
+        }
+        super.addExtraVelocityContext(velocityContext, resolutionContext);
+    }
+}
diff --git a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
index 19b92e1..1646ae9 100644
--- a/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
+++ b/idp-attribute-resolver-impl/src/test/java/net/shibboleth/idp/attribute/resolver/dc/rdbms/impl/RDBMSDataConnectorTest.java
@@ -46,7 +46,9 @@ import net.shibboleth.idp.attribute.resolver.context.AttributeResolutionContext;
 import net.shibboleth.idp.attribute.resolver.dc.ExecutableSearchBuilder;
 import net.shibboleth.idp.attribute.resolver.dc.impl.TestCache;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.ExecutableStatement;
+import net.shibboleth.idp.attribute.resolver.dc.rdbms.FormatExecutableStatementBuilder;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.ResultMappingStrategy;
+import net.shibboleth.idp.attribute.resolver.dc.rdbms.TemplatedExecutableStatementBuilder;
 import net.shibboleth.idp.saml.impl.TestSources;
 import net.shibboleth.idp.testing.DatabaseTestingSupport;
 import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
diff --git a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
index 51f9da4..0a8b228 100644
--- a/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
+++ b/idp-attribute-resolver-spring/src/main/java/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/impl/RDBMSDataConnectorParser.java
@@ -35,7 +35,7 @@ import net.shibboleth.ext.spring.util.SpringSupport;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.DataSourceValidator;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.RDBMSDataConnector;
 import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.StringResultMappingStrategy;
-import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.TemplatedExecutableStatementBuilder;
+import net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.V2CompatibleTemplateExecutableStatementBuilder;
 import net.shibboleth.idp.attribute.resolver.spring.dc.AbstractDataConnectorParser;
 import net.shibboleth.idp.attribute.resolver.spring.dc.impl.CacheConfigParser;
 import net.shibboleth.idp.attribute.resolver.spring.dc.impl.ManagedConnectionParser;
@@ -193,7 +193,7 @@ public class RDBMSDataConnectorParser extends AbstractDataConnectorParser {
          */
         @Nonnull public BeanDefinition createTemplateBuilder() {
             final BeanDefinitionBuilder templateBuilder =
-                    BeanDefinitionBuilder.genericBeanDefinition(TemplatedExecutableStatementBuilder.class);
+                    BeanDefinitionBuilder.genericBeanDefinition(V2CompatibleTemplateExecutableStatementBuilder.class);
             templateBuilder.setInitMethodName("initialize");
             templateBuilder.setDestroyMethodName("destroy");
 
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
index fa57646..28c1087 100644
--- a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-context.xml
@@ -17,7 +17,7 @@
         <constructor-arg value="expireAfterAccess=10s,maximumSize=25" />
     </bean>
     <bean id="cache" class="com.google.common.cache.Cache" factory-bean="cacheBuilder" factory-method="build" />
-    <bean id="query" class="net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.FormatExecutableStatementBuilder"
+    <bean id="query" class="net.shibboleth.idp.attribute.resolver.dc.rdbms.FormatExecutableStatementBuilder"
         p:query="SELECT * FROM people WHERE userid='%s'" />
 
     <bean id="mappings" class="net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.StringResultMappingStrategy"
diff --git a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml
index a654820..8c7e1b5 100644
--- a/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml
+++ b/idp-attribute-resolver-spring/src/test/resources/net/shibboleth/idp/attribute/resolver/spring/dc/rdbms/rdbms-attribute-resolver-spring-props-context.xml
@@ -15,7 +15,7 @@
         <constructor-arg value="%{cache.cacheBuilderSpec}" />
     </bean>
     <bean id="cache" class="com.google.common.cache.Cache" factory-bean="cacheBuilder" factory-method="build" />
-    <bean class="net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.FormatExecutableStatementBuilder"
+    <bean class="net.shibboleth.idp.attribute.resolver.dc.rdbms.FormatExecutableStatementBuilder"
         p:query="SELECT * FROM people WHERE userid='%s'" />
     <bean id="mappings" class="net.shibboleth.idp.attribute.resolver.dc.rdbms.impl.StringResultMappingStrategy"
         p:noResultAnError="true" p:multipleResultsAnError="true">

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


More information about the commits mailing list