CCM NG: SitesAdmin for Vaadin prototype
git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@5102 8810af33-2d31-482b-a856-94f89814c4df
parent
657e7fddd5
commit
bfd06d1b41
|
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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(
|
||||||
.getText("ui.admin.sites.table.buttons.delete"),
|
adminTextsUtil
|
||||||
VaadinIcons.EDIT);
|
.getText("ui.admin.sites.table.buttons.delete"),
|
||||||
|
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);
|
||||||
|
|
|
||||||
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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}"?
|
||||||
|
|
|
||||||
|
|
@ -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?
|
||||||
|
|
|
||||||
|
|
@ -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}"?
|
||||||
|
|
|
||||||
|
|
@ -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}"?
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue