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;