diff options
Diffstat (limited to 'gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java')
-rw-r--r-- | gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java | 31 |
1 files changed, 18 insertions, 13 deletions
diff --git a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java index 5aa41b1b28..1ff0fdd02d 100644 --- a/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java +++ b/gerrit-server/src/main/java/com/google/gerrit/server/change/PostHashtags.java @@ -19,10 +19,13 @@ import com.google.gerrit.common.TimeUtil; import com.google.gerrit.extensions.api.changes.HashtagsInput; 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; import com.google.gerrit.reviewdb.server.ReviewDb; +import com.google.gerrit.server.permissions.ChangePermission; +import com.google.gerrit.server.permissions.PermissionBackendException; import com.google.gerrit.server.update.BatchUpdate; +import com.google.gerrit.server.update.RetryHelper; +import com.google.gerrit.server.update.RetryingRestModifyView; import com.google.gerrit.server.update.UpdateException; import com.google.inject.Inject; import com.google.inject.Provider; @@ -30,27 +33,29 @@ import com.google.inject.Singleton; @Singleton public class PostHashtags - implements RestModifyView<ChangeResource, HashtagsInput>, UiAction<ChangeResource> { + extends RetryingRestModifyView< + ChangeResource, HashtagsInput, Response<ImmutableSortedSet<String>>> + implements UiAction<ChangeResource> { private final Provider<ReviewDb> db; - private final BatchUpdate.Factory batchUpdateFactory; private final SetHashtagsOp.Factory hashtagsFactory; @Inject PostHashtags( - Provider<ReviewDb> db, - BatchUpdate.Factory batchUpdateFactory, - SetHashtagsOp.Factory hashtagsFactory) { + Provider<ReviewDb> db, RetryHelper retryHelper, SetHashtagsOp.Factory hashtagsFactory) { + super(retryHelper); this.db = db; - this.batchUpdateFactory = batchUpdateFactory; this.hashtagsFactory = hashtagsFactory; } @Override - public Response<ImmutableSortedSet<String>> apply(ChangeResource req, HashtagsInput input) - throws RestApiException, UpdateException { + protected Response<ImmutableSortedSet<String>> applyImpl( + BatchUpdate.Factory updateFactory, ChangeResource req, HashtagsInput input) + throws RestApiException, UpdateException, PermissionBackendException { + req.permissions().check(ChangePermission.EDIT_HASHTAGS); + try (BatchUpdate bu = - batchUpdateFactory.create( - db.get(), req.getChange().getProject(), req.getControl().getUser(), TimeUtil.nowTs())) { + updateFactory.create( + db.get(), req.getChange().getProject(), req.getUser(), TimeUtil.nowTs())) { SetHashtagsOp op = hashtagsFactory.create(input); bu.addOp(req.getId(), op); bu.execute(); @@ -59,9 +64,9 @@ public class PostHashtags } @Override - public UiAction.Description getDescription(ChangeResource resource) { + public UiAction.Description getDescription(ChangeResource rsrc) { return new UiAction.Description() .setLabel("Edit Hashtags") - .setVisible(resource.getControl().canEditHashtags()); + .setVisible(rsrc.permissions().testCond(ChangePermission.EDIT_HASHTAGS)); } } |