CCM NG: SitesAdmin for Vaadin prototype

git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5102 8810af33-2d31-482b-a856-94f89814c4df
jensp 2017-11-07 19:46:20 +00:00
parent 657e7fddd5
commit bfd06d1b41
7 changed files with 78 additions and 10 deletions

View File

@ -26,14 +26,18 @@ import com.vaadin.ui.CheckBox;
import com.vaadin.ui.FormLayout; import com.vaadin.ui.FormLayout;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.NativeSelect; import com.vaadin.ui.NativeSelect;
import com.vaadin.ui.Notification;
import com.vaadin.ui.TextField; import com.vaadin.ui.TextField;
import com.vaadin.ui.UI;
import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.VerticalLayout;
import com.vaadin.ui.Window; import com.vaadin.ui.Window;
import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.l10n.LocalizedTextsUtil; import org.libreccm.l10n.LocalizedTextsUtil;
import org.libreccm.sites.Site; import org.libreccm.sites.Site;
import org.libreccm.theming.ThemeInfo; import org.libreccm.theming.ThemeInfo;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@ -47,12 +51,14 @@ class SiteEditor extends Window {
private final Site site; private final Site site;
private final AdminViewController controller; private final AdminViewController controller;
private final boolean isNewSite;
private boolean dataHasChanged = false; private boolean dataHasChanged = false;
public SiteEditor(final AdminViewController controller) { public SiteEditor(final AdminViewController controller) {
super(); super();
this.site = null; this.site = new Site();
isNewSite = true;
this.controller = controller; this.controller = controller;
addWidgets(); addWidgets();
@ -63,6 +69,7 @@ class SiteEditor extends Window {
super(); super();
this.site = site; this.site = site;
isNewSite = false;
this.controller = controller; this.controller = controller;
addWidgets(); addWidgets();
@ -82,12 +89,14 @@ class SiteEditor extends Window {
final TextField domainOfSiteField = new TextField( final TextField domainOfSiteField = new TextField(
adminTextsUtil.getText("ui.admin.sites.domain_of_site")); adminTextsUtil.getText("ui.admin.sites.domain_of_site"));
domainOfSiteField.setValue(site.getDomainOfSite());
domainOfSiteField.addValueChangeListener(event -> { domainOfSiteField.addValueChangeListener(event -> {
dataHasChanged = true; dataHasChanged = true;
}); });
final CheckBox isDefaultSiteCheckBox = new CheckBox( final CheckBox isDefaultSiteCheckBox = new CheckBox(
adminTextsUtil.getText("ui.admin.sites.is_default_site")); adminTextsUtil.getText("ui.admin.sites.is_default_site"));
isDefaultSiteCheckBox.setValue(site.isDefaultSite());
isDefaultSiteCheckBox.addValueChangeListener(event -> { isDefaultSiteCheckBox.addValueChangeListener(event -> {
dataHasChanged = true; dataHasChanged = true;
}); });
@ -102,6 +111,7 @@ class SiteEditor extends Window {
final NativeSelect<String> defaultThemeSelect = new NativeSelect<>( final NativeSelect<String> defaultThemeSelect = new NativeSelect<>(
adminTextsUtil.getText("ui.admin.sites.default_theme"), themes); adminTextsUtil.getText("ui.admin.sites.default_theme"), themes);
defaultThemeSelect.setValue(site.getDefaultTheme());
defaultThemeSelect.addValueChangeListener(event -> { defaultThemeSelect.addValueChangeListener(event -> {
dataHasChanged = true; dataHasChanged = true;
}); });
@ -114,6 +124,7 @@ class SiteEditor extends Window {
saveButton.setCaption(adminTextsUtil.getText( saveButton.setCaption(adminTextsUtil.getText(
"ui.admin.sites.buttons.save.changed")); "ui.admin.sites.buttons.save.changed"));
} }
saveButton.addStyleName(ValoTheme.BUTTON_PRIMARY);
saveButton.addClickListener(event -> { saveButton.addClickListener(event -> {
if (dataHasChanged) { if (dataHasChanged) {
@ -128,7 +139,9 @@ class SiteEditor extends Window {
return; return;
} }
if (!controller.getSitesController().isUnique(domainOfSite)) { if (!controller.getSitesController().isUnique(domainOfSite)
&& (!Objects.equals(site.getDomainOfSite(),
domainOfSiteField.getValue()))) {
domainOfSiteField.setComponentError(new UserError( domainOfSiteField.setComponentError(new UserError(
adminTextsUtil.getText( adminTextsUtil.getText(
"ui.admin.sites.domain_of_site.error.not_unique"))); "ui.admin.sites.domain_of_site.error.not_unique")));
@ -148,6 +161,17 @@ class SiteEditor extends Window {
.getSitesTableDataProvider() .getSitesTableDataProvider()
.refreshAll(); .refreshAll();
close(); close();
if (isNewSite) {
Notification.show(adminTextsUtil
.getText("ui.admin.sites.created_new_site",
new Object[]{domainOfSite}),
Notification.Type.TRAY_NOTIFICATION);
} else {
Notification.show(adminTextsUtil
.getText("ui.admin.sites.save_changes",
new Object[]{domainOfSite}),
Notification.Type.TRAY_NOTIFICATION);
}
} }
}); });

View File

@ -27,11 +27,11 @@ import com.vaadin.ui.CustomComponent;
import com.vaadin.ui.Grid; import com.vaadin.ui.Grid;
import com.vaadin.ui.HorizontalLayout; import com.vaadin.ui.HorizontalLayout;
import com.vaadin.ui.Label; import com.vaadin.ui.Label;
import com.vaadin.ui.Notification;
import com.vaadin.ui.UI; import com.vaadin.ui.UI;
import com.vaadin.ui.components.grid.HeaderCell; import com.vaadin.ui.components.grid.HeaderCell;
import com.vaadin.ui.components.grid.HeaderRow; import com.vaadin.ui.components.grid.HeaderRow;
import com.vaadin.ui.themes.ValoTheme; import com.vaadin.ui.themes.ValoTheme;
import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.l10n.LocalizedTextsUtil; import org.libreccm.l10n.LocalizedTextsUtil;
import org.libreccm.sites.Site; import org.libreccm.sites.Site;
import org.libreccm.ui.ConfirmDialog; import org.libreccm.ui.ConfirmDialog;
@ -115,9 +115,10 @@ class SitesTab extends CustomComponent {
sitesGrid sitesGrid
.addComponentColumn(row -> { .addComponentColumn(row -> {
if (row.isDeletable()) { if (row.isDeletable()) {
final Button deleteButton = new Button(adminTextsUtil final Button deleteButton = new Button(
adminTextsUtil
.getText("ui.admin.sites.table.buttons.delete"), .getText("ui.admin.sites.table.buttons.delete"),
VaadinIcons.EDIT); VaadinIcons.MINUS_CIRCLE_O);
deleteButton.addClickListener(event -> { deleteButton.addClickListener(event -> {
final ConfirmDialog dialog = new ConfirmDialog(() -> { final ConfirmDialog dialog = new ConfirmDialog(() -> {
@ -125,8 +126,18 @@ class SitesTab extends CustomComponent {
.getSitesController() .getSitesController()
.delete(row.getSiteId()); .delete(row.getSiteId());
Notification.show(adminTextsUtil
.getText("ui.admin.sites.site_deleted",
new Object[]{row.getDomainOfSite()}),
Notification.Type.TRAY_NOTIFICATION);
return null; return null;
}); });
dialog.setMessage(adminTextsUtil
.getText("ui.admin.sites.site_delete.confirm",
new Object[]{row.getDomainOfSite()}));
dialog.setModal(true);
dialog.center();
UI.getCurrent().addWindow(dialog);
}); });
deleteButton.addStyleNames(ValoTheme.BUTTON_TINY, deleteButton.addStyleNames(ValoTheme.BUTTON_TINY,
ValoTheme.BUTTON_DANGER); ValoTheme.BUTTON_DANGER);

View File

@ -47,7 +47,6 @@ public class ConfirmDialog extends Window {
this.confirmedAction = confirmedAction; this.confirmedAction = confirmedAction;
this.cancelAction = () -> { this.cancelAction = () -> {
close();
return null; return null;
}; };
addWidgets(); addWidgets();
@ -70,6 +69,7 @@ public class ConfirmDialog extends Window {
confirmButton.addClickListener(event -> { confirmButton.addClickListener(event -> {
try { try {
confirmedAction.call(); confirmedAction.call();
close();
} catch (Exception ex) { } catch (Exception ex) {
throw new UnexpectedErrorException(ex); throw new UnexpectedErrorException(ex);
} }
@ -79,6 +79,7 @@ public class ConfirmDialog extends Window {
cancelButton.addClickListener(event -> { cancelButton.addClickListener(event -> {
try { try {
cancelAction.call(); cancelAction.call();
close();
} catch (Exception ex) { } catch (Exception ex) {
throw new UnexpectedErrorException(ex); throw new UnexpectedErrorException(ex);
} }

View File

@ -633,3 +633,11 @@ ui.admin.sites.domain_of_site.error.not_unique=The domain of the Site is not uni
ui.admin.sites.domain_of_site.error.empty=The domain of a Site can't be empty. ui.admin.sites.domain_of_site.error.empty=The domain of a Site can't be empty.
ui.admin.sites.table.buttons.edit=Edit ui.admin.sites.table.buttons.edit=Edit
ui.admin.sites.table.buttons.delete=Delete ui.admin.sites.table.buttons.delete=Delete
ui.admin.sites.default_theme=Theme
ui.admin.sites.buttons.save.create=Create Site
ui.admin.sites.buttons.save.changed=Save
ui.admin.sites.buttons.cancel=Cancel
ui.admin.sites.created_new_site=Create new site "{0}"
ui.admin.sites.saved_changes=Saved changes to site "{0}"
ui.admin.sites.site_deleted=Site "{0}" deleted
ui.admin.sites.site_delete.confirm=Are you sure to delete Site "{0}"?

View File

@ -637,3 +637,11 @@ ui.admin.sites.domain_of_site.error.not_unique=Die Domain der Site ist nicht ein
ui.admin.sites.domain_of_site.error.empty=The Domain einer Site darf nicht leer sein. ui.admin.sites.domain_of_site.error.empty=The Domain einer Site darf nicht leer sein.
ui.admin.sites.table.buttons.edit=Bearbeiten ui.admin.sites.table.buttons.edit=Bearbeiten
ui.admin.sites.table.buttons.delete=L\u00f6schen ui.admin.sites.table.buttons.delete=L\u00f6schen
ui.admin.sites.default_theme=Theme
ui.admin.sites.buttons.save.create=Site anlegen
ui.admin.sites.buttons.save.changed=Speichern
ui.admin.sites.buttons.cancel=Abbrechen
ui.admin.sites.created_new_site=Neue Site "{0}" angelegt
ui.admin.sites.saved_changes=\u00c4nderungen an Seite "{0}" gespeichert
ui.admin.sites.site_deleted=Site "{0}" gel\u00f6scht
ui.admin.sites.site_delete.confirm=Sind Sie sicher, dass Sie die Site "{0}" l\u00f6schen wollen?

View File

@ -630,3 +630,11 @@ ui.admin.sites.domain_of_site.error.not_unique=The domain of the Site is not uni
ui.admin.sites.domain_of_site.error.empty=The domain of a Site can't be empty. ui.admin.sites.domain_of_site.error.empty=The domain of a Site can't be empty.
ui.admin.sites.table.buttons.edit=Edit ui.admin.sites.table.buttons.edit=Edit
ui.admin.sites.table.buttons.delete=Delete ui.admin.sites.table.buttons.delete=Delete
ui.admin.sites.default_theme=Theme\t
ui.admin.sites.buttons.save.create=Create Site
ui.admin.sites.buttons.save.changed=Save
ui.admin.sites.buttons.cancel=Cancel
ui.admin.sites.created_new_site=Create new site "{0}"
ui.admin.sites.saved_changes=Saved changes to site "{0}"
ui.admin.sites.site_deleted=Site "{0}" deleted
ui.admin.sites.site_delete.confirm=Are you sure to delete Site "{0}"?

View File

@ -621,3 +621,11 @@ ui.admin.sites.domain_of_site.error.not_unique=The domain of the Site is not uni
ui.admin.sites.domain_of_site.error.empty=The domain of a Site can't be empty. ui.admin.sites.domain_of_site.error.empty=The domain of a Site can't be empty.
ui.admin.sites.table.buttons.edit=Edit ui.admin.sites.table.buttons.edit=Edit
ui.admin.sites.table.buttons.delete=Delete ui.admin.sites.table.buttons.delete=Delete
ui.admin.sites.default_theme=Theme\t
ui.admin.sites.buttons.save.create=Create Site
ui.admin.sites.buttons.save.changed=Save
ui.admin.sites.buttons.cancel=Cancel
ui.admin.sites.created_new_site=Create new site "{0}"
ui.admin.sites.saved_changes=Saved changes to site "{0}"
ui.admin.sites.site_deleted=Site "{0}" deleted
ui.admin.sites.site_delete.confirm=Are you sure to delete Site "{0}"?