VES Heartbeat and Software Management Feature
[oam/tr069-adapter.git] / ves-agent / src / main / java / org / commscope / tr069adapter / vesagent / timer / ScheduleTaskService.java
diff --git a/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/timer/ScheduleTaskService.java b/ves-agent/src/main/java/org/commscope/tr069adapter/vesagent/timer/ScheduleTaskService.java
new file mode 100644 (file)
index 0000000..aa2d6c6
--- /dev/null
@@ -0,0 +1,66 @@
+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