package cn.edu.zafu.jwc.service;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.litepal.crud.DataSupport;
import cn.edu.zafu.jwc.model.Course;
import cn.edu.zafu.jwc.util.CommonUtil;
/**
* Course���ҵ��������
*
* @author lizhangqu
* @date 2015-2-1
*/
public class CourseService {
/**
* ����һ�ڿγ�
*
* @param course
* @return
*/
public boolean save(Course course) {
return course.save();
}
/**
* ��ѯ���пγ�
*
* @return
*/
public List<Course> findAll() {
return DataSupport.findAll(Course.class);
}
/**
* ������ҳ���ؽ�������γ̲�����
*
* @param content
* @return
*/
public String parseCourse(String content) {
StringBuilder result = new StringBuilder();
Document doc = Jsoup.parse(content);
Elements elements = doc.select("table#Table1");
Element element = elements.get(0).child(0);
//�Ƴ�һЩ��������
element.child(1).remove();
element.child(1).child(0).remove();
element.child(5).child(0).remove();
element.child(9).child(0).remove();
int rowNum = element.childNodeSize() - 1;
for (int i = 1; i < rowNum; i++) {
Element row = element.child(i);
int columnNum = row.childNodeSize() - 2;
for (int j = 1; j < columnNum; j++) {
Element column = row.child(j);
if (!column.html().equals(" ")) {
result.append(column.html()+ "\n\n");
splitCourse(column.html());//����ȡ�γ�������ܰ�����ڿΣ����зָ�
}
}
}
return result.toString();
}
/**
* ���õ�˫��
* @param week
* @param course
*/
public void setEveryWeekByChinese(String week, Course course) {
// 1�����ܣ�2����˫��
if (week != null) {
if (week.equals("����"))
course.setEveryWeek(1);
else if (week.equals("˫��"))
course.setEveryWeek(2);
}
// Ĭ��ֵΪ0������ÿ��
}
/**
* ���ݴ������Ŀγ̸�ʽת��Ϊ��Ӧ��ʵ���ಢ����
* @param sub
* @return
*/
private Course storeCourseByResult(String sub) {
//�ܶ���1,2��{��4-16��} ��,1,2,4,16,null
//{��2-10��|3��/��} null,null,null,2,10,3��/��
//�ܶ���1,2��{��4-16��|˫��} ��,1,2,4,16,˫��
//�ܶ���1��{��4-16��} ��,1,null,4,16,null
//�ܶ���1��{��4-16��|˫��} ��,1,null,4,16,˫��
// str��ʽ���ϣ�����ֻ�Ǽ���ÿ���ζ�ֻ�����ڿΣ�ʵ���������ں��Ľڣ�ģʽ��Ҫ�Ķ�������ƥ��ģʽ��������
// String reg="��.��(\\d{1,2}),(\\d{1,2})��\\{��(\\d{1,2})-(\\d{1,2})��\\}";
//String reg = "��(.)��(\\d{1,2}),(\\d{1,2})��\\{��(\\d{1,2})-(\\d{1,2})��\\|?((.��))?\\}";
String reg = "��?(.)?��?(\\d{1,2})?,?(\\d{1,2})?��?\\{��(\\d{1,2})-(\\d{1,2})��\\|?((.*��))?\\}";
String splitPattern = "<br />";
System.out.println(sub);
String[] temp = sub.split(splitPattern);
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(temp[1]);
matcher.matches();
Course course = new Course();
course.setCourseName(temp[0]);
course.setCourseTime(temp[1]);
course.setTeacher(temp[2]);
try{
//�������Խ�磬��û�н�ʦ
course.setClasssroom(temp[3]);
}catch(ArrayIndexOutOfBoundsException e){
course.setClasssroom("��ʦ");
}
System.out.println(temp[1]);
course.setDayOfWeek(CommonUtil.getDayOfWeek(matcher.group(1)));
course.setStartSection(Integer.parseInt(matcher.group(2)));
if(null!=matcher.group(3))
course.setEndSection(Integer.parseInt(matcher.group(3)));
else
course.setEndSection(Integer.parseInt(matcher.group(2)));
course.setStartWeek(Integer.parseInt(matcher.group(4)));
course.setEndWeek(Integer.parseInt(matcher.group(5)));
String t = matcher.group(6);
setEveryWeekByChinese(t, course);
save(course);
return course;
}
/**
*
* ��ȡ�γ̸�ʽ�����ܰ�����ڿ�
* @param str
* @return
*/
private int splitCourse(String str) {
String pattern = "<br /><br />";
String[] split = str.split(pattern);
if (split.length > 1) {// �������һ�ڿ�
for (int i = 0; i < split.length; i++) {
if(!(split[i].startsWith("<br />")&&split[i].endsWith("<br />"))){
storeCourseByResult(split[i]);//���浥�ڿ�
}
else{
//<br />�Ļ���������γ̣�<br />���յ�10��{��17-17��}<br />���ΰ<br />
//���ϸ�ʽ�������
int brLength="<br />".length();
String substring = split[i].substring(brLength, split[i].length()-brLength);
storeCourseByResult(substring);//���浥�ڿ�
}
}
return split.length;
} else {
storeCourseByResult(str);//����
return 1;
}
}
}