Author: ivol37 at gmail.com
Date: Tue Feb  1 11:33:05 2011
New Revision: 741

Log:
[AMDATU-84] PersonService is now also tenant aware

Added:
   
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/service/TenantDispatchExtender.java
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/service/PersonServiceImpl.java
   
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

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
        Tue Feb  1 11:33:05 2011
@@ -25,7 +25,6 @@
 import org.apache.felix.dm.DependencyManager;
 import org.osgi.framework.BundleContext;
 import org.osgi.service.log.LogService;
-import org.osgi.service.useradmin.UserAdmin;
 
 public class Activator extends DependencyActivatorBase {
     @Override
@@ -44,8 +43,7 @@
                 .setImplementation(PersonServiceImpl.class)
                 .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))
-                
.add(createServiceDependency().setService(UserAdmin.class).setRequired(true)));
+                
.add(createServiceDependency().setService(ColumnFamilyAvailable.class, 
filter).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
     Tue Feb  1 11:33:05 2011
@@ -16,7 +16,13 @@
  */
 package org.amdatu.opensocial.profile.service;
 
-import java.io.*;
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Set;
@@ -24,6 +30,7 @@
 
 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;
@@ -38,7 +45,6 @@
 import org.osgi.service.log.LogService;
 import org.osgi.service.useradmin.Role;
 import org.osgi.service.useradmin.User;
-import org.osgi.service.useradmin.UserAdmin;
 
 /**
  * Implementation of the person service.
@@ -47,7 +53,6 @@
 public class PersonServiceImpl implements PersonService {
     // Services injected by the Felix dependency manager
     private volatile LogService m_logService;
-    private volatile UserAdmin m_userAdmin;
 
     public Future<RestfulCollection<Person>> getPeople(Set<UserId> userIds, 
GroupId groupId,
             CollectionOptions collectionOptions, Set<String> fields, 
SecurityToken token) throws ProtocolException {
@@ -88,7 +93,7 @@
         List<Person> result = new ArrayList<Person>();
         try {
             // First retrieve all Users
-            Role[] allRoles = m_userAdmin.getRoles(null);
+            Role[] allRoles = 
TenantDispatchExtender.getUserAdmin().getRoles(null);
             for (Role role : allRoles) {
                 if (role.getType() == Role.USER) {
                     Object person = 
role.getProperties().get(PersonService.OPEN_SOCIAL_PERSON_PROPERTIES_KEY);
@@ -125,8 +130,17 @@
     }
 
     public User getUser(Person person) {
+        return getUser(person.getId());
+    }
+    
+    private User getUser(String personId) {
         // Retrieved all persons that match the specified profile.
-        return m_userAdmin.getUser(LoginService.USER_NAME_CREDENTIAL_KEY, 
person.getId());
+        try {
+                       return 
TenantDispatchExtender.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;
+               }
     }
 
     public Person getPerson(User user) {
@@ -176,7 +190,7 @@
         } catch (IOException e) {
             m_logService.log(LogService.LOG_ERROR, "Could not retrieve the 
friends for person '" + person.getId()
                     + "'.", e);
-        }
+        } 
         return friends;
     }
 
@@ -184,7 +198,7 @@
     private Person getPerson(String id) {
         User user = null;
         if (id != null && !"".equals(id)) {
-            user = m_userAdmin.getUser(LoginService.USER_NAME_CREDENTIAL_KEY, 
id);
+            user = getUser(id);
         }
         if (user != null) {
             try {

Added: 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/TenantDispatchExtender.java
==============================================================================
--- (empty file)
+++ 
branches/amdatu-dispatcher/amdatu-opensocial/shindig/src/main/java/org/amdatu/opensocial/shindig/TenantDispatchExtender.java
        Tue Feb  1 11:33:05 2011
@@ -0,0 +1,72 @@
+package org.amdatu.opensocial.shindig;
+
+import java.io.IOException;
+import java.util.List;
+
+import javax.servlet.Filter;
+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.osgi.framework.BundleContext;
+import org.osgi.framework.InvalidSyntaxException;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.useradmin.UserAdmin;
+
+public class TenantDispatchExtender implements Filter {
+       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() {
+       }
+
+       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 init(FilterConfig filterConfig) throws ServletException {   
+       }
+
+       public static Tenant getTenant() {
+               return m_properties.get();
+       }
+       
+       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"))) {
+                               return (UserAdmin) 
m_bundleContext.getService(ref);
+                       }
+               }
+               return null;
+       }
+}

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
        Tue Feb  1 11:33:05 2011
@@ -29,6 +29,7 @@
 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;
@@ -39,7 +40,6 @@
 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.TenantDispatchExtender;
 import org.amdatu.web.httpcontext.HttpContextServiceFactory;
 import org.amdatu.web.httpcontext.ResourceProvider;
 import org.apache.felix.dm.DependencyActivatorBase;

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
      Tue Feb  1 11:33:05 2011
@@ -26,7 +26,7 @@
 
 import org.amdatu.libraries.utilities.ConversionUtil;
 import org.amdatu.opensocial.shindig.OpenSocialConstants;
-import org.amdatu.opensocial.shindig.service.TenantDispatchExtender;
+import org.amdatu.opensocial.shindig.TenantDispatchExtender;
 import org.apache.shindig.auth.SecurityToken;
 import org.apache.shindig.common.util.ImmediateFuture;
 import org.apache.shindig.protocol.DataCollection;

Reply via email to