refactored the UserManagement.html entry point's UI

This commit is contained in:
Axel Uhl committed 2014-10-14 18:11:43 +02:00
1 parent afb57bd7b3
commit c5bc285e3a
16 files changed
+353 -236

No files matched your search

@@ -281,19 +281,6 @@ public class AdminConsoleEntryPoint extends AbstractEntryPoint implements Regatt
rootPanel.add(dockPanel);
}
/**
* Sets the sizie of the tab panel when the tab panel is attached to the DOM
*/
private void setTabPanelSize(final TabLayoutPanel advancedTabPanel, final String width, final String height) {
advancedTabPanel.addAttachHandler(new Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
advancedTabPanel.getElement().getParentElement().getStyle().setProperty("width", width);
advancedTabPanel.getElement().getParentElement().getStyle().setProperty("height", height);
}
});
}
private void refreshDataFor(Widget widget) {
Widget target = widget;
if (widget != null) {
@@ -95,9 +95,9 @@ public class RegattaWithSeriesAndFleetsCreateDialog extends RegattaWithSeriesAnd
}
public RegattaWithSeriesAndFleetsCreateDialog(Collection<RegattaDTO> existingRegattas,
List<EventDTO> existingEvents, StringMessages stringConstants, DialogCallback<RegattaDTO> callback) {
super(new RegattaDTO(), existingEvents, stringConstants.addRegatta(), stringConstants.ok(), stringConstants,
new RegattaParameterValidator(stringConstants, existingRegattas), callback);
List<EventDTO> existingEvents, StringMessages stringMessages, DialogCallback<RegattaDTO> callback) {
super(new RegattaDTO(), existingEvents, stringMessages.addRegatta(), stringMessages.ok(), stringMessages,
new RegattaParameterValidator(stringMessages, existingRegattas), callback);
this.seriesEditor = new SeriesWithFleetsListEditor(Collections.<SeriesDTO>emptyList(), stringMessages, resources.removeIcon(), /*enableFleetRemoval*/true);
}
@@ -5,6 +5,8 @@ import com.google.gwt.core.client.GWT;
import com.google.gwt.debug.client.DebugInfo;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.resources.client.TextResource;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
@@ -13,6 +15,7 @@ import com.google.gwt.user.client.ui.DialogBox;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.gwt.client.async.MarkedAsyncCallback;
@@ -136,4 +139,17 @@ public abstract class AbstractEntryPoint implements EntryPoint, ErrorReporter, W
});
return myErrorDialogBox;
}
/**
* Sets the size of the tab panel when the tab panel is attached to the DOM
*/
protected void setTabPanelSize(final TabLayoutPanel advancedTabPanel, final String width, final String height) {
advancedTabPanel.addAttachHandler(new Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
advancedTabPanel.getElement().getParentElement().getStyle().setProperty("width", width);
advancedTabPanel.getElement().getParentElement().getStyle().setProperty("height", height);
}
});
}
}
@@ -15,7 +15,9 @@ Require-Bundle: javax.servlet;bundle-version="2.5.0",
com.sap.sse.gwt;bundle-version="1.0.0",
com.google.gwt.osgi;bundle-version="2.6.0",
com.sap.sse.security;bundle-version="1.0.0",
org.json.simple
org.json.simple,
com.sap.sailing.domain.common,
com.sap.sse.common
Web-ContextPath: /security/ui
Export-Package: com.sap.sse.security.ui.client,
com.sap.sse.security.ui.loginpanel,
@@ -10,6 +10,8 @@ public interface StringMessages extends Messages {
String password();
String passwordRepeat();
String loggedIn();
String signIn();
@@ -39,4 +41,25 @@ public interface StringMessages extends Messages {
String close();
String loading();
String users();
String addURLFilter();
String ok();
String cancel();
String username();
String email();
String usernameMustHaveAtLeastNCharacters(int minimumUsernameLength);
String passwordMustHaveAtLeastNCharacters(int minimumPasswordLength);
String passwordsDontMatch();
String couldNotCreateUser(String message);
}
@@ -1,5 +1,6 @@
name=Name
password=Password
passwordRepeat=Repeat password
loggedIn=Logged in!
signIn=Sign in
signUp=Sign up
@@ -15,3 +16,13 @@ fetchingUserInformation=Fetching user information...
signedInAs=Signed in as {0}
close=Close
loading=Loading...
users=Users
addURLFilter=Add URL filter
ok=OK
cancel=Cancel
username=User name
email=e-mail
usernameMustHaveAtLeastNCharacters=User name must have at least {0} characters
passwordMustHaveAtLeastNCharacters=Password must have at least {0} characters
passwordsDontMatch=Passwords don''t match
couldNotCreateUser=Could not create user: {0}
@@ -1,5 +1,6 @@
name=Name
password=Passwort
passwordRepeat=Passwort Wiederholung
loggedIn=Angemeldet!
signIn=Anmelden
signUp=Registrieren
@@ -15,3 +16,13 @@ fetchingUserInformation=Benutzerdaten werden geladen...
signedInAs=Angemeldet als {0}
close=Schliessen
loading=Lädt...
users=Benutzer
addURLFilter=URL-Filter hinzufügen
ok=OK
cancel=Abbrechen
username=Benutzername
email=e-Mail
usernameMustHaveAtLeastNCharacters=Benutzername muss mindestens {0} Zeichen haben
passwordMustHaveAtLeastNCharacters=Passwort muss mindestens {0} Zeichen haben
passwordsDontMatch=Passwort und Passwortwiederholung stimmen nicht überein
couldNotCreateUser=Benutzer konnte nicht angelegt werden: {0}
@@ -3,6 +3,5 @@ package com.sap.sse.security.ui.client;
import com.sap.sse.security.ui.shared.UserDTO;
public interface UserChangeEventHandler {
void onUserChange(UserDTO user);
}
@@ -0,0 +1,132 @@
package com.sap.sse.security.ui.client.component;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.Widget;
import com.sap.sse.gwt.client.dialog.DataEntryDialog;
import com.sap.sse.security.ui.client.StringMessages;
import com.sap.sse.security.ui.client.component.CreateUserDialog.UserData;
import com.sap.sse.security.ui.client.component.UserManagementPanel.UserCreationEventHandler;
import com.sap.sse.security.ui.shared.UserDTO;
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
/**
* Produces username, e-mail and password as the dialog's result.
*
* @author Axel Uhl (D043530)
*
*/
public class CreateUserDialog extends DataEntryDialog<UserData> {
private static final int MINIMUM_USERNAME_LENGTH = 3;
private static final int MINIMUM_PASSWORD_LENGTH = 5;
private final StringMessages stringMessages;
private TextBox nameBox;
private TextBox emailBox;
private PasswordTextBox pwBox;
private PasswordTextBox pwRepeat;
public static class UserData {
private final String username;
private final String email;
private final String password;
private final String passwordRepeat;
protected UserData(String username, String email, String password, String passwordRepeat) {
super();
this.username = username;
this.email = email;
this.password = password;
this.passwordRepeat = passwordRepeat;
}
public String getUsername() {
return username;
}
public String getEmail() {
return email;
}
public String getPassword() {
return password;
}
public String getPasswordRepeat() {
return passwordRepeat;
}
}
public CreateUserDialog(final StringMessages stringMessages,
final UserManagementServiceAsync userManagementService,
final Iterable<UserCreationEventHandler> handlers) {
super(stringMessages.createUser(), stringMessages.createUser(), stringMessages.ok(), stringMessages.cancel(),
new DataEntryDialog.Validator<UserData>() {
@Override
public String getErrorMessage(UserData valueToValidate) {
final String result;
if (valueToValidate.getUsername().length() < MINIMUM_USERNAME_LENGTH) {
result = stringMessages.usernameMustHaveAtLeastNCharacters(MINIMUM_USERNAME_LENGTH);
} else if (valueToValidate.getPassword().length() < MINIMUM_PASSWORD_LENGTH) {
result = stringMessages.passwordMustHaveAtLeastNCharacters(MINIMUM_PASSWORD_LENGTH);
} else if (!valueToValidate.getPassword().equals(valueToValidate.getPasswordRepeat())) {
result = stringMessages.passwordsDontMatch();
} else {
result = null;
}
return result;
}
}, new DialogCallback<UserData>() {
@Override
public void ok(UserData usernameEmailPassword) {
userManagementService.createSimpleUser(usernameEmailPassword.getUsername(), usernameEmailPassword.getEmail(), usernameEmailPassword.getPassword(), new AsyncCallback<UserDTO>() {
@Override
public void onSuccess(UserDTO result) {
for (UserCreationEventHandler handler : handlers) {
handler.onUserCreation(result);
}
}
@Override
public void onFailure(Throwable caught) {
Window.alert(stringMessages.couldNotCreateUser(caught.getMessage()));
}
});
}
@Override
public void cancel() {
}
});
this.stringMessages = stringMessages;
}
@Override
public void show() {
super.show();
nameBox.setFocus(true);
}
@Override
protected Widget getAdditionalWidget() {
Grid result = new Grid(4, 2);
result.setWidget(0, 0, new Label(stringMessages.username()));
nameBox = createTextBox("", 30);
result.setWidget(0, 1, nameBox);
result.setWidget(1, 0, new Label(stringMessages.email()));
emailBox = createTextBox("", 30);
result.setWidget(1, 1, emailBox);
result.setWidget(2, 0, new Label(stringMessages.password()));
pwBox = createPasswordTextBox("", 30);
result.setWidget(2, 1, pwBox);
result.setWidget(3, 0, new Label(stringMessages.passwordRepeat()));
pwRepeat = createPasswordTextBox("", 30);
result.setWidget(3, 1, pwRepeat);
return result;
}
@Override
protected UserData getResult() {
return new UserData(nameBox.getText(), emailBox.getText(), pwBox.getText(), pwRepeat.getText());
}
}
@@ -1,87 +0,0 @@
package com.sap.sse.security.ui.client.component;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.PasswordTextBox;
import com.google.gwt.user.client.ui.TextBox;
import com.sap.sse.security.ui.shared.UserDTO;
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
public class CreateUserPanel extends FlowPanel {
private List<UserCreationEventHandler> handlers = new ArrayList<>();
public CreateUserPanel(final UserManagementServiceAsync userManagementService) {
Label title = new Label("Create a new user");
title.getElement().getStyle().setFontSize(25, Unit.PX);
Label name = new Label("Username:");
this.add(name);
final TextBox nameBox = new TextBox();
this.add(nameBox);
Label email = new Label("Email:");
this.add(email);
final TextBox emailBox = new TextBox();
this.add(emailBox);
Label pw = new Label("Password:");
this.add(pw);
final TextBox pwBox = new PasswordTextBox();
this.add(pwBox);
Label pwRepeat = new Label("Repeat password:");
this.add(pwRepeat);
final TextBox pwRepeatBox = new PasswordTextBox();
this.add(pwRepeatBox);
Button create = new Button("Create", new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
String name = nameBox.getText();
String email = emailBox.getText();
String pw = pwBox.getText();
String pwRepeat = pwRepeatBox.getText();
if (name.length() >= 3 && pw.equals(pwRepeat) && pw.length() >= 5){
userManagementService.createSimpleUser(name, email, pw, new AsyncCallback<UserDTO>() {
@Override
public void onSuccess(UserDTO result) {
for (UserCreationEventHandler handler : handlers){
handler.onUserCreation(result);
}
}
@Override
public void onFailure(Throwable caught) {
Window.alert("Could not create user!");
}
});
}
else {
Window.alert("Invalid crendetials entered!");
}
}
});
this.add(create);
}
public void addUserCreationEventHandler(UserCreationEventHandler handler){
this.handlers.add(handler);
}
public void removeUserCreationEventHandler(UserCreationEventHandler handler){
this.handlers.remove(handler);
}
public static interface UserCreationEventHandler extends EventHandler {
void onUserCreation(UserDTO user);
}
}
@@ -17,36 +17,38 @@ import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.CheckBox;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.FlowPanel;
import com.google.gwt.user.client.ui.HTML;
import com.google.gwt.user.client.ui.ImageResourceRenderer;
import com.google.gwt.user.client.ui.IntegerBox;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.LayoutPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.sap.sse.security.ui.client.StringMessages;
import com.sap.sse.security.ui.client.resources.IconResources;
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
import com.sap.sse.security.ui.usermanagement.UserManagementEntryPoint;
public class SettingsPanel extends FlowPanel {
public class SettingsPanel extends LayoutPanel {
private UserManagementServiceAsync userManagementService;
private Map<String, String> settings = null;
private Map<String, String> settingTypes = null;
private Map<String, FlexTable> savedTabs = new HashMap<>();
private final StringMessages stringMessages;
public SettingsPanel(UserManagementServiceAsync userManagementService) {
public SettingsPanel(UserManagementServiceAsync userManagementService, StringMessages stringMessages) {
super();
setHeight("600px");
this.stringMessages = stringMessages;
this.userManagementService = userManagementService;
initComponents();
}
private void initComponents() {
clear();
Label settingsTitle = new Label("Settings");
add(settingsTitle);
userManagementService.getSettingTypes(new AsyncCallback<Map<String, String>>() {
@Override
public void onFailure(Throwable caught) {
}
@@ -77,6 +79,7 @@ public class SettingsPanel extends FlowPanel {
}
TabLayoutPanel tabPanel = new TabLayoutPanel(30, Unit.PX);
tabPanel.setHeight("95%");
UserManagementEntryPoint.setTabPanelSize(tabPanel, "100%", "95%");
Map<String, Integer> numberOfSettings = new HashMap<>();
for (Entry<String, String> e : settingTypes.entrySet()) {
@@ -116,7 +119,7 @@ public class SettingsPanel extends FlowPanel {
table.setWidget(newline, 1, url);
table.setWidget(newline, 2, filter);
Button add = new Button("Add url filter", new ClickHandler() {
Button add = new Button(stringMessages.addURLFilter(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
@@ -133,7 +136,6 @@ public class SettingsPanel extends FlowPanel {
}
});
userManagementService.addSetting("URLS_AUTH_" + key.getText(), String.class.getName(), filter.getText(), new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
@@ -148,7 +150,7 @@ public class SettingsPanel extends FlowPanel {
});
table.setWidget(newline+1, 0, add);
}
clear();
add(tabPanel);
}
@@ -5,12 +5,11 @@ import com.google.gwt.resources.client.ImageResource;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.user.cellview.client.CellList;
import com.google.gwt.user.client.ui.ImageResourceRenderer;
import com.google.gwt.view.client.ProvidesKey;
import com.sap.sse.security.ui.shared.UserDTO;
public class UserList extends CellList<UserDTO> {
public UserList(ProvidesKey<UserDTO> keyProvider) {
super(new UserCell(), keyProvider);
public UserList() {
super(new UserCell());
}
public static class UserCell extends AbstractCell<UserDTO> {
@@ -4,11 +4,11 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.view.client.AbstractDataProvider;
import com.google.gwt.view.client.HasData;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.Range;
import com.sap.sse.security.ui.shared.UserDTO;
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
@@ -18,8 +18,7 @@ public class UserListDataProvider extends AbstractDataProvider<UserDTO> {
private UserManagementServiceAsync userManagementService;
private TextBox filterBox;
public UserListDataProvider(UserManagementServiceAsync userManagementService, TextBox filterBox, ProvidesKey<UserDTO> keyProvider) {
super(keyProvider);
public UserListDataProvider(UserManagementServiceAsync userManagementService, TextBox filterBox) {
this.userManagementService = userManagementService;
this.filterBox = filterBox;
}
@@ -28,10 +27,9 @@ public class UserListDataProvider extends AbstractDataProvider<UserDTO> {
protected void onRangeChanged(HasData<UserDTO> display) {
final Range range = display.getVisibleRange();
userManagementService.getFilteredSortedUserList(filterBox.getText(), new AsyncCallback<Collection<UserDTO>>() {
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
@Override
@@ -0,0 +1,109 @@
package com.sap.sse.security.ui.client.component;
import java.util.ArrayList;
import java.util.List;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.event.dom.client.KeyUpEvent;
import com.google.gwt.event.dom.client.KeyUpHandler;
import com.google.gwt.event.shared.EventHandler;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DockPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.google.gwt.view.client.SingleSelectionModel;
import com.sap.sse.security.ui.client.StringMessages;
import com.sap.sse.security.ui.client.UserChangeEventHandler;
import com.sap.sse.security.ui.shared.UserDTO;
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
public class UserManagementPanel extends DockPanel {
private List<UserCreationEventHandler> handlers = new ArrayList<>();
private SingleSelectionModel<UserDTO> singleSelectionModel;
private UserListDataProvider userListDataProvider;
public UserManagementPanel(final UserManagementServiceAsync userManagementService, final StringMessages stringMessages) {
VerticalPanel west = new VerticalPanel();
singleSelectionModel = new SingleSelectionModel<>();
Button createButton = new Button(stringMessages.createUser(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
new CreateUserDialog(stringMessages, userManagementService, handlers).show();
}
});
west.add(createButton);
final UserList userList = new UserList();
userList.setSelectionModel(singleSelectionModel);
final UserDetailsView userDetailsView = new UserDetailsView(userManagementService, singleSelectionModel.getSelectedObject());
add(userDetailsView, DockPanel.CENTER);
userDetailsView.addUserChangeEventHandler(new UserChangeEventHandler() {
@Override
public void onUserChange(UserDTO user) {
userListDataProvider.updateDisplays();
}
});
singleSelectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
userDetailsView.updateUser(singleSelectionModel.getSelectedObject());
}
});
userList.setPageSize(4);
TextBox filterBox = new TextBox();
userListDataProvider = new UserListDataProvider(userManagementService, filterBox);
userListDataProvider.addDataDisplay(userList);
SimplePager pager = new SimplePager(TextLocation.CENTER, false, 10, true);
pager.setDisplay(userList);
ScrollPanel scrollPanel = new ScrollPanel(userList);
filterBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
userListDataProvider.updateDisplays();
}
});
filterBox.addKeyUpHandler(new KeyUpHandler() {
@Override
public void onKeyUp(KeyUpEvent event) {
userListDataProvider.updateDisplays();
}
});
filterBox.getElement().setPropertyString("placeholder", stringMessages.filterUsers());
west.add(filterBox);
west.add(pager);
west.add(scrollPanel);
add(west, DockPanel.WEST);
addUserCreationEventHandler(new UserCreationEventHandler() {
@Override
public void onUserCreation(UserDTO user) {
userListDataProvider.updateDisplays();
if (user != null) {
singleSelectionModel.setSelected(user, true);
}
}
});
}
public void addUserCreationEventHandler(UserCreationEventHandler handler){
this.handlers.add(handler);
}
public void removeUserCreationEventHandler(UserCreationEventHandler handler){
this.handlers.remove(handler);
}
public static interface UserCreationEventHandler extends EventHandler {
void onUserCreation(UserDTO user);
}
}
@@ -23,6 +23,7 @@ import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.sap.sailing.domain.common.impl.NaturalComparator;
import com.sap.sse.security.Credential;
import com.sap.sse.security.DefaultRoles;
import com.sap.sse.security.SecurityService;
@@ -145,12 +146,11 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U
users.add(createUserDTOFromUser(u));
}
}
Collections.sort(users, new Comparator<UserDTO>() {
private final NaturalComparator naturalComparator = new NaturalComparator(/* caseSensitive */ false);
@Override
public int compare(UserDTO u1, UserDTO u2) {
return u1.getName().compareTo(u2.getName());
return naturalComparator.compare(u1.getName(), u2.getName());
}
});
return users;
@@ -3,40 +3,22 @@ package com.sap.sse.security.ui.usermanagement;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Style.Unit;
import com.google.gwt.event.dom.client.ChangeEvent;
import com.google.gwt.event.dom.client.ChangeHandler;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.cellview.client.SimplePager;
import com.google.gwt.user.cellview.client.SimplePager.TextLocation;
import com.google.gwt.event.logical.shared.AttachEvent;
import com.google.gwt.event.logical.shared.AttachEvent.Handler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.DockLayoutPanel;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.RootLayoutPanel;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.ScrollPanel;
import com.google.gwt.user.client.ui.SimpleLayoutPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.view.client.ProvidesKey;
import com.google.gwt.view.client.SelectionChangeEvent;
import com.google.gwt.view.client.SelectionChangeEvent.Handler;
import com.google.gwt.view.client.SingleSelectionModel;
import com.google.gwt.user.client.ui.TabLayoutPanel;
import com.sap.sse.gwt.client.EntryPointHelper;
import com.sap.sse.security.ui.client.RemoteServiceMappingConstants;
import com.sap.sse.security.ui.client.Resources;
import com.sap.sse.security.ui.client.StringMessages;
import com.sap.sse.security.ui.client.UserChangeEventHandler;
import com.sap.sse.security.ui.client.UserService;
import com.sap.sse.security.ui.client.UserStatusEventHandler;
import com.sap.sse.security.ui.client.component.CreateUserPanel;
import com.sap.sse.security.ui.client.component.CreateUserPanel.UserCreationEventHandler;
import com.sap.sse.security.ui.client.component.SettingsPanel;
import com.sap.sse.security.ui.client.component.UserDetailsView;
import com.sap.sse.security.ui.client.component.UserList;
import com.sap.sse.security.ui.client.component.UserListDataProvider;
import com.sap.sse.security.ui.client.component.UserManagementPanel;
import com.sap.sse.security.ui.loginpanel.LoginPanel;
import com.sap.sse.security.ui.shared.UserDTO;
import com.sap.sse.security.ui.shared.UserManagementService;
@@ -48,33 +30,16 @@ public class UserManagementEntryPoint implements EntryPoint {
private final StringMessages stringMessages = GWT.create(StringMessages.class);
private SimpleLayoutPanel center;
private TextBox filterBox = new TextBox();
private TabLayoutPanel center;
private UserDTO user;
private ProvidesKey<UserDTO> keyProvider = new ProvidesKey<UserDTO>() {
public Object getKey(UserDTO item) {
// Always do a null check.
return (item == null) ? null : item.getName();
}
};
private UserListDataProvider userListDataProvider = new UserListDataProvider(userManagementService, filterBox, keyProvider);
private SingleSelectionModel<UserDTO> singleSelectionModel = new SingleSelectionModel<>(keyProvider);
@Override
public void onModuleLoad() {
EntryPointHelper.registerASyncService((ServiceDefTarget) userManagementService,
RemoteServiceMappingConstants.userManagementServiceRemotePath);
UserService userService = new UserService(userManagementService);
center = new SimpleLayoutPanel();
RootLayoutPanel rootPanel = RootLayoutPanel.get();
DockLayoutPanel dockPanel = new DockLayoutPanel(Unit.PX);
rootPanel.add(dockPanel);
HorizontalPanel hp = new HorizontalPanel();
center = new TabLayoutPanel(2.5, Unit.EM);
userService.addUserStatusEventHandler(new UserStatusEventHandler() {
@Override
public void onUserStatusChange(UserDTO user) {
@@ -84,76 +49,26 @@ public class UserManagementEntryPoint implements EntryPoint {
UserManagementEntryPoint.this.user = user;
}
});
Button createButton = new Button(stringMessages.createUser(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
CreateUserPanel createUserPanel = new CreateUserPanel(userManagementService);
createUserPanel.addUserCreationEventHandler(new UserCreationEventHandler() {
@Override
public void onUserCreation(UserDTO user) {
userListDataProvider.updateDisplays();
if (user != null) {
singleSelectionModel.setSelected(user, true);
}
}
});
center.setWidget(createUserPanel);
}
});
hp.add(createButton);
Button settingsButton = new Button(stringMessages.settings(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
center.setWidget(new SettingsPanel(userManagementService));
}
});
hp.add(settingsButton);
dockPanel.addNorth(hp, 50);
final UserList userList = new UserList(keyProvider);
userList.setSelectionModel(singleSelectionModel);
singleSelectionModel.addSelectionChangeHandler(new Handler() {
@Override
public void onSelectionChange(SelectionChangeEvent event) {
final UserDetailsView userDetailsView = new UserDetailsView(userManagementService, singleSelectionModel.getSelectedObject());
userDetailsView.addUserChangeEventHandler(new UserChangeEventHandler() {
@Override
public void onUserChange(UserDTO user) {
userListDataProvider.updateDisplays();
}
});
center.setWidget(userDetailsView);
}
});
userList.setPageSize(4);
userListDataProvider.addDataDisplay(userList);
SimplePager pager = new SimplePager(TextLocation.CENTER, false, 10, true);
pager.setDisplay(userList);
ScrollPanel scrollPanel = new ScrollPanel(userList);
VerticalPanel vp = new VerticalPanel();
filterBox.addChangeHandler(new ChangeHandler() {
@Override
public void onChange(ChangeEvent event) {
userListDataProvider.updateDisplays();
}
});
filterBox.getElement().setPropertyString("placeholder", stringMessages.filterUsers());
vp.add(filterBox);
vp.add(pager);
vp.add(scrollPanel);
dockPanel.addWest(vp, 350);
dockPanel.add(center);
CreateUserPanel createUserPanel = new CreateUserPanel(userManagementService);
createUserPanel.addUserCreationEventHandler(new UserCreationEventHandler() {
@Override
public void onUserCreation(UserDTO user) {
userListDataProvider.updateDisplays();
if (user != null){
singleSelectionModel.setSelected(user, true);
}
}
});
center.setWidget(createUserPanel);
UserManagementPanel userManagementPanel = new UserManagementPanel(userManagementService, stringMessages);
center.add(new ScrollPanel(userManagementPanel), stringMessages.users());
final SettingsPanel settingsPanel = new SettingsPanel(userManagementService, stringMessages);
center.add(new ScrollPanel(settingsPanel), stringMessages.settings());
RootLayoutPanel.get().add(center);
RootPanel.get().add(new LoginPanel(Resources.INSTANCE.css(), userService));
setTabPanelSize(center, ""+Window.getClientWidth()+"px", ""+Window.getClientHeight()+"px");
}
/**
* Sets the size of the tab panel when the tab panel is attached to the DOM
*/
public static void setTabPanelSize(final TabLayoutPanel advancedTabPanel, final String width, final String height) {
advancedTabPanel.addAttachHandler(new Handler() {
@Override
public void onAttachOrDetach(AttachEvent event) {
advancedTabPanel.getElement().getParentElement().getStyle().setProperty("width", width);
advancedTabPanel.getElement().getParentElement().getStyle().setProperty("height", height);
}
});
}
}