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(); } }