package com.manuelmaly.hn.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
public class HNPostComments implements Serializable {
private static final long serialVersionUID = -2305617988079011364L;
private List<HNCommentTreeNode> mTreeNodes;
private transient List<HNComment> mCommentsCache;
private boolean mIsTreeDirty;
private String mHeaderHtml;
private String mUserAcquiredFor;
public HNPostComments() {
mTreeNodes = new ArrayList<HNCommentTreeNode>();
}
public HNPostComments(List<HNComment> comments) {
this(comments, null, "");
}
public HNPostComments(List<HNComment> comments, String headerHtml, String userAcquiredFor) {
mTreeNodes = new ArrayList<HNCommentTreeNode>();
for (HNComment comment : comments) {
if (comment.getCommentLevel() == 0)
mTreeNodes.add(makeTreeNode(comment, comments));
}
mHeaderHtml = headerHtml;
mUserAcquiredFor = userAcquiredFor;
}
public List<HNCommentTreeNode> getTreeNodes() {
return mTreeNodes;
}
public List<HNComment> getComments() {
if (mCommentsCache == null || mIsTreeDirty) {
mCommentsCache = new ArrayList<HNComment>();
if (mTreeNodes == null)
mTreeNodes = new ArrayList<HNCommentTreeNode>();
for (HNCommentTreeNode node : mTreeNodes)
mCommentsCache.addAll(node.getVisibleComments());
mIsTreeDirty = false;
}
return mCommentsCache;
}
public String getHeaderHtml() {
return mHeaderHtml;
}
public String getUserAcquiredFor() {
return mUserAcquiredFor;
}
private HNCommentTreeNode makeTreeNode(HNComment comment, List<HNComment> allComments) {
HNCommentTreeNode node = new HNCommentTreeNode(comment);
int nodeLevel = comment.getCommentLevel();
int nodeIndex = allComments.indexOf(comment);
comment.setTreeNode(node);
for (int i = nodeIndex + 1; i < allComments.size(); i++) {
HNComment childComment = allComments.get(i);
if (childComment.getCommentLevel() > nodeLevel + 1)
continue;
if (childComment.getCommentLevel() <= nodeLevel)
break;
node.addChild(makeTreeNode(childComment, allComments));
}
return node;
}
public void toggleCommentExpanded(HNComment comment) {
if (comment == null)
return;
if (comment.getTreeNode() != null) {
comment.getTreeNode().toggleExpanded();
mIsTreeDirty = true;
}
}
}