VES Heartbeat and Software Management Feature
[oam/tr069-adapter.git] / common / src / main / java / org / commscope / tr069adapter / common / scheduler / impl / QuartzSchedulerUtil.java
1 /*\r
2  * ============LICENSE_START========================================================================\r
3  * ONAP : tr-069-adapter\r
4  * =================================================================================================\r
5  * Copyright (C) 2020 CommScope Inc Intellectual Property.\r
6  * =================================================================================================\r
7  * This tr-069-adapter software file is distributed by CommScope Inc under the Apache License,\r
8  * Version 2.0 (the "License"); you may not use this file except in compliance with the License. You\r
9  * may obtain a copy of the License at\r
10  *\r
11  * http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * This file is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,\r
14  * either express or implied. See the License for the specific language governing permissions and\r
15  * limitations under the License.\r
16  * ===============LICENSE_END=======================================================================\r
17  */\r
18 \r
19 \r
20 package org.commscope.tr069adapter.common.scheduler.impl;\r
21 \r
22 import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_APPENDER;\r
23 import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.JOB_NAME;\r
24 import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.SUB_SYSTEM;\r
25 import static org.commscope.tr069adapter.common.scheduler.impl.QuartzSchedulerConstants.TRIGGER_APPENDER;\r
26 \r
27 import java.util.List;\r
28 \r
29 import org.apache.commons.logging.Log;\r
30 import org.apache.commons.logging.LogFactory;\r
31 import org.commscope.tr069adapter.common.scheduler.ExecutionContext;\r
32 import org.commscope.tr069adapter.common.scheduler.SchedulerException;\r
33 import org.commscope.tr069adapter.common.scheduler.TimeUnit;\r
34 import org.commscope.tr069adapter.common.scheduler.TriggerInfo;\r
35 import org.commscope.tr069adapter.common.scheduler.trigger.TriggerRule;\r
36 import org.quartz.CronTrigger;\r
37 import org.quartz.JobBuilder;\r
38 import org.quartz.JobDetail;\r
39 import org.quartz.SimpleTrigger;\r
40 import org.quartz.Trigger;\r
41 import org.springframework.beans.factory.annotation.Autowired;\r
42 import org.springframework.stereotype.Component;\r
43 \r
44 @Component\r
45 public class QuartzSchedulerUtil {\r
46 \r
47   @Autowired\r
48   List<TriggerRule> triggerRules;\r
49 \r
50   private static final Log logger = LogFactory.getLog(QuartzSchedulerUtil.class);\r
51 \r
52   public void setTriggerList(List<TriggerRule> triggerRules) {\r
53     this.triggerRules = triggerRules;\r
54   }\r
55 \r
56   Trigger createTrigger(TriggerInfo triggerInfo, String triggerGroup) {\r
57     if (null == triggerInfo || null == triggerGroup || "".equals(triggerGroup))\r
58       return null;\r
59     String triggerName = triggerGroup + TRIGGER_APPENDER;\r
60     Trigger trigger = null;\r
61     for (TriggerRule rule : triggerRules) {\r
62       trigger = rule.apply(triggerInfo, triggerName, triggerGroup);\r
63       if (trigger != null)\r
64         break;\r
65     }\r
66     return trigger;\r
67   }\r
68 \r
69   Trigger createTrigger(TriggerInfo triggerInfo, String triggerName, String triggerGroup) {\r
70     if (null == triggerInfo || null == triggerGroup || "".equals(triggerGroup))\r
71       return null;\r
72     triggerName = triggerName + TRIGGER_APPENDER;\r
73     Trigger trigger = null;\r
74     for (TriggerRule rule : triggerRules) {\r
75       trigger = rule.apply(triggerInfo, triggerName, triggerGroup);\r
76       if (trigger != null)\r
77         break;\r
78     }\r
79     return trigger;\r
80   }\r
81 \r
82   JobDetail getJobDetail(ExecutionContext jobContext, String jobGroup) {\r
83     if (null == jobContext || null == jobGroup || "".equals(jobGroup))\r
84       return null;\r
85     String jobName = jobGroup + JOB_APPENDER;\r
86     JobDetail jobDetail =\r
87         JobBuilder.newJob(QuartzJob.class).withIdentity(jobName, jobGroup).build();\r
88     for (String key : jobContext.getJobDatakeySet()) {\r
89       jobDetail.getJobDataMap().put(key, jobContext.getJobData(key));\r
90     }\r
91     jobDetail.getJobDataMap().put(JOB_NAME, jobContext.getJobName());\r
92     jobDetail.getJobDataMap().put(SUB_SYSTEM, jobContext.getSubSystemName());\r
93     return jobDetail;\r
94   }\r
95 \r
96   JobDetail getJobDetail(ExecutionContext jobContext, String jobName, String jobGroup) {\r
97     if (null == jobContext || null == jobGroup || "".equals(jobGroup))\r
98       return null;\r
99     JobDetail jobDetail =\r
100         JobBuilder.newJob(QuartzJob.class).withIdentity(jobName + JOB_APPENDER, jobGroup).build();\r
101     for (String key : jobContext.getJobDatakeySet()) {\r
102       jobDetail.getJobDataMap().put(key, jobContext.getJobData(key));\r
103     }\r
104     jobDetail.getJobDataMap().put(JOB_NAME, jobContext.getJobName());\r
105     jobDetail.getJobDataMap().put(SUB_SYSTEM, jobContext.getSubSystemName());\r
106     return jobDetail;\r
107   }\r
108 \r
109   public static long getInterval(long interval, TimeUnit unit) {\r
110     long retVal = 0;\r
111     switch (unit) {\r
112       case DAYS:\r
113         retVal = interval * 24 * 60 * 60 * 1000;\r
114         break;\r
115       case HOURS:\r
116         retVal = interval * 60 * 60 * 1000;\r
117         break;\r
118       case MINUTES:\r
119         retVal = interval * 60 * 1000;\r
120         break;\r
121       case SECONDS:\r
122         retVal = interval * 1000;\r
123         break;\r
124       case MILLISECONDS:\r
125         retVal = interval * 1;\r
126         break;\r
127     }\r
128     return retVal;\r
129   }\r
130 \r
131   public TriggerInfo getTriggerInfo(Trigger trigger) {\r
132     TriggerInfo triggerInfo = new TriggerInfo();\r
133     if (trigger == null) {\r
134       return triggerInfo;\r
135     }\r
136     try {\r
137       triggerInfo.setStartDate(trigger.getStartTime());\r
138       triggerInfo.setEndDate(trigger.getEndTime());\r
139       triggerInfo.setNextFireTime(trigger.getNextFireTime());\r
140       if (trigger instanceof SimpleTrigger) {\r
141         SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;\r
142         triggerInfo.setInterval(simpleTrigger.getRepeatInterval());\r
143 \r
144       } else if (trigger instanceof CronTrigger) {\r
145         CronTrigger cronTrigger = (CronTrigger) trigger;\r
146         triggerInfo.setCronExpr(cronTrigger.getCronExpression());\r
147 \r
148       }\r
149 \r
150     } catch (SchedulerException e) {\r
151       logger.error("Error in getTriggerInfo : " + e.getMessage());\r
152     }\r
153     return triggerInfo;\r
154   }\r
155 }\r