1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 package org.apache.james.fetchmail;
23
24 import java.util.ArrayList;
25 import java.util.Iterator;
26
27 import org.apache.avalon.cornerstone.services.scheduler.PeriodicTimeTrigger;
28 import org.apache.avalon.cornerstone.services.scheduler.TimeScheduler;
29 import org.apache.avalon.framework.activity.Disposable;
30 import org.apache.avalon.framework.activity.Initializable;
31 import org.apache.avalon.framework.configuration.Configurable;
32 import org.apache.avalon.framework.configuration.Configuration;
33 import org.apache.avalon.framework.configuration.ConfigurationException;
34 import org.apache.avalon.framework.container.ContainerUtil;
35 import org.apache.avalon.framework.logger.AbstractLogEnabled;
36 import org.apache.avalon.framework.service.ServiceException;
37 import org.apache.avalon.framework.service.ServiceManager;
38 import org.apache.avalon.framework.service.Serviceable;
39
40
41
42
43
44
45
46 public class FetchScheduler
47 extends AbstractLogEnabled
48 implements Serviceable, Configurable, Initializable, Disposable, FetchSchedulerMBean {
49
50
51
52
53 private Configuration conf;
54
55
56
57
58 private ServiceManager m_manager;
59
60
61
62
63 private TimeScheduler scheduler;
64
65
66
67
68 private volatile boolean enabled = false;
69
70 private ArrayList theFetchTaskNames = new ArrayList();
71
72 public void setScheduler(TimeScheduler scheduler) {
73 this.scheduler = scheduler;
74 }
75
76
77
78
79 public void service(ServiceManager comp) throws ServiceException
80 {
81 m_manager = comp;
82 }
83
84
85
86
87 public void configure(Configuration conf) throws ConfigurationException
88 {
89 this.conf = conf;
90 }
91
92
93
94
95 public void initialize() throws Exception
96 {
97 enabled = conf.getAttributeAsBoolean("enabled", false);
98 if (enabled)
99 {
100 TimeScheduler scheduler = (TimeScheduler) m_manager.lookup(TimeScheduler.ROLE);
101 setScheduler(scheduler);
102
103 Configuration[] fetchConfs = conf.getChildren("fetch");
104 for (int i = 0; i < fetchConfs.length; i++)
105 {
106
107 Configuration fetchConf = fetchConfs[i];
108 String fetchTaskName = fetchConf.getAttribute("name");
109 Integer interval = new Integer(fetchConf.getChild("interval").getValue());
110
111 FetchMail fetcher = new FetchMail();
112
113
114 ContainerUtil.enableLogging(fetcher,getLogger().getChildLogger(fetchTaskName));
115 ContainerUtil.service(fetcher,m_manager);
116 ContainerUtil.configure(fetcher,fetchConf);
117
118
119 PeriodicTimeTrigger fetchTrigger =
120 new PeriodicTimeTrigger(0, interval.intValue());
121 scheduler.addTrigger(fetchTaskName, fetchTrigger, fetcher);
122 theFetchTaskNames.add(fetchTaskName);
123 }
124
125 if (getLogger().isInfoEnabled()) getLogger().info("FetchMail Started");
126 System.out.println("FetchMail Started");
127 }
128 else
129 {
130 if (getLogger().isInfoEnabled()) getLogger().info("FetchMail Disabled");
131 System.out.println("FetchMail Disabled");
132 }
133 }
134
135
136
137
138 public void dispose()
139 {
140 if (enabled)
141 {
142 getLogger().info("FetchMail dispose...");
143 Iterator nameIterator = theFetchTaskNames.iterator();
144 while (nameIterator.hasNext())
145 {
146 scheduler.removeTrigger((String) nameIterator.next());
147 }
148 getLogger().info("FetchMail ...dispose end");
149 }
150 }
151
152
153
154
155
156
157 public final boolean isEnabled() {
158 return enabled;
159 }
160
161 }