package com.leanengine.server;
import com.google.appengine.api.datastore.*;
import com.google.appengine.api.utils.SystemProperty;
import com.leanengine.server.appengine.ServerUtils;
import java.util.HashMap;
import java.util.Map;
public class LeanEngineSettings {
private static Map<String, Object> settings;
private static Map<String, Object> load() {
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
Key key = KeyFactory.createKey("_settings", 1);
Entity leanEntity;
try {
leanEntity = datastore.get(key);
settings = leanEntity.getProperties();
} catch (EntityNotFoundException e) {
settings = new HashMap<String, Object>();
// By default enable all logins on Development server
if (ServerUtils.isDevServer()) {
settings.put("fbLoginEnable", true);
settings.put("fbAppId", "mockFacebookAppId");
settings.put("fbAppSecret", "mockFacebookAppSecret");
settings.put("openIdLoginEnable", true);
saveSettings(settings);
}
}
return settings;
}
public static void saveSettings(Map<String, Object> newSettings) {
// there is only one instance of LeanEngineSettings so the same ID=1 is always used
Entity leanEntity = new Entity("_settings", 1);
for (String propName : newSettings.keySet()) {
leanEntity.setProperty(propName, newSettings.get(propName));
}
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
datastore.put(leanEntity);
LeanEngineSettings.settings = newSettings;
}
public static boolean isFacebookLoginEnabled() {
if (settings == null) load();
Object fbLoginEnable = settings.get("fbLoginEnable");
return fbLoginEnable == null ? false : (Boolean) fbLoginEnable;
}
public static String getFacebookAppID() {
if (settings == null) load();
return (String) settings.get("fbAppId");
}
public static String getFacebookAppSecret() {
if (settings == null) load();
return (String) settings.get("fbAppSecret");
}
public static boolean isOpenIdLoginEnabled() {
if (settings == null) load();
Object openIdLoginEnable = settings.get("openIdLoginEnable");
return openIdLoginEnable == null ? false : (Boolean) openIdLoginEnable;
}
/**
* Retrieves application settings.
*
* @return Map of application settings.
*/
public static Map<String, Object> getSettings() {
load();
return settings;
}
/**
* Helper class for one-line saving of multiple settings.
*/
public static class Builder {
private Map<String, Object> temp = new HashMap<String, Object>();
public Builder add(String name, Object value) {
temp.put(name, value);
return this;
}
public void save() {
if (!temp.isEmpty()) LeanEngineSettings.saveSettings(temp);
}
}
}