package com.athena.asm.viewmodel;
import java.util.ArrayList;
import java.util.List;
import com.athena.asm.Adapter.PostListAdapter;
import com.athena.asm.data.Post;
import com.athena.asm.data.Subject;
import com.athena.asm.fragment.SubjectListFragment;
import com.athena.asm.util.SmthSupport;
public class PostListViewModel extends BaseViewModel {
private Subject m_currentSubject;
private List<Post> m_postList;
private boolean m_isSubjectExpand = false;
private boolean m_isToRefreshBoard = false;
private int m_currentPageNo = 1;
// defined in SubjectListFragment ==> BOARD_TYPE_*
private int m_boardType = SubjectListFragment.BOARD_TYPE_SUBJECT;
private boolean m_isPreloadFinished = false;
private List<Post> m_preloadPostList;
private Subject m_preloadSubject;
private SmthSupport m_smthSupport;
private PostListAdapter m_postListAdapter;
public static final String POSTLIST_PROPERTY_NAME = "PostList";
public PostListViewModel() {
m_smthSupport = SmthSupport.getInstance();
}
public SmthSupport getSmthSupport() {
return m_smthSupport;
}
public Subject getCurrentSubject() {
return m_currentSubject;
}
public void setCurrentSubject(Subject currentSubject) {
m_currentSubject = currentSubject;
}
public List<Post> getPostList() {
return m_postList;
}
public void setPostList(List<Post> postList) {
m_postList = postList;
if (m_postList != null && m_postList.size() > 0) {
m_currentSubject.setTitle(m_postList.get(0).getTitle());
}
}
public void ensurePostExists() {
if (m_postList == null) {
m_postList = new ArrayList<Post>();
Post post = new Post();
post.setAuthor("guest");
post.setSubjectID(m_currentSubject.getSubjectID());
post.setBoardID(m_currentSubject.getBoardID());
post.setBoard(m_currentSubject.getBoardEngName());
post.setContent("无法加载该贴");
m_postList.add(post);
}
}
public int getCurrentPageNumber() {
return m_currentPageNo;
}
public void setCurrentPageNumber(int pageNumber) {
if (pageNumber < 1 || pageNumber > m_currentSubject.getTotalPageNo()) {
return;
}
m_currentPageNo = pageNumber;
}
public void updateCurrentPageNumberFromSubject() {
m_currentPageNo = m_currentSubject.getCurrentPageNo();
}
public void updateSubjectCurrentPageNumberFromCurrentPageNumber() {
m_currentSubject.setCurrentPageNo(m_currentPageNo);
}
public void updateSubjectIDFromTopicSubjectID() {
m_currentSubject.setSubjectID(m_currentSubject.getTopicSubjectID());
}
public void setSubjectCurrentPageNumber(int pageNumber) {
m_currentSubject.setCurrentPageNo(pageNumber);
}
public int getNextPageNumber() {
int nextPageNumber = m_currentPageNo + 1;
if (nextPageNumber > m_currentSubject.getTotalPageNo()) {
return -1;
}
return nextPageNumber;
}
public int getTotalPageNumber() {
return m_currentSubject.getTotalPageNo();
}
public void gotoFirstPage() {
m_currentPageNo = 1;
}
public void gotoLastPage() {
m_currentPageNo = m_currentSubject.getTotalPageNo();
}
public void gotoNextPage() {
m_currentPageNo++;
if (m_currentPageNo > m_currentSubject.getTotalPageNo()) {
m_currentPageNo = m_currentSubject.getTotalPageNo();
}
}
public void gotoPrevPage() {
m_currentPageNo--;
if (m_currentPageNo < 1) {
m_currentPageNo = 1;
}
}
public String getSubjectTitle() {
if (m_boardType == SubjectListFragment.BOARD_TYPE_SUBJECT) {
return "[" + m_currentPageNo + "/"
+ m_currentSubject.getTotalPageNo() + "]"
+ m_currentSubject.getTitle();
}
else {
return m_currentSubject.getTitle();
}
}
public int getBoardType() {
return m_boardType;
}
public void setBoardType(int boardType) {
m_boardType = boardType;
}
public Subject getPreloadSubject() {
return m_preloadSubject;
}
public void updatePreloadSubjectFromCurrentSubject() {
m_preloadSubject = new Subject(m_currentSubject);
}
public void updateCurrentSubjectFromPreloadSubject() {
m_currentSubject = m_preloadSubject;
}
public List<Post> getPreloadPostList() {
return m_preloadPostList;
}
public void setPreloadPostList(List<Post> preloadPostList) {
m_preloadPostList = preloadPostList;
}
public void updatePostListFromPreloadPostList() {
m_postList = m_preloadPostList;
m_preloadPostList = null;
}
public boolean isPreloadFinished() {
return m_isPreloadFinished;
}
public void setIsPreloadFinished(boolean isPreloadFinished) {
m_isPreloadFinished = isPreloadFinished;
}
public boolean isToRefreshBoard() {
return m_isToRefreshBoard;
}
public void setIsToRefreshBoard(boolean isToRefreshBoard) {
m_isToRefreshBoard = isToRefreshBoard;
}
public boolean updateSubject(Subject subject) {
if (m_isSubjectExpand) {
m_currentSubject = null;
m_isSubjectExpand = false;
}
boolean isNewSubject = true;
if (m_currentSubject != null) {
isNewSubject = m_currentSubject.getSubjectID() == null ||
!m_currentSubject.getSubjectID().equals(subject.getSubjectID()) ||
m_currentSubject.getCurrentPageNo() != subject.getCurrentPageNo();
}
if (isNewSubject) {
setCurrentSubject(subject);
updateCurrentPageNumberFromSubject();
updatePreloadSubjectFromCurrentSubject();
}
return isNewSubject;
}
public void notifyPostListChanged() {
notifyViewModelChange(this, POSTLIST_PROPERTY_NAME);
}
public void clear() {
m_currentSubject = null;
m_postList = null;
m_isToRefreshBoard = false;
m_currentPageNo = 1;
m_boardType = SubjectListFragment.BOARD_TYPE_SUBJECT;
m_isPreloadFinished = false;
m_preloadPostList = null;
m_preloadSubject = null;
}
public boolean isSubjectExpand() {
return m_isSubjectExpand;
}
public void setSubjectExpand(boolean isSubjectExpand) {
this.m_isSubjectExpand = isSubjectExpand;
}
public PostListAdapter getPostListAdapter() {
return m_postListAdapter;
}
public void setPostListAdapter(PostListAdapter m_postListAdapter) {
this.m_postListAdapter = m_postListAdapter;
}
}