diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/NoSuchGroupException.java b/gerrit-common/src/main/java/com/google/gerrit/common/errors/NoSuchGroupException.java similarity index 86% rename from gerrit-server/src/main/java/com/google/gerrit/server/account/NoSuchGroupException.java rename to gerrit-common/src/main/java/com/google/gerrit/common/errors/NoSuchGroupException.java index 0e444225ae..f7115b9343 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/NoSuchGroupException.java +++ b/gerrit-common/src/main/java/com/google/gerrit/common/errors/NoSuchGroupException.java @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package com.google.gerrit.server.account; +package com.google.gerrit.common.errors; import com.google.gerrit.reviewdb.AccountGroup; @@ -20,12 +20,14 @@ import com.google.gerrit.reviewdb.AccountGroup; public class NoSuchGroupException extends Exception { private static final long serialVersionUID = 1L; + public static final String MESSAGE = "Group Not Found: "; + public NoSuchGroupException(final AccountGroup.Id key) { this(key, null); } public NoSuchGroupException(final AccountGroup.Id key, final Throwable why) { - super(key.toString(), why); + super(MESSAGE + key.toString(), why); } public NoSuchGroupException(final AccountGroup.NameKey k) { @@ -33,6 +35,6 @@ public class NoSuchGroupException extends Exception { } public NoSuchGroupException(final AccountGroup.NameKey k, final Throwable why) { - super(k.toString(), why); + super(MESSAGE + k.toString(), why); } } diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java index b32a32d061..fbec6aa882 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.java @@ -46,6 +46,8 @@ public interface GerritConstants extends Constants { String nameAlreadyUsedBody(); String noSuchAccountTitle(); + String noSuchGroupTitle(); + String inactiveAccountBody(); String menuAll(); diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties index 33630150d3..617ab6b80e 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritConstants.properties @@ -29,6 +29,8 @@ notFoundBody = The page you requested was not found. nameAlreadyUsedBody = The name is already in use. noSuchAccountTitle = Code Review - Unknown User +noSuchGroupTitle = Code Review - Unknown Group + inactiveAccountBody = This user is currently inactive. menuAll = All diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.java index bfc663e979..aefa3a5618 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.java @@ -22,4 +22,6 @@ public interface GerritMessages extends Messages { String poweredBy(String version); String noSuchAccountMessage(String who); + + String noSuchGroupMessage(String who); } diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties index 159ddfcbbe..a91df3c9cd 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/GerritMessages.properties @@ -4,3 +4,5 @@ poweredBy = Powered by Report Bug noSuchAccountMessage = {0} is not a registered user. + +noSuchGroupMessage = Group {0} does not exist or is not visible to you. diff --git a/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/GerritCallback.java b/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/GerritCallback.java index f29742ad92..1871bb797b 100644 --- a/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/GerritCallback.java +++ b/gerrit-gwtui/src/main/java/com/google/gerrit/client/rpc/GerritCallback.java @@ -21,6 +21,7 @@ import com.google.gerrit.common.errors.InactiveAccountException; import com.google.gerrit.common.errors.NameAlreadyUsedException; import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.common.errors.NoSuchEntityException; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.common.errors.NotSignedInException; import com.google.gwt.core.client.GWT; import com.google.gwt.user.client.rpc.AsyncCallback; @@ -51,6 +52,13 @@ public abstract class GerritCallback implements AsyncCallback { } else if (isNameAlreadyUsed(caught)) { new ErrorDialog(Gerrit.C.nameAlreadyUsedBody()).center(); + } else if (isNoSuchGroup(caught)) { + final String msg = caught.getMessage(); + final String group = msg.substring(NoSuchGroupException.MESSAGE.length()); + final ErrorDialog d = new ErrorDialog(Gerrit.M.noSuchGroupMessage(group)); + d.setText(Gerrit.C.noSuchGroupTitle()); + d.center(); + } else if (caught instanceof ServerUnavailableException) { new ErrorDialog(RpcConstants.C.errorServerUnavailable()).center(); @@ -89,4 +97,9 @@ public abstract class GerritCallback implements AsyncCallback { return caught instanceof RemoteJsonException && caught.getMessage().equals(NameAlreadyUsedException.MESSAGE); } + + private static boolean isNoSuchGroup(final Throwable caught) { + return caught instanceof RemoteJsonException + && caught.getMessage().startsWith(NoSuchGroupException.MESSAGE); + } } diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/BaseServiceImplementation.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/BaseServiceImplementation.java index 120de30573..6bb905f182 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/BaseServiceImplementation.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/BaseServiceImplementation.java @@ -17,11 +17,11 @@ package com.google.gerrit.httpd.rpc; import com.google.gerrit.common.errors.CorruptEntityException; import com.google.gerrit.common.errors.InvalidQueryException; import com.google.gerrit.common.errors.NoSuchEntityException; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.reviewdb.Account; import com.google.gerrit.reviewdb.ReviewDb; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; -import com.google.gerrit.server.account.NoSuchGroupException; import com.google.gerrit.server.project.NoSuchChangeException; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gwt.user.client.rpc.AsyncCallback; diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java index 80fe678b50..b8e4090a76 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupAdminServiceImpl.java @@ -20,6 +20,7 @@ import com.google.gerrit.common.errors.InactiveAccountException; import com.google.gerrit.common.errors.NameAlreadyUsedException; import com.google.gerrit.common.errors.NoSuchAccountException; import com.google.gerrit.common.errors.NoSuchEntityException; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.httpd.rpc.BaseServiceImplementation; import com.google.gerrit.reviewdb.Account; import com.google.gerrit.reviewdb.AccountGroup; @@ -31,7 +32,6 @@ import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.AccountResolver; import com.google.gerrit.server.account.GroupCache; import com.google.gerrit.server.account.GroupControl; -import com.google.gerrit.server.account.NoSuchGroupException; import com.google.gerrit.server.account.Realm; import com.google.gwt.user.client.rpc.AsyncCallback; import com.google.gwtjsonrpc.client.VoidResult; diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupDetailFactory.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupDetailFactory.java index 1b0566021e..7f93cd58d3 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupDetailFactory.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/GroupDetailFactory.java @@ -15,6 +15,7 @@ package com.google.gerrit.httpd.rpc.account; import com.google.gerrit.common.data.GroupDetail; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.httpd.rpc.Handler; import com.google.gerrit.reviewdb.Account; import com.google.gerrit.reviewdb.AccountGroup; @@ -23,7 +24,6 @@ import com.google.gerrit.reviewdb.ReviewDb; import com.google.gerrit.server.account.AccountInfoCacheFactory; import com.google.gerrit.server.account.GroupCache; import com.google.gerrit.server.account.GroupControl; -import com.google.gerrit.server.account.NoSuchGroupException; import com.google.gwtorm.client.OrmException; import com.google.inject.Inject; import com.google.inject.assistedinject.Assisted; diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/RenameGroup.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/RenameGroup.java index 19cd29fb6a..d62f0c0df6 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/RenameGroup.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/account/RenameGroup.java @@ -16,13 +16,13 @@ package com.google.gerrit.httpd.rpc.account; import com.google.gerrit.common.data.GroupDetail; import com.google.gerrit.common.errors.NameAlreadyUsedException; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.httpd.rpc.Handler; import com.google.gerrit.reviewdb.AccountGroup; import com.google.gerrit.reviewdb.AccountGroupName; import com.google.gerrit.reviewdb.ReviewDb; import com.google.gerrit.server.account.GroupCache; import com.google.gerrit.server.account.GroupControl; -import com.google.gerrit.server.account.NoSuchGroupException; import com.google.gwtorm.client.OrmDuplicateKeyException; import com.google.gwtorm.client.OrmException; import com.google.inject.Inject; diff --git a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddRefRight.java b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddRefRight.java index 448fc9d056..358b542f19 100644 --- a/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddRefRight.java +++ b/gerrit-httpd/src/main/java/com/google/gerrit/httpd/rpc/project/AddRefRight.java @@ -18,6 +18,7 @@ import com.google.gerrit.common.data.ApprovalType; import com.google.gerrit.common.data.ApprovalTypes; import com.google.gerrit.common.data.ProjectDetail; import com.google.gerrit.common.errors.InvalidNameException; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.httpd.rpc.Handler; import com.google.gerrit.reviewdb.AccountGroup; import com.google.gerrit.reviewdb.ApprovalCategory; @@ -25,7 +26,6 @@ import com.google.gerrit.reviewdb.Project; import com.google.gerrit.reviewdb.RefRight; import com.google.gerrit.reviewdb.ReviewDb; import com.google.gerrit.server.account.GroupCache; -import com.google.gerrit.server.account.NoSuchGroupException; import com.google.gerrit.server.project.NoSuchProjectException; import com.google.gerrit.server.project.NoSuchRefException; import com.google.gerrit.server.project.ProjectCache; diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupControl.java b/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupControl.java index 40360b9f77..fb98e26772 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupControl.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/account/GroupControl.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.account; +import com.google.gerrit.common.errors.NoSuchGroupException; import com.google.gerrit.reviewdb.Account; import com.google.gerrit.reviewdb.AccountGroup; import com.google.gerrit.server.CurrentUser;