package config;
import java.io.Serializable;
import java.util.*;
import org.openntf.domino.*;
import com.ibm.xsp.model.DataObject;
import frostillicus.xsp.bean.ApplicationScoped;
import frostillicus.xsp.bean.ManagedBean;
import frostillicus.xsp.util.FrameworkUtils;
@ManagedBean(name="appConfig")
@ApplicationScoped
public class AppConfig implements Serializable, DataObject {
private static final long serialVersionUID = 1L;
private static final String[] EXPECTED_FIELDS = {
};
private Boolean complete_ = null;
public static AppConfig get() {
AppConfig instance = (AppConfig)FrameworkUtils.resolveVariable(AppConfig.class.getAnnotation(ManagedBean.class).name());
return instance == null ? new AppConfig() : instance;
}
public Class<?> getType(final Object keyObject) {
return String.class;
}
public Object getValue(final Object keyObject) {
if (!(keyObject instanceof String)) {
throw new IllegalArgumentException();
}
if("keySet".equals(keyObject)) { return keySet(); }
Document config = getConfig();
if(config.containsKey(keyObject)) {
List<Object> val = config.getItemValue((String)keyObject);
if(val.size() == 1) {
if(val.get(0) instanceof Number || val.get(0) instanceof Date || val.get(0) instanceof DateTime || val.get(0) instanceof String) {
return val.get(0);
} else {
return val;
}
} else if(val.isEmpty()) {
return "";
} else {
return val;
}
}
return "";
}
public boolean isReadOnly(final Object keyObject) {
return false;
}
public void setValue(final Object keyObject, final Object value) {
if (!(keyObject instanceof String)) {
throw new IllegalArgumentException();
}
getConfig().replaceItemValue((String)keyObject, value);
}
public boolean save() {
return getConfig().save();
}
public Set<String> keySet() {
return new TreeSet<String>(getConfig().keySet());
}
public boolean isComplete() {
if(complete_ == null) {
Document doc = getConfig();
for(String fieldName : EXPECTED_FIELDS) {
if(doc.getItemValueString(fieldName).isEmpty()) {
complete_ = Boolean.FALSE;
break;
}
}
if(complete_ == null) { complete_ = Boolean.TRUE; }
}
return complete_;
}
private Document getConfig() {
Map<String, Object> requestScope = FrameworkUtils.getRequestScope();
String key = serialVersionUID + "document";
if(!requestScope.containsKey(key)) {
requestScope.put(key, FrameworkUtils.getDatabase().getDocumentWithKey("AppConfig", true));
}
return (Document)requestScope.get(key);
}
}