CCM NG: Sites Admin UI

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5098 8810af33-2d31-482b-a856-94f89814c4df

Former-commit-id: 7476e7f365
pull/2/head
jensp 2017-11-02 06:13:20 +00:00
parent 23c922aa1f
commit 9410daebbb
3 changed files with 68 additions and 39 deletions

View File

@ -20,11 +20,9 @@ package com.arsdigita.ui.admin.sites;
import org.libreccm.sites.Site; import org.libreccm.sites.Site;
import org.libreccm.sites.SiteRepository; import org.libreccm.sites.SiteRepository;
import org.libreccm.web.CcmApplication;
import java.io.Serializable; import java.io.Serializable;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;

View File

@ -34,7 +34,6 @@ import com.arsdigita.bebop.form.CheckboxGroup;
import com.arsdigita.bebop.form.Option; import com.arsdigita.bebop.form.Option;
import com.arsdigita.bebop.form.SingleSelect; import com.arsdigita.bebop.form.SingleSelect;
import com.arsdigita.bebop.form.TextField; import com.arsdigita.bebop.form.TextField;
import com.arsdigita.bebop.parameters.NotEmptyValidationListener;
import com.arsdigita.globalization.GlobalizedMessage; import com.arsdigita.globalization.GlobalizedMessage;
import org.libreccm.cdi.utils.CdiUtil; 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 DEFAULT_SITE = "defaultSite";
private static final String THEME_SELECT = "themeSelect"; private static final String THEME_SELECT = "themeSelect";
private static final String IS_DEFAULT = "isDefault";
private final SitesTab sitesTab; private final SitesTab sitesTab;
private final ParameterSingleSelectionModel<String> selectedSiteId; private final ParameterSingleSelectionModel<String> selectedSiteId;
@ -104,7 +105,7 @@ public class SitesForm extends Form {
defaultSiteCheckbox = new CheckboxGroup(DEFAULT_SITE); defaultSiteCheckbox = new CheckboxGroup(DEFAULT_SITE);
defaultSiteCheckbox defaultSiteCheckbox
.addOption(new Option("isDefault", .addOption(new Option(IS_DEFAULT,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"ui.admin.sites.is_default_site", "ui.admin.sites.is_default_site",
ADMIN_BUNDLE)))); ADMIN_BUNDLE))));
@ -152,29 +153,51 @@ public class SitesForm extends Form {
if (saveCancelSection.getSaveButton().isSelected(state)) { if (saveCancelSection.getSaveButton().isSelected(state)) {
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final String domainOfSite = data.getString(DOMAIN_OF_SITE); final String domainOfSite = data.getString(DOMAIN_OF_SITE);
if (domainOfSite == null final String selectedSiteIdStr = selectedSiteId
|| domainOfSite.isEmpty() .getSelectedKey(state);
|| domainOfSite.matches("\\s*")) { final boolean domainEditedOrNewSite;
data.addError( if (selectedSiteIdStr == null || selectedSiteIdStr.isEmpty()) {
DOMAIN_OF_SITE, domainEditedOrNewSite = true;
new GlobalizedMessage( } else {
"ui.admin.sites.domain_of_site.error.empty", final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
ADMIN_BUNDLE)); 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(); if (domainEditedOrNewSite) {
final SitesController controller = cdiUtil if (domainOfSite == null
.findBean(SitesController.class); || domainOfSite.isEmpty()
if (!controller.isUnique(domainOfSite)) { || domainOfSite.matches("\\s*")) {
data.addError(
DOMAIN_OF_SITE, data.addError(
new GlobalizedMessage( DOMAIN_OF_SITE,
"ui.admin.sites.domain_of_site.error.not_unique", new GlobalizedMessage(
ADMIN_BUNDLE)); "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))); selectedSiteIdStr)));
domainOfSiteField.setValue(state, site.getDomainOfSite()); domainOfSiteField.setValue(state, site.getDomainOfSite());
defaultSiteCheckbox if (site.isDefaultSite()) {
.setValue(state, new Boolean[]{site.isDefaultSite()}); defaultSiteCheckbox.setValue(state,
new String[]{IS_DEFAULT});
}
defaultThemeSelect.setValue(state, site.getDefaultTheme()); defaultThemeSelect.setValue(state, site.getDefaultTheme());
} }
} }
@ -226,8 +251,8 @@ public class SitesForm extends Form {
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final String domainOfSite = data.getString(DOMAIN_OF_SITE); final String domainOfSite = data.getString(DOMAIN_OF_SITE);
final Boolean[] defaultSite = ((Boolean[]) data final String[] defaultSite = ((String[]) data
.get(DEFAULT_SITE)); .get(DEFAULT_SITE));
final String defaultTheme = data.getString(THEME_SELECT); final String defaultTheme = data.getString(THEME_SELECT);
final CdiUtil cdiUtil = CdiUtil.createCdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
@ -240,13 +265,6 @@ public class SitesForm extends Form {
final Site site; final Site site;
if (selectedSiteIdStr == null || selectedSiteIdStr.isEmpty()) { if (selectedSiteIdStr == null || selectedSiteIdStr.isEmpty()) {
site = new Site(); site = new Site();
site.setDomainOfSite(domainOfSite);
if (defaultSite == null || defaultSite.length == 0) {
site.setDefaultSite(false);
} else {
site.setDefaultSite(defaultSite[0]);
}
site.setDefaultTheme(defaultTheme);
} else { } else {
site = siteRepo site = siteRepo
.findById(Long.parseLong(selectedSiteIdStr)) .findById(Long.parseLong(selectedSiteIdStr))
@ -254,9 +272,17 @@ public class SitesForm extends Form {
.format("No Site with ID %s in in the database.", .format("No Site with ID %s in in the database.",
selectedSiteIdStr))); 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); siteRepo.save(site);
} }
selectedSiteId.clearSelection(state);
sitesTab.hideSiteForm(state); sitesTab.hideSiteForm(state);
} }

View File

@ -71,23 +71,28 @@ public class SitesTable extends Table {
columnModel.add(new TableColumn( columnModel.add(new TableColumn(
COL_SITE_DOMAIN, COL_SITE_DOMAIN,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"ui.admin.sites.table.columns.domain.header")))); "ui.admin.sites.table.columns.domain.header",
ADMIN_BUNDLE))));
columnModel.add(new TableColumn( columnModel.add(new TableColumn(
COL_IS_DEFAULT_SITE, COL_IS_DEFAULT_SITE,
new Label(new GlobalizedMessage( 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( columnModel.add(new TableColumn(
COL_DEFAULT_THEME, COL_DEFAULT_THEME,
new Label(new GlobalizedMessage( 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( columnModel.add(new TableColumn(
COL_APPLICATIONS, COL_APPLICATIONS,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"ui.admin.sites.table.columns.applications.header")))); "ui.admin.sites.table.columns.applications.header",
ADMIN_BUNDLE))));
columnModel.add(new TableColumn( columnModel.add(new TableColumn(
COL_APPLICATIONS, COL_REMOVE,
new Label(new GlobalizedMessage( new Label(new GlobalizedMessage(
"ui.admin.sites.table.columns.delete.header")))); "ui.admin.sites.table.columns.delete.header",
ADMIN_BUNDLE))));
columnModel columnModel
.get(COL_SITE_DOMAIN) .get(COL_SITE_DOMAIN)