From b446055fc03927474885d2eb33c44115873411ef Mon Sep 17 00:00:00 2001 From: Edwin Kempin Date: Wed, 17 Jul 2019 09:57:04 +0200 Subject: [PATCH] Require REST endpoints to return Response At the moment REST endpoints can choose if they return a result object (that will be converted to JSON automatically unless it is a BinaryResult) or if they return a response object that specifies the response status code and other properties like caching behavior in addition to the result object. In addition REST endpoints can return special objects like Response.Redirect and Response.Accepted to trigger special behavior (Response.Redirect and Response.Accepted are neither a result object, nor a response object). If the first approach is chosen and a result object is returned, it is not clear from the implementation of the REST endpoint which status code is returned to the client. By default it is '200 OK', for RestCollectionCreateViews that are invoked via HTTP PUT/POST it is '201 Created' and for RestCollectionDeleteMissingViews that are invoked via HTTP DELETE it is '204 No Content'. By forcing REST endpoints to return a response object they must specify the status code. Hence implementors must explicitly think about this. Hopefully this leads to a more consistent use of status codes in our REST API. At the moment it happens frequently that status codes are wrong and need to be fixed, which is always a bit risky since callers may rely on an expected status code. Having all REST endpoints return response objects also has the advantage that wrappers around REST endpoints, such as RetryingRestModifyView, can set additional properties on the response. E.g. change I2b78cbef5 implements automatic request tracing in RetryingRestModifyView, but currently has no possibility to return the trace ID to the client. If that was possible, error popups in the frontend could display the trace ID. If the trace ID is included into bug reports, investigation of issues gets easier and faster. Response.Redirect and Response.Accepted are made subclasses of Response so that REST endpoints can still return them. Change-Id: I1dd37821a8a859ade43336eb5f6cce6bcc71fc02 Signed-off-by: Edwin Kempin --- .../gerrit/extensions/restapi/Response.java | 54 ++++++++++++++++++- .../restapi/RestCollectionCreateView.java | 17 ++++-- .../RestCollectionDeleteMissingView.java | 20 +++++-- .../restapi/RestCollectionModifyView.java | 22 +++++++- .../extensions/restapi/RestModifyView.java | 22 +++++--- .../extensions/restapi/RestReadView.java | 21 ++++++-- .../gerrit/gpg/api/GpgApiAdapterImpl.java | 4 +- .../google/gerrit/gpg/api/GpgKeyApiImpl.java | 2 +- .../com/google/gerrit/gpg/server/GpgKeys.java | 16 +++--- .../google/gerrit/gpg/server/PostGpgKeys.java | 5 +- .../gerrit/httpd/restapi/RestApiServlet.java | 53 ++++++++---------- .../gerrit/metrics/dropwizard/GetMetric.java | 7 +-- .../metrics/dropwizard/ListMetrics.java | 5 +- .../server/api/accounts/AccountApiImpl.java | 34 ++++++------ .../server/api/accounts/AccountsImpl.java | 4 +- .../server/api/accounts/EmailApiImpl.java | 2 +- .../server/api/changes/ChangeApiImpl.java | 24 ++++----- .../server/api/changes/ChangeEditApiImpl.java | 2 +- .../api/changes/ChangeMessageApiImpl.java | 2 +- .../server/api/changes/ChangesImpl.java | 2 +- .../server/api/changes/CommentApiImpl.java | 4 +- .../server/api/changes/DraftApiImpl.java | 2 +- .../server/api/changes/FileApiImpl.java | 2 +- .../server/api/changes/ReviewerApiImpl.java | 2 +- .../server/api/changes/RevisionApiImpl.java | 32 +++++------ .../api/changes/RevisionReviewerApiImpl.java | 2 +- .../api/changes/RobotCommentApiImpl.java | 2 +- .../gerrit/server/api/config/ServerImpl.java | 16 +++--- .../server/api/groups/GroupApiImpl.java | 18 +++---- .../gerrit/server/api/groups/GroupsImpl.java | 6 +-- .../server/api/plugins/PluginApiImpl.java | 2 +- .../server/api/plugins/PluginsImpl.java | 2 +- .../server/api/projects/BranchApiImpl.java | 6 +-- .../api/projects/ChildProjectApiImpl.java | 2 +- .../server/api/projects/CommitApiImpl.java | 4 +- .../server/api/projects/DashboardApiImpl.java | 2 +- .../server/api/projects/ProjectApiImpl.java | 28 +++++----- .../gerrit/server/plugins/DisablePlugin.java | 5 +- .../gerrit/server/plugins/EnablePlugin.java | 5 +- .../gerrit/server/plugins/GetStatus.java | 5 +- .../gerrit/server/plugins/ListPlugins.java | 6 ++- .../gerrit/server/plugins/ReloadPlugin.java | 6 ++- .../server/restapi/access/ListAccess.java | 5 +- .../server/restapi/account/CreateEmail.java | 6 +-- .../restapi/account/DeleteDraftComments.java | 6 ++- .../server/restapi/account/GetAccount.java | 5 +- .../server/restapi/account/GetAgreements.java | 5 +- .../restapi/account/GetAvatarChangeUrl.java | 5 +- .../restapi/account/GetCapabilities.java | 9 ++-- .../server/restapi/account/GetDetail.java | 5 +- .../restapi/account/GetDiffPreferences.java | 12 +++-- .../restapi/account/GetEditPreferences.java | 12 +++-- .../server/restapi/account/GetEmail.java | 5 +- .../server/restapi/account/GetEmails.java | 14 ++--- .../restapi/account/GetExternalIds.java | 7 +-- .../server/restapi/account/GetGroups.java | 6 ++- .../server/restapi/account/GetName.java | 5 +- .../server/restapi/account/GetOAuthToken.java | 5 +- .../restapi/account/GetPreferences.java | 5 +- .../server/restapi/account/GetSshKey.java | 5 +- .../server/restapi/account/GetSshKeys.java | 5 +- .../server/restapi/account/GetStatus.java | 5 +- .../server/restapi/account/GetUsername.java | 6 ++- .../restapi/account/GetWatchedProjects.java | 16 +++--- .../restapi/account/PostWatchedProjects.java | 3 +- .../server/restapi/account/PutUsername.java | 7 +-- .../server/restapi/account/QueryAccounts.java | 9 ++-- .../restapi/account/SetDiffPreferences.java | 14 ++--- .../restapi/account/SetEditPreferences.java | 14 ++--- .../restapi/account/SetPreferences.java | 14 ++--- .../gerrit/server/restapi/account/Stars.java | 35 ++++++++---- .../gerrit/server/restapi/change/Abandon.java | 5 +- .../server/restapi/change/ChangeEdits.java | 15 +++--- .../restapi/change/ChangeIncludedIn.java | 5 +- .../server/restapi/change/ChangeMessages.java | 2 +- .../server/restapi/change/CherryPick.java | 5 +- .../restapi/change/CherryPickCommit.java | 5 +- .../server/restapi/change/CreateChange.java | 2 +- .../restapi/change/CreateDraftComment.java | 2 +- .../restapi/change/CreateMergePatchSet.java | 2 +- .../server/restapi/change/DeleteAssignee.java | 3 +- .../server/restapi/change/DeleteChange.java | 4 +- .../restapi/change/DeleteChangeMessage.java | 4 +- .../server/restapi/change/DeleteComment.java | 5 +- .../restapi/change/DeleteDraftComment.java | 2 +- .../server/restapi/change/DeletePrivate.java | 2 +- .../server/restapi/change/DeleteReviewer.java | 4 +- .../server/restapi/change/DeleteVote.java | 4 +- .../restapi/change/DownloadContent.java | 8 +-- .../server/restapi/change/GetArchive.java | 5 +- .../restapi/change/GetChangeMessage.java | 5 +- .../server/restapi/change/GetComment.java | 5 +- .../server/restapi/change/GetContent.java | 28 +++++----- .../server/restapi/change/GetDescription.java | 5 +- .../restapi/change/GetDraftComment.java | 5 +- .../server/restapi/change/GetPatch.java | 5 +- .../server/restapi/change/GetPureRevert.java | 5 +- .../server/restapi/change/GetRelated.java | 5 +- .../server/restapi/change/GetReviewer.java | 6 ++- .../restapi/change/GetRobotComment.java | 6 ++- .../server/restapi/change/GetTopic.java | 5 +- .../gerrit/server/restapi/change/Index.java | 4 +- .../restapi/change/ListChangeComments.java | 16 +++--- .../restapi/change/ListChangeDrafts.java | 16 +++--- .../restapi/change/ListChangeMessages.java | 6 ++- .../change/ListChangeRobotComments.java | 16 +++--- .../server/restapi/change/ListReviewers.java | 5 +- .../restapi/change/ListRevisionDrafts.java | 14 ++--- .../restapi/change/ListRevisionReviewers.java | 5 +- .../restapi/change/ListRobotComments.java | 14 ++--- .../server/restapi/change/Mergeable.java | 7 +-- .../gerrit/server/restapi/change/Move.java | 5 +- .../server/restapi/change/PostHashtags.java | 3 +- .../server/restapi/change/PostPrivate.java | 3 +- .../server/restapi/change/PostReview.java | 2 +- .../server/restapi/change/PostReviewers.java | 7 +-- .../server/restapi/change/PreviewSubmit.java | 5 +- .../restapi/change/PublishChangeEdit.java | 4 +- .../server/restapi/change/PutAssignee.java | 5 +- .../server/restapi/change/PutDescription.java | 2 +- .../restapi/change/PutDraftComment.java | 2 +- .../server/restapi/change/PutMessage.java | 3 +- .../server/restapi/change/PutTopic.java | 2 +- .../server/restapi/change/QueryChanges.java | 5 +- .../gerrit/server/restapi/change/Rebase.java | 10 ++-- .../restapi/change/RebaseChangeEdit.java | 5 +- .../gerrit/server/restapi/change/Restore.java | 5 +- .../gerrit/server/restapi/change/Revert.java | 5 +- .../restapi/change/SetReadyForReview.java | 4 +- .../restapi/change/SetWorkInProgress.java | 4 +- .../gerrit/server/restapi/change/Submit.java | 11 ++-- .../restapi/change/SubmittedTogether.java | 7 +-- .../change/SuggestChangeReviewers.java | 16 +++--- .../server/restapi/change/TestSubmitRule.java | 5 +- .../server/restapi/change/TestSubmitType.java | 8 +-- .../gerrit/server/restapi/change/Votes.java | 6 ++- .../restapi/config/CheckConsistency.java | 5 +- .../server/restapi/config/GetCache.java | 5 +- .../restapi/config/GetDiffPreferences.java | 5 +- .../restapi/config/GetEditPreferences.java | 5 +- .../server/restapi/config/GetPreferences.java | 5 +- .../server/restapi/config/GetServerInfo.java | 5 +- .../server/restapi/config/GetSummary.java | 5 +- .../gerrit/server/restapi/config/GetTask.java | 5 +- .../server/restapi/config/ListCaches.java | 16 +++--- .../restapi/config/ListCapabilities.java | 12 +++-- .../server/restapi/config/ListTasks.java | 7 +-- .../server/restapi/config/ReloadConfig.java | 16 +++--- .../restapi/config/SetDiffPreferences.java | 6 ++- .../restapi/config/SetEditPreferences.java | 6 ++- .../server/restapi/config/SetPreferences.java | 5 +- .../server/restapi/group/AddMembers.java | 13 ++--- .../server/restapi/group/AddSubgroups.java | 13 ++--- .../server/restapi/group/CreateGroup.java | 5 +- .../server/restapi/group/GetAuditLog.java | 5 +- .../server/restapi/group/GetDescription.java | 5 +- .../server/restapi/group/GetDetail.java | 5 +- .../gerrit/server/restapi/group/GetGroup.java | 5 +- .../server/restapi/group/GetMember.java | 5 +- .../gerrit/server/restapi/group/GetName.java | 5 +- .../server/restapi/group/GetOptions.java | 5 +- .../gerrit/server/restapi/group/GetOwner.java | 5 +- .../server/restapi/group/GetSubgroup.java | 5 +- .../server/restapi/group/ListGroups.java | 7 +-- .../server/restapi/group/ListMembers.java | 7 +-- .../server/restapi/group/ListSubgroups.java | 5 +- .../gerrit/server/restapi/group/PutName.java | 7 +-- .../server/restapi/group/PutOptions.java | 5 +- .../gerrit/server/restapi/group/PutOwner.java | 5 +- .../server/restapi/group/QueryGroups.java | 5 +- .../server/restapi/project/BanCommit.java | 5 +- .../gerrit/server/restapi/project/Check.java | 5 +- .../server/restapi/project/CheckAccess.java | 9 ++-- .../restapi/project/CheckAccessReadView.java | 3 +- .../restapi/project/CheckMergeability.java | 7 +-- .../restapi/project/CommitIncludedIn.java | 5 +- .../server/restapi/project/CreateBranch.java | 5 +- .../restapi/project/CreateDashboard.java | 1 + .../server/restapi/project/CreateTag.java | 6 ++- .../project/FilesInCommitCollection.java | 8 ++- .../restapi/project/GarbageCollect.java | 4 +- .../server/restapi/project/GetAccess.java | 7 +-- .../server/restapi/project/GetBranch.java | 5 +- .../restapi/project/GetChildProject.java | 5 +- .../server/restapi/project/GetCommit.java | 5 +- .../server/restapi/project/GetConfig.java | 22 ++++---- .../server/restapi/project/GetContent.java | 6 ++- .../server/restapi/project/GetDashboard.java | 18 ++++--- .../restapi/project/GetDescription.java | 5 +- .../server/restapi/project/GetHead.java | 7 +-- .../server/restapi/project/GetParent.java | 5 +- .../server/restapi/project/GetProject.java | 5 +- .../server/restapi/project/GetReflog.java | 5 +- .../server/restapi/project/GetStatistics.java | 5 +- .../gerrit/server/restapi/project/GetTag.java | 5 +- .../gerrit/server/restapi/project/Index.java | 3 +- .../server/restapi/project/ListBranches.java | 16 +++--- .../restapi/project/ListChildProjects.java | 7 +-- .../restapi/project/ListDashboards.java | 7 +-- .../server/restapi/project/ListProjects.java | 12 +++-- .../server/restapi/project/ListTags.java | 16 +++--- .../server/restapi/project/PutBranch.java | 4 +- .../server/restapi/project/PutConfig.java | 5 +- .../gerrit/server/restapi/project/PutTag.java | 4 +- .../server/restapi/project/QueryProjects.java | 5 +- .../server/restapi/project/SetAccess.java | 5 +- .../restapi/project/SetDefaultDashboard.java | 6 +-- .../server/restapi/project/SetHead.java | 5 +- .../server/restapi/project/SetParent.java | 5 +- .../RetryingRestCollectionModifyView.java | 7 +-- .../server/update/RetryingRestModifyView.java | 5 +- .../sshd/commands/BanCommitCommand.java | 2 +- .../sshd/commands/CreateGroupCommand.java | 4 +- .../gerrit/sshd/commands/PluginLsCommand.java | 2 +- .../sshd/commands/SetAccountCommand.java | 6 +-- .../sshd/commands/SetParentCommand.java | 2 +- .../sshd/commands/SetReviewersCommand.java | 2 +- .../gerrit/sshd/commands/ShowCaches.java | 3 +- .../gerrit/sshd/commands/ShowQueue.java | 2 +- .../PluginProvidedChildRestApiBindingsIT.java | 16 +++--- .../PluginProvidedRootRestApiBindingsIT.java | 16 +++--- .../server/config/ListCapabilitiesTest.java | 2 +- plugins/delete-project | 2 +- 223 files changed, 1002 insertions(+), 685 deletions(-) diff --git a/java/com/google/gerrit/extensions/restapi/Response.java b/java/com/google/gerrit/extensions/restapi/Response.java index 8f2dd5fea1..6a1020ae27 100644 --- a/java/com/google/gerrit/extensions/restapi/Response.java +++ b/java/com/google/gerrit/extensions/restapi/Response.java @@ -154,13 +154,38 @@ public abstract class Response { } /** An HTTP redirect to another location. */ - public static final class Redirect { + public static final class Redirect extends Response { private final String location; private Redirect(String url) { this.location = url; } + @Override + public boolean isNone() { + return false; + } + + @Override + public int statusCode() { + return 302; + } + + @Override + public Object value() { + throw new UnsupportedOperationException(); + } + + @Override + public CacheControl caching() { + return CacheControl.NONE; + } + + @Override + public Response caching(CacheControl c) { + throw new UnsupportedOperationException(); + } + public String location() { return location; } @@ -182,13 +207,38 @@ public abstract class Response { } /** Accepted as task for asynchronous execution. */ - public static final class Accepted { + public static final class Accepted extends Response { private final String location; private Accepted(String url) { this.location = url; } + @Override + public boolean isNone() { + return false; + } + + @Override + public int statusCode() { + return 202; + } + + @Override + public Object value() { + throw new UnsupportedOperationException(); + } + + @Override + public CacheControl caching() { + return CacheControl.NONE; + } + + @Override + public Response caching(CacheControl c) { + throw new UnsupportedOperationException(); + } + public String location() { return location; } diff --git a/java/com/google/gerrit/extensions/restapi/RestCollectionCreateView.java b/java/com/google/gerrit/extensions/restapi/RestCollectionCreateView.java index 25cdb767d1..72ca74b9bf 100644 --- a/java/com/google/gerrit/extensions/restapi/RestCollectionCreateView.java +++ b/java/com/google/gerrit/extensions/restapi/RestCollectionCreateView.java @@ -33,13 +33,24 @@ public interface RestCollectionCreateView

The returned response defines the status code that is returned to the client. For + * RestCollectionCreateViews this is usually {@code 201 Created} because a resource is created, + * but other 2XX or 3XX status codes are also possible (e.g. {@link Response.Redirect} can be + * returned for {@code 302 Found}). + * + *

The value of the returned response is automatically converted to JSON unless it is a {@link + * BinaryResult}. + * + *

Throwing a subclass of {@link RestApiException} results in a 4XX response to the client. For + * any other exception the client will get a {@code 500 Internal Server Error} response. + * * @param parentResource parent resource of the resource that should be created + * @param id the ID of the child resource that should be created * @param input input after parsing from request. - * @return result to return to the client. Use {@link BinaryResult} to avoid automatic conversion - * to JSON. + * @return response to return to the client * @throws RestApiException if the resource creation is rejected * @throws Exception the implementation of the view failed. The exception will be logged and HTTP * 500 Internal Server Error will be returned to the client. */ - Object apply(P parentResource, IdString id, I input) throws Exception; + Response apply(P parentResource, IdString id, I input) throws Exception; } diff --git a/java/com/google/gerrit/extensions/restapi/RestCollectionDeleteMissingView.java b/java/com/google/gerrit/extensions/restapi/RestCollectionDeleteMissingView.java index 7e5649c3ca..c08d06a471 100644 --- a/java/com/google/gerrit/extensions/restapi/RestCollectionDeleteMissingView.java +++ b/java/com/google/gerrit/extensions/restapi/RestCollectionDeleteMissingView.java @@ -37,13 +37,25 @@ public interface RestCollectionDeleteMissingView

The returned response defines the status code that is returned to the client. For + * RestCollectionDeleteMissingViews this is usually {@code 204 No Content} because a resource is + * deleted, but other 2XX or 3XX status codes are also possible (e.g. {@code 200 OK}, {@code 302 + * Found} for a redirect). + * + *

The returned response usually does not have any value (status code {@code 204 No Content}). + * If a value in the returned response is set it is automatically converted to JSON unless it is a + * {@link BinaryResult}. + * + *

Throwing a subclass of {@link RestApiException} results in a 4XX response to the client. For + * any other exception the client will get a {@code 500 Internal Server Error} response. + * * @param parentResource parent resource of the resource that should be deleted - * @param input input after parsing from request. - * @return result to return to the client. Use {@link BinaryResult} to avoid automatic conversion - * to JSON. + * @param id the ID of the child resource that should be deleted + * @param input input after parsing from request + * @return response to return to the client * @throws RestApiException if the resource creation is rejected * @throws Exception the implementation of the view failed. The exception will be logged and HTTP * 500 Internal Server Error will be returned to the client. */ - Object apply(P parentResource, IdString id, I input) throws Exception; + Response apply(P parentResource, IdString id, I input) throws Exception; } diff --git a/java/com/google/gerrit/extensions/restapi/RestCollectionModifyView.java b/java/com/google/gerrit/extensions/restapi/RestCollectionModifyView.java index acabf96323..fcaa15bb79 100644 --- a/java/com/google/gerrit/extensions/restapi/RestCollectionModifyView.java +++ b/java/com/google/gerrit/extensions/restapi/RestCollectionModifyView.java @@ -28,5 +28,25 @@ package com.google.gerrit.extensions.restapi; public interface RestCollectionModifyView

extends RestCollectionView { - Object apply(P parentResource, I input) throws Exception; + /** + * Process the modification on the collection resource. + * + *

The value of the returned response is automatically converted to JSON unless it is a {@link + * BinaryResult}. + * + *

The returned response defines the status code that is returned to the client. For + * RestCollectionModifyViews this is usually {@code 200 OK}, but other 2XX or 3XX status codes are + * also possible (e.g. {@code 201 Created} if a resource was created, {@code 202 Accepted} if a + * background task was scheduled, {@code 204 No Content} if no content is returned, {@code 302 + * Found} for a redirect). + * + *

Throwing a subclass of {@link RestApiException} results in a 4XX response to the client. For + * any other exception the client will get a {@code 500 Internal Server Error} response. + * + * @param parentResource the collection resource on which the modification is done + * @return response to return to the client + * @throws Exception the implementation of the view failed. The exception will be logged and HTTP + * 500 Internal Server Error will be returned to the client. + */ + Response apply(P parentResource, I input) throws Exception; } diff --git a/java/com/google/gerrit/extensions/restapi/RestModifyView.java b/java/com/google/gerrit/extensions/restapi/RestModifyView.java index 79053dd5a1..e397bd0a78 100644 --- a/java/com/google/gerrit/extensions/restapi/RestModifyView.java +++ b/java/com/google/gerrit/extensions/restapi/RestModifyView.java @@ -28,11 +28,21 @@ public interface RestModifyView extends RestView { /** * Process the view operation by altering the resource. * - * @param resource resource to modify. - * @param input input after parsing from request. - * @return result to return to the client. Use {@link BinaryResult} to avoid automatic conversion - * to JSON. - * @throws AuthException the client is not permitted to access this view. + *

The value of the returned response is automatically converted to JSON unless it is a {@link + * BinaryResult}. + * + *

The returned response defines the status code that is returned to the client. For + * RestModifyViews this is usually {@code 200 OK}, but other 2XX or 3XX status codes are also + * possible (e.g. {@code 202 Accepted} if a background task was scheduled, {@code 204 No Content} + * if no content is returned, {@code 302 Found} for a redirect). + * + *

Throwing a subclass of {@link RestApiException} results in a 4XX response to the client. For + * any other exception the client will get a {@code 500 Internal Server Error} response. + * + * @param resource resource to modify + * @param input input after parsing from request + * @return response to return to the client + * @throws AuthException the caller is not permitted to access this view. * @throws BadRequestException the request was incorrectly specified and cannot be handled by this * view. * @throws ResourceConflictException the resource state does not permit this view to make the @@ -40,6 +50,6 @@ public interface RestModifyView extends RestView { * @throws Exception the implementation of the view failed. The exception will be logged and HTTP * 500 Internal Server Error will be returned to the client. */ - Object apply(R resource, I input) + Response apply(R resource, I input) throws AuthException, BadRequestException, ResourceConflictException, Exception; } diff --git a/java/com/google/gerrit/extensions/restapi/RestReadView.java b/java/com/google/gerrit/extensions/restapi/RestReadView.java index a3c31d3b71..8991f0b552 100644 --- a/java/com/google/gerrit/extensions/restapi/RestReadView.java +++ b/java/com/google/gerrit/extensions/restapi/RestReadView.java @@ -17,16 +17,27 @@ package com.google.gerrit.extensions.restapi; /** * RestView to read a resource without modification. * + *

RestReadViews are invoked by the HTTP GET method. + * * @param type of resource the view reads. */ public interface RestReadView extends RestView { /** * Process the view operation by reading from the resource. * - * @param resource resource to read. - * @return result to return to the client. Use {@link BinaryResult} to avoid automatic conversion - * to JSON. - * @throws AuthException the client is not permitted to access this view. + *

The value of the returned response is automatically converted to JSON unless it is a {@link + * BinaryResult}. + * + *

The returned response defines the status code that is returned to the client. For + * RestReadViews this is usually {@code 200 OK}, but other 2XX or 3XX status codes are also + * possible (e.g. {@link Response.Redirect} can be returned for {@code 302 Found}). + * + *

Throwing a subclass of {@link RestApiException} results in a 4XX response to the client. For + * any other exception the client will get a {@code 500 Internal Server Error} response. + * + * @param resource resource to read + * @return response to return to the client + * @throws AuthException the caller is not permitted to access this view. * @throws BadRequestException the request was incorrectly specified and cannot be handled by this * view. * @throws ResourceConflictException the resource state does not permit this view to make the @@ -34,6 +45,6 @@ public interface RestReadView extends RestView { * @throws Exception the implementation of the view failed. The exception will be logged and HTTP * 500 Internal Server Error will be returned to the client. */ - Object apply(R resource) + Response apply(R resource) throws AuthException, BadRequestException, ResourceConflictException, Exception; } diff --git a/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java b/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java index b7b03db6ca..62f1d18f38 100644 --- a/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java +++ b/java/com/google/gerrit/gpg/api/GpgApiAdapterImpl.java @@ -65,7 +65,7 @@ public class GpgApiAdapterImpl implements GpgApiAdapter { public Map listGpgKeys(AccountResource account) throws RestApiException, GpgException { try { - return gpgKeys.get().list().apply(account); + return gpgKeys.get().list().apply(account).value(); } catch (PGPException | IOException e) { throw new GpgException(e); } @@ -79,7 +79,7 @@ public class GpgApiAdapterImpl implements GpgApiAdapter { in.add = add; in.delete = delete; try { - return postGpgKeys.get().apply(account, in); + return postGpgKeys.get().apply(account, in).value(); } catch (PGPException | IOException | ConfigInvalidException e) { throw new GpgException(e); } diff --git a/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java b/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java index cf09acf470..311e00ae82 100644 --- a/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java +++ b/java/com/google/gerrit/gpg/api/GpgKeyApiImpl.java @@ -46,7 +46,7 @@ public class GpgKeyApiImpl implements GpgKeyApi { @Override public GpgKeyInfo get() throws RestApiException { try { - return get.apply(rsrc); + return get.apply(rsrc).value(); } catch (IOException e) { throw new RestApiException("Cannot get GPG key", e); } diff --git a/java/com/google/gerrit/gpg/server/GpgKeys.java b/java/com/google/gerrit/gpg/server/GpgKeys.java index 16592f8b18..b3a2f53e3b 100644 --- a/java/com/google/gerrit/gpg/server/GpgKeys.java +++ b/java/com/google/gerrit/gpg/server/GpgKeys.java @@ -27,6 +27,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.gpg.BouncyCastleUtil; @@ -140,7 +141,7 @@ public class GpgKeys implements ChildCollection { public class ListGpgKeys implements RestReadView { @Override - public Map apply(AccountResource rsrc) + public Response> apply(AccountResource rsrc) throws PGPException, IOException, ResourceNotFoundException { checkVisible(self, rsrc); Map keys = new HashMap<>(); @@ -165,7 +166,7 @@ public class GpgKeys implements ChildCollection { } } } - return keys; + return Response.ok(keys); } } @@ -181,12 +182,13 @@ public class GpgKeys implements ChildCollection { } @Override - public GpgKeyInfo apply(GpgKey rsrc) throws IOException { + public Response apply(GpgKey rsrc) throws IOException { try (PublicKeyStore store = storeProvider.get()) { - return toJson( - rsrc.getKeyRing().getPublicKey(), - checkerFactory.create().setExpectedUser(rsrc.getUser()), - store); + return Response.ok( + toJson( + rsrc.getKeyRing().getPublicKey(), + checkerFactory.create().setExpectedUser(rsrc.getUser()), + store)); } } } diff --git a/java/com/google/gerrit/gpg/server/PostGpgKeys.java b/java/com/google/gerrit/gpg/server/PostGpgKeys.java index 526a834b12..bfd7d27e68 100644 --- a/java/com/google/gerrit/gpg/server/PostGpgKeys.java +++ b/java/com/google/gerrit/gpg/server/PostGpgKeys.java @@ -36,6 +36,7 @@ import com.google.gerrit.extensions.common.GpgKeyInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.git.LockFailureException; @@ -120,7 +121,7 @@ public class PostGpgKeys implements RestModifyView apply(AccountResource rsrc, GpgKeysInput input) + public Response> apply(AccountResource rsrc, GpgKeysInput input) throws RestApiException, PGPException, IOException, ConfigInvalidException { GpgKeys.checkVisible(self, rsrc); @@ -153,7 +154,7 @@ public class PostGpgKeys implements RestModifyView u.replaceExternalIds(toRemove.keySet(), newExtIds)); - return toJson(newKeys, fingerprintsToRemove, store, rsrc.getUser()); + return Response.ok(toJson(newKeys, fingerprintsToRemove, store, rsrc.getUser())); } } diff --git a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java index 2128777bde..66768ec089 100644 --- a/java/com/google/gerrit/httpd/restapi/RestApiServlet.java +++ b/java/com/google/gerrit/httpd/restapi/RestApiServlet.java @@ -34,17 +34,14 @@ import static java.nio.charset.StandardCharsets.ISO_8859_1; import static java.nio.charset.StandardCharsets.UTF_8; import static java.util.Objects.requireNonNull; import static java.util.stream.Collectors.joining; -import static javax.servlet.http.HttpServletResponse.SC_ACCEPTED; import static javax.servlet.http.HttpServletResponse.SC_BAD_REQUEST; import static javax.servlet.http.HttpServletResponse.SC_CONFLICT; -import static javax.servlet.http.HttpServletResponse.SC_CREATED; import static javax.servlet.http.HttpServletResponse.SC_FORBIDDEN; import static javax.servlet.http.HttpServletResponse.SC_INTERNAL_SERVER_ERROR; import static javax.servlet.http.HttpServletResponse.SC_METHOD_NOT_ALLOWED; import static javax.servlet.http.HttpServletResponse.SC_NOT_FOUND; import static javax.servlet.http.HttpServletResponse.SC_NOT_IMPLEMENTED; import static javax.servlet.http.HttpServletResponse.SC_NOT_MODIFIED; -import static javax.servlet.http.HttpServletResponse.SC_NO_CONTENT; import static javax.servlet.http.HttpServletResponse.SC_OK; import static javax.servlet.http.HttpServletResponse.SC_PRECONDITION_FAILED; import static javax.servlet.http.HttpServletResponse.SC_SERVICE_UNAVAILABLE; @@ -308,7 +305,7 @@ public class RestApiServlet extends HttpServlet { res.setHeader("X-Content-Type-Options", "nosniff"); int status = SC_OK; long responseBytes = -1; - Object result = null; + Response response = null; QueryParams qp = null; Object inputRequestBody = null; RestResource rsrc = TopLevelResource.INSTANCE; @@ -394,7 +391,6 @@ public class RestApiServlet extends HttpServlet { RestView createView = rc.views().get(PluginName.GERRIT, "CREATE./"); if (createView != null) { viewData = new ViewData(null, createView); - status = SC_CREATED; path.add(id); } else { throw e; @@ -404,7 +400,6 @@ public class RestApiServlet extends HttpServlet { rc.views().get(PluginName.GERRIT, "DELETE_MISSING./"); if (deleteView != null) { viewData = new ViewData(null, deleteView); - status = SC_NO_CONTENT; path.add(id); } else { throw e; @@ -466,7 +461,6 @@ public class RestApiServlet extends HttpServlet { RestView createView = c.views().get(PluginName.GERRIT, "CREATE./"); if (createView != null) { viewData = new ViewData(null, createView); - status = SC_CREATED; path.add(id); } else { throw e; @@ -476,7 +470,6 @@ public class RestApiServlet extends HttpServlet { c.views().get(PluginName.GERRIT, "DELETE_MISSING./"); if (deleteView != null) { viewData = new ViewData(null, deleteView); - status = SC_NO_CONTENT; path.add(id); } else { throw e; @@ -502,7 +495,7 @@ public class RestApiServlet extends HttpServlet { } if (viewData.view instanceof RestReadView && isRead(req)) { - result = ((RestReadView) viewData.view).apply(rsrc); + response = ((RestReadView) viewData.view).apply(rsrc); } else if (viewData.view instanceof RestModifyView) { @SuppressWarnings("unchecked") RestModifyView m = @@ -510,7 +503,7 @@ public class RestApiServlet extends HttpServlet { Type type = inputType(m); inputRequestBody = parseRequest(req, type); - result = m.apply(rsrc, inputRequestBody); + response = m.apply(rsrc, inputRequestBody); if (inputRequestBody instanceof RawInput) { try (InputStream is = req.getInputStream()) { ServletUtils.consumeRequestBody(is); @@ -523,7 +516,7 @@ public class RestApiServlet extends HttpServlet { Type type = inputType(m); inputRequestBody = parseRequest(req, type); - result = m.apply(rsrc, path.get(0), inputRequestBody); + response = m.apply(rsrc, path.get(0), inputRequestBody); if (inputRequestBody instanceof RawInput) { try (InputStream is = req.getInputStream()) { ServletUtils.consumeRequestBody(is); @@ -536,7 +529,7 @@ public class RestApiServlet extends HttpServlet { Type type = inputType(m); inputRequestBody = parseRequest(req, type); - result = m.apply(rsrc, path.get(0), inputRequestBody); + response = m.apply(rsrc, path.get(0), inputRequestBody); if (inputRequestBody instanceof RawInput) { try (InputStream is = req.getInputStream()) { ServletUtils.consumeRequestBody(is); @@ -549,7 +542,7 @@ public class RestApiServlet extends HttpServlet { Type type = inputType(m); inputRequestBody = parseRequest(req, type); - result = m.apply(rsrc, inputRequestBody); + response = m.apply(rsrc, inputRequestBody); if (inputRequestBody instanceof RawInput) { try (InputStream is = req.getInputStream()) { ServletUtils.consumeRequestBody(is); @@ -559,36 +552,32 @@ public class RestApiServlet extends HttpServlet { throw new ResourceNotFoundException(); } - if (result instanceof Response) { - @SuppressWarnings("rawtypes") - Response r = (Response) result; - status = r.statusCode(); - configureCaching(req, res, rsrc, viewData.view, r.caching()); - } else if (result instanceof Response.Redirect) { + if (response instanceof Response.Redirect) { CacheHeaders.setNotCacheable(res); - String location = ((Response.Redirect) result).location(); + String location = ((Response.Redirect) response).location(); res.sendRedirect(location); logger.atFinest().log("REST call redirected to: %s", location); return; - } else if (result instanceof Response.Accepted) { + } else if (response instanceof Response.Accepted) { CacheHeaders.setNotCacheable(res); - res.setStatus(SC_ACCEPTED); - res.setHeader(HttpHeaders.LOCATION, ((Response.Accepted) result).location()); - logger.atFinest().log("REST call succeeded: %d", SC_ACCEPTED); + res.setStatus(response.statusCode()); + res.setHeader(HttpHeaders.LOCATION, ((Response.Accepted) response).location()); + logger.atFinest().log("REST call succeeded: %d", response.statusCode()); return; - } else { - CacheHeaders.setNotCacheable(res); } + + status = response.statusCode(); + configureCaching(req, res, rsrc, viewData.view, response.caching()); res.setStatus(status); logger.atFinest().log("REST call succeeded: %d", status); } - if (result != Response.none()) { - result = Response.unwrap(result); - if (result instanceof BinaryResult) { - responseBytes = replyBinaryResult(req, res, (BinaryResult) result); + if (response != Response.none()) { + Object value = Response.unwrap(response); + if (value instanceof BinaryResult) { + responseBytes = replyBinaryResult(req, res, (BinaryResult) value); } else { - responseBytes = replyJson(req, res, false, qp.config(), result); + responseBytes = replyJson(req, res, false, qp.config(), value); } } } catch (MalformedJsonException | JsonParseException e) { @@ -677,7 +666,7 @@ public class RestApiServlet extends HttpServlet { qp != null ? qp.params() : ImmutableListMultimap.of(), inputRequestBody, status, - result, + response, rsrc, viewData == null ? null : viewData.view)); } diff --git a/java/com/google/gerrit/metrics/dropwizard/GetMetric.java b/java/com/google/gerrit/metrics/dropwizard/GetMetric.java index ae1e6ec04e..12dabfa59e 100644 --- a/java/com/google/gerrit/metrics/dropwizard/GetMetric.java +++ b/java/com/google/gerrit/metrics/dropwizard/GetMetric.java @@ -15,6 +15,7 @@ package com.google.gerrit.metrics.dropwizard; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.permissions.GlobalPermission; import com.google.gerrit.server.permissions.PermissionBackend; @@ -36,10 +37,10 @@ class GetMetric implements RestReadView { } @Override - public MetricJson apply(MetricResource resource) + public Response apply(MetricResource resource) throws AuthException, PermissionBackendException { permissionBackend.currentUser().check(GlobalPermission.VIEW_CACHES); - return new MetricJson( - resource.getMetric(), metrics.getAnnotations(resource.getName()), dataOnly); + return Response.ok( + new MetricJson(resource.getMetric(), metrics.getAnnotations(resource.getName()), dataOnly)); } } diff --git a/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java b/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java index 0c6945248c..7e472c9a68 100644 --- a/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java +++ b/java/com/google/gerrit/metrics/dropwizard/ListMetrics.java @@ -16,6 +16,7 @@ package com.google.gerrit.metrics.dropwizard; import com.codahale.metrics.Metric; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.permissions.GlobalPermission; @@ -50,7 +51,7 @@ class ListMetrics implements RestReadView { } @Override - public Map apply(ConfigResource resource) + public Response> apply(ConfigResource resource) throws AuthException, PermissionBackendException { permissionBackend.currentUser().check(GlobalPermission.VIEW_CACHES); @@ -75,7 +76,7 @@ class ListMetrics implements RestReadView { } } - return out; + return Response.ok(out); } private MetricJson toJson(String q, Metric m) { diff --git a/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java b/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java index 673f5aede1..1d86e50694 100644 --- a/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java +++ b/java/com/google/gerrit/server/api/accounts/AccountApiImpl.java @@ -240,7 +240,7 @@ public class AccountApiImpl implements AccountApi { @Override public AccountDetailInfo detail() throws RestApiException { try { - return getDetail.apply(account); + return getDetail.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get detail", e); } @@ -274,7 +274,7 @@ public class AccountApiImpl implements AccountApi { @Override public GeneralPreferencesInfo getPreferences() throws RestApiException { try { - return getPreferences.apply(account); + return getPreferences.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get preferences", e); } @@ -283,7 +283,7 @@ public class AccountApiImpl implements AccountApi { @Override public GeneralPreferencesInfo setPreferences(GeneralPreferencesInfo in) throws RestApiException { try { - return setPreferences.apply(account, in); + return setPreferences.apply(account, in).value(); } catch (Exception e) { throw asRestApiException("Cannot set preferences", e); } @@ -292,7 +292,7 @@ public class AccountApiImpl implements AccountApi { @Override public DiffPreferencesInfo getDiffPreferences() throws RestApiException { try { - return getDiffPreferences.apply(account); + return getDiffPreferences.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot query diff preferences", e); } @@ -301,7 +301,7 @@ public class AccountApiImpl implements AccountApi { @Override public DiffPreferencesInfo setDiffPreferences(DiffPreferencesInfo in) throws RestApiException { try { - return setDiffPreferences.apply(account, in); + return setDiffPreferences.apply(account, in).value(); } catch (Exception e) { throw asRestApiException("Cannot set diff preferences", e); } @@ -310,7 +310,7 @@ public class AccountApiImpl implements AccountApi { @Override public EditPreferencesInfo getEditPreferences() throws RestApiException { try { - return getEditPreferences.apply(account); + return getEditPreferences.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot query edit preferences", e); } @@ -319,7 +319,7 @@ public class AccountApiImpl implements AccountApi { @Override public EditPreferencesInfo setEditPreferences(EditPreferencesInfo in) throws RestApiException { try { - return setEditPreferences.apply(account, in); + return setEditPreferences.apply(account, in).value(); } catch (Exception e) { throw asRestApiException("Cannot set edit preferences", e); } @@ -328,7 +328,7 @@ public class AccountApiImpl implements AccountApi { @Override public List getWatchedProjects() throws RestApiException { try { - return getWatchedProjects.apply(account); + return getWatchedProjects.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get watched projects", e); } @@ -338,7 +338,7 @@ public class AccountApiImpl implements AccountApi { public List setWatchedProjects(List in) throws RestApiException { try { - return postWatchedProjects.apply(account, in); + return postWatchedProjects.apply(account, in).value(); } catch (Exception e) { throw asRestApiException("Cannot update watched projects", e); } @@ -389,7 +389,7 @@ public class AccountApiImpl implements AccountApi { public SortedSet getStars(String changeId) throws RestApiException { try { AccountResource.Star rsrc = stars.parse(account, IdString.fromUrl(changeId)); - return starsGet.apply(rsrc); + return starsGet.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot get stars", e); } @@ -398,7 +398,7 @@ public class AccountApiImpl implements AccountApi { @Override public List getStarredChanges() throws RestApiException { try { - return stars.list().apply(account); + return stars.list().apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get starred changes", e); } @@ -407,7 +407,7 @@ public class AccountApiImpl implements AccountApi { @Override public List getGroups() throws RestApiException { try { - return getGroups.apply(account); + return getGroups.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get groups", e); } @@ -416,7 +416,7 @@ public class AccountApiImpl implements AccountApi { @Override public List getEmails() throws RestApiException { try { - return getEmails.apply(account); + return getEmails.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get emails", e); } @@ -475,7 +475,7 @@ public class AccountApiImpl implements AccountApi { @Override public List listSshKeys() throws RestApiException { try { - return getSshKeys.apply(account); + return getSshKeys.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot list SSH keys", e); } @@ -534,7 +534,7 @@ public class AccountApiImpl implements AccountApi { @Override public List listAgreements() throws RestApiException { try { - return getAgreements.apply(account); + return getAgreements.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get agreements", e); } @@ -563,7 +563,7 @@ public class AccountApiImpl implements AccountApi { @Override public List getExternalIds() throws RestApiException { try { - return getExternalIds.apply(account); + return getExternalIds.apply(account).value(); } catch (Exception e) { throw asRestApiException("Cannot get external IDs", e); } @@ -582,7 +582,7 @@ public class AccountApiImpl implements AccountApi { public List deleteDraftComments(DeleteDraftCommentsInput input) throws RestApiException { try { - return deleteDraftComments.apply(account, input); + return deleteDraftComments.apply(account, input).value(); } catch (Exception e) { throw asRestApiException("Cannot delete draft comments", e); } diff --git a/java/com/google/gerrit/server/api/accounts/AccountsImpl.java b/java/com/google/gerrit/server/api/accounts/AccountsImpl.java index 9d298884b8..012e6ce229 100644 --- a/java/com/google/gerrit/server/api/accounts/AccountsImpl.java +++ b/java/com/google/gerrit/server/api/accounts/AccountsImpl.java @@ -133,7 +133,7 @@ public class AccountsImpl implements Accounts { myQueryAccounts.setSuggest(true); myQueryAccounts.setQuery(r.getQuery()); myQueryAccounts.setLimit(r.getLimit()); - return myQueryAccounts.apply(TopLevelResource.INSTANCE); + return myQueryAccounts.apply(TopLevelResource.INSTANCE).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve suggested accounts", e); } @@ -164,7 +164,7 @@ public class AccountsImpl implements Accounts { for (ListAccountsOption option : r.getOptions()) { myQueryAccounts.addOption(option); } - return myQueryAccounts.apply(TopLevelResource.INSTANCE); + return myQueryAccounts.apply(TopLevelResource.INSTANCE).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve suggested accounts", e); } diff --git a/java/com/google/gerrit/server/api/accounts/EmailApiImpl.java b/java/com/google/gerrit/server/api/accounts/EmailApiImpl.java index 759f60ca1d..f68142f982 100644 --- a/java/com/google/gerrit/server/api/accounts/EmailApiImpl.java +++ b/java/com/google/gerrit/server/api/accounts/EmailApiImpl.java @@ -61,7 +61,7 @@ public class EmailApiImpl implements EmailApi { @Override public EmailInfo get() throws RestApiException { try { - return get.apply(resource()); + return get.apply(resource()).value(); } catch (Exception e) { throw asRestApiException("Cannot read email", e); } diff --git a/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java b/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java index f6887182ef..3cbcb735c7 100644 --- a/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/ChangeApiImpl.java @@ -351,7 +351,7 @@ class ChangeApiImpl implements ChangeApi { @Override public ChangeApi revert(RevertInput in) throws RestApiException { try { - return changeApi.id(revert.apply(change, in)._number); + return changeApi.id(revert.apply(change, in).value()._number); } catch (Exception e) { throw asRestApiException("Cannot revert change", e); } @@ -401,7 +401,7 @@ class ChangeApiImpl implements ChangeApi { @Override public String topic() throws RestApiException { - return getTopic.apply(change); + return getTopic.apply(change).value(); } @Override @@ -418,7 +418,7 @@ class ChangeApiImpl implements ChangeApi { @Override public IncludedInInfo includedIn() throws RestApiException { try { - return includedIn.apply(change); + return includedIn.apply(change).value(); } catch (Exception e) { throw asRestApiException("Could not extract IncludedIn data", e); } @@ -427,7 +427,7 @@ class ChangeApiImpl implements ChangeApi { @Override public AddReviewerResult addReviewer(AddReviewerInput in) throws RestApiException { try { - return postReviewers.apply(change, in); + return postReviewers.apply(change, in).value(); } catch (Exception e) { throw asRestApiException("Cannot add change reviewer", e); } @@ -448,7 +448,7 @@ class ChangeApiImpl implements ChangeApi { try { suggestReviewers.setQuery(r.getQuery()); suggestReviewers.setLimit(r.getLimit()); - return suggestReviewers.apply(change); + return suggestReviewers.apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve suggested reviewers", e); } @@ -457,7 +457,7 @@ class ChangeApiImpl implements ChangeApi { @Override public List reviewers() throws RestApiException { try { - return listReviewers.apply(change); + return listReviewers.apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve reviewers", e); } @@ -512,7 +512,7 @@ class ChangeApiImpl implements ChangeApi { @Override public AccountInfo setAssignee(AssigneeInput input) throws RestApiException { try { - return putAssignee.apply(change, input); + return putAssignee.apply(change, input).value(); } catch (Exception e) { throw asRestApiException("Cannot set assignee", e); } @@ -550,7 +550,7 @@ class ChangeApiImpl implements ChangeApi { @Override public Map> comments() throws RestApiException { try { - return listComments.apply(change); + return listComments.apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot get comments", e); } @@ -559,7 +559,7 @@ class ChangeApiImpl implements ChangeApi { @Override public Map> robotComments() throws RestApiException { try { - return listChangeRobotComments.apply(change); + return listChangeRobotComments.apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot get robot comments", e); } @@ -568,7 +568,7 @@ class ChangeApiImpl implements ChangeApi { @Override public Map> drafts() throws RestApiException { try { - return listDrafts.apply(change); + return listDrafts.apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot get drafts", e); } @@ -653,7 +653,7 @@ class ChangeApiImpl implements ChangeApi { try { GetPureRevert getPureRevert = getPureRevertProvider.get(); getPureRevert.setClaimedOriginal(claimedOriginal); - return getPureRevert.apply(change); + return getPureRevert.apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot compute pure revert", e); } @@ -662,7 +662,7 @@ class ChangeApiImpl implements ChangeApi { @Override public List messages() throws RestApiException { try { - return changeMessages.list().apply(change); + return changeMessages.list().apply(change).value(); } catch (Exception e) { throw asRestApiException("Cannot list change messages", e); } diff --git a/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java b/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java index ffc65245d6..7f0feba9b4 100644 --- a/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/ChangeEditApiImpl.java @@ -221,7 +221,7 @@ public class ChangeEditApiImpl implements ChangeEditApi { public String getCommitMessage() throws RestApiException { try { try (BinaryResult binaryResult = - getChangeEditCommitMessageProvider.get().apply(changeResource)) { + getChangeEditCommitMessageProvider.get().apply(changeResource).value()) { return binaryResult.asString(); } } catch (Exception e) { diff --git a/java/com/google/gerrit/server/api/changes/ChangeMessageApiImpl.java b/java/com/google/gerrit/server/api/changes/ChangeMessageApiImpl.java index 14310e85f3..490ec5b0d7 100644 --- a/java/com/google/gerrit/server/api/changes/ChangeMessageApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/ChangeMessageApiImpl.java @@ -48,7 +48,7 @@ class ChangeMessageApiImpl implements ChangeMessageApi { @Override public ChangeMessageInfo get() throws RestApiException { try { - return getChangeMessage.apply(changeMessageResource); + return getChangeMessage.apply(changeMessageResource).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve change message", e); } diff --git a/java/com/google/gerrit/server/api/changes/ChangesImpl.java b/java/com/google/gerrit/server/api/changes/ChangesImpl.java index d1a011def1..1dd8dca2fc 100644 --- a/java/com/google/gerrit/server/api/changes/ChangesImpl.java +++ b/java/com/google/gerrit/server/api/changes/ChangesImpl.java @@ -127,7 +127,7 @@ class ChangesImpl implements Changes { dynamicOptionParser.parseDynamicOptions(qc, q.getPluginOptions()); try { - List result = qc.apply(TopLevelResource.INSTANCE); + List result = qc.apply(TopLevelResource.INSTANCE).value(); if (result.isEmpty()) { return ImmutableList.of(); } diff --git a/java/com/google/gerrit/server/api/changes/CommentApiImpl.java b/java/com/google/gerrit/server/api/changes/CommentApiImpl.java index 418187db32..c5fcab104b 100644 --- a/java/com/google/gerrit/server/api/changes/CommentApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/CommentApiImpl.java @@ -46,7 +46,7 @@ class CommentApiImpl implements CommentApi { @Override public CommentInfo get() throws RestApiException { try { - return getComment.apply(comment); + return getComment.apply(comment).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve comment", e); } @@ -55,7 +55,7 @@ class CommentApiImpl implements CommentApi { @Override public CommentInfo delete(DeleteCommentInput input) throws RestApiException { try { - return deleteComment.apply(comment, input); + return deleteComment.apply(comment, input).value(); } catch (Exception e) { throw asRestApiException("Cannot delete comment", e); } diff --git a/java/com/google/gerrit/server/api/changes/DraftApiImpl.java b/java/com/google/gerrit/server/api/changes/DraftApiImpl.java index 4d26b11336..f6eb3c53e0 100644 --- a/java/com/google/gerrit/server/api/changes/DraftApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/DraftApiImpl.java @@ -54,7 +54,7 @@ class DraftApiImpl implements DraftApi { @Override public CommentInfo get() throws RestApiException { try { - return getDraft.apply(draft); + return getDraft.apply(draft).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve draft", e); } diff --git a/java/com/google/gerrit/server/api/changes/FileApiImpl.java b/java/com/google/gerrit/server/api/changes/FileApiImpl.java index f2d0ef834a..24902d6e82 100644 --- a/java/com/google/gerrit/server/api/changes/FileApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/FileApiImpl.java @@ -56,7 +56,7 @@ class FileApiImpl implements FileApi { @Override public BinaryResult content() throws RestApiException { try { - return getContent.apply(file); + return getContent.apply(file).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve file content", e); } diff --git a/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java b/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java index 11536cbfe9..2174ef0d43 100644 --- a/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/ReviewerApiImpl.java @@ -54,7 +54,7 @@ public class ReviewerApiImpl implements ReviewerApi { @Override public Map votes() throws RestApiException { try { - return listVotes.apply(reviewer); + return listVotes.apply(reviewer).value(); } catch (Exception e) { throw asRestApiException("Cannot list votes", e); } diff --git a/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java b/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java index 27073dbf33..cc0a2f1a9d 100644 --- a/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/RevisionApiImpl.java @@ -254,7 +254,7 @@ class RevisionApiImpl implements RevisionApi { public BinaryResult submitPreview(String format) throws RestApiException { try { submitPreview.setFormat(format); - return submitPreview.apply(revision); + return submitPreview.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot get submit preview", e); } @@ -263,7 +263,7 @@ class RevisionApiImpl implements RevisionApi { @Override public ChangeApi rebase(RebaseInput in) throws RestApiException { try { - return changes.id(rebase.apply(revision, in)._number); + return changes.id(rebase.apply(revision, in).value()._number); } catch (Exception e) { throw asRestApiException("Cannot rebase ps", e); } @@ -282,7 +282,7 @@ class RevisionApiImpl implements RevisionApi { @Override public ChangeApi cherryPick(CherryPickInput in) throws RestApiException { try { - return changes.id(cherryPick.apply(revision, in)._number); + return changes.id(cherryPick.apply(revision, in).value()._number); } catch (Exception e) { throw asRestApiException("Cannot cherry pick", e); } @@ -291,7 +291,7 @@ class RevisionApiImpl implements RevisionApi { @Override public CherryPickChangeInfo cherryPickAsInfo(CherryPickInput in) throws RestApiException { try { - return cherryPick.apply(revision, in); + return cherryPick.apply(revision, in).value(); } catch (Exception e) { throw asRestApiException("Cannot cherry pick", e); } @@ -336,7 +336,7 @@ class RevisionApiImpl implements RevisionApi { @Override public MergeableInfo mergeable() throws RestApiException { try { - return mergeable.apply(revision); + return mergeable.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot check mergeability", e); } @@ -346,7 +346,7 @@ class RevisionApiImpl implements RevisionApi { public MergeableInfo mergeableOtherBranches() throws RestApiException { try { mergeable.setOtherBranches(true); - return mergeable.apply(revision); + return mergeable.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot check mergeability", e); } @@ -400,7 +400,7 @@ class RevisionApiImpl implements RevisionApi { @Override public Map> comments() throws RestApiException { try { - return listComments.apply(revision); + return listComments.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve comments", e); } @@ -409,7 +409,7 @@ class RevisionApiImpl implements RevisionApi { @Override public Map> robotComments() throws RestApiException { try { - return listRobotComments.apply(revision); + return listRobotComments.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve robot comments", e); } @@ -427,7 +427,7 @@ class RevisionApiImpl implements RevisionApi { @Override public Map> drafts() throws RestApiException { try { - return listDrafts.apply(revision); + return listDrafts.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve drafts", e); } @@ -504,7 +504,7 @@ class RevisionApiImpl implements RevisionApi { @Override public BinaryResult patch() throws RestApiException { try { - return getPatch.apply(revision); + return getPatch.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot get patch", e); } @@ -513,7 +513,7 @@ class RevisionApiImpl implements RevisionApi { @Override public BinaryResult patch(String path) throws RestApiException { try { - return getPatch.setPath(path).apply(revision); + return getPatch.setPath(path).apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot get patch", e); } @@ -531,7 +531,7 @@ class RevisionApiImpl implements RevisionApi { @Override public SubmitType submitType() throws RestApiException { try { - return getSubmitType.apply(revision); + return getSubmitType.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot get submit type", e); } @@ -540,7 +540,7 @@ class RevisionApiImpl implements RevisionApi { @Override public SubmitType testSubmitType(TestSubmitRuleInput in) throws RestApiException { try { - return testSubmitType.apply(revision, in); + return testSubmitType.apply(revision, in).value(); } catch (Exception e) { throw asRestApiException("Cannot test submit type", e); } @@ -549,7 +549,7 @@ class RevisionApiImpl implements RevisionApi { @Override public List testSubmitRule(TestSubmitRuleInput in) throws RestApiException { try { - return testSubmitRule.get().apply(revision, in); + return testSubmitRule.get().apply(revision, in).value(); } catch (Exception e) { throw asRestApiException("Cannot test submit rule", e); } @@ -575,7 +575,7 @@ class RevisionApiImpl implements RevisionApi { @Override public RelatedChangesInfo related() throws RestApiException { try { - return getRelated.apply(revision); + return getRelated.apply(revision).value(); } catch (Exception e) { throw asRestApiException("Cannot get related changes", e); } @@ -624,7 +624,7 @@ class RevisionApiImpl implements RevisionApi { @Override public String description() throws RestApiException { - return getDescription.apply(revision); + return getDescription.apply(revision).value(); } @Override diff --git a/java/com/google/gerrit/server/api/changes/RevisionReviewerApiImpl.java b/java/com/google/gerrit/server/api/changes/RevisionReviewerApiImpl.java index 8cad507aad..49c2d4931c 100644 --- a/java/com/google/gerrit/server/api/changes/RevisionReviewerApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/RevisionReviewerApiImpl.java @@ -47,7 +47,7 @@ public class RevisionReviewerApiImpl implements RevisionReviewerApi { @Override public Map votes() throws RestApiException { try { - return listVotes.apply(reviewer); + return listVotes.apply(reviewer).value(); } catch (Exception e) { throw asRestApiException("Cannot list votes", e); } diff --git a/java/com/google/gerrit/server/api/changes/RobotCommentApiImpl.java b/java/com/google/gerrit/server/api/changes/RobotCommentApiImpl.java index 37a56fe0fb..ec13061493 100644 --- a/java/com/google/gerrit/server/api/changes/RobotCommentApiImpl.java +++ b/java/com/google/gerrit/server/api/changes/RobotCommentApiImpl.java @@ -41,7 +41,7 @@ public class RobotCommentApiImpl implements RobotCommentApi { @Override public RobotCommentInfo get() throws RestApiException { try { - return getComment.apply(comment); + return getComment.apply(comment).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve robot comment", e); } diff --git a/java/com/google/gerrit/server/api/config/ServerImpl.java b/java/com/google/gerrit/server/api/config/ServerImpl.java index 6e78be241c..4ca842b005 100644 --- a/java/com/google/gerrit/server/api/config/ServerImpl.java +++ b/java/com/google/gerrit/server/api/config/ServerImpl.java @@ -83,7 +83,7 @@ public class ServerImpl implements Server { @Override public ServerInfo getInfo() throws RestApiException { try { - return getServerInfo.apply(new ConfigResource()); + return getServerInfo.apply(new ConfigResource()).value(); } catch (Exception e) { throw asRestApiException("Cannot get server info", e); } @@ -92,7 +92,7 @@ public class ServerImpl implements Server { @Override public GeneralPreferencesInfo getDefaultPreferences() throws RestApiException { try { - return getPreferences.apply(new ConfigResource()); + return getPreferences.apply(new ConfigResource()).value(); } catch (Exception e) { throw asRestApiException("Cannot get default general preferences", e); } @@ -102,7 +102,7 @@ public class ServerImpl implements Server { public GeneralPreferencesInfo setDefaultPreferences(GeneralPreferencesInfo in) throws RestApiException { try { - return setPreferences.apply(new ConfigResource(), in); + return setPreferences.apply(new ConfigResource(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot set default general preferences", e); } @@ -111,7 +111,7 @@ public class ServerImpl implements Server { @Override public DiffPreferencesInfo getDefaultDiffPreferences() throws RestApiException { try { - return getDiffPreferences.apply(new ConfigResource()); + return getDiffPreferences.apply(new ConfigResource()).value(); } catch (Exception e) { throw asRestApiException("Cannot get default diff preferences", e); } @@ -121,7 +121,7 @@ public class ServerImpl implements Server { public DiffPreferencesInfo setDefaultDiffPreferences(DiffPreferencesInfo in) throws RestApiException { try { - return setDiffPreferences.apply(new ConfigResource(), in); + return setDiffPreferences.apply(new ConfigResource(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot set default diff preferences", e); } @@ -130,7 +130,7 @@ public class ServerImpl implements Server { @Override public EditPreferencesInfo getDefaultEditPreferences() throws RestApiException { try { - return getEditPreferences.apply(new ConfigResource()); + return getEditPreferences.apply(new ConfigResource()).value(); } catch (Exception e) { throw asRestApiException("Cannot get default edit preferences", e); } @@ -140,7 +140,7 @@ public class ServerImpl implements Server { public EditPreferencesInfo setDefaultEditPreferences(EditPreferencesInfo in) throws RestApiException { try { - return setEditPreferences.apply(new ConfigResource(), in); + return setEditPreferences.apply(new ConfigResource(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot set default edit preferences", e); } @@ -149,7 +149,7 @@ public class ServerImpl implements Server { @Override public ConsistencyCheckInfo checkConsistency(ConsistencyCheckInput in) throws RestApiException { try { - return checkConsistency.get().apply(new ConfigResource(), in); + return checkConsistency.get().apply(new ConfigResource(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot check consistency", e); } diff --git a/java/com/google/gerrit/server/api/groups/GroupApiImpl.java b/java/com/google/gerrit/server/api/groups/GroupApiImpl.java index b70a0294a3..5e58d49998 100644 --- a/java/com/google/gerrit/server/api/groups/GroupApiImpl.java +++ b/java/com/google/gerrit/server/api/groups/GroupApiImpl.java @@ -119,7 +119,7 @@ class GroupApiImpl implements GroupApi { @Override public GroupInfo get() throws RestApiException { try { - return getGroup.apply(rsrc); + return getGroup.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve group", e); } @@ -128,7 +128,7 @@ class GroupApiImpl implements GroupApi { @Override public GroupInfo detail() throws RestApiException { try { - return getDetail.apply(rsrc); + return getDetail.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve group", e); } @@ -136,7 +136,7 @@ class GroupApiImpl implements GroupApi { @Override public String name() throws RestApiException { - return getName.apply(rsrc); + return getName.apply(rsrc).value(); } @Override @@ -153,7 +153,7 @@ class GroupApiImpl implements GroupApi { @Override public GroupInfo owner() throws RestApiException { try { - return getOwner.apply(rsrc); + return getOwner.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot get group owner", e); } @@ -172,7 +172,7 @@ class GroupApiImpl implements GroupApi { @Override public String description() throws RestApiException { - return getDescription.apply(rsrc); + return getDescription.apply(rsrc).value(); } @Override @@ -188,7 +188,7 @@ class GroupApiImpl implements GroupApi { @Override public GroupOptionsInfo options() throws RestApiException { - return getOptions.apply(rsrc); + return getOptions.apply(rsrc).value(); } @Override @@ -209,7 +209,7 @@ class GroupApiImpl implements GroupApi { public List members(boolean recursive) throws RestApiException { listMembers.setRecursive(recursive); try { - return listMembers.apply(rsrc); + return listMembers.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot list group members", e); } @@ -236,7 +236,7 @@ class GroupApiImpl implements GroupApi { @Override public List includedGroups() throws RestApiException { try { - return listSubgroups.apply(rsrc); + return listSubgroups.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot list subgroups", e); } @@ -263,7 +263,7 @@ class GroupApiImpl implements GroupApi { @Override public List auditLog() throws RestApiException { try { - return getAuditLog.apply(rsrc); + return getAuditLog.apply(rsrc).value(); } catch (Exception e) { throw asRestApiException("Cannot get audit log", e); } diff --git a/java/com/google/gerrit/server/api/groups/GroupsImpl.java b/java/com/google/gerrit/server/api/groups/GroupsImpl.java index 8c676334cd..a46b59a20b 100644 --- a/java/com/google/gerrit/server/api/groups/GroupsImpl.java +++ b/java/com/google/gerrit/server/api/groups/GroupsImpl.java @@ -98,7 +98,7 @@ class GroupsImpl implements Groups { .currentUser() .checkAny(GlobalPermission.fromAnnotation(createGroup.getClass())); GroupInfo info = - createGroup.apply(TopLevelResource.INSTANCE, IdString.fromDecoded(in.name), in); + createGroup.apply(TopLevelResource.INSTANCE, IdString.fromDecoded(in.name), in).value(); return id(info.id); } catch (Exception e) { throw asRestApiException("Cannot create group " + in.name, e); @@ -154,7 +154,7 @@ class GroupsImpl implements Groups { list.setMatchRegex(req.getRegex()); list.setSuggest(req.getSuggest()); try { - return list.apply(tlr); + return list.apply(tlr).value(); } catch (Exception e) { throw asRestApiException("Cannot list groups", e); } @@ -184,7 +184,7 @@ class GroupsImpl implements Groups { for (ListGroupsOption option : r.getOptions()) { myQueryGroups.addOption(option); } - return myQueryGroups.apply(TopLevelResource.INSTANCE); + return myQueryGroups.apply(TopLevelResource.INSTANCE).value(); } catch (Exception e) { throw asRestApiException("Cannot query groups", e); } diff --git a/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java b/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java index 71f78320c0..95912e4cf4 100644 --- a/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java +++ b/java/com/google/gerrit/server/api/plugins/PluginApiImpl.java @@ -53,7 +53,7 @@ public class PluginApiImpl implements PluginApi { @Override public PluginInfo get() throws RestApiException { - return getStatus.apply(resource); + return getStatus.apply(resource).value(); } @Override diff --git a/java/com/google/gerrit/server/api/plugins/PluginsImpl.java b/java/com/google/gerrit/server/api/plugins/PluginsImpl.java index e5706559a0..e45b3e6dec 100644 --- a/java/com/google/gerrit/server/api/plugins/PluginsImpl.java +++ b/java/com/google/gerrit/server/api/plugins/PluginsImpl.java @@ -59,7 +59,7 @@ public class PluginsImpl implements Plugins { return new ListRequest() { @Override public SortedMap getAsMap() throws RestApiException { - return listProvider.get().request(this).apply(TopLevelResource.INSTANCE); + return listProvider.get().request(this).apply(TopLevelResource.INSTANCE).value(); } }; } diff --git a/java/com/google/gerrit/server/api/projects/BranchApiImpl.java b/java/com/google/gerrit/server/api/projects/BranchApiImpl.java index b3506fc5d7..7def99e87d 100644 --- a/java/com/google/gerrit/server/api/projects/BranchApiImpl.java +++ b/java/com/google/gerrit/server/api/projects/BranchApiImpl.java @@ -90,7 +90,7 @@ public class BranchApiImpl implements BranchApi { @Override public BranchInfo get() throws RestApiException { try { - return getBranch.apply(resource()); + return getBranch.apply(resource()).value(); } catch (Exception e) { throw asRestApiException("Cannot read branch", e); } @@ -109,7 +109,7 @@ public class BranchApiImpl implements BranchApi { public BinaryResult file(String path) throws RestApiException { try { FileResource resource = filesCollection.parse(resource(), IdString.fromDecoded(path)); - return getContent.apply(resource); + return getContent.apply(resource).value(); } catch (Exception e) { throw asRestApiException("Cannot retrieve file", e); } @@ -118,7 +118,7 @@ public class BranchApiImpl implements BranchApi { @Override public List reflog() throws RestApiException { try { - return getReflog.apply(resource()); + return getReflog.apply(resource()).value(); } catch (IOException | PermissionBackendException e) { throw new RestApiException("Cannot retrieve reflog", e); } diff --git a/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java b/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java index d7c9bc7add..22bb076b0f 100644 --- a/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java +++ b/java/com/google/gerrit/server/api/projects/ChildProjectApiImpl.java @@ -44,6 +44,6 @@ public class ChildProjectApiImpl implements ChildProjectApi { @Override public ProjectInfo get(boolean recursive) throws RestApiException { getChildProject.setRecursive(recursive); - return getChildProject.apply(rsrc); + return getChildProject.apply(rsrc).value(); } } diff --git a/java/com/google/gerrit/server/api/projects/CommitApiImpl.java b/java/com/google/gerrit/server/api/projects/CommitApiImpl.java index 49eec6ea87..1b09e10443 100644 --- a/java/com/google/gerrit/server/api/projects/CommitApiImpl.java +++ b/java/com/google/gerrit/server/api/projects/CommitApiImpl.java @@ -53,7 +53,7 @@ public class CommitApiImpl implements CommitApi { @Override public ChangeApi cherryPick(CherryPickInput input) throws RestApiException { try { - return changes.id(cherryPickCommit.apply(commitResource, input)._number); + return changes.id(cherryPickCommit.apply(commitResource, input).value()._number); } catch (Exception e) { throw asRestApiException("Cannot cherry pick", e); } @@ -62,7 +62,7 @@ public class CommitApiImpl implements CommitApi { @Override public IncludedInInfo includedIn() throws RestApiException { try { - return includedIn.apply(commitResource); + return includedIn.apply(commitResource).value(); } catch (Exception e) { throw asRestApiException("Could not extract IncludedIn data", e); } diff --git a/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java b/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java index c44f5bb502..786ab95cbe 100644 --- a/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java +++ b/java/com/google/gerrit/server/api/projects/DashboardApiImpl.java @@ -67,7 +67,7 @@ public class DashboardApiImpl implements DashboardApi { @Override public DashboardInfo get(boolean inherited) throws RestApiException { try { - return get.get().setInherited(inherited).apply(resource()); + return get.get().setInherited(inherited).apply(resource()).value(); } catch (IOException | PermissionBackendException | ConfigInvalidException e) { throw asRestApiException("Cannot read dashboard", e); } diff --git a/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java b/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java index 354331efcf..207f4bc5df 100644 --- a/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java +++ b/java/com/google/gerrit/server/api/projects/ProjectApiImpl.java @@ -368,13 +368,13 @@ public class ProjectApiImpl implements ProjectApi { @Override public String description() throws RestApiException { - return getDescription.apply(checkExists()); + return getDescription.apply(checkExists()).value(); } @Override public ProjectAccessInfo access() throws RestApiException { try { - return getAccess.apply(checkExists()); + return getAccess.apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot get access rights", e); } @@ -383,7 +383,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public ProjectAccessInfo access(ProjectAccessInput p) throws RestApiException { try { - return setAccess.apply(checkExists(), p); + return setAccess.apply(checkExists(), p).value(); } catch (Exception e) { throw asRestApiException("Cannot put access rights", e); } @@ -401,7 +401,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public AccessCheckInfo checkAccess(AccessCheckInput in) throws RestApiException { try { - return checkAccess.apply(checkExists(), in); + return checkAccess.apply(checkExists(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot check access rights", e); } @@ -410,7 +410,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public CheckProjectResultInfo check(CheckProjectInput in) throws RestApiException { try { - return check.apply(checkExists(), in); + return check.apply(checkExists(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot check project", e); } @@ -427,13 +427,13 @@ public class ProjectApiImpl implements ProjectApi { @Override public ConfigInfo config() throws RestApiException { - return getConfig.apply(checkExists()); + return getConfig.apply(checkExists()).value(); } @Override public ConfigInfo config(ConfigInput in) throws RestApiException { try { - return putConfig.apply(checkExists(), in); + return putConfig.apply(checkExists(), in).value(); } catch (Exception e) { throw asRestApiException("Cannot list tags", e); } @@ -445,7 +445,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public List get() throws RestApiException { try { - return listBranches.get().request(this).apply(checkExists()); + return listBranches.get().request(this).apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot list branches", e); } @@ -459,7 +459,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public List get() throws RestApiException { try { - return listTags.get().request(this).apply(checkExists()); + return listTags.get().request(this).apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot list tags", e); } @@ -475,7 +475,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public List children(boolean recursive) throws RestApiException { try { - return children.list().withRecursive(recursive).apply(checkExists()); + return children.list().withRecursive(recursive).apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot list children", e); } @@ -484,7 +484,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public List children(int limit) throws RestApiException { try { - return children.list().withLimit(limit).apply(checkExists()); + return children.list().withLimit(limit).apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot list children", e); } @@ -574,7 +574,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public List get() throws RestApiException { try { - List r = listDashboards.get().apply(checkExists()); + List r = listDashboards.get().apply(checkExists()).value(); if (r.isEmpty()) { return Collections.emptyList(); } @@ -592,7 +592,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public String head() throws RestApiException { try { - return getHead.apply(checkExists()); + return getHead.apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot get HEAD", e); } @@ -612,7 +612,7 @@ public class ProjectApiImpl implements ProjectApi { @Override public String parent() throws RestApiException { try { - return getParent.apply(checkExists()); + return getParent.apply(checkExists()).value(); } catch (Exception e) { throw asRestApiException("Cannot get parent", e); } diff --git a/java/com/google/gerrit/server/plugins/DisablePlugin.java b/java/com/google/gerrit/server/plugins/DisablePlugin.java index 877b348817..8adae5223c 100644 --- a/java/com/google/gerrit/server/plugins/DisablePlugin.java +++ b/java/com/google/gerrit/server/plugins/DisablePlugin.java @@ -18,6 +18,7 @@ import com.google.common.collect.ImmutableSet; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.common.PluginInfo; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.permissions.GlobalPermission; @@ -44,7 +45,7 @@ public class DisablePlugin implements RestModifyView { } @Override - public PluginInfo apply(PluginResource resource, Input input) throws RestApiException { + public Response apply(PluginResource resource, Input input) throws RestApiException { try { permissionBackend.currentUser().check(GlobalPermission.ADMINISTRATE_SERVER); } catch (PermissionBackendException e) { @@ -56,6 +57,6 @@ public class DisablePlugin implements RestModifyView { throw new MethodNotAllowedException("Plugin " + name + " is mandatory"); } loader.disablePlugins(ImmutableSet.of(name)); - return ListPlugins.toPluginInfo(loader.get(name)); + return Response.ok(ListPlugins.toPluginInfo(loader.get(name))); } } diff --git a/java/com/google/gerrit/server/plugins/EnablePlugin.java b/java/com/google/gerrit/server/plugins/EnablePlugin.java index 569bc39307..b45aaf1f69 100644 --- a/java/com/google/gerrit/server/plugins/EnablePlugin.java +++ b/java/com/google/gerrit/server/plugins/EnablePlugin.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.common.PluginInfo; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.inject.Inject; @@ -39,7 +40,7 @@ public class EnablePlugin implements RestModifyView { } @Override - public PluginInfo apply(PluginResource resource, Input input) throws RestApiException { + public Response apply(PluginResource resource, Input input) throws RestApiException { loader.checkRemoteAdminEnabled(); String name = resource.getName(); try { @@ -52,6 +53,6 @@ public class EnablePlugin implements RestModifyView { pw.flush(); throw new ResourceConflictException(buf.toString()); } - return ListPlugins.toPluginInfo(loader.get(name)); + return Response.ok(ListPlugins.toPluginInfo(loader.get(name))); } } diff --git a/java/com/google/gerrit/server/plugins/GetStatus.java b/java/com/google/gerrit/server/plugins/GetStatus.java index cbd864a2ce..5fcc96a526 100644 --- a/java/com/google/gerrit/server/plugins/GetStatus.java +++ b/java/com/google/gerrit/server/plugins/GetStatus.java @@ -15,13 +15,14 @@ package com.google.gerrit.server.plugins; import com.google.gerrit.extensions.common.PluginInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.inject.Singleton; @Singleton public class GetStatus implements RestReadView { @Override - public PluginInfo apply(PluginResource resource) { - return ListPlugins.toPluginInfo(resource.getPlugin()); + public Response apply(PluginResource resource) { + return Response.ok(ListPlugins.toPluginInfo(resource.getPlugin())); } } diff --git a/java/com/google/gerrit/server/plugins/ListPlugins.java b/java/com/google/gerrit/server/plugins/ListPlugins.java index 84e63d09a5..465d04143b 100644 --- a/java/com/google/gerrit/server/plugins/ListPlugins.java +++ b/java/com/google/gerrit/server/plugins/ListPlugins.java @@ -23,6 +23,7 @@ import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.api.plugins.Plugins; import com.google.gerrit.extensions.common.PluginInfo; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.extensions.restapi.Url; @@ -111,7 +112,8 @@ public class ListPlugins implements RestReadView { } @Override - public SortedMap apply(TopLevelResource resource) throws BadRequestException { + public Response> apply(TopLevelResource resource) + throws BadRequestException { Stream s = Streams.stream(pluginLoader.getPlugins(all)); if (matchPrefix != null) { checkMatchOptions(matchSubstring == null && matchRegex == null); @@ -132,7 +134,7 @@ public class ListPlugins implements RestReadView { if (limit > 0) { s = s.limit(limit); } - return new TreeMap<>(s.collect(toMap(Plugin::getName, ListPlugins::toPluginInfo))); + return Response.ok(new TreeMap<>(s.collect(toMap(Plugin::getName, ListPlugins::toPluginInfo)))); } private void checkMatchOptions(boolean cond) throws BadRequestException { diff --git a/java/com/google/gerrit/server/plugins/ReloadPlugin.java b/java/com/google/gerrit/server/plugins/ReloadPlugin.java index 1134f50800..490c4aab25 100644 --- a/java/com/google/gerrit/server/plugins/ReloadPlugin.java +++ b/java/com/google/gerrit/server/plugins/ReloadPlugin.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.common.Input; import com.google.gerrit.extensions.common.PluginInfo; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.inject.Inject; import com.google.inject.Singleton; @@ -38,7 +39,8 @@ public class ReloadPlugin implements RestModifyView { } @Override - public PluginInfo apply(PluginResource resource, Input input) throws ResourceConflictException { + public Response apply(PluginResource resource, Input input) + throws ResourceConflictException { String name = resource.getName(); try { loader.reload(ImmutableList.of(name)); @@ -52,6 +54,6 @@ public class ReloadPlugin implements RestModifyView { pw.flush(); throw new ResourceConflictException(buf.toString()); } - return ListPlugins.toPluginInfo(loader.get(name)); + return Response.ok(ListPlugins.toPluginInfo(loader.get(name))); } } diff --git a/java/com/google/gerrit/server/restapi/access/ListAccess.java b/java/com/google/gerrit/server/restapi/access/ListAccess.java index 74c18e1c5b..437f04ce62 100644 --- a/java/com/google/gerrit/server/restapi/access/ListAccess.java +++ b/java/com/google/gerrit/server/restapi/access/ListAccess.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.access; import com.google.gerrit.extensions.api.access.ProjectAccessInfo; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.reviewdb.client.Project; @@ -47,13 +48,13 @@ public class ListAccess implements RestReadView { } @Override - public Map apply(TopLevelResource resource) + public Response> apply(TopLevelResource resource) throws ResourceNotFoundException, ResourceConflictException, IOException, PermissionBackendException { Map access = new TreeMap<>(); for (String p : projects) { access.put(p, getAccess.apply(Project.nameKey(p))); } - return access; + return Response.ok(access); } } diff --git a/java/com/google/gerrit/server/restapi/account/CreateEmail.java b/java/com/google/gerrit/server/restapi/account/CreateEmail.java index cc4cf21af7..ae45b68b02 100644 --- a/java/com/google/gerrit/server/restapi/account/CreateEmail.java +++ b/java/com/google/gerrit/server/restapi/account/CreateEmail.java @@ -97,11 +97,11 @@ public class CreateEmail throw new MethodNotAllowedException("realm does not allow adding emails"); } - return apply(rsrc.getUser(), id, input); + return Response.created(apply(rsrc.getUser(), id, input)); } /** To be used from plugins that want to create emails without permission checks. */ - public Response apply(IdentifiedUser user, IdString id, EmailInput input) + public EmailInfo apply(IdentifiedUser user, IdString id, EmailInput input) throws RestApiException, EmailException, MethodNotAllowedException, IOException, ConfigInvalidException, PermissionBackendException { String email = id.get().trim(); @@ -146,6 +146,6 @@ public class CreateEmail throw e; } } - return Response.created(info); + return info; } } diff --git a/java/com/google/gerrit/server/restapi/account/DeleteDraftComments.java b/java/com/google/gerrit/server/restapi/account/DeleteDraftComments.java index d1b158523f..b815f9c607 100644 --- a/java/com/google/gerrit/server/restapi/account/DeleteDraftComments.java +++ b/java/com/google/gerrit/server/restapi/account/DeleteDraftComments.java @@ -27,6 +27,7 @@ import com.google.gerrit.extensions.client.ListChangesOption; import com.google.gerrit.extensions.common.CommentInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.index.query.Predicate; @@ -107,7 +108,7 @@ public class DeleteDraftComments } @Override - public ImmutableList apply( + public Response> apply( AccountResource rsrc, DeleteDraftCommentsInput input) throws RestApiException, UpdateException { CurrentUser user = userProvider.get(); @@ -147,7 +148,8 @@ public class DeleteDraftComments // allowing partial failure would have little value. BatchUpdate.execute(updates.values(), BatchUpdateListener.NONE, false); - return ops.stream().map(Op::getResult).filter(Objects::nonNull).collect(toImmutableList()); + return Response.ok( + ops.stream().map(Op::getResult).filter(Objects::nonNull).collect(toImmutableList())); } private Predicate predicate(Account.Id accountId, DeleteDraftCommentsInput input) diff --git a/java/com/google/gerrit/server/restapi/account/GetAccount.java b/java/com/google/gerrit/server/restapi/account/GetAccount.java index 6544f8dced..898b0bbfbc 100644 --- a/java/com/google/gerrit/server/restapi/account/GetAccount.java +++ b/java/com/google/gerrit/server/restapi/account/GetAccount.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.common.AccountInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountLoader; import com.google.gerrit.server.account.AccountResource; @@ -32,10 +33,10 @@ public class GetAccount implements RestReadView { } @Override - public AccountInfo apply(AccountResource rsrc) throws PermissionBackendException { + public Response apply(AccountResource rsrc) throws PermissionBackendException { AccountLoader loader = infoFactory.create(true); AccountInfo info = loader.get(rsrc.getUser().getAccountId()); loader.fill(); - return info; + return Response.ok(info); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetAgreements.java b/java/com/google/gerrit/server/restapi/account/GetAgreements.java index edcbc3560f..e985441c7c 100644 --- a/java/com/google/gerrit/server/restapi/account/GetAgreements.java +++ b/java/com/google/gerrit/server/restapi/account/GetAgreements.java @@ -21,6 +21,7 @@ import com.google.gerrit.common.data.PermissionRule.Action; import com.google.gerrit.extensions.common.AgreementInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -61,7 +62,7 @@ public class GetAgreements implements RestReadView { } @Override - public List apply(AccountResource resource) + public Response> apply(AccountResource resource) throws RestApiException, PermissionBackendException { if (!agreementsEnabled) { throw new MethodNotAllowedException("contributor agreements disabled"); @@ -97,6 +98,6 @@ public class GetAgreements implements RestReadView { results.add(agreementJson.format(ca)); } } - return results; + return Response.ok(results); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetAvatarChangeUrl.java b/java/com/google/gerrit/server/restapi/account/GetAvatarChangeUrl.java index 904b15fc68..e97e0a0e7e 100644 --- a/java/com/google/gerrit/server/restapi/account/GetAvatarChangeUrl.java +++ b/java/com/google/gerrit/server/restapi/account/GetAvatarChangeUrl.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.account; import com.google.common.base.Strings; import com.google.gerrit.extensions.registration.DynamicItem; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountResource; import com.google.gerrit.server.avatar.AvatarProvider; @@ -33,7 +34,7 @@ public class GetAvatarChangeUrl implements RestReadView { } @Override - public String apply(AccountResource rsrc) throws ResourceNotFoundException { + public Response apply(AccountResource rsrc) throws ResourceNotFoundException { AvatarProvider impl = avatarProvider.get(); if (impl == null) { throw new ResourceNotFoundException(); @@ -43,6 +44,6 @@ public class GetAvatarChangeUrl implements RestReadView { if (Strings.isNullOrEmpty(url)) { throw new ResourceNotFoundException(); } - return url; + return Response.ok(url); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetCapabilities.java b/java/com/google/gerrit/server/restapi/account/GetCapabilities.java index 9e2f1cf00e..fa9ab18bd2 100644 --- a/java/com/google/gerrit/server/restapi/account/GetCapabilities.java +++ b/java/com/google/gerrit/server/restapi/account/GetCapabilities.java @@ -28,6 +28,7 @@ import com.google.gerrit.extensions.config.CapabilityDefinition; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; @@ -77,7 +78,7 @@ public class GetCapabilities implements RestReadView { } @Override - public Map apply(AccountResource resource) + public Response> apply(AccountResource resource) throws RestApiException, PermissionBackendException { permissionBackend.checkUsesDefaultCapabilities(); PermissionBackend.WithUser perm = permissionBackend.currentUser(); @@ -95,7 +96,7 @@ public class GetCapabilities implements RestReadView { addRanges(have, limits); addPriority(have, limits); - return have; + return Response.ok(have); } private Set permissionsToTest() { @@ -168,9 +169,9 @@ public class GetCapabilities implements RestReadView { } @Override - public BinaryResult apply(Capability resource) throws ResourceNotFoundException { + public Response apply(Capability resource) throws ResourceNotFoundException { permissionBackend.checkUsesDefaultCapabilities(); - return BinaryResult.create("ok\n"); + return Response.ok(BinaryResult.create("ok\n")); } } } diff --git a/java/com/google/gerrit/server/restapi/account/GetDetail.java b/java/com/google/gerrit/server/restapi/account/GetDetail.java index b940e07cc6..e70afbf764 100644 --- a/java/com/google/gerrit/server/restapi/account/GetDetail.java +++ b/java/com/google/gerrit/server/restapi/account/GetDetail.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.common.AccountDetailInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.account.AccountDirectory.FillOptions; @@ -36,12 +37,12 @@ public class GetDetail implements RestReadView { } @Override - public AccountDetailInfo apply(AccountResource rsrc) throws PermissionBackendException { + public Response apply(AccountResource rsrc) throws PermissionBackendException { Account a = rsrc.getUser().getAccount(); AccountDetailInfo info = new AccountDetailInfo(a.id().get()); info.registeredOn = a.registeredOn(); info.inactive = !a.isActive() ? true : null; directory.fillAccountInfo(Collections.singleton(info), EnumSet.allOf(FillOptions.class)); - return info; + return Response.ok(info); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetDiffPreferences.java b/java/com/google/gerrit/server/restapi/account/GetDiffPreferences.java index 40201a879a..c9773f5774 100644 --- a/java/com/google/gerrit/server/restapi/account/GetDiffPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/GetDiffPreferences.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.client.DiffPreferencesInfo; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; @@ -48,16 +49,17 @@ public class GetDiffPreferences implements RestReadView { } @Override - public DiffPreferencesInfo apply(AccountResource rsrc) + public Response apply(AccountResource rsrc) throws RestApiException, ConfigInvalidException, IOException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.ADMINISTRATE_SERVER); } Account.Id id = rsrc.getUser().getAccountId(); - return accountCache - .get(id) - .map(AccountState::getDiffPreferences) - .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString()))); + return Response.ok( + accountCache + .get(id) + .map(AccountState::getDiffPreferences) + .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString())))); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetEditPreferences.java b/java/com/google/gerrit/server/restapi/account/GetEditPreferences.java index 0ecd6eaddd..ae3a2155e3 100644 --- a/java/com/google/gerrit/server/restapi/account/GetEditPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/GetEditPreferences.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.client.EditPreferencesInfo; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; @@ -48,16 +49,17 @@ public class GetEditPreferences implements RestReadView { } @Override - public EditPreferencesInfo apply(AccountResource rsrc) + public Response apply(AccountResource rsrc) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.MODIFY_ACCOUNT); } Account.Id id = rsrc.getUser().getAccountId(); - return accountCache - .get(id) - .map(AccountState::getEditPreferences) - .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString()))); + return Response.ok( + accountCache + .get(id) + .map(AccountState::getEditPreferences) + .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString())))); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetEmail.java b/java/com/google/gerrit/server/restapi/account/GetEmail.java index b050003707..afcdac2e50 100644 --- a/java/com/google/gerrit/server/restapi/account/GetEmail.java +++ b/java/com/google/gerrit/server/restapi/account/GetEmail.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.common.EmailInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountResource; import com.google.inject.Inject; @@ -26,10 +27,10 @@ public class GetEmail implements RestReadView { public GetEmail() {} @Override - public EmailInfo apply(AccountResource.Email rsrc) { + public Response apply(AccountResource.Email rsrc) { EmailInfo e = new EmailInfo(); e.email = rsrc.getEmail(); e.preferred(rsrc.getUser().getAccount().preferredEmail()); - return e; + return Response.ok(e); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetEmails.java b/java/com/google/gerrit/server/restapi/account/GetEmails.java index ffda7fb52a..9db9f05cc2 100644 --- a/java/com/google/gerrit/server/restapi/account/GetEmails.java +++ b/java/com/google/gerrit/server/restapi/account/GetEmails.java @@ -19,6 +19,7 @@ import static java.util.stream.Collectors.toList; import com.google.gerrit.extensions.common.EmailInfo; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.account.AccountResource; @@ -43,16 +44,17 @@ public class GetEmails implements RestReadView { } @Override - public List apply(AccountResource rsrc) + public Response> apply(AccountResource rsrc) throws AuthException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.MODIFY_ACCOUNT); } - return rsrc.getUser().getEmailAddresses().stream() - .filter(Objects::nonNull) - .map(e -> toEmailInfo(rsrc, e)) - .sorted(comparing((EmailInfo e) -> e.email)) - .collect(toList()); + return Response.ok( + rsrc.getUser().getEmailAddresses().stream() + .filter(Objects::nonNull) + .map(e -> toEmailInfo(rsrc, e)) + .sorted(comparing((EmailInfo e) -> e.email)) + .collect(toList())); } private static EmailInfo toEmailInfo(AccountResource rsrc, String email) { diff --git a/java/com/google/gerrit/server/restapi/account/GetExternalIds.java b/java/com/google/gerrit/server/restapi/account/GetExternalIds.java index ef448dc7cc..0e52af239c 100644 --- a/java/com/google/gerrit/server/restapi/account/GetExternalIds.java +++ b/java/com/google/gerrit/server/restapi/account/GetExternalIds.java @@ -19,6 +19,7 @@ import static com.google.gerrit.server.account.externalids.ExternalId.SCHEME_USE import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.gerrit.extensions.common.AccountExternalIdInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; @@ -58,7 +59,7 @@ public class GetExternalIds implements RestReadView { } @Override - public List apply(AccountResource resource) + public Response> apply(AccountResource resource) throws RestApiException, IOException, PermissionBackendException { if (!self.get().hasSameAccountId(resource.getUser())) { permissionBackend.currentUser().check(GlobalPermission.ACCESS_DATABASE); @@ -66,7 +67,7 @@ public class GetExternalIds implements RestReadView { Collection ids = externalIds.byAccount(resource.getUser().getAccountId()); if (ids.isEmpty()) { - return ImmutableList.of(); + return Response.ok(ImmutableList.of()); } List result = Lists.newArrayListWithCapacity(ids.size()); for (ExternalId id : ids) { @@ -83,7 +84,7 @@ public class GetExternalIds implements RestReadView { } result.add(info); } - return result; + return Response.ok(result); } private static Boolean toBoolean(boolean v) { diff --git a/java/com/google/gerrit/server/restapi/account/GetGroups.java b/java/com/google/gerrit/server/restapi/account/GetGroups.java index 569ff76a4c..5848e1e580 100644 --- a/java/com/google/gerrit/server/restapi/account/GetGroups.java +++ b/java/com/google/gerrit/server/restapi/account/GetGroups.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.exceptions.NoSuchGroupException; import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -42,7 +43,8 @@ public class GetGroups implements RestReadView { } @Override - public List apply(AccountResource resource) throws PermissionBackendException { + public Response> apply(AccountResource resource) + throws PermissionBackendException { IdentifiedUser user = resource.getUser(); Account.Id userId = user.getAccountId(); Set knownGroups = user.getEffectiveGroups().getKnownGroups(); @@ -58,6 +60,6 @@ public class GetGroups implements RestReadView { visibleGroups.add(json.format(ctl.getGroup())); } } - return visibleGroups; + return Response.ok(visibleGroups); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetName.java b/java/com/google/gerrit/server/restapi/account/GetName.java index 743ed4def0..ca33887eb0 100644 --- a/java/com/google/gerrit/server/restapi/account/GetName.java +++ b/java/com/google/gerrit/server/restapi/account/GetName.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.account; import com.google.common.base.Strings; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountResource; import com.google.inject.Singleton; @@ -22,7 +23,7 @@ import com.google.inject.Singleton; @Singleton public class GetName implements RestReadView { @Override - public String apply(AccountResource rsrc) { - return Strings.nullToEmpty(rsrc.getUser().getAccount().fullName()); + public Response apply(AccountResource rsrc) { + return Response.ok(Strings.nullToEmpty(rsrc.getUser().getAccount().fullName())); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java b/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java index 395c1599db..24682c02c3 100644 --- a/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java +++ b/java/com/google/gerrit/server/restapi/account/GetOAuthToken.java @@ -18,6 +18,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.auth.oauth.OAuthToken; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.account.AccountResource; @@ -50,7 +51,7 @@ public class GetOAuthToken implements RestReadView { } @Override - public OAuthTokenInfo apply(AccountResource rsrc) + public Response apply(AccountResource rsrc) throws AuthException, ResourceNotFoundException { if (!self.get().hasSameAccountId(rsrc.getUser())) { throw new AuthException("not allowed to get access token"); @@ -66,7 +67,7 @@ public class GetOAuthToken implements RestReadView { accessTokenInfo.providerId = accessToken.getProviderId(); accessTokenInfo.expiresAt = Long.toString(accessToken.getExpiresAt()); accessTokenInfo.type = BEARER_TYPE; - return accessTokenInfo; + return Response.ok(accessTokenInfo); } private static String getHostName(String canonicalWebUrl) { diff --git a/java/com/google/gerrit/server/restapi/account/GetPreferences.java b/java/com/google/gerrit/server/restapi/account/GetPreferences.java index 3d2064232f..90884c7a13 100644 --- a/java/com/google/gerrit/server/restapi/account/GetPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/GetPreferences.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; @@ -54,7 +55,7 @@ public class GetPreferences implements RestReadView { } @Override - public GeneralPreferencesInfo apply(AccountResource rsrc) + public Response apply(AccountResource rsrc) throws RestApiException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.MODIFY_ACCOUNT); @@ -66,7 +67,7 @@ public class GetPreferences implements RestReadView { .get(id) .map(AccountState::getGeneralPreferences) .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString()))); - return unsetDownloadSchemeIfUnsupported(preferencesInfo); + return Response.ok(unsetDownloadSchemeIfUnsupported(preferencesInfo)); } private GeneralPreferencesInfo unsetDownloadSchemeIfUnsupported( diff --git a/java/com/google/gerrit/server/restapi/account/GetSshKey.java b/java/com/google/gerrit/server/restapi/account/GetSshKey.java index dc726630c2..58b5d12c14 100644 --- a/java/com/google/gerrit/server/restapi/account/GetSshKey.java +++ b/java/com/google/gerrit/server/restapi/account/GetSshKey.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.common.SshKeyInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountResource; import com.google.gerrit.server.account.AccountResource.SshKey; @@ -24,7 +25,7 @@ import com.google.inject.Singleton; public class GetSshKey implements RestReadView { @Override - public SshKeyInfo apply(SshKey rsrc) { - return GetSshKeys.newSshKeyInfo(rsrc.getSshKey()); + public Response apply(SshKey rsrc) { + return Response.ok(GetSshKeys.newSshKeyInfo(rsrc.getSshKey())); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetSshKeys.java b/java/com/google/gerrit/server/restapi/account/GetSshKeys.java index 408aa5fd48..0ca9b9e4cf 100644 --- a/java/com/google/gerrit/server/restapi/account/GetSshKeys.java +++ b/java/com/google/gerrit/server/restapi/account/GetSshKeys.java @@ -18,6 +18,7 @@ import com.google.common.base.Strings; import com.google.common.collect.Lists; import com.google.gerrit.extensions.common.SshKeyInfo; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.IdentifiedUser; @@ -53,13 +54,13 @@ public class GetSshKeys implements RestReadView { } @Override - public List apply(AccountResource rsrc) + public Response> apply(AccountResource rsrc) throws AuthException, RepositoryNotFoundException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.MODIFY_ACCOUNT); } - return apply(rsrc.getUser()); + return Response.ok(apply(rsrc.getUser())); } public List apply(IdentifiedUser user) diff --git a/java/com/google/gerrit/server/restapi/account/GetStatus.java b/java/com/google/gerrit/server/restapi/account/GetStatus.java index 6abc46d88c..447ad76f9f 100644 --- a/java/com/google/gerrit/server/restapi/account/GetStatus.java +++ b/java/com/google/gerrit/server/restapi/account/GetStatus.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.account; import com.google.common.base.Strings; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountResource; import com.google.inject.Singleton; @@ -22,7 +23,7 @@ import com.google.inject.Singleton; @Singleton public class GetStatus implements RestReadView { @Override - public String apply(AccountResource rsrc) { - return Strings.nullToEmpty(rsrc.getUser().getAccount().status()); + public Response apply(AccountResource rsrc) { + return Response.ok(Strings.nullToEmpty(rsrc.getUser().getAccount().status())); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetUsername.java b/java/com/google/gerrit/server/restapi/account/GetUsername.java index 01185c3f71..7e58f945cf 100644 --- a/java/com/google/gerrit/server/restapi/account/GetUsername.java +++ b/java/com/google/gerrit/server/restapi/account/GetUsername.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountResource; import com.google.inject.Inject; @@ -27,7 +28,8 @@ public class GetUsername implements RestReadView { public GetUsername() {} @Override - public String apply(AccountResource rsrc) throws AuthException, ResourceNotFoundException { - return rsrc.getUser().getUserName().orElseThrow(ResourceNotFoundException::new); + public Response apply(AccountResource rsrc) + throws AuthException, ResourceNotFoundException { + return Response.ok(rsrc.getUser().getUserName().orElseThrow(ResourceNotFoundException::new)); } } diff --git a/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java b/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java index fce324e481..d60bfd5b16 100644 --- a/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java +++ b/java/com/google/gerrit/server/restapi/account/GetWatchedProjects.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableSet; import com.google.gerrit.extensions.client.ProjectWatchInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.server.IdentifiedUser; @@ -55,7 +56,7 @@ public class GetWatchedProjects implements RestReadView { } @Override - public List apply(AccountResource rsrc) + public Response> apply(AccountResource rsrc) throws AuthException, IOException, ConfigInvalidException, PermissionBackendException, ResourceNotFoundException { if (!self.get().hasSameAccountId(rsrc.getUser())) { @@ -64,12 +65,13 @@ public class GetWatchedProjects implements RestReadView { Account.Id accountId = rsrc.getUser().getAccountId(); AccountState account = accounts.get(accountId).orElseThrow(ResourceNotFoundException::new); - return account.getProjectWatches().entrySet().stream() - .map(e -> toProjectWatchInfo(e.getKey(), e.getValue())) - .sorted( - comparing((ProjectWatchInfo pwi) -> pwi.project) - .thenComparing(pwi -> Strings.nullToEmpty(pwi.filter))) - .collect(toList()); + return Response.ok( + account.getProjectWatches().entrySet().stream() + .map(e -> toProjectWatchInfo(e.getKey(), e.getValue())) + .sorted( + comparing((ProjectWatchInfo pwi) -> pwi.project) + .thenComparing(pwi -> Strings.nullToEmpty(pwi.filter))) + .collect(toList())); } private static ProjectWatchInfo toProjectWatchInfo( diff --git a/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java b/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java index 14bd492d99..52361748d0 100644 --- a/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java +++ b/java/com/google/gerrit/server/restapi/account/PostWatchedProjects.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.account; import com.google.gerrit.extensions.client.ProjectWatchInfo; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.IdentifiedUser; @@ -64,7 +65,7 @@ public class PostWatchedProjects } @Override - public List apply(AccountResource rsrc, List input) + public Response> apply(AccountResource rsrc, List input) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.ADMINISTRATE_SERVER); diff --git a/java/com/google/gerrit/server/restapi/account/PutUsername.java b/java/com/google/gerrit/server/restapi/account/PutUsername.java index 76a641d0c7..a0fff022b1 100644 --- a/java/com/google/gerrit/server/restapi/account/PutUsername.java +++ b/java/com/google/gerrit/server/restapi/account/PutUsername.java @@ -23,6 +23,7 @@ import com.google.gerrit.extensions.client.AccountFieldName; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; @@ -71,7 +72,7 @@ public class PutUsername implements RestModifyView apply(AccountResource rsrc, UsernameInput input) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.ADMINISTRATE_SERVER); @@ -106,7 +107,7 @@ public class PutUsername implements RestModifyView other = externalIds.get(key); if (other.isPresent() && other.get().accountId().equals(accountId)) { - return input.username; + return Response.ok(input.username); } // Otherwise, someone else has this identity. @@ -114,6 +115,6 @@ public class PutUsername implements RestModifyView { } @Override - public List apply(TopLevelResource rsrc) + public Response> apply(TopLevelResource rsrc) throws RestApiException, PermissionBackendException { if (Strings.isNullOrEmpty(query)) { throw new BadRequestException("missing query field"); } if (suggest && (!suggestConfig || query.length() < suggestFrom)) { - return Collections.emptyList(); + return Response.ok(Collections.emptyList()); } Set fillOptions = EnumSet.of(FillOptions.ID); @@ -220,10 +221,10 @@ public class QueryAccounts implements RestReadView { if (!sorted.isEmpty() && result.more()) { sorted.get(sorted.size() - 1)._moreAccounts = true; } - return sorted; + return Response.ok(sorted); } catch (QueryParseException e) { if (suggest) { - return ImmutableList.of(); + return Response.ok(ImmutableList.of()); } throw new BadRequestException(e.getMessage()); } diff --git a/java/com/google/gerrit/server/restapi/account/SetDiffPreferences.java b/java/com/google/gerrit/server/restapi/account/SetDiffPreferences.java index ee72ab7f2a..1a63993193 100644 --- a/java/com/google/gerrit/server/restapi/account/SetDiffPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/SetDiffPreferences.java @@ -18,6 +18,7 @@ import com.google.gerrit.extensions.client.DiffPreferencesInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.Account; @@ -53,7 +54,7 @@ public class SetDiffPreferences implements RestModifyView apply(AccountResource rsrc, DiffPreferencesInfo input) throws RestApiException, ConfigInvalidException, RepositoryNotFoundException, IOException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { @@ -65,10 +66,11 @@ public class SetDiffPreferences implements RestModifyView u.setDiffPreferences(input)) - .map(AccountState::getDiffPreferences) - .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString()))); + return Response.ok( + accountsUpdateProvider + .get() + .update("Set Diff Preferences via API", id, u -> u.setDiffPreferences(input)) + .map(AccountState::getDiffPreferences) + .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString())))); } } diff --git a/java/com/google/gerrit/server/restapi/account/SetEditPreferences.java b/java/com/google/gerrit/server/restapi/account/SetEditPreferences.java index 27d32f2c34..c85adde3d4 100644 --- a/java/com/google/gerrit/server/restapi/account/SetEditPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/SetEditPreferences.java @@ -18,6 +18,7 @@ import com.google.gerrit.extensions.client.EditPreferencesInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.Account; @@ -54,7 +55,7 @@ public class SetEditPreferences implements RestModifyView apply(AccountResource rsrc, EditPreferencesInfo input) throws RestApiException, RepositoryNotFoundException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { @@ -66,10 +67,11 @@ public class SetEditPreferences implements RestModifyView u.setEditPreferences(input)) - .map(AccountState::getEditPreferences) - .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString()))); + return Response.ok( + accountsUpdateProvider + .get() + .update("Set Edit Preferences via API", id, u -> u.setEditPreferences(input)) + .map(AccountState::getEditPreferences) + .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString())))); } } diff --git a/java/com/google/gerrit/server/restapi/account/SetPreferences.java b/java/com/google/gerrit/server/restapi/account/SetPreferences.java index c6623dbf7b..7967f2d2fb 100644 --- a/java/com/google/gerrit/server/restapi/account/SetPreferences.java +++ b/java/com/google/gerrit/server/restapi/account/SetPreferences.java @@ -22,6 +22,7 @@ import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.Account; @@ -60,7 +61,7 @@ public class SetPreferences implements RestModifyView apply(AccountResource rsrc, GeneralPreferencesInfo input) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { permissionBackend.currentUser().check(GlobalPermission.MODIFY_ACCOUNT); @@ -70,11 +71,12 @@ public class SetPreferences implements RestModifyView u.setGeneralPreferences(input)) - .map(AccountState::getGeneralPreferences) - .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString()))); + return Response.ok( + accountsUpdateProvider + .get() + .update("Set General Preferences via API", id, u -> u.setGeneralPreferences(input)) + .map(AccountState::getGeneralPreferences) + .orElseThrow(() -> new ResourceNotFoundException(IdString.fromDecoded(id.toString())))); } private void checkDownloadScheme(String downloadScheme) throws BadRequestException { diff --git a/java/com/google/gerrit/server/restapi/account/Stars.java b/java/com/google/gerrit/server/restapi/account/Stars.java index c610adfd70..bbbfa27b8c 100644 --- a/java/com/google/gerrit/server/restapi/account/Stars.java +++ b/java/com/google/gerrit/server/restapi/account/Stars.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.RestReadView; @@ -97,14 +98,24 @@ public class Stars implements ChildCollection apply(AccountResource rsrc) + public Response> apply(AccountResource rsrc) throws BadRequestException, AuthException, PermissionBackendException { if (!self.get().hasSameAccountId(rsrc.getUser())) { throw new AuthException("not allowed to list stars of another account"); } + + // The type of the value in the response that is returned by QueryChanges depends on the + // number of queries that is provided as input. If a single query is provided as input the + // value type is {@code List}, if multiple queries are provided as input the value + // type is {@code List>) (one {@code List} as result to each + // query). Since in this case we provide exactly one query ("has:stars") as input we know that + // the value always has the type {@code List} and hence we can safely cast the + // value to this type. QueryChanges query = changes.list(); query.addQuery("has:stars"); - return (List) query.apply(TopLevelResource.INSTANCE); + Response response = query.apply(TopLevelResource.INSTANCE); + List value = (List) response.value(); + return Response.ok(value); } } @@ -120,11 +131,12 @@ public class Stars implements ChildCollection apply(AccountResource.Star rsrc) throws AuthException { + public Response> apply(AccountResource.Star rsrc) throws AuthException { if (!self.get().hasSameAccountId(rsrc.getUser())) { throw new AuthException("not allowed to get stars of another account"); } - return starredChangesUtil.getLabels(self.get().getAccountId(), rsrc.getChange().getId()); + return Response.ok( + starredChangesUtil.getLabels(self.get().getAccountId(), rsrc.getChange().getId())); } } @@ -140,18 +152,19 @@ public class Stars implements ChildCollection apply(AccountResource.Star rsrc, StarsInput in) + public Response> apply(AccountResource.Star rsrc, StarsInput in) throws AuthException, BadRequestException { if (!self.get().hasSameAccountId(rsrc.getUser())) { throw new AuthException("not allowed to update stars of another account"); } try { - return starredChangesUtil.star( - self.get().getAccountId(), - rsrc.getChange().getProject(), - rsrc.getChange().getId(), - in.add, - in.remove); + return Response.ok( + starredChangesUtil.star( + self.get().getAccountId(), + rsrc.getChange().getProject(), + rsrc.getChange().getId(), + in.add, + in.remove)); } catch (IllegalLabelException e) { throw new BadRequestException(e.getMessage()); } diff --git a/java/com/google/gerrit/server/restapi/change/Abandon.java b/java/com/google/gerrit/server/restapi/change/Abandon.java index c3327e4439..12d938806c 100644 --- a/java/com/google/gerrit/server/restapi/change/Abandon.java +++ b/java/com/google/gerrit/server/restapi/change/Abandon.java @@ -19,6 +19,7 @@ import com.google.gerrit.exceptions.StorageException; import com.google.gerrit.extensions.api.changes.AbandonInput; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.common.ChangeInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Change; @@ -67,7 +68,7 @@ public class Abandon extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, AbandonInput input) throws RestApiException, UpdateException, PermissionBackendException, IOException, ConfigInvalidException { @@ -84,7 +85,7 @@ public class Abandon extends RetryingRestModifyView apply(ChangeEditResource rsrc) { FileInfo r = new FileInfo(); ChangeEdit edit = rsrc.getChangeEdit(); Change change = edit.getChange(); @@ -392,7 +392,7 @@ public class ChangeEdits implements ChildCollection apply(ChangeResource rsrc, Input input) throws AuthException, IOException, BadRequestException, ResourceConflictException, PermissionBackendException { if (input == null || Strings.isNullOrEmpty(input.message)) { @@ -451,7 +451,7 @@ public class ChangeEdits implements ChildCollection apply(ChangeResource rsrc) throws AuthException, IOException, ResourceNotFoundException { Optional edit = editUtil.byChange(rsrc.getNotes(), rsrc.getUser()); String msg; @@ -466,9 +466,10 @@ public class ChangeEdits implements ChildCollection { } @Override - public IncludedInInfo apply(ChangeResource rsrc) throws RestApiException, IOException { + public Response apply(ChangeResource rsrc) throws RestApiException, IOException { PatchSet ps = psUtil.current(rsrc.getNotes()); - return includedIn.apply(rsrc.getProject(), ps.commitId().name()); + return Response.ok(includedIn.apply(rsrc.getProject(), ps.commitId().name())); } } diff --git a/java/com/google/gerrit/server/restapi/change/ChangeMessages.java b/java/com/google/gerrit/server/restapi/change/ChangeMessages.java index 96c517fe25..595d570940 100644 --- a/java/com/google/gerrit/server/restapi/change/ChangeMessages.java +++ b/java/com/google/gerrit/server/restapi/change/ChangeMessages.java @@ -54,7 +54,7 @@ public class ChangeMessages implements ChildCollection changeMessages = listChangeMessages.apply(parent); + List changeMessages = listChangeMessages.apply(parent).value(); int index = -1; for (int i = 0; i < changeMessages.size(); ++i) { ChangeMessageInfo changeMessage = changeMessages.get(i); diff --git a/java/com/google/gerrit/server/restapi/change/CherryPick.java b/java/com/google/gerrit/server/restapi/change/CherryPick.java index 3fd80df12e..bcbee4d87a 100644 --- a/java/com/google/gerrit/server/restapi/change/CherryPick.java +++ b/java/com/google/gerrit/server/restapi/change/CherryPick.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.api.changes.CherryPickInput; import com.google.gerrit.extensions.common.CherryPickChangeInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.BranchNameKey; @@ -75,7 +76,7 @@ public class CherryPick } @Override - public CherryPickChangeInfo applyImpl( + public Response applyImpl( BatchUpdate.Factory updateFactory, RevisionResource rsrc, CherryPickInput input) throws IOException, UpdateException, RestApiException, PermissionBackendException, ConfigInvalidException, NoSuchProjectException { @@ -109,7 +110,7 @@ public class CherryPick .format(rsrc.getProject(), cherryPickResult.changeId(), CherryPickChangeInfo::new); changeInfo.containsGitConflicts = !cherryPickResult.filesWithGitConflicts().isEmpty() ? true : null; - return changeInfo; + return Response.ok(changeInfo); } catch (InvalidChangeOperationException e) { throw new BadRequestException(e.getMessage()); } catch (IntegrationException | NoSuchChangeException e) { diff --git a/java/com/google/gerrit/server/restapi/change/CherryPickCommit.java b/java/com/google/gerrit/server/restapi/change/CherryPickCommit.java index ff5c37744d..25cd92433d 100644 --- a/java/com/google/gerrit/server/restapi/change/CherryPickCommit.java +++ b/java/com/google/gerrit/server/restapi/change/CherryPickCommit.java @@ -19,6 +19,7 @@ import com.google.gerrit.extensions.api.changes.CherryPickInput; import com.google.gerrit.extensions.common.CherryPickChangeInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.BranchNameKey; import com.google.gerrit.reviewdb.client.Project; @@ -70,7 +71,7 @@ public class CherryPickCommit } @Override - public CherryPickChangeInfo applyImpl( + public Response applyImpl( BatchUpdate.Factory updateFactory, CommitResource rsrc, CherryPickInput input) throws IOException, UpdateException, RestApiException, PermissionBackendException, ConfigInvalidException, NoSuchProjectException { @@ -108,7 +109,7 @@ public class CherryPickCommit .format(projectName, cherryPickResult.changeId(), CherryPickChangeInfo::new); changeInfo.containsGitConflicts = !cherryPickResult.filesWithGitConflicts().isEmpty() ? true : null; - return changeInfo; + return Response.ok(changeInfo); } catch (InvalidChangeOperationException e) { throw new BadRequestException(e.getMessage()); } catch (IntegrationException e) { diff --git a/java/com/google/gerrit/server/restapi/change/CreateChange.java b/java/com/google/gerrit/server/restapi/change/CreateChange.java index 9c952f7a60..4e8930638c 100644 --- a/java/com/google/gerrit/server/restapi/change/CreateChange.java +++ b/java/com/google/gerrit/server/restapi/change/CreateChange.java @@ -97,7 +97,7 @@ import org.eclipse.jgit.util.ChangeIdUtil; @Singleton public class CreateChange extends RetryingRestCollectionModifyView< - TopLevelResource, ChangeResource, ChangeInput, Response> { + TopLevelResource, ChangeResource, ChangeInput, ChangeInfo> { private final String anonymousCowardName; private final GitRepositoryManager gitManager; private final Sequences seq; diff --git a/java/com/google/gerrit/server/restapi/change/CreateDraftComment.java b/java/com/google/gerrit/server/restapi/change/CreateDraftComment.java index 4ee9ba52a4..65bda7d628 100644 --- a/java/com/google/gerrit/server/restapi/change/CreateDraftComment.java +++ b/java/com/google/gerrit/server/restapi/change/CreateDraftComment.java @@ -48,7 +48,7 @@ import java.util.Collections; @Singleton public class CreateDraftComment - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final Provider commentJson; private final CommentsUtil commentsUtil; private final PatchSetUtil psUtil; diff --git a/java/com/google/gerrit/server/restapi/change/CreateMergePatchSet.java b/java/com/google/gerrit/server/restapi/change/CreateMergePatchSet.java index 76fbab2feb..0539a4499e 100644 --- a/java/com/google/gerrit/server/restapi/change/CreateMergePatchSet.java +++ b/java/com/google/gerrit/server/restapi/change/CreateMergePatchSet.java @@ -76,7 +76,7 @@ import org.eclipse.jgit.util.ChangeIdUtil; @Singleton public class CreateMergePatchSet - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final GitRepositoryManager gitManager; private final CommitsCollection commits; private final TimeZone serverTimeZone; diff --git a/java/com/google/gerrit/server/restapi/change/DeleteAssignee.java b/java/com/google/gerrit/server/restapi/change/DeleteAssignee.java index 2bddb1f5c6..2a4f16be48 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteAssignee.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteAssignee.java @@ -42,8 +42,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton -public class DeleteAssignee - extends RetryingRestModifyView> { +public class DeleteAssignee extends RetryingRestModifyView { private final ChangeMessagesUtil cmUtil; private final AssigneeChanged assigneeChanged; diff --git a/java/com/google/gerrit/server/restapi/change/DeleteChange.java b/java/com/google/gerrit/server/restapi/change/DeleteChange.java index 3021d8142b..7e5881fb83 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteChange.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteChange.java @@ -36,7 +36,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton -public class DeleteChange extends RetryingRestModifyView> +public class DeleteChange extends RetryingRestModifyView implements UiAction { private final DeleteChangeOp.Factory opFactory; @@ -48,7 +48,7 @@ public class DeleteChange extends RetryingRestModifyView applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input) throws RestApiException, UpdateException, PermissionBackendException { if (!isChangeDeletable(rsrc)) { diff --git a/java/com/google/gerrit/server/restapi/change/DeleteChangeMessage.java b/java/com/google/gerrit/server/restapi/change/DeleteChangeMessage.java index 0fb8e18403..8931196008 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteChangeMessage.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteChangeMessage.java @@ -53,7 +53,7 @@ import java.util.List; @Singleton public class DeleteChangeMessage extends RetryingRestModifyView< - ChangeMessageResource, DeleteChangeMessageInput, Response> { + ChangeMessageResource, DeleteChangeMessageInput, ChangeMessageInfo> { private final Provider userProvider; private final PermissionBackend permissionBackend; @@ -146,7 +146,7 @@ public class DeleteChangeMessage @Singleton public static class DefaultDeleteChangeMessage - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final DeleteChangeMessage deleteChangeMessage; @Inject diff --git a/java/com/google/gerrit/server/restapi/change/DeleteComment.java b/java/com/google/gerrit/server/restapi/change/DeleteComment.java index 30a8efd713..fe793b507c 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteComment.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteComment.java @@ -19,6 +19,7 @@ import com.google.gerrit.extensions.api.changes.DeleteCommentInput; import com.google.gerrit.extensions.common.CommentInfo; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.Comment; import com.google.gerrit.reviewdb.client.PatchSet; @@ -71,7 +72,7 @@ public class DeleteComment } @Override - public CommentInfo applyImpl( + public Response applyImpl( BatchUpdate.Factory batchUpdateFactory, CommentResource rsrc, DeleteCommentInput input) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException, UpdateException { @@ -100,7 +101,7 @@ public class DeleteComment throw new ResourceNotFoundException("comment not found: " + rsrc.getComment().key); } - return commentJson.get().newCommentFormatter().format(updatedComment.get()); + return Response.ok(commentJson.get().newCommentFormatter().format(updatedComment.get())); } private static String getCommentNewMessage(String name, String reason) { diff --git a/java/com/google/gerrit/server/restapi/change/DeleteDraftComment.java b/java/com/google/gerrit/server/restapi/change/DeleteDraftComment.java index b186acfb29..a3228ce922 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteDraftComment.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteDraftComment.java @@ -42,7 +42,7 @@ import java.util.Optional; @Singleton public class DeleteDraftComment - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final CommentsUtil commentsUtil; private final PatchSetUtil psUtil; diff --git a/java/com/google/gerrit/server/restapi/change/DeletePrivate.java b/java/com/google/gerrit/server/restapi/change/DeletePrivate.java index 8601e683b4..de7a683ca2 100644 --- a/java/com/google/gerrit/server/restapi/change/DeletePrivate.java +++ b/java/com/google/gerrit/server/restapi/change/DeletePrivate.java @@ -36,7 +36,7 @@ import com.google.inject.Singleton; @Singleton public class DeletePrivate - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final PermissionBackend permissionBackend; private final SetPrivateOp.Factory setPrivateOpFactory; diff --git a/java/com/google/gerrit/server/restapi/change/DeleteReviewer.java b/java/com/google/gerrit/server/restapi/change/DeleteReviewer.java index 12dbcdd6d6..0a01bab9f0 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteReviewer.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteReviewer.java @@ -34,7 +34,7 @@ import com.google.inject.Singleton; @Singleton public class DeleteReviewer - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final DeleteReviewerOp.Factory deleteReviewerOpFactory; private final DeleteReviewerByEmailOp.Factory deleteReviewerByEmailOpFactory; @@ -50,7 +50,7 @@ public class DeleteReviewer } @Override - protected Response applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ReviewerResource rsrc, DeleteReviewerInput input) throws RestApiException, UpdateException { if (input == null) { diff --git a/java/com/google/gerrit/server/restapi/change/DeleteVote.java b/java/com/google/gerrit/server/restapi/change/DeleteVote.java index 442e99a420..a80863e698 100644 --- a/java/com/google/gerrit/server/restapi/change/DeleteVote.java +++ b/java/com/google/gerrit/server/restapi/change/DeleteVote.java @@ -64,7 +64,7 @@ import java.util.Map; import org.eclipse.jgit.errors.ConfigInvalidException; @Singleton -public class DeleteVote extends RetryingRestModifyView> { +public class DeleteVote extends RetryingRestModifyView { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private final ApprovalsUtil approvalsUtil; @@ -102,7 +102,7 @@ public class DeleteVote extends RetryingRestModifyView applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, VoteResource rsrc, DeleteVoteInput input) throws RestApiException, UpdateException, IOException, ConfigInvalidException { if (input == null) { diff --git a/java/com/google/gerrit/server/restapi/change/DownloadContent.java b/java/com/google/gerrit/server/restapi/change/DownloadContent.java index 60741e7e57..4a4a6808f4 100644 --- a/java/com/google/gerrit/server/restapi/change/DownloadContent.java +++ b/java/com/google/gerrit/server/restapi/change/DownloadContent.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.FileContentUtil; import com.google.gerrit.server.change.FileResource; @@ -40,11 +41,12 @@ public class DownloadContent implements RestReadView { } @Override - public BinaryResult apply(FileResource rsrc) + public Response apply(FileResource rsrc) throws ResourceNotFoundException, IOException, NoSuchChangeException { String path = rsrc.getPatchKey().fileName(); RevisionResource rev = rsrc.getRevision(); - return fileContentUtil.downloadContent( - projectCache.checkedGet(rev.getProject()), rev.getPatchSet().commitId(), path, parent); + return Response.ok( + fileContentUtil.downloadContent( + projectCache.checkedGet(rev.getProject()), rev.getPatchSet().commitId(), path, parent)); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetArchive.java b/java/com/google/gerrit/server/restapi/change/GetArchive.java index 2bf47e31fb..4ebcbdda2f 100644 --- a/java/com/google/gerrit/server/restapi/change/GetArchive.java +++ b/java/com/google/gerrit/server/restapi/change/GetArchive.java @@ -20,6 +20,7 @@ import com.google.common.base.Strings; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.ArchiveFormat; import com.google.gerrit.server.change.RevisionResource; @@ -48,7 +49,7 @@ public class GetArchive implements RestReadView { } @Override - public BinaryResult apply(RevisionResource rsrc) + public Response apply(RevisionResource rsrc) throws BadRequestException, IOException, MethodNotAllowedException { if (Strings.isNullOrEmpty(format)) { throw new BadRequestException("format is not specified"); @@ -94,7 +95,7 @@ public class GetArchive implements RestReadView { bin.disableGzip().setContentType(f.getMimeType()).setAttachmentName(name); close = false; - return bin; + return Response.ok(bin); } finally { if (close) { repo.close(); diff --git a/java/com/google/gerrit/server/restapi/change/GetChangeMessage.java b/java/com/google/gerrit/server/restapi/change/GetChangeMessage.java index f55785d161..9e0e0e3b7b 100644 --- a/java/com/google/gerrit/server/restapi/change/GetChangeMessage.java +++ b/java/com/google/gerrit/server/restapi/change/GetChangeMessage.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.ChangeMessageInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.ChangeMessageResource; import com.google.inject.Singleton; @@ -23,7 +24,7 @@ import com.google.inject.Singleton; @Singleton public class GetChangeMessage implements RestReadView { @Override - public ChangeMessageInfo apply(ChangeMessageResource resource) { - return resource.getChangeMessage(); + public Response apply(ChangeMessageResource resource) { + return Response.ok(resource.getChangeMessage()); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetComment.java b/java/com/google/gerrit/server/restapi/change/GetComment.java index 0109c9501f..5103325557 100644 --- a/java/com/google/gerrit/server/restapi/change/GetComment.java +++ b/java/com/google/gerrit/server/restapi/change/GetComment.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.CommentInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.CommentResource; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -33,7 +34,7 @@ public class GetComment implements RestReadView { } @Override - public CommentInfo apply(CommentResource rsrc) throws PermissionBackendException { - return commentJson.get().newCommentFormatter().format(rsrc.getComment()); + public Response apply(CommentResource rsrc) throws PermissionBackendException { + return Response.ok(commentJson.get().newCommentFormatter().format(rsrc.getComment())); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetContent.java b/java/com/google/gerrit/server/restapi/change/GetContent.java index 62889a3921..9048401526 100644 --- a/java/com/google/gerrit/server/restapi/change/GetContent.java +++ b/java/com/google/gerrit/server/restapi/change/GetContent.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.Patch; @@ -60,25 +61,28 @@ public class GetContent implements RestReadView { } @Override - public BinaryResult apply(FileResource rsrc) + public Response apply(FileResource rsrc) throws ResourceNotFoundException, IOException, BadRequestException { String path = rsrc.getPatchKey().fileName(); if (Patch.COMMIT_MSG.equals(path)) { String msg = getMessage(rsrc.getRevision().getChangeResource().getNotes()); - return BinaryResult.create(msg) - .setContentType(FileContentUtil.TEXT_X_GERRIT_COMMIT_MESSAGE) - .base64(); + return Response.ok( + BinaryResult.create(msg) + .setContentType(FileContentUtil.TEXT_X_GERRIT_COMMIT_MESSAGE) + .base64()); } else if (Patch.MERGE_LIST.equals(path)) { byte[] mergeList = getMergeList(rsrc.getRevision().getChangeResource().getNotes()); - return BinaryResult.create(mergeList) - .setContentType(FileContentUtil.TEXT_X_GERRIT_MERGE_LIST) - .base64(); + return Response.ok( + BinaryResult.create(mergeList) + .setContentType(FileContentUtil.TEXT_X_GERRIT_MERGE_LIST) + .base64()); } - return fileContentUtil.getContent( - projectCache.checkedGet(rsrc.getRevision().getProject()), - rsrc.getRevision().getPatchSet().commitId(), - path, - parent); + return Response.ok( + fileContentUtil.getContent( + projectCache.checkedGet(rsrc.getRevision().getProject()), + rsrc.getRevision().getPatchSet().commitId(), + path, + parent)); } private String getMessage(ChangeNotes notes) throws IOException { diff --git a/java/com/google/gerrit/server/restapi/change/GetDescription.java b/java/com/google/gerrit/server/restapi/change/GetDescription.java index c30bd0d970..6794d81e85 100644 --- a/java/com/google/gerrit/server/restapi/change/GetDescription.java +++ b/java/com/google/gerrit/server/restapi/change/GetDescription.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.change; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.RevisionResource; import com.google.inject.Singleton; @@ -21,7 +22,7 @@ import com.google.inject.Singleton; @Singleton public class GetDescription implements RestReadView { @Override - public String apply(RevisionResource rsrc) { - return rsrc.getPatchSet().description().orElse(""); + public Response apply(RevisionResource rsrc) { + return Response.ok(rsrc.getPatchSet().description().orElse("")); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetDraftComment.java b/java/com/google/gerrit/server/restapi/change/GetDraftComment.java index ca5b56f16d..797dc9edc5 100644 --- a/java/com/google/gerrit/server/restapi/change/GetDraftComment.java +++ b/java/com/google/gerrit/server/restapi/change/GetDraftComment.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.CommentInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.DraftCommentResource; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -33,7 +34,7 @@ public class GetDraftComment implements RestReadView { } @Override - public CommentInfo apply(DraftCommentResource rsrc) throws PermissionBackendException { - return commentJson.get().newCommentFormatter().format(rsrc.getComment()); + public Response apply(DraftCommentResource rsrc) throws PermissionBackendException { + return Response.ok(commentJson.get().newCommentFormatter().format(rsrc.getComment())); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetPatch.java b/java/com/google/gerrit/server/restapi/change/GetPatch.java index 186752e05f..ece8c68be6 100644 --- a/java/com/google/gerrit/server/restapi/change/GetPatch.java +++ b/java/com/google/gerrit/server/restapi/change/GetPatch.java @@ -20,6 +20,7 @@ import static java.nio.charset.StandardCharsets.UTF_8; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.RevisionResource; import com.google.gerrit.server.git.GitRepositoryManager; @@ -59,7 +60,7 @@ public class GetPatch implements RestReadView { } @Override - public BinaryResult apply(RevisionResource rsrc) + public Response apply(RevisionResource rsrc) throws ResourceConflictException, IOException, ResourceNotFoundException { final Repository repo = repoManager.openRepository(rsrc.getProject()); boolean close = true; @@ -130,7 +131,7 @@ public class GetPatch implements RestReadView { } close = false; - return bin; + return Response.ok(bin); } finally { if (close) { rw.close(); diff --git a/java/com/google/gerrit/server/restapi/change/GetPureRevert.java b/java/com/google/gerrit/server/restapi/change/GetPureRevert.java index fa5cc36f5e..765be5f51e 100644 --- a/java/com/google/gerrit/server/restapi/change/GetPureRevert.java +++ b/java/com/google/gerrit/server/restapi/change/GetPureRevert.java @@ -19,6 +19,7 @@ import com.google.gerrit.extensions.common.PureRevertInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.ChangeResource; import com.google.gerrit.server.change.PureRevert; @@ -46,9 +47,9 @@ public class GetPureRevert implements RestReadView { } @Override - public PureRevertInfo apply(ChangeResource rsrc) + public Response apply(ChangeResource rsrc) throws ResourceConflictException, IOException, BadRequestException, AuthException { boolean isPureRevert = pureRevert.get(rsrc.getNotes(), Optional.ofNullable(claimedOriginal)); - return new PureRevertInfo(isPureRevert); + return Response.ok(new PureRevertInfo(isPureRevert)); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetRelated.java b/java/com/google/gerrit/server/restapi/change/GetRelated.java index fab081b959..b678799b8b 100644 --- a/java/com/google/gerrit/server/restapi/change/GetRelated.java +++ b/java/com/google/gerrit/server/restapi/change/GetRelated.java @@ -22,6 +22,7 @@ import com.google.gerrit.common.Nullable; import com.google.gerrit.extensions.api.changes.RelatedChangeAndCommitInfo; import com.google.gerrit.extensions.api.changes.RelatedChangesInfo; import com.google.gerrit.extensions.common.CommitInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.index.IndexConfig; import com.google.gerrit.reviewdb.client.Change; @@ -68,12 +69,12 @@ public class GetRelated implements RestReadView { } @Override - public RelatedChangesInfo apply(RevisionResource rsrc) + public Response apply(RevisionResource rsrc) throws RepositoryNotFoundException, IOException, NoSuchProjectException, PermissionBackendException { RelatedChangesInfo relatedChangesInfo = new RelatedChangesInfo(); relatedChangesInfo.changes = getRelated(rsrc); - return relatedChangesInfo; + return Response.ok(relatedChangesInfo); } private List getRelated(RevisionResource rsrc) diff --git a/java/com/google/gerrit/server/restapi/change/GetReviewer.java b/java/com/google/gerrit/server/restapi/change/GetReviewer.java index 73760dab96..a672b176f8 100644 --- a/java/com/google/gerrit/server/restapi/change/GetReviewer.java +++ b/java/com/google/gerrit/server/restapi/change/GetReviewer.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.api.changes.ReviewerInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.ReviewerJson; import com.google.gerrit.server.change.ReviewerResource; @@ -33,7 +34,8 @@ public class GetReviewer implements RestReadView { } @Override - public List apply(ReviewerResource rsrc) throws PermissionBackendException { - return json.format(rsrc); + public Response> apply(ReviewerResource rsrc) + throws PermissionBackendException { + return Response.ok(json.format(rsrc)); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetRobotComment.java b/java/com/google/gerrit/server/restapi/change/GetRobotComment.java index 75d994d1ce..4ff9942e2f 100644 --- a/java/com/google/gerrit/server/restapi/change/GetRobotComment.java +++ b/java/com/google/gerrit/server/restapi/change/GetRobotComment.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.RobotCommentInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.RobotCommentResource; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -33,7 +34,8 @@ public class GetRobotComment implements RestReadView { } @Override - public RobotCommentInfo apply(RobotCommentResource rsrc) throws PermissionBackendException { - return commentJson.get().newRobotCommentFormatter().format(rsrc.getComment()); + public Response apply(RobotCommentResource rsrc) + throws PermissionBackendException { + return Response.ok(commentJson.get().newRobotCommentFormatter().format(rsrc.getComment())); } } diff --git a/java/com/google/gerrit/server/restapi/change/GetTopic.java b/java/com/google/gerrit/server/restapi/change/GetTopic.java index 7ab1cb1289..6951fa5e4c 100644 --- a/java/com/google/gerrit/server/restapi/change/GetTopic.java +++ b/java/com/google/gerrit/server/restapi/change/GetTopic.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.common.base.Strings; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.ChangeResource; import com.google.inject.Singleton; @@ -22,7 +23,7 @@ import com.google.inject.Singleton; @Singleton public class GetTopic implements RestReadView { @Override - public String apply(ChangeResource rsrc) { - return Strings.nullToEmpty(rsrc.getChange().getTopic()); + public Response apply(ChangeResource rsrc) { + return Response.ok(Strings.nullToEmpty(rsrc.getChange().getTopic())); } } diff --git a/java/com/google/gerrit/server/restapi/change/Index.java b/java/com/google/gerrit/server/restapi/change/Index.java index 90dad9800b..5a17c07d6f 100644 --- a/java/com/google/gerrit/server/restapi/change/Index.java +++ b/java/com/google/gerrit/server/restapi/change/Index.java @@ -30,7 +30,7 @@ import com.google.inject.Singleton; import java.io.IOException; @Singleton -public class Index extends RetryingRestModifyView> { +public class Index extends RetryingRestModifyView { private final PermissionBackend permissionBackend; private final ChangeIndexer indexer; @@ -42,7 +42,7 @@ public class Index extends RetryingRestModifyView applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input) throws IOException, AuthException, PermissionBackendException { permissionBackend.currentUser().check(GlobalPermission.MAINTAIN_SERVER); diff --git a/java/com/google/gerrit/server/restapi/change/ListChangeComments.java b/java/com/google/gerrit/server/restapi/change/ListChangeComments.java index 992f602851..26e02b17d8 100644 --- a/java/com/google/gerrit/server/restapi/change/ListChangeComments.java +++ b/java/com/google/gerrit/server/restapi/change/ListChangeComments.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.CommentInfo; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CommentsUtil; import com.google.gerrit.server.change.ChangeResource; @@ -44,14 +45,15 @@ public class ListChangeComments implements RestReadView { } @Override - public Map> apply(ChangeResource rsrc) + public Response>> apply(ChangeResource rsrc) throws AuthException, PermissionBackendException { ChangeData cd = changeDataFactory.create(rsrc.getNotes()); - return commentJson - .get() - .setFillAccounts(true) - .setFillPatchSet(true) - .newCommentFormatter() - .format(commentsUtil.publishedByChange(cd.notes())); + return Response.ok( + commentJson + .get() + .setFillAccounts(true) + .setFillPatchSet(true) + .newCommentFormatter() + .format(commentsUtil.publishedByChange(cd.notes()))); } } diff --git a/java/com/google/gerrit/server/restapi/change/ListChangeDrafts.java b/java/com/google/gerrit/server/restapi/change/ListChangeDrafts.java index 1939385c3a..f9e84dc44c 100644 --- a/java/com/google/gerrit/server/restapi/change/ListChangeDrafts.java +++ b/java/com/google/gerrit/server/restapi/change/ListChangeDrafts.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.CommentInfo; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Comment; import com.google.gerrit.server.CommentsUtil; @@ -45,7 +46,7 @@ public class ListChangeDrafts implements RestReadView { } @Override - public Map> apply(ChangeResource rsrc) + public Response>> apply(ChangeResource rsrc) throws AuthException, PermissionBackendException { if (!rsrc.getUser().isIdentifiedUser()) { throw new AuthException("Authentication required"); @@ -53,11 +54,12 @@ public class ListChangeDrafts implements RestReadView { ChangeData cd = changeDataFactory.create(rsrc.getNotes()); List drafts = commentsUtil.draftByChangeAuthor(cd.notes(), rsrc.getUser().getAccountId()); - return commentJson - .get() - .setFillAccounts(false) - .setFillPatchSet(true) - .newCommentFormatter() - .format(drafts); + return Response.ok( + commentJson + .get() + .setFillAccounts(false) + .setFillPatchSet(true) + .newCommentFormatter() + .format(drafts)); } } diff --git a/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java b/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java index a2e3d4b589..12afe4d0aa 100644 --- a/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java +++ b/java/com/google/gerrit/server/restapi/change/ListChangeMessages.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.change; import static com.google.gerrit.server.ChangeMessagesUtil.createChangeMessageInfo; import com.google.gerrit.extensions.common.ChangeMessageInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.ChangeMessage; import com.google.gerrit.server.ChangeMessagesUtil; @@ -41,13 +42,14 @@ public class ListChangeMessages implements RestReadView { } @Override - public List apply(ChangeResource resource) throws PermissionBackendException { + public Response> apply(ChangeResource resource) + throws PermissionBackendException { List messages = changeMessagesUtil.byChange(resource.getNotes()); List messageInfos = messages.stream() .map(m -> createChangeMessageInfo(m, accountLoader)) .collect(Collectors.toList()); accountLoader.fill(); - return messageInfos; + return Response.ok(messageInfos); } } diff --git a/java/com/google/gerrit/server/restapi/change/ListChangeRobotComments.java b/java/com/google/gerrit/server/restapi/change/ListChangeRobotComments.java index e5840fdfad..719a4779db 100644 --- a/java/com/google/gerrit/server/restapi/change/ListChangeRobotComments.java +++ b/java/com/google/gerrit/server/restapi/change/ListChangeRobotComments.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.common.RobotCommentInfo; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CommentsUtil; import com.google.gerrit.server.change.ChangeResource; @@ -42,14 +43,15 @@ public class ListChangeRobotComments implements RestReadView { } @Override - public Map> apply(ChangeResource rsrc) + public Response>> apply(ChangeResource rsrc) throws AuthException, PermissionBackendException { ChangeData cd = changeDataFactory.create(rsrc.getNotes()); - return commentJson - .get() - .setFillAccounts(true) - .setFillPatchSet(true) - .newRobotCommentFormatter() - .format(commentsUtil.robotCommentsByChange(cd.notes())); + return Response.ok( + commentJson + .get() + .setFillAccounts(true) + .setFillPatchSet(true) + .newRobotCommentFormatter() + .format(commentsUtil.robotCommentsByChange(cd.notes()))); } } diff --git a/java/com/google/gerrit/server/restapi/change/ListReviewers.java b/java/com/google/gerrit/server/restapi/change/ListReviewers.java index 12732ffed9..0297589372 100644 --- a/java/com/google/gerrit/server/restapi/change/ListReviewers.java +++ b/java/com/google/gerrit/server/restapi/change/ListReviewers.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.api.changes.ReviewerInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.mail.Address; import com.google.gerrit.reviewdb.client.Account; @@ -44,7 +45,7 @@ public class ListReviewers implements RestReadView { } @Override - public List apply(ChangeResource rsrc) throws PermissionBackendException { + public Response> apply(ChangeResource rsrc) throws PermissionBackendException { Map reviewers = new LinkedHashMap<>(); for (Account.Id accountId : approvalsUtil.getReviewers(rsrc.getNotes()).all()) { if (!reviewers.containsKey(accountId.toString())) { @@ -56,6 +57,6 @@ public class ListReviewers implements RestReadView { reviewers.put(adr.toString(), new ReviewerResource(rsrc, adr)); } } - return json.format(reviewers.values()); + return Response.ok(json.format(reviewers.values())); } } diff --git a/java/com/google/gerrit/server/restapi/change/ListRevisionDrafts.java b/java/com/google/gerrit/server/restapi/change/ListRevisionDrafts.java index 73b92f59b8..f4f4abb1bd 100644 --- a/java/com/google/gerrit/server/restapi/change/ListRevisionDrafts.java +++ b/java/com/google/gerrit/server/restapi/change/ListRevisionDrafts.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.common.collect.ImmutableList; import com.google.gerrit.extensions.common.CommentInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Comment; import com.google.gerrit.server.CommentsUtil; @@ -48,13 +49,14 @@ public class ListRevisionDrafts implements RestReadView { } @Override - public Map> apply(RevisionResource rsrc) + public Response>> apply(RevisionResource rsrc) throws PermissionBackendException { - return commentJson - .get() - .setFillAccounts(includeAuthorInfo()) - .newCommentFormatter() - .format(listComments(rsrc)); + return Response.ok( + commentJson + .get() + .setFillAccounts(includeAuthorInfo()) + .newCommentFormatter() + .format(listComments(rsrc))); } public ImmutableList getComments(RevisionResource rsrc) diff --git a/java/com/google/gerrit/server/restapi/change/ListRevisionReviewers.java b/java/com/google/gerrit/server/restapi/change/ListRevisionReviewers.java index 920cde9ea1..a3b196f1ee 100644 --- a/java/com/google/gerrit/server/restapi/change/ListRevisionReviewers.java +++ b/java/com/google/gerrit/server/restapi/change/ListRevisionReviewers.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.gerrit.extensions.api.changes.ReviewerInfo; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.mail.Address; import com.google.gerrit.reviewdb.client.Account; @@ -45,7 +46,7 @@ class ListRevisionReviewers implements RestReadView { } @Override - public List apply(RevisionResource rsrc) + public Response> apply(RevisionResource rsrc) throws MethodNotAllowedException, PermissionBackendException { if (!rsrc.isCurrent()) { throw new MethodNotAllowedException("Cannot list reviewers on non-current patch set"); @@ -62,6 +63,6 @@ class ListRevisionReviewers implements RestReadView { reviewers.put(address.toString(), new ReviewerResource(rsrc, address)); } } - return json.format(reviewers.values()); + return Response.ok(json.format(reviewers.values())); } } diff --git a/java/com/google/gerrit/server/restapi/change/ListRobotComments.java b/java/com/google/gerrit/server/restapi/change/ListRobotComments.java index d617a100b3..4d56770d90 100644 --- a/java/com/google/gerrit/server/restapi/change/ListRobotComments.java +++ b/java/com/google/gerrit/server/restapi/change/ListRobotComments.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.change; import com.google.common.collect.ImmutableList; import com.google.gerrit.extensions.common.RobotCommentInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.RobotComment; import com.google.gerrit.server.CommentsUtil; @@ -39,13 +40,14 @@ public class ListRobotComments implements RestReadView { } @Override - public Map> apply(RevisionResource rsrc) + public Response>> apply(RevisionResource rsrc) throws PermissionBackendException { - return commentJson - .get() - .setFillAccounts(true) - .newRobotCommentFormatter() - .format(listComments(rsrc)); + return Response.ok( + commentJson + .get() + .setFillAccounts(true) + .newRobotCommentFormatter() + .format(listComments(rsrc))); } public ImmutableList getComments(RevisionResource rsrc) diff --git a/java/com/google/gerrit/server/restapi/change/Mergeable.java b/java/com/google/gerrit/server/restapi/change/Mergeable.java index f20e03d2af..f7e1108eea 100644 --- a/java/com/google/gerrit/server/restapi/change/Mergeable.java +++ b/java/com/google/gerrit/server/restapi/change/Mergeable.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.common.MergeableInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.reviewdb.client.PatchSet; @@ -86,7 +87,7 @@ public class Mergeable implements RestReadView { } @Override - public MergeableInfo apply(RevisionResource resource) + public Response apply(RevisionResource resource) throws AuthException, ResourceConflictException, BadRequestException, IOException { Change change = resource.getChange(); PatchSet ps = resource.getPatchSet(); @@ -96,7 +97,7 @@ public class Mergeable implements RestReadView { throw new ResourceConflictException("change is " + ChangeUtil.status(change)); } else if (!ps.id().equals(change.currentPatchSetId())) { // Only the current revision is mergeable. Others always fail. - return result; + return Response.ok(result); } ChangeData cd = changeDataFactory.create(resource.getNotes()); @@ -129,7 +130,7 @@ public class Mergeable implements RestReadView { } } } - return result; + return Response.ok(result); } private SubmitType getSubmitType(ChangeData cd) { diff --git a/java/com/google/gerrit/server/restapi/change/Move.java b/java/com/google/gerrit/server/restapi/change/Move.java index b5c774c25e..2ba1de08ee 100644 --- a/java/com/google/gerrit/server/restapi/change/Move.java +++ b/java/com/google/gerrit/server/restapi/change/Move.java @@ -30,6 +30,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.BranchNameKey; @@ -114,7 +115,7 @@ public class Move extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, MoveInput input) throws RestApiException, UpdateException, PermissionBackendException, IOException { if (!moveEnabled) { @@ -157,7 +158,7 @@ public class Move extends RetryingRestModifyView>> + extends RetryingRestModifyView> implements UiAction { private final SetHashtagsOp.Factory hashtagsFactory; diff --git a/java/com/google/gerrit/server/restapi/change/PostPrivate.java b/java/com/google/gerrit/server/restapi/change/PostPrivate.java index 5aa2ecc07d..37a288d5f4 100644 --- a/java/com/google/gerrit/server/restapi/change/PostPrivate.java +++ b/java/com/google/gerrit/server/restapi/change/PostPrivate.java @@ -39,8 +39,7 @@ import com.google.inject.Singleton; import org.eclipse.jgit.lib.Config; @Singleton -public class PostPrivate - extends RetryingRestModifyView> +public class PostPrivate extends RetryingRestModifyView implements UiAction { private final PermissionBackend permissionBackend; private final SetPrivateOp.Factory setPrivateOpFactory; diff --git a/java/com/google/gerrit/server/restapi/change/PostReview.java b/java/com/google/gerrit/server/restapi/change/PostReview.java index 86d8ed69b8..910bc0ceda 100644 --- a/java/com/google/gerrit/server/restapi/change/PostReview.java +++ b/java/com/google/gerrit/server/restapi/change/PostReview.java @@ -152,7 +152,7 @@ import org.eclipse.jgit.lib.ObjectId; @Singleton public class PostReview - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private static final FluentLogger logger = FluentLogger.forEnclosingClass(); private static final String ERROR_ADDING_REVIEWER = "error adding reviewer"; diff --git a/java/com/google/gerrit/server/restapi/change/PostReviewers.java b/java/com/google/gerrit/server/restapi/change/PostReviewers.java index 8abd96402f..9f506fb040 100644 --- a/java/com/google/gerrit/server/restapi/change/PostReviewers.java +++ b/java/com/google/gerrit/server/restapi/change/PostReviewers.java @@ -18,6 +18,7 @@ import com.google.gerrit.extensions.api.changes.AddReviewerInput; import com.google.gerrit.extensions.api.changes.AddReviewerResult; import com.google.gerrit.extensions.api.changes.NotifyHandling; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.change.ChangeResource; @@ -59,7 +60,7 @@ public class PostReviewers } @Override - protected AddReviewerResult applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, AddReviewerInput input) throws IOException, RestApiException, UpdateException, PermissionBackendException, ConfigInvalidException { @@ -69,7 +70,7 @@ public class PostReviewers ReviewerAddition addition = reviewerAdder.prepare(rsrc.getNotes(), rsrc.getUser(), input, true); if (addition.op == null) { - return addition.result; + return Response.ok(addition.result); } try (BatchUpdate bu = updateFactory.create(rsrc.getProject(), rsrc.getUser(), TimeUtil.nowTs())) { @@ -81,7 +82,7 @@ public class PostReviewers // Re-read change to take into account results of the update. addition.gatherResults(changeDataFactory.create(rsrc.getProject(), rsrc.getId())); - return addition.result; + return Response.ok(addition.result); } private NotifyResolver.Result resolveNotify(ChangeResource rsrc, AddReviewerInput input) diff --git a/java/com/google/gerrit/server/restapi/change/PreviewSubmit.java b/java/com/google/gerrit/server/restapi/change/PreviewSubmit.java index 7137b6e204..cbea2a5fd4 100644 --- a/java/com/google/gerrit/server/restapi/change/PreviewSubmit.java +++ b/java/com/google/gerrit/server/restapi/change/PreviewSubmit.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.NotImplementedException; import com.google.gerrit.extensions.restapi.PreconditionFailedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Change; @@ -80,7 +81,7 @@ public class PreviewSubmit implements RestReadView { } @Override - public BinaryResult apply(RevisionResource rsrc) + public Response apply(RevisionResource rsrc) throws RestApiException, UpdateException, IOException, ConfigInvalidException, PermissionBackendException { if (Strings.isNullOrEmpty(format)) { @@ -105,7 +106,7 @@ public class PreviewSubmit implements RestReadView { throw new MethodNotAllowedException("Anonymous users cannot submit"); } - return getBundles(rsrc, f); + return Response.ok(getBundles(rsrc, f)); } private BinaryResult getBundles(RevisionResource rsrc, ArchiveFormat f) diff --git a/java/com/google/gerrit/server/restapi/change/PublishChangeEdit.java b/java/com/google/gerrit/server/restapi/change/PublishChangeEdit.java index a47037ca78..44f35a0722 100644 --- a/java/com/google/gerrit/server/restapi/change/PublishChangeEdit.java +++ b/java/com/google/gerrit/server/restapi/change/PublishChangeEdit.java @@ -39,7 +39,7 @@ import org.eclipse.jgit.errors.ConfigInvalidException; @Singleton public class PublishChangeEdit - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final ChangeEditUtil editUtil; private final NotifyResolver notifyResolver; private final ContributorAgreementsChecker contributorAgreementsChecker; @@ -57,7 +57,7 @@ public class PublishChangeEdit } @Override - protected Response applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, PublishChangeEditInput in) throws IOException, RestApiException, UpdateException, ConfigInvalidException, NoSuchProjectException { diff --git a/java/com/google/gerrit/server/restapi/change/PutAssignee.java b/java/com/google/gerrit/server/restapi/change/PutAssignee.java index de627251a0..21e2e4fcaa 100644 --- a/java/com/google/gerrit/server/restapi/change/PutAssignee.java +++ b/java/com/google/gerrit/server/restapi/change/PutAssignee.java @@ -22,6 +22,7 @@ import com.google.gerrit.extensions.client.ReviewerState; import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.server.IdentifiedUser; @@ -71,7 +72,7 @@ public class PutAssignee extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, AssigneeInput input) throws RestApiException, UpdateException, IOException, PermissionBackendException, ConfigInvalidException { @@ -102,7 +103,7 @@ public class PutAssignee extends RetryingRestModifyView> + extends RetryingRestModifyView implements UiAction { private final ChangeMessagesUtil cmUtil; private final PatchSetUtil psUtil; diff --git a/java/com/google/gerrit/server/restapi/change/PutDraftComment.java b/java/com/google/gerrit/server/restapi/change/PutDraftComment.java index 241e7e10e9..4b5386e637 100644 --- a/java/com/google/gerrit/server/restapi/change/PutDraftComment.java +++ b/java/com/google/gerrit/server/restapi/change/PutDraftComment.java @@ -49,7 +49,7 @@ import java.util.Optional; @Singleton public class PutDraftComment - extends RetryingRestModifyView> { + extends RetryingRestModifyView { private final DeleteDraftComment delete; private final CommentsUtil commentsUtil; diff --git a/java/com/google/gerrit/server/restapi/change/PutMessage.java b/java/com/google/gerrit/server/restapi/change/PutMessage.java index f05641fed9..36a073fc72 100644 --- a/java/com/google/gerrit/server/restapi/change/PutMessage.java +++ b/java/com/google/gerrit/server/restapi/change/PutMessage.java @@ -61,8 +61,7 @@ import org.eclipse.jgit.revwalk.RevCommit; import org.eclipse.jgit.revwalk.RevWalk; @Singleton -public class PutMessage - extends RetryingRestModifyView> { +public class PutMessage extends RetryingRestModifyView { private final GitRepositoryManager repositoryManager; private final Provider userProvider; diff --git a/java/com/google/gerrit/server/restapi/change/PutTopic.java b/java/com/google/gerrit/server/restapi/change/PutTopic.java index abfa49ba92..cfc4f9e8d4 100644 --- a/java/com/google/gerrit/server/restapi/change/PutTopic.java +++ b/java/com/google/gerrit/server/restapi/change/PutTopic.java @@ -41,7 +41,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton -public class PutTopic extends RetryingRestModifyView> +public class PutTopic extends RetryingRestModifyView implements UiAction { private final ChangeMessagesUtil cmUtil; private final TopicEdited topicEdited; diff --git a/java/com/google/gerrit/server/restapi/change/QueryChanges.java b/java/com/google/gerrit/server/restapi/change/QueryChanges.java index 5ee49ff942..50e1e426af 100644 --- a/java/com/google/gerrit/server/restapi/change/QueryChanges.java +++ b/java/com/google/gerrit/server/restapi/change/QueryChanges.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.client.ListOption; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.index.query.QueryParseException; @@ -113,7 +114,7 @@ public class QueryChanges implements RestReadView, DynamicOpti } @Override - public List apply(TopLevelResource rsrc) + public Response> apply(TopLevelResource rsrc) throws BadRequestException, AuthException, PermissionBackendException { List> out; try { @@ -124,7 +125,7 @@ public class QueryChanges implements RestReadView, DynamicOpti logger.atFine().withCause(e).log("Reject change query with 400 Bad Request: %s", queries); throw new BadRequestException(e.getMessage(), e); } - return out.size() == 1 ? out.get(0) : out; + return Response.ok(out.size() == 1 ? out.get(0) : out); } private List> query() throws QueryParseException, PermissionBackendException { diff --git a/java/com/google/gerrit/server/restapi/change/Rebase.java b/java/com/google/gerrit/server/restapi/change/Rebase.java index dbe9effdd6..35152e582e 100644 --- a/java/com/google/gerrit/server/restapi/change/Rebase.java +++ b/java/com/google/gerrit/server/restapi/change/Rebase.java @@ -23,6 +23,7 @@ import com.google.gerrit.extensions.client.ListChangesOption; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.webui.UiAction; @@ -97,7 +98,7 @@ public class Rebase extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, RevisionResource rsrc, RebaseInput input) throws UpdateException, RestApiException, IOException, PermissionBackendException { // Not allowed to rebase if the current patch set is locked. @@ -130,7 +131,7 @@ public class Rebase extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, RebaseInput input) throws UpdateException, RestApiException, IOException, PermissionBackendException { PatchSet ps = psUtil.current(rsrc.getNotes()); if (ps == null) { throw new ResourceConflictException("current revision is missing"); } - return rebase.applyImpl(updateFactory, new RevisionResource(rsrc, ps), input); + return Response.ok( + rebase.applyImpl(updateFactory, new RevisionResource(rsrc, ps), input).value()); } } } diff --git a/java/com/google/gerrit/server/restapi/change/RebaseChangeEdit.java b/java/com/google/gerrit/server/restapi/change/RebaseChangeEdit.java index 81294edf5c..8e0ff4b072 100644 --- a/java/com/google/gerrit/server/restapi/change/RebaseChangeEdit.java +++ b/java/com/google/gerrit/server/restapi/change/RebaseChangeEdit.java @@ -33,7 +33,7 @@ import java.io.IOException; import org.eclipse.jgit.lib.Repository; @Singleton -public class RebaseChangeEdit extends RetryingRestModifyView> { +public class RebaseChangeEdit extends RetryingRestModifyView { private final GitRepositoryManager repositoryManager; private final ChangeEditModifier editModifier; @@ -48,7 +48,8 @@ public class RebaseChangeEdit extends RetryingRestModifyView applyImpl(BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input in) + protected Response applyImpl( + BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input in) throws AuthException, ResourceConflictException, IOException, PermissionBackendException { Project.NameKey project = rsrc.getProject(); try (Repository repository = repositoryManager.openRepository(project)) { diff --git a/java/com/google/gerrit/server/restapi/change/Restore.java b/java/com/google/gerrit/server/restapi/change/Restore.java index 5f56cdb1d4..13cb322a8b 100644 --- a/java/com/google/gerrit/server/restapi/change/Restore.java +++ b/java/com/google/gerrit/server/restapi/change/Restore.java @@ -20,6 +20,7 @@ import com.google.gerrit.exceptions.StorageException; import com.google.gerrit.extensions.api.changes.RestoreInput; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.webui.UiAction; import com.google.gerrit.reviewdb.client.Change; @@ -81,7 +82,7 @@ public class Restore extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, RestoreInput input) throws RestApiException, UpdateException, PermissionBackendException, IOException { // Not allowed to restore if the current patch set is locked. @@ -95,7 +96,7 @@ public class Restore extends RetryingRestModifyView applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, RevertInput input) throws IOException, RestApiException, UpdateException, NoSuchChangeException, PermissionBackendException, NoSuchProjectException, ConfigInvalidException { @@ -153,7 +154,7 @@ public class Revert extends RetryingRestModifyView> +public class SetReadyForReview extends RetryingRestModifyView implements UiAction { private final WorkInProgressOp.Factory opFactory; @@ -50,7 +50,7 @@ public class SetReadyForReview extends RetryingRestModifyView applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input) throws RestApiException, UpdateException, PermissionBackendException { rsrc.permissions().check(ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE); diff --git a/java/com/google/gerrit/server/restapi/change/SetWorkInProgress.java b/java/com/google/gerrit/server/restapi/change/SetWorkInProgress.java index 852813e96d..865ca646ba 100644 --- a/java/com/google/gerrit/server/restapi/change/SetWorkInProgress.java +++ b/java/com/google/gerrit/server/restapi/change/SetWorkInProgress.java @@ -39,7 +39,7 @@ import com.google.inject.Inject; import com.google.inject.Singleton; @Singleton -public class SetWorkInProgress extends RetryingRestModifyView> +public class SetWorkInProgress extends RetryingRestModifyView implements UiAction { private final WorkInProgressOp.Factory opFactory; @@ -50,7 +50,7 @@ public class SetWorkInProgress extends RetryingRestModifyView applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ChangeResource rsrc, Input input) throws RestApiException, UpdateException, PermissionBackendException { rsrc.permissions().check(ChangePermission.TOGGLE_WORK_IN_PROGRESS_STATE); diff --git a/java/com/google/gerrit/server/restapi/change/Submit.java b/java/com/google/gerrit/server/restapi/change/Submit.java index a9eb787e59..8df290eb82 100644 --- a/java/com/google/gerrit/server/restapi/change/Submit.java +++ b/java/com/google/gerrit/server/restapi/change/Submit.java @@ -29,6 +29,7 @@ import com.google.gerrit.extensions.api.changes.SubmitInput; import com.google.gerrit.extensions.common.ChangeInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; @@ -173,7 +174,7 @@ public class Submit } @Override - public Output apply(RevisionResource rsrc, SubmitInput input) + public Response apply(RevisionResource rsrc, SubmitInput input) throws RestApiException, RepositoryNotFoundException, IOException, PermissionBackendException, UpdateException, ConfigInvalidException { input.onBehalfOf = Strings.emptyToNull(input.onBehalfOf); @@ -186,7 +187,7 @@ public class Submit } projectCache.checkedGet(rsrc.getProject()).checkStatePermitsWrite(); - return new Output(mergeChange(rsrc, submitter, input)); + return Response.ok(new Output(mergeChange(rsrc, submitter, input))); } public Change mergeChange(RevisionResource rsrc, IdentifiedUser submitter, SubmitInput input) @@ -463,7 +464,7 @@ public class Submit } @Override - public ChangeInfo apply(ChangeResource rsrc, SubmitInput input) + public Response apply(ChangeResource rsrc, SubmitInput input) throws RestApiException, RepositoryNotFoundException, IOException, PermissionBackendException, UpdateException, ConfigInvalidException { PatchSet ps = psUtil.current(rsrc.getNotes()); @@ -471,8 +472,8 @@ public class Submit throw new ResourceConflictException("current revision is missing"); } - Output out = submit.apply(new RevisionResource(rsrc, ps), input); - return json.noOptions().format(out.change); + Output out = submit.apply(new RevisionResource(rsrc, ps), input).value(); + return Response.ok(json.noOptions().format(out.change)); } } } diff --git a/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java b/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java index abbd5804a8..a9ec256971 100644 --- a/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java +++ b/java/com/google/gerrit/server/restapi/change/SubmittedTogether.java @@ -26,6 +26,7 @@ import com.google.gerrit.extensions.client.ListChangesOption; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Change; import com.google.gerrit.server.change.ChangeJson; @@ -107,14 +108,14 @@ public class SubmittedTogether implements RestReadView { } @Override - public Object apply(ChangeResource resource) + public Response apply(ChangeResource resource) throws AuthException, BadRequestException, ResourceConflictException, IOException, PermissionBackendException { SubmittedTogetherInfo info = applyInfo(resource); if (options.isEmpty()) { - return info.changes; + return Response.ok(info.changes); } - return info; + return Response.ok(info); } public SubmittedTogetherInfo applyInfo(ChangeResource resource) diff --git a/java/com/google/gerrit/server/restapi/change/SuggestChangeReviewers.java b/java/com/google/gerrit/server/restapi/change/SuggestChangeReviewers.java index f5a27516bc..213bae9c57 100644 --- a/java/com/google/gerrit/server/restapi/change/SuggestChangeReviewers.java +++ b/java/com/google/gerrit/server/restapi/change/SuggestChangeReviewers.java @@ -18,6 +18,7 @@ import com.google.gerrit.extensions.common.AccountVisibility; import com.google.gerrit.extensions.common.SuggestedReviewerInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CurrentUser; import com.google.gerrit.server.change.ChangeResource; @@ -63,18 +64,19 @@ public class SuggestChangeReviewers extends SuggestReviewers } @Override - public List apply(ChangeResource rsrc) + public Response> apply(ChangeResource rsrc) throws AuthException, BadRequestException, IOException, ConfigInvalidException, PermissionBackendException { if (!self.get().isIdentifiedUser()) { throw new AuthException("Authentication required"); } - return reviewersUtil.suggestReviewers( - rsrc.getNotes(), - this, - projectCache.checkedGet(rsrc.getProject()), - getVisibility(rsrc), - excludeGroups); + return Response.ok( + reviewersUtil.suggestReviewers( + rsrc.getNotes(), + this, + projectCache.checkedGet(rsrc.getProject()), + getVisibility(rsrc), + excludeGroups)); } private VisibilityControl getVisibility(ChangeResource rsrc) { diff --git a/java/com/google/gerrit/server/restapi/change/TestSubmitRule.java b/java/com/google/gerrit/server/restapi/change/TestSubmitRule.java index 4904da7b9a..afd02a93df 100644 --- a/java/com/google/gerrit/server/restapi/change/TestSubmitRule.java +++ b/java/com/google/gerrit/server/restapi/change/TestSubmitRule.java @@ -24,6 +24,7 @@ import com.google.gerrit.extensions.common.TestSubmitRuleInput; import com.google.gerrit.extensions.common.TestSubmitRuleInput.Filters; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.account.AccountLoader; import com.google.gerrit.server.change.RevisionResource; @@ -68,7 +69,7 @@ public class TestSubmitRule implements RestModifyView apply(RevisionResource rsrc, TestSubmitRuleInput input) + public Response> apply(RevisionResource rsrc, TestSubmitRuleInput input) throws AuthException, PermissionBackendException, BadRequestException { if (input == null) { input = new TestSubmitRuleInput(); @@ -106,7 +107,7 @@ public class TestSubmitRule implements RestModifyView apply(RevisionResource rsrc, TestSubmitRuleInput input) throws AuthException, BadRequestException { if (input == null) { input = new TestSubmitRuleInput(); @@ -75,7 +76,7 @@ public class TestSubmitType implements RestModifyView { @@ -87,7 +88,8 @@ public class TestSubmitType implements RestModifyView apply(RevisionResource resource) + throws AuthException, BadRequestException { return test.apply(resource, null); } } diff --git a/java/com/google/gerrit/server/restapi/change/Votes.java b/java/com/google/gerrit/server/restapi/change/Votes.java index 8f48aa5be9..1cf51ab23b 100644 --- a/java/com/google/gerrit/server/restapi/change/Votes.java +++ b/java/com/google/gerrit/server/restapi/change/Votes.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.reviewdb.client.PatchSetApproval; @@ -71,7 +72,8 @@ public class Votes implements ChildCollection { } @Override - public Map apply(ReviewerResource rsrc) throws MethodNotAllowedException { + public Response> apply(ReviewerResource rsrc) + throws MethodNotAllowedException { if (rsrc.getRevisionResource() != null && !rsrc.getRevisionResource().isCurrent()) { throw new MethodNotAllowedException("Cannot list votes on non-current patch set"); } @@ -87,7 +89,7 @@ public class Votes implements ChildCollection { for (PatchSetApproval psa : byPatchSetUser) { votes.put(psa.label(), psa.value()); } - return votes; + return Response.ok(votes); } } } diff --git a/java/com/google/gerrit/server/restapi/config/CheckConsistency.java b/java/com/google/gerrit/server/restapi/config/CheckConsistency.java index 61d5c796b2..50e774aeb1 100644 --- a/java/com/google/gerrit/server/restapi/config/CheckConsistency.java +++ b/java/com/google/gerrit/server/restapi/config/CheckConsistency.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.api.config.ConsistencyCheckInfo.CheckAccount import com.google.gerrit.extensions.api.config.ConsistencyCheckInfo.CheckGroupsResultInfo; import com.google.gerrit.extensions.api.config.ConsistencyCheckInput; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.account.AccountsConsistencyChecker; @@ -54,7 +55,7 @@ public class CheckConsistency implements RestModifyView apply(ConfigResource resource, ConsistencyCheckInput input) throws RestApiException, IOException, PermissionBackendException, ConfigInvalidException { permissionBackend.currentUser().check(GlobalPermission.ACCESS_DATABASE); @@ -80,6 +81,6 @@ public class CheckConsistency implements RestModifyView { @Override - public ListCaches.CacheInfo apply(CacheResource rsrc) { - return new ListCaches.CacheInfo(rsrc.getName(), rsrc.getCache()); + public Response apply(CacheResource rsrc) { + return Response.ok(new ListCaches.CacheInfo(rsrc.getName(), rsrc.getCache())); } } diff --git a/java/com/google/gerrit/server/restapi/config/GetDiffPreferences.java b/java/com/google/gerrit/server/restapi/config/GetDiffPreferences.java index 13c28189ed..5cf93d8c0e 100644 --- a/java/com/google/gerrit/server/restapi/config/GetDiffPreferences.java +++ b/java/com/google/gerrit/server/restapi/config/GetDiffPreferences.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.config; import com.google.gerrit.extensions.client.DiffPreferencesInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.Preferences; import com.google.gerrit.server.config.AllUsersName; @@ -41,10 +42,10 @@ public class GetDiffPreferences implements RestReadView { } @Override - public DiffPreferencesInfo apply(ConfigResource configResource) + public Response apply(ConfigResource configResource) throws BadRequestException, ResourceConflictException, IOException, ConfigInvalidException { try (Repository git = gitManager.openRepository(allUsersName)) { - return Preferences.readDefaultDiffPreferences(allUsersName, git); + return Response.ok(Preferences.readDefaultDiffPreferences(allUsersName, git)); } } } diff --git a/java/com/google/gerrit/server/restapi/config/GetEditPreferences.java b/java/com/google/gerrit/server/restapi/config/GetEditPreferences.java index 2ec547b1e1..d2e1031e20 100644 --- a/java/com/google/gerrit/server/restapi/config/GetEditPreferences.java +++ b/java/com/google/gerrit/server/restapi/config/GetEditPreferences.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.config; import com.google.gerrit.extensions.client.EditPreferencesInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.Preferences; import com.google.gerrit.server.config.AllUsersName; @@ -40,10 +41,10 @@ public class GetEditPreferences implements RestReadView { } @Override - public EditPreferencesInfo apply(ConfigResource configResource) + public Response apply(ConfigResource configResource) throws BadRequestException, ResourceConflictException, IOException, ConfigInvalidException { try (Repository git = gitManager.openRepository(allUsersName)) { - return Preferences.readDefaultEditPreferences(allUsersName, git); + return Response.ok(Preferences.readDefaultEditPreferences(allUsersName, git)); } } } diff --git a/java/com/google/gerrit/server/restapi/config/GetPreferences.java b/java/com/google/gerrit/server/restapi/config/GetPreferences.java index 4dbbc8cf37..bf0ad397a2 100644 --- a/java/com/google/gerrit/server/restapi/config/GetPreferences.java +++ b/java/com/google/gerrit/server/restapi/config/GetPreferences.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.config; import com.google.gerrit.extensions.client.GeneralPreferencesInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.Preferences; import com.google.gerrit.server.config.AllUsersName; @@ -38,10 +39,10 @@ public class GetPreferences implements RestReadView { } @Override - public GeneralPreferencesInfo apply(ConfigResource rsrc) + public Response apply(ConfigResource rsrc) throws IOException, ConfigInvalidException { try (Repository git = gitMgr.openRepository(allUsersName)) { - return Preferences.readDefaultGeneralPreferences(allUsersName, git); + return Response.ok(Preferences.readDefaultGeneralPreferences(allUsersName, git)); } } } diff --git a/java/com/google/gerrit/server/restapi/config/GetServerInfo.java b/java/com/google/gerrit/server/restapi/config/GetServerInfo.java index 2493cd92e3..32d6f17b2e 100644 --- a/java/com/google/gerrit/server/restapi/config/GetServerInfo.java +++ b/java/com/google/gerrit/server/restapi/config/GetServerInfo.java @@ -35,6 +35,7 @@ import com.google.gerrit.extensions.common.UserConfigInfo; import com.google.gerrit.extensions.config.CloneCommand; import com.google.gerrit.extensions.config.DownloadCommand; import com.google.gerrit.extensions.config.DownloadScheme; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.webui.WebUiPlugin; import com.google.gerrit.server.EnableSignedPush; @@ -138,7 +139,7 @@ public class GetServerInfo implements RestReadView { } @Override - public ServerInfo apply(ConfigResource rsrc) throws PermissionBackendException { + public Response apply(ConfigResource rsrc) throws PermissionBackendException { ServerInfo info = new ServerInfo(); info.accounts = getAccountsInfo(); info.auth = getAuthInfo(); @@ -156,7 +157,7 @@ public class GetServerInfo implements RestReadView { info.user = getUserInfo(); info.receive = getReceiveInfo(); - return info; + return Response.ok(info); } private AccountsInfo getAccountsInfo() { diff --git a/java/com/google/gerrit/server/restapi/config/GetSummary.java b/java/com/google/gerrit/server/restapi/config/GetSummary.java index a3824360a3..1df485f344 100644 --- a/java/com/google/gerrit/server/restapi/config/GetSummary.java +++ b/java/com/google/gerrit/server/restapi/config/GetSummary.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.config; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.config.ConfigResource; import com.google.gerrit.server.config.SitePath; @@ -69,7 +70,7 @@ public class GetSummary implements RestReadView { } @Override - public SummaryInfo apply(ConfigResource rsrc) { + public Response apply(ConfigResource rsrc) { if (gc) { System.gc(); System.runFinalization(); @@ -83,7 +84,7 @@ public class GetSummary implements RestReadView { if (jvm) { summary.jvmSummary = getJvmSummary(); } - return summary; + return Response.ok(summary); } private TaskSummaryInfo getTaskSummary() { diff --git a/java/com/google/gerrit/server/restapi/config/GetTask.java b/java/com/google/gerrit/server/restapi/config/GetTask.java index a32f3bacb5..513c99a016 100644 --- a/java/com/google/gerrit/server/restapi/config/GetTask.java +++ b/java/com/google/gerrit/server/restapi/config/GetTask.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.config; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.config.TaskResource; import com.google.inject.Singleton; @@ -22,7 +23,7 @@ import com.google.inject.Singleton; public class GetTask implements RestReadView { @Override - public ListTasks.TaskInfo apply(TaskResource rsrc) { - return new ListTasks.TaskInfo(rsrc.getTask()); + public Response apply(TaskResource rsrc) { + return Response.ok(new ListTasks.TaskInfo(rsrc.getTask())); } } diff --git a/java/com/google/gerrit/server/restapi/config/ListCaches.java b/java/com/google/gerrit/server/restapi/config/ListCaches.java index f310ed7e71..ccafbe89b1 100644 --- a/java/com/google/gerrit/server/restapi/config/ListCaches.java +++ b/java/com/google/gerrit/server/restapi/config/ListCaches.java @@ -28,6 +28,7 @@ import com.google.gerrit.extensions.annotations.RequiresAnyCapability; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.registration.Extension; import com.google.gerrit.extensions.restapi.BinaryResult; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.cache.PersistentCache; import com.google.gerrit.server.config.ConfigResource; @@ -69,21 +70,22 @@ public class ListCaches implements RestReadView { } @Override - public Object apply(ConfigResource rsrc) { + public Response apply(ConfigResource rsrc) { if (format == null) { - return getCacheInfos(); + return Response.ok(getCacheInfos()); } Stream cacheNames = Streams.stream(cacheMap) .map(e -> cacheNameOf(e.getPluginName(), e.getExportName())) .sorted(); if (OutputFormat.TEXT_LIST.equals(format)) { - return BinaryResult.create(cacheNames.collect(joining("\n"))) - .base64() - .setContentType("text/plain") - .setCharacterEncoding(UTF_8); + return Response.ok( + BinaryResult.create(cacheNames.collect(joining("\n"))) + .base64() + .setContentType("text/plain") + .setCharacterEncoding(UTF_8)); } - return cacheNames.collect(toImmutableList()); + return Response.ok(cacheNames.collect(toImmutableList())); } public enum CacheType { diff --git a/java/com/google/gerrit/server/restapi/config/ListCapabilities.java b/java/com/google/gerrit/server/restapi/config/ListCapabilities.java index cacbbf590a..6c8bf7421c 100644 --- a/java/com/google/gerrit/server/restapi/config/ListCapabilities.java +++ b/java/com/google/gerrit/server/restapi/config/ListCapabilities.java @@ -19,6 +19,7 @@ import static com.google.common.collect.ImmutableMap.toImmutableMap; import com.google.common.collect.ImmutableMap; import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.config.CapabilityConstants; import com.google.gerrit.server.config.ConfigResource; @@ -43,13 +44,14 @@ public class ListCapabilities implements RestReadView { } @Override - public Map apply(ConfigResource resource) + public Response> apply(ConfigResource resource) throws ResourceNotFoundException, IllegalAccessException, NoSuchFieldException { permissionBackend.checkUsesDefaultCapabilities(); - return ImmutableMap.builder() - .putAll(collectCoreCapabilities()) - .putAll(collectPluginCapabilities()) - .build(); + return Response.ok( + ImmutableMap.builder() + .putAll(collectCoreCapabilities()) + .putAll(collectPluginCapabilities()) + .build()); } public Map collectPluginCapabilities() { diff --git a/java/com/google/gerrit/server/restapi/config/ListTasks.java b/java/com/google/gerrit/server/restapi/config/ListTasks.java index 6f18b24d85..37ca692d41 100644 --- a/java/com/google/gerrit/server/restapi/config/ListTasks.java +++ b/java/com/google/gerrit/server/restapi/config/ListTasks.java @@ -18,6 +18,7 @@ import static java.util.Comparator.comparing; import static java.util.stream.Collectors.toList; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.CurrentUser; @@ -62,7 +63,7 @@ public class ListTasks implements RestReadView { } @Override - public List apply(ConfigResource resource) + public Response> apply(ConfigResource resource) throws AuthException, PermissionBackendException { CurrentUser user = self.get(); if (!user.isIdentifiedUser()) { @@ -72,7 +73,7 @@ public class ListTasks implements RestReadView { List allTasks = getTasks(); try { permissionBackend.user(user).check(GlobalPermission.VIEW_QUEUE); - return allTasks; + return Response.ok(allTasks); } catch (AuthException e) { // Fall through to filter tasks. } @@ -102,7 +103,7 @@ public class ListTasks implements RestReadView { } } } - return visibleTasks; + return Response.ok(visibleTasks); } private List getTasks() { diff --git a/java/com/google/gerrit/server/restapi/config/ReloadConfig.java b/java/com/google/gerrit/server/restapi/config/ReloadConfig.java index 0685a5862e..9ce7ffd8b0 100644 --- a/java/com/google/gerrit/server/restapi/config/ReloadConfig.java +++ b/java/com/google/gerrit/server/restapi/config/ReloadConfig.java @@ -19,6 +19,7 @@ import static com.google.common.collect.ImmutableList.toImmutableList; import com.google.common.collect.Multimap; import com.google.gerrit.extensions.api.config.ConfigUpdateEntryInfo; import com.google.gerrit.extensions.common.Input; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.config.ConfigResource; @@ -47,17 +48,18 @@ public class ReloadConfig implements RestModifyView { } @Override - public Map> apply(ConfigResource resource, Input input) - throws RestApiException, PermissionBackendException { + public Response>> apply( + ConfigResource resource, Input input) throws RestApiException, PermissionBackendException { permissions.currentUser().check(GlobalPermission.ADMINISTRATE_SERVER); Multimap updates = config.reloadConfig(); if (updates.isEmpty()) { - return Collections.emptyMap(); + return Response.ok(Collections.emptyMap()); } - return updates.asMap().entrySet().stream() - .collect( - Collectors.toMap( - e -> e.getKey().name().toLowerCase(), e -> toEntryInfos(e.getValue()))); + return Response.ok( + updates.asMap().entrySet().stream() + .collect( + Collectors.toMap( + e -> e.getKey().name().toLowerCase(), e -> toEntryInfos(e.getValue())))); } private static List toEntryInfos( diff --git a/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java b/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java index 068f3326c5..fb81665505 100644 --- a/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java +++ b/java/com/google/gerrit/server/restapi/config/SetDiffPreferences.java @@ -21,6 +21,7 @@ import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.client.DiffPreferencesInfo; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.account.AccountCache; import com.google.gerrit.server.account.Preferences; @@ -54,7 +55,8 @@ public class SetDiffPreferences implements RestModifyView apply( + ConfigResource configResource, DiffPreferencesInfo input) throws BadRequestException, IOException, ConfigInvalidException { if (input == null) { throw new BadRequestException("input must be provided"); @@ -66,7 +68,7 @@ public class SetDiffPreferences implements RestModifyView apply( + ConfigResource configResource, EditPreferencesInfo input) throws BadRequestException, IOException, ConfigInvalidException { if (input == null) { throw new BadRequestException("input must be provided"); @@ -66,7 +68,7 @@ public class SetEditPreferences implements RestModifyView apply(ConfigResource rsrc, GeneralPreferencesInfo input) throws BadRequestException, IOException, ConfigInvalidException { if (!hasSetFields(input)) { throw new BadRequestException("unsupported option"); @@ -63,7 +64,7 @@ public class SetPreferences implements RestModifyView { } @Override - public List apply(GroupResource resource, Input input) + public Response> apply(GroupResource resource, Input input) throws AuthException, NotInternalGroupException, UnprocessableEntityException, IOException, ConfigInvalidException, ResourceNotFoundException, PermissionBackendException { GroupDescription.Internal internalGroup = @@ -139,7 +140,7 @@ public class AddMembers implements RestModifyView { } catch (NoSuchGroupException e) { throw new ResourceNotFoundException(String.format("Group %s not found", groupUuid)); } - return toAccountInfoList(newMemberIds); + return Response.ok(toAccountInfoList(newMemberIds)); } Account findAccount(String nameOrEmailOrId) @@ -221,15 +222,15 @@ public class AddMembers implements RestModifyView { } @Override - public AccountInfo apply(GroupResource resource, IdString id, Input input) + public Response apply(GroupResource resource, IdString id, Input input) throws AuthException, MethodNotAllowedException, ResourceNotFoundException, IOException, ConfigInvalidException, PermissionBackendException { AddMembers.Input in = new AddMembers.Input(); in._oneMember = id.get(); try { - List list = put.apply(resource, in); + List list = put.apply(resource, in).value(); if (list.size() == 1) { - return list.get(0); + return Response.created(list.get(0)); } throw new IllegalStateException(); } catch (UnprocessableEntityException e) { @@ -248,7 +249,7 @@ public class AddMembers implements RestModifyView { } @Override - public AccountInfo apply(MemberResource resource, Input input) + public Response apply(MemberResource resource, Input input) throws PermissionBackendException { // Do nothing, the user is already a member. return get.apply(resource); diff --git a/java/com/google/gerrit/server/restapi/group/AddSubgroups.java b/java/com/google/gerrit/server/restapi/group/AddSubgroups.java index 9f9deffe48..3a3b9f4956 100644 --- a/java/com/google/gerrit/server/restapi/group/AddSubgroups.java +++ b/java/com/google/gerrit/server/restapi/group/AddSubgroups.java @@ -26,6 +26,7 @@ import com.google.gerrit.extensions.restapi.DefaultInput; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestCollectionCreateView; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; @@ -91,7 +92,7 @@ public class AddSubgroups implements RestModifyView { } @Override - public List apply(GroupResource resource, Input input) + public Response> apply(GroupResource resource, Input input) throws NotInternalGroupException, AuthException, UnprocessableEntityException, ResourceNotFoundException, IOException, ConfigInvalidException, PermissionBackendException { @@ -118,7 +119,7 @@ public class AddSubgroups implements RestModifyView { } catch (NoSuchGroupException e) { throw new ResourceNotFoundException(String.format("Group %s not found", groupUuid)); } - return result; + return Response.ok(result); } private void addSubgroups( @@ -142,15 +143,15 @@ public class AddSubgroups implements RestModifyView { } @Override - public GroupInfo apply(GroupResource resource, IdString id, Input input) + public Response apply(GroupResource resource, IdString id, Input input) throws AuthException, MethodNotAllowedException, ResourceNotFoundException, IOException, ConfigInvalidException, PermissionBackendException { AddSubgroups.Input in = new AddSubgroups.Input(); in.groups = ImmutableList.of(id.get()); try { - List list = addSubgroups.apply(resource, in); + List list = addSubgroups.apply(resource, in).value(); if (list.size() == 1) { - return list.get(0); + return Response.created(list.get(0)); } throw new IllegalStateException(); } catch (UnprocessableEntityException e) { @@ -169,7 +170,7 @@ public class AddSubgroups implements RestModifyView { } @Override - public GroupInfo apply(SubgroupResource resource, Input input) + public Response apply(SubgroupResource resource, Input input) throws PermissionBackendException { // Do nothing, the group is already included. return get.get().apply(resource); diff --git a/java/com/google/gerrit/server/restapi/group/CreateGroup.java b/java/com/google/gerrit/server/restapi/group/CreateGroup.java index 8c1be49279..5cb885ba4f 100644 --- a/java/com/google/gerrit/server/restapi/group/CreateGroup.java +++ b/java/com/google/gerrit/server/restapi/group/CreateGroup.java @@ -29,6 +29,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestCollectionCreateView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; @@ -122,7 +123,7 @@ public class CreateGroup } @Override - public GroupInfo apply(TopLevelResource resource, IdString id, GroupInput input) + public Response apply(TopLevelResource resource, IdString id, GroupInput input) throws AuthException, BadRequestException, UnprocessableEntityException, ResourceConflictException, IOException, ConfigInvalidException, ResourceNotFoundException, PermissionBackendException { @@ -165,7 +166,7 @@ public class CreateGroup throw new ResourceConflictException(e.getMessage(), e); } - return json.format(new InternalGroupDescription(createGroup(args))); + return Response.created(json.format(new InternalGroupDescription(createGroup(args)))); } private AccountGroup.UUID owner(GroupInput input) throws UnprocessableEntityException { diff --git a/java/com/google/gerrit/server/restapi/group/GetAuditLog.java b/java/com/google/gerrit/server/restapi/group/GetAuditLog.java index 195ac4a085..77f62436ad 100644 --- a/java/com/google/gerrit/server/restapi/group/GetAuditLog.java +++ b/java/com/google/gerrit/server/restapi/group/GetAuditLog.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.common.AccountInfo; import com.google.gerrit.extensions.common.GroupAuditEventInfo; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.AuthException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.Url; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -74,7 +75,7 @@ public class GetAuditLog implements RestReadView { } @Override - public List apply(GroupResource rsrc) + public Response> apply(GroupResource rsrc) throws AuthException, NotInternalGroupException, IOException, ConfigInvalidException, PermissionBackendException { GroupDescription.Internal group = @@ -139,6 +140,6 @@ public class GetAuditLog implements RestReadView { // sort by date and then reverse so that the newest audit event comes first auditEvents.sort(comparing((GroupAuditEventInfo a) -> a.date).reversed()); - return auditEvents; + return Response.ok(auditEvents); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetDescription.java b/java/com/google/gerrit/server/restapi/group/GetDescription.java index c34fda77f9..b77028118d 100644 --- a/java/com/google/gerrit/server/restapi/group/GetDescription.java +++ b/java/com/google/gerrit/server/restapi/group/GetDescription.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.group; import com.google.common.base.Strings; import com.google.gerrit.common.data.GroupDescription; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.group.GroupResource; import com.google.inject.Singleton; @@ -23,9 +24,9 @@ import com.google.inject.Singleton; @Singleton public class GetDescription implements RestReadView { @Override - public String apply(GroupResource resource) throws NotInternalGroupException { + public Response apply(GroupResource resource) throws NotInternalGroupException { GroupDescription.Internal group = resource.asInternalGroup().orElseThrow(NotInternalGroupException::new); - return Strings.nullToEmpty(group.getDescription()); + return Response.ok(Strings.nullToEmpty(group.getDescription())); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetDetail.java b/java/com/google/gerrit/server/restapi/group/GetDetail.java index c7573836a2..f6b89304f7 100644 --- a/java/com/google/gerrit/server/restapi/group/GetDetail.java +++ b/java/com/google/gerrit/server/restapi/group/GetDetail.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.group; import com.google.gerrit.extensions.client.ListGroupsOption; import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.group.GroupResource; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -32,7 +33,7 @@ public class GetDetail implements RestReadView { } @Override - public GroupInfo apply(GroupResource rsrc) throws PermissionBackendException { - return json.format(rsrc); + public Response apply(GroupResource rsrc) throws PermissionBackendException { + return Response.ok(json.format(rsrc)); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetGroup.java b/java/com/google/gerrit/server/restapi/group/GetGroup.java index 3ae447bf6e..4785d25f54 100644 --- a/java/com/google/gerrit/server/restapi/group/GetGroup.java +++ b/java/com/google/gerrit/server/restapi/group/GetGroup.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.group; import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.group.GroupResource; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -31,7 +32,7 @@ public class GetGroup implements RestReadView { } @Override - public GroupInfo apply(GroupResource resource) throws PermissionBackendException { - return json.format(resource.getGroup()); + public Response apply(GroupResource resource) throws PermissionBackendException { + return Response.ok(json.format(resource.getGroup())); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetMember.java b/java/com/google/gerrit/server/restapi/group/GetMember.java index 63a8a1bba3..8dbcd27d5c 100644 --- a/java/com/google/gerrit/server/restapi/group/GetMember.java +++ b/java/com/google/gerrit/server/restapi/group/GetMember.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.group; import com.google.gerrit.extensions.common.AccountInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.AccountLoader; import com.google.gerrit.server.group.MemberResource; @@ -32,10 +33,10 @@ public class GetMember implements RestReadView { } @Override - public AccountInfo apply(MemberResource rsrc) throws PermissionBackendException { + public Response apply(MemberResource rsrc) throws PermissionBackendException { AccountLoader loader = infoFactory.create(true); AccountInfo info = loader.get(rsrc.getMember().getAccountId()); loader.fill(); - return info; + return Response.ok(info); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetName.java b/java/com/google/gerrit/server/restapi/group/GetName.java index 8cc1fe0c2f..131dbe41c9 100644 --- a/java/com/google/gerrit/server/restapi/group/GetName.java +++ b/java/com/google/gerrit/server/restapi/group/GetName.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.group; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.group.GroupResource; import com.google.inject.Singleton; @@ -22,7 +23,7 @@ import com.google.inject.Singleton; public class GetName implements RestReadView { @Override - public String apply(GroupResource resource) { - return resource.getName(); + public Response apply(GroupResource resource) { + return Response.ok(resource.getName()); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetOptions.java b/java/com/google/gerrit/server/restapi/group/GetOptions.java index e5bfe30100..5d8ba0251c 100644 --- a/java/com/google/gerrit/server/restapi/group/GetOptions.java +++ b/java/com/google/gerrit/server/restapi/group/GetOptions.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.group; import com.google.gerrit.extensions.common.GroupOptionsInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.group.GroupResource; import com.google.inject.Singleton; @@ -23,7 +24,7 @@ import com.google.inject.Singleton; public class GetOptions implements RestReadView { @Override - public GroupOptionsInfo apply(GroupResource resource) { - return GroupJson.createOptions(resource.getGroup()); + public Response apply(GroupResource resource) { + return Response.ok(GroupJson.createOptions(resource.getGroup())); } } diff --git a/java/com/google/gerrit/server/restapi/group/GetOwner.java b/java/com/google/gerrit/server/restapi/group/GetOwner.java index 0f0417e9de..30d5c16fbc 100644 --- a/java/com/google/gerrit/server/restapi/group/GetOwner.java +++ b/java/com/google/gerrit/server/restapi/group/GetOwner.java @@ -18,6 +18,7 @@ import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.exceptions.NoSuchGroupException; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.account.GroupControl; import com.google.gerrit.server.group.GroupResource; @@ -38,13 +39,13 @@ public class GetOwner implements RestReadView { } @Override - public GroupInfo apply(GroupResource resource) + public Response apply(GroupResource resource) throws NotInternalGroupException, ResourceNotFoundException, PermissionBackendException { GroupDescription.Internal group = resource.asInternalGroup().orElseThrow(NotInternalGroupException::new); try { GroupControl c = controlFactory.validateFor(group.getOwnerGroupUUID()); - return json.format(c.getGroup()); + return Response.ok(json.format(c.getGroup())); } catch (NoSuchGroupException e) { throw new ResourceNotFoundException(); } diff --git a/java/com/google/gerrit/server/restapi/group/GetSubgroup.java b/java/com/google/gerrit/server/restapi/group/GetSubgroup.java index 446618009c..c209511f6c 100644 --- a/java/com/google/gerrit/server/restapi/group/GetSubgroup.java +++ b/java/com/google/gerrit/server/restapi/group/GetSubgroup.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.group; import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.group.SubgroupResource; import com.google.gerrit.server.permissions.PermissionBackendException; @@ -31,7 +32,7 @@ public class GetSubgroup implements RestReadView { } @Override - public GroupInfo apply(SubgroupResource rsrc) throws PermissionBackendException { - return json.format(rsrc.getMemberDescription()); + public Response apply(SubgroupResource rsrc) throws PermissionBackendException { + return Response.ok(json.format(rsrc.getMemberDescription())); } } diff --git a/java/com/google/gerrit/server/restapi/group/ListGroups.java b/java/com/google/gerrit/server/restapi/group/ListGroups.java index 38b525bbcd..37ea55c4b9 100644 --- a/java/com/google/gerrit/server/restapi/group/ListGroups.java +++ b/java/com/google/gerrit/server/restapi/group/ListGroups.java @@ -28,6 +28,7 @@ import com.google.gerrit.extensions.client.ListGroupsOption; import com.google.gerrit.extensions.client.ListOption; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; @@ -247,14 +248,14 @@ public class ListGroups implements RestReadView { } @Override - public SortedMap apply(TopLevelResource resource) + public Response> apply(TopLevelResource resource) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException { SortedMap output = new TreeMap<>(); for (GroupInfo info : get()) { output.put(MoreObjects.firstNonNull(info.name, "Group " + Url.decode(info.id)), info); info.name = null; } - return output; + return Response.ok(output); } public List get() @@ -276,7 +277,7 @@ public class ListGroups implements RestReadView { } if (user != null) { - return accountGetGroups.apply(new AccountResource(userFactory.create(user))); + return accountGetGroups.apply(new AccountResource(userFactory.create(user))).value(); } return getAllGroups(); diff --git a/java/com/google/gerrit/server/restapi/group/ListMembers.java b/java/com/google/gerrit/server/restapi/group/ListMembers.java index 8f58de2375..af57282b25 100644 --- a/java/com/google/gerrit/server/restapi/group/ListMembers.java +++ b/java/com/google/gerrit/server/restapi/group/ListMembers.java @@ -22,6 +22,7 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.extensions.common.AccountInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Account; import com.google.gerrit.reviewdb.client.AccountGroup; @@ -65,14 +66,14 @@ public class ListMembers implements RestReadView { } @Override - public List apply(GroupResource resource) + public Response> apply(GroupResource resource) throws NotInternalGroupException, PermissionBackendException { GroupDescription.Internal group = resource.asInternalGroup().orElseThrow(NotInternalGroupException::new); if (recursive) { - return getTransitiveMembers(group, resource.getControl()); + return Response.ok(getTransitiveMembers(group, resource.getControl())); } - return getDirectMembers(group, resource.getControl()); + return Response.ok(getDirectMembers(group, resource.getControl())); } public List getTransitiveMembers(AccountGroup.UUID groupUuid) diff --git a/java/com/google/gerrit/server/restapi/group/ListSubgroups.java b/java/com/google/gerrit/server/restapi/group/ListSubgroups.java index bb72a10d0b..3e5b152c77 100644 --- a/java/com/google/gerrit/server/restapi/group/ListSubgroups.java +++ b/java/com/google/gerrit/server/restapi/group/ListSubgroups.java @@ -21,6 +21,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.common.data.GroupDescription; import com.google.gerrit.exceptions.NoSuchGroupException; import com.google.gerrit.extensions.common.GroupInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.account.GroupControl; @@ -45,12 +46,12 @@ public class ListSubgroups implements RestReadView { } @Override - public List apply(GroupResource rsrc) + public Response> apply(GroupResource rsrc) throws NotInternalGroupException, PermissionBackendException { GroupDescription.Internal group = rsrc.asInternalGroup().orElseThrow(NotInternalGroupException::new); - return getDirectSubgroups(group, rsrc.getControl()); + return Response.ok(getDirectSubgroups(group, rsrc.getControl())); } public List getDirectSubgroups( diff --git a/java/com/google/gerrit/server/restapi/group/PutName.java b/java/com/google/gerrit/server/restapi/group/PutName.java index 0cf5fa9dd7..a5dd04fdce 100644 --- a/java/com/google/gerrit/server/restapi/group/PutName.java +++ b/java/com/google/gerrit/server/restapi/group/PutName.java @@ -23,6 +23,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.UserInitiated; @@ -45,7 +46,7 @@ public class PutName implements RestModifyView { } @Override - public String apply(GroupResource rsrc, NameInput input) + public Response apply(GroupResource rsrc, NameInput input) throws NotInternalGroupException, AuthException, BadRequestException, ResourceConflictException, ResourceNotFoundException, IOException, ConfigInvalidException { @@ -62,11 +63,11 @@ public class PutName implements RestModifyView { } if (internalGroup.getName().equals(newName)) { - return newName; + return Response.ok(newName); } renameGroup(internalGroup, newName); - return newName; + return Response.ok(newName); } private void renameGroup(GroupDescription.Internal group, String newName) diff --git a/java/com/google/gerrit/server/restapi/group/PutOptions.java b/java/com/google/gerrit/server/restapi/group/PutOptions.java index 267f414b13..b2ea8d35bc 100644 --- a/java/com/google/gerrit/server/restapi/group/PutOptions.java +++ b/java/com/google/gerrit/server/restapi/group/PutOptions.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.common.GroupOptionsInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.server.UserInitiated; @@ -42,7 +43,7 @@ public class PutOptions implements RestModifyView apply(GroupResource resource, GroupOptionsInfo input) throws NotInternalGroupException, AuthException, BadRequestException, ResourceNotFoundException, IOException, ConfigInvalidException { GroupDescription.Internal internalGroup = @@ -73,6 +74,6 @@ public class PutOptions implements RestModifyView { } @Override - public GroupInfo apply(GroupResource resource, OwnerInput input) + public Response apply(GroupResource resource, OwnerInput input) throws ResourceNotFoundException, NotInternalGroupException, AuthException, BadRequestException, UnprocessableEntityException, IOException, ConfigInvalidException, PermissionBackendException { @@ -79,6 +80,6 @@ public class PutOwner implements RestModifyView { throw new ResourceNotFoundException(String.format("Group %s not found", groupUuid)); } } - return json.format(owner); + return Response.ok(json.format(owner)); } } diff --git a/java/com/google/gerrit/server/restapi/group/QueryGroups.java b/java/com/google/gerrit/server/restapi/group/QueryGroups.java index 3ab0720e6d..816fcf6eb8 100644 --- a/java/com/google/gerrit/server/restapi/group/QueryGroups.java +++ b/java/com/google/gerrit/server/restapi/group/QueryGroups.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.client.ListOption; import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.index.query.QueryParseException; @@ -94,7 +95,7 @@ public class QueryGroups implements RestReadView { } @Override - public List apply(TopLevelResource resource) + public Response> apply(TopLevelResource resource) throws BadRequestException, MethodNotAllowedException, PermissionBackendException { if (Strings.isNullOrEmpty(query)) { throw new BadRequestException("missing query field"); @@ -124,7 +125,7 @@ public class QueryGroups implements RestReadView { if (!groupInfos.isEmpty() && result.more()) { groupInfos.get(groupInfos.size() - 1)._moreGroups = true; } - return groupInfos; + return Response.ok(groupInfos); } catch (QueryParseException e) { throw new BadRequestException(e.getMessage()); } diff --git a/java/com/google/gerrit/server/restapi/project/BanCommit.java b/java/com/google/gerrit/server/restapi/project/BanCommit.java index 3d101b2484..64e38b0176 100644 --- a/java/com/google/gerrit/server/restapi/project/BanCommit.java +++ b/java/com/google/gerrit/server/restapi/project/BanCommit.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import com.google.common.collect.Lists; import com.google.gerrit.extensions.api.projects.BanCommitInput; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.server.git.BanCommitResult; @@ -45,7 +46,7 @@ public class BanCommit } @Override - protected BanResultInfo applyImpl( + protected Response applyImpl( BatchUpdate.Factory updateFactory, ProjectResource rsrc, BanCommitInput input) throws RestApiException, UpdateException, IOException, PermissionBackendException { BanResultInfo r = new BanResultInfo(); @@ -65,7 +66,7 @@ public class BanCommit r.alreadyBanned = transformCommits(result.getAlreadyBannedCommits()); r.ignored = transformCommits(result.getIgnoredObjectIds()); } - return r; + return Response.ok(r); } private static List transformCommits(List commits) { diff --git a/java/com/google/gerrit/server/restapi/project/Check.java b/java/com/google/gerrit/server/restapi/project/Check.java index a6fd7646ae..66a2df4bb6 100644 --- a/java/com/google/gerrit/server/restapi/project/Check.java +++ b/java/com/google/gerrit/server/restapi/project/Check.java @@ -19,6 +19,7 @@ import com.google.gerrit.extensions.api.projects.CheckProjectResultInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.permissions.GlobalPermission; import com.google.gerrit.server.permissions.PermissionBackend; @@ -40,9 +41,9 @@ public class Check implements RestModifyView } @Override - public CheckProjectResultInfo apply(ProjectResource rsrc, CheckProjectInput input) + public Response apply(ProjectResource rsrc, CheckProjectInput input) throws AuthException, BadRequestException, ResourceConflictException, Exception { permissionBackend.user(rsrc.getUser()).check(GlobalPermission.ADMINISTRATE_SERVER); - return projectsConsistencyChecker.check(rsrc.getNameKey(), input); + return Response.ok(projectsConsistencyChecker.check(rsrc.getNameKey(), input)); } } diff --git a/java/com/google/gerrit/server/restapi/project/CheckAccess.java b/java/com/google/gerrit/server/restapi/project/CheckAccess.java index ac1494e900..516e126032 100644 --- a/java/com/google/gerrit/server/restapi/project/CheckAccess.java +++ b/java/com/google/gerrit/server/restapi/project/CheckAccess.java @@ -21,6 +21,7 @@ import com.google.gerrit.extensions.api.config.AccessCheckInfo; import com.google.gerrit.extensions.api.config.AccessCheckInput; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.reviewdb.client.Account; @@ -59,7 +60,7 @@ public class CheckAccess implements RestModifyView apply(ProjectResource rsrc, AccessCheckInput input) throws PermissionBackendException, RestApiException, IOException, ConfigInvalidException { permissionBackend.user(rsrc.getUser()).check(GlobalPermission.VIEW_ACCESS); @@ -83,7 +84,7 @@ public class CheckAccess implements RestModifyView { } @Override - public AccessCheckInfo apply(ProjectResource rsrc) + public Response apply(ProjectResource rsrc) throws PermissionBackendException, RestApiException, IOException, ConfigInvalidException { AccessCheckInput input = new AccessCheckInput(); diff --git a/java/com/google/gerrit/server/restapi/project/CheckMergeability.java b/java/com/google/gerrit/server/restapi/project/CheckMergeability.java index de2ac6458d..69a6da867e 100644 --- a/java/com/google/gerrit/server/restapi/project/CheckMergeability.java +++ b/java/com/google/gerrit/server/restapi/project/CheckMergeability.java @@ -18,6 +18,7 @@ import com.google.gerrit.extensions.client.SubmitType; import com.google.gerrit.extensions.common.MergeableInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.config.GerritServerConfig; import com.google.gerrit.server.git.GitRepositoryManager; @@ -75,7 +76,7 @@ public class CheckMergeability implements RestReadView { } @Override - public MergeableInfo apply(BranchResource resource) + public Response apply(BranchResource resource) throws IOException, BadRequestException, ResourceNotFoundException { if (!(submitType.equals(SubmitType.MERGE_ALWAYS) || submitType.equals(SubmitType.MERGE_IF_NECESSARY))) { @@ -106,7 +107,7 @@ public class CheckMergeability implements RestReadView { result.mergeable = true; result.commitMerged = true; result.contentMerged = true; - return result; + return Response.ok(result); } if (m.merge(false, targetCommit, sourceCommit)) { @@ -122,6 +123,6 @@ public class CheckMergeability implements RestReadView { } catch (IllegalArgumentException e) { throw new BadRequestException(e.getMessage()); } - return result; + return Response.ok(result); } } diff --git a/java/com/google/gerrit/server/restapi/project/CommitIncludedIn.java b/java/com/google/gerrit/server/restapi/project/CommitIncludedIn.java index 8cc8298a02..0eb60f5625 100644 --- a/java/com/google/gerrit/server/restapi/project/CommitIncludedIn.java +++ b/java/com/google/gerrit/server/restapi/project/CommitIncludedIn.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.api.changes.IncludedInInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Project; @@ -35,9 +36,9 @@ public class CommitIncludedIn implements RestReadView { } @Override - public IncludedInInfo apply(CommitResource rsrc) throws RestApiException, IOException { + public Response apply(CommitResource rsrc) throws RestApiException, IOException { RevCommit commit = rsrc.getCommit(); Project.NameKey project = rsrc.getProjectState().getNameKey(); - return includedIn.apply(project, commit.getId().getName()); + return Response.ok(includedIn.apply(project, commit.getId().getName())); } } diff --git a/java/com/google/gerrit/server/restapi/project/CreateBranch.java b/java/com/google/gerrit/server/restapi/project/CreateBranch.java index e86230c5e9..711d09e144 100644 --- a/java/com/google/gerrit/server/restapi/project/CreateBranch.java +++ b/java/com/google/gerrit/server/restapi/project/CreateBranch.java @@ -23,6 +23,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestCollectionCreateView; import com.google.gerrit.reviewdb.client.BranchNameKey; import com.google.gerrit.reviewdb.client.RefNames; @@ -81,7 +82,7 @@ public class CreateBranch } @Override - public BranchInfo apply(ProjectResource rsrc, IdString id, BranchInput input) + public Response apply(ProjectResource rsrc, IdString id, BranchInput input) throws BadRequestException, AuthException, ResourceConflictException, IOException, PermissionBackendException, NoSuchProjectException { String ref = id.get(); @@ -188,7 +189,7 @@ public class CreateBranch ? true : null; } - return info; + return Response.created(info); } catch (IOException err) { logger.atSevere().withCause(err).log("Cannot create branch \"%s\"", name); throw err; diff --git a/java/com/google/gerrit/server/restapi/project/CreateDashboard.java b/java/com/google/gerrit/server/restapi/project/CreateDashboard.java index e8b6236e89..24736b3805 100644 --- a/java/com/google/gerrit/server/restapi/project/CreateDashboard.java +++ b/java/com/google/gerrit/server/restapi/project/CreateDashboard.java @@ -52,6 +52,7 @@ public class CreateDashboard } SetDefaultDashboard set = setDefault.get(); set.inherited = inherited; + // TODO(ekempin): This should return Response.created(...) since it creates a new dashboard. return set.apply( DashboardResource.projectDefault(parent.getProjectState(), parent.getUser()), input); } diff --git a/java/com/google/gerrit/server/restapi/project/CreateTag.java b/java/com/google/gerrit/server/restapi/project/CreateTag.java index e72deaf255..dca6e9a460 100644 --- a/java/com/google/gerrit/server/restapi/project/CreateTag.java +++ b/java/com/google/gerrit/server/restapi/project/CreateTag.java @@ -25,6 +25,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestCollectionCreateView; import com.google.gerrit.server.WebLinks; @@ -78,7 +79,7 @@ public class CreateTag implements RestCollectionCreateView apply(ProjectResource resource, IdString id, TagInput input) throws RestApiException, IOException, PermissionBackendException, NoSuchProjectException { String ref = id.get(); if (input == null) { @@ -140,7 +141,8 @@ public class CreateTag implements RestCollectionCreateView> apply(CommitResource resource) + throws PatchListNotAvailableException { RevCommit commit = resource.getCommit(); PatchListKey key; @@ -94,7 +98,7 @@ public class FilesInCommitCollection implements ChildCollection apply(ProjectResource rsrc, Input input) { Project.NameKey project = rsrc.getNameKey(); if (input.async) { return applyAsync(project, input); } - return applySync(project, input); + return Response.ok(applySync(project, input)); } private Response.Accepted applyAsync(Project.NameKey project, Input input) { diff --git a/java/com/google/gerrit/server/restapi/project/GetAccess.java b/java/com/google/gerrit/server/restapi/project/GetAccess.java index 744c8b2905..51374ab336 100644 --- a/java/com/google/gerrit/server/restapi/project/GetAccess.java +++ b/java/com/google/gerrit/server/restapi/project/GetAccess.java @@ -37,6 +37,7 @@ import com.google.gerrit.extensions.common.GroupInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.AccountGroup; import com.google.gerrit.reviewdb.client.Project; @@ -123,11 +124,11 @@ public class GetAccess implements RestReadView { if (state == null) { throw new ResourceNotFoundException(nameKey.get()); } - return apply(new ProjectResource(state, user.get())); + return apply(new ProjectResource(state, user.get())).value(); } @Override - public ProjectAccessInfo apply(ProjectResource rsrc) + public Response apply(ProjectResource rsrc) throws ResourceNotFoundException, ResourceConflictException, IOException, PermissionBackendException { // Load the current configuration from the repository, ensuring it's the most @@ -275,7 +276,7 @@ public class GetAccess implements RestReadView { .filter(e -> e.getValue() != null) .collect(toMap(e -> e.getKey().get(), Map.Entry::getValue)); - return info; + return Response.ok(info); } private void loadGroup(Map groups, AccountGroup.UUID id) { diff --git a/java/com/google/gerrit/server/restapi/project/GetBranch.java b/java/com/google/gerrit/server/restapi/project/GetBranch.java index 7d32f3da86..52a47a4493 100644 --- a/java/com/google/gerrit/server/restapi/project/GetBranch.java +++ b/java/com/google/gerrit/server/restapi/project/GetBranch.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.api.projects.BranchInfo; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.project.BranchResource; @@ -34,8 +35,8 @@ public class GetBranch implements RestReadView { } @Override - public BranchInfo apply(BranchResource rsrc) + public Response apply(BranchResource rsrc) throws ResourceNotFoundException, IOException, PermissionBackendException { - return list.get().toBranchInfo(rsrc); + return Response.ok(list.get().toBranchInfo(rsrc)); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetChildProject.java b/java/com/google/gerrit/server/restapi/project/GetChildProject.java index e69907eaa5..b90f6ee9d1 100644 --- a/java/com/google/gerrit/server/restapi/project/GetChildProject.java +++ b/java/com/google/gerrit/server/restapi/project/GetChildProject.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.project.ChildProjectResource; import com.google.gerrit.server.project.ProjectJson; @@ -37,9 +38,9 @@ public class GetChildProject implements RestReadView { } @Override - public ProjectInfo apply(ChildProjectResource rsrc) throws ResourceNotFoundException { + public Response apply(ChildProjectResource rsrc) throws ResourceNotFoundException { if (recursive || rsrc.isDirectChild()) { - return json.format(rsrc.getChild().getProject()); + return Response.ok(json.format(rsrc.getChild().getProject())); } throw new ResourceNotFoundException(rsrc.getChild().getName()); } diff --git a/java/com/google/gerrit/server/restapi/project/GetCommit.java b/java/com/google/gerrit/server/restapi/project/GetCommit.java index 1c1ae907cd..cca6a1a5de 100644 --- a/java/com/google/gerrit/server/restapi/project/GetCommit.java +++ b/java/com/google/gerrit/server/restapi/project/GetCommit.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.common.CommitInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.git.CommitUtil; import com.google.gerrit.server.project.CommitResource; @@ -25,7 +26,7 @@ import java.io.IOException; public class GetCommit implements RestReadView { @Override - public CommitInfo apply(CommitResource rsrc) throws IOException { - return CommitUtil.toCommitInfo(rsrc.getCommit()); + public Response apply(CommitResource rsrc) throws IOException { + return Response.ok(CommitUtil.toCommitInfo(rsrc.getCommit())); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetConfig.java b/java/com/google/gerrit/server/restapi/project/GetConfig.java index b3ad96233a..ce45e7de8d 100644 --- a/java/com/google/gerrit/server/restapi/project/GetConfig.java +++ b/java/com/google/gerrit/server/restapi/project/GetConfig.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.api.projects.ConfigInfo; import com.google.gerrit.extensions.registration.DynamicMap; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.RestView; import com.google.gerrit.server.EnableSignedPush; @@ -53,15 +54,16 @@ public class GetConfig implements RestReadView { } @Override - public ConfigInfo apply(ProjectResource resource) { - return new ConfigInfoImpl( - serverEnableSignedPush, - resource.getProjectState(), - resource.getUser(), - pluginConfigEntries, - cfgFactory, - allProjects, - uiActions, - views); + public Response apply(ProjectResource resource) { + return Response.ok( + new ConfigInfoImpl( + serverEnableSignedPush, + resource.getProjectState(), + resource.getUser(), + pluginConfigEntries, + cfgFactory, + allProjects, + uiActions, + views)); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetContent.java b/java/com/google/gerrit/server/restapi/project/GetContent.java index 132b644b4c..4e3fc8eeeb 100644 --- a/java/com/google/gerrit/server/restapi/project/GetContent.java +++ b/java/com/google/gerrit/server/restapi/project/GetContent.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.change.FileContentUtil; import com.google.gerrit.server.project.FileResource; @@ -34,8 +35,9 @@ public class GetContent implements RestReadView { } @Override - public BinaryResult apply(FileResource rsrc) + public Response apply(FileResource rsrc) throws ResourceNotFoundException, BadRequestException, IOException { - return fileContentUtil.getContent(rsrc.getProjectState(), rsrc.getRev(), rsrc.getPath(), null); + return Response.ok( + fileContentUtil.getContent(rsrc.getProjectState(), rsrc.getRev(), rsrc.getPath(), null)); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetDashboard.java b/java/com/google/gerrit/server/restapi/project/GetDashboard.java index 2ec67e72a7..03bfb7766c 100644 --- a/java/com/google/gerrit/server/restapi/project/GetDashboard.java +++ b/java/com/google/gerrit/server/restapi/project/GetDashboard.java @@ -25,6 +25,7 @@ import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.Url; @@ -56,7 +57,7 @@ public class GetDashboard implements RestReadView { } @Override - public DashboardInfo apply(DashboardResource rsrc) + public Response apply(DashboardResource rsrc) throws RestApiException, IOException, PermissionBackendException { if (inherited && !rsrc.isProjectDefault()) { throw new BadRequestException("inherited flag can only be used with default"); @@ -71,13 +72,14 @@ public class GetDashboard implements RestReadView { } } - return DashboardsCollection.parse( - rsrc.getProjectState().getProject(), - rsrc.getRefName().substring(REFS_DASHBOARDS.length()), - rsrc.getPathName(), - rsrc.getConfig(), - rsrc.getProjectState().getName(), - true); + return Response.ok( + DashboardsCollection.parse( + rsrc.getProjectState().getProject(), + rsrc.getRefName().substring(REFS_DASHBOARDS.length()), + rsrc.getPathName(), + rsrc.getConfig(), + rsrc.getProjectState().getName(), + true)); } private DashboardResource defaultOf(ProjectState projectState, CurrentUser user) diff --git a/java/com/google/gerrit/server/restapi/project/GetDescription.java b/java/com/google/gerrit/server/restapi/project/GetDescription.java index d387ff1980..2561b916a0 100644 --- a/java/com/google/gerrit/server/restapi/project/GetDescription.java +++ b/java/com/google/gerrit/server/restapi/project/GetDescription.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.common.base.Strings; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.project.ProjectResource; import com.google.inject.Singleton; @@ -22,7 +23,7 @@ import com.google.inject.Singleton; @Singleton public class GetDescription implements RestReadView { @Override - public String apply(ProjectResource rsrc) { - return Strings.nullToEmpty(rsrc.getProjectState().getProject().getDescription()); + public Response apply(ProjectResource rsrc) { + return Response.ok(Strings.nullToEmpty(rsrc.getProjectState().getProject().getDescription())); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetHead.java b/java/com/google/gerrit/server/restapi/project/GetHead.java index bc267c8525..928db97cfd 100644 --- a/java/com/google/gerrit/server/restapi/project/GetHead.java +++ b/java/com/google/gerrit/server/restapi/project/GetHead.java @@ -16,6 +16,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.permissions.PermissionBackend; @@ -52,7 +53,7 @@ public class GetHead implements RestReadView { } @Override - public String apply(ProjectResource rsrc) + public Response apply(ProjectResource rsrc) throws AuthException, ResourceNotFoundException, IOException, PermissionBackendException { rsrc.getProjectState().statePermitsRead(); try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) { @@ -66,12 +67,12 @@ public class GetHead implements RestReadView { .project(rsrc.getNameKey()) .ref(n) .check(RefPermission.READ); - return n; + return Response.ok(n); } else if (head.getObjectId() != null) { try (RevWalk rw = new RevWalk(repo)) { RevCommit commit = rw.parseCommit(head.getObjectId()); if (commits.canRead(rsrc.getProjectState(), repo, commit)) { - return head.getObjectId().name(); + return Response.ok(head.getObjectId().name()); } throw new AuthException("not allowed to see HEAD"); } catch (MissingObjectException | IncorrectObjectTypeException e) { diff --git a/java/com/google/gerrit/server/restapi/project/GetParent.java b/java/com/google/gerrit/server/restapi/project/GetParent.java index a4942e3e70..76b28e907a 100644 --- a/java/com/google/gerrit/server/restapi/project/GetParent.java +++ b/java/com/google/gerrit/server/restapi/project/GetParent.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.restapi.project; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.config.AllProjectsName; @@ -31,9 +32,9 @@ public class GetParent implements RestReadView { } @Override - public String apply(ProjectResource resource) { + public Response apply(ProjectResource resource) { Project project = resource.getProjectState().getProject(); Project.NameKey parentName = project.getParent(allProjectsName); - return parentName != null ? parentName.get() : ""; + return Response.ok(parentName != null ? parentName.get() : ""); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetProject.java b/java/com/google/gerrit/server/restapi/project/GetProject.java index 26159e428e..2f7d370950 100644 --- a/java/com/google/gerrit/server/restapi/project/GetProject.java +++ b/java/com/google/gerrit/server/restapi/project/GetProject.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.common.ProjectInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.project.ProjectJson; import com.google.gerrit.server.project.ProjectResource; @@ -32,7 +33,7 @@ public class GetProject implements RestReadView { } @Override - public ProjectInfo apply(ProjectResource rsrc) { - return json.format(rsrc.getProjectState()); + public Response apply(ProjectResource rsrc) { + return Response.ok(json.format(rsrc.getProjectState())); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetReflog.java b/java/com/google/gerrit/server/restapi/project/GetReflog.java index 4b9a489d81..a249f26d94 100644 --- a/java/com/google/gerrit/server/restapi/project/GetReflog.java +++ b/java/com/google/gerrit/server/restapi/project/GetReflog.java @@ -19,6 +19,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.ReflogEntryInfo; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.CommonConverters; @@ -89,7 +90,7 @@ public class GetReflog implements RestReadView { } @Override - public List apply(BranchResource rsrc) + public Response> apply(BranchResource rsrc) throws RestApiException, IOException, PermissionBackendException { permissionBackend .user(rsrc.getUser()) @@ -123,7 +124,7 @@ public class GetReflog implements RestReadView { } } } - return Lists.transform(entries, this::newReflogEntryInfo); + return Response.ok(Lists.transform(entries, this::newReflogEntryInfo)); } } diff --git a/java/com/google/gerrit/server/restapi/project/GetStatistics.java b/java/com/google/gerrit/server/restapi/project/GetStatistics.java index 048c018b9f..d68e0afb11 100644 --- a/java/com/google/gerrit/server/restapi/project/GetStatistics.java +++ b/java/com/google/gerrit/server/restapi/project/GetStatistics.java @@ -18,6 +18,7 @@ import com.google.gerrit.common.data.GlobalCapability; import com.google.gerrit.extensions.annotations.RequiresCapability; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.git.GitRepositoryManager; import com.google.gerrit.server.project.ProjectResource; @@ -42,11 +43,11 @@ public class GetStatistics implements RestReadView { } @Override - public RepositoryStatistics apply(ProjectResource rsrc) + public Response apply(ProjectResource rsrc) throws ResourceNotFoundException, ResourceConflictException { try (Repository repo = repoManager.openRepository(rsrc.getNameKey())) { GarbageCollectCommand gc = Git.wrap(repo).gc(); - return new RepositoryStatistics(gc.getStatistics()); + return Response.ok(new RepositoryStatistics(gc.getStatistics())); } catch (GitAPIException | JGitInternalException e) { throw new ResourceConflictException(e.getMessage()); } catch (IOException e) { diff --git a/java/com/google/gerrit/server/restapi/project/GetTag.java b/java/com/google/gerrit/server/restapi/project/GetTag.java index 6d5a510ba9..6ab2f8bbc4 100644 --- a/java/com/google/gerrit/server/restapi/project/GetTag.java +++ b/java/com/google/gerrit/server/restapi/project/GetTag.java @@ -15,6 +15,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.api.projects.TagInfo; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.server.project.TagResource; import com.google.inject.Singleton; @@ -23,7 +24,7 @@ import com.google.inject.Singleton; public class GetTag implements RestReadView { @Override - public TagInfo apply(TagResource resource) { - return resource.getTagInfo(); + public Response apply(TagResource resource) { + return Response.ok(resource.getTagInfo()); } } diff --git a/java/com/google/gerrit/server/restapi/project/Index.java b/java/com/google/gerrit/server/restapi/project/Index.java index 6a95b6201a..bc4f668db5 100644 --- a/java/com/google/gerrit/server/restapi/project/Index.java +++ b/java/com/google/gerrit/server/restapi/project/Index.java @@ -59,7 +59,8 @@ public class Index implements RestModifyView reindex(rsrc.getNameKey(), input.async); if (Boolean.TRUE.equals(input.indexChildren)) { - for (ProjectInfo child : listChildProjectsProvider.get().withRecursive(true).apply(rsrc)) { + for (ProjectInfo child : + listChildProjectsProvider.get().withRecursive(true).apply(rsrc).value()) { reindex(Project.nameKey(child.name), input.async); } diff --git a/java/com/google/gerrit/server/restapi/project/ListBranches.java b/java/com/google/gerrit/server/restapi/project/ListBranches.java index e26317dad7..068b89fac2 100644 --- a/java/com/google/gerrit/server/restapi/project/ListBranches.java +++ b/java/com/google/gerrit/server/restapi/project/ListBranches.java @@ -26,6 +26,7 @@ import com.google.gerrit.extensions.common.WebLinkInfo; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.RestView; @@ -127,15 +128,16 @@ public class ListBranches implements RestReadView { } @Override - public ImmutableList apply(ProjectResource rsrc) + public Response> apply(ProjectResource rsrc) throws RestApiException, IOException, PermissionBackendException { rsrc.getProjectState().checkStatePermitsRead(); - return new RefFilter(Constants.R_HEADS) - .subString(matchSubstring) - .regex(matchRegex) - .start(start) - .limit(limit) - .filter(allBranches(rsrc)); + return Response.ok( + new RefFilter(Constants.R_HEADS) + .subString(matchSubstring) + .regex(matchRegex) + .start(start) + .limit(limit) + .filter(allBranches(rsrc))); } BranchInfo toBranchInfo(BranchResource rsrc) diff --git a/java/com/google/gerrit/server/restapi/project/ListChildProjects.java b/java/com/google/gerrit/server/restapi/project/ListChildProjects.java index a846ef87b9..9313dfc3fb 100644 --- a/java/com/google/gerrit/server/restapi/project/ListChildProjects.java +++ b/java/com/google/gerrit/server/restapi/project/ListChildProjects.java @@ -19,6 +19,7 @@ import static java.util.stream.Collectors.toList; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Project; @@ -65,7 +66,7 @@ public class ListChildProjects implements RestReadView { } @Override - public List apply(ProjectResource rsrc) + public Response> apply(ProjectResource rsrc) throws PermissionBackendException, RestApiException { if (limit < 0) { throw new BadRequestException("limit must be a positive number"); @@ -75,10 +76,10 @@ public class ListChildProjects implements RestReadView { } rsrc.getProjectState().checkStatePermitsRead(); if (recursive) { - return childProjects.list(rsrc.getNameKey()); + return Response.ok(childProjects.list(rsrc.getNameKey())); } - return directChildProjects(rsrc.getNameKey()); + return Response.ok(directChildProjects(rsrc.getNameKey())); } private List directChildProjects(Project.NameKey parent) throws RestApiException { diff --git a/java/com/google/gerrit/server/restapi/project/ListDashboards.java b/java/com/google/gerrit/server/restapi/project/ListDashboards.java index 3808a2f798..404458f8c6 100644 --- a/java/com/google/gerrit/server/restapi/project/ListDashboards.java +++ b/java/com/google/gerrit/server/restapi/project/ListDashboards.java @@ -21,6 +21,7 @@ import com.google.common.flogger.FluentLogger; import com.google.gerrit.extensions.api.projects.DashboardInfo; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Project; import com.google.gerrit.server.git.GitRepositoryManager; @@ -63,11 +64,11 @@ public class ListDashboards implements RestReadView { } @Override - public List apply(ProjectResource rsrc) + public Response> apply(ProjectResource rsrc) throws ResourceNotFoundException, IOException, PermissionBackendException { String project = rsrc.getName(); if (!inherited) { - return scan(rsrc.getProjectState(), project, true); + return Response.ok(scan(rsrc.getProjectState(), project, true)); } List> all = new ArrayList<>(); @@ -83,7 +84,7 @@ public class ListDashboards implements RestReadView { all.add(list); } } - return all; + return Response.ok(all); } private Collection tree(ProjectResource rsrc) throws PermissionBackendException { diff --git a/java/com/google/gerrit/server/restapi/project/ListProjects.java b/java/com/google/gerrit/server/restapi/project/ListProjects.java index f12e4d8ee0..4c3afaa4c3 100644 --- a/java/com/google/gerrit/server/restapi/project/ListProjects.java +++ b/java/com/google/gerrit/server/restapi/project/ListProjects.java @@ -35,6 +35,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.BinaryResult; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.extensions.restapi.Url; @@ -303,16 +304,17 @@ public class ListProjects implements RestReadView { } @Override - public Object apply(TopLevelResource resource) + public Response apply(TopLevelResource resource) throws BadRequestException, PermissionBackendException { if (format == OutputFormat.TEXT) { ByteArrayOutputStream buf = new ByteArrayOutputStream(); displayToStream(buf); - return BinaryResult.create(buf.toByteArray()) - .setContentType("text/plain") - .setCharacterEncoding(UTF_8); + return Response.ok( + BinaryResult.create(buf.toByteArray()) + .setContentType("text/plain") + .setCharacterEncoding(UTF_8)); } - return apply(); + return Response.ok(apply()); } public SortedMap apply() diff --git a/java/com/google/gerrit/server/restapi/project/ListTags.java b/java/com/google/gerrit/server/restapi/project/ListTags.java index 6b38a2e96b..e7291a47f3 100644 --- a/java/com/google/gerrit/server/restapi/project/ListTags.java +++ b/java/com/google/gerrit/server/restapi/project/ListTags.java @@ -23,6 +23,7 @@ import com.google.gerrit.extensions.api.projects.TagInfo; import com.google.gerrit.extensions.common.WebLinkInfo; import com.google.gerrit.extensions.restapi.IdString; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.reviewdb.client.Project; @@ -116,7 +117,7 @@ public class ListTags implements RestReadView { } @Override - public ImmutableList apply(ProjectResource resource) + public Response> apply(ProjectResource resource) throws IOException, ResourceNotFoundException, RestApiException, PermissionBackendException { resource.getProjectState().checkStatePermitsRead(); @@ -137,12 +138,13 @@ public class ListTags implements RestReadView { tags.sort(comparing(t -> t.ref)); - return new RefFilter(Constants.R_TAGS) - .start(start) - .limit(limit) - .subString(matchSubstring) - .regex(matchRegex) - .filter(tags); + return Response.ok( + new RefFilter(Constants.R_TAGS) + .start(start) + .limit(limit) + .subString(matchSubstring) + .regex(matchRegex) + .filter(tags)); } public TagInfo get(ProjectResource resource, IdString id) diff --git a/java/com/google/gerrit/server/restapi/project/PutBranch.java b/java/com/google/gerrit/server/restapi/project/PutBranch.java index fec8abf4e9..02fc6689c1 100644 --- a/java/com/google/gerrit/server/restapi/project/PutBranch.java +++ b/java/com/google/gerrit/server/restapi/project/PutBranch.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.api.projects.BranchInfo; import com.google.gerrit.extensions.api.projects.BranchInput; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.project.BranchResource; import com.google.inject.Singleton; @@ -25,7 +26,8 @@ import com.google.inject.Singleton; public class PutBranch implements RestModifyView { @Override - public BranchInfo apply(BranchResource rsrc, BranchInput input) throws ResourceConflictException { + public Response apply(BranchResource rsrc, BranchInput input) + throws ResourceConflictException { throw new ResourceConflictException("Branch \"" + rsrc.getRef() + "\" already exists"); } } diff --git a/java/com/google/gerrit/server/restapi/project/PutConfig.java b/java/com/google/gerrit/server/restapi/project/PutConfig.java index 150989be85..a5a7154e43 100644 --- a/java/com/google/gerrit/server/restapi/project/PutConfig.java +++ b/java/com/google/gerrit/server/restapi/project/PutConfig.java @@ -26,6 +26,7 @@ import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.RestView; @@ -108,13 +109,13 @@ public class PutConfig implements RestModifyView { } @Override - public ConfigInfo apply(ProjectResource rsrc, ConfigInput input) + public Response apply(ProjectResource rsrc, ConfigInput input) throws RestApiException, PermissionBackendException { permissionBackend .currentUser() .project(rsrc.getNameKey()) .check(ProjectPermission.WRITE_CONFIG); - return apply(rsrc.getProjectState(), input); + return Response.ok(apply(rsrc.getProjectState(), input)); } public ConfigInfo apply(ProjectState projectState, ConfigInput input) diff --git a/java/com/google/gerrit/server/restapi/project/PutTag.java b/java/com/google/gerrit/server/restapi/project/PutTag.java index 06c5157368..b6f3f24b92 100644 --- a/java/com/google/gerrit/server/restapi/project/PutTag.java +++ b/java/com/google/gerrit/server/restapi/project/PutTag.java @@ -17,13 +17,15 @@ package com.google.gerrit.server.restapi.project; import com.google.gerrit.extensions.api.projects.TagInfo; import com.google.gerrit.extensions.api.projects.TagInput; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.server.project.TagResource; public class PutTag implements RestModifyView { @Override - public TagInfo apply(TagResource resource, TagInput input) throws ResourceConflictException { + public Response apply(TagResource resource, TagInput input) + throws ResourceConflictException { throw new ResourceConflictException("Tag \"" + resource.getTagInfo().ref + "\" already exists"); } } diff --git a/java/com/google/gerrit/server/restapi/project/QueryProjects.java b/java/com/google/gerrit/server/restapi/project/QueryProjects.java index 8727df33e3..7066d9a0a5 100644 --- a/java/com/google/gerrit/server/restapi/project/QueryProjects.java +++ b/java/com/google/gerrit/server/restapi/project/QueryProjects.java @@ -19,6 +19,7 @@ import com.google.common.collect.Lists; import com.google.gerrit.extensions.common.ProjectInfo; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.MethodNotAllowedException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestReadView; import com.google.gerrit.extensions.restapi.TopLevelResource; import com.google.gerrit.index.project.ProjectData; @@ -86,9 +87,9 @@ public class QueryProjects implements RestReadView { } @Override - public List apply(TopLevelResource resource) + public Response> apply(TopLevelResource resource) throws BadRequestException, MethodNotAllowedException { - return apply(); + return Response.ok(apply()); } public List apply() throws BadRequestException, MethodNotAllowedException { diff --git a/java/com/google/gerrit/server/restapi/project/SetAccess.java b/java/com/google/gerrit/server/restapi/project/SetAccess.java index 1504d6ccde..c6919d4657 100644 --- a/java/com/google/gerrit/server/restapi/project/SetAccess.java +++ b/java/com/google/gerrit/server/restapi/project/SetAccess.java @@ -24,6 +24,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.reviewdb.client.Project; @@ -80,7 +81,7 @@ public class SetAccess implements RestModifyView apply(ProjectResource rsrc, ProjectAccessInput input) throws ResourceNotFoundException, ResourceConflictException, IOException, AuthException, BadRequestException, UnprocessableEntityException, PermissionBackendException { MetaDataUpdate.User metaDataUpdateUser = metaDataUpdateFactory.get(); @@ -138,6 +139,6 @@ public class SetAccess implements RestModifyView response = get.get().apply(target); + response.value().isDefault = true; + return response; } return Response.none(); } catch (RepositoryNotFoundException notFound) { diff --git a/java/com/google/gerrit/server/restapi/project/SetHead.java b/java/com/google/gerrit/server/restapi/project/SetHead.java index b310f16f54..5533f74011 100644 --- a/java/com/google/gerrit/server/restapi/project/SetHead.java +++ b/java/com/google/gerrit/server/restapi/project/SetHead.java @@ -20,6 +20,7 @@ import com.google.gerrit.extensions.events.HeadUpdatedListener; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.reviewdb.client.Project; @@ -63,7 +64,7 @@ public class SetHead implements RestModifyView { } @Override - public String apply(ProjectResource rsrc, HeadInput input) + public Response apply(ProjectResource rsrc, HeadInput input) throws AuthException, ResourceNotFoundException, BadRequestException, UnprocessableEntityException, IOException, PermissionBackendException { if (input == null || Strings.isNullOrEmpty(input.ref)) { @@ -109,7 +110,7 @@ public class SetHead implements RestModifyView { fire(rsrc.getNameKey(), oldHead, newHead); } - return ref; + return Response.ok(ref); } catch (RepositoryNotFoundException e) { throw new ResourceNotFoundException(rsrc.getName()); } diff --git a/java/com/google/gerrit/server/restapi/project/SetParent.java b/java/com/google/gerrit/server/restapi/project/SetParent.java index e18066e75f..0b91551589 100644 --- a/java/com/google/gerrit/server/restapi/project/SetParent.java +++ b/java/com/google/gerrit/server/restapi/project/SetParent.java @@ -25,6 +25,7 @@ import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; import com.google.gerrit.extensions.restapi.ResourceNotFoundException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.UnprocessableEntityException; import com.google.gerrit.reviewdb.client.Project; @@ -84,11 +85,11 @@ public class SetParent } @Override - public String apply(ProjectResource rsrc, ParentInput input) + public Response apply(ProjectResource rsrc, ParentInput input) throws AuthException, ResourceConflictException, ResourceNotFoundException, UnprocessableEntityException, IOException, PermissionBackendException, BadRequestException { - return apply(rsrc, input, true); + return Response.ok(apply(rsrc, input, true)); } public String apply(ProjectResource rsrc, ParentInput input, boolean checkIfAdmin) diff --git a/java/com/google/gerrit/server/update/RetryingRestCollectionModifyView.java b/java/com/google/gerrit/server/update/RetryingRestCollectionModifyView.java index 9204565352..9ed5a678b0 100644 --- a/java/com/google/gerrit/server/update/RetryingRestCollectionModifyView.java +++ b/java/com/google/gerrit/server/update/RetryingRestCollectionModifyView.java @@ -17,6 +17,7 @@ package com.google.gerrit.server.update; import com.google.gerrit.extensions.restapi.AuthException; import com.google.gerrit.extensions.restapi.BadRequestException; import com.google.gerrit.extensions.restapi.ResourceConflictException; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestCollectionModifyView; import com.google.gerrit.extensions.restapi.RestResource; @@ -31,7 +32,7 @@ public abstract class RetryingRestCollectionModifyView< } @Override - public final O apply(P parentResource, I input) + public final Response apply(P parentResource, I input) throws AuthException, BadRequestException, ResourceConflictException, Exception { RetryHelper.Options retryOptions = RetryHelper.options() @@ -42,6 +43,6 @@ public abstract class RetryingRestCollectionModifyView< (updateFactory) -> applyImpl(updateFactory, parentResource, input), retryOptions); } - protected abstract O applyImpl(BatchUpdate.Factory updateFactory, P parentResource, I input) - throws Exception; + protected abstract Response applyImpl( + BatchUpdate.Factory updateFactory, P parentResource, I input) throws Exception; } diff --git a/java/com/google/gerrit/server/update/RetryingRestModifyView.java b/java/com/google/gerrit/server/update/RetryingRestModifyView.java index b471d70a14..20cf0c9eb6 100644 --- a/java/com/google/gerrit/server/update/RetryingRestModifyView.java +++ b/java/com/google/gerrit/server/update/RetryingRestModifyView.java @@ -14,6 +14,7 @@ package com.google.gerrit.server.update; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestModifyView; import com.google.gerrit.extensions.restapi.RestResource; @@ -27,7 +28,7 @@ public abstract class RetryingRestModifyView } @Override - public final O apply(R resource, I input) throws Exception { + public final Response apply(R resource, I input) throws Exception { RetryHelper.Options retryOptions = RetryHelper.options() .caller(getClass()) @@ -37,6 +38,6 @@ public abstract class RetryingRestModifyView (updateFactory) -> applyImpl(updateFactory, resource, input), retryOptions); } - protected abstract O applyImpl(BatchUpdate.Factory updateFactory, R resource, I input) + protected abstract Response applyImpl(BatchUpdate.Factory updateFactory, R resource, I input) throws Exception; } diff --git a/java/com/google/gerrit/sshd/commands/BanCommitCommand.java b/java/com/google/gerrit/sshd/commands/BanCommitCommand.java index 415ac4c774..ee6f63590c 100644 --- a/java/com/google/gerrit/sshd/commands/BanCommitCommand.java +++ b/java/com/google/gerrit/sshd/commands/BanCommitCommand.java @@ -68,7 +68,7 @@ public class BanCommitCommand extends SshCommand { BanCommitInput.fromCommits(Lists.transform(commitsToBan, ObjectId::getName)); input.reason = reason; - BanResultInfo r = banCommit.apply(new ProjectResource(projectState, user), input); + BanResultInfo r = banCommit.apply(new ProjectResource(projectState, user), input).value(); printCommits(r.newlyBanned, "The following commits were banned"); printCommits(r.alreadyBanned, "The following commits were already banned"); printCommits(r.ignored, "The following ids do not represent commits and were ignored"); diff --git a/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java b/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java index f9a04a072e..913365b42a 100644 --- a/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java +++ b/java/com/google/gerrit/sshd/commands/CreateGroupCommand.java @@ -128,7 +128,9 @@ final class CreateGroupCommand extends SshCommand { } GroupInfo group = - createGroup.apply(TopLevelResource.INSTANCE, IdString.fromDecoded(groupName), input); + createGroup + .apply(TopLevelResource.INSTANCE, IdString.fromDecoded(groupName), input) + .value(); return groups.parse(TopLevelResource.INSTANCE, IdString.fromUrl(group.id)); } diff --git a/java/com/google/gerrit/sshd/commands/PluginLsCommand.java b/java/com/google/gerrit/sshd/commands/PluginLsCommand.java index 15142bd982..e5dad7e29d 100644 --- a/java/com/google/gerrit/sshd/commands/PluginLsCommand.java +++ b/java/com/google/gerrit/sshd/commands/PluginLsCommand.java @@ -41,7 +41,7 @@ public class PluginLsCommand extends SshCommand { @Override public void run() throws Exception { - Map output = list.apply(TopLevelResource.INSTANCE); + Map output = list.apply(TopLevelResource.INSTANCE).value(); if (format.isJson()) { format diff --git a/java/com/google/gerrit/sshd/commands/SetAccountCommand.java b/java/com/google/gerrit/sshd/commands/SetAccountCommand.java index e4ea40dee1..7509ac954d 100644 --- a/java/com/google/gerrit/sshd/commands/SetAccountCommand.java +++ b/java/com/google/gerrit/sshd/commands/SetAccountCommand.java @@ -282,7 +282,7 @@ final class SetAccountCommand extends SshCommand { private void deleteSshKeys(List sshKeys) throws RestApiException, RepositoryNotFoundException, IOException, ConfigInvalidException, PermissionBackendException { - List infos = getSshKeys.apply(rsrc); + List infos = getSshKeys.apply(rsrc).value(); if (sshKeys.contains("ALL")) { for (SshKeyInfo i : infos) { deleteSshKey(i); @@ -321,7 +321,7 @@ final class SetAccountCommand extends SshCommand { private void deleteEmail(String email) throws RestApiException, IOException, ConfigInvalidException, PermissionBackendException { if (email.equals("ALL")) { - List emails = getEmails.apply(rsrc); + List emails = getEmails.apply(rsrc).value(); for (EmailInfo e : emails) { deleteEmail.apply(new AccountResource.Email(user.asIdentifiedUser(), e.email), new Input()); } @@ -332,7 +332,7 @@ final class SetAccountCommand extends SshCommand { private void putPreferred(String email) throws RestApiException, IOException, PermissionBackendException, ConfigInvalidException { - for (EmailInfo e : getEmails.apply(rsrc)) { + for (EmailInfo e : getEmails.apply(rsrc).value()) { if (e.email.equals(email)) { putPreferred.apply(new AccountResource.Email(user.asIdentifiedUser(), email), null); return; diff --git a/java/com/google/gerrit/sshd/commands/SetParentCommand.java b/java/com/google/gerrit/sshd/commands/SetParentCommand.java index 466db4cc10..449d419e7c 100644 --- a/java/com/google/gerrit/sshd/commands/SetParentCommand.java +++ b/java/com/google/gerrit/sshd/commands/SetParentCommand.java @@ -159,7 +159,7 @@ final class SetParentCommand extends SshCommand { if (newParentKey != null) { automaticallyExcluded.addAll(getAllParents(newParentKey)); } - for (ProjectInfo child : listChildProjects.apply(new ProjectResource(parent, user))) { + for (ProjectInfo child : listChildProjects.apply(new ProjectResource(parent, user)).value()) { final Project.NameKey childName = Project.nameKey(child.name); if (!excluded.contains(childName)) { if (!automaticallyExcluded.contains(childName)) { diff --git a/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java b/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java index 30caa434fc..b41837731f 100644 --- a/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java +++ b/java/com/google/gerrit/sshd/commands/SetReviewersCommand.java @@ -141,7 +141,7 @@ public class SetReviewersCommand extends SshCommand { input.confirmed = true; String error; try { - error = postReviewers.apply(changeRsrc, input).error; + error = postReviewers.apply(changeRsrc, input).value().error; } catch (Exception e) { error = String.format("could not add %s: %s", reviewer, e.getMessage()); } diff --git a/java/com/google/gerrit/sshd/commands/ShowCaches.java b/java/com/google/gerrit/sshd/commands/ShowCaches.java index be13a84cf4..c19e790aa3 100644 --- a/java/com/google/gerrit/sshd/commands/ShowCaches.java +++ b/java/com/google/gerrit/sshd/commands/ShowCaches.java @@ -178,7 +178,8 @@ final class ShowCaches extends SshCommand { if (showJvm) { sshSummary(); - SummaryInfo summary = getSummary.setGc(gc).setJvm(showJVM).apply(new ConfigResource()); + SummaryInfo summary = + getSummary.setGc(gc).setJvm(showJVM).apply(new ConfigResource()).value(); taskSummary(summary.taskSummary); memSummary(summary.memSummary); threadSummary(summary.threadSummary); diff --git a/java/com/google/gerrit/sshd/commands/ShowQueue.java b/java/com/google/gerrit/sshd/commands/ShowQueue.java index 2a7bd6e0a5..57562a75fb 100644 --- a/java/com/google/gerrit/sshd/commands/ShowQueue.java +++ b/java/com/google/gerrit/sshd/commands/ShowQueue.java @@ -94,7 +94,7 @@ final class ShowQueue extends SshCommand { List tasks; try { - tasks = listTasks.apply(new ConfigResource()); + tasks = listTasks.apply(new ConfigResource()).value(); } catch (AuthException e) { throw die(e); } catch (PermissionBackendException e) { diff --git a/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedChildRestApiBindingsIT.java b/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedChildRestApiBindingsIT.java index b9c072c525..35be5f4e36 100644 --- a/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedChildRestApiBindingsIT.java +++ b/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedChildRestApiBindingsIT.java @@ -24,6 +24,7 @@ import com.google.gerrit.acceptance.rest.util.RestCall; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestApiModule; import com.google.gerrit.extensions.restapi.RestCollectionModifyView; @@ -107,7 +108,8 @@ public class PluginProvidedChildRestApiBindingsIT extends AbstractDaemonTest { @Override public RestView list() throws RestApiException { - return (RestReadView) resource -> ImmutableList.of("one", "two"); + return (RestReadView) + resource -> Response.ok(ImmutableList.of("one", "two")); } @Override @@ -125,24 +127,24 @@ public class PluginProvidedChildRestApiBindingsIT extends AbstractDaemonTest { static class TestPostOnCollection implements RestCollectionModifyView { @Override - public Object apply(RevisionResource parentResource, String input) throws Exception { - return "test"; + public Response apply(RevisionResource parentResource, String input) throws Exception { + return Response.ok("test"); } } @Singleton static class TestPost implements RestModifyView { @Override - public String apply(TestPluginResource resource, String input) throws Exception { - return "test"; + public Response apply(TestPluginResource resource, String input) throws Exception { + return Response.ok("test"); } } @Singleton static class TestGet implements RestReadView { @Override - public String apply(TestPluginResource resource) throws Exception { - return "test"; + public Response apply(TestPluginResource resource) throws Exception { + return Response.ok("test"); } } diff --git a/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedRootRestApiBindingsIT.java b/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedRootRestApiBindingsIT.java index 178a32656e..b447534914 100644 --- a/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedRootRestApiBindingsIT.java +++ b/javatests/com/google/gerrit/acceptance/rest/binding/PluginProvidedRootRestApiBindingsIT.java @@ -25,6 +25,7 @@ import com.google.gerrit.acceptance.rest.util.RestCall.Method; import com.google.gerrit.extensions.registration.DynamicMap; import com.google.gerrit.extensions.restapi.ChildCollection; import com.google.gerrit.extensions.restapi.IdString; +import com.google.gerrit.extensions.restapi.Response; import com.google.gerrit.extensions.restapi.RestApiException; import com.google.gerrit.extensions.restapi.RestApiModule; import com.google.gerrit.extensions.restapi.RestCollectionModifyView; @@ -157,7 +158,8 @@ public class PluginProvidedRootRestApiBindingsIT extends AbstractDaemonTest { @Override public RestView list() throws RestApiException { - return (RestReadView) resource -> ImmutableList.of("one", "two"); + return (RestReadView) + resource -> Response.ok(ImmutableList.of("one", "two")); } @Override @@ -175,24 +177,24 @@ public class PluginProvidedRootRestApiBindingsIT extends AbstractDaemonTest { static class TestPostOnCollection implements RestCollectionModifyView { @Override - public Object apply(TopLevelResource parentResource, String input) throws Exception { - return "test"; + public Response apply(TopLevelResource parentResource, String input) throws Exception { + return Response.ok("test"); } } @Singleton static class TestPost implements RestModifyView { @Override - public String apply(TestPluginResource resource, String input) throws Exception { - return "test"; + public Response apply(TestPluginResource resource, String input) throws Exception { + return Response.ok("test"); } } @Singleton static class TestGet implements RestReadView { @Override - public String apply(TestPluginResource resource) throws Exception { - return "test"; + public Response apply(TestPluginResource resource) throws Exception { + return Response.ok("test"); } } diff --git a/javatests/com/google/gerrit/server/config/ListCapabilitiesTest.java b/javatests/com/google/gerrit/server/config/ListCapabilitiesTest.java index de36ccc57d..ab376ac81a 100644 --- a/javatests/com/google/gerrit/server/config/ListCapabilitiesTest.java +++ b/javatests/com/google/gerrit/server/config/ListCapabilitiesTest.java @@ -73,7 +73,7 @@ public class ListCapabilitiesTest { @Test public void list() throws Exception { Map m = - injector.getInstance(ListCapabilities.class).apply(new ConfigResource()); + injector.getInstance(ListCapabilities.class).apply(new ConfigResource()).value(); for (String id : GlobalCapability.getAllNames()) { assertThat(m).containsKey(id); assertThat(m.get(id).id).isEqualTo(id); diff --git a/plugins/delete-project b/plugins/delete-project index 6e94a1f4f0..b618043544 160000 --- a/plugins/delete-project +++ b/plugins/delete-project @@ -1 +1 @@ -Subproject commit 6e94a1f4f09c5e0aef86bafd80be35fa8b2842e6 +Subproject commit b618043544ebc62a0730aa1bfc1a1e26011b471a