package in.partake.app;
import java.util.UUID;
import in.partake.base.DateTime;
import in.partake.base.TimeUtil;
import in.partake.daemon.PartakeDaemon;
import in.partake.daemon.impl.DaemonInitializer;
import in.partake.service.IDBService;
import in.partake.service.IDaemonInitializer;
import in.partake.service.IEventSearchService;
import in.partake.service.IOpenIDService;
import in.partake.service.ITwitterService;
import in.partake.service.impl.EventSearchService;
import in.partake.service.impl.OpenIDService;
import in.partake.service.impl.Postgres9DBService;
import in.partake.service.impl.TwitterService;
import play.Configuration;
public class PartakeApp {
public static final DateTime initializedAt = TimeUtil.getCurrentDateTime();
private static PartakeApp instance;
private IDBService dbService;
private IEventSearchService eventSearchService;
private ITwitterService twitterService;
private IOpenIDService openIDService;
private IDaemonInitializer daemonInitializer;
public static void setInstance(PartakeApp instance) {
PartakeApp.instance = instance;
}
public static PartakeApp instance() {
return instance;
}
public static boolean isTestMode() {
return instance.isTestModeImpl();
}
public static IDBService getDBService() {
return instance.dbService;
}
public static IEventSearchService getEventSearchService() {
return instance.eventSearchService;
}
public static ITwitterService getTwitterService() {
return instance.twitterService;
}
public static IOpenIDService getOpenIDService() {
return instance.openIDService;
}
public void createServices() throws Exception {
dbService = createDBService();
eventSearchService = createEventSearchService();
twitterService = createTwitterService();
openIDService = createOpenIDService();
daemonInitializer = createDaemonInitializer();
}
public void initializeDBService() throws Exception {
if (dbService != null)
dbService.initialize();
}
public void loadConfiguration(Configuration conf) throws Exception {
PartakeConfiguration.loadFromDB();
PartakeConfiguration.set(conf);
}
public void initializeOtherServices() throws Exception {
if (twitterService != null)
twitterService.initialize();
if (eventSearchService != null)
eventSearchService.initialize();
if (PartakeConfiguration.isTwitterDaemonEnabled()) {
if (daemonInitializer != null)
daemonInitializer.initialize();
PartakeDaemon.getInstance().schedule();
}
}
public void cleanUp() throws Exception {
if (PartakeConfiguration.isTwitterDaemonEnabled())
PartakeDaemon.getInstance().cancel();
if (eventSearchService != null)
eventSearchService.cleanUp();
}
public void reinitializeTwitterService() throws Exception {
twitterService = createTwitterService();
}
protected IDBService createDBService() throws Exception{
return new Postgres9DBService();
}
protected IEventSearchService createEventSearchService() throws Exception {
return new EventSearchService();
}
protected ITwitterService createTwitterService() throws Exception{
return new TwitterService();
}
protected IOpenIDService createOpenIDService() throws Exception {
return new OpenIDService();
}
protected IDaemonInitializer createDaemonInitializer() throws Exception {
return new DaemonInitializer();
}
protected boolean isTestModeImpl() {
return false;
}
}