--- /dev/null
+package org.commscope.tr069adapter.vesagent.timer;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+import java.util.concurrent.ScheduledFuture;\r
+import java.util.concurrent.TimeUnit;\r
+\r
+import org.springframework.beans.factory.annotation.Autowired;\r
+import org.springframework.scheduling.TaskScheduler;\r
+import org.springframework.scheduling.annotation.EnableScheduling;\r
+import org.springframework.scheduling.support.PeriodicTrigger;\r
+import org.springframework.stereotype.Service;\r
+\r
+/**\r
+ * \r
+ * @version 1.0\r
+ * @since June 5, 2020\r
+ * @author Prashant Kumar\r
+ */\r
+\r
+@Service\r
+@EnableScheduling\r
+public class ScheduleTaskService {\r
+\r
+ @Autowired\r
+ TaskScheduler scheduler;\r
+\r
+ Map<String, ScheduledFuture<?>> jobsMap = new HashMap<>();\r
+\r
+ public ScheduleTaskService(TaskScheduler scheduler) {\r
+ this.scheduler = scheduler;\r
+ }\r
+\r
+ public void schedule(String jobId, ScheduleInfo scheduleInfo, Runnable callBackTask) {\r
+ cancelSchedule(jobId);\r
+\r
+ PeriodicTrigger trigger =\r
+ new PeriodicTrigger(scheduleInfo.getInterval(), scheduleInfo.getTimeUnit());\r
+ trigger.setInitialDelay(scheduleInfo.getInterval());\r
+\r
+ ScheduledFuture<?> scheduledTask = scheduler.schedule(callBackTask, trigger);\r
+ jobsMap.put(jobId, scheduledTask);\r
+ }\r
+\r
+ public void cancelSchedule(String id) {\r
+ ScheduledFuture<?> scheduledTask = jobsMap.get(id);\r
+ if (scheduledTask != null) {\r
+ scheduledTask.cancel(true);\r
+ jobsMap.remove(id);\r
+ }\r
+ }\r
+\r
+ public ScheduledFuture<?> getSchedule(String id) {\r
+ return jobsMap.get(id);\r
+ }\r
+\r
+ public Long getTimeRemainingTillNextExecution(String id, TimeUnit timeUnit) {\r
+ ScheduledFuture<?> scheduledTask = jobsMap.get(id);\r
+\r
+ if (scheduledTask != null) {\r
+ return scheduledTask.getDelay(timeUnit);\r
+ } else {\r
+ return null;\r
+ }\r
+ }\r
+}\r