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
ccm-docs
jensp 2017-05-05 19:21:38 +00:00
parent a6d8836bc4
commit e77fc73b85
7 changed files with 197 additions and 44 deletions

View File

@ -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<User> 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;
}

View File

@ -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<PasswordOptions>(
"Generate password or set manually?",
bundle.getString("ui.admin.user_edit.password_options.label"),
new AbstractDataProvider<PasswordOptions, String>() {
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);

View File

@ -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<User> 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<User> users) {
// usersTable.setItems(users);
// }

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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