restore selection after updating the user list; fixed validation success messages

This commit is contained in:
Axel Uhl committed 2014-10-20 16:09:59 +02:00
1 parent 26464239b5
commit fb7ac8b983
10 files changed
+64 -21

No files matched your search

@@ -129,4 +129,6 @@ public interface StringMessages extends com.sap.sse.gwt.client.StringMessages {
String failedToSignIn();
String emailValidationUnsuccessful(String username);
}
@@ -59,4 +59,5 @@ errorValidatingEmail=Error validating e-mail address of user {0}: {1}
emailValidatedSuccessfully=e-mail address of user {0} validated successfully
errorResettingPassword=Error resetting password for user {0}: {1}
successfullyResetPassword=Successfully reset password for user {0}. e-Mail has been sent.
failedToSignIn=Failed to sign in. Check your credentials.
failedToSignIn=Failed to sign in. Check your credentials.
emailValidationUnsuccessful=Validation of e-mail address for user {0} failed. Did you really use the latest validation code?
@@ -59,4 +59,5 @@ errorValidatingEmail=Fehler beim Validieren der e-Mail-Adresse für Benutzer {0}
emailValidatedSuccessfully=e-Mail-Adresse für Benutzer {0} erfolgreich validiert
errorResettingPassword=Fehler beim Zurücksetzen des Passworts für Benutzer {0}: {1}
successfullyResetPassword=Passwort für Benutzer {0} erfolgreich zurückgesetzt. e-Mail wurde versendet.
failedToSignIn=Anmeldung fehlgeschlagen. Zugangsdaten überprüfen.
failedToSignIn=Anmeldung fehlgeschlagen. Zugangsdaten überprüfen.
emailValidationUnsuccessful=Validierung der e-Mail-Adresse für Benutzer {0} fehlgeschlagen. Handelte es sich wirklich um den zuletzt ausgestellten Validierungs-Code?
@@ -92,10 +92,11 @@ public class UserDetailsView extends FlowPanel {
changeEmail.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
new EditEmailDialog(stringMessages, userManagementService, UserDetailsView.this.user, new DialogCallback<UserData>() {
final UserDTO clickedUser = UserDetailsView.this.user;
new EditEmailDialog(stringMessages, userManagementService, clickedUser, new DialogCallback<UserData>() {
@Override
public void ok(final UserData userData) {
userManagementService.updateSimpleUserEmail(UserDetailsView.this.user.getName(), userData.getEmail(), new MarkedAsyncCallback<Void>(
userManagementService.updateSimpleUserEmail(clickedUser.getName(), userData.getEmail(), new MarkedAsyncCallback<Void>(
new AsyncCallback<Void>() {
@Override
public void onFailure(Throwable caught) {
@@ -105,6 +106,9 @@ public class UserDetailsView extends FlowPanel {
@Override
public void onSuccess(Void result) {
emailLabel.setText(userData.getEmail());
for (UserChangeEventHandler handler : handlers) {
handler.onUserChange(clickedUser);
}
Window.alert(stringMessages.successfullyUpdatedEmail());
}
}));
@@ -2,7 +2,11 @@ package com.sap.sse.security.ui.client.component;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
@@ -10,6 +14,7 @@ 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.Range;
import com.google.gwt.view.client.SelectionModel;
import com.sap.sse.security.ui.shared.UserDTO;
import com.sap.sse.security.ui.shared.UserManagementServiceAsync;
@@ -24,7 +29,7 @@ public class UserListDataProvider extends AbstractDataProvider<UserDTO> {
}
@Override
protected void onRangeChanged(HasData<UserDTO> display) {
protected void onRangeChanged(final HasData<UserDTO> display) {
final Range range = display.getVisibleRange();
userManagementService.getFilteredSortedUserList(filterBox.getText(), new AsyncCallback<Collection<UserDTO>>() {
@Override
@@ -38,15 +43,35 @@ public class UserListDataProvider extends AbstractDataProvider<UserDTO> {
List<UserDTO> show = new ArrayList<>();
int start = range.getStart();
int end = range.getStart() + range.getLength();
for (int i = start; i < end && i < resultList.size(); i++){
show.add(resultList.get(i));
final SelectionModel<? super UserDTO> selectionModel = display.getSelectionModel();
Map<String, UserDTO> oldSelection = getSelectionByUsername(display, selectionModel);
Set<UserDTO> toSelect = new HashSet<>();
for (int i = start; i < end && i < resultList.size(); i++) {
final UserDTO e = resultList.get(i);
show.add(e);
if (oldSelection.containsKey(e.getName())) {
toSelect.add(e);
}
}
updateRowData(start, show);
updateRowCount(result.size(), true);
for (UserDTO userToSelect : toSelect) {
selectionModel.setSelected(userToSelect, true);
}
}
});
}
private Map<String, UserDTO> getSelectionByUsername(HasData<UserDTO> display, SelectionModel<? super UserDTO> selectionModel) {
Map<String, UserDTO> result = new HashMap<>();
for (UserDTO user : display.getVisibleItems()) {
if (selectionModel.isSelected(user)) {
result.put(user.getName(), user);
}
}
return result;
}
public void updateDisplays() {
for (HasData<UserDTO> hd : getDataDisplays()) {
onRangeChanged(hd);
@@ -27,15 +27,19 @@ public class EmailValidationEntryPoint implements EntryPoint {
final String validationSecret = Window.Location.getParameter("v");
RootLayoutPanel rootPanel = RootLayoutPanel.get();
final Label resultLabel = new Label();
userManagementService.validateEmail(username, validationSecret, new MarkedAsyncCallback<Void>(new AsyncCallback<Void>() {
userManagementService.validateEmail(username, validationSecret, new MarkedAsyncCallback<Boolean>(new AsyncCallback<Boolean>() {
@Override
public void onFailure(Throwable caught) {
resultLabel.setText(stringMessages.errorValidatingEmail(username, caught.getMessage()));
}
@Override
public void onSuccess(Void result) {
resultLabel.setText(stringMessages.emailValidatedSuccessfully(username));
public void onSuccess(Boolean result) {
if (result) {
resultLabel.setText(stringMessages.emailValidatedSuccessfully(username));
} else {
resultLabel.setText(stringMessages.emailValidationUnsuccessful(username));
}
}
}));
rootPanel.add(resultLabel);
@@ -173,8 +173,8 @@ public class UserManagementServiceImpl extends RemoteServiceServlet implements U
}
@Override
public void validateEmail(String username, String validationSecret) throws UserManagementException {
getSecurityService().validateEmail(username, validationSecret);
public boolean validateEmail(String username, String validationSecret) throws UserManagementException {
return getSecurityService().validateEmail(username, validationSecret);
}
@Override
@@ -26,7 +26,7 @@ public interface UserManagementService extends RemoteService {
void resetPassword(String username) throws UserManagementException, MailException;
void validateEmail(String username, String validationSecret) throws UserManagementException;
boolean validateEmail(String username, String validationSecret) throws UserManagementException;
SuccessInfo deleteUser(String username);
@@ -21,7 +21,7 @@ public interface UserManagementServiceAsync {
void resetPassword(String username, AsyncCallback<Void> callback);
void validateEmail(String username, String validationSecret, AsyncCallback<Void> markedAsyncCallback);
void validateEmail(String username, String validationSecret, AsyncCallback<Boolean> markedAsyncCallback);
void updateSimpleUserEmail(String username, String newEmail, AsyncCallback<Void> callback);
@@ -283,18 +283,24 @@ public class SecurityServiceImpl extends RemoteServiceServlet implements Securit
}
@Override
public void updateSimpleUserEmail(String username, String newEmail) throws UserManagementException, MailException {
public void updateSimpleUserEmail(final String username, final String newEmail) throws UserManagementException, MailException {
final User user = store.getUserByName(username);
if (user == null) {
throw new UserManagementException(UserManagementException.USER_DOES_NOT_EXIST);
}
logger.info("Changing e-mail address of user "+username+" to "+newEmail);
user.setEmail(newEmail);
try {
startEmailValidation(user);
} catch (MailException e) {
logger.log(Level.SEVERE, "Error sending mail to validate e-mail address change for user "+username+
" to address "+newEmail, e);
}
new Thread("e-mail validation after changing e-mail of user " + username + " to " + newEmail) {
@Override
public void run() {
try {
startEmailValidation(user);
} catch (MailException e) {
logger.log(Level.SEVERE, "Error sending mail to validate e-mail address change for user "
+ username + " to address " + newEmail, e);
}
}
}.start();
store.updateUser(user);
}