From 13cd93e6b4221438b80abdedfa65a9ee16a356b1 Mon Sep 17 00:00:00 2001 From: jensp Date: Sun, 3 Sep 2017 17:47:12 +0000 Subject: [PATCH] CCM NG: Some work on the Vaadin Prototype git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4982 8810af33-2d31-482b-a856-94f89814c4df --- ccm-core/pom.xml | 2 - .../java/org/libreccm/admin/ui/AdminView.java | 18 ++ .../ui/ConfigurationSettingsGridRowData.java | 30 ++ .../admin/ui/ConfigurationSettingsWindow.java | 266 ++++++++++++++++++ .../libreccm/admin/ui/ConfigurationTab.java | 84 +++++- .../admin/ui/ConfigurationsGridRowData.java | 81 ++++++ .../admin/ui/ConfigurationsTabController.java | 52 +++- .../ui/ConfigurationsTableDataProvider.java | 101 +++++-- .../org/libreccm/admin/ui/RolesTable.java | 6 +- .../configuration/ConfigurationInfo.java | 34 +++ .../VAADIN/themes/ccm-core/styles.css | 6 +- pom.xml | 16 +- 12 files changed, 657 insertions(+), 39 deletions(-) create mode 100644 ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsGridRowData.java create mode 100644 ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsWindow.java create mode 100644 ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsGridRowData.java diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index c02e857d9..9185c46d8 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -205,12 +205,10 @@ com.vaadin vaadin-themes - com.vaadin vaadin-client-compiled - com.vaadin diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java b/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java index 325fd2a10..e76360b7d 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/AdminView.java @@ -95,6 +95,9 @@ public class AdminView extends CustomComponent implements View { @Inject private RolesTableDataProvider rolesTableDataProvider; + @Inject + private ConfigurationsTabController configurationsTabController; + private ResourceBundle bundle; private final TabSheet tabSheet; @@ -104,6 +107,8 @@ public class AdminView extends CustomComponent implements View { private final JpqlConsole jpqlConsole; + private final ConfigurationTab configurationTab; + public AdminView() { tabSheet = new TabSheet(); @@ -121,6 +126,9 @@ public class AdminView extends CustomComponent implements View { } else { jpqlConsole = null; } + + configurationTab = new ConfigurationTab(); + tabSheet.addTab(configurationTab, "Configuration"); // final GridLayout header = new GridLayout(5, 1); // header.setWidth("100%"); @@ -183,6 +191,8 @@ public class AdminView extends CustomComponent implements View { .getString("ui.admin.tab.users_groups_roles.title")); usersGroupsRoles.localize(); + + configurationTab.init(configurationsTabController); } @Override @@ -191,9 +201,17 @@ public class AdminView extends CustomComponent implements View { // usersGroupsRoles.setUsers(userRepo.findAll()); } + protected GlobalizationHelper getGlobalizationHelper() { + return globalizationHelper; + } + protected JpqlConsoleController getJpqlConsoleController() { return jpqlConsoleController; } + + protected ConfigurationsTabController getConfigurationsTabController() { + return configurationsTabController; + } public UserRepository getUserRepository() { return userRepo; diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsGridRowData.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsGridRowData.java new file mode 100644 index 000000000..2380830d7 --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsGridRowData.java @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2017 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 org.libreccm.admin.ui; + +/** + * + * @author Jens Pelzetter + */ +public class ConfigurationSettingsGridRowData { + + + + +} diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsWindow.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsWindow.java new file mode 100644 index 000000000..528b7a5db --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationSettingsWindow.java @@ -0,0 +1,266 @@ +/* + * Copyright (C) 2017 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 org.libreccm.admin.ui; + +import com.vaadin.data.provider.CallbackDataProvider; +import com.vaadin.data.provider.Query; +import com.vaadin.server.UserError; +import com.vaadin.ui.Button; +import com.vaadin.ui.CheckBox; +import com.vaadin.ui.Component; +import com.vaadin.ui.Grid; +import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.Label; +import com.vaadin.ui.TextField; +import com.vaadin.ui.VerticalLayout; +import com.vaadin.ui.Window; +import org.libreccm.configuration.ConfigurationInfo; +import org.libreccm.configuration.SettingInfo; +import org.libreccm.core.UnexpectedErrorException; +import org.libreccm.l10n.LocalizedString; + +import java.lang.reflect.Field; +import java.math.BigDecimal; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import java.util.stream.Stream; + +/** + * + * @author Jens Pelzetter + */ +class ConfigurationSettingsWindow extends Window { + + private static final long serialVersionUID = 2706661932737914254L; + + private final String COL_SETTING_LABEL = "setting_label"; + private final String COL_SETTING_EDITOR = "setting_editor"; + + private final Class configurationClass; + private final ConfigurationInfo configurationInfo; + private final ConfigurationTab configurationTab; + private Object configuration; + + private final Button saveButton; + + public ConfigurationSettingsWindow(final Class configurationClass, + final ConfigurationInfo configurationInfo, + final ConfigurationTab configurationTab) { + + super(); + + this.configurationClass = configurationClass; + this.configurationInfo = configurationInfo; + this.configurationTab = configurationTab; + + final Locale locale = configurationTab + .getGlobalizationHelper() + .getNegotiatedLocale(); + + final Grid settingsGrid = new Grid<>( + new CallbackDataProvider( + query -> fetchSettingInfos(configurationClass, + configurationTab, + query), + query -> countSettings(configurationClass, + configurationTab, + query))); + settingsGrid + .addColumn(settingInfo -> settingInfo.getLabel(locale)) + .setId(COL_SETTING_LABEL) + .setCaption("Setting"); + settingsGrid + .addComponentColumn(settingInfo -> createSettingEditor(settingInfo)) + .setId(COL_SETTING_EDITOR) + .setCaption("Edit"); + + settingsGrid.setWidth("100%"); + + super.setCaption( + String.format("Edit setting of configuration \"%s\"", + configurationInfo + .getTitle(locale, + configurationTab.getDefaultLocale()))); + + saveButton = new Button("Save"); + saveButton.addClickListener(event -> { + configurationTab + .getConfigurationManager() + .saveConfiguration(configuration); + close(); + }); + saveButton.setEnabled(false); + final Button cancelButton = new Button("Cancel"); + cancelButton.addClickListener(event -> close()); + + super.setContent(new VerticalLayout( + new HorizontalLayout(saveButton, cancelButton), + settingsGrid)); + } + + private Stream fetchSettingInfos( + final Class configurationClass, + final ConfigurationTab configurationTab, + final Query query) { + + final int fromIndex; + final int toIndex; + final int size = countSettings(configurationClass, + configurationTab, + query); + if (query.getOffset() > size - 1) { + fromIndex = size -1; + } else { + fromIndex = query.getOffset(); + } + + if (query.getOffset() + query.getLimit() > size) { + toIndex = size; + } else { + toIndex = query.getOffset() + query.getLimit(); + } + + + return configurationTab + .getSettingManager() + .getAllSettings(configurationClass) + .subList(fromIndex, toIndex) + .stream() + .map(settingName -> { + return configurationTab + .getSettingManager() + .getSettingInfo(configurationClass, settingName); + }); + } + + private int countSettings(final Class configurationClass, + final ConfigurationTab configurationTab, + final Query query) { + + return configurationTab + .getSettingManager() + .getAllSettings(configurationClass) + .size(); + } + + private Component createSettingEditor(final SettingInfo settingInfo) { + + final String type = settingInfo.getValueType(); + final String name = settingInfo.getName(); + + if (Boolean.class.getName().equals(type) + || Boolean.TYPE.getName().equals(type)) { + + final CheckBox checkBox = new CheckBox(); + checkBox.addValueChangeListener(event -> { + updateSettingValue(name, event.getValue()); + }); + return checkBox; + } else if (BigDecimal.class.getName().equals(type)) { + + final TextField textField = new TextField(); + textField.addValueChangeListener(event -> { + final String value = event.getValue(); + if (value.matches("\\d*")) { + updateSettingValue(name, new BigDecimal(value)); + } else { + textField.setComponentError(new UserError( + "The value is not numeric")); + } + }); + return textField; + } else if (Double.class.getName().equals(type) + || Double.TYPE.getName().equals(type)) { + + final TextField textField = new TextField(); + textField.addValueChangeListener(event -> { + try { + final Double value = Double.parseDouble(event.getValue()); + updateSettingValue(name, value); + } catch (NumberFormatException ex) { + textField.setComponentError(new UserError( + "The value is not a double value.")); + } + }); + return textField; + } else if (Set.class.getName().equals(type)) { + + return new Label("Not supported yet."); + + } else if (LocalizedString.class.getName().equals(type)) { + + return new Label("Not supported yet."); + + } else if (Long.class.getName().equals(type) + || Long.TYPE.getName().equals(type)) { + + final TextField textField = new TextField(); + textField.addValueChangeListener(event -> { + try { + final Long value = Long.parseLong(event.getValue()); + updateSettingValue(name, value); + } catch (NumberFormatException ex) { + textField.setComponentError(new UserError( + "The value is not a double value.")); + } + }); + return textField; + + } else if (List.class.getName().equals(type)) { + + return new Label("Not supported yet."); + + } else if (String.class.getName().equals(type)) { + + final TextField textField = new TextField(); + textField.addValueChangeListener(event -> { + updateSettingValue(name, event.getValue()); + }); + return textField; + + } else { + return new Label("Unsupported value type"); + } + } + + private void updateSettingValue(final String settingName, + final Object value) { + + if (configuration == null) { + //We can't do that in the constructor because this values are + //provided by CDI in other classes. Therefore they might be + //not available when the constructors runs. + configuration = configurationTab + .getConfigurationManager() + .findConfiguration(configurationClass); + saveButton.setEnabled(true); + } + + try { + final Field field = configurationClass.getField(settingName); + field.setAccessible(true); + field.set(configuration, value); + } catch (IllegalAccessException | NoSuchFieldException ex) { + throw new UnexpectedErrorException(ex); + } + + } + +} diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationTab.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationTab.java index c108c049d..eee85882a 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationTab.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationTab.java @@ -18,7 +18,16 @@ */ package org.libreccm.admin.ui; +import com.vaadin.ui.Button; import com.vaadin.ui.CustomComponent; +import com.vaadin.ui.Grid; +import com.vaadin.ui.UI; +import com.vaadin.ui.themes.ValoTheme; +import org.libreccm.configuration.ConfigurationManager; +import org.libreccm.configuration.SettingManager; +import org.libreccm.l10n.GlobalizationHelper; + +import java.util.Locale; /** * @@ -27,12 +36,77 @@ import com.vaadin.ui.CustomComponent; public class ConfigurationTab extends CustomComponent { private static final long serialVersionUID = 7642627611731762410L; - - - - public ConfigurationTab(final AdminView adminView) { + + private static final String COL_CONF_TITLE = "title"; + private static final String COL_CONF_CLASS = "configuration_class"; + private static final String COL_CONF_DESC = "description"; + + private ConfigurationsTabController controller; + + private final Grid configurationsGrid; + + public ConfigurationTab() { + + super(); + configurationsGrid = new Grid<>(); + + configurationsGrid.addComponentColumn(rowData -> { + final Button button = new Button( + rowData.getTitle(), + event -> { + final ConfigurationSettingsWindow window + = new ConfigurationSettingsWindow( + rowData.getConfigurationClass(), + rowData.getConfigurationInfo(), + this); + window.setWidth("70%"); + window.center(); + UI.getCurrent().addWindow(window); + }); + button.setStyleName(ValoTheme.BUTTON_LINK); + + return button; + }) + .setId(COL_CONF_TITLE); + + configurationsGrid.addColumn( + ConfigurationsGridRowData::getName) + .setId(COL_CONF_CLASS) + .setCaption("Configuration class"); + + configurationsGrid.addColumn( + ConfigurationsGridRowData::getDescription) + .setCaption(COL_CONF_DESC) + .setCaption("Description"); + + configurationsGrid.setWidth("100%"); + super.setCompositionRoot(configurationsGrid); + + } + + protected void init(final ConfigurationsTabController controller) { + + this.controller = controller; + + configurationsGrid + .setDataProvider(controller.getConfigurationsTableDataProvider()); + } + + protected GlobalizationHelper getGlobalizationHelper() { + return controller.getGlobalizationHelper(); } - + protected Locale getDefaultLocale() { + return controller.getDefaultLocale(); + } + + protected ConfigurationManager getConfigurationManager() { + return controller.getConfigurationManager(); + } + + protected SettingManager getSettingManager() { + return controller.getSettingManager(); + } + } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsGridRowData.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsGridRowData.java new file mode 100644 index 000000000..ab4c058bd --- /dev/null +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsGridRowData.java @@ -0,0 +1,81 @@ +/* + * Copyright (C) 2017 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 org.libreccm.admin.ui; + +import org.libreccm.configuration.ConfigurationInfo; + +/** + * + * @author Jens Pelzetter + */ +class ConfigurationsGridRowData { + + private Class configurationClass; + private ConfigurationInfo configurationInfo; + private String name; + private String title; + private String description; + + public ConfigurationsGridRowData() { + } + + public Class getConfigurationClass() { + return configurationClass; + } + + public void setConfigurationClass( + Class configurationClass) { + this.configurationClass = configurationClass; + } + + public String getName() { + return name; + } + + public void setName(final String name) { + this.name = name; + } + + public String getTitle() { + return title; + } + + public void setTitle(final String title) { + this.title = title; + } + + public String getDescription() { + return description; + } + + public void setDescription(final String description) { + this.description = description; + } + + public ConfigurationInfo getConfigurationInfo() { + return configurationInfo; + } + + public void setConfigurationInfo(final ConfigurationInfo configurationInfo) { + this.configurationInfo = configurationInfo; + } + + + +} diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTabController.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTabController.java index 0f0acd260..1dbc07c0d 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTabController.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTabController.java @@ -18,15 +18,59 @@ */ package org.libreccm.admin.ui; +import com.arsdigita.kernel.KernelConfig; + import com.vaadin.cdi.ViewScoped; +import org.libreccm.configuration.ConfigurationManager; +import org.libreccm.configuration.SettingManager; +import org.libreccm.l10n.GlobalizationHelper; + +import java.util.Locale; + +import javax.inject.Inject; /** * * @author Jens Pelzetter */ @ViewScoped -public class ConfigurationsTabController { - - - +class ConfigurationsTabController { + + @Inject + private GlobalizationHelper globalizationHelper; + + @Inject + private ConfigurationManager confManager; + + @Inject + private ConfigurationsTableDataProvider configurationsTableDataProvider; + + @Inject + private ConfigurationManager configurationManager; + + @Inject + private SettingManager settingManager; + + protected GlobalizationHelper getGlobalizationHelper() { + return globalizationHelper; + } + + protected Locale getDefaultLocale() { + return confManager + .findConfiguration(KernelConfig.class) + .getDefaultLocale(); + } + + protected ConfigurationsTableDataProvider getConfigurationsTableDataProvider() { + return configurationsTableDataProvider; + } + + protected ConfigurationManager getConfigurationManager() { + return configurationManager; + } + + protected SettingManager getSettingManager() { + return settingManager; + } + } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTableDataProvider.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTableDataProvider.java index c8dacfb82..db97e0789 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTableDataProvider.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ConfigurationsTableDataProvider.java @@ -18,6 +18,8 @@ */ package org.libreccm.admin.ui; +import com.arsdigita.kernel.KernelConfig; + import com.vaadin.cdi.ViewScoped; import com.vaadin.data.provider.AbstractDataProvider; import com.vaadin.data.provider.Query; @@ -25,7 +27,7 @@ import org.libreccm.configuration.ConfigurationInfo; import org.libreccm.configuration.ConfigurationManager; import org.libreccm.l10n.GlobalizationHelper; -import java.util.SortedSet; +import java.util.Locale; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -36,7 +38,7 @@ import javax.inject.Inject; * @author Jens Pelzetter */ @ViewScoped -public class ConfigurationsTableDataProvider extends AbstractDataProvider, String> { +class ConfigurationsTableDataProvider extends AbstractDataProvider { private static final long serialVersionUID = -7001151229931864885L; @@ -54,7 +56,12 @@ public class ConfigurationsTableDataProvider extends AbstractDataProvider, String> query) { + public int size(final Query query) { + + final Locale defaultLocale = confManager + .findConfiguration(KernelConfig.class) + .getDefaultLocale(); + if (filter == null || filter.trim().isEmpty()) { return confManager.findAllConfigurations().size(); } else { @@ -64,14 +71,13 @@ public class ConfigurationsTableDataProvider extends AbstractDataProvider { final ConfigurationInfo info = confManager .getConfigurationInfo(conf); -// return c.getName().startsWith(filterTerm); if (filter == null || filter.isEmpty()) { return true; } else { return info - .getTitle(globalizationHelper.getNegotiatedLocale()) - .startsWith( - filter); + .getTitle(globalizationHelper.getNegotiatedLocale(), + defaultLocale) + .startsWith(filter); } }) .count(); @@ -79,28 +85,62 @@ public class ConfigurationsTableDataProvider extends AbstractDataProvider> fetch(final Query, String> query) { + public Stream fetch( + final Query query) { + + final int fromIndex; + final int toIndex; + final int size = size(query); + if (query.getOffset() > size - 1) { + fromIndex = size - 1; + } else { + fromIndex = query.getOffset(); + } + + if ((query.getOffset() + query.getLimit()) > size) { + toIndex = size; + } else { + toIndex = query.getOffset() + query.getLimit(); + } + if (filter == null || filter.trim().isEmpty()) { - return confManager.findAllConfigurations().stream(); + return confManager + .findAllConfigurations() + .stream() + .map(configurationClass -> createRowData(configurationClass)) + .sorted((rowData1, rowData2) -> { + return rowData1 + .getConfigurationClass() + .getSimpleName() + .compareTo(rowData2.getConfigurationClass() + .getSimpleName()); + }) + .collect(Collectors.toList()) + .subList(fromIndex, toIndex) + .stream(); } else { return confManager .findAllConfigurations() .stream() - .filter(conf -> { - final ConfigurationInfo info = confManager - .getConfigurationInfo(conf); -// return c.getName().startsWith(filterTerm); + .map(configurationClass -> createRowData(configurationClass)) + .filter(rowData -> { if (filter == null || filter.isEmpty()) { return true; } else { - return info - .getTitle(globalizationHelper.getNegotiatedLocale()) - .startsWith( - filter); + return rowData + .getTitle() + .startsWith(filter); } }) + .sorted((rowData1, rowData2) -> { + return rowData1 + .getConfigurationClass() + .getSimpleName() + .compareTo(rowData2.getConfigurationClass() + .getSimpleName()); + }) .collect(Collectors.toList()) - .subList(query.getOffset(), query.getOffset() + query.getLimit()) + .subList(fromIndex, toIndex) .stream(); } } @@ -109,4 +149,29 @@ public class ConfigurationsTableDataProvider extends AbstractDataProvider configurationClass) { + + final ConfigurationInfo info = confManager + .getConfigurationInfo(configurationClass); + + final Locale defaultLocale = confManager + .findConfiguration(KernelConfig.class) + .getDefaultLocale(); + + final ConfigurationsGridRowData rowData + = new ConfigurationsGridRowData(); + rowData.setConfigurationClass(configurationClass); + rowData.setName(info.getName()); + rowData.setTitle(info + .getTitle(globalizationHelper.getNegotiatedLocale(), + defaultLocale)); + rowData.setDescription(info + .getDescription(globalizationHelper.getNegotiatedLocale())); + rowData.setConfigurationInfo(info); + + return rowData; + + } + } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java b/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java index 7ba6ae195..c9e09c2bf 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/RolesTable.java @@ -33,7 +33,6 @@ import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.renderers.ButtonRenderer; import com.vaadin.ui.themes.ValoTheme; -import org.libreccm.admin.ui.AdminView; import org.libreccm.security.Role; import org.libreccm.security.RoleRepository; @@ -226,10 +225,7 @@ public class RolesTable extends Grid { final VerticalLayout layout = new VerticalLayout(text, buttons); -// final Panel panel = new Panel( -// bundle.getString("ui.admin.groups.delete.confirm.title"), -// layout); - setContent(layout); + super.setContent(layout); } private void deleteRole() { diff --git a/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationInfo.java b/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationInfo.java index 50bddf8c8..54e8ae198 100644 --- a/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationInfo.java +++ b/ccm-core/src/main/java/org/libreccm/configuration/ConfigurationInfo.java @@ -115,6 +115,40 @@ public final class ConfigurationInfo { this.descKey = descKey; } + public String getTitle(final Locale locale, + final Locale fallback) { + final ResourceBundle bundle = getDescriptionBundle(locale); + + if (bundle == null) { + return name; + } else { + try { + return bundle.getString(titleKey); + } catch (MissingResourceException ex) { + LOGGER.warn("Can't find resource for bundle '{}', " + + "key '{}' and locale '{}'.", + descBundle, + titleKey, + locale); + if (fallback == null) { + return name; + } else { + return getTitle(fallback, null); + } + } + } + } + + /** + * + * @param locale + * + * @return + * + * @deprecated Use {@link #getTitle(java.util.Locale, java.util.Locale)} + * instead. + */ + @Deprecated() public String getTitle(final Locale locale) { final ResourceBundle bundle = getDescriptionBundle(locale); diff --git a/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css b/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css index 9d1af3515..67d8e1bff 100644 --- a/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css +++ b/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css @@ -1081,7 +1081,7 @@ */ .v-vaadin-version:after { - content: "8.1.1"; + content: "8.1.3"; } .v-widget { @@ -3072,6 +3072,10 @@ select:focus { pointer-events: none; } +.v-filterselect .v-icon.FontAwesome { + margin-left: 0px; +} + .v-filterselect-error .v-filterselect-input { border-color: #ed473b !important; background: #fffbfb; diff --git a/pom.xml b/pom.xml index a5ecf2959..0e921540a 100644 --- a/pom.xml +++ b/pom.xml @@ -255,7 +255,7 @@ com.vaadin vaadin-maven-plugin - 8.1.1 + 8.1.3 @@ -401,7 +401,15 @@ + + com.vaadin + vaadin-bom + 8.1.3 + import + pom + +