From e77fc73b859603c36f3a9b24ce2d28227d4c5ffc Mon Sep 17 00:00:00 2001 From: jensp Date: Fri, 5 May 2017 19:21:38 +0000 Subject: [PATCH] CCM NG/ccm-core: Localisation of Vaadin prototype UI git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@4711 8810af33-2d31-482b-a856-94f89814c4df --- .../java/org/libreccm/admin/ui/AdminView.java | 30 +++--- .../admin/ui/usersgroupsroles/UserEditor.java | 61 +++++++++--- .../ui/usersgroupsroles/UsersGroupsRoles.java | 96 ++++++++++++++++--- .../ui/admin/AdminResources.properties | 13 +++ .../ui/admin/AdminResources_de.properties | 15 ++- .../ui/admin/AdminResources_en.properties | 13 +++ .../ui/admin/AdminResources_fr.properties | 13 +++ 7 files changed, 197 insertions(+), 44 deletions(-) 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 61c53b6bf..df1d0f02d 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 @@ -26,10 +26,8 @@ import com.vaadin.navigator.ViewChangeListener; import com.vaadin.server.ClassResource; import com.vaadin.server.VaadinServlet; import com.vaadin.ui.Alignment; -import com.vaadin.ui.Component; import com.vaadin.ui.CssLayout; import com.vaadin.ui.CustomComponent; -import com.vaadin.ui.Grid; import com.vaadin.ui.GridLayout; import com.vaadin.ui.Image; import com.vaadin.ui.Label; @@ -40,16 +38,13 @@ import org.libreccm.admin.ui.usersgroupsroles.UsersGroupsRoles; import org.libreccm.admin.ui.usersgroupsroles.UsersTableDataProvider; import org.libreccm.l10n.GlobalizationHelper; import org.libreccm.security.PermissionChecker; -import org.libreccm.security.User; import org.libreccm.security.UserRepository; import java.util.ResourceBundle; import javax.annotation.PostConstruct; import javax.inject.Inject; -import javax.persistence.EntityManager; import javax.servlet.ServletContext; -import javax.servlet.ServletRequest; /** * @@ -63,12 +58,11 @@ public class AdminView extends CustomComponent implements View { public static final String VIEWNAME = "admin"; - private static final String COL_USER_NAME = "username"; - private static final String COL_GIVEN_NAME = "given_name"; - private static final String COL_FAMILY_NAME = "family_name"; - private static final String COL_EMAIL = "email"; - private static final String COL_BANNED = "banned"; - +// private static final String COL_USER_NAME = "username"; +// private static final String COL_GIVEN_NAME = "given_name"; +// private static final String COL_FAMILY_NAME = "family_name"; +// private static final String COL_EMAIL = "email"; +// private static final String COL_BANNED = "banned"; @Inject private ServletContext servletContext; @@ -83,7 +77,7 @@ public class AdminView extends CustomComponent implements View { @Inject private GlobalizationHelper globalizationHelper; - + @Inject private UsersTableDataProvider usersTableDataProvider; @@ -94,6 +88,7 @@ public class AdminView extends CustomComponent implements View { private final TabSheet tabSheet; // private final Grid usersTable; + private final TabSheet.Tab tabUsersGroupsRoles; private final UsersGroupsRoles usersGroupsRoles; private final JpqlConsole jpqlConsole; @@ -135,7 +130,8 @@ public class AdminView extends CustomComponent implements View { // // tabSheet.addTab(userGroupsRoles, "Users/Groups/Roles"); usersGroupsRoles = new UsersGroupsRoles(this); - tabSheet.addTab(usersGroupsRoles, "Users/Groups/Roles"); + tabUsersGroupsRoles = tabSheet.addTab(usersGroupsRoles, + "Users/Groups/Roles"); final ServletContext servletContext = VaadinServlet .getCurrent() @@ -182,8 +178,13 @@ public class AdminView extends CustomComponent implements View { bundle = ResourceBundle .getBundle(AdminUiConstants.ADMIN_BUNDLE, globalizationHelper.getNegotiatedLocale()); - + usersGroupsRoles.setDataProvider(usersTableDataProvider); + + tabUsersGroupsRoles.setCaption(bundle + .getString("ui.admin.tab.users_groups_roles.title")); + + usersGroupsRoles.localize(); } @Override @@ -192,7 +193,6 @@ public class AdminView extends CustomComponent implements View { // usersGroupsRoles.setUsers(userRepo.findAll()); } - protected JpqlConsoleController getJpqlConsoleController() { return jpqlConsoleController; } diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UserEditor.java b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UserEditor.java index 621f6eb89..6529fae66 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UserEditor.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UserEditor.java @@ -18,21 +18,26 @@ */ package org.libreccm.admin.ui.usersgroupsroles; +import com.arsdigita.ui.admin.AdminUiConstants; + import com.vaadin.data.provider.AbstractDataProvider; import com.vaadin.data.provider.Query; import com.vaadin.ui.Button; import com.vaadin.ui.FormLayout; import com.vaadin.ui.HorizontalLayout; +import com.vaadin.ui.ItemCaptionGenerator; import com.vaadin.ui.Panel; import com.vaadin.ui.PasswordField; import com.vaadin.ui.RadioButtonGroup; import com.vaadin.ui.TextField; +import com.vaadin.ui.UI; import com.vaadin.ui.VerticalLayout; import com.vaadin.ui.Window; import org.libreccm.core.UnexpectedErrorException; import org.libreccm.security.User; import java.util.Arrays; +import java.util.ResourceBundle; import java.util.stream.Stream; /** @@ -75,18 +80,26 @@ public class UserEditor extends Window { private void addWidgets() { - userName = new TextField("User name"); + final ResourceBundle bundle = ResourceBundle + .getBundle(AdminUiConstants.ADMIN_BUNDLE, + UI.getCurrent().getLocale()); + + userName = new TextField(bundle + .getString("ui.admin.user_edit.username.label")); userName.setRequiredIndicatorVisible(true); - familyName = new TextField("Family name"); + familyName = new TextField(bundle + .getString("ui.admin.user_edit.familyname.label")); - givenName = new TextField("Given name"); + givenName = new TextField(bundle + .getString("ui.admin.user_edit.givenname.label")); - emailAddress = new TextField("emailAddress"); + emailAddress = new TextField(bundle + .getString("ui.admin.user_edit.emailAddress.label")); emailAddress.setRequiredIndicatorVisible(true); passwordOptions = new RadioButtonGroup( - "Generate password or set manually?", + bundle.getString("ui.admin.user_edit.password_options.label"), new AbstractDataProvider() { private static final long serialVersionUID = 1L; @@ -108,11 +121,28 @@ public class UserEditor extends Window { } }); + passwordOptions.setItemCaptionGenerator( + (final PasswordOptions item) -> { + switch (item) { + case GENERATE_AND_SEND: + return bundle.getString( + "ui.admin.user_edit.password_options.generate_and_send"); + case SET: + return bundle.getString( + "ui.admin.user_edit.password_options.set"); + default: + throw new UnexpectedErrorException(String.format( + "Unexpected value '%s' for password options.", + item.toString())); + } + }); - password = new PasswordField("Password"); + password = new PasswordField(bundle + .getString("ui.admin.user_edit.password.label")); password.setRequiredIndicatorVisible(true); - passwordConfirmation = new PasswordField("Confirm password"); + passwordConfirmation = new PasswordField(bundle + .getString("ui.admin.user_set_password_confirm.label")); passwordConfirmation.setRequiredIndicatorVisible(true); passwordOptions.addValueChangeListener(event -> { @@ -140,15 +170,16 @@ public class UserEditor extends Window { final Button submit = new Button(); if (user == null) { - submit.setCaption("Create new user"); + submit.setCaption(bundle.getString( + "ui.admin.user.createpanel.header")); } else { - submit.setCaption("Save"); + submit.setCaption(bundle.getString("ui.admin.save")); } - final Button cancel = new Button("Cancel"); + final Button cancel = new Button(bundle.getString("ui.admin.cancel")); final HorizontalLayout buttons = new HorizontalLayout(submit, cancel); - + final FormLayout formLayout = new FormLayout(userName, familyName, givenName, @@ -156,14 +187,16 @@ public class UserEditor extends Window { passwordOptions, password, passwordConfirmation); - + final VerticalLayout layout = new VerticalLayout(formLayout, buttons); final Panel panel = new Panel(layout); if (user == null) { - panel.setCaption("Create new user"); + panel.setCaption(bundle + .getString("ui.admin.user.createpanel.header")); } else { - panel.setCaption("Edit user"); + panel.setCaption(bundle + .getString("ui.admin.user_details.edit")); } setContent(panel); diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java index 69c83dfff..ef30ab9bf 100644 --- a/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java +++ b/ccm-core/src/main/java/org/libreccm/admin/ui/usersgroupsroles/UsersGroupsRoles.java @@ -34,6 +34,7 @@ import com.vaadin.ui.themes.ValoTheme; import org.libreccm.admin.ui.AdminView; import org.libreccm.security.User; +import java.util.Locale; import java.util.ResourceBundle; /** @@ -49,20 +50,28 @@ public class UsersGroupsRoles extends CustomComponent { private static final String COL_FAMILY_NAME = "family_name"; private static final String COL_EMAIL = "email"; private static final String COL_BANNED = "banned"; + private static final String COL_PASSWORD_RESET_REQUIRED + = "password_reset_required"; + private static final String COL_EDIT = "edit"; + private static final String COL_DELETE = "delete"; private final AdminView view; private final TabSheet tabSheet; - + private final Grid usersTable; + private final TextField userNameFilter; + private final Button clearFiltersButton; + private UsersTableDataProvider usersTableDataProvider; public UsersGroupsRoles(final AdminView view) { this.view = view; - final ResourceBundle bundle = ResourceBundle.getBundle( - AdminUiConstants.ADMIN_BUNDLE, UI.getCurrent().getLocale()); + final ResourceBundle bundle = ResourceBundle + .getBundle(AdminUiConstants.ADMIN_BUNDLE, + UI.getCurrent().getLocale()); tabSheet = new TabSheet(); usersTable = new Grid<>(); @@ -94,16 +103,39 @@ public class UsersGroupsRoles extends CustomComponent { .setId(COL_BANNED) .setCaption("Banned?"); usersTable - .addColumn(user -> "Edit", + .addColumn(user -> { + if (user.isPasswordResetRequired()) { + return bundle.getString( + "ui.admin.user.password_reset_required_yes"); + } else { + return bundle.getString( + "ui.admin.user.password_reset_required_no"); + } + }) + .setId(COL_PASSWORD_RESET_REQUIRED) + .setCaption("Password reset required"); + usersTable + .addColumn(user -> bundle.getString("ui.admin.users.table.edit"), new ButtonRenderer<>(event -> { - final UserEditor editor = new UserEditor(event.getItem()); + final UserEditor editor = new UserEditor(event + .getItem()); editor.center(); UI.getCurrent().addWindow(editor); - })); + })) + .setId(COL_EDIT); + usersTable + .addColumn(user -> bundle.getString("ui.admin.users.table.delete"), + new ButtonRenderer<>(event -> { + final UserEditor editor = new UserEditor(event + .getItem()); + editor.center(); + UI.getCurrent().addWindow(editor); + })) + .setId(COL_DELETE); final HeaderRow filterRow = usersTable.appendHeaderRow(); final HeaderCell userNameFilterCell = filterRow.getCell(COL_USER_NAME); - final TextField userNameFilter = new TextField(); + userNameFilter = new TextField(); userNameFilter.setPlaceholder("User name"); userNameFilter.setDescription("Filter users by username"); userNameFilter.addStyleName(ValoTheme.TEXTFIELD_TINY); @@ -113,14 +145,14 @@ public class UsersGroupsRoles extends CustomComponent { .setUserNameFilter(event.getValue().toLowerCase()); }); userNameFilterCell.setComponent(userNameFilter); - + final HeaderRow actionsRow = usersTable.prependHeaderRow(); - final HeaderCell actionsCell = actionsRow.join(COL_USER_NAME, - COL_GIVEN_NAME, - COL_FAMILY_NAME, - COL_EMAIL, - COL_BANNED); - final Button clearFiltersButton = new Button("Clear filters"); + final HeaderCell actionsCell = actionsRow.join(COL_USER_NAME, + COL_GIVEN_NAME, + COL_FAMILY_NAME, + COL_EMAIL, + COL_BANNED); + clearFiltersButton = new Button("Clear filters"); clearFiltersButton.addStyleName(ValoTheme.BUTTON_TINY); clearFiltersButton.addClickListener(event -> { // usersTableDataProvider.setUserNameFilter(null); @@ -136,6 +168,42 @@ public class UsersGroupsRoles extends CustomComponent { } + public void localize() { + + final ResourceBundle bundle = ResourceBundle + .getBundle(AdminUiConstants.ADMIN_BUNDLE, + UI.getCurrent().getLocale()); + + usersTable + .getColumn(COL_USER_NAME) + .setCaption(bundle.getString("ui.admin.users.table.screenname")); + usersTable + .getColumn(COL_GIVEN_NAME) + .setCaption(bundle.getString("ui.admin.users.table.givenname")); + usersTable + .getColumn(COL_FAMILY_NAME) + .setCaption(bundle.getString("ui.admin.users.table.familyname")); + usersTable + .getColumn(COL_EMAIL) + .setCaption(bundle.getString("ui.admin.users.table.primary_email")); + usersTable + .getColumn(COL_BANNED) + .setCaption(bundle.getString("ui.admin.users.table.banned")); + usersTable + .getColumn(COL_PASSWORD_RESET_REQUIRED) + .setCaption(bundle.getString( + "ui.admin.users.table.password_reset_required")); + + userNameFilter.setPlaceholder(bundle + .getString("ui.admin.users.table.filter.screenname.placeholder")); + userNameFilter.setDescription(bundle + .getString("ui.admin.users.table.filter.screenname.description")); + + clearFiltersButton.setCaption(bundle + .getString("ui.admin.users.table.filter.clear")); + + } + // public void setUsers(final List users) { // usersTable.setItems(users); // } diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties index f640e29be..4bdc53b5a 100644 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources.properties @@ -559,3 +559,16 @@ ui.admin.user.banned_yes=Yes ui.admin.user.banned_no=No ui.admin.jpqlconsole.query=Query ui.admin.jpqlconsole.results.none=No results +ui.admin.users.table.password_reset_required=Password reset required +ui.admin.users.table.edit=Edit +ui.admin.users.table.delete=Delete +ui.admin.user.password_reset_required_yes=Yes +ui.admin.user.password_reset_required_no=No +ui.admin.user_edit.emailAddress.label=E-Mail +ui.admin.user_edit.password_options.label=Generate password or set manually? +ui.admin.user_edit.password.label=Password +ui.admin.users.table.filter.screenname.placeholder=User name +ui.admin.users.table.filter.screenname.description=Filter users by user name +ui.admin.user_set_password_confirm.label=Confirm password +ui.admin.user_edit.password_options.generate_and_send=Generate and send to user +ui.admin.user_edit.password_options.set=Set password diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties index 686c40c40..74ee23d0a 100644 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_de.properties @@ -228,7 +228,7 @@ ui.admin.new_user_form.error.username_already_in_use=Der angegebene Benutzername ui.admin.new_user_form.error.email_already_in_use=Die angegebene E-Mail-Adresse ist bereits mit einem Benutzerkonto verbunden. ui.admin.new_user_form.error.password_do_not_match=Die eingegebenen Passw\u00f6rter stimmen nicht \u00fcberein. ui.admin.new_user_form.error.failed_to_send_password=Fehler beim Senden des Passworts an den neuen Benutzer. -ui.admin.new_user_form.password_options.set_password=Passwert setzen +ui.admin.new_user_form.password_options.set_password=Passwort setzen ui.admin.user_details.groups=Gruppen ui.admin.user.groups.edit=Bearbeiten ui.admin.user.roles=Zugewiesene Rollen @@ -563,3 +563,16 @@ ui.admin.user.banned_yes=Ja ui.admin.user.banned_no=Nein ui.admin.jpqlconsole.query=Abfrage ui.admin.jpqlconsole.results.none=Keine Ergebnisse +ui.admin.users.table.password_reset_required=Passwort muss neu gesetzt werden +ui.admin.users.table.edit=Bearbeiten +ui.admin.users.table.delete=L\u00f6schen +ui.admin.user.password_reset_required_yes=Ja +ui.admin.user.password_reset_required_no=Nein +ui.admin.user_edit.emailAddress.label=E-Mail +ui.admin.user_edit.password_options.label=Passwort generieren oder manuell setzen? +ui.admin.user_edit.password.label=Passwort +ui.admin.users.table.filter.screenname.placeholder=Benutzername +ui.admin.users.table.filter.screenname.description=Filter users by user name +ui.admin.user_set_password_confirm.label=Passwort best\u00e4tigen +ui.admin.user_edit.password_options.generate_and_send=Generieren und an Benutzer senden +ui.admin.user_edit.password_options.set=Passwort setzen diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties index 0af3bc408..2026225d7 100755 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_en.properties @@ -556,3 +556,16 @@ ui.admin.user.banned_yes=Yes ui.admin.user.banned_no=No ui.admin.jpqlconsole.query=Query ui.admin.jpqlconsole.results.none=No results +ui.admin.users.table.password_reset_required=Password reset required +ui.admin.users.table.edit=Edit +ui.admin.users.table.delete=Delete +ui.admin.user.password_reset_required_yes=Yes +ui.admin.user.password_reset_required_no=No +ui.admin.user_edit.emailAddress.label=E-Mail +ui.admin.user_edit.password_options.label=Generate password or set manually? +ui.admin.user_edit.password.label=Password +ui.admin.users.table.filter.screenname.placeholder=User name +ui.admin.users.table.filter.screenname.description=Filter users by user name +ui.admin.user_set_password_confirm.label=Confirm password +ui.admin.user_edit.password_options.generate_and_send=Generate and send to user +ui.admin.user_edit.password_options.set=Set password diff --git a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties index 55da1c987..0fa36dd98 100755 --- a/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties +++ b/ccm-core/src/main/resources/com/arsdigita/ui/admin/AdminResources_fr.properties @@ -547,3 +547,16 @@ ui.admin.user.banned_yes=Yes ui.admin.user.banned_no=No ui.admin.jpqlconsole.query=Query ui.admin.jpqlconsole.results.none=No results +ui.admin.users.table.password_reset_required=Password reset required +ui.admin.users.table.edit=Edit +ui.admin.users.table.delete=Delete +ui.admin.user.password_reset_required_yes=Yes +ui.admin.user.password_reset_required_no=No +ui.admin.user_edit.emailAddress.label=E-Mail +ui.admin.user_edit.password_options.label=Generate password or set manually? +ui.admin.user_edit.password.label=Password +ui.admin.users.table.filter.screenname.placeholder=User name +ui.admin.users.table.filter.screenname.description=Filter users by user name +ui.admin.user_set_password_confirm.label=Confirm password +ui.admin.user_edit.password_options.generate_and_send=Generate and send to user +ui.admin.user_edit.password_options.set=Set password