package fi.otavanopisto.pyramus.views.system; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import fi.internetix.smvc.controllers.PageRequestContext; import fi.otavanopisto.pyramus.dao.DAOFactory; import fi.otavanopisto.pyramus.dao.system.SettingDAO; import fi.otavanopisto.pyramus.dao.system.SettingKeyDAO; import fi.otavanopisto.pyramus.domainmodel.system.Setting; import fi.otavanopisto.pyramus.domainmodel.system.SettingKey; import fi.otavanopisto.pyramus.framework.PyramusFormViewController; import fi.otavanopisto.pyramus.framework.UserRole; /** * The controller responsible of the system settings view of the application. */ public class SystemSettingsViewController extends PyramusFormViewController { @Override public void processForm(PageRequestContext requestContext) { SettingDAO settingDAO = DAOFactory.getInstance().getSettingDAO(); SettingKeyDAO settingKeyDAO = DAOFactory.getInstance().getSettingKeyDAO(); Map<String, String> settings = new HashMap<>(); List<SettingKey> settingKeys = settingKeyDAO.listAll(); for (SettingKey settingKey : settingKeys) { Setting setting = settingDAO.findByKey(settingKey); if (setting != null) settings.put(settingKey.getName(), setting.getValue()); } requestContext.getRequest().setAttribute("settingKeys", settingKeys); requestContext.getRequest().setAttribute("settings", settings); requestContext.setIncludeJSP("/templates/system/systemsettings.jsp"); } @Override public void processSend(PageRequestContext requestContext) { SettingDAO settingDAO = DAOFactory.getInstance().getSettingDAO(); SettingKeyDAO settingKeyDAO = DAOFactory.getInstance().getSettingKeyDAO(); Long rowCount = requestContext.getLong("settingsTable.rowCount"); for (int i = 0; i < rowCount; i++) { String colPrefix = "settingsTable." + i; String key = requestContext.getString(colPrefix + ".key"); String value = requestContext.getString(colPrefix + ".value"); boolean hasValue = !StringUtils.isBlank(value); SettingKey settingKey = settingKeyDAO.findByName(key); Setting setting = settingDAO.findByKey(settingKey); if (setting != null) { if (!hasValue) settingDAO.delete(setting); else settingDAO.update(setting, settingKey, value); } else { if (hasValue) settingDAO.create(settingKey, value); } } requestContext.setRedirectURL(requestContext.getRequest().getContextPath() + "/system/systemsettings.page"); } /** * Returns the roles allowed to access this page. * * @return The roles allowed to access this page */ public UserRole[] getAllowedRoles() { return new UserRole[] { UserRole.ADMINISTRATOR }; } }