aa2d6c6886cd758b3ffb738ba532a0362c3c212a
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / timer / ScheduleTaskService.java
1 package org.commscope.tr069adapter.vesagent.timer;\r
2 \r
3 import java.util.HashMap;\r
4 import java.util.Map;\r
5 import java.util.concurrent.ScheduledFuture;\r
6 import java.util.concurrent.TimeUnit;\r
7 \r
8 import org.springframework.beans.factory.annotation.Autowired;\r
9 import org.springframework.scheduling.TaskScheduler;\r
10 import org.springframework.scheduling.annotation.EnableScheduling;\r
11 import org.springframework.scheduling.support.PeriodicTrigger;\r
12 import org.springframework.stereotype.Service;\r
13 \r
14 /**\r
15  * \r
16  * @version 1.0\r
17  * @since June 5, 2020\r
18  * @author Prashant Kumar\r
19  */\r
20 \r
21 @Service\r
22 @EnableScheduling\r
23 public class ScheduleTaskService {\r
24 \r
25   @Autowired\r
26   TaskScheduler scheduler;\r
27 \r
28   Map<String, ScheduledFuture<?>> jobsMap = new HashMap<>();\r
29 \r
30   public ScheduleTaskService(TaskScheduler scheduler) {\r
31     this.scheduler = scheduler;\r
32   }\r
33 \r
34   public void schedule(String jobId, ScheduleInfo scheduleInfo, Runnable callBackTask) {\r
35     cancelSchedule(jobId);\r
36 \r
37     PeriodicTrigger trigger =\r
38         new PeriodicTrigger(scheduleInfo.getInterval(), scheduleInfo.getTimeUnit());\r
39     trigger.setInitialDelay(scheduleInfo.getInterval());\r
40 \r
41     ScheduledFuture<?> scheduledTask = scheduler.schedule(callBackTask, trigger);\r
42     jobsMap.put(jobId, scheduledTask);\r
43   }\r
44 \r
45   public void cancelSchedule(String id) {\r
46     ScheduledFuture<?> scheduledTask = jobsMap.get(id);\r
47     if (scheduledTask != null) {\r
48       scheduledTask.cancel(true);\r
49       jobsMap.remove(id);\r
50     }\r
51   }\r
52 \r
53   public ScheduledFuture<?> getSchedule(String id) {\r
54     return jobsMap.get(id);\r
55   }\r
56 \r
57   public Long getTimeRemainingTillNextExecution(String id, TimeUnit timeUnit) {\r
58     ScheduledFuture<?> scheduledTask = jobsMap.get(id);\r
59 \r
60     if (scheduledTask != null) {\r
61       return scheduledTask.getDelay(timeUnit);\r
62     } else {\r
63       return null;\r
64     }\r
65   }\r
66 }\r