Display sign-out dialog when adding reviewers

Adding reviewers overrides the GerritCallback onFailure event
handler and doesn't check the normal cases for a signed out user.
Since the error handling should display a message below the field
and not a dialog, we can't use the parent class, but we can use
the helper methods to at least determine when to display the signed-out
dialog.

Change-Id: Ie25efc014cc106373664b3ddf26122d4c73c7928
This commit is contained in:
Doug Kelly
2015-11-10 12:56:34 -08:00
committed by Shawn Pearce
parent eaa5c47a83
commit 028c6f2e55
3 changed files with 28 additions and 22 deletions

View File

@@ -17,6 +17,7 @@ package com.google.gerrit.client.change;
import com.google.gerrit.client.ConfirmationCallback;
import com.google.gerrit.client.ConfirmationDialog;
import com.google.gerrit.client.Gerrit;
import com.google.gerrit.client.NotSignedInDialog;
import com.google.gerrit.client.changes.ChangeApi;
import com.google.gerrit.client.changes.Util;
import com.google.gerrit.client.info.AccountInfo;
@@ -177,10 +178,14 @@ public class Reviewers extends Composite {
@Override
public void onFailure(Throwable err) {
UIObject.setVisible(error, true);
error.setInnerText(err instanceof StatusCodeException
? ((StatusCodeException) err).getEncodedResponse()
: err.getMessage());
if (isSigninFailure(err)) {
new NotSignedInDialog().center();
} else {
UIObject.setVisible(error, true);
error.setInnerText(err instanceof StatusCodeException
? ((StatusCodeException) err).getEncodedResponse()
: err.getMessage());
}
}
});
}

View File

@@ -38,15 +38,10 @@ public abstract class GerritCallback<T> implements
}
public static void showFailure(Throwable caught) {
if (isNotSignedIn(caught) || isInvalidXSRF(caught)) {
if (isSigninFailure(caught)) {
new NotSignedInDialog().center();
} else if (isNoSuchEntity(caught)) {
if (Gerrit.isSignedIn()) {
new ErrorDialog(Gerrit.C.notFoundBody()).center();
} else {
new NotSignedInDialog().center();
}
new ErrorDialog(Gerrit.C.notFoundBody()).center();
} else if (isInactiveAccount(caught)) {
new ErrorDialog(Gerrit.C.inactiveAccountBody()).center();
@@ -77,12 +72,20 @@ public abstract class GerritCallback<T> implements
}
}
private static boolean isInvalidXSRF(final Throwable caught) {
public static boolean isSigninFailure(Throwable caught) {
if (isNotSignedIn(caught) || isInvalidXSRF(caught) ||
(isNoSuchEntity(caught) && !Gerrit.isSignedIn())) {
return true;
}
return false;
}
protected static boolean isInvalidXSRF(final Throwable caught) {
return caught instanceof InvocationException
&& caught.getMessage().equals(JsonConstants.ERROR_INVALID_XSRF);
}
private static boolean isNotSignedIn(Throwable caught) {
protected static boolean isNotSignedIn(Throwable caught) {
return RestApi.isNotSignedIn(caught)
|| (caught instanceof RemoteJsonException
&& caught.getMessage().equals(NotSignedInException.MESSAGE));
@@ -99,17 +102,17 @@ public abstract class GerritCallback<T> implements
&& caught.getMessage().startsWith(InactiveAccountException.MESSAGE);
}
private static boolean isNoSuchAccount(final Throwable caught) {
protected static boolean isNoSuchAccount(final Throwable caught) {
return caught instanceof RemoteJsonException
&& caught.getMessage().startsWith(NoSuchAccountException.MESSAGE);
}
private static boolean isNameAlreadyUsed(final Throwable caught) {
protected static boolean isNameAlreadyUsed(final Throwable caught) {
return caught instanceof RemoteJsonException
&& caught.getMessage().startsWith(NameAlreadyUsedException.MESSAGE);
}
private static boolean isNoSuchGroup(final Throwable caught) {
protected static boolean isNoSuchGroup(final Throwable caught) {
return caught instanceof RemoteJsonException
&& caught.getMessage().startsWith(NoSuchGroupException.MESSAGE);
}

View File

@@ -44,12 +44,10 @@ public abstract class ScreenLoadCallback<T> extends GerritCallback<T> {
@Override
public void onFailure(final Throwable caught) {
if (isNoSuchEntity(caught)) {
if (Gerrit.isSignedIn()) {
Gerrit.display(screen.getToken(), new NotFoundScreen());
} else {
new NotSignedInDialog().center();
}
if (isSigninFailure(caught)) {
new NotSignedInDialog().center();
} else if (isNoSuchEntity(caught)) {
Gerrit.display(screen.getToken(), new NotFoundScreen());
} else {
super.onFailure(caught);
}