import java.util.Date;\r
import java.util.List;\r
\r
+import com.td.db.Keyword;\r
+import com.td.db.KeywordDao;\r
import com.td.db.Monitor;\r
import com.td.db.MonitorDao;\r
+import com.td.db.Train;\r
+import com.td.db.TrainDao;\r
import com.td.utility.DateUtil;\r
import com.td.utility.Debug;\r
\r
public class Scheduler {\r
private static Calendar cal = Calendar.getInstance();\r
private List<Term>[] list = null;\r
- private Comparator<Term> comp = new Comparator<Term>(){\r
+ private List<Keyword> keywords = null;\r
+ private List<Train> trains = null;\r
+ private Comparator<Term> comp = new Comparator<Term>() {\r
public int compare(Term t1, Term t2) {\r
return t1.getFrom() - t2.getFrom();\r
}\r
};\r
- \r
- public Scheduler(){\r
+\r
+ public Scheduler() {\r
\r
}\r
- \r
- public long calcSchedule(long now){\r
- Debug.d(this, "start");\r
+\r
+ public void init() {\r
+ Debug.d(this, "start init");\r
makeSchedule();\r
- long t = nextSchedule(now);\r
+ makeTrains();\r
+ makeKeywords();\r
+ Debug.d(this, "end init");\r
+ }\r
+\r
+ public long calcSchedule(long now, int len) {\r
+ Debug.d(this, "start");\r
+ long t = nextSchedule(now, len);\r
Debug.d(this, "end");\r
return t;\r
}\r
\r
- public long nextSchedule(long now){\r
- // TODO\r
- //long next = now + 60 * DateUtil.LEN * 1000;\r
- long next = now + 60 * 1 * 1000;\r
- \r
+ public long nextSchedule(long now, int len) {\r
+ long next = now + 60 * len * 1000;\r
+\r
cal.setTimeInMillis(next);\r
Date date = cal.getTime();\r
int h = date.getHours();\r
int m = date.getMinutes();\r
int hm = DateUtil.getHm(h, m);\r
int w = date.getDay();\r
- \r
- for (int i = 0; i < DateUtil.WEEK + 1; i++){\r
+\r
+ for (int i = 0; i < DateUtil.WEEK + 1; i++) {\r
int n = (w + i) % DateUtil.WEEK;\r
List<Term> l = list[n];\r
int j = isContain(l, hm);\r
- if (j == 0){\r
+ if (i == 0 && j == 0) {\r
+ // \8e\9f\89ñ\8bN\93®\8e\9e(next)\82ª\81A\83X\83P\83W\83\85\81[\83\8b\93à\82Å\82 \82é\r
return next;\r
}\r
- if (j > 0){\r
+ if (j > 0) {\r
Term t = l.get(j - 1);\r
- // \8d¡\93ú(next)\82©\82ç\81Ai\93ú\8cã\82Ì\81Afrom\8e\9e\r
- return DateUtil.getTime(date, i, t.getFrom());\r
+ // \8d¡\93ú(next)\82Ìfrom\8e\9e(next\82æ\82è\8cã\82Ì\8e\9e\8d\8f)\r
+ return DateUtil.getTime(date, i, t.getFrom()).getTimeInMillis();\r
}\r
- if (i > 0){\r
+ if (i > 0) {\r
// \91¼\82Ì\97j\93ú\82Ì\8fê\8d\87\r
- if (l.size() > 0){\r
+ if (l.size() > 0) {\r
Term t = l.get(0);\r
// \8d¡\93ú(next)\82©\82ç\81Ai\93ú\8cã\82Ì\81Afrom\8e\9e\r
- return DateUtil.getTime(date, i, t.getFrom());\r
+ return DateUtil.getTime(date, i, t.getFrom())\r
+ .getTimeInMillis();\r
}\r
- \r
}\r
}\r
return -1;\r
public int isContain(List<Term> l, int hm) {\r
int from;\r
int to;\r
- \r
- for (int i = 0; i < l.size(); i++){\r
+\r
+ for (int i = 0; i < l.size(); i++) {\r
Term t = l.get(i);\r
from = t.getFrom();\r
to = t.getTo();\r
- if (from <= hm && hm <= to){\r
+ if (from <= hm && hm <= to) {\r
return 0;\r
}\r
- if (hm < from){\r
+ if (hm < from) {\r
return i + 1;\r
}\r
- } \r
+ }\r
return -1;\r
}\r
\r
- public void makeSchedule(){\r
- if (list != null){\r
+ public void makeSchedule() {\r
+ if (list != null) {\r
return;\r
}\r
- Debug.d(this, "update");\r
+ Debug.d(this, "update schedule");\r
\r
MonitorDao dao = MonitorDao.getInstance();\r
List<Monitor> mList = dao.search();\r
makeSchedule(mList);\r
}\r
- \r
- public void makeSchedule(List<Monitor> mList){\r
+\r
+ public void makeTrains() {\r
+ if (trains != null) {\r
+ return;\r
+ }\r
+ Debug.d(this, "update trains");\r
+\r
+ TrainDao dao = TrainDao.getInstance();\r
+ trains = dao.search(true);\r
+ }\r
+\r
+ public void makeKeywords() {\r
+ if (keywords != null) {\r
+ return;\r
+ }\r
+ Debug.d(this, "update keywords");\r
+\r
+ KeywordDao dao = KeywordDao.getInstance();\r
+ keywords = dao.search();\r
+ }\r
+\r
+ public List<Term>[] getList() {\r
+ return list;\r
+ }\r
+\r
+ public List<Train> getTrains() {\r
+ return trains;\r
+ }\r
+\r
+ public List<Keyword> getKeywords() {\r
+ return keywords;\r
+ }\r
+\r
+ public void makeSchedule(List<Monitor> mList) {\r
clearSchedule();\r
- \r
- for (Monitor monitor : mList){\r
+\r
+ for (Monitor monitor : mList) {\r
add(list, monitor);\r
- } \r
+ }\r
}\r
- \r
- public void clearSchedule(){\r
+\r
+ public void clearSchedule() {\r
list = new List[DateUtil.WEEK];\r
- for (int i = 0; i < list.length; i++){\r
+ for (int i = 0; i < list.length; i++) {\r
list[i] = new ArrayList<Term>();\r
}\r
}\r
- \r
- public void add(List<Term>[] ll, Monitor monitor){\r
+\r
+ public void add(List<Term>[] ll, Monitor monitor) {\r
Term term = new Term(monitor.getFrom(), monitor.getTo());\r
- for (int i = 0; i < DateUtil.WEEK; i++){\r
- if (monitor.getWeek(i)){\r
+ for (int i = 0; i < DateUtil.WEEK; i++) {\r
+ if (monitor.getWeek(i)) {\r
add(ll[i], term);\r
}\r
}\r
}\r
- \r
- public void add(List<Term> l, Term term){\r
+\r
+ public void add(List<Term> l, Term term) {\r
int i = 0;\r
- while (i < l.size()){\r
+ while (i < l.size()) {\r
Term t = l.get(i);\r
- if (isContain(t, term)){\r
+ if (isContain(t, term)) {\r
term = add(t, term);\r
l.remove(i);\r
continue;\r
l.add(term);\r
Collections.sort(l, comp);\r
}\r
- \r
- public boolean isContain(Term t1, Term t2){\r
+\r
+ public boolean isContain(Term t1, Term t2) {\r
int from1 = t1.getFrom();\r
int to1 = t1.getTo();\r
int from2 = t2.getFrom();\r
int to2 = t2.getTo();\r
\r
- if (from1 <= from2 && from2 <= to1){\r
+ if (from1 <= from2 && from2 <= to1) {\r
return true;\r
}\r
- if (from1 <= to2 && to2 <= to1){\r
+ if (from1 <= to2 && to2 <= to1) {\r
return true;\r
}\r
- if (from2 <= from1 && from1 <= to2){\r
+ if (from2 <= from1 && from1 <= to2) {\r
return true;\r
}\r
- if (from2 <= to1 && to1 <= to2){\r
+ if (from2 <= to1 && to1 <= to2) {\r
return true;\r
}\r
return false;\r
}\r
\r
- public Term add(Term t1, Term t2){\r
+ public Term add(Term t1, Term t2) {\r
int from1 = t1.getFrom();\r
int to1 = t1.getTo();\r
int from2 = t2.getFrom();\r
int to2 = t2.getTo();\r
- \r
- int from = (from1 < from2)? from1 : from2;\r
- int to = (to1 > to2)? to1 : to2;\r
- return new Term(from, to);\r
- }\r
\r
- public List<Term>[] getList() {\r
- return list;\r
+ int from = (from1 < from2) ? from1 : from2;\r
+ int to = (to1 > to2) ? to1 : to2;\r
+ return new Term(from, to);\r
}\r
-\r
}\r