1d0c58a72d3395f344cc21f3c528057ec87447ab
[portal/sdk.git] /
1 /*-
2  * ================================================================================
3  * eCOMP Portal SDK
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ================================================================================
19  */
20 package org.openecomp.portalsdk.workflow.services;
21
22 import java.text.DateFormat;
23 import java.text.SimpleDateFormat;
24 import java.util.ArrayList;
25 import java.util.Date;
26 import java.util.List;
27
28 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
29 import org.openecomp.portalsdk.core.service.DataAccessService;
30 import org.openecomp.portalsdk.workflow.domain.WorkflowSchedule;
31 import org.openecomp.portalsdk.workflow.scheduler.WorkFlowScheduleRegistry;
32 import org.quartz.JobDetail;
33 import org.quartz.Trigger;
34 import org.springframework.beans.factory.annotation.Autowired;
35 import org.springframework.context.ApplicationContext;
36 import org.springframework.scheduling.quartz.CronTriggerFactoryBean;
37 import org.springframework.scheduling.quartz.SchedulerFactoryBean;
38 import org.springframework.stereotype.Service;
39 import org.springframework.transaction.annotation.Transactional;
40
41
42
43 @Service("workflowScheduleService")
44 @Transactional
45
46 public class WorkflowScheduleServiceImpl implements WorkflowScheduleService{
47         
48         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WorkflowScheduleServiceImpl.class);
49
50         
51         @Autowired
52         private DataAccessService  dataAccessService;
53         
54         @Autowired
55         private WorkFlowScheduleRegistry workflowRegistry;
56         
57         @Autowired
58         private ApplicationContext appContext;
59         
60
61         public List<WorkflowSchedule> findAll() {
62                 
63         /*      List<WorkflowSchedule> allworkflows = getDataAccessService().getList(WorkflowSchedule.class, null);
64                 for (WorkflowSchedule ws : allworkflows) {
65                         
66                         System.out.println("Key:"+ws.getWorkflowKey()+" "+"CronDetails:"+ws.getStartdatetimecron());
67                 } */
68                 @SuppressWarnings("unchecked")
69                 List<WorkflowSchedule> list = getDataAccessService().getList(WorkflowSchedule.class, null);
70                 return list;
71         }
72         
73         
74         public void saveWorkflowSchedule(WorkflowSchedule ws){
75                 
76                 getDataAccessService().saveDomainObject(ws, null);
77                 logger.info(EELFLoggerDelegate.debugLogger, ("Workflow Scheduled " + ws.getId() + " " + ws.getEndDateTime()));
78                 triggerWorkflowScheduling((SchedulerFactoryBean)appContext.getBean(SchedulerFactoryBean.class),ws);
79                 
80         }
81         
82         public void triggerWorkflowScheduling(SchedulerFactoryBean schedulerBean, WorkflowSchedule ws) {
83                 
84                 try {
85                         final CronTriggerFactoryBean triggerBean = workflowRegistry.setUpTrigger(ws.getId(), ws.getServerUrl(), ws.getWorkflowKey(),ws.getArguments(),ws.getCronDetails(), ws.getStartDateTime(),ws.getEndDateTime());
86                         schedulerBean.getScheduler().scheduleJob((JobDetail)triggerBean.getJobDataMap().get("jobDetail"),triggerBean.getObject());
87                 } catch (Exception e) {
88                         logger.debug(EELFLoggerDelegate.debugLogger, ("Error scheduling work flow with Id" + ws.getId() + e.getMessage()));
89                 }
90                 
91         }
92         
93         public List<Trigger> triggerWorkflowScheduling() {
94                 
95                  Date date = new Date();
96                  List<Trigger> triggers = new ArrayList<Trigger>();
97                  
98                  DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
99
100                 if (getDataAccessService() != null) {
101                         @SuppressWarnings("unchecked")
102                         List<WorkflowSchedule> allWorkflows = getDataAccessService()
103                                         .executeQuery("From  WorkflowSchedule where endDateTime > '" + dateFormat.format(date) + "'", null);
104
105                         for (WorkflowSchedule ws : allWorkflows) {
106                                 logger.info(EELFLoggerDelegate.debugLogger, ("Workflow Scheduled " + ws.getId() + "/ End Time: " + ws.getEndDateTime()));
107                 
108                                 try {
109                                         
110                                         final CronTriggerFactoryBean triggerBean = workflowRegistry.setUpTrigger(ws.getId(), ws.getServerUrl(), ws.getWorkflowKey(),ws.getArguments(), ws.getCronDetails(), ws.getStartDateTime(),ws.getEndDateTime());
111                                         
112                                         triggers.add(triggerBean.getObject());
113                                         
114                                         //schedulerBean.getScheduler().scheduleJob(trigger);
115                                 
116                                 
117                                 } catch (Exception e) {
118                                         logger.debug(EELFLoggerDelegate.debugLogger, ("Error scheduling work flow with Id" + ws.getId() + e.getMessage()));
119                                 }
120                         
121                         
122                         }
123                 }
124                 
125                 return triggers;
126         }
127         
128         
129         public DataAccessService getDataAccessService() {
130                 return dataAccessService;
131         }
132
133
134         public void setDataAccessService(DataAccessService dataAccessService) {
135                 this.dataAccessService = dataAccessService;
136         }
137
138         @Override
139         public WorkflowSchedule getWorkflowScheduleByKey(Long key) {
140                 return  (WorkflowSchedule)(getDataAccessService().getDomainObject(WorkflowSchedule.class, key, null));
141         }
142 }
143
144