package org.aplikator.server.descriptor;
import java.util.ArrayList;
import java.util.List;
import org.aplikator.client.shared.descriptor.ApplicationDTO;
import org.aplikator.server.Configurator;
import org.aplikator.server.data.Context;
import org.aplikator.server.persistence.PersisterFactory;
import org.aplikator.server.persistence.search.SearchFactory;
public abstract class Application {
protected List<Menu> menus = new ArrayList<Menu>();
protected boolean showNavigation = true;
protected String defaultActionToken = null;
protected Application() {
}
private static Application instance() {
if (SearchFactory.isSearchEnabled()) {
SearchFactory.get();
}
@SuppressWarnings("rawtypes")
Class clazz;
try {
String cname = Configurator.get().getConfig().getString(Configurator.STRUCTURE);
clazz = Class.forName(cname);
} catch (ClassNotFoundException e) {
throw new IllegalStateException(e);
}
try {
Application app = (Application) clazz.newInstance();
app.initialize();
return app;
} catch (InstantiationException e) {
throw new IllegalStateException(e);
} catch (IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
public static Application get() {
return LazyHolder.instance;
}
public abstract void initialize();
public Application addMenu(Menu menu) {
menus.add(menu);
return this;
}
public void setShowNavigation(boolean showNavigation) {
this.showNavigation = showNavigation;
}
public void setDefaultAction(String defaultAction) {
this.defaultActionToken = defaultAction;
}
public ApplicationDTO getApplicationDTO(Context ctx) {
//System.out.println("GETAPPLICATION USER:" + ctx.getHttpServletRequest().getRemoteUser());
ApplicationDTO retval = new ApplicationDTO(ctx.getHttpServletRequest().getRemoteUser(), ctx.getUserLocale().getLanguage());
for (Menu m : menus) {
retval.addMenu(m.getMenuDTO(ctx));
}
retval.setBrand(Configurator.get().getLocalizedString(Configurator.BRAND, ctx.getUserLocale()));
retval.setShowNavigation(showNavigation);
if (!retval.getMenus().isEmpty()) {
retval.setDefaultAction(defaultActionToken);
} else {
retval.setDefaultAction("login");
}
/*Set<Entry<String, ConfigValue>> configSet = Configurator.get().getConfig().entrySet();
for (Entry<String, ConfigValue> entry : configSet) {
if (entry.getKey().startsWith("aplikator")) {
retval.setConfigString(entry.getKey(), entry.getValue().render());
}
}*/
retval.getConfig().putAll(Configurator.get().getSystemLabels(ctx.getUserLocale()));
return retval;
}
public void onLogin(Object principal, Context ctx) {
}
public void onLogout(Object principal, Context ctx) {
}
public String createLocalizedIndex(boolean updateDB) {
return PersisterFactory.getPersister().createLocalizedIndex(updateDB);
}
public String generateDDL(boolean updateDB, boolean checkDB) {
return PersisterFactory.getPersister().generateDDL(updateDB, checkDB);
}
// singleton
private static class LazyHolder {
private static Application instance = instance();
}
}