package net.basilwang.utils; import java.util.ArrayList; import java.util.List; import net.basilwang.entity.Curriculum; public class FilterCurriculums { public List<Curriculum> filterCurriculum(int week, List<Curriculum> curriculums) { if (curriculums.size() == 0) { return curriculums; } removeByWeekType(curriculums, week); removeBySemesterPeriod(curriculums, week); fixCurriculumList(curriculums); return curriculums; } /** * Example:1234;abcd;;hijk ---> 1234;abcd;hijk * * @param names * @return */ private String[] removeBlankSemicolon(String name) { if (name.contains(";;")) { return name.replace(";;", ";").split("\\;"); } return name.split("\\;"); } private List<Curriculum> getModifiedCurriculumList(Curriculum c) { String[] names = removeBlankSemicolon(c.getName()); String[] rawInfos = c.getRawInfo().split("\\;"); String[] intervalTypes = c.getIntervalType().split("\\|"); String[] semesterPeriods = c.getSemesterPeriod().split("\\|"); List<Curriculum> list = new ArrayList<Curriculum>(names.length); for (int i = 0; i < names.length; i++) { Curriculum temp = new Curriculum(names[i], rawInfos[i], semesterPeriods[i], intervalTypes[i]); list.add(temp); } return list; } /** * * If week is odd week, return even week */ private String getOppositeWeek(int week) { if (week % 2 == 0) { return "1"; } else { return "2"; } } /** * 修改不符合单双周情况的课程:例如:单周|双周|单周 -> 单周|单周 */ private void modfiyCurriculumByWeek(Curriculum c, int week) { List<Curriculum> modifiedCurriculums = getModifiedCurriculumList(c); String weekMark = getOppositeWeek(week); int num = 0; while (num < modifiedCurriculums.size()) { Curriculum temp = modifiedCurriculums.get(num); if (temp.getIntervalType().equals(weekMark) == true) { modifiedCurriculums.remove(num); continue; } num++; } setCurriculumProerty(c, modifiedCurriculums); } public void setCurriculumProerty(Curriculum c, List<Curriculum> list) { c.setName(getCuriiculumNameByList(list)); c.setRawInfo(getCurriculumRawInfoByList(list)); c.setIntervalType(getCurriculumIntervalTypeByList(list)); c.setSemesterPeriod(getCurriculumSemesterPeriodByList(list)); } public String getCurriculumSemesterPeriodByList(List<Curriculum> list) { StringBuilder semesterPeroid = new StringBuilder(); for (int i = 0; i < list.size(); i++) { if (i > 0) { semesterPeroid.append("|"); } semesterPeroid.append(list.get(i).getSemesterPeriod()); } return semesterPeroid.toString(); } public String getCurriculumIntervalTypeByList(List<Curriculum> list) { StringBuilder intervalType = new StringBuilder(); for (int i = 0; i < list.size(); i++) { if (i > 0) { intervalType.append("|"); } intervalType.append(list.get(i).getIntervalType()); } return intervalType.toString(); } public String getCurriculumRawInfoByList(List<Curriculum> list) { StringBuilder rawInfo = new StringBuilder(); for (int i = 0; i < list.size(); i++) { if (i > 0) { rawInfo.append(";"); } rawInfo.append(list.get(i).getRawInfo()); } return rawInfo.toString(); } public String getCuriiculumNameByList(List<Curriculum> list) { StringBuilder name = new StringBuilder(); for (int i = 0; i < list.size(); i++) { if (i > 0) { name.append(";"); } name.append(list.get(i).getName()); } return name.toString(); } private void removeByWeekType(List<Curriculum> curriculums, int week) { for (int index = 0; index < curriculums.size(); index++) { Curriculum c = curriculums.get(index); if (c.getIntervalType().equals("")) { continue; } modfiyCurriculumByWeek(c, week); } } private void removeBySemesterPeriod(List<Curriculum> curriculums, int week) { for (int index = 0; index < curriculums.size(); index++) { Curriculum c = curriculums.get(index); if (c.getSemesterPeriod().equals("")) { continue; } modfiyCurriculumBySemesterPeroid(c, week); } } private void modfiyCurriculumBySemesterPeroid(Curriculum c, int week) { List<Curriculum> modifiedCurriculums = getModifiedCurriculumList(c); int num = 0; while (num < modifiedCurriculums.size()) { Curriculum temp = modifiedCurriculums.get(num); int beginWeek = getBeginWeek(temp); int endWeek = getEndWeek(temp); if (week < beginWeek || week > endWeek) { modifiedCurriculums.remove(num); continue; } num++; } setCurriculumProerty(c, modifiedCurriculums); } private int getBeginWeek(Curriculum c) { String[] weeks = c.getSemesterPeriod().split("\\-"); return Integer.valueOf(weeks[0]); } private int getEndWeek(Curriculum c) { String[] weeks = c.getSemesterPeriod().split("\\-"); return Integer.valueOf(weeks[1]); } /** * delete empty curriculum and fix rawInfo * */ private void fixCurriculumList(List<Curriculum> list) { int num = 0; while (num < list.size()) { Curriculum temp = list.get(num); if (temp.getName().equals("")) { list.remove(num); continue; } if (temp.getRawInfo().contains(";")) { temp.setRawInfo(temp.getRawInfo().replace(";", "\n")); } num++; } } }