private int mStdId;
//leaf 0 是根 1是叶子
private boolean[] aryNodeStatus = new boolean[100];
private List<CourseIsBuy> ListBuyTree = new ArrayList<CourseIsBuy>();
public void CreateCourseBuyRec(Course cs, boolean isBuy, boolean isRoot) {
CourseIsBuy ss = new CourseIsBuy();
ss.setCs(cs);
ss.setIsBuyed(isBuy);
ss.setIsRootCourse(isRoot);
System.out.println(ss.getCs().getCname()+" isbuy:"+ss.isIsBuyed());
ListBuyTree.add(ss);
}
public List<CourseIsBuy> findTreeForBuy(int stdId) {
mStdId = stdId;
ListBuyTree.clear();
List<Course> list = (List<Course>) stdCourseDao.findStdCourseByPid(0);
if(list==null) return ListBuyTree;
for (Course course : list) {
//不是叶子
//0是叶子 1非叶子
if (course.getLeaf().equals("1")) {
boolean bIsBuy = stdCourseDao.findStdCourseByScId(stdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, bIsBuy);
aryNodeStatus[0] = true;
this.treeBuy(course.getCid(), 0, aryNodeStatus, bIsBuy);
} else {
boolean bIsBuy = stdCourseDao.findStdCourseByScId(stdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, false);
}
}
return ListBuyTree;
}
/**
* function :找到整个树并找到已购的课程
*
* @param:
*/
private void treeBuy(Integer cid, Integer level, boolean[] aryIsLastNode,
boolean isBuyFlag) {
int index = 0;
List<Course> list = (List<Course>) stdCourseDao.findStdCourseByPid(cid);
if (list==null) return;
for (Course course : list) {
String symbol = "";
String symbolf = " ";
index++;
// 先画上级节点延续下来的"|"+空格,空格具体数目由层数决定
for (int lev = 0; lev < level; lev++) {
if (aryIsLastNode[lev] == false)
symbolf += "│ ";
else
symbolf += " ";
}
// 是否为最后一个节点
if (index == list.size()) {
symbol = "└";
} else {
symbol = "├";
}
String cname = symbolf + symbol + course.getCname();
course.setCname(cname);
boolean bIsBuy = false;
if (course.getLeaf().equals("0")) {
// 判断一下他的上级是否已经是被购买了
//Course cs, boolean isBuy, boolean isRoot
//isBuyFlag false
if (!isBuyFlag) {
bIsBuy = stdCourseDao.findStdCourseByScId(mStdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, bIsBuy);
isBuyFlag = bIsBuy;
}else{
CreateCourseBuyRec(course, true, false);
}
} else {
// 判断一下他的上级是否已经是被购买了
//!isBuyFlag==true 上级没被购买 isBuyFlag==false上级被购买
if (!isBuyFlag) {
//不显示横线
//这里上级没被购买
bIsBuy = stdCourseDao.findStdCourseByScId(mStdId,
course.getCid());
CreateCourseBuyRec(course, bIsBuy, bIsBuy);
isBuyFlag = bIsBuy;
} else {
//显示横线
CreateCourseBuyRec(course, true, false);
}
course.setLevel(level + 1);
if (index == list.size()) {
aryIsLastNode[level] = true;
} else {
aryIsLastNode[level] = false;
}
treeBuy(course.getCid(), course.getLevel(), aryIsLastNode,
isBuyFlag);
}
}
}