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
14 public class Scheduler {
\r
15 private int N = 7;//TODO
\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 void calcSchedule(){
\r
32 public long nextSchedule(long now){
\r
33 long next = now + 60 * DateUtil.LEN * 1000;
\r
35 cal.setTimeInMillis(next);
\r
36 Date date = cal.getTime();
\r
37 int h = date.getHours();
\r
38 int m = date.getMinutes();
\r
39 int hm = DateUtil.getHm(h, m);
\r
40 int w = date.getDay();
\r
42 for (int i = 0; i < N; i++){
\r
43 int n = (w + i) % N;
\r
44 List<Term> l = list[n];
\r
45 int j = isContain(l, hm);
\r
50 Term t = l.get(j - 1);
\r
51 //
\8d¡
\93ú(next)
\82©
\82ç
\81Ai
\93ú
\8cã
\82Ì
\81Afrom
\8e\9e\r
52 return DateUtil.getTime(date, i, t.getFrom());
\r
55 //
\91¼
\82Ì
\97j
\93ú
\82Ì
\8fê
\8d\87\r
58 //
\8d¡
\93ú(next)
\82©
\82ç
\81Ai
\93ú
\8cã
\82Ì
\81Afrom
\8e\9e\r
59 return DateUtil.getTime(date, i, t.getFrom());
\r
67 public int isContain(List<Term> l, int hm) {
\r
71 for (int i = 0; i < l.size(); i++){
\r
75 if (from <= hm && hm <= to){
\r
85 public void makeSchedule(){
\r
90 MonitorDao dao = MonitorDao.getInstance();
\r
91 List<Monitor> mList = dao.search();
\r
92 makeSchedule(mList);
\r
95 public void makeSchedule(List<Monitor> mList){
\r
98 for (Monitor monitor : mList){
\r
103 public void clearSchedule(){
\r
104 list = new List[N];
\r
105 for (int i = 0; i < list.length; i++){
\r
106 list[i] = new ArrayList<Term>();
\r
110 public void add(List<Term>[] ll, Monitor monitor){
\r
111 Term term = new Term(monitor.getFrom(), monitor.getTo());
\r
112 for (int i = 0; i < N; i++){
\r
113 if (monitor.getWeek(i)){
\r
119 public void add(List<Term> l, Term term){
\r
121 while (i < l.size()){
\r
123 if (isContain(t, term)){
\r
124 term = add(t, term);
\r
131 Collections.sort(l, comp);
\r
134 public boolean isContain(Term t1, Term t2){
\r
135 int from1 = t1.getFrom();
\r
136 int to1 = t1.getTo();
\r
137 int from2 = t2.getFrom();
\r
138 int to2 = t2.getTo();
\r
140 if (from1 <= from2 && from2 <= to1){
\r
143 if (from1 <= to2 && to2 <= to1){
\r
146 if (from2 <= from1 && from1 <= to2){
\r
149 if (from2 <= to1 && to1 <= to2){
\r
155 public Term add(Term t1, Term t2){
\r
156 int from1 = t1.getFrom();
\r
157 int to1 = t1.getTo();
\r
158 int from2 = t2.getFrom();
\r
159 int to2 = t2.getTo();
\r
161 int from = (from1 < from2)? from1 : from2;
\r
162 int to = (to1 > to2)? to1 : to2;
\r
163 return new Term(from, to);
\r
166 public List<Term>[] getList() {
\r