1 package com.td.service;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Calendar;
\r
5 import java.util.Collections;
\r
6 import java.util.Comparator;
\r
7 import java.util.Date;
\r
8 import java.util.List;
\r
10 import com.td.db.Monitor;
\r
11 import com.td.db.MonitorDao;
\r
12 import com.td.utility.DateUtil;
\r
13 import com.td.utility.Debug;
\r
15 public class Scheduler {
\r
16 private static Calendar cal = Calendar.getInstance();
\r
17 private List<Term>[] list = null;
\r
18 private Comparator<Term> comp = new Comparator<Term>(){
\r
19 public int compare(Term t1, Term t2) {
\r
20 return t1.getFrom() - t2.getFrom();
\r
28 public long calcSchedule(long now){
\r
29 Debug.d(this, "start");
\r
31 long t = nextSchedule(now);
\r
32 Debug.d(this, "end");
\r
36 public long nextSchedule(long now){
\r
38 //long next = now + 60 * DateUtil.LEN * 1000;
\r
39 long next = now + 60 * 1 * 1000;
\r
41 cal.setTimeInMillis(next);
\r
42 Date date = cal.getTime();
\r
43 int h = date.getHours();
\r
44 int m = date.getMinutes();
\r
45 int hm = DateUtil.getHm(h, m);
\r
46 int w = date.getDay();
\r
48 for (int i = 0; i < DateUtil.WEEK + 1; i++){
\r
49 int n = (w + i) % DateUtil.WEEK;
\r
50 List<Term> l = list[n];
\r
51 int j = isContain(l, hm);
\r
56 Term t = l.get(j - 1);
\r
57 //
\8d¡
\93ú(next)
\82©
\82ç
\81Ai
\93ú
\8cã
\82Ì
\81Afrom
\8e\9e\r
58 return DateUtil.getTime(date, i, t.getFrom());
\r
61 //
\91¼
\82Ì
\97j
\93ú
\82Ì
\8fê
\8d\87\r
64 //
\8d¡
\93ú(next)
\82©
\82ç
\81Ai
\93ú
\8cã
\82Ì
\81Afrom
\8e\9e\r
65 return DateUtil.getTime(date, i, t.getFrom());
\r
73 public int isContain(List<Term> l, int hm) {
\r
77 for (int i = 0; i < l.size(); i++){
\r
81 if (from <= hm && hm <= to){
\r
91 public void makeSchedule(){
\r
95 Debug.d(this, "update");
\r
97 MonitorDao dao = MonitorDao.getInstance();
\r
98 List<Monitor> mList = dao.search();
\r
99 makeSchedule(mList);
\r
102 public void makeSchedule(List<Monitor> mList){
\r
105 for (Monitor monitor : mList){
\r
106 add(list, monitor);
\r
110 public void clearSchedule(){
\r
111 list = new List[DateUtil.WEEK];
\r
112 for (int i = 0; i < list.length; i++){
\r
113 list[i] = new ArrayList<Term>();
\r
117 public void add(List<Term>[] ll, Monitor monitor){
\r
118 Term term = new Term(monitor.getFrom(), monitor.getTo());
\r
119 for (int i = 0; i < DateUtil.WEEK; i++){
\r
120 if (monitor.getWeek(i)){
\r
126 public void add(List<Term> l, Term term){
\r
128 while (i < l.size()){
\r
130 if (isContain(t, term)){
\r
131 term = add(t, term);
\r
138 Collections.sort(l, comp);
\r
141 public boolean isContain(Term t1, Term t2){
\r
142 int from1 = t1.getFrom();
\r
143 int to1 = t1.getTo();
\r
144 int from2 = t2.getFrom();
\r
145 int to2 = t2.getTo();
\r
147 if (from1 <= from2 && from2 <= to1){
\r
150 if (from1 <= to2 && to2 <= to1){
\r
153 if (from2 <= from1 && from1 <= to2){
\r
156 if (from2 <= to1 && to1 <= to2){
\r
162 public Term add(Term t1, Term t2){
\r
163 int from1 = t1.getFrom();
\r
164 int to1 = t1.getTo();
\r
165 int from2 = t2.getFrom();
\r
166 int to2 = t2.getTo();
\r
168 int from = (from1 < from2)? from1 : from2;
\r
169 int to = (to1 > to2)? to1 : to2;
\r
170 return new Term(from, to);
\r
173 public List<Term>[] getList() {
\r