package net.basilwang.dao; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; import net.basilwang.config.SAXParse; import net.basilwang.config.ScoreConfig; import net.basilwang.config.ScoreConfigInTD; import net.basilwang.entity.Score; import android.content.Context; import android.database.Cursor; public class ScoreService implements IDAOService { private DAOHelper daoHelper; private String[] indexs; public ScoreService(Context context) { this.daoHelper = new DAOHelper(context); } public void save(Score score) { String sql = "INSERT INTO Scores (coursename,coursecode,coursetype,coursebelongto,scorelevel,scorepoint,score,secondmajorflag,secondscore,thirdscore,department,memo,isthirdscore,myid,semesterid) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)"; Object[] bindArgs = { score.getCourseName(), score.getCourseCode(), score.getCourseType(), score.getCourseBelongTo(), score.getScoreLevel(), score.getScorePoint(), score.getScore(), score.getSecondMajorFlag(), score.getSecondScore(), score.getThirdScore(), score.getDepartment(), score.getMemo(), score.getIsthirdscore(), score.getMyid(), getSemesterId(score.getSemesterName()) }; daoHelper.insert(sql, bindArgs); } public void delete(int accountId, String semesterName) { String sql = "delete from scores where myid=? and semesterid = ?"; Object[] bindArgs = { accountId, getSemesterId(semesterName) }; daoHelper.delete(sql, bindArgs); } public Cursor getScores(int myid) { String sql = "select _id,coursename,coursecode,coursetype,coursebelongto," + "scorelevel,scorepoint,score,secondmajorflag,secondscore,thirdscore,department,memo,isthirdscore,myid from scores where myid=?"; String[] bindArgs = { String.valueOf(myid) }; return daoHelper.query(sql, bindArgs); } public String[] getOrInitScoreConfigInTDIndexs( List<ScoreConfigInTD> scoreConfigInTDS) { int size = getScoreConfigInTDHaveIndex(scoreConfigInTDS).size() + 1; indexs = new String[size]; for (ScoreConfigInTD scoreConfigInTD : scoreConfigInTDS) { if (scoreConfigInTD.getVisible() == null || scoreConfigInTD.getVisible().equals("false")) { continue; } indexs[Integer.valueOf(scoreConfigInTD.getIndex())] = scoreConfigInTD .getDbfield(); } return indexs; } public List<ScoreConfigInTD> getScoreConfigInTDHaveIndex( List<ScoreConfigInTD> scoreConfigInTDS) { List<ScoreConfigInTD> scoreConfigInTdIndexs = new LinkedList<ScoreConfigInTD>(); for (ScoreConfigInTD scoreConfigInTD : scoreConfigInTDS) { if (scoreConfigInTD.getVisible() == null || scoreConfigInTD.getVisible().equals("false")) { continue; } scoreConfigInTdIndexs.add(scoreConfigInTD); } return scoreConfigInTdIndexs; } private String constructSQL() { List<ScoreConfigInTD> scoreConfigInTDS = getScoreConfig() .getScoreConfigintds(); getOrInitScoreConfigInTDIndexs(scoreConfigInTDS); String sql = "SELECT _id"; for (int i = 1; i < indexs.length; i++) { sql += "," + indexs[i].toLowerCase(); } sql += " FROM scores WHERE myid=? AND semesterid = ?"; return sql; } private String getSemesterId(String semesterName) { semesterName = semesterName.replace('–', '-'); String sql = "SELECT _id FROM semesters WHERE semestername =? "; String[] bindArgs = { semesterName }; Cursor result = daoHelper.query(sql, bindArgs); if (result.moveToNext()) { return result.getString(result.getColumnIndex("_id")); } daoHelper.closeDB(); return "0"; } public List<Score> getScores(String semesterName, int myid) { String sql = constructSQL(); String[] bindArgs = { String.valueOf(myid), getSemesterId(semesterName) }; Cursor result = daoHelper.query(sql, bindArgs); List<Score> list = new ArrayList<Score>(); while (result.moveToNext()) { Score score = new Score(); for (int i = 1; i < indexs.length; i++) { String value = result.getString(i); score.setter(indexs[i], value); } list.add(score); } daoHelper.closeDB(); return list; } private ScoreConfig getScoreConfig() { return SAXParse.getTAConfiguration().getSelectedCollege() .getScoreConfig(); } public void formatAndSaveScoreById(String semesterName, String scoreStr, int accountId) { // 2012-07-10 basilwang delete the related scores of the seleced // semester value if (scoreStr == null) { return; } delete(accountId, semesterName); ScoreConfig scoreConfig = getScoreConfig(); Pattern trPattern = Pattern.compile(scoreConfig.getTr()); Matcher matcher; matcher = trPattern.matcher(scoreStr); Matcher tdMatcher = null; matcher.find(); while (matcher.find()) { String tr = matcher.group(); Pattern tdPattern = Pattern.compile(scoreConfig.getTd()); tdMatcher = tdPattern.matcher(tr); Score score = new Score(semesterName); score.setMyid(accountId); List<ScoreConfigInTD> scoreConfigIntds = scoreConfig .getScoreConfigintds(); for (ScoreConfigInTD scoreConfigIntd : scoreConfigIntds) { tdMatcher.find(); if (scoreConfigIntd.getDbfield() == null) { continue; } score.setter(scoreConfigIntd.getDbfield(), tdMatcher.group(1)); } save(score); } } public void deleteAccount() { String sql = "DELETE FROM scores"; daoHelper.delete(sql); } }