package com.manuelmaly.hn.model;
import java.io.Serializable;
import java.util.ArrayList;
public class HNCommentTreeNode implements Serializable {
private static final long serialVersionUID = 1089928137259687565L;
private HNComment mComment;
private ArrayList<HNCommentTreeNode> mChildren;
private HNCommentTreeNode mParent;
private boolean mIsExpanded;
public HNCommentTreeNode(HNComment comment) {
mComment = comment;
mChildren = new ArrayList<HNCommentTreeNode>();
mIsExpanded = true;
}
public void addChild(HNCommentTreeNode child) {
mChildren.add(child);
child.setParent(this);
}
public void setParent(HNCommentTreeNode parent) {
mParent = parent;
}
public HNComment getComment() {
return mComment;
}
public HNCommentTreeNode getParent() {
return mParent;
}
public HNCommentTreeNode getRootNode() {
HNCommentTreeNode mRootNode;
if (mParent == null) {
mRootNode = this;
} else {
HNCommentTreeNode mCandidateRootNode = this;
while (mCandidateRootNode.getParent() != null) {
mCandidateRootNode = mCandidateRootNode.getParent();
}
mRootNode = mCandidateRootNode;
}
return mRootNode;
}
public ArrayList<HNCommentTreeNode> getChildren() {
return mChildren;
}
public ArrayList<HNComment> getVisibleComments() {
ArrayList<HNComment> visibleComments = new ArrayList<HNComment>();
visibleComments.add(getComment());
if (isExpanded()) {
for (HNCommentTreeNode child : mChildren)
visibleComments.addAll(child.getVisibleComments());
}
return visibleComments;
}
public boolean hasChildren() {
return mChildren != null && mChildren.size() > 0;
}
public boolean isExpanded() {
return mIsExpanded;
}
public void toggleExpanded() {
mIsExpanded = !mIsExpanded;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((mComment == null) ? 0 : mComment.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
HNCommentTreeNode other = (HNCommentTreeNode) obj;
if (mComment == null) {
if (other.mComment != null)
return false;
} else if (!mComment.equals(other.mComment))
return false;
return true;
}
}