package in.partake.app;
import in.partake.base.PartakeException;
import in.partake.model.IPartakeDAOs;
import in.partake.model.access.DBAccess;
import in.partake.model.dao.DAOException;
import in.partake.model.dao.PartakeConnection;
import in.partake.model.dao.access.IConfigurationItemAccess;
import in.partake.model.dto.ConfigurationItem;
import in.partake.resource.ConfigurationKeyConstants;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;
import play.Configuration;
import play.Logger;
public class PartakeConfiguration {
private static Configuration configuration;
private static String toppath;
private static String daemonEnabled;
private static String twitterBotId;
private static String luceneIndexDir;
private static String googleAnalyticsId;
private static String twitter4jConsumerKey;
private static String twitter4jConsumerSecret;
private static String adminScreenNames;
private static Set<String> adminScreenNamesParsed;
public static void set(Configuration conf) {
// NOTE: set() will be called after loadFromDB(). So configuration file will override the items from DB.
configuration = conf;
if (configuration.getString(ConfigurationKeyConstants.TOPPATH) != null)
toppath = configuration.getString(ConfigurationKeyConstants.TOPPATH);
if (configuration.getString(ConfigurationKeyConstants.DAEMON_ENABLED) != null)
daemonEnabled = configuration.getString(ConfigurationKeyConstants.DAEMON_ENABLED);
if (configuration.getString(ConfigurationKeyConstants.TWITTER_BOT_ID) != null)
twitterBotId = configuration.getString(ConfigurationKeyConstants.TWITTER_BOT_ID);
if (configuration.getString(ConfigurationKeyConstants.LUCENE_INDEX_DIX) != null)
luceneIndexDir = configuration.getString(ConfigurationKeyConstants.LUCENE_INDEX_DIX);
if (configuration.getString(ConfigurationKeyConstants.GOOGLE_ANALYTICS_ID) != null)
googleAnalyticsId = configuration.getString(ConfigurationKeyConstants.GOOGLE_ANALYTICS_ID);
if (configuration.getString(ConfigurationKeyConstants.TWITTER4J_CONSUMER_KEY) != null)
twitter4jConsumerKey = configuration.getString(ConfigurationKeyConstants.TWITTER4J_CONSUMER_KEY);
if (configuration.getString(ConfigurationKeyConstants.TWITTER4J_CONSUMER_SECRET) != null)
twitter4jConsumerSecret = configuration.getString(ConfigurationKeyConstants.TWITTER4J_CONSUMER_SECRET);
if (configuration.getString(ConfigurationKeyConstants.ADMIN_SCREEN_NAMES) != null)
adminScreenNames = configuration.getString(ConfigurationKeyConstants.ADMIN_SCREEN_NAMES);
if (adminScreenNames != null)
adminScreenNamesParsed = parseAdministratorScreenNames(adminScreenNames);
}
public static void loadFromDB() throws DAOException, PartakeException {
new DBAccess<Void>() {
@Override
protected Void doExecute(PartakeConnection con, IPartakeDAOs daos) throws DAOException, PartakeException {
IConfigurationItemAccess dao = daos.getConfiguraitonItemAccess();
toppath = getValue(dao.find(con, ConfigurationKeyConstants.TOPPATH));
daemonEnabled = getValue(dao.find(con, ConfigurationKeyConstants.DAEMON_ENABLED));
twitterBotId = getValue(dao.find(con, ConfigurationKeyConstants.TWITTER_BOT_ID));
luceneIndexDir = getValue(dao.find(con, ConfigurationKeyConstants.LUCENE_INDEX_DIX));
googleAnalyticsId = getValue(dao.find(con, ConfigurationKeyConstants.GOOGLE_ANALYTICS_ID));
twitter4jConsumerKey = getValue(dao.find(con, ConfigurationKeyConstants.TWITTER4J_CONSUMER_KEY));
twitter4jConsumerSecret = getValue(dao.find(con, ConfigurationKeyConstants.TWITTER4J_CONSUMER_SECRET));
adminScreenNames = getValue(dao.find(con, ConfigurationKeyConstants.ADMIN_SCREEN_NAMES));
return null;
}
}.execute();
}
private static String getValue(ConfigurationItem item) {
if (item == null)
return null;
return item.value();
}
public static String toppath() {
return toppath;
}
public static boolean isTwitterDaemonEnabled() {
return "true".equals(daemonEnabled);
}
public static long twitterBotId() {
try {
return Long.parseLong(twitterBotId);
} catch (NumberFormatException e) {
return -1;
}
}
public static String luneceIndexDir() {
return luceneIndexDir;
}
public static Set<String> administratorScreenNames() {
return adminScreenNamesParsed;
}
public static String googleAnalyticsId() {
return googleAnalyticsId;
}
public static String twitter4jConsumerKey() {
return twitter4jConsumerKey;
}
public static String twitter4jConsumerSecret() {
return twitter4jConsumerSecret;
}
private static Set<String> parseAdministratorScreenNames(String adminNames) {
if (adminNames == null)
return Collections.emptySet();
Set<String> result = new HashSet<String>();
for (String name : adminNames.split(",")) {
String adminName = name.trim().toLowerCase();
if (!adminName.isEmpty())
result.add(adminName);
}
if (result.isEmpty())
Logger.warn("No administrator screen names");
return result;
}
}