use of org.ambraproject.rhino.view.comment.CommentOutputView in project rhino by PLOS.
the class CommentCrudServiceImpl method createView.
private CommentOutputView createView(Comment comment) {
Article article = comment.getArticle();
Collection<Comment> articleComments = fetchAllComments(article);
return new CommentOutputView.Factory(new CompetingInterestPolicy(runtimeConfiguration), articleComments, article).buildView(comment);
}
use of org.ambraproject.rhino.view.comment.CommentOutputView in project rhino by PLOS.
the class CommentCrudServiceImpl method createComment.
@Override
public ServiceResponse<CommentOutputView> createComment(Optional<ArticleIdentifier> articleId, CommentInputView input) {
final Optional<String> parentCommentUri = Optional.ofNullable(input.getParentCommentId());
final Article article;
final Comment parentComment;
if (parentCommentUri.isPresent()) {
parentComment = readComment(CommentIdentifier.create(parentCommentUri.get()));
if (parentComment == null) {
throw new RestClientException("Parent comment not found: " + parentCommentUri, HttpStatus.BAD_REQUEST);
}
article = parentComment.getArticle();
ArticleIdentifier articleDoiFromDb = ArticleIdentifier.create(parentComment.getArticle().getDoi());
if (!articleId.isPresent()) {
articleId = Optional.of(articleDoiFromDb);
} else if (!articleId.get().equals(articleDoiFromDb)) {
String message = String.format("Parent comment (%s) not from declared article (%s).", parentCommentUri.get(), articleId.get());
throw new RestClientException(message, HttpStatus.BAD_REQUEST);
}
} else {
// The comment is a root-level reply to an article (no parent comment).
if (!articleId.isPresent()) {
throw new RestClientException("Must provide articleId or parentCommentUri", HttpStatus.BAD_REQUEST);
}
article = articleCrudService.readArticle(articleId.get());
parentComment = null;
}
// comment receives same DOI prefix as article
String doiPrefix = extractDoiPrefix(articleId.get());
// generate a new DOI out of a random UUID
UUID uuid = UUID.randomUUID();
Doi createdCommentUri = Doi.create(doiPrefix + "annotation/" + uuid);
Comment created = new Comment();
created.setArticle(article);
created.setParent(parentComment);
created.setCommentUri(createdCommentUri.getName());
created.setUserProfileID(Long.valueOf(Strings.nullToEmpty(input.getCreatorUserId())));
created.setTitle(Strings.nullToEmpty(input.getTitle()));
created.setBody(Strings.nullToEmpty(input.getBody()));
created.setHighlightedText(Strings.nullToEmpty(input.getHighlightedText()));
created.setCompetingInterestBody(Strings.nullToEmpty(input.getCompetingInterestStatement()));
created.setIsRemoved(Boolean.valueOf(Strings.nullToEmpty(input.getIsRemoved())));
hibernateTemplate.save(created);
// the new comment can't have any children yet
List<Comment> childComments = ImmutableList.of();
CompetingInterestPolicy competingInterestPolicy = new CompetingInterestPolicy(runtimeConfiguration);
CommentOutputView.Factory viewFactory = new CommentOutputView.Factory(competingInterestPolicy, childComments, article);
CommentOutputView view = viewFactory.buildView(created);
return ServiceResponse.reportCreated(view);
}
use of org.ambraproject.rhino.view.comment.CommentOutputView in project rhino by PLOS.
the class CommentCrudServiceImpl method serveComments.
@Override
public ServiceResponse<List<CommentOutputView>> serveComments(ArticleIdentifier articleId) throws IOException {
Article article = articleCrudService.readArticle(articleId);
Collection<Comment> comments = fetchAllComments(article);
CommentOutputView.Factory factory = new CommentOutputView.Factory(new CompetingInterestPolicy(runtimeConfiguration), comments, article);
List<CommentOutputView> views = comments.stream().filter(comment -> comment.getParent() == null).sorted(CommentOutputView.BY_DATE).map(factory::buildView).collect(Collectors.toList());
return ServiceResponse.serveView(views);
}
Aggregations