Author: bdekruijff at gmail.com
Date: Thu Feb  3 15:42:57 2011
New Revision: 762

Log:
AMDATU-282 split off tenantresolvers to seperate modules

Added:
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/   (props 
changed)
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/pom.xml
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/   (props 
changed)
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/pom.xml
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/
   branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/
   
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
Removed:
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/
Modified:
   branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/   (props 
changed)
   branches/amdatu-dispatcher/amdatu-release/pom.xml
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/matcher/TenantAwareServletMatcher.java
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
   branches/amdatu-dispatcher/amdatu-web/pom.xml
   branches/amdatu-dispatcher/integration-tests/pom.xml
   
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/IntegrationTestBase.java
   
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/OAuthTestBase.java
   
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/RESTTestBase.java
   
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/util/Login.java
   branches/amdatu-dispatcher/src/main/resources/conf/amdatu-web.properties
   branches/amdatu-dispatcher/src/main/resources/conf/felix-config.properties

Modified: branches/amdatu-dispatcher/amdatu-release/pom.xml
==============================================================================
--- branches/amdatu-dispatcher/amdatu-release/pom.xml   (original)
+++ branches/amdatu-dispatcher/amdatu-release/pom.xml   Thu Feb  3 15:42:57 2011
@@ -285,6 +285,27 @@
     </dependency>
     <dependency>
       <groupId>org.amdatu.web</groupId>
+      <artifactId>tenantresolver-hostname</artifactId>
+      <version>${platform.version}</version>
+      <scope>runtime</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>tenantresolver-parameter</artifactId>
+      <version>${platform.version}</version>
+      <scope>runtime</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>dispatcher</artifactId>
+      <version>${platform.version}</version>
+      <scope>runtime</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
       <artifactId>resource</artifactId>
       <version>${platform.version}</version>
       <scope>runtime</scope>

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/matcher/TenantAwareServletMatcher.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/matcher/TenantAwareServletMatcher.java
     (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/matcher/TenantAwareServletMatcher.java
     Thu Feb  3 15:42:57 2011
@@ -20,17 +20,18 @@
 
 import org.amdatu.core.tenant.Tenant;
 import org.amdatu.web.dispatcher.DispatchServletMatcher;
-import org.amdatu.web.dispatcher.extender.TenantParameterDispatchExtender;
 import org.amdatu.web.dispatcher.handler.ServletHandler;
 
 public class TenantAwareServletMatcher implements DispatchServletMatcher {
 
+    public final static String TENANT_REQUESTCONTEXT_KEY = 
"org.amdatu.web.dispatcher.TENANT";
+
     public boolean matches(ServletHandler servletHandler, HttpServletRequest 
httpServletRequest) {
         if (servletHandler.getTenantId() == null || 
servletHandler.getTenantId() == "") {
             return true;
         }
         Tenant tenant =
-            (Tenant) 
httpServletRequest.getAttribute(TenantParameterDispatchExtender.TENANT_REQUESTCONTEXT_KEY);
+            (Tenant) 
httpServletRequest.getAttribute(TENANT_REQUESTCONTEXT_KEY);
         return (tenant != null && 
servletHandler.getTenantId().equals(tenant.getId()));
     }
 }

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
       (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/osgi/DispatcherServiceActivator.java
       Thu Feb  3 15:42:57 2011
@@ -22,17 +22,13 @@
 import javax.servlet.Filter;
 import javax.servlet.Servlet;
 
-import org.amdatu.core.tenant.TenantManagementService;
 import org.amdatu.web.dispatcher.DispatchExtenderFilter;
 import org.amdatu.web.dispatcher.DispatcherService;
-import org.amdatu.web.dispatcher.extender.TenanHostNameDispatchExtender;
-import org.amdatu.web.dispatcher.extender.TenantParameterDispatchExtender;
 import org.amdatu.web.dispatcher.service.DispatcherServiceImpl;
 import org.apache.felix.dm.DependencyActivatorBase;
 import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.http.api.ExtHttpService;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.Constants;
 import org.osgi.service.http.HttpContext;
 import org.osgi.service.log.LogService;
 
@@ -69,30 +65,6 @@
                             .setCallbacks("addFilter", "removeFilter")
                             .setRequired(false))
                 );
-
-        Dictionary<String, Object> thProperties = new Hashtable<String, 
Object>();
-        thProperties.put(Constants.SERVICE_RANKING, 0);
-        thProperties.put(DispatcherService.PATTERN_KEY, ".*");
-        manager.add(
-                createComponent()
-                    .setInterface(DispatchExtenderFilter.class.getName(), 
thProperties)
-                    .setImplementation(TenanHostNameDispatchExtender.class)
-                    // Guards filter lifecycle
-                    
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
-                    
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
-                    
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
-
-        Dictionary<String, Object> tpProperties = new Hashtable<String, 
Object>();
-        tpProperties.put(Constants.SERVICE_RANKING, 0);
-        tpProperties.put(DispatcherService.PATTERN_KEY, ".*");
-        manager.add(
-                createComponent()
-                    .setInterface(DispatchExtenderFilter.class.getName(), 
tpProperties)
-                    .setImplementation(TenantParameterDispatchExtender.class)
-                    // Guards filter lifecycle
-                    
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
-                    
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
-                    
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
     }
 
     @Override

Modified: branches/amdatu-dispatcher/amdatu-web/pom.xml
==============================================================================
--- branches/amdatu-dispatcher/amdatu-web/pom.xml       (original)
+++ branches/amdatu-dispatcher/amdatu-web/pom.xml       Thu Feb  3 15:42:57 2011
@@ -41,6 +41,8 @@
 
   <modules>
     <module>dispatcher</module>
+    <module>tenantresolver-hostname</module>
+    <module>tenantresolver-parameter</module>
     <module>resource</module>
     <module>httpcontext</module>
     <module>jsp</module>

Added: branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/pom.xml
==============================================================================
--- (empty file)
+++ branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/pom.xml       
Thu Feb  3 15:42:57 2011
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.amdatu</groupId>
+               <artifactId>org.amdatu.web</artifactId>
+               <version>0.1.0-SNAPSHOT</version>
+       </parent>
+       <groupId>org.amdatu.web</groupId>
+       <artifactId>tenantresolver-hostname</artifactId>
+       <packaging>bundle</packaging>
+       <name>Amdatu Web - Tenant Hostname Resolver</name>
+       <description>Implementation of a Dispatcher ExtenderFilter that 
resolves a Tenant based on the request hostname</description>
+       <dependencies>
+               <dependency>
+                       <groupId>org.amdatu.core</groupId>
+                       <artifactId>tenant</artifactId>
+                       <scope>provided</scope>
+                       <type>bundle</type>
+                       <version>0.1.0-SNAPSHOT</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.amdatu.web</groupId>
+                       <artifactId>dispatcher</artifactId>
+                       <scope>provided</scope>
+                       <type>bundle</type>
+                       <version>0.1.0-SNAPSHOT</version>
+               </dependency>
+       </dependencies>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <configuration>
+                                       <instructions>
+                                               <Private-Package> 
org.amdatu.web.tenantresolver.hostname.*</Private-Package>
+                                               
<Bundle-Activator>org.amdatu.web.tenantresolver.hostname.osgi.HostnameTenantResolverActivator</Bundle-Activator>
+                                               
<Bundle-SymbolicName>org.amdatu.web.tenantresolver.hostname</Bundle-SymbolicName>
+                                               <Export-Package>
+                                                       
org.amdatu.web.tenantresolver.hostname
+                               </Export-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+</project>

Added: 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/osgi/HostnameTenantResolverActivator.java
        Thu Feb  3 15:42:57 2011
@@ -0,0 +1,53 @@
+/*
+    Copyright (C) 2010 Amdatu.org
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.web.tenantresolver.hostname.osgi;
+
+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.hostname.service.HostnameTenantResolverExtenderFilter;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.service.log.LogService;
+
+public final class HostnameTenantResolverActivator extends 
DependencyActivatorBase {
+
+    @Override
+    public void init(BundleContext context, DependencyManager manager) throws 
Exception {
+
+        Dictionary<String, Object> thProperties = new Hashtable<String, 
Object>();
+        thProperties.put(Constants.SERVICE_RANKING, 0);
+        thProperties.put(DispatcherService.PATTERN_KEY, ".*");
+        manager.add(
+                createComponent()
+                    .setInterface(DispatchExtenderFilter.class.getName(), 
thProperties)
+                    
.setImplementation(HostnameTenantResolverExtenderFilter.class)
+                    // Guards filter lifecycle
+                    
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
+                    
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
+                    
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
+    }
+
+    @Override
+    public void destroy(BundleContext context, DependencyManager manager) 
throws Exception {
+    }
+}

Added: 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-hostname/src/main/java/org/amdatu/web/tenantresolver/hostname/service/HostnameTenantResolverExtenderFilter.java
        Thu Feb  3 15:42:57 2011
@@ -0,0 +1,78 @@
+/*
+    Copyright (C) 2010 Amdatu.org
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.web.tenantresolver.hostname.service;
+
+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.Tenant;
+import org.amdatu.core.tenant.TenantEntity;
+import org.amdatu.core.tenant.TenantException;
+import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+import org.osgi.service.log.LogService;
+
+public final class HostnameTenantResolverExtenderFilter implements 
DispatchExtenderFilter {
+
+    public final static String TENANT_REQUESTCONTEXT_KEY = 
"org.amdatu.web.dispatcher.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 serverName = httpServletRequest.getServerName();
+        if (serverName != null) {
+            try {
+                Map<String, String> matchProperties = new HashMap<String, 
String>();
+                matchProperties.put(Tenant.HOSTNAME_PROPERTY, serverName);
+                List<TenantEntity> tenants = 
m_tenantManagementService.getTenants(matchProperties);
+                if (tenants != null && tenants.size() > 0) {
+                    if (tenants.size() > 1) {
+                        m_logService.log(LogService.LOG_WARNING,
+                            "Hostname resolved to multiple tenants..... using 
first");
+                    }
+                    servletRequest.setAttribute(TENANT_REQUESTCONTEXT_KEY, 
tenants.get(0));
+                }
+            }
+            catch (TenantException e) {}
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+}

Added: branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/pom.xml
==============================================================================
--- (empty file)
+++ branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/pom.xml      
Thu Feb  3 15:42:57 2011
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/maven-v4_0_0.xsd";>
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.amdatu</groupId>
+               <artifactId>org.amdatu.web</artifactId>
+               <version>0.1.0-SNAPSHOT</version>
+       </parent>
+       <groupId>org.amdatu.web</groupId>
+       <artifactId>tenantresolver-parameter</artifactId>
+       <packaging>bundle</packaging>
+       <name>Amdatu Web - Tenant Parameter Resolver</name>
+       <description>Implementation of a Dispatcher ExtenderFilter that 
resolves a Tenant based on the request parameter</description>
+       <dependencies>
+               <dependency>
+                       <groupId>org.amdatu.core</groupId>
+                       <artifactId>tenant</artifactId>
+                       <scope>provided</scope>
+                       <type>bundle</type>
+                       <version>0.1.0-SNAPSHOT</version>
+               </dependency>
+               <dependency>
+                       <groupId>org.amdatu.web</groupId>
+                       <artifactId>dispatcher</artifactId>
+                       <scope>provided</scope>
+                       <type>bundle</type>
+                       <version>0.1.0-SNAPSHOT</version>
+               </dependency>
+       </dependencies>
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.apache.felix</groupId>
+                               <artifactId>maven-bundle-plugin</artifactId>
+                               <configuration>
+                                       <instructions>
+                                               <Private-Package> 
org.amdatu.web.tenantresolver.parameter.*</Private-Package>
+                                               
<Bundle-Activator>org.amdatu.web.tenantresolver.parameter.osgi.ParameterTenantResolverActivator</Bundle-Activator>
+                                               
<Bundle-SymbolicName>org.amdatu.web.tenantresolver.parameter</Bundle-SymbolicName>
+                                               <Export-Package>
+                                                       
org.amdatu.web.tenantresolver.parameter
+                               </Export-Package>
+                                       </instructions>
+                               </configuration>
+                       </plugin>
+               </plugins>
+       </build>
+</project>

Added: 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/osgi/ParameterTenantResolverActivator.java
     Thu Feb  3 15:42:57 2011
@@ -0,0 +1,53 @@
+/*
+    Copyright (C) 2010 Amdatu.org
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.web.tenantresolver.parameter.osgi;
+
+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;
+import org.apache.felix.dm.DependencyActivatorBase;
+import org.apache.felix.dm.DependencyManager;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.service.log.LogService;
+
+public final class ParameterTenantResolverActivator extends 
DependencyActivatorBase {
+
+    @Override
+    public void init(BundleContext context, DependencyManager manager) throws 
Exception {
+
+        Dictionary<String, Object> thProperties = new Hashtable<String, 
Object>();
+        thProperties.put(Constants.SERVICE_RANKING, 0);
+        thProperties.put(DispatcherService.PATTERN_KEY, ".*");
+        manager.add(
+                createComponent()
+                    .setInterface(DispatchExtenderFilter.class.getName(), 
thProperties)
+                    
.setImplementation(ParameterTenantResolverExtenderFilter.class)
+                    // Guards filter lifecycle
+                    
.add(createServiceDependency().setService(DispatcherService.class).setRequired(true))
+                    
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true))
+                    
.add(createServiceDependency().setService(LogService.class).setRequired(true)));
+    }
+
+    @Override
+    public void destroy(BundleContext context, DependencyManager manager) 
throws Exception {
+    }
+}

Added: 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-web/tenantresolver-parameter/src/main/java/org/amdatu/web/tenantresolver/parameter/service/ParameterTenantResolverExtenderFilter.java
     Thu Feb  3 15:42:57 2011
@@ -0,0 +1,73 @@
+/*
+    Copyright (C) 2010 Amdatu.org
+
+    This program is free software: you can redistribute it and/or modify
+    it under the terms of the GNU General Public License as published by
+    the Free Software Foundation, either version 3 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+package org.amdatu.web.tenantresolver.parameter.service;
+
+import java.io.IOException;
+
+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.Tenant;
+import org.amdatu.core.tenant.TenantException;
+import org.amdatu.core.tenant.TenantManagementService;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+import org.osgi.service.log.LogService;
+
+public final class ParameterTenantResolverExtenderFilter implements 
DispatchExtenderFilter {
+
+    public final static String TENANT_REQUESTCONTEXT_KEY = 
"org.amdatu.web.dispatcher.TENANT";
+    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(TENANT_REQUESTCONTEXT_KEY, 
tenant);
+                }
+                else {
+                    m_logService.log(LogService.LOG_WARNING,
+                        "Tenant parameter did not resolve to a tenant..... " + 
tenantId);
+                }
+            }
+            catch (TenantException e) {}
+        }
+        filterChain.doFilter(servletRequest, servletResponse);
+    }
+}

Modified: branches/amdatu-dispatcher/integration-tests/pom.xml
==============================================================================
--- branches/amdatu-dispatcher/integration-tests/pom.xml        (original)
+++ branches/amdatu-dispatcher/integration-tests/pom.xml        Thu Feb  3 
15:42:57 2011
@@ -23,8 +23,8 @@
       <scope>test</scope>
     </dependency>
 
-    <!-- This is required to be first so that pax-exam classloader is not 
messed up with a newer version of felix
-      which would lead to java.lang.NoSuchMethodError: 
org.apache.felix.framework.Logger.<init>(I)V -->
+    <!-- This is required to be first so that pax-exam classloader is not 
messed up with a newer version of felix which would 
+      lead to java.lang.NoSuchMethodError: 
org.apache.felix.framework.Logger.<init>(I)V -->
 
     <dependency>
       <groupId>org.ops4j.pax.exam</groupId>
@@ -164,6 +164,20 @@
       <type>bundle</type>
     </dependency>
     <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>tenantresolver-hostname</artifactId>
+      <version>${platform.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>tenantresolver-parameter</artifactId>
+      <version>${platform.version}</version>
+      <scope>test</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
       <groupId>org.ops4j.pax.useradmin</groupId>
       <artifactId>pax-useradmin-service</artifactId>
       <version>${pax.useradmin.version}</version>
@@ -377,8 +391,7 @@
         </configuration>
       </plugin>
 
-      <!-- Enable the surefire plugin only in the integration-test
-        phase such that we can use Pax Exam for integration testing -->
+      <!-- Enable the surefire plugin only in the integration-test phase such 
that we can use Pax Exam for integration testing -->
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>

Modified: 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/IntegrationTestBase.java
==============================================================================
--- 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/IntegrationTestBase.java
        (original)
+++ 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/IntegrationTestBase.java
        Thu Feb  3 15:42:57 2011
@@ -306,6 +306,14 @@
         return 
mavenBundle().groupId("org.amdatu.web").artifactId("dispatcher").versionAsInProject();
     }
     
+    protected static MavenArtifactProvisionOption 
amdatuHostnameTenantResolver() {
+        return 
mavenBundle().groupId("org.amdatu.web").artifactId("tenantresolver-hostname").versionAsInProject();
+    }
+    
+    protected static MavenArtifactProvisionOption amdatuParameterResolver() {
+        return 
mavenBundle().groupId("org.amdatu.web").artifactId("tenantresolver-parameter").versionAsInProject();
+    }
+    
     protected static MavenArtifactProvisionOption amdatuJaxRs() {
         return 
mavenBundle().groupId("org.amdatu.web.rest").artifactId("jaxrs").versionAsInProject();
     }

Modified: 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/OAuthTestBase.java
==============================================================================
--- 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/OAuthTestBase.java
      (original)
+++ 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/OAuthTestBase.java
      Thu Feb  3 15:42:57 2011
@@ -115,6 +115,8 @@
                amdatuTenantUserAdminDecoratorService(),
             felixHttpServiceJetty(),
             amdatuDispatcher(),
+            amdatuHostnameTenantResolver(),
+            amdatuParameterResolver(),
             slingMime(),
             slingCommons(),
             commonsCodec(),

Modified: 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/RESTTestBase.java
==============================================================================
--- 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/RESTTestBase.java
       (original)
+++ 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/base/RESTTestBase.java
       Thu Feb  3 15:42:57 2011
@@ -71,6 +71,8 @@
                 amdatuTenantUserAdminDecoratorService(),
                 felixHttpServiceJetty(),
                 amdatuDispatcher(),
+                amdatuHostnameTenantResolver(),
+                amdatuParameterResolver(),
                 amdatuHttpContext(),
                 amdatuJaxRs(),
                 amdatuWink(),

Modified: 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/util/Login.java
==============================================================================
--- 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/util/Login.java
      (original)
+++ 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/util/Login.java
      Thu Feb  3 15:42:57 2011
@@ -27,10 +27,12 @@
             Assert.assertTrue("Login failed using Amdatu account '" + username 
+ "', response code=" + status,
                 status == HttpStatus.SC_OK);
             Header cookieHeader = postMethod.getResponseHeader("Set-Cookie");
-            HeaderElement[] headerElements = cookieHeader.getElements();
-            for (HeaderElement headerElement : headerElements) {
-                if 
(TokenProvider.TOKEN_COOKIE_NAME.equalsIgnoreCase(headerElement.getName())) {
-                    return headerElement;
+            if (cookieHeader != null) {
+                HeaderElement[] headerElements = cookieHeader.getElements();
+                for (HeaderElement headerElement : headerElements) {
+                    if 
(TokenProvider.TOKEN_COOKIE_NAME.equalsIgnoreCase(headerElement.getName())) {
+                        return headerElement;
+                    }
                 }
             }
         }

Modified: 
branches/amdatu-dispatcher/src/main/resources/conf/amdatu-web.properties
==============================================================================
--- branches/amdatu-dispatcher/src/main/resources/conf/amdatu-web.properties    
(original)
+++ branches/amdatu-dispatcher/src/main/resources/conf/amdatu-web.properties    
Thu Feb  3 15:42:57 2011
@@ -92,7 +92,6 @@
                     
reference:file:amdatu-system/org.osgi.core-${org.osgi.version}.jar \
                     
reference:file:amdatu-system/pax-useradmin-service-0.0.1-SNAPSHOT.jar \
                     
reference:file:amdatu-system/org.apache.felix.http.jetty-2.0.4.jar \
-                    
reference:file:amdatu-system/org.apache.felix.http.whiteboard-2.0.4.jar \
                     reference:file:amdatu-system/pax-swissbox-core-1.3.0.jar \
                     reference:file:amdatu-system/ops4j-base-lang-1.2.2.jar \
                     
reference:file:amdatu-system/org.apache.felix.scr-1.6.0.jar \
@@ -102,6 +101,9 @@
                     
reference:file:amdatu-core/org.amdatu.core.config.templates-0.1.0-SNAPSHOT.jar \
                     
reference:file:amdatu-core/org.amdatu.core.useradminstore-fs-0.1.0-SNAPSHOT.jar 
\
                     
reference:file:amdatu-application/org.amdatu.web.httpcontext-0.1.0-SNAPSHOT.jar 
\
+                               
reference:file:amdatu-application/org.amdatu.web.dispatcher-${platform.version}.jar
 \
+                               
reference:file:amdatu-application/org.amdatu.web.tenantresolver-hostname-${platform.version}.jar
 \
+                               
reference:file:amdatu-application/org.amdatu.web.tenantresolver-parameter-${platform.version}.jar
 \
                     
reference:file:amdatu-application/org.amdatu.web.jsp-0.1.0-SNAPSHOT.jar \
                     
reference:file:amdatu-application/org.amdatu.web.rest.jaxrs-0.1.0-SNAPSHOT.jar \
                     
reference:file:amdatu-application/org.amdatu.web.rest.wink-0.1.0-SNAPSHOT.jar

Modified: 
branches/amdatu-dispatcher/src/main/resources/conf/felix-config.properties
==============================================================================
--- branches/amdatu-dispatcher/src/main/resources/conf/felix-config.properties  
(original)
+++ branches/amdatu-dispatcher/src/main/resources/conf/felix-config.properties  
Thu Feb  3 15:42:57 2011
@@ -118,6 +118,8 @@
           
reference:file:amdatu-application/org.amdatu.authentication.tokenstore.mem-${platform.version}.jar
 \
           
reference:file:amdatu-application/org.amdatu.web.httpcontext-${platform.version}.jar
 \
           
reference:file:amdatu-application/org.amdatu.web.dispatcher-${platform.version}.jar
 \
+          
reference:file:amdatu-application/org.amdatu.web.tenantresolver-hostname-${platform.version}.jar
 \
+          
reference:file:amdatu-application/org.amdatu.web.tenantresolver-parameter-${platform.version}.jar
 \
           
reference:file:amdatu-application/org.amdatu.web.resource-${platform.version}.jar
 \
           
reference:file:amdatu-application/org.amdatu.web.jsp-${platform.version}.jar \
           
reference:file:amdatu-application/org.amdatu.opensocial.dashboard-${platform.version}.jar
 \

Reply via email to