Author: bdekruijff at gmail.com
Date: Mon Jan 31 17:12:51 2011
New Revision: 733

Log:
AMDATU-245 added dispatch extender for resolving based on hostname

Added:
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
Modified:
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java

Added: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
        Mon Jan 31 17:12:51 2011
@@ -0,0 +1,61 @@
+package org.amdatu.web.dispatcher.extender;
+
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+
+import org.amdatu.core.tenant.TenantEntity;
+import org.amdatu.core.tenant.TenantException;
+import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+
+public final class TenanHostNameDispatchExtender implements 
DispatchExtenderFilter {
+
+    public final static String TENANT_REQUESTCONTEXT_KEY = 
"org.amdatu.web.dispatcher.TENANT";
+    public final static String TENANT_PROPERTY_PARAMETER = "hostname";
+
+    private TenantManagementService m_tenantManagementService;
+
+    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 {
+
+        // TODO maybe another extender already resolved before us?
+        HttpServletRequest httpServletRequest = (HttpServletRequest) 
servletRequest;
+        String serverName = httpServletRequest.getServerName();
+        if (serverName != null) {
+            try {
+                Map<String, String> matchProperties = new HashMap<String, 
String>();
+                matchProperties.put(TENANT_PROPERTY_PARAMETER, serverName);
+                List<TenantEntity> tenants = 
m_tenantManagementService.getTenants(matchProperties);
+                if (tenants != null) {
+                    if (tenants.size() > 1) {
+                        // FIXME proper logging
+                        System.err.println("Hostname resolved to multiple 
tenants..... using first");
+                    }
+                    servletRequest.setAttribute(TENANT_REQUESTCONTEXT_KEY, 
tenants.get(0));
+                }
+            }
+            catch (TenantException e) {}
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+}

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
      (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenantParameterDispatchExtender.java
      Mon Jan 31 17:12:51 2011
@@ -35,6 +35,7 @@
         throws IOException,
         ServletException {
 
+        // TODO maybe another extender already resolved before us?
         HttpServletRequest httpServletRequest = (HttpServletRequest) 
servletRequest;
         String tenantId = 
httpServletRequest.getParameter(TENANT_REQUEST_PARAMETER);
         if (tenantId != null) {

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
 (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/service/DispatcherServiceImpl.java
 Mon Jan 31 17:12:51 2011
@@ -31,6 +31,7 @@
 import org.amdatu.web.dispatcher.context.HttpContextManager;
 import org.amdatu.web.dispatcher.dispatch.FilterPipeline;
 import org.amdatu.web.dispatcher.dispatch.ServletPipeline;
+import org.amdatu.web.dispatcher.extender.TenanHostNameDispatchExtender;
 import org.amdatu.web.dispatcher.extender.TenantParameterDispatchExtender;
 import org.amdatu.web.dispatcher.filter.DispatchInterceptFilter;
 import org.amdatu.web.dispatcher.handler.FilterHandler;
@@ -78,12 +79,20 @@
         m_filterHandlerRegistry = new FilterHandlerRegistry(this);
         HandlerServletContext extServletContextWrapper =
             new HandlerServletContext(m_extServletContext, new 
DefaultHttpContext(m_bundleContext.getBundle()));
+
+        TenanHostNameDispatchExtender the = new 
TenanHostNameDispatchExtender();
+        the.setTenentManagementService(m_tenantManagementService);
+        FilterHandler theHandler =
+            new FilterHandler(m_filterHandlerRegistry, 
extServletContextWrapper, the, ".*", 0, null);
+        theHandler.setInitParams(null);
+        m_filterHandlerRegistry.addDispatchExtenderFilter(theHandler);
+
         TenantParameterDispatchExtender tde = new 
TenantParameterDispatchExtender();
         tde.setTenentManagementService(m_tenantManagementService);
-        FilterHandler handler =
+        FilterHandler tdeHandler =
             new FilterHandler(m_filterHandlerRegistry, 
extServletContextWrapper, tde, ".*", 0, null);
-        handler.setInitParams(null);
-        m_filterHandlerRegistry.addDispatchExtenderFilter(handler);
+        tdeHandler.setInitParams(null);
+        m_filterHandlerRegistry.addDispatchExtenderFilter(tdeHandler);
 
         m_httpContextManager = new HttpContextManager();
 

Reply via email to