/** * */ package com.googlecode.flickr2twitter.impl.email; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.appengine.api.mail.MailService.Message; import com.google.appengine.api.mail.MailServiceFactory; import com.google.appengine.api.users.UserService; import com.google.appengine.api.users.UserServiceFactory; import com.googlecode.flickr2twitter.datastore.MyPersistenceManagerFactory; import com.googlecode.flickr2twitter.datastore.model.GlobalTargetApplicationService; import com.googlecode.flickr2twitter.datastore.model.UserTargetServiceConfig; import com.googlecode.flickr2twitter.intf.IServiceProvider; import com.googlecode.flickr2twitter.intf.ITargetServiceProvider; import com.googlecode.flickr2twitter.model.IItem; import com.googlecode.flickr2twitter.model.IItemList; import com.googlecode.flickr2twitter.model.IPhoto; import com.googlecode.flickr2twitter.org.apache.commons.lang3.StringUtils; /** * @author Toby Yu(yuyang226@gmail.com) * */ public class TargetServiceProviderEmail implements ITargetServiceProvider, IServiceProvider<GlobalTargetApplicationService> { public static final String ID = "email"; public static final String DISPLAY_NAME = "Email"; public static final String TIMEZONE_CST = "CST"; private static final Logger log = LoggerFactory.getLogger(TargetServiceProviderEmail.class); /** * */ public TargetServiceProviderEmail() { super(); } /* (non-Javadoc) * @see com.googlecode.flickr2twitter.intf.ITargetServiceProvider#postUpdate(com.googlecode.flickr2twitter.datastore.model.GlobalTargetApplicationService, com.googlecode.flickr2twitter.datastore.model.UserTargetServiceConfig, java.util.List) */ @Override public void postUpdate(GlobalTargetApplicationService globalAppConfig, UserTargetServiceConfig targetConfig, List<IItemList<IItem>> items) throws Exception { UserService userService = UserServiceFactory.getUserService(); if (userService == null || userService.getCurrentUser() == null) { throw new IllegalArgumentException("Can not get the current Google account user"); } log.info("Current User: {}", userService.getCurrentUser()); String email = userService.getCurrentUser().getEmail(); log.info("Admin user email:{}", email); Message msg = new Message(); msg.setReplyTo(globalAppConfig.getTargetAppConsumerId()); msg.setSender(email); msg.setSubject("[flickr2twi] flickr2twitter just found some new updates!"); msg.setTo(StringUtils.split(targetConfig.getServiceUserId(), ",")); StringBuffer buf = new StringBuffer(); for (IItemList<IItem> itemList : items) { log.info("Processing items from: {}", itemList.getListTitle()); if (itemList.getItems().isEmpty() == false) { buf.append("<p>"); buf.append("<b>"); buf.append(itemList.getListTitle()); buf.append("</b><br><br>"); for (IItem item : itemList.getItems()) { log.info("Posting message -> {} for {}", item, targetConfig.getServiceUserName()); buf.append(item.getTitle()); if (StringUtils.isNotBlank(item.getDescription())) { buf.append(": "); buf.append(item.getDescription()); } if (item instanceof IPhoto) { IPhoto photo = (IPhoto) item; buf.append(". <a href=\""); buf.append(photo.getUrl()); buf.append("\">"); buf.append(photo.getTitle()); buf.append("</a>"); } buf.append("<br>"); } buf.append("</p>"); } } msg.setHtmlBody(buf.toString()); MailServiceFactory.getMailService().send(msg); } /* (non-Javadoc) * @see com.googlecode.flickr2twitter.intf.IServiceAuthorizer#readyAuthorization(java.lang.String, java.util.Map) */ @Override public String readyAuthorization(String userEmail, Map<String, Object> data) throws Exception { UserService userService = UserServiceFactory.getUserService(); if (userService == null || userService.getCurrentUser() == null) { throw new IllegalArgumentException("Can not get the current Google account user"); } log.info("Current User: {}", userService.getCurrentUser()); String email = userService.getCurrentUser().getEmail(); log.info("Admin user email: {}", email); UserTargetServiceConfig service = new UserTargetServiceConfig(); service.setServiceProviderId(ID); service.setServiceAccessToken(""); service.setServiceTokenSecret(""); service.setServiceUserId(email); service.setUserEmail(userEmail); service.setServiceUserName(email); service.setUserSiteUrl(email); MyPersistenceManagerFactory.addTargetServiceApp(userEmail, service); return ""; } /* (non-Javadoc) * @see com.googlecode.flickr2twitter.intf.IServiceAuthorizer#requestAuthorization(java.lang.String) */ @Override public Map<String, Object> requestAuthorization(String baseUrl) throws Exception { Map<String, Object> data = new HashMap<String, Object>(); UserService userService = UserServiceFactory.getUserService(); if (userService != null) { com.google.appengine.api.users.User user = userService.getCurrentUser(); if (user != null) { data.put("email", user.getEmail()); } else { data.put("url", userService.createLoginURL(baseUrl)); } } return data; } /* (non-Javadoc) * @see com.googlecode.flickr2twitter.intf.IServiceProvider#createDefaultGlobalApplicationConfig() */ @Override public GlobalTargetApplicationService createDefaultGlobalApplicationConfig() { GlobalTargetApplicationService result = new GlobalTargetApplicationService(); result.setAppName(DISPLAY_NAME); result.setProviderId(ID); result.setDescription("The Email target service"); result.setTargetAppConsumerId("flickr2twitter@googlegroups.com"); result.setTargetAppConsumerSecret("flickr2twitter@googlegroups.com"); result.setAuthPagePath(null); // TODO set the default auth page path result.setImagePath("/services/email/images/gmail_icon_50.png"); return result; } /* (non-Javadoc) * @see com.googlecode.flickr2twitter.intf.IServiceProvider#getId() */ @Override public String getId() { return ID; } }