RevisionApi: Offer get{Comments,Drafts}AsList() methods
Current revision api only exposes getter methods for comments and drafts
that return Map<String, List<CommentInfo>> with unset path attribute in
CommentInfo container.
While this is fine for the need of change screen, that leads to
obfuscated client code when only list of comments is needed:
1. call gApi.changes().id(changeId).revision(rev).comments()
2. iterate over the result map
2.1. retrieve the key
2.2. set path attribute in the CommentInfo container
3. create, fill and return result list of CommentInfo instances with
re-filled path attribute.
This change offers missing methods that return list of comment infos
with filled path attributes.
Change-Id: Ie154c772f27dc601049cdddffb0c35a20f3f03e9
This commit is contained in:
@@ -505,6 +505,19 @@ public class RevisionIT extends AbstractDaemonTest {
|
|||||||
CommentInfo comment = Iterables.getOnlyElement(out.get(FILE_NAME));
|
CommentInfo comment = Iterables.getOnlyElement(out.get(FILE_NAME));
|
||||||
assertThat(comment.message).isEqualTo(in.message);
|
assertThat(comment.message).isEqualTo(in.message);
|
||||||
assertThat(comment.author.email).isEqualTo(admin.email);
|
assertThat(comment.author.email).isEqualTo(admin.email);
|
||||||
|
assertThat(comment.path).isNull();
|
||||||
|
|
||||||
|
List<CommentInfo> list = gApi.changes()
|
||||||
|
.id(r.getChangeId())
|
||||||
|
.revision(r.getCommit().name())
|
||||||
|
.commentsAsList();
|
||||||
|
assertThat(list).hasSize(1);
|
||||||
|
|
||||||
|
CommentInfo comment2 = list.get(0);
|
||||||
|
assertThat(comment2.path).isEqualTo(FILE_NAME);
|
||||||
|
assertThat(comment2.line).isEqualTo(comment.line);
|
||||||
|
assertThat(comment2.message).isEqualTo(comment.message);
|
||||||
|
assertThat(comment2.author.email).isEqualTo(comment.author.email);
|
||||||
|
|
||||||
assertThat(gApi.changes()
|
assertThat(gApi.changes()
|
||||||
.id(r.getChangeId())
|
.id(r.getChangeId())
|
||||||
|
|||||||
@@ -50,6 +50,9 @@ public interface RevisionApi {
|
|||||||
Map<String, List<CommentInfo>> comments() throws RestApiException;
|
Map<String, List<CommentInfo>> comments() throws RestApiException;
|
||||||
Map<String, List<CommentInfo>> drafts() throws RestApiException;
|
Map<String, List<CommentInfo>> drafts() throws RestApiException;
|
||||||
|
|
||||||
|
List<CommentInfo> commentsAsList() throws RestApiException;
|
||||||
|
List<CommentInfo> draftsAsList() throws RestApiException;
|
||||||
|
|
||||||
DraftApi createDraft(DraftInput in) throws RestApiException;
|
DraftApi createDraft(DraftInput in) throws RestApiException;
|
||||||
DraftApi draft(String id) throws RestApiException;
|
DraftApi draft(String id) throws RestApiException;
|
||||||
|
|
||||||
@@ -147,6 +150,16 @@ public interface RevisionApi {
|
|||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CommentInfo> commentsAsList() throws RestApiException {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CommentInfo> draftsAsList() throws RestApiException {
|
||||||
|
throw new NotImplementedException();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, List<CommentInfo>> drafts() throws RestApiException {
|
public Map<String, List<CommentInfo>> drafts() throws RestApiException {
|
||||||
throw new NotImplementedException();
|
throw new NotImplementedException();
|
||||||
|
|||||||
@@ -297,6 +297,15 @@ class RevisionApiImpl implements RevisionApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CommentInfo> commentsAsList() throws RestApiException {
|
||||||
|
try {
|
||||||
|
return listComments.getComments(revision);
|
||||||
|
} catch (OrmException e) {
|
||||||
|
throw new RestApiException("Cannot retrieve comments", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<String, List<CommentInfo>> drafts() throws RestApiException {
|
public Map<String, List<CommentInfo>> drafts() throws RestApiException {
|
||||||
try {
|
try {
|
||||||
@@ -306,6 +315,15 @@ class RevisionApiImpl implements RevisionApi {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public List<CommentInfo> draftsAsList() throws RestApiException {
|
||||||
|
try {
|
||||||
|
return listDrafts.getComments(revision);
|
||||||
|
} catch (OrmException e) {
|
||||||
|
throw new RestApiException("Cannot retrieve drafts", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DraftApi draft(String id) throws RestApiException {
|
public DraftApi draft(String id) throws RestApiException {
|
||||||
try {
|
try {
|
||||||
|
|||||||
@@ -16,7 +16,9 @@ package com.google.gerrit.server.change;
|
|||||||
|
|
||||||
import static com.google.gerrit.server.PatchLineCommentsUtil.COMMENT_INFO_ORDER;
|
import static com.google.gerrit.server.PatchLineCommentsUtil.COMMENT_INFO_ORDER;
|
||||||
|
|
||||||
|
import com.google.common.base.Function;
|
||||||
import com.google.common.base.Strings;
|
import com.google.common.base.Strings;
|
||||||
|
import com.google.common.collect.FluentIterable;
|
||||||
import com.google.gerrit.extensions.client.Comment.Range;
|
import com.google.gerrit.extensions.client.Comment.Range;
|
||||||
import com.google.gerrit.extensions.client.Side;
|
import com.google.gerrit.extensions.client.Side;
|
||||||
import com.google.gerrit.extensions.common.CommentInfo;
|
import com.google.gerrit.extensions.common.CommentInfo;
|
||||||
@@ -96,6 +98,27 @@ class CommentJson {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<CommentInfo> formatAsList(Iterable<PatchLineComment> l)
|
||||||
|
throws OrmException {
|
||||||
|
final AccountLoader accountLoader = fillAccounts
|
||||||
|
? accountLoaderFactory.create(true)
|
||||||
|
: null;
|
||||||
|
List<CommentInfo> out = FluentIterable
|
||||||
|
.from(l)
|
||||||
|
.transform(new Function<PatchLineComment, CommentInfo>() {
|
||||||
|
@Override
|
||||||
|
public CommentInfo apply(PatchLineComment c) {
|
||||||
|
return toCommentInfo(c, accountLoader);
|
||||||
|
}
|
||||||
|
}).toSortedList(COMMENT_INFO_ORDER);
|
||||||
|
|
||||||
|
if (accountLoader != null) {
|
||||||
|
accountLoader.fill();
|
||||||
|
}
|
||||||
|
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
|
||||||
private CommentInfo toCommentInfo(PatchLineComment c, AccountLoader loader) {
|
private CommentInfo toCommentInfo(PatchLineComment c, AccountLoader loader) {
|
||||||
CommentInfo r = new CommentInfo();
|
CommentInfo r = new CommentInfo();
|
||||||
if (fillPatchSet) {
|
if (fillPatchSet) {
|
||||||
|
|||||||
@@ -59,4 +59,11 @@ public class ListRevisionDrafts implements RestReadView<RevisionResource> {
|
|||||||
.setFillAccounts(includeAuthorInfo())
|
.setFillAccounts(includeAuthorInfo())
|
||||||
.format(listComments(rsrc));
|
.format(listComments(rsrc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<CommentInfo> getComments(RevisionResource rsrc)
|
||||||
|
throws OrmException {
|
||||||
|
return commentJson.get()
|
||||||
|
.setFillAccounts(includeAuthorInfo())
|
||||||
|
.formatAsList(listComments(rsrc));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user