/**
*
*/
package com.googlecode.flickr2twitter.core;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.TimeZone;
import java.util.logging.Logger;
import com.google.appengine.api.taskqueue.Queue;
import com.google.appengine.api.taskqueue.QueueFactory;
import com.google.appengine.api.taskqueue.TaskOptions.Builder;
import com.google.appengine.api.taskqueue.TaskOptions.Method;
import com.googlecode.flickr2twitter.datastore.MyPersistenceManagerFactory;
import com.googlecode.flickr2twitter.datastore.model.GlobalServiceConfiguration;
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.servlet.ServiceWorkerServlet;
/**
* @author Toby Yu(yuyang226@gmail.com)
*
*/
public class ServiceRunner {
private static final Logger log = Logger.getLogger(ServiceRunner.class.getName());
public static final String TIMEZONE_UTC = "UTC";
public static final String KEY_USER = "user";
public static final String KEY_TIMESTAMP = "timestamp";
public static final String KEY_INTERNVAL = "interval";
/**
*
*/
public ServiceRunner() {
super();
}
public static void execute() {
List<User> users = MyPersistenceManagerFactory.getAllUsers();
if (users.isEmpty()) {
log.info("No user configured, skip the execution");
return;
}
GlobalServiceConfiguration globalConfig = MyPersistenceManagerFactory.getGlobalConfiguration();
Date now = Calendar.getInstance(TimeZone.getTimeZone(TIMEZONE_UTC)).getTime();
log.info("Current time: " + now);
for (User user : users) {
if (user.getSourceServices() == null || user.getSourceServices().isEmpty()) {
log.warning("No source services configured for the user: " + user);
continue;
} else if (user.getTargetServices() == null || user.getTargetServices().isEmpty()) {
log.warning("No target services configured for the user: " + user);
continue;
}
List<UserSourceServiceConfig> srcConfigs = new ArrayList<UserSourceServiceConfig>(user.getSourceServices().size());
for (UserSourceServiceConfig srcConfig : user.getSourceServices()) {
if (srcConfig.isEnabled()) {
srcConfigs.add(srcConfig);
}
}
if (srcConfigs.isEmpty()) {
log.warning("All configured source services have been disabled for the user: " + user);
continue;
}
List<UserTargetServiceConfig> targetConfigs = new ArrayList<UserTargetServiceConfig>(user.getTargetServices().size());
for (UserTargetServiceConfig targetConfig : user.getTargetServices()) {
if (targetConfig.isEnabled()) {
targetConfigs.add(targetConfig);
}
}
if (targetConfigs.isEmpty()) {
log.warning("All configured target services have been disabled for the user: " + user);
continue;
}
Queue queue = QueueFactory.getQueue(ServiceWorkerServlet.QUEUE_NAME_WORKER);
queue.add(Builder.withUrl("/tasks/worker")
.param(KEY_USER, user.getUserId().getEmail())
.param(KEY_TIMESTAMP, String.valueOf(now.getTime()))
.param(KEY_INTERNVAL, String.valueOf(globalConfig.getMinUploadTime()))
.method(Method.POST));
}
}
public static void main(String[] args) {
ServiceRunner.execute();
}
}