/**
*
*/
package com.googlecode.flickr2twitter.services.rest;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Logger;
import org.restlet.resource.Delete;
import org.restlet.resource.Get;
import org.restlet.resource.Post;
import org.restlet.resource.Put;
import org.restlet.resource.ServerResource;
import com.googlecode.flickr2twitter.core.ServiceFactory;
import com.googlecode.flickr2twitter.datastore.MyPersistenceManagerFactory;
import com.googlecode.flickr2twitter.datastore.MyPersistenceManagerFactory.Permission;
import com.googlecode.flickr2twitter.datastore.model.GlobalSourceApplicationService;
import com.googlecode.flickr2twitter.datastore.model.GlobalTargetApplicationService;
import com.googlecode.flickr2twitter.datastore.model.User;
import com.googlecode.flickr2twitter.datastore.model.UserSourceServiceConfig;
import com.googlecode.flickr2twitter.datastore.model.UserTargetServiceConfig;
import com.googlecode.flickr2twitter.intf.ISourceServiceProvider;
import com.googlecode.flickr2twitter.intf.ITargetServiceProvider;
import com.googlecode.flickr2twitter.model.IItem;
import com.googlecode.flickr2twitter.services.rest.models.GlobalApplicationConfigModel;
import com.googlecode.flickr2twitter.services.rest.models.GlobalApplicationConfigModelList;
import com.googlecode.flickr2twitter.services.rest.models.GlobalSourceApplicationServiceModel;
import com.googlecode.flickr2twitter.services.rest.models.GlobalTargetApplicationServiceModel;
import com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource;
import com.googlecode.flickr2twitter.services.rest.models.UserModel;
import com.googlecode.flickr2twitter.services.rest.models.UserSourceServiceConfigModel;
import com.googlecode.flickr2twitter.services.rest.models.UserTargetServiceConfigModel;
/**
* @author Toby Yu(yuyang226@gmail.com)
*
*/
public class SocialHubServerResource extends ServerResource implements ISociaHubResource {
private static final Logger log = Logger.getLogger(SocialHubServerResource.class.getName());
/**
*
*/
public SocialHubServerResource() {
super();
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#getSupportedServiceProviders()
*/
@Get
public GlobalApplicationConfigModelList getSupportedServiceProviders() {
final List<GlobalApplicationConfigModel> data = new ArrayList<GlobalApplicationConfigModel>();
data.addAll(getSupportedSourceServiceProviders());
data.addAll(getSupportedTargetServiceProviders());
GlobalApplicationConfigModelList list = new GlobalApplicationConfigModelList(data);
log.info("Retrieving supported service providers -> " + list);
return list;
}
@Post
public UserModel retrieve(String userEmail) {
log.info("Retrieving user information for -> " + userEmail);
User user = MyPersistenceManagerFactory.getUser(userEmail);
if (user != null) {
UserModel model = new UserModel(user.getUserId().getEmail(),
user.getPassword(), user.getPermission(), user.getScreenName());
model.setSourceServices(convertSourceData(
MyPersistenceManagerFactory.getUserSourceServices(userEmail)));
model.setTargetServices(convertTargetData(
MyPersistenceManagerFactory.getUserTargetServices(userEmail)));
return model;
}
return null;
}
@Put
public boolean registerNewUser(UserModel user) {
if (MyPersistenceManagerFactory.createNewUser(user.getUserId(),
user.getPassword(), user.getScreenName(), Permission.valueOf(user.getPermission())) != null)
return true;
return false;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#login(java.lang.String, java.lang.String)
*/
@Post
public UserModel login(String userEmail, String password) {
User user = null;
log.info("user logging in for -> " + userEmail);
user = MyPersistenceManagerFactory.getLoginUser(userEmail, password);
if (user != null) {
UserModel model = new UserModel(user.getUserId().getEmail(),
user.getPassword(), user.getPermission(), user.getScreenName());
model.setSourceServices(convertSourceData(
MyPersistenceManagerFactory.getUserSourceServices(userEmail)));
model.setTargetServices(convertTargetData(
MyPersistenceManagerFactory.getUserTargetServices(userEmail)));
return model;
}
return null;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#openidLogin(java.lang.String, java.lang.String)
*/
@Post
public UserModel openidLogin(String userEmail) {
log.info("Retrieving opendid user information for -> " + userEmail);
User user = MyPersistenceManagerFactory.getOpenIdLoginUser(userEmail);
if (user != null) {
return new UserModel(user.getUserId().getEmail(),
user.getPassword(), user.getPermission(), user.getScreenName());
}
return null;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#remove(com.googlecode.flickr2twitter.services.rest.models.UserModel)
*/
@Delete
public boolean remove(UserModel user) {
// TODO Auto-generated method stub
return false;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#getSupportedTargetServiceProviders()
*/
private List<GlobalTargetApplicationServiceModel> getSupportedTargetServiceProviders() {
final List<GlobalTargetApplicationServiceModel> data =
new ArrayList<GlobalTargetApplicationServiceModel>();
for (ITargetServiceProvider targetProvider : ServiceFactory.getAllTargetProviders()) {
GlobalTargetApplicationService globalTargetService =
MyPersistenceManagerFactory.getGlobalTargetAppService(targetProvider.getId());
if (globalTargetService != null) {
data.add(new GlobalTargetApplicationServiceModel(targetProvider.getId(),
globalTargetService.getAppName(), globalTargetService.getDescription(),
globalTargetService.getAuthPagePath(), globalTargetService.getConfigPagePath(),
globalTargetService.getImagePath(), globalTargetService.getTargetAppConsumerId(),
globalTargetService.getTargetAppConsumerSecret()));
}
}
return data;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#getSupportedSourceServiceProviders()
*/
private List<GlobalSourceApplicationServiceModel> getSupportedSourceServiceProviders() {
final List<GlobalSourceApplicationServiceModel> data =
new ArrayList<GlobalSourceApplicationServiceModel>();
for (ISourceServiceProvider<IItem> srcProvider : ServiceFactory.getAllSourceProviders()) {
GlobalSourceApplicationService globalSrcService =
MyPersistenceManagerFactory.getGlobalSourceAppService(srcProvider.getId());
if (globalSrcService != null) {
data.add(new GlobalSourceApplicationServiceModel(srcProvider.getId(),
globalSrcService.getAppName(), globalSrcService.getDescription(),
globalSrcService.getAuthPagePath(), globalSrcService.getConfigPagePath(),
globalSrcService.getImagePath(), globalSrcService.getSourceAppApiKey(),
globalSrcService.getSourceAppSecret()));
}
}
return data;
}
public List<UserSourceServiceConfigModel> convertSourceData(
List<UserSourceServiceConfig> userConfigs) {
List<UserSourceServiceConfigModel> data = new ArrayList<UserSourceServiceConfigModel>();
for (UserSourceServiceConfig userConfig : userConfigs) {
try {
data.add(new UserSourceServiceConfigModel(userConfig.getUserEmail(), userConfig.getServiceUserId(),
userConfig.getServiceUserName(), userConfig.getUserSiteUrl(), userConfig.getServiceProviderId(),
userConfig.getAdditionalParameters(), userConfig.isEnabled(), userConfig.getServiceAccessToken()));
} catch (UnsupportedEncodingException e) {
log.throwing(this.getClass().getName(), "convertSourceData", e);
}
}
return data;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#getUserSourceServiceConfigs(java.lang.String)
*/
@Post
public List<UserSourceServiceConfigModel> getUserSourceServiceConfigs(
String userEmail) {
return convertSourceData(MyPersistenceManagerFactory.getUserSourceServices(userEmail));
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#addUserSourceServiceConfig(java.lang.String, com.googlecode.flickr2twitter.services.rest.models.UserSourceServiceConfigModel)
*/
@Post
public void addUserSourceServiceConfig(String userEmail,
UserSourceServiceConfigModel sourceServiceConfig) {
if (sourceServiceConfig != null) {
UserSourceServiceConfig srcService = new UserSourceServiceConfig();
srcService.setServiceUserId(sourceServiceConfig.getServiceUserId());
srcService.setServiceUserName(sourceServiceConfig.getServiceUserName());
srcService.setServiceAccessToken(sourceServiceConfig.getServiceAccessToken());
srcService.setServiceProviderId(sourceServiceConfig.getServiceProviderId());
srcService.setUserEmail(userEmail);
srcService.setUserSiteUrl(sourceServiceConfig.getUserSiteUrl());
try {
srcService.setAdditionalParameters(sourceServiceConfig.getAdditionalParameters());
} catch (UnsupportedEncodingException e) {
log.throwing(this.getClass().getName(), "addUserSourceServiceConfig", e);
}
MyPersistenceManagerFactory.addSourceServiceApp(userEmail, srcService);
}
}
public List<UserTargetServiceConfigModel> convertTargetData(
List<UserTargetServiceConfig> userConfigs) {
List<UserTargetServiceConfigModel> data = new ArrayList<UserTargetServiceConfigModel>();
for (UserTargetServiceConfig userConfig : userConfigs) {
try {
data.add(new UserTargetServiceConfigModel(userConfig.getUserEmail(), userConfig.getServiceUserId(),
userConfig.getServiceUserName(), userConfig.getUserSiteUrl(), userConfig.getServiceProviderId(),
userConfig.getAdditionalParameters(), userConfig.isEnabled(), userConfig.getServiceAccessToken(),
userConfig.getServiceTokenSecret()));
} catch (UnsupportedEncodingException e) {
log.throwing(this.getClass().getName(), "convertTargetData", e);
}
}
return data;
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#getUserTargetServiceConfigs(java.lang.String)
*/
@Post
public List<UserTargetServiceConfigModel> getUserTargetServiceConfigs(
String userEmail) {
return convertTargetData(MyPersistenceManagerFactory.getUserTargetServices(userEmail));
}
@Put
public void addUserTargetServiceConfig(UserTargetServiceConfigModel targetModel) {
log.info("Saving user target service config->" + targetModel);
if (targetModel != null) {
UserTargetServiceConfig targetService = new UserTargetServiceConfig();
targetService.setServiceUserId(targetModel.getServiceUserId());
targetService.setServiceUserName(targetModel.getServiceUserName());
targetService.setServiceProviderId(targetModel.getServiceProviderId());
targetService.setUserEmail(targetModel.getUserEmail());
try {
targetService.setAdditionalParameters(targetModel.getAdditionalParameters());
} catch (UnsupportedEncodingException e) {
log.throwing(this.getClass().getName(), "addUserTargetServiceConfig", e);
}
targetService.setUserSiteUrl(targetModel.getUserSiteUrl());
targetService.setServiceAccessToken(targetModel.getServiceAccessToken());
targetService.setServiceTokenSecret(targetModel.getServiceTokenSecret());
MyPersistenceManagerFactory.addTargetServiceApp(targetModel.getUserEmail(), targetService);
}
}
/* (non-Javadoc)
* @see com.googlecode.flickr2twitter.services.rest.models.ISociaHubResource#addUserTargetServiceConfig(java.lang.String, com.googlecode.flickr2twitter.services.rest.models.UserTargetServiceConfigModel)
*/
/*public void addUserTargetServiceConfig(String userEmail,
UserTargetServiceConfigModel targetServiceConfig) {
log.info("Saving user target service config->" + targetServiceConfig);
if (targetServiceConfig != null) {
UserTargetServiceConfig targetService = new UserTargetServiceConfig();
targetService.setServiceUserId(targetServiceConfig.getServiceUserId());
targetService.setServiceUserName(targetServiceConfig.getServiceUserName());
targetService.setServiceAccessToken(targetServiceConfig.getServiceAccessToken());
targetService.setServiceProviderId(targetServiceConfig.getServiceProviderId());
targetService.setUserEmail(userEmail);
targetService.setUserSiteUrl(targetServiceConfig.getUserSiteUrl());
targetService.setServiceAccessToken(targetServiceConfig.getServiceAccessToken());
targetService.setServiceTokenSecret(targetServiceConfig.getServiceTokenSecret());
try {
targetService.setAdditionalParameters(targetServiceConfig.getAdditionalParameters());
} catch (UnsupportedEncodingException e) {
log.throwing(this.getClass().getName(), "addUserTargetServiceConfig", e);
}
MyPersistenceManagerFactory.addTargetServiceApp(userEmail, targetService);
}
}*/
}