- @Inject
- public ReplyVisibilityFilter(@Nonnull PostVisibilityFilter postVisibilityFilter) {
- this.postVisibilityFilter = postVisibilityFilter;
- }
-
- /**
- * Checks whether a reply is visible to the given Sone. A reply is not
- * considered visible if one of the following statements is true:
- * <ul>
- * <li>The reply does not have a post.</li>
- * <li>The reply’s post {@link PostVisibilityFilter#isPostVisible(Sone, Post) is not visible}.</li>
- * <li>The reply’s {@link PostReply#getTime() time} is in the future.</li>
- * </ul>
- * If none of these statements is true the reply is considered visible.
- *
- * @param sone
- * The Sone that checks for a post’s visibility (may be
- * {@code null} to skip Sone-specific checks, such as trust)
- * @param reply
- * The reply to check for visibility
- * @return {@code true} if the reply is considered visible, {@code false}
- * otherwise
- */
- boolean isReplyVisible(@Nullable Sone sone, @Nonnull PostReply reply) {
- checkNotNull(reply, "reply must not be null");
- Optional<Post> post = reply.getPost();
- if (!post.isPresent()) {
- return false;
- }
- if (!postVisibilityFilter.isPostVisible(sone, post.get())) {
- return false;
- }
- return reply.getTime() <= System.currentTimeMillis();
- }