diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/AbstractSettingFormSingleValue.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/AbstractSettingFormSingleValue.java deleted file mode 100644 index de0399a83..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/AbstractSettingFormSingleValue.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.event.FormInitListener; -import com.arsdigita.bebop.event.FormProcessListener; -import com.arsdigita.bebop.event.FormSectionEvent; -import com.arsdigita.bebop.event.FormValidationListener; -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.UncheckedWrapperException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.apache.logging.log4j.util.Strings; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; - -import java.lang.reflect.Field; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * An abstract base class for a form for editing settings with a single value. - * - * @author Jens Pelzetter - * @param - */ -public abstract class AbstractSettingFormSingleValue extends Form { - - private static final Logger LOGGER = LogManager.getLogger( - AbstractSettingFormSingleValue.class); - - private static final String VALUE_FIELD = "valueField"; - - private final SaveCancelSection saveCancelSection; - - /** - * Constructor, initialises the form and the supporting widgets. - * - * @param configurationTab The configuration tab in which the form is shown. - * @param selectedConf Parameter containing the selected configuration - * class. - * @param selectedSetting Parameter containing the selected setting. - */ - public AbstractSettingFormSingleValue( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super("settingFormSingleValue", new BoxPanel(BoxPanel.VERTICAL)); - - add(new SettingFormHeader(configurationTab, - selectedConf, - selectedSetting)); - - add(new SettingFormCurrentValuePanel(selectedConf, selectedSetting)); - - final TextField valueField = new TextField(VALUE_FIELD); - valueField.setLabel(new GlobalizedMessage( - "ui.admin.configuration.setting.edit.new_value", ADMIN_BUNDLE)); - add(valueField); - - saveCancelSection = new SaveCancelSection(); - add(saveCancelSection); - - addInitListener(new InitListener(selectedConf, - selectedSetting, - valueField)); - - addValidationListener(new ValidationListener()); - - addProcessListener(new ProcessListener(configurationTab, - selectedConf, - selectedSetting)); - - } - - /** - * Converts a string to the value type of the setting. Must be overwritten - * by the none abstract sub classes. - * - * @param valueData The data to convert. - * - * @return The converted data. - */ - abstract T convertValue(final String valueData); - - /** - * {@link FormInitListener} for the form. Loads the current value of the - * setting from the database and puts it into the input field. - */ - private class InitListener implements FormInitListener { - - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - private final TextField valueField; - - public InitListener( - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting, - final TextField valueField) { - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - this.valueField = valueField; - } - - @Override - public void init(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration(confClass); - - final Object value; - try { - final Field field = confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)); - field.setAccessible(true); - value = field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn("Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - return; - } - - if (value == null) { - valueField.setValue(state, ""); - } else { - valueField.setValue(state, value.toString()); - } - } - - } - - /** - * {@link FormValidationListener} which checks if the value provided by the - * user can be converted into the type of the setting. - * - */ - private class ValidationListener implements FormValidationListener { - - @Override - public void validate(final FormSectionEvent event) - throws FormProcessException { - - final FormData data = event.getFormData(); - final PageState state = event.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - final String valueData = data.getString(VALUE_FIELD); - if (Strings.isBlank(valueData)) { - data.addError(VALUE_FIELD, - new GlobalizedMessage( - "ui.admin.configuration.setting.error.blank", - ADMIN_BUNDLE)); - } - try { - final T value = convertValue(valueData); - LOGGER.debug("New value {} is a valid BigDecimal.", value); - } catch (NumberFormatException ex) { - data.addError( - VALUE_FIELD, - new GlobalizedMessage( - "ui.admin.configuration.setting.error.incorrect_format", - ADMIN_BUNDLE)); - } - } - } - - } - - /** - * {@link FormProcessListener} to store the new value of the setting - * in the database. - */ - private class ProcessListener implements FormProcessListener { - - private final ConfigurationTab configurationTab; - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - - public ProcessListener( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - this.configurationTab = configurationTab; - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - } - - @Override - public void process(final FormSectionEvent event) - throws FormProcessException { - - final PageState state = event.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - final FormData data = event.getFormData(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - final String settingName = selectedSetting.getSelectedKey(state); - - final Object config = confManager.findConfiguration(confClass); - - final Field field; - try { - field = confClass.getDeclaredField(settingName); - field.setAccessible(true); - } catch (NoSuchFieldException | SecurityException ex) { - LOGGER.error("Failed to retrieve field \"{}\" " - + "from configuration class \"{}\".", - settingName, - confClass.getName()); - LOGGER.error(ex); - throw new FormProcessException( - String.format( - "Failed to retrieve field \"%s\" " - + "from configuration class \"%s\".", - settingName, - confClass.getName()), - new GlobalizedMessage( - "ui.admin.configuration.setting.failed_to_set_value", - ADMIN_BUNDLE), - ex); - } - - final String valueData = data.getString(VALUE_FIELD); - - final T value = convertValue(valueData); - - try { - field.set(config, value); - confManager.saveConfiguration(config); - configurationTab.hideSettingForms(state); - } catch (IllegalArgumentException | IllegalAccessException ex) { - LOGGER.error("Failed to change value of field \"{}\" " - + "of configuration class \"{}\".", - settingName, - confClass.getName()); - LOGGER.error(ex); - throw new FormProcessException( - String.format( - "Failed to change value of field \"%s\" " - + "of configuration class \"%s\".", - settingName, - confClass.getName()), - new GlobalizedMessage( - "ui.admin.configuration.setting.failed_to_set_value", - ADMIN_BUNDLE), - ex); - } - } - - configurationTab.hideSettingForms(state); - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationTab.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationTab.java deleted file mode 100644 index 3f0307cef..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationTab.java +++ /dev/null @@ -1,576 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.ActionLink; -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.Page; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SegmentedPanel; -import com.arsdigita.bebop.form.Submit; -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.parameters.StringParameter; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.toolbox.ui.LayoutPanel; -import com.arsdigita.util.UncheckedWrapperException; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationInfo; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.l10n.GlobalizationHelper; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * Tab for the admin application containing the UI to manage the settings in the - * various configuration classes. - * - * @author Jens Pelzetter - */ -public class ConfigurationTab extends LayoutPanel { - - private static final String CONF_CLASSES_FILTER = "confClassesFilter"; - - /** - * Parameter for the selected configuration. - */ - private final StringParameter selectedConfParam; - private final ParameterSingleSelectionModel selectedConf; - - /** - * Parameter for the selected setting. - */ - private final StringParameter selectedSettingParam; - private final ParameterSingleSelectionModel selectedSetting; - - /** - * Parameter for the selected value of multi-value settings. - */ - private final StringParameter selectedValueParam; - private final ParameterSingleSelectionModel selectedValue; - - /** - * Heading of the table of configurations. - */ - private final Label confClassesFilterHeading; - /** - * Form for filtering the table of configurations. - */ - private final Form confClassesFilterForm; - /** - * The table which lists all available configurations. - */ - private final ConfigurationsTable configurationsTable; - - /** - * Link to go back to the listing of configurations. - */ - private final ActionLink configurationBackLink; - /** - * Heading for the list of settings of a configuration. - */ - private final Label configurationHeading; - /** - * The table which lists a settings of configuration. - */ - private final ConfigurationTable configurationTable; - - /** - * The form for editing a setting of the type {@code boolean}. - */ - private final SettingFormBoolean settingFormBoolean; - /** - * The form for editing a setting of the type {@code long}. - */ - private final SettingFormLong settingFormLong; - /** - * The form for editing a setting of the type {@code double}. - */ - private final SettingFormDouble settingFormDouble; - /** - * The form for editing a setting of the type {@code BigDecimal}. - */ - private final SettingFormBigDecimal settingFormBigDecimal; - /** - * The form for editing a setting of the type {@code String}. - */ - private final SettingFormString settingFormString; - /** - * The form for editing a setting of the type {@code LocalizedString}. - */ - private final SettingEditorLocalizedString settingEditorLocalizedString; - /** - * The form for editing a setting of the type {@code List}. - */ - private final SettingEditorStringList settingEditorStringList; - /** - * The form for editing a setting of the type {@code Set}. - */ - private final SettingEditorEnum settingEditorEnum; - - /** - * Initialises the parameters, widgets and forms. - */ - public ConfigurationTab() { - super(); - - setClassAttr("sidebarNavPanel"); - - selectedConfParam = new StringParameter("selectedConfiguration"); - selectedConf = new ParameterSingleSelectionModel<>(selectedConfParam); - - selectedSettingParam = new StringParameter("selectedSetting"); - selectedSetting = new ParameterSingleSelectionModel<>( - selectedSettingParam); - - selectedValueParam = new StringParameter("selectedValue"); - selectedValue = new ParameterSingleSelectionModel<>(selectedValueParam); - - final SegmentedPanel left = new SegmentedPanel(); - - confClassesFilterHeading = new Label(new GlobalizedMessage( - "ui.admin.configuration.classes.filter.heading", ADMIN_BUNDLE)); - - confClassesFilterForm = new Form("confClassesForm"); - final TextField confClassesFilter = new TextField(CONF_CLASSES_FILTER); - confClassesFilterForm.add(confClassesFilter); - confClassesFilterForm.add(new Submit(new GlobalizedMessage( - "ui.admin.configuration.classes.filter.submit", ADMIN_BUNDLE))); - final ActionLink clearLink = new ActionLink(new GlobalizedMessage( - "ui.admin.configuration.classes.filter.clear", ADMIN_BUNDLE)); - clearLink.addActionListener(e -> { - final PageState state = e.getPageState(); - confClassesFilter.setValue(state, null); - }); - confClassesFilterForm.add(clearLink); - left.addSegment(confClassesFilterHeading, confClassesFilterForm); - - setLeft(left); - - final BoxPanel body = new BoxPanel(BoxPanel.VERTICAL); - configurationsTable = new ConfigurationsTable( - this, selectedConf, confClassesFilter); - body.add(configurationsTable); - - configurationBackLink = new ActionLink(new GlobalizedMessage( - "ui.admin.configuration.back_to_configurations", - ADMIN_BUNDLE)); - configurationBackLink.addActionListener(e -> { - final PageState state = e.getPageState(); - hideConfiguration(state); - }); - body.add(configurationBackLink); - configurationHeading = new Label(e -> { - //This print listener includes the (localised title) of the selected - //configuration in the heading - final PageState state = e.getPageState(); - - final Class confClass; - try { - confClass = Class.forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException( - String.format("Configuration class \"%s\" not found.", - selectedConf.getSelectedKey(state)), - ex); - } - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - final ConfigurationInfo confInfo = confManager.getConfigurationInfo( - confClass); - final GlobalizationHelper globalizationHelper = cdiUtil.findBean( - GlobalizationHelper.class); - final Label target = (Label) e.getTarget(); - final String confTitle = confInfo.getTitle(globalizationHelper - .getNegotiatedLocale()); - target.setLabel(new GlobalizedMessage( - "ui.admin.configuration.editing_configuration", - ADMIN_BUNDLE, - new String[]{confTitle})); - }); - configurationHeading.setClassAttr("heading"); - body.add(configurationHeading); - configurationTable = new ConfigurationTable(this, - selectedConf, - selectedSetting); - body.add(configurationTable); - - settingFormBoolean = new SettingFormBoolean(this, - selectedConf, - selectedSetting); - body.add(settingFormBoolean); - - settingFormLong = new SettingFormLong(this, - selectedConf, - selectedSetting); - body.add(settingFormLong); - - settingFormDouble = new SettingFormDouble(this, - selectedConf, - selectedSetting); - body.add(settingFormDouble); - - settingFormBigDecimal = new SettingFormBigDecimal(this, - selectedConf, - selectedSetting); - body.add(settingFormBigDecimal); - - settingFormString = new SettingFormString(this, - selectedConf, - selectedSetting); - body.add(settingFormString); - - settingEditorLocalizedString = new SettingEditorLocalizedString( - this, selectedConf, selectedSetting, selectedValue); - body.add(settingEditorLocalizedString); - - settingEditorStringList = new SettingEditorStringList( - this, selectedConf, selectedSetting, selectedValue); - body.add(settingEditorStringList); - - settingEditorEnum = new SettingEditorEnum( - this, selectedConf, selectedSetting, selectedValue); - body.add(settingEditorEnum); - - setBody(body); - } - - /** - * Registers all forms and widgets in the page for visibility management and - * registers all parameters. The method is called by Bebop when the tab is - * rendered. - * - * @param page The page which this tab is part of. - */ - @Override - public void register(final Page page) { - super.register(page); - - page.addGlobalStateParam(selectedConfParam); - page.addGlobalStateParam(selectedSettingParam); - page.addGlobalStateParam(selectedValueParam); - - page.setVisibleDefault(confClassesFilterHeading, true); - page.setVisibleDefault(confClassesFilterForm, true); - page.setVisibleDefault(configurationsTable, true); - - page.setVisibleDefault(configurationBackLink, false); - page.setVisibleDefault(configurationHeading, false); - page.setVisibleDefault(configurationTable, false); - - page.setVisibleDefault(settingFormBoolean, false); - page.setVisibleDefault(settingFormLong, false); - page.setVisibleDefault(settingFormDouble, false); - page.setVisibleDefault(settingFormBigDecimal, false); - page.setVisibleDefault(settingFormString, false); - page.setVisibleDefault(settingEditorLocalizedString, false); - page.setVisibleDefault(settingEditorStringList, false); - page.setVisibleDefault(settingEditorEnum, false); - } - - /** - * Shows the {@link #configurationsTable} and hides all other widgets and - * forms. - * - * @param state The current {@link PageState}. - */ - protected void showConfigurationsTable(final PageState state) { - confClassesFilterHeading.setVisible(state, true); - confClassesFilterForm.setVisible(state, true); - configurationsTable.setVisible(state, true); - - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Hides the {@link #configurationsTable} and its supporting widgets. - * - * @param state The current {@link PageState}. - */ - protected void hideConfigurationsTable(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - } - - /** - * Shows the {@link #configurationTable} which lists all settings of a - * configuration. - * - * @param state The current {@link PageState}. - */ - protected void showConfiguration(final PageState state) { - hideConfigurationsTable(state); - hideSettingForms(state); - - configurationBackLink.setVisible(state, true); - configurationHeading.setVisible(state, true); - configurationTable.setVisible(state, true); - } - - /** - * Hides the configuration table and resets the {@link #selectedConf} - * parameter. - * - * @param state The current {@link PageState}. - */ - protected void hideConfiguration(final PageState state) { - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - selectedConf.clearSelection(state); - - showConfigurationsTable(state); - } - - /** - * Shows the {@link #settingFormBigDecimal}. - * - * @param state The current {@link PageState}. - */ - protected void showBigDecimalSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, true); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Shows the {@link #settingFormBoolean}. - * - * @param state The current {@link PageState}. - */ - protected void showBooleanSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, true); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Shows the {@link #settingFormDouble}. - * - * @param state The current {@link PageState}. - */ - protected void showDoubleSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, true); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Shows the {@link #settingEditorEnum}. - * - * @param state The current {@link PageState}. - */ - protected void showEnumSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, true); - } - - /** - * Show the {@link #settingEditorLocalizedString}. - * - * @param state The current {@link PageState}. - */ - protected void showLocalizedStringSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, true); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Shows the {@link #settingFormLong}. - * - * @param state The current {@link PageState}. - */ - protected void showLongSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, true); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Shows the {@link #settingEditorStringList}. - * - * @param state The current {@link PageState}. - */ - protected void showStringListSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, true); - settingEditorEnum.setVisible(state, false); - } - - /** - * Shows the {@link #settingFormString}. - * - * @param state The current {@link PageState}. - */ - protected void showStringSettingForm(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, false); - configurationHeading.setVisible(state, false); - configurationTable.setVisible(state, false); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, true); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - } - - /** - * Hides all settings forms/editors and resets the {@link #selectedSetting} - * and {@link #selectedValue} parameters. - * - * @param state The current {@link PageState}. - */ - protected void hideSettingForms(final PageState state) { - confClassesFilterHeading.setVisible(state, false); - confClassesFilterForm.setVisible(state, false); - configurationsTable.setVisible(state, false); - - configurationBackLink.setVisible(state, true); - configurationHeading.setVisible(state, true); - configurationTable.setVisible(state, true); - - settingFormBoolean.setVisible(state, false); - settingFormLong.setVisible(state, false); - settingFormDouble.setVisible(state, false); - settingFormBigDecimal.setVisible(state, false); - settingFormString.setVisible(state, false); - settingEditorLocalizedString.setVisible(state, false); - settingEditorStringList.setVisible(state, false); - settingEditorEnum.setVisible(state, false); - - selectedSetting.clearSelection(state); - selectedValue.clearSelection(state); - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationTable.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationTable.java deleted file mode 100644 index 9168a9f22..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationTable.java +++ /dev/null @@ -1,352 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.LockableImpl; -import com.arsdigita.util.UncheckedWrapperException; - -import java.lang.reflect.Field; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.configuration.SettingInfo; -import org.libreccm.configuration.SettingManager; -import org.libreccm.l10n.GlobalizationHelper; -import org.libreccm.l10n.LocalizedString; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Set; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * This table lists all settings of a configuration class. The table shows the - * current value and the description of each setting. If there is localised - * label for the setting this label is used, otherwise the name of the setting - * is used. - * - * @author Jens Pelzetter - */ -public class ConfigurationTable extends Table { - - private static final Logger LOGGER = LogManager.getLogger( - ConfigurationTable.class); - - private static final int COL_SETTING_LABEL = 0; - private static final int COL_SETTING_VALUE = 1; - private static final int COL_SETTING_DESC = 2; - private static final int COL_EDIT_SETTING = 3; - - private ParameterSingleSelectionModel selectedConf; - private ParameterSingleSelectionModel selectedSetting; - - public ConfigurationTable( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super(); - - setIdAttr("configurationTable"); - - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - - setEmptyView(new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.none", ADMIN_BUNDLE))); - - final TableColumnModel columnModel = getColumnModel(); - columnModel.add(new TableColumn( - COL_SETTING_LABEL, - new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.table.col_setting_label.header", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_SETTING_VALUE, - new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.table.col_setting_value.header", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_SETTING_DESC, - new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.table.col_setting_desc.header", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_EDIT_SETTING, - new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.table.col_edit_setting.header", - ADMIN_BUNDLE)))); - - columnModel.get(COL_EDIT_SETTING).setCellRenderer( - new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - return new ControlLink((Component) value); - } - - }); - - addTableActionListener(new TableActionListener() { - - @Override - public void cellSelected(final TableActionEvent event) { - final PageState state = event.getPageState(); - - if (event.getColumn() == COL_EDIT_SETTING) { - final String settingName = (String) event.getRowKey(); - selectedSetting.setSelectedKey(state, settingName); - - switch (getTypeOfSelectedSetting(state)) { - case "boolean": - LOGGER.debug("Setting is of type boolean"); - configurationTab.showBooleanSettingForm(state); - break; - case "long": - LOGGER.debug("Setting is of type long"); - configurationTab.showLongSettingForm(state); - break; - case "double": - LOGGER.debug("Setting is of type double"); - configurationTab.showDoubleSettingForm(state); - break; - case "java.math.BigDecimal": - LOGGER.debug("Setting is of type BigDecimal"); - configurationTab.showBigDecimalSettingForm(state); - break; - case "org.libreccm.l10n.LocalizedString": - LOGGER.debug("Setting is of type LocalizedString"); - configurationTab.showLocalizedStringSettingForm( - state); - break; - case "java.lang.String": - LOGGER.debug("Setting is of type String"); - configurationTab.showStringSettingForm(state); - break; - case "java.util.Set": - LOGGER.debug("Setting is of type Enum"); - configurationTab.showEnumSettingForm(state); - break; - case "java.util.List": - LOGGER.debug("Setting is of type List"); - configurationTab.showStringListSettingForm(state); - break; - default: - throw new IllegalArgumentException(String.format( - "Unknown setting type \"%s\".", - getTypeOfSelectedSetting(state))); - } - - } - } - - @Override - public void headSelected(final TableActionEvent event) { - //Nothing - } - - }); - - setModelBuilder(new ConfigurationTableModelBuilder()); - } - - private String getTypeOfSelectedSetting(final PageState state) { - final Class confClass; - try { - confClass = Class.forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - LOGGER.error("Configuration class '{}' not found.", - selectedConf.getSelectedKey(state)); - throw new UncheckedWrapperException(String.format( - "Configuration class '%s not found'", - selectedConf.getSelectedKey(state)), ex); - } - - final SettingManager settingManager = CdiUtil.createCdiUtil().findBean( - SettingManager.class); - final SettingInfo info = settingManager.getSettingInfo(confClass, - selectedSetting. - getSelectedKey( - state)); - - return info.getValueType(); - - } - - private class ConfigurationTableModelBuilder - extends LockableImpl implements TableModelBuilder { - - @Override - public TableModel makeModel(final Table table, final PageState state) { - final ConfigurationManager confManager = CdiUtil.createCdiUtil() - .findBean(ConfigurationManager.class); - final Class confClass; - try { - confClass = Class.forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - LOGGER.error("Configuration class '{}' not found.", - selectedConf.getSelectedKey(state)); - throw new UncheckedWrapperException(String.format( - "Configuration class '%s not found'", - selectedConf.getSelectedKey(state)), ex); - } - - final Object configuration = confManager - .findConfiguration(confClass); - - return new ConfigurationTableModel(configuration, state); - } - - } - - private class ConfigurationTableModel implements TableModel { - - private final Object configuration; - - private final ConfigurationManager confManager; - private final SettingManager settingManager; - private final GlobalizationHelper globalizationHelper; - - private final List settings; - private int index = -1; - - public ConfigurationTableModel(final Object configuration, - final PageState state) { - this.configuration = configuration; - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - confManager = cdiUtil.findBean(ConfigurationManager.class); - settingManager = cdiUtil.findBean(SettingManager.class); - globalizationHelper = cdiUtil.findBean(GlobalizationHelper.class); - - settings = settingManager.getAllSettings(configuration.getClass()); - } - - @Override - public int getColumnCount() { - return 4; - } - - @Override - public boolean nextRow() { - index++; - return index < settings.size(); - } - - @Override - public Object getElementAt(final int columnIndex) { - final String setting = settings.get(index); - final SettingInfo settingInfo = settingManager.getSettingInfo( - configuration.getClass(), setting); - - switch (columnIndex) { - case COL_SETTING_LABEL: - return settingInfo.getLabel(globalizationHelper - .getNegotiatedLocale()); - case COL_SETTING_VALUE: { - try { - final Field field = configuration.getClass(). - getDeclaredField(setting); - field.setAccessible(true); - return buildValueColumn(settingInfo, - field.get(configuration)); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException ex) { - LOGGER.error("Failed to read value from configuration.", - ex); - return new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.read_error", - ADMIN_BUNDLE)); - } - } - case COL_SETTING_DESC: - return settingInfo.getDescription(globalizationHelper - .getNegotiatedLocale()); - case COL_EDIT_SETTING: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.settings.edit", ADMIN_BUNDLE)); - default: - throw new IllegalArgumentException("Illegal column index"); - } - } - - private String buildValueColumn(final SettingInfo settingInfo, - final Object settingValue) { - switch (settingInfo.getValueType()) { - case "java.util.List": { - @SuppressWarnings("unchecked") - final List value = (List) settingValue; - return String.join(", ", value); - } - case "java.util.Set": { - @SuppressWarnings("unchecked") - final Set value = (Set) settingValue; - return String.join(", ", value); - } - case "org.libreccm.l10n.LocalizedString": { - final LocalizedString value = (LocalizedString) settingValue; - final List entries = new ArrayList<>(); - value.getValues().entrySet().forEach(e -> { - entries.add(String.format("%s: %s", - e.getKey(), - e.getValue())); - }); - - return String.join("; ", entries); - } - default: { - return Objects.toString(settingValue); - } - } - } - - @Override - public Object getKeyAt(final int columnIndex - ) { - return settings.get(index); - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationsTable.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationsTable.java deleted file mode 100644 index 945b382ae..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/ConfigurationsTable.java +++ /dev/null @@ -1,228 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.LockableImpl; - -import org.apache.logging.log4j.util.Strings; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationInfo; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.l10n.GlobalizationHelper; - -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import java.util.SortedSet; -import java.util.stream.Collectors; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * This table lists all available configuration classes together with their - * descriptions (if any). If there is localised title for the configuration this - * title is used, otherwise the fully qualified name of the configuration is - * used. - * - * @author Jens Pelzetter - */ -public class ConfigurationsTable extends Table { - - private static final int COL_TITLE = 0; - private static final int COL_DESC = 1; - - public ConfigurationsTable( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final TextField confClassesFilter) { - - super(); - - setIdAttr("configurationsTable"); - - setEmptyView(new Label(new GlobalizedMessage( - "ui.admin.configuration.configurations.none", ADMIN_BUNDLE))); - - final TableColumnModel columnModel = getColumnModel(); - columnModel.add(new TableColumn( - COL_TITLE, - new Label(new GlobalizedMessage( - "ui.admin.configuration.configurations.table.name", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_DESC, - new Label(new GlobalizedMessage( - "ui.admin.configuration.configurations.table.desc", - ADMIN_BUNDLE)))); - - columnModel.get(COL_TITLE).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - return new ControlLink((String) value); - } - - }); - - addTableActionListener(new TableActionListener() { - - @Override - public void cellSelected(final TableActionEvent event) { - final PageState state = event.getPageState(); - - if (event.getColumn() == COL_TITLE) { - final String confClassName = (String) event.getRowKey(); - selectedConf.setSelectedKey(state, confClassName); - - configurationTab.showConfiguration(state); - } - } - - @Override - public void headSelected(final TableActionEvent event) { - //Nothing - } - - }); - - setModelBuilder(new ConfigurationsTableModelBuilder(confClassesFilter)); - } - - private class ConfigurationsTableModelBuilder - extends LockableImpl implements TableModelBuilder { - - private final TextField confClassesFilter; - - public ConfigurationsTableModelBuilder( - final TextField confClassesField) { - - this.confClassesFilter = confClassesField; - } - - @Override - public TableModel makeModel(final Table table, - final PageState state) { - table.getRowSelectionModel().clearSelection(state); - - return new ConfigurationsTableModel(confClassesFilter, state); - } - - } - - private class ConfigurationsTableModel implements TableModel { - - private final List> configurations; - private int index = -1; - private final ConfigurationManager confManager; - private final Locale negoiatedLocale; - - public ConfigurationsTableModel(final TextField confClassesFilter, - final PageState state) { - final String filterTerm = (String) confClassesFilter - .getValue(state); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - confManager = cdiUtil.findBean(ConfigurationManager.class); - final GlobalizationHelper globalizationHelper = cdiUtil.findBean( - GlobalizationHelper.class); - negoiatedLocale = globalizationHelper.getNegotiatedLocale(); - final SortedSet> confs = confManager - .findAllConfigurations(); - configurations = confs.stream() - .filter(c -> { - final ConfigurationInfo info = confManager - .getConfigurationInfo(c); -// return c.getName().startsWith(filterTerm); - if (filterTerm == null || filterTerm.isEmpty()) { - return true; - } else { - return info.getTitle(negoiatedLocale).startsWith( - filterTerm); - } - }) - .collect(Collectors.toCollection(ArrayList::new)); - configurations.sort((c1, c2) -> { -// return c1.getName().compareTo(c2.getName()); - final ConfigurationInfo info1 = confManager - .getConfigurationInfo(c1); - final ConfigurationInfo info2 = confManager - .getConfigurationInfo(c2); - - return info1.getTitle(negoiatedLocale) - .compareTo(info2.getTitle(negoiatedLocale)); - }); - } - - @Override - public int getColumnCount() { - return 2; - } - - @Override - public boolean nextRow() { - index++; - return index < configurations.size(); - } - - @Override - public Object getElementAt(final int columnIndex) { - final ConfigurationInfo info = confManager.getConfigurationInfo( - configurations.get(index)); - switch (columnIndex) { - case COL_TITLE: - if (Strings.isBlank(info.getTitle(negoiatedLocale))) { - return configurations.get(index).getSimpleName(); - } else { - return info.getTitle(negoiatedLocale); - } - case COL_DESC: - return info.getDescription(negoiatedLocale); - default: - throw new IllegalArgumentException("Illegal column index"); - } - } - - @Override - public Object getKeyAt(final int columnIndex) { - return configurations.get(index).getName(); - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorEnum.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorEnum.java deleted file mode 100644 index ee7e302fa..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorEnum.java +++ /dev/null @@ -1,433 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.LockableImpl; -import com.arsdigita.util.UncheckedWrapperException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.configuration.EnumSetting; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * Editor for {@link EnumSetting}s. The editor consists of the usual header (see - * {@link SettingFormHeader}) which is used by all setting forms/editors, a - * table which displays all current values together with links for editing and - * deleting the values and a form for adding and editing values. - * - * @author Jens Pelzetter - */ -public class SettingEditorEnum extends BoxPanel { - - private static final Logger LOGGER = LogManager.getLogger( - SettingEditorEnum.class); - - private static final int COL_VALUE = 0; - private static final int COL_EDIT = 1; - private static final int COL_DEL = 2; - - private final ConfigurationTab configurationTab; - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - private final ParameterSingleSelectionModel selectedValue; - - public SettingEditorEnum( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting, - final ParameterSingleSelectionModel selectedValue) { - - super(BoxPanel.VERTICAL); - - this.configurationTab = configurationTab; - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - this.selectedValue = selectedValue; - - add(new SettingFormHeader(configurationTab, - selectedConf, - selectedSetting)); - - add(new ValuesTable()); - - add(new ValueForm()); - } - - private class ValuesTable extends Table { - - public ValuesTable() { - - super(); - - setIdAttr("enumValues"); - - setEmptyView(new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.no_values", ADMIN_BUNDLE))); - - final TableColumnModel columnModel = getColumnModel(); - columnModel.add(new TableColumn( - COL_VALUE, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.col_value", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_EDIT, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.col_edit", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_DEL, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.col_del", - ADMIN_BUNDLE)))); - - columnModel.get(COL_EDIT).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - return new ControlLink((Component) value); - } - - }); - - columnModel.get(COL_DEL).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - if (value == null) { - return new Text(""); - } else { - final ControlLink link = new ControlLink( - (Component) value); - link.setConfirmation(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.del_confirm", - ADMIN_BUNDLE)); - - return link; - } - } - - }); - - addTableActionListener(new TableActionListener() { - - @Override - @SuppressWarnings("unchecked") - public void cellSelected(final TableActionEvent event) { - final PageState state = event.getPageState(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil - .findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final Set values; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - values = (Set) field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - switch (event.getColumn()) { - case COL_EDIT: { - selectedValue.setSelectedKey(state, event - .getRowKey()); - - break; - } - case COL_DEL: { - values.remove(event.getRowKey()); - - confManager.saveConfiguration(config); - - break; - } - } - } - - @Override - public void headSelected(final TableActionEvent event) { - //Notthing - } - - }); - - setModelBuilder(new ValuesTableModelBuilder()); - - } - - } - - private class ValuesTableModelBuilder - extends LockableImpl - implements TableModelBuilder { - - @Override - public TableModel makeModel(final Table table, - final PageState state) { - table.getRowSelectionModel().clearSelection(state); - - return new ValuesTableModel(state); - } - - } - - private class ValuesTableModel implements TableModel { - - private final List values; - private int index = -1; - - public ValuesTableModel(final PageState state) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration(confClass); - try { - @SuppressWarnings("unchecked") - final Field field = confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)); - field.setAccessible(true); - final Set valuesSet = (Set) field.get(config); - - values = new ArrayList<>(valuesSet); - - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn("Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - throw new UncheckedWrapperException(ex); - } - } - - @Override - public int getColumnCount() { - return 3; - } - - @Override - public boolean nextRow() { - index++; - return index < values.size(); - } - - @Override - public Object getElementAt(final int columnIndex) { - switch (columnIndex) { - case COL_VALUE: - return values.get(index); - case COL_EDIT: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.value.edit", - ADMIN_BUNDLE)); - case COL_DEL: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.value.del", - ADMIN_BUNDLE)); - default: - throw new IllegalArgumentException( - "Not a valid column index"); - } - } - - @Override - public Object getKeyAt(final int columnIndex) { - return values.get(index); - } - - } - - private class ValueForm extends Form { - - private final String VALUE = "value"; - - @SuppressWarnings("unchecked") - public ValueForm() { - - super("settingEnumValueForm"); - - final TextField valueField = new TextField(VALUE); - valueField.setLabel(new GlobalizedMessage( - "ui.admin.configuration.setting.enum.value.label", - ADMIN_BUNDLE)); - add(valueField); - - final SaveCancelSection saveCancelSection = new SaveCancelSection(); - add(saveCancelSection); - - addInitListener(e -> { - final PageState state = e.getPageState(); - - if (selectedValue.getSelectedKey(state) != null) { - - valueField.setValue(state, selectedValue.getSelectedKey( - state)); - } - }); - - addProcessListener(e -> { - final PageState state = e.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final Set enumSetting; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - final Object value = field.get(config); - - if (value == null) { - enumSetting = new HashSet<>(); - confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)).set(config, - enumSetting); - } else { - enumSetting = (Set) value; - } - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - final FormData data = e.getFormData(); - final String valueData = data.getString(VALUE); - if (selectedValue.getSelectedKey(state) == null) { - enumSetting.add(valueData); - } else { - final String selected = selectedValue.getSelectedKey( - state); - enumSetting.remove(selected); - enumSetting.add(valueData); - } - confManager.saveConfiguration(config); - } - - selectedValue.clearSelection(state); - valueField.setValue(state, null); - }); - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorLocalizedString.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorLocalizedString.java deleted file mode 100644 index ff3bff15a..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorLocalizedString.java +++ /dev/null @@ -1,632 +0,0 @@ -/*p - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.bebop.form.SingleSelect; -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.kernel.KernelConfig; -import com.arsdigita.util.LockableImpl; -import com.arsdigita.util.UncheckedWrapperException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.l10n.LocalizedString; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Locale; -import java.util.Set; -import java.util.TooManyListenersException; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * Editor for {@link LocalizedStringSetting}s. The editor consists of the usual - * header (see {@link SettingFormHeader}) which is used by all setting - * forms/editors, a table which displays all current values together with links - * for editing and deleting the values and a form for adding and editing values. - * - * @author Jens Pelzetter - */ -public class SettingEditorLocalizedString extends BoxPanel { - - private final static Logger LOGGER = LogManager.getLogger( - SettingEditorLocalizedString.class); - - private static final int COL_LOCALE = 0; - private static final int COL_VALUE = 1; - private static final int COL_EDIT = 2; - private static final int COL_DEL = 3; - - private final ConfigurationTab configurationTab; - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - private final ParameterSingleSelectionModel selectedValue; - - public SettingEditorLocalizedString( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting, - final ParameterSingleSelectionModel selectedValue) { - - super(BoxPanel.VERTICAL); - - this.configurationTab = configurationTab; - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - this.selectedValue = selectedValue; - - add(new SettingFormHeader(configurationTab, - selectedConf, - selectedSetting)); - - add(new ValuesTable()); - - add(new ValueForm()); - - } - - private class ValuesTable extends Table { - - public ValuesTable() { - - super(); - - setIdAttr("localizedStringSettingValues"); - - setEmptyView(new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.no_values", - ADMIN_BUNDLE))); - - final TableColumnModel columnModel = getColumnModel(); - columnModel.add(new TableColumn( - COL_LOCALE, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.col_lang", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_VALUE, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.col_value", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_EDIT, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.col_edit", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_DEL, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.col_del", - ADMIN_BUNDLE)))); - - columnModel.get(COL_EDIT).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - return new ControlLink((Component) value); - } - - }); - - columnModel.get(COL_DEL).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - if (value == null) { - return new Text(""); - } else { - final ControlLink link = new ControlLink( - (Component) value); - link.setConfirmation(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.del_confirm", - ADMIN_BUNDLE)); - return link; - } - } - - }); - - addTableActionListener(new TableActionListener() { - - @Override - public void cellSelected(final TableActionEvent event) { - final PageState state = event.getPageState(); - - switch (event.getColumn()) { - case COL_EDIT: - selectedValue.setSelectedKey(state, - event.getRowKey()); - break; - case COL_DEL: - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil - .findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final LocalizedString localizedStr; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - final Object value = field.get(config); - - if (value == null) { - localizedStr = new LocalizedString(); - field.set(config, localizedStr); - } else { - localizedStr = (LocalizedString) value; - } - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - final Locale locale = new Locale((String) event - .getRowKey()); - - localizedStr.removeValue(locale); - - confManager.saveConfiguration(config); - - break; - } - } - - @Override - public void headSelected(final TableActionEvent event) { - //Nothing - } - - }); - - setModelBuilder(new ValuesTableModelBuilder()); - } - - } - - private class ValuesTableModelBuilder - extends LockableImpl - implements TableModelBuilder { - - @Override - public TableModel makeModel(final Table table, - final PageState state) { - table.getRowSelectionModel().clearSelection(state); - - return new ValuesTableModel(state); - } - - } - - private class ValuesTableModel implements TableModel { - - private final LocalizedString value; - private final List locales; - private int index = -1; - - public ValuesTableModel(final PageState state) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration(confClass); - - try { - final Field field = confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)); - field.setAccessible(true); - value = (LocalizedString) field.get(config); - - locales = new ArrayList<>(); - locales.addAll(value.getAvailableLocales()); - locales.sort((s1, s2) -> { - return s1.toString().compareTo(s2.toString()); - }); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn("Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - throw new UncheckedWrapperException(ex); - } - } - - @Override - public int getColumnCount() { - return 4; - } - - @Override - public boolean nextRow() { - index++; - return index < locales.size(); - } - - @Override - public Object getElementAt(final int columnIndex) { - final Locale locale = locales.get(index); - - switch (columnIndex) { - case COL_LOCALE: - return locale.toString(); - case COL_VALUE: - return value.getValue(locale); - case COL_EDIT: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.value.edit", - ADMIN_BUNDLE)); - case COL_DEL: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.title.del", - ADMIN_BUNDLE - )); - default: - throw new IllegalArgumentException( - "Not a valid column index"); - } - } - - @Override - public Object getKeyAt(final int columnIndex) { - return locales.get(index); - } - - } - - private class ValueForm extends Form { - - private static final String LOCALE_SELECT = "localeSelect"; - private static final String VALUE = "value"; - - private final SingleSelect localeSelect; - - public ValueForm() { - super("settingLocalizedStringValueForm"); - - localeSelect = new SingleSelect(LOCALE_SELECT); - localeSelect.setLabel(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.locale.label", - ADMIN_BUNDLE)); - - try { - localeSelect.addPrintListener(e -> { - final PageState state = e.getPageState(); - - if (selectedValue.getSelectedKey(state) == null) { - final ConfigurationManager confManager = CdiUtil - .createCdiUtil() - .findBean(ConfigurationManager.class); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final Object config = confManager.findConfiguration( - confClass); - - final LocalizedString value; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - value = (LocalizedString) field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - throw new UncheckedWrapperException( - String.format( - "Failed to read setting %s from configuration %s", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)), - ex); - } - - final Set supportedLanguages = KernelConfig - .getConfig().getSupportedLanguages(); - final Set assignedLanguages = new HashSet<>(); - value.getAvailableLocales().forEach(l -> { - assignedLanguages.add(l.toString()); - }); - - final SingleSelect target = (SingleSelect) e.getTarget(); - - target.clearOptions(); - - supportedLanguages.forEach(l -> { - if (!assignedLanguages.contains(l)) { - target.addOption(new Option(l, new Text(l))); - } - }); - } else { - final SingleSelect target = (SingleSelect) e.getTarget(); - - target.clearOptions(); - - final String language = selectedValue.getSelectedKey( - state); - target.addOption( - new Option(language, new Text(language))); - } - }); - } catch (TooManyListenersException ex) { - //We are in big trouble... - throw new UncheckedWrapperException(ex); - } - - add(localeSelect); - - final TextField localizedValue = new TextField(VALUE); - localizedValue.setLabel(new GlobalizedMessage( - "ui.admin.configuration.setting.localized_string.value.label", - ADMIN_BUNDLE)); - add(localizedValue); - - final SaveCancelSection saveCancelSection = new SaveCancelSection(); - add(saveCancelSection); - - addInitListener(e -> { - final PageState state = e.getPageState(); - if (selectedValue.getSelectedKey(state) != null) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - final LocalizedString localizedStr - = (LocalizedString) field.get( - config); - - final String value = localizedStr.getValue(new Locale( - selectedValue.getSelectedKey(state))); - - localizedValue.setValue(state, value); - - } catch (NoSuchFieldException | SecurityException | - IllegalAccessException | ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - } - }); - - addProcessListener(e -> { - final PageState state = e.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final LocalizedString localizedStr; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - final Object value = field.get(config); - - if (value == null) { - localizedStr = new LocalizedString(); - - field.set(config, localizedStr); - } else { - localizedStr = (LocalizedString) value; - } - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - final FormData data = e.getFormData(); - final Locale locale = new Locale(data.getString( - LOCALE_SELECT)); - final String valueData = data.getString(VALUE); - localizedStr.putValue(locale, valueData); - - confManager.saveConfiguration(config); - } - - selectedValue.clearSelection(state); - localeSelect.setValue(state, null); - localizedValue.setValue(state, null); - }); - } - - @Override - public boolean isVisible(final PageState state) { - if (super.isVisible(state)) { - - if (selectedValue.getSelectedKey(state) == null) { - final ConfigurationManager confManager = CdiUtil - .createCdiUtil() - .findBean(ConfigurationManager.class); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final Object config = confManager.findConfiguration( - confClass); - - final LocalizedString value; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - value = (LocalizedString) field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - throw new UncheckedWrapperException( - String.format( - "Failed to read setting %s from configuration %s", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)), - ex); - } - - final Set supportedLanguages = KernelConfig - .getConfig().getSupportedLanguages(); - final Set assignedLanguages = new HashSet<>(); - value.getAvailableLocales().forEach(l -> { - assignedLanguages.add(l.toString()); - }); - - return !assignedLanguages.equals(supportedLanguages); - } else { - return true; - } - - } else { - return false; - } - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorStringList.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorStringList.java deleted file mode 100644 index 6d1de5f80..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingEditorStringList.java +++ /dev/null @@ -1,591 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Component; -import com.arsdigita.bebop.ControlLink; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.Table; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.TableActionEvent; -import com.arsdigita.bebop.event.TableActionListener; -import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.table.TableCellRenderer; -import com.arsdigita.bebop.table.TableColumn; -import com.arsdigita.bebop.table.TableColumnModel; -import com.arsdigita.bebop.table.TableModel; -import com.arsdigita.bebop.table.TableModelBuilder; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.LockableImpl; -import com.arsdigita.util.UncheckedWrapperException; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.configuration.EnumSetting; - -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.List; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * Editor for {@link EnumSetting}s. The editor consists of the usual header (see - * {@link SettingFormHeader}) which is used by all setting forms/editors, a - * table which displays all current values together with links for moving, - * editing and deleting the values and a form for adding and editing values. - * - * @author Jens Pelzetter - */ -public class SettingEditorStringList extends BoxPanel { - - private static final Logger LOGGER = LogManager.getLogger( - SettingEditorStringList.class); - - private static final int COL_VALUE = 0; - private static final int COL_UP = 1; - private static final int COL_DOWN = 2; - private static final int COL_EDIT = 3; - private static final int COL_DEL = 4; - - private final ConfigurationTab configurationTab; - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - private final ParameterSingleSelectionModel selectedValue; - - public SettingEditorStringList( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting, - final ParameterSingleSelectionModel selectedValue) { - - super(BoxPanel.VERTICAL); - - this.configurationTab = configurationTab; - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - this.selectedValue = selectedValue; - - add(new SettingFormHeader(configurationTab, - selectedConf, - selectedSetting)); - - add(new ValuesTable()); - - add(new ValueForm()); - - } - - private class ValuesTable extends Table { - - public ValuesTable() { - - super(); - - setIdAttr("stringListValues"); - - setEmptyView(new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.no_values", - ADMIN_BUNDLE))); - - final TableColumnModel columnModel = getColumnModel(); - columnModel.add(new TableColumn( - COL_VALUE, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.col_value", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_UP, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.col_up", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_DOWN, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.col_down", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_EDIT, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.col_edit", - ADMIN_BUNDLE)))); - columnModel.add(new TableColumn( - COL_DEL, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.col_delete", - ADMIN_BUNDLE)))); - - columnModel.get(COL_UP).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - if (row > 0) { - return new ControlLink((Component) value); - } else { - return new Text(""); - } - } - - }); - - columnModel.get(COL_DOWN).setCellRenderer(new TableCellRenderer() { - - @Override - @SuppressWarnings("unchecked") - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil - .findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final List values; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - values = (List) field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - if (row < values.size()) { - return new ControlLink((Component) value); - } else { - return new Text(""); - } - } - - }); - - columnModel.get(COL_EDIT).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - return new ControlLink((Component) value); - } - - }); - - columnModel.get(COL_DEL).setCellRenderer(new TableCellRenderer() { - - @Override - public Component getComponent(final Table table, - final PageState state, - final Object value, - final boolean isSelected, - final Object key, - final int row, - final int column) { - if (value == null) { - return new Text(""); - } else { - final ControlLink link = new ControlLink( - (Component) value); - link.setConfirmation(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.del_confirm", - ADMIN_BUNDLE)); - return link; - } - } - - }); - - addTableActionListener(new TableActionListener() { - - @Override - @SuppressWarnings("unchecked") - public void cellSelected(final TableActionEvent event) { - final PageState state = event.getPageState(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil - .findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final List values; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - values = (List) field.get(config); - } catch (NoSuchFieldException | SecurityException | - IllegalAccessException | ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - switch (event.getColumn()) { - case COL_UP: { - - final int currentIndex = Integer.parseInt( - (String) event.getRowKey()); - final int previousIndex = currentIndex - 1; - - final String currentValue = values.get(currentIndex); - final String previousValue = values.get( - previousIndex); - - values.set(previousIndex, currentValue); - values.set(currentIndex, previousValue); - - confManager.saveConfiguration(config); - - break; - } - case COL_DOWN: { - - final int currentIndex = Integer.parseInt( - (String) event.getRowKey()); - final int nextIndex = currentIndex + 1; - - final String currentValue = values.get(currentIndex); - final String nextValue = values.get(nextIndex); - - values.set(nextIndex, currentValue); - values.set(currentIndex, nextValue); - - confManager.saveConfiguration(config); - - break; - } - case COL_EDIT: { - selectedValue.setSelectedKey(state, - event.getRowKey()); - break; - } - case COL_DEL: { - values.remove(Integer.parseInt((String) event - .getRowKey())); - - confManager.saveConfiguration(config); - - break; - } - } - - } - - @Override - public void headSelected(final TableActionEvent event) { - //Notthing - } - - }); - - setModelBuilder(new ValuesTableModelBuilder()); - } - - } - - private class ValuesTableModelBuilder - extends LockableImpl - implements TableModelBuilder { - - @Override - public TableModel makeModel(final Table table, - final PageState state) { - table.getRowSelectionModel().clearSelection(state); - - return new ValuesTableModel(state); - } - - } - - private class ValuesTableModel implements TableModel { - - private final List values; - private int index = -1; - - @SuppressWarnings("unchecked") - public ValuesTableModel(final PageState state) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration(confClass); - - try { - final Field field = confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)); - field.setAccessible(true); - values = (List) field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn("Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - throw new UncheckedWrapperException(ex); - } - - } - - @Override - public int getColumnCount() { - return 5; - } - - @Override - public boolean nextRow() { - index++; - return index < values.size(); - } - - @Override - public Object getElementAt(final int columnIndex) { - switch (columnIndex) { - case COL_VALUE: - return values.get(index); - case COL_UP: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.value.up", - ADMIN_BUNDLE)); - case COL_DOWN: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.value.down", - ADMIN_BUNDLE)); - case COL_EDIT: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.value.edit", - ADMIN_BUNDLE)); - case COL_DEL: - return new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.value.del", - ADMIN_BUNDLE)); - default: - throw new IllegalArgumentException( - "Not a valid column index"); - } - } - - @Override - public Object getKeyAt(final int columnIndex) { - return index; - } - - } - - private class ValueForm extends Form { - - private final String VALUE = "value"; - - @SuppressWarnings("unchecked") - public ValueForm() { - super("settingStringListValueForm"); - - final TextField valueField = new TextField(VALUE); - valueField.setLabel(new GlobalizedMessage( - "ui.admin.configuration.setting.stringlist.value.label", - ADMIN_BUNDLE)); - add(valueField); - - final SaveCancelSection saveCancelSection = new SaveCancelSection(); - add(saveCancelSection); - - addInitListener(e -> { - final PageState state = e.getPageState(); - - if (selectedValue.getSelectedKey(state) != null) { - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - try { - @SuppressWarnings("unchecked") - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - final List stringList = (List) field - .get(config); - - final String str = stringList.get(Integer.parseInt( - selectedValue.getSelectedKey(state))); - - valueField.setValue(state, str); - - } catch (NoSuchFieldException | SecurityException | - IllegalAccessException | ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - } - }); - - addProcessListener(e -> { - final PageState state = e.getPageState(); - - if (saveCancelSection.getSaveButton().isSelected(state)) { - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration( - confClass); - - final List stringList; - try { - final Field field = confClass.getDeclaredField( - selectedSetting.getSelectedKey(state)); - field.setAccessible(true); - final Object value = field.get(config); - - if (value == null) { - stringList = new ArrayList<>(); - field.set(config, stringList); - } else { - stringList = (List) value; - } - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn( - "Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - - throw new UncheckedWrapperException(ex); - } - - final FormData data = e.getFormData(); - final String valueData = data.getString(VALUE); - - if (selectedValue.getSelectedKey(state) == null) { - stringList.add(valueData); - } else { - final int selected = Integer.parseInt(selectedValue - .getSelectedKey(state)); - stringList.set(selected, valueData); - } - - confManager.saveConfiguration(config); - } - - selectedValue.clearSelection(state); - valueField.setValue(state, null); - }); - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormBigDecimal.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormBigDecimal.java deleted file mode 100644 index 36df30144..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormBigDecimal.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.ParameterSingleSelectionModel; - -import org.libreccm.configuration.BigDecimalSetting; - -import java.math.BigDecimal; - -/** - * A subclass of {@link AbstractSettingFormSingleValue} for editing the value - * of a {@link BigDecimalSetting}. - * - * @author Jens Pelzetter - */ -public class SettingFormBigDecimal - extends AbstractSettingFormSingleValue { - - public SettingFormBigDecimal( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - super(configurationTab, selectedConf, selectedSetting); - } - - @Override - BigDecimal convertValue(final String valueData) { - return new BigDecimal(valueData); - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormBoolean.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormBoolean.java deleted file mode 100644 index 9fa5cfe5b..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormBoolean.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Form; -import com.arsdigita.bebop.FormData; -import com.arsdigita.bebop.FormProcessException; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.SaveCancelSection; -import com.arsdigita.bebop.form.CheckboxGroup; -import com.arsdigita.bebop.form.Option; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.UncheckedWrapperException; - -import java.lang.reflect.Field; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * A subclass of {@link AbstractSettingFormSingleValue} for editing the value - * of a {@code boolean}. - * - * @author Jens Pelzetter - */ -public class SettingFormBoolean extends Form { - - private static final String VALUE_FIELD_GROUP = "valueFieldGroup"; - private static final String VALUE_FIELD = "valueField"; - - private static final Logger LOGGER = LogManager.getLogger( - SettingFormBoolean.class); - - public SettingFormBoolean( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super("settingFormBoolean", new BoxPanel(BoxPanel.VERTICAL)); - - add(new SettingFormHeader(configurationTab, - selectedConf, - selectedSetting)); - - add(new SettingFormCurrentValuePanel(selectedConf, selectedSetting)); - - final CheckboxGroup valueFieldGroup = new CheckboxGroup( - VALUE_FIELD_GROUP); - valueFieldGroup.addOption( - new Option(VALUE_FIELD, - new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.edit.new_value", - ADMIN_BUNDLE)))); - add(valueFieldGroup); - - final SaveCancelSection saveCancelSection = new SaveCancelSection(); - add(saveCancelSection); - - addInitListener(e -> { - final PageState state = e.getPageState(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration(confClass); - - final Boolean value; - try { - final Field field = confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)); - field.setAccessible(true); - value = (Boolean) field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException | - ClassCastException ex) { - LOGGER.warn("Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - return; - } - - if (value) { - valueFieldGroup.setValue(state, VALUE_FIELD); - } - }); - - addProcessListener(e -> { - final PageState state = e.getPageState(); - if (saveCancelSection.getSaveButton().isSelected(state)) { - final FormData data = e.getFormData(); - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - final String settingName = selectedSetting.getSelectedKey(state); - - final Object config = confManager.findConfiguration(confClass); - - final Field field; - try { - field = confClass.getDeclaredField(settingName); - field.setAccessible(true); - } catch (NoSuchFieldException | - SecurityException ex) { - throw new FormProcessException( - String.format( - "Failed to retrieve field \"%s\" " - + "from configuration class \"%s\".", - settingName, - confClass.getName()), - new GlobalizedMessage( - "ui.admin.configuration.setting.failed_to_set_value", - ADMIN_BUNDLE), - ex); - } - - try { - final String[] valueData = (String[]) data. - get(VALUE_FIELD_GROUP); - if (valueData != null && valueData.length > 0) { - if (VALUE_FIELD.equals(valueData[0])) { - field.set(config, Boolean.TRUE); - } else { - field.set(config, Boolean.FALSE); - } - } else { - field.set(config, Boolean.FALSE); - } - confManager.saveConfiguration(config); - configurationTab.hideSettingForms(state); - } catch (IllegalArgumentException | IllegalAccessException ex) { - LOGGER.error(ex); - throw new FormProcessException( - String.format( - "Failed to change value of field \"%s\" " - + "of configuration class \"%s\".", - settingName, - confClass.getName()), - new GlobalizedMessage( - "ui.admin.configuration.setting.failed_to_set_value", - ADMIN_BUNDLE), - ex); - } - } - - configurationTab.hideSettingForms(state); - }); - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormCurrentValuePanel.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormCurrentValuePanel.java deleted file mode 100644 index 92e53ccb1..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormCurrentValuePanel.java +++ /dev/null @@ -1,99 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.GridPanel; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.Text; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.UncheckedWrapperException; - -import java.util.Objects; - -import org.apache.logging.log4j.LogManager; -import org.apache.logging.log4j.Logger; -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationManager; - -import java.lang.reflect.Field; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * A panel which show the current value of a (single value) setting. - * - * @author Jens Pelzetter - */ -public class SettingFormCurrentValuePanel extends GridPanel { - - private final static Logger LOGGER = LogManager.getLogger( - SettingFormCurrentValuePanel.class); - - public SettingFormCurrentValuePanel( - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - super(2); - - add(new Label(new GlobalizedMessage( - "ui.admin.configuration.setting.edit.current_value", - ADMIN_BUNDLE))); - - add(new Text(e -> { - final PageState state = e.getPageState(); - final Text target = (Text) e.getTarget(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - - final Object config = confManager.findConfiguration(confClass); - - final Object value; - try { - final Field field = confClass.getDeclaredField(selectedSetting - .getSelectedKey(state)); - field.setAccessible(true); - value = field.get(config); - } catch (NoSuchFieldException | - SecurityException | - IllegalAccessException ex) { - LOGGER.warn("Failed to read setting {} from configuration {}", - selectedSetting.getSelectedKey(state), - selectedConf.getSelectedKey(state)); - LOGGER.warn(ex); - target.setText("Failed to read setting value."); - return; - } - - target.setText(Objects.toString(value)); - })); - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormDouble.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormDouble.java deleted file mode 100644 index d3bcbcbcd..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormDouble.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.ParameterSingleSelectionModel; - -/** - * A subclass of {@link AbstractSettingFormSingleValue} for editing the value - * of a {@link DoubleSetting}. - * - * @author Jens Pelzetter - */ -public class SettingFormDouble extends AbstractSettingFormSingleValue { - - public SettingFormDouble( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super(configurationTab, selectedConf, selectedSetting); - } - - @Override - Double convertValue(final String valueData) { - return Double.parseDouble(valueData); - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormHeader.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormHeader.java deleted file mode 100644 index 48656e0f6..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormHeader.java +++ /dev/null @@ -1,173 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.ActionLink; -import com.arsdigita.bebop.BoxPanel; -import com.arsdigita.bebop.Label; -import com.arsdigita.bebop.PageState; -import com.arsdigita.bebop.ParameterSingleSelectionModel; -import com.arsdigita.bebop.Text; -import com.arsdigita.bebop.event.PrintEvent; -import com.arsdigita.bebop.event.PrintListener; -import com.arsdigita.globalization.GlobalizedMessage; -import com.arsdigita.util.UncheckedWrapperException; - -import org.libreccm.cdi.utils.CdiUtil; -import org.libreccm.configuration.ConfigurationInfo; -import org.libreccm.configuration.ConfigurationManager; -import org.libreccm.configuration.SettingInfo; -import org.libreccm.configuration.SettingManager; -import org.libreccm.l10n.GlobalizationHelper; - -import static com.arsdigita.ui.admin.AdminUiConstants.*; - -/** - * Header used by all setting forms/editors. The header contains a link to go - * back to the list of settings and heading for contains the title of the - * configuration class and the label of the setting which is edited. - * - * @author Jens Pelzetter - */ -public class SettingFormHeader extends BoxPanel { - - public SettingFormHeader( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super(BoxPanel.VERTICAL); - - final ActionLink backLink = new ActionLink(new GlobalizedMessage( - "ui.admin.configuration.setting.edit.back", ADMIN_BUNDLE)); - backLink.addActionListener(e -> { - final PageState state = e.getPageState(); - configurationTab.hideSettingForms(state); - }); - add(backLink); - - final Label heading = new Label(new HeadingPrintListener( - selectedConf, selectedSetting)); - heading.setClassAttr("heading"); - - add(heading); - - final Text desc = new Text(new DescPrintListener(selectedConf, - selectedSetting)); - - add(desc); - } - - private class HeadingPrintListener implements PrintListener { - - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - - public HeadingPrintListener( - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - - } - - @Override - public void prepare(final PrintEvent event) { - - final PageState state = event.getPageState(); - final Label target = (Label) event.getTarget(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final ConfigurationManager confManager = cdiUtil.findBean( - ConfigurationManager.class); - final SettingManager settingManager = cdiUtil.findBean( - SettingManager.class); - final GlobalizationHelper globalizationHelper = cdiUtil - .findBean(GlobalizationHelper.class); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final ConfigurationInfo confInfo = confManager - .getConfigurationInfo(confClass); - final SettingInfo settingInfo = settingManager.getSettingInfo( - confClass, selectedSetting.getSelectedKey(state)); - - final String confTitle = confInfo.getTitle(globalizationHelper - .getNegotiatedLocale()); - final String settingLabel = settingInfo.getLabel( - globalizationHelper.getNegotiatedLocale()); - - target.setLabel(new GlobalizedMessage( - "ui.admin.configuration.setting.edit.heading", - ADMIN_BUNDLE, - new String[]{confTitle, settingLabel})); - } - - } - - private class DescPrintListener implements PrintListener { - - private final ParameterSingleSelectionModel selectedConf; - private final ParameterSingleSelectionModel selectedSetting; - - public DescPrintListener( - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - this.selectedConf = selectedConf; - this.selectedSetting = selectedSetting; - - } - - @Override - public void prepare(final PrintEvent event) { - final PageState state = event.getPageState(); - final Text target = (Text) event.getTarget(); - - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final SettingManager settingManager = cdiUtil.findBean( - SettingManager.class); - final GlobalizationHelper globalizationHelper = cdiUtil - .findBean(GlobalizationHelper.class); - - final Class confClass; - try { - confClass = Class - .forName(selectedConf.getSelectedKey(state)); - } catch (ClassNotFoundException ex) { - throw new UncheckedWrapperException(ex); - } - - final SettingInfo settingInfo = settingManager.getSettingInfo( - confClass, selectedSetting.getSelectedKey(state)); - - target.setText(settingInfo.getDescription(globalizationHelper - .getNegotiatedLocale())); - } - - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormLong.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormLong.java deleted file mode 100644 index 39c24d053..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormLong.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.ParameterSingleSelectionModel; - -/** - * A subclass of {@link AbstractSettingFormSingleValue} for editing the value - * of a {@link LongSetting}. - * - * @author Jens Pelzetter - */ -public class SettingFormLong extends AbstractSettingFormSingleValue { - - public SettingFormLong( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super(configurationTab, selectedConf, selectedSetting); - } - - @Override - Long convertValue(final String valueData) { - return Long.parseLong(valueData); - } - -} diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormString.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormString.java deleted file mode 100644 index d75d30b08..000000000 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/configuration/SettingFormString.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright (C) 2016 LibreCCM Foundation. - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, - * MA 02110-1301 USA - */ -package com.arsdigita.ui.admin.configuration; - -import com.arsdigita.bebop.ParameterSingleSelectionModel; - -/** - * A subclass of {@link AbstractSettingFormSingleValue} for editing the value - * of a {@link StringSetting}. - * - * @author Jens Pelzetter - */ -public class SettingFormString extends AbstractSettingFormSingleValue { - - public SettingFormString( - final ConfigurationTab configurationTab, - final ParameterSingleSelectionModel selectedConf, - final ParameterSingleSelectionModel selectedSetting) { - - super(configurationTab, selectedConf, selectedSetting); - } - - @Override - String convertValue(final String valueData) { - return valueData; - } - -}