Author: [email protected]
Date: Thu Nov 24 14:29:05 2011
New Revision: 1765

Log:
AMDATU-468 Refactored tenant parameter resolver to use whiteboard tenant 
services

Modified:
   
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
   
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java

Modified: 
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
==============================================================================
--- 
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
  (original)
+++ 
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
  Thu Nov 24 14:29:05 2011
@@ -18,7 +18,6 @@
 import java.util.Dictionary;
 import java.util.Hashtable;
 
-import org.amdatu.core.tenant.TenantManagementService;
 import org.amdatu.web.dispatcher.DispatchExtenderFilter;
 import org.amdatu.web.dispatcher.DispatcherService;
 import 
org.amdatu.web.tenantresolver.parameter.service.ParameterTenantResolverExtenderFilter;
@@ -28,6 +27,12 @@
 import org.osgi.framework.Constants;
 import org.osgi.service.log.LogService;
 
+/**
+ * BundleActivator for the {@link ParameterTenantResolverExtenderFilter} 
component.
+ * 
+ * @author <a href="mailto:[email protected]";>Amdatu Project 
Team</a>
+ * 
+ */
 public final class ParameterTenantResolverActivator extends 
DependencyActivatorBase {
 
     @Override
@@ -45,9 +50,6 @@
                                .setService(DispatcherService.class)
                                .setRequired(true))
                     .add(createServiceDependency()
-                               .setService(TenantManagementService.class)
-                               .setRequired(true))
-                    .add(createServiceDependency()
                                .setService(LogService.class)
                                .setRequired(false))
                        );

Modified: 
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
==============================================================================
--- 
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
  (original)
+++ 
trunk/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
  Thu Nov 24 14:29:05 2011
@@ -13,8 +13,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.amdatu.web.tenantresolver.parameter.service;
-
+package org.amdatu.web.tenantresolver.parameter.service;
+
 import java.io.IOException;
 
 import javax.servlet.FilterChain;
@@ -25,44 +25,66 @@
 import javax.servlet.http.HttpServletRequest;
 
 import org.amdatu.core.tenant.Tenant;
-import org.amdatu.core.tenant.TenantException;
-import org.amdatu.core.tenant.TenantManagementService;
 import org.amdatu.web.dispatcher.DispatchExtenderFilter;
 import org.amdatu.web.dispatcher.DispatcherService;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
 import org.osgi.service.log.LogService;
-
-public final class ParameterTenantResolverExtenderFilter implements 
DispatchExtenderFilter {
-    public final static String TENANT_REQUEST_PARAMETER = "tenant";
-
-    private volatile TenantManagementService m_tenantManagementService;
-    private volatile LogService m_logService;
-
-    public void setTenentManagementService(TenantManagementService 
tenantManagementService) {
-        m_tenantManagementService = tenantManagementService;
-    }
-
-    public void init(FilterConfig filterConfig) throws ServletException {
-    }
-
-    public void destroy() {
-    }
-
-    public void doFilter(ServletRequest servletRequest, ServletResponse 
servletResponse, FilterChain filterChain) throws IOException, ServletException {
-        HttpServletRequest httpServletRequest = (HttpServletRequest) 
servletRequest;
-        String tenantId = 
httpServletRequest.getParameter(TENANT_REQUEST_PARAMETER);
-        if (tenantId != null) {
-            try {
-                Tenant tenant = 
m_tenantManagementService.getTenantById(tenantId);
-                if (tenant != null) {
-                    
servletRequest.setAttribute(DispatcherService.TENANT_REQUESTCONTEXT_KEY, 
tenant);
-                    
servletRequest.setAttribute(DispatcherService.TENANTID_REQUESTCONTEXT_KEY, 
tenantId);
-                }
-                else {
-                    m_logService.log(LogService.LOG_WARNING, "Tenant parameter 
did not resolve to a tenant: " + tenantId);
-                }
-            }
-            catch (TenantException e) {}
-        }
-        filterChain.doFilter(servletRequest, servletResponse);
-    }
-}
+
+/**
+ * Amdatu Web {@link DispatchExtenderFilter} that resolves the {@link Tenant} 
by
+ * comparing the request parameter {@link TENANT_REQUEST_PARAMETER} against the
+ * id property of available tenants.
+ * 
+ * @author <a href="mailto:[email protected]";>Amdatu Project 
Team</a>
+ * 
+ */
+public final class ParameterTenantResolverExtenderFilter implements 
DispatchExtenderFilter {
+
+    public final static String TENANT_REQUEST_PARAMETER = "tenant";
+
+    private volatile LogService m_logService;
+    private volatile BundleContext m_bundleContext;
+
+    public void init(FilterConfig filterConfig) throws ServletException {
+    }
+
+    public void destroy() {
+    }
+
+    public void doFilter(ServletRequest servletRequest, ServletResponse 
servletResponse, FilterChain filterChain)
+        throws IOException, ServletException {
+
+        final HttpServletRequest httpServletRequest = (HttpServletRequest) 
servletRequest;
+        final String tenantId = 
httpServletRequest.getParameter(TENANT_REQUEST_PARAMETER);
+        boolean resolved = false;
+
+        // TODO should check value for a valid format to prevent invalid filter
+        if (tenantId != null) {
+            try {
+                ServiceReference[] refs =
+                    
m_bundleContext.getServiceReferences(Tenant.class.getName(), "(" + 
Tenant.TENANT_ID_SERVICEPROPERTY
+                        + "=" + tenantId + ")");
+                if (refs != null && refs.length > 0) {
+                    Tenant tenant = (Tenant) 
m_bundleContext.getService(refs[0]);
+                    if (tenant != null) {
+                        
servletRequest.setAttribute(DispatcherService.TENANT_REQUESTCONTEXT_KEY, 
tenant);
+                        
servletRequest.setAttribute(DispatcherService.TENANTID_REQUESTCONTEXT_KEY, 
tenant.getId());
+                        resolved = true;
+                    }
+                }
+            }
+            catch (InvalidSyntaxException e) {
+                m_logService.log(LogService.LOG_ERROR, "Illegal filter in 
servicelookup... should never happen!", e);
+                throw new ServletException("Illegal filter in servicelookup... 
should never happen!", e);
+            }
+        }
+        if (!resolved) {
+            // No INF/WARN/ERR cause there may be multiple resolvers in play
+            m_logService.log(LogService.LOG_DEBUG, "Failed to resolved request 
to available tenant for request value: "
+                + tenantId);
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+}
_______________________________________________
Amdatu-commits mailing list
[email protected]
http://lists.amdatu.org/mailman/listinfo/amdatu-commits

Reply via email to