Author: ivol37 at gmail.com
Date: Thu Feb  3 11:01:16 2011
New Revision: 752

Log:
[AMDATU-84] Refactored tenant resolvers to use the DispatchExtenderFilter. Also 
refactored tenant_id, tenant_name and hostname properties to all use the 
contants available on the Tenant interface.


Added:
   
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/TenantHostnameDispatchExtenderFilter.java
   
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/TenantHostnameDispatchExtenderFilter.java
      - copied, changed from r750, 
/branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/TenantDispatchExtender.java
Removed:
   
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/TenantDispatchExtender.java
Modified:
   
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
   
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
   
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
   
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
   
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/UsersResource.java
   
branches/amdatu-dispatcher/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/service/CassandraStorageProviderRegistrationServiceImpl.java
   
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/Tenant.java
   
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/service/TenantManagementServiceImpl.java
   
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
   
branches/amdatu-dispatcher/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
   
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
   
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
   branches/amdatu-dispatcher/amdatu-opensocial/profile/pom.xml
   
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/osgi/Activator.java
   
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/PersonServiceImpl.java
   branches/amdatu-dispatcher/amdatu-opensocial/shindig/pom.xml
   
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
   
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/CassandraAppDataServiceStore.java
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
   
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/ServletHandlerRegistry.java
   
branches/amdatu-dispatcher/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkRegistrationServiceImpl.java
   
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/tests/TenantManagementServiceTest.java

Modified: 
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
      (original)
+++ 
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/osgi/Activator.java
      Thu Feb  3 11:01:16 2011
@@ -47,7 +47,7 @@
     public void initWithDependencies(BundleContext context, DependencyManager 
manager) throws Exception {
        // The login service is tenant aware. This filter ensures that these 
tenant aware services
        // only adapt UserAdmin services which are also tenant aware.
-       String filter = "(&(" + Tenant.SERVICE_PREFIX + "id=*)(" + 
Constants.OBJECTCLASS
+       String filter = "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=*)(" + 
Constants.OBJECTCLASS
         + "=" + UserAdmin.class.getName() + "))";
        
         // Create and register the authorization service.

Modified: 
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
    (original)
+++ 
branches/amdatu-dispatcher/amdatu-authorization/login-service/src/main/java/org/amdatu/authorization/login/service/service/LoginServiceImpl.java
    Thu Feb  3 11:01:16 2011
@@ -102,11 +102,11 @@
                m_httpContextComponent = 
m_httpContextServiceFactory.create(m_bundleContext, this);
 
                // Retrieve the tenant
-               String tenantId = (String) 
component.getServiceProperties().get("tenant_id");
+               String tenantId = (String) 
component.getServiceProperties().get(Tenant.TENANT_ID_SERVICEPROPERTY);
                m_tenant = m_tenantManagementService.getTenantById(tenantId);
                
                // Create a service dependency on the token provider for 'our' 
tenant
-               String tenantFilter = "(&(" + Tenant.SERVICE_PREFIX + "id=" + 
tenantId + ")(" + Constants.OBJECTCLASS
+               String tenantFilter = "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY 
+ "=" + tenantId + ")(" + Constants.OBJECTCLASS
                + "=" + TokenProvider.class.getName() + "))";
                m_component.add(m_dependencyManager.createServiceDependency()
                                .setService(TokenProvider.class, 
tenantFilter).setRequired(true).setInstanceBound(true));

Modified: 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
    (original)
+++ 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/osgi/Activator.java
    Thu Feb  3 11:01:16 2011
@@ -45,7 +45,7 @@
     public void initWithDependencies(BundleContext context, DependencyManager 
manager) throws Exception {
        // These REST services are tenant aware. This filter ensures that these 
tenant aware services
        // only adapt UserAdmin services which are also tenant aware.
-       String filter = "(&(" + Tenant.SERVICE_PREFIX + "id=*)(" + 
Constants.OBJECTCLASS
+       String filter = "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + "=*)(" + 
Constants.OBJECTCLASS
         + "=" + UserAdmin.class.getName() + "))";
        
         // Create the users resource service and register it as REST service

Modified: 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
      (original)
+++ 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/ResourceBase.java
      Thu Feb  3 11:01:16 2011
@@ -53,7 +53,7 @@
 abstract class ResourceBase implements RESTService {
     // FIXME: Temporary fix for AMDATU-81
     private static final String DEFAULT_ADMIN_GROUP = "Administrators";
-    
+
     // Service dependencies injected by the depedency manager
     protected volatile LogService m_logService;
     protected volatile UserAdmin m_userAdmin;
@@ -69,14 +69,14 @@
         m_cacheControl = new CacheControl();
         m_cacheControl.setNoCache(true);
     }
-    
+
     public void init(Component component) throws TenantException {
        // Retrieve the tenant
-       String tenantId = (String) 
component.getServiceProperties().get("tenant_id");
+       String tenantId = (String) 
component.getServiceProperties().get(Tenant.TENANT_ID_SERVICEPROPERTY);
        m_tenant = m_tenantManagementService.getTenantById(tenantId);
-       
+
        // Create a service dependency on the token provider for 'our' tenant
-               String tenantFilter = "(&(" + Tenant.SERVICE_PREFIX + "id=" + 
tenantId + ")(" + Constants.OBJECTCLASS
+               String tenantFilter = "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY 
+ "=" + tenantId + ")(" + Constants.OBJECTCLASS
                + "=" + TokenProvider.class.getName() + "))";
                m_component.add(m_dependencyManager.createServiceDependency()
                                .setService(TokenProvider.class, 
tenantFilter).setRequired(true).setInstanceBound(true));
@@ -84,7 +84,7 @@
 
     /**
      * Returns the roles (users or groups) for the specified filter options.
-     * 
+     *
      * @param filter the filter to pass to UserAdmin
      * @param sortOrder The sort order ('ascending' or 'descending')
      * @param startIndex The startindex
@@ -162,7 +162,7 @@
                 getBaseUrl() + "?startIndex=" + paging.pageStartIndex + 
"&endIndex=" + paging.pageEndIndex
                 + "&maxResults=" + maxResults;
             result.addLink(new 
AtomSyndicationLink().setHref(url).setRel("Alternate").setType("application/json"));
-            
+
             // Start
             url =
                 getBaseUrl() + "?startIndex=" + paging.firstStartIndex + 
"&endIndex=" + paging.firstEndIndex
@@ -310,7 +310,7 @@
 
         /**
          * Calculate paging
-         * 
+         *
          * @param currentStartIndex The requested start index to display
          * @param pageResults The amount of results in the current selection
          * @param maxResults The maximum amount of results displayed on one 
page
@@ -363,10 +363,10 @@
     }
 
     protected abstract String getBaseUrl();
-    
+
     // FIXME: Temporary fix for AMDATU-81. Until AMDATU-230 has been fixed we 
need to make a
     // quick fix, not having any form of authorization is simply not 
acceptable. For now
-    // we check if the user is logged in and in the "Administrators" role. 
This role is 
+    // we check if the user is logged in and in the "Administrators" role. 
This role is
     // hard coded.
     protected boolean isAuthorized(HttpServletRequest request) {
         String token = m_tokenProvider.getTokenFromRequest(request);
@@ -381,7 +381,7 @@
                             return 
m_userAdmin.getAuthorization(user).hasRole(DEFAULT_ADMIN_GROUP);
                         }
                     }
-                }               
+                }
             }
             catch (TokenProviderException e) {
                 // Ignore invalid tokens
@@ -392,7 +392,7 @@
         }
         return false;
     }
-    
+
     public void fix() {
         Role role = m_userAdmin.getRole("Administrator");
         Group group = (Group) m_userAdmin.getRole(DEFAULT_ADMIN_GROUP);

Modified: 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/UsersResource.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/UsersResource.java
     (original)
+++ 
branches/amdatu-dispatcher/amdatu-authorization/useradmin-rest/src/main/java/org/amdatu/authorization/useradmin/rest/service/UsersResource.java
     Thu Feb  3 11:01:16 2011
@@ -58,8 +58,8 @@
     @Produces({MediaType.TEXT_PLAIN})
     @Path("status")
     public String status() {
-        String tenantId = (String) 
m_component.getServiceProperties().get(Tenant.SERVICE_PREFIX + "id");
-        String tenantName = (String) 
m_component.getServiceProperties().get(Tenant.SERVICE_PREFIX + "name");
+        String tenantId = (String) 
m_component.getServiceProperties().get(Tenant.TENANT_ID_SERVICEPROPERTY);
+        String tenantName = (String) 
m_component.getServiceProperties().get(Tenant.TENANT_NAME_SERVICEPROPERTY);
         return "UserAdmin Users management for tenant '" + tenantName + " (" + 
tenantId + ")' service online";
     }
 

Modified: 
branches/amdatu-dispatcher/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/service/CassandraStorageProviderRegistrationServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/service/CassandraStorageProviderRegistrationServiceImpl.java
 (original)
+++ 
branches/amdatu-dispatcher/amdatu-cassandra/cassandra-useradminstore/src/main/java/org/amdatu/cassandra/useradminstore/service/CassandraStorageProviderRegistrationServiceImpl.java
 Thu Feb  3 11:01:16 2011
@@ -30,6 +30,14 @@
 import org.osgi.framework.Constants;
 import org.osgi.service.log.LogService;
 
+/**
+ * This tenant aware service is responsible for registration of tenant aware 
StorageProvider services. It register a
+ * StorageProvider for each available tenant (it is an adaptor of tenant 
itself) but more importantly, it defines
+ * the proper service dependencies; availability of the Role ColumnFamily in 
the keyspace associated with the tenant
+ * and the Cassandra Persistence Manager for the keyspace associated with the 
tenant.
+ * 
+ * @author ivol
+ */
 public class CassandraStorageProviderRegistrationServiceImpl {
     // Service dependencies injected by the depedency manager
     private volatile DependencyManager m_dependencyManager;
@@ -56,7 +64,7 @@
             Hashtable<String, Object> properties = new Hashtable<String, 
Object>();
             properties.put(UserAdminConstants.STORAGEPROVIDER_TYPE, 
"Cassandra_" + m_tenant.getId());
             properties.put(Constants.SERVICE_RANKING, 10);
-            properties.put(Tenant.SERVICE_PREFIX + "id", m_tenant.getId());
+            properties.put(Tenant.TENANT_ID_SERVICEPROPERTY, m_tenant.getId());
             m_dependencyManager.add(m_dependencyManager.createComponent()
                 .setInterface(new String[]{StorageProvider.class.getName()}, 
properties)
                 .setImplementation(CassandraStorageProvider.class)
@@ -65,11 +73,11 @@
                 
.add(m_dependencyManager.createServiceDependency().setService(ColumnFamilyAvailable.class,
 roleFilter).setRequired(true))
                 
.add(m_dependencyManager.createServiceDependency().setService(CassandraDaemonService.class).setRequired(true)));
 
-            m_logService.log(LogService.LOG_INFO, "Cassandra useradmin storage 
provider started successfully for tenant  '" + m_tenant.getId() + "'");
+            m_logService.log(LogService.LOG_INFO, "Cassandra UserAdmin storage 
provider started successfully for tenant  '" + m_tenant.getId() + "'");
         } catch (TException e) {
-            m_logService.log(LogService.LOG_ERROR, "Could not start cassandra 
useradmin storage provider for tenant '" + m_tenant.getId() + "'", e);
+            m_logService.log(LogService.LOG_ERROR, "Could not start Cassandra 
UserAdmin storage provider for tenant '" + m_tenant.getId() + "'", e);
         } catch (InvalidRequestException e) {
-            m_logService.log(LogService.LOG_ERROR, "Could not start cassandra 
useradmin storage provider for tenant '" + m_tenant.getId() + "'", e);
+            m_logService.log(LogService.LOG_ERROR, "Could not start Cassandra 
UserAdmin storage provider for tenant '" + m_tenant.getId() + "'", e);
         }
     }
 }

Modified: 
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/Tenant.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/Tenant.java
      (original)
+++ 
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/Tenant.java
      Thu Feb  3 11:01:16 2011
@@ -33,9 +33,34 @@
  */
 public interface Tenant {
     /**
-     * All properties from the
+     * Service property with the id of the tenant available on each Tenant 
service. When a tenant is registered as
+     * a service, this property will always be set on this service. It can be 
retrieved from the service reference by
+     * using ref.getProperty(TENANT_ID_SERVICEPROPERTY).
+     * If a service dependency is defined
      */
-    final String SERVICE_PREFIX = "tenant_";
+    final String TENANT_ID_SERVICEPROPERTY = "tenant_id";
+    
+    /**
+     * Service property with the name of the tenant available on each Tenant 
service. When a tenant is registered as
+     * a service, this property will always be set on this service. It can be 
retrieved from the service reference by
+     * using ref.getProperty(TENANT_NAME_SERVICEPROPERTY). 
+     */
+    final String TENANT_NAME_SERVICEPROPERTY = "tenant_name";
+    
+    /**
+     * Service property containing any property contained by the properties 
map of the tenant available on each Tenant 
+     * service. When a tenant is registered as a service, all properties 
available in the properties map (see getProperties)
+     * are set as service property with key [TENANT_SERVICEPROPERTY][property 
name]. It can be retrieved from the service
+     * reference by using ref.getProperty(TENANT_SERVICEPROPERTY + "[property 
name]"). 
+     */
+    final String TENANT_SERVICEPROPERTY = "tenant_property_";
+    
+    /**
+     * Default property used by the platform to associate a hostname with a 
Tenant. If you create a tenant in a multi-tenant
+     * environment and want to make use of amdatu-web bundles, be sure to set 
this property on your tenant such that
+     * the tenant resolvers in amdatu-web can map the servername of a http 
request to the corresponding tenant.
+     */
+    final String HOSTNAME_PROPERTY = "hostname";
 
     /**
      * The unique ID for this tenant.

Modified: 
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/service/TenantManagementServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/service/TenantManagementServiceImpl.java
 (original)
+++ 
branches/amdatu-dispatcher/amdatu-core/tenant/src/main/java/org/amdatu/core/tenant/service/TenantManagementServiceImpl.java
 Thu Feb  3 11:01:16 2011
@@ -243,11 +243,10 @@
                Properties properties = new Properties();
                Map<String, String> tenantProperties = tenant.getProperties();
                for (Map.Entry<String, String> entry : 
tenantProperties.entrySet()) {
-                       properties.put(Tenant.SERVICE_PREFIX + entry.getKey(), 
entry.getValue());
+                       properties.put(Tenant.TENANT_SERVICEPROPERTY + 
entry.getKey(), entry.getValue());
                }
-               properties.put(Tenant.SERVICE_PREFIX + "id", tenant.getId());
-               properties.put(Tenant.SERVICE_PREFIX + "name", 
tenant.getName());
-
+               properties.put(Tenant.TENANT_ID_SERVICEPROPERTY, 
tenant.getId());
+               properties.put(Tenant.TENANT_NAME_SERVICEPROPERTY, 
tenant.getName());
                return properties;
        }
 

Modified: 
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
        (original)
+++ 
branches/amdatu-dispatcher/amdatu-core/tenantuseradmindecorator/src/main/java/org/amdatu/core/tenantuseradmindecorator/service/TenantUserAdminDecorator.java
        Thu Feb  3 11:01:16 2011
@@ -63,8 +63,8 @@
             // this property.
             String tenantId = pid.substring(pid.lastIndexOf("_") + 1);
             m_tenant = m_tenantManagementService.getTenantById(tenantId);
-            properties.put(Tenant.SERVICE_PREFIX + "id", m_tenant.getId());
-            properties.put(Tenant.SERVICE_PREFIX + "name", m_tenant.getName());
+            properties.put(Tenant.TENANT_ID_SERVICEPROPERTY, m_tenant.getId());
+            properties.put(Tenant.TENANT_NAME_SERVICEPROPERTY, 
m_tenant.getName());
             component.setServiceProperties(properties);
             m_logService.log(LogService.LOG_INFO, "Decorated UserAdmin for pid 
'" + pid + "' with tenant '" + m_tenant.getId() + "'");
         }

Modified: 
branches/amdatu-dispatcher/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
    (original)
+++ 
branches/amdatu-dispatcher/amdatu-core/useradminstore-fs/src/main/java/org/amdatu/core/useradminstore/fs/service/FSUserAdminStorageProvider.java
    Thu Feb  3 11:01:16 2011
@@ -63,7 +63,7 @@
         
         Dictionary properties = m_component.getServiceProperties();
         properties.put(UserAdminConstants.STORAGEPROVIDER_TYPE, "FS_" + 
m_tenant.getId());
-        properties.put(Tenant.SERVICE_PREFIX + "id", m_tenant.getId());
+        properties.put(Tenant.TENANT_ID_SERVICEPROPERTY, m_tenant.getId());
         m_component.setServiceProperties(properties);
         
        File dataDirectory = new File(m_dataDirectoryName);

Modified: 
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
      (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/osgi/Activator.java
      Thu Feb  3 11:01:16 2011
@@ -50,7 +50,7 @@
     public void initWithDependencies(BundleContext context, DependencyManager 
manager) throws Exception {
        // This REST service is tenant aware. This filter ensures that these 
tenant aware services
        // only adapt UserAdmin services which are also tenant aware.
-       String userAdminfilter = "(&(" + Tenant.SERVICE_PREFIX + "id=*)(" + 
Constants.OBJECTCLASS
+       String userAdminfilter = "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY + 
"=*)(" + Constants.OBJECTCLASS
         + "=" + UserAdmin.class.getName() + "))";
        
         // Create and register the gadget management service.

Modified: 
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
 (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/gadgetmanagement/src/main/java/org/amdatu/opensocial/gadgetmanagement/service/GadgetManagementServiceImpl.java
 Thu Feb  3 11:01:16 2011
@@ -138,12 +138,12 @@
         m_httpContextComponent = 
m_httpContextFactoryService.create(m_bundleContext, this);
 
        // Create a service dependency on the token provider for 'our' tenant
-        String tenantId = (String) 
m_component.getServiceProperties().get("tenant_id");
-               String tenantFilter = "(&(" + Tenant.SERVICE_PREFIX + "id=" + 
tenantId + ")(" + Constants.OBJECTCLASS
+        String tenantId = (String) 
m_component.getServiceProperties().get(Tenant.TENANT_ID_SERVICEPROPERTY);
+               String tenantFilter = "(&(" + Tenant.TENANT_ID_SERVICEPROPERTY 
+ "=" + tenantId + ")(" + Constants.OBJECTCLASS
                + "=" + TokenProvider.class.getName() + "))";
                m_component.add(m_dependencyManager.createServiceDependency()
                                .setService(TokenProvider.class, 
tenantFilter).setRequired(true).setInstanceBound(true));
-               
+
         m_logService.log(LogService.LOG_INFO, getClass().getName() + " service 
initialized");
     }
 

Modified: branches/amdatu-dispatcher/amdatu-opensocial/profile/pom.xml
==============================================================================
--- branches/amdatu-dispatcher/amdatu-opensocial/profile/pom.xml        
(original)
+++ branches/amdatu-dispatcher/amdatu-opensocial/profile/pom.xml        Thu Feb 
 3 11:01:16 2011
@@ -12,7 +12,7 @@
   <packaging>bundle</packaging>
   <name>Amdatu Open Social - Profile Service</name>
   <description>Provides a profile service on top of the OpenSocial 
services</description>
-  
+
   <dependencies>
     <dependency>
       <groupId>org.amdatu.opensocial</groupId>
@@ -31,9 +31,23 @@
       <artifactId>service</artifactId>
       <scope>provided</scope>
       <type>bundle</type>
-    </dependency>    
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>dispatcher</artifactId>
+      <version>${platform.version}</version>
+      <scope>provided</scope>
+      <type>bundle</type>
+    </dependency>
+    <dependency>
+      <groupId>org.amdatu.core</groupId>
+      <artifactId>tenant</artifactId>
+      <version>${platform.version}</version>
+      <scope>provided</scope>
+      <type>bundle</type>
+    </dependency>
   </dependencies>
-  
+
   <build>
     <plugins>
       <plugin>
@@ -51,5 +65,5 @@
       </plugin>
 
     </plugins>
-  </build> 
+  </build>
 </project>

Modified: 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/osgi/Activator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/osgi/Activator.java
        (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/osgi/Activator.java
        Thu Feb  3 11:01:16 2011
@@ -16,14 +16,22 @@
  */
 package org.amdatu.opensocial.profile.osgi;
 
+import java.util.Dictionary;
+import java.util.Hashtable;
+
 import org.amdatu.cassandra.listener.ColumnFamilyAvailable;
 import org.amdatu.cassandra.listener.ColumnFamilyProvider;
+import org.amdatu.core.tenant.TenantManagementService;
 import org.amdatu.opensocial.profile.PersonService;
 import org.amdatu.opensocial.profile.service.FriendColumnFamilyProvider;
 import org.amdatu.opensocial.profile.service.PersonServiceImpl;
+import 
org.amdatu.opensocial.profile.service.TenantHostnameDispatchExtenderFilter;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+import org.amdatu.web.dispatcher.DispatcherService;
 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 class Activator extends DependencyActivatorBase {
@@ -44,6 +52,16 @@
                 .setInterface(new String[]{PersonService.class.getName(), 
org.apache.shindig.social.opensocial.spi.PersonService.class.getName()}, null)
                 
.add(createServiceDependency().setService(LogService.class).setRequired(true))
                 
.add(createServiceDependency().setService(ColumnFamilyAvailable.class, 
filter).setRequired(true)));
+        
+        // Register the dispatch extender filter, used to resolve tenants
+        Dictionary<String, Object> properties = new Hashtable<String, 
Object>();
+        properties.put(Constants.SERVICE_RANKING, 0);
+        properties.put(DispatcherService.PATTERN_KEY, ".*");
+        manager.add(
+                createComponent()
+                    .setInterface(DispatchExtenderFilter.class.getName(), 
properties)
+                    
.setImplementation(TenantHostnameDispatchExtenderFilter.class)
+                    
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true)));
        
     }
     
     @Override

Modified: 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/PersonServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/PersonServiceImpl.java
     (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/PersonServiceImpl.java
     Thu Feb  3 11:01:16 2011
@@ -30,7 +30,6 @@
 
 import org.amdatu.authorization.login.service.LoginService;
 import org.amdatu.opensocial.profile.PersonService;
-import org.amdatu.opensocial.shindig.TenantDispatchExtender;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.common.util.ImmediateFuture;
 import org.apache.shindig.protocol.ProtocolException;
@@ -47,7 +46,7 @@
 import org.osgi.service.useradmin.User;
 
 /**
- * Implementation of the person service.
+ * Implementation of the person service. The person service itself is not 
tenant aware
  * @author ivol
  */
 public class PersonServiceImpl implements PersonService {
@@ -92,7 +91,7 @@
         List<Person> result = new ArrayList<Person>();
         try {
             // First retrieve all Users
-            Role[] allRoles = 
TenantDispatchExtender.getUserAdmin().getRoles(null);
+            Role[] allRoles = 
TenantHostnameDispatchExtenderFilter.getUserAdmin().getRoles(null);
             for (Role role : allRoles) {
                 if (role.getType() == Role.USER) {
                     Object person = 
role.getProperties().get(PersonService.OPEN_SOCIAL_PERSON_PROPERTIES_KEY);
@@ -135,7 +134,7 @@
     private User getUser(String personId) {
         // Retrieved all persons that match the specified profile.
         try {
-                       return 
TenantDispatchExtender.getUserAdmin().getUser(LoginService.USER_NAME_CREDENTIAL_KEY,
 personId);
+                       return 
TenantHostnameDispatchExtenderFilter.getUserAdmin().getUser(LoginService.USER_NAME_CREDENTIAL_KEY,
 personId);
                } catch (InvalidSyntaxException e) {
                        m_logService.log(LogService.LOG_ERROR, "Could not 
retrieve user for person '" + personId + "'.", e);
                        return null;

Added: 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/TenantHostnameDispatchExtenderFilter.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/profile/src/main/java/org/amdatu/opensocial/profile/service/TenantHostnameDispatchExtenderFilter.java
  Thu Feb  3 11:01:16 2011
@@ -0,0 +1,111 @@
+/*
+    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.opensocial.profile.service;
+
+import java.io.IOException;
+import java.util.List;
+
+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.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.useradmin.UserAdmin;
+
+/**
+ * This tenant dispatch extender filter is registered on .* and captures all 
HTTP requests to resolve the
+ * tenant from the hostname of the request. It stores the tenant for the 
lifetime of that request on a 
+ * ThreadLocal so that the PersonServiceImpl can retrieve the tenant from this 
ThreadLocal. Note that 
+ * the PersonServiceImpl is not tenant aware, nor does it have access to the 
HTTP request.
+ * 
+ * @author ivol
+ */
+public class TenantHostnameDispatchExtenderFilter implements 
DispatchExtenderFilter {
+       // Service dependencies, injected by the framework
+       private volatile TenantManagementService m_tenantManagementService;
+       private static volatile BundleContext m_bundleContext;
+
+       // Tenant context information is bound to a ThreadLocal variable.
+       private static ThreadLocal<Tenant> m_properties = null;
+
+       public void init(FilterConfig filterConfig) throws ServletException {
+               // Create the threadlocal
+               m_properties = new ThreadLocal<Tenant>();
+       }
+
+       public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException {
+               HttpServletRequest httpServletRequest = (HttpServletRequest) 
request;
+               String serverName = httpServletRequest.getServerName();
+               if (serverName != null) {
+                       try {
+                               List<TenantEntity> tenants = 
m_tenantManagementService.getTenants();
+                               for (TenantEntity tenant : tenants) {
+                                       if 
(serverName.equals(tenant.getProperties().get(Tenant.HOSTNAME_PROPERTY))) {
+                                               // The servername of the 
request matches the hostname of this tenant so
+                                               // set the tenant on the 
threadlocal variable
+                                               m_properties.set(tenant);
+                                       }       
+                               }
+                       }
+                       catch (TenantException e) {}
+               }
+
+               chain.doFilter(request, response);
+
+               // Set the tenant to null
+               m_properties.set(null);
+       }
+
+       public void destroy() {
+               // Destroy the threadlocal
+               m_properties = null;
+       }
+
+       /**
+        * Returns the tenant on the ThreadLocal.
+        * @return the current tenant
+        */
+       public static Tenant getTenant() {
+               return m_properties.get();
+       }
+
+       /**
+        * Returns the UserAdmin service that is associated with the current 
tenant.
+        * @return the UserAdmin service that is associated with the current 
tenant.
+        * @throws InvalidSyntaxException In case the UserAdmin service 
references could not be retrieved.
+        */
+       public static UserAdmin getUserAdmin() throws InvalidSyntaxException {
+               Tenant tenant = getTenant();
+               ServiceReference[] refs = 
m_bundleContext.getAllServiceReferences(UserAdmin.class.getName(), null);
+               for (ServiceReference ref : refs) {
+                       if 
(tenant.getId().equals(ref.getProperty(Tenant.TENANT_ID_SERVICEPROPERTY))) {
+                               return (UserAdmin) 
m_bundleContext.getService(ref);
+                       }
+               }
+               return null;
+       }
+}

Modified: branches/amdatu-dispatcher/amdatu-opensocial/shindig/pom.xml
==============================================================================
--- branches/amdatu-dispatcher/amdatu-opensocial/shindig/pom.xml        
(original)
+++ branches/amdatu-dispatcher/amdatu-opensocial/shindig/pom.xml        Thu Feb 
 3 11:01:16 2011
@@ -146,6 +146,13 @@
       <scope>provided</scope>
       <type>bundle</type>
     </dependency>
+    <dependency>
+      <groupId>org.amdatu.web</groupId>
+      <artifactId>dispatcher</artifactId>
+      <version>${platform.version}</version>
+      <scope>provided</scope>
+      <type>bundle</type>
+    </dependency>
   </dependencies>
 
   <build>

Modified: 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
        (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/osgi/Activator.java
        Thu Feb  3 11:01:16 2011
@@ -29,7 +29,6 @@
 import org.amdatu.opensocial.shindig.OAuthModule;
 import org.amdatu.opensocial.shindig.ShindigService;
 import org.amdatu.opensocial.shindig.SocialApiModule;
-import org.amdatu.opensocial.shindig.TenantDispatchExtender;
 import org.amdatu.opensocial.shindig.module.ConfigurationAdminGuiceModule;
 import org.amdatu.opensocial.shindig.module.OAuthModuleImpl;
 import org.amdatu.opensocial.shindig.module.SocialApiModuleImpl;
@@ -40,6 +39,9 @@
 import org.amdatu.opensocial.shindig.service.GuiceInjectorService;
 import org.amdatu.opensocial.shindig.service.GuiceInjectorServiceImpl;
 import org.amdatu.opensocial.shindig.service.ShindigRegistrationServiceImpl;
+import 
org.amdatu.opensocial.shindig.service.TenantHostnameDispatchExtenderFilter;
+import org.amdatu.web.dispatcher.DispatchExtenderFilter;
+import org.amdatu.web.dispatcher.DispatcherService;
 import org.amdatu.web.httpcontext.HttpContextServiceFactory;
 import org.amdatu.web.httpcontext.ResourceProvider;
 import org.apache.felix.dm.DependencyActivatorBase;
@@ -148,11 +150,10 @@
         Dictionary<String, Object> properties = new Hashtable<String, 
Object>();
         properties.put("pattern", ".*");
         properties.put(Constants.SERVICE_RANKING, 0);
-        properties.put("contextId", RESOURCE_ID);
         manager.add(
                 createComponent()
-                .setInterface(Filter.class.getName(), properties)
-                .setImplementation(TenantDispatchExtender.class)
+                .setInterface(DispatchExtenderFilter.class.getName(), 
properties)
+                .setImplementation(TenantHostnameDispatchExtenderFilter.class)
                 
.add(createServiceDependency().setService(TenantManagementService.class).setRequired(true)));
        
     }
 

Modified: 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/CassandraAppDataServiceStore.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/CassandraAppDataServiceStore.java
      (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/persistence/CassandraAppDataServiceStore.java
      Thu Feb  3 11:01:16 2011
@@ -26,7 +26,7 @@
 
 import org.amdatu.libraries.utilities.ConversionUtil;
 import org.amdatu.opensocial.shindig.OpenSocialConstants;
-import org.amdatu.opensocial.shindig.TenantDispatchExtender;
+import 
org.amdatu.opensocial.shindig.service.TenantHostnameDispatchExtenderFilter;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.common.util.ImmediateFuture;
 import org.apache.shindig.protocol.DataCollection;
@@ -42,7 +42,11 @@
 import com.google.common.collect.Maps;
 
 /**
- * This class is responsible for storage of the OpenSocial content called 
"AppData".
+ * This class is responsible for storage of the OpenSocial content called 
"AppData". It is not tenant aware itself, but it
+ * resolves users against a tenant aware UserAdmin. To resolve the proper 
tenant currently a Tenant dispatch extender filter
+ * is used to puts the current tenant on a ThreadLocal variable. This is a 
temporary solution, until a better solution is
+ * available.
+ * 
  * @author ivol
  */
 public class CassandraAppDataServiceStore implements AppDataService {
@@ -144,7 +148,7 @@
        private User getUser(UserId userId, SecurityToken token) throws 
InvalidSyntaxException {
                String id = userId.getUserId(token);
                if (!"".equals(userId.getUserId(token))) {
-                       Role user = 
TenantDispatchExtender.getUserAdmin().getRole(id);
+                       Role user = 
TenantHostnameDispatchExtenderFilter.getUserAdmin().getRole(id);
                        if (user != null) {
                                return (User) user;
                        }

Copied: 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/TenantHostnameDispatchExtenderFilter.java
 (from r750, 
/branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/TenantDispatchExtender.java)
==============================================================================
--- 
/branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/TenantDispatchExtender.java
       (original)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/service/TenantHostnameDispatchExtenderFilter.java
  Thu Feb  3 11:01:16 2011
@@ -1,9 +1,8 @@
-package org.amdatu.opensocial.shindig;
+package org.amdatu.opensocial.shindig.service;
 
 import java.io.IOException;
 import java.util.List;
 
-import javax.servlet.Filter;
 import javax.servlet.FilterChain;
 import javax.servlet.FilterConfig;
 import javax.servlet.ServletException;
@@ -15,55 +14,79 @@
 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.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
 import org.osgi.service.useradmin.UserAdmin;
 
-public class TenantDispatchExtender implements Filter {
+/**
+ * This tenant dispatch extender filter is registered on .* and captures all 
HTTP requests to resolve the
+ * tenant from the hostname of the request. It stores the tenant for the 
lifetime of that request on a 
+ * ThreadLocal so that the PersonServiceImpl can retrieve the tenant from this 
ThreadLocal. Note that 
+ * the CassandraAppDataServiceStore is not tenant aware, nor does it have 
access to the HTTP request.
+ * 
+ * @author ivol
+ */
+public class TenantHostnameDispatchExtenderFilter implements 
DispatchExtenderFilter {
+       // Service dependencies, injected by the framework
        private volatile TenantManagementService m_tenantManagementService;
        private static volatile BundleContext m_bundleContext;
-       
-    // Tenant context information is bound to a ThreadLocal variable.
-    private static ThreadLocal<Tenant> m_properties = new 
ThreadLocal<Tenant>();
 
-       public void destroy() {
+       // Tenant context information is bound to a ThreadLocal variable.
+       private static ThreadLocal<Tenant> m_properties = null;
+
+       public void init(FilterConfig filterConfig) throws ServletException {
+               // Create the threadlocal
+               m_properties = new ThreadLocal<Tenant>();
        }
 
-       public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) 
-               throws IOException, ServletException {
-               
-        HttpServletRequest httpServletRequest = (HttpServletRequest) request;
-        String serverName = httpServletRequest.getServerName();
-        if (serverName != null) {
-            try {
-                List<TenantEntity> tenants = 
m_tenantManagementService.getTenants();
-                for (TenantEntity tenant : tenants) {
-                       if 
(serverName.equals(tenant.getProperties().get("hostname"))) {
-                               m_properties.set(tenant);
-                       }       
-                }
-            }
-            catch (TenantException e) {}
-        }
-        
-        chain.doFilter(request, response);
-        
-        m_properties.set(null);
+       public void doFilter(ServletRequest request, ServletResponse response, 
FilterChain chain) throws IOException, ServletException {
+               HttpServletRequest httpServletRequest = (HttpServletRequest) 
request;
+               String serverName = httpServletRequest.getServerName();
+               if (serverName != null) {
+                       try {
+                               List<TenantEntity> tenants = 
m_tenantManagementService.getTenants();
+                               for (TenantEntity tenant : tenants) {
+                                       if 
(serverName.equals(tenant.getProperties().get(Tenant.HOSTNAME_PROPERTY))) {
+                                               // The servername of the 
request matches the hostname of this tenant so
+                                               // set the tenant on the 
threadlocal variable
+                                               m_properties.set(tenant);
+                                       }       
+                               }
+                       }
+                       catch (TenantException e) {}
+               }
+
+               chain.doFilter(request, response);
+
+               // Set the tenant to null
+               m_properties.set(null);
        }
 
-       public void init(FilterConfig filterConfig) throws ServletException {   
+       public void destroy() {
+               // Destroy the threadlocal
+               m_properties = null;
        }
 
+       /**
+        * Returns the tenant on the ThreadLocal.
+        * @return the current tenant
+        */
        public static Tenant getTenant() {
                return m_properties.get();
        }
-       
+
+       /**
+        * Returns the UserAdmin service that is associated with the current 
tenant.
+        * @return the UserAdmin service that is associated with the current 
tenant.
+        * @throws InvalidSyntaxException In case the UserAdmin service 
references could not be retrieved.
+        */
        public static UserAdmin getUserAdmin() throws InvalidSyntaxException {
                Tenant tenant = getTenant();
                ServiceReference[] refs = 
m_bundleContext.getAllServiceReferences(UserAdmin.class.getName(), null);
                for (ServiceReference ref : refs) {
-                       if 
(tenant.getId().equals(ref.getProperty("tenant_id"))) {
+                       if 
(tenant.getId().equals(ref.getProperty(Tenant.TENANT_ID_SERVICEPROPERTY))) {
                                return (UserAdmin) 
m_bundleContext.getService(ref);
                        }
                }

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
        (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/extender/TenanHostNameDispatchExtender.java
        Thu Feb  3 11:01:16 2011
@@ -12,17 +12,16 @@
 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.amdatu.web.dispatcher.DispatcherService;
 import org.osgi.service.log.LogService;
 
 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 volatile TenantManagementService m_tenantManagementService;
     private volatile LogService m_logService;
@@ -47,7 +46,7 @@
         if (serverName != null) {
             try {
                 Map<String, String> matchProperties = new HashMap<String, 
String>();
-                matchProperties.put(TENANT_PROPERTY_PARAMETER, serverName);
+                matchProperties.put(Tenant.TENANT_ID_SERVICEPROPERTY, 
serverName);
                 List<TenantEntity> tenants = 
m_tenantManagementService.getTenants(matchProperties);
                 if (tenants != null && tenants.size() > 0) {
                     if (tenants.size() > 1) {

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
 (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/FilterHandlerRegistry.java
 Thu Feb  3 11:01:16 2011
@@ -10,6 +10,7 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 
+import org.amdatu.core.tenant.Tenant;
 import org.amdatu.web.dispatcher.DispatchExtenderFilter;
 import org.amdatu.web.dispatcher.DispatchFilterMatcher;
 import org.amdatu.web.dispatcher.DispatcherService;
@@ -94,7 +95,7 @@
             return;
         }
 
-        String tenant = getStringProperty(serviceReference, "tenant_id");
+        String tenant = getStringProperty(serviceReference, 
Tenant.TENANT_ID_SERVICEPROPERTY);
 
         HandlerServletContext extServletContextWrapper =
             new HandlerServletContext(getServletContext(), 
getHttpContext(serviceReference));

Modified: 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/ServletHandlerRegistry.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/ServletHandlerRegistry.java
        (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/dispatcher/src/main/java/org/amdatu/web/dispatcher/handler/ServletHandlerRegistry.java
        Thu Feb  3 11:01:16 2011
@@ -10,6 +10,7 @@
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 
+import org.amdatu.core.tenant.Tenant;
 import org.amdatu.web.dispatcher.DispatchServletMatcher;
 import org.amdatu.web.dispatcher.DispatcherService;
 import org.amdatu.web.dispatcher.context.HandlerServletContext;
@@ -55,7 +56,7 @@
             return;
         }
 
-        String tenant = getStringProperty(serviceReference, "tenant_id");
+        String tenant = getStringProperty(serviceReference, 
Tenant.TENANT_ID_SERVICEPROPERTY);
 
         HandlerServletContext servletContextWrapper =
             new HandlerServletContext(getServletContext(), 
getHttpContext(serviceReference));

Modified: 
branches/amdatu-dispatcher/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkRegistrationServiceImpl.java
==============================================================================
--- 
branches/amdatu-dispatcher/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkRegistrationServiceImpl.java
     (original)
+++ 
branches/amdatu-dispatcher/amdatu-web/rest-wink/src/main/java/org/amdatu/web/rest/wink/service/WinkRegistrationServiceImpl.java
     Thu Feb  3 11:01:16 2011
@@ -229,8 +229,8 @@
     }
 
     private String getTenantId(ServiceReference ref) {
-        if (ref != null && ref.getProperty(Tenant.SERVICE_PREFIX + "id") != 
null) {
-            return (String) ref.getProperty(Tenant.SERVICE_PREFIX + "id");
+        if (ref != null && ref.getProperty(Tenant.TENANT_ID_SERVICEPROPERTY) 
!= null) {
+            return (String) ref.getProperty(Tenant.TENANT_ID_SERVICEPROPERTY);
         }
         return null;
     }
@@ -248,7 +248,7 @@
         properties.put("contextId", alias);
 
         if (tenantId != null) {
-            properties.put(Tenant.SERVICE_PREFIX + "id", tenantId);
+            properties.put(Tenant.TENANT_ID_SERVICEPROPERTY, tenantId);
         }
 
         m_dependencyManager.add(m_dependencyManager.createComponent()

Modified: 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/tests/TenantManagementServiceTest.java
==============================================================================
--- 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/tests/TenantManagementServiceTest.java
       (original)
+++ 
branches/amdatu-dispatcher/integration-tests/src/test/java/org/amdatu/test/integration/tests/TenantManagementServiceTest.java
       Thu Feb  3 11:01:16 2011
@@ -115,13 +115,13 @@
     }
 
     public void tenantAdded(ServiceReference reference) {
-        if (reference.getProperty(Tenant.SERVICE_PREFIX + 
"id").equals("tenant1")) {
+        if 
(reference.getProperty(Tenant.TENANT_ID_SERVICEPROPERTY).equals("tenant1")) {
             m_tenant1Added.release();
         }
     }
 
     public void tenantRemoved(ServiceReference reference) {
-        if (reference.getProperty(Tenant.SERVICE_PREFIX + 
"id").equals("tenant1")) {
+        if 
(reference.getProperty(Tenant.TENANT_ID_SERVICEPROPERTY).equals("tenant1")) {
             m_tenant1Removed.release();
         }
     }
@@ -156,7 +156,7 @@
         m_tenantManagementService.updateTenant(tenant);
 
         assertNotNull("The service did not become available",
-            getService(Tenant.class, "(" + Tenant.SERVICE_PREFIX + 
"host=shouldPublishTenantProperties.org)"));
+            getService(Tenant.class, "(" + Tenant.TENANT_SERVICEPROPERTY + 
"host=shouldPublishTenantProperties.org)"));
     }
 
     @Test
@@ -166,16 +166,16 @@
         m_tenantManagementService.updateTenant(tenant);
 
         assertNotNull("The service did not become available",
-            getService(Tenant.class, "(" + Tenant.SERVICE_PREFIX + 
"host=shouldPublishTenantProperties.org)"));
+            getService(Tenant.class, "(" + Tenant.TENANT_SERVICEPROPERTY + 
"host=shouldPublishTenantProperties.org)"));
 
         tenant.putProperty("host", "shouldUpdateTenantProperties.com");
         m_tenantManagementService.updateTenant(tenant);
 
         assertNotNull("The service did not become available with the new 
properties",
-            getService(Tenant.class, "(" + Tenant.SERVICE_PREFIX + 
"host=shouldPublishTenantProperties.com)"));
+            getService(Tenant.class, "(" + Tenant.TENANT_SERVICEPROPERTY + 
"host=shouldPublishTenantProperties.com)"));
 
         assertNull("The service with the old property still lies around",
-            m_bundleContext.getServiceReference("(" + Tenant.SERVICE_PREFIX + 
"host=shouldPublishTenantProperties.org)"));
+            m_bundleContext.getServiceReference("(" + 
Tenant.TENANT_SERVICEPROPERTY + "host=shouldPublishTenantProperties.org)"));
     }
 
 }

Reply via email to