From 1c91d25d8032e638dea4bdcabe3834060279c3f5 Mon Sep 17 00:00:00 2001 From: jensp Date: Thu, 2 Nov 2017 06:13:20 +0000 Subject: [PATCH] CCM NG: Sites Admin UI git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5098 8810af33-2d31-482b-a856-94f89814c4df --- .../ui/admin/sites/SitesController.java | 2 - .../arsdigita/ui/admin/sites/SitesForm.java | 88 ++++++++++++------- .../arsdigita/ui/admin/sites/SitesTable.java | 17 ++-- 3 files changed, 68 insertions(+), 39 deletions(-) diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesController.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesController.java index 4522375e7..204cd7c80 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesController.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesController.java @@ -20,11 +20,9 @@ package com.arsdigita.ui.admin.sites; import org.libreccm.sites.Site; import org.libreccm.sites.SiteRepository; -import org.libreccm.web.CcmApplication; import java.io.Serializable; import java.util.List; -import java.util.Objects; import java.util.stream.Collectors; import javax.enterprise.context.RequestScoped; diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesForm.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesForm.java index 0fcc01c27..9683d7c53 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesForm.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesForm.java @@ -34,7 +34,6 @@ import com.arsdigita.bebop.form.CheckboxGroup; import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.TextField; -import com.arsdigita.bebop.parameters.NotEmptyValidationListener; import com.arsdigita.globalization.GlobalizedMessage; import org.libreccm.cdi.utils.CdiUtil; @@ -59,6 +58,8 @@ public class SitesForm extends Form { private static final String DEFAULT_SITE = "defaultSite"; private static final String THEME_SELECT = "themeSelect"; + private static final String IS_DEFAULT = "isDefault"; + private final SitesTab sitesTab; private final ParameterSingleSelectionModel selectedSiteId; @@ -104,7 +105,7 @@ public class SitesForm extends Form { defaultSiteCheckbox = new CheckboxGroup(DEFAULT_SITE); defaultSiteCheckbox - .addOption(new Option("isDefault", + .addOption(new Option(IS_DEFAULT, new Label(new GlobalizedMessage( "ui.admin.sites.is_default_site", ADMIN_BUNDLE)))); @@ -152,29 +153,51 @@ public class SitesForm extends Form { if (saveCancelSection.getSaveButton().isSelected(state)) { final FormData data = event.getFormData(); - final String domainOfSite = data.getString(DOMAIN_OF_SITE); - if (domainOfSite == null - || domainOfSite.isEmpty() - || domainOfSite.matches("\\s*")) { + final String selectedSiteIdStr = selectedSiteId + .getSelectedKey(state); + final boolean domainEditedOrNewSite; - data.addError( - DOMAIN_OF_SITE, - new GlobalizedMessage( - "ui.admin.sites.domain_of_site.error.empty", - ADMIN_BUNDLE)); + if (selectedSiteIdStr == null || selectedSiteIdStr.isEmpty()) { + domainEditedOrNewSite = true; + } else { + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final SiteRepository siteRepo = cdiUtil + .findBean(SiteRepository.class); + final Site site = siteRepo + .findById(Long.parseLong(selectedSiteIdStr)) + .orElseThrow(() -> new IllegalArgumentException(String + .format("No Site with ID %s in in the database.", + selectedSiteIdStr))); + + domainEditedOrNewSite = !site + .getDomainOfSite() + .equals(domainOfSite); } - final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); - final SitesController controller = cdiUtil - .findBean(SitesController.class); - if (!controller.isUnique(domainOfSite)) { - data.addError( - DOMAIN_OF_SITE, - new GlobalizedMessage( - "ui.admin.sites.domain_of_site.error.not_unique", - ADMIN_BUNDLE)); + if (domainEditedOrNewSite) { + if (domainOfSite == null + || domainOfSite.isEmpty() + || domainOfSite.matches("\\s*")) { + + data.addError( + DOMAIN_OF_SITE, + new GlobalizedMessage( + "ui.admin.sites.domain_of_site.error.empty", + ADMIN_BUNDLE)); + } + + final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); + final SitesController controller = cdiUtil + .findBean(SitesController.class); + if (!controller.isUnique(domainOfSite)) { + data.addError( + DOMAIN_OF_SITE, + new GlobalizedMessage( + "ui.admin.sites.domain_of_site.error.not_unique", + ADMIN_BUNDLE)); + } } } } @@ -205,8 +228,10 @@ public class SitesForm extends Form { selectedSiteIdStr))); domainOfSiteField.setValue(state, site.getDomainOfSite()); - defaultSiteCheckbox - .setValue(state, new Boolean[]{site.isDefaultSite()}); + if (site.isDefaultSite()) { + defaultSiteCheckbox.setValue(state, + new String[]{IS_DEFAULT}); + } defaultThemeSelect.setValue(state, site.getDefaultTheme()); } } @@ -226,8 +251,8 @@ public class SitesForm extends Form { final FormData data = event.getFormData(); final String domainOfSite = data.getString(DOMAIN_OF_SITE); - final Boolean[] defaultSite = ((Boolean[]) data - .get(DEFAULT_SITE)); + final String[] defaultSite = ((String[]) data + .get(DEFAULT_SITE)); final String defaultTheme = data.getString(THEME_SELECT); final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); @@ -240,13 +265,6 @@ public class SitesForm extends Form { final Site site; if (selectedSiteIdStr == null || selectedSiteIdStr.isEmpty()) { site = new Site(); - site.setDomainOfSite(domainOfSite); - if (defaultSite == null || defaultSite.length == 0) { - site.setDefaultSite(false); - } else { - site.setDefaultSite(defaultSite[0]); - } - site.setDefaultTheme(defaultTheme); } else { site = siteRepo .findById(Long.parseLong(selectedSiteIdStr)) @@ -254,9 +272,17 @@ public class SitesForm extends Form { .format("No Site with ID %s in in the database.", selectedSiteIdStr))); } + site.setDomainOfSite(domainOfSite); + if (defaultSite == null || defaultSite.length == 0) { + site.setDefaultSite(false); + } else { + site.setDefaultSite(defaultSite[0].equals(IS_DEFAULT)); + } + site.setDefaultTheme(defaultTheme); siteRepo.save(site); } + selectedSiteId.clearSelection(state); sitesTab.hideSiteForm(state); } diff --git a/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesTable.java b/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesTable.java index 3b3256f3e..d2777e578 100644 --- a/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesTable.java +++ b/ccm-core/src/main/java/com/arsdigita/ui/admin/sites/SitesTable.java @@ -71,23 +71,28 @@ public class SitesTable extends Table { columnModel.add(new TableColumn( COL_SITE_DOMAIN, new Label(new GlobalizedMessage( - "ui.admin.sites.table.columns.domain.header")))); + "ui.admin.sites.table.columns.domain.header", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( COL_IS_DEFAULT_SITE, new Label(new GlobalizedMessage( - "ui.admin.sites.table.columns.default_site.header")))); + "ui.admin.sites.table.columns.default_site.header", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( COL_DEFAULT_THEME, new Label(new GlobalizedMessage( - "ui.admin.sites.table.columns.default_theme.header")))); + "ui.admin.sites.table.columns.default_theme.header", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( COL_APPLICATIONS, new Label(new GlobalizedMessage( - "ui.admin.sites.table.columns.applications.header")))); + "ui.admin.sites.table.columns.applications.header", + ADMIN_BUNDLE)))); columnModel.add(new TableColumn( - COL_APPLICATIONS, + COL_REMOVE, new Label(new GlobalizedMessage( - "ui.admin.sites.table.columns.delete.header")))); + "ui.admin.sites.table.columns.delete.header", + ADMIN_BUNDLE)))); columnModel .get(COL_SITE_DOMAIN)