08e24f816e0f1c86d374eb1f14b9b69d728cf78b
[integration.git] /
1 /*
2  * ============LICENSE_START=======================================================
3  * PNF-REGISTRATION-HANDLER
4  * ================================================================================
5  * Copyright (C) 2018 Nokia. All rights reserved.
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  * ============LICENSE_END=========================================================
19  */
20 package org.onap.pnfsimulator.simulator.scheduler;
21
22
23 import static org.onap.pnfsimulator.simulator.scheduler.EventJob.BODY;
24 import static org.onap.pnfsimulator.simulator.scheduler.EventJob.CLIENT_ADAPTER;
25 import static org.onap.pnfsimulator.simulator.scheduler.EventJob.EVENT_ID;
26 import static org.onap.pnfsimulator.simulator.scheduler.EventJob.KEYWORDS_HANDLER;
27 import static org.onap.pnfsimulator.simulator.scheduler.EventJob.TEMPLATE_NAME;
28 import static org.onap.pnfsimulator.simulator.scheduler.EventJob.VES_URL;
29 import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
30
31 import com.google.gson.JsonObject;
32
33 import java.io.IOException;
34 import java.net.MalformedURLException;
35 import java.security.GeneralSecurityException;
36 import java.util.List;
37 import java.util.Optional;
38 import java.util.stream.Collectors;
39 import org.onap.pnfsimulator.simulator.KeywordsHandler;
40 import org.onap.pnfsimulator.simulator.client.HttpClientAdapterImpl;
41 import org.onap.pnfsimulator.simulator.client.utils.ssl.SSLAuthenticationHelper;
42 import org.quartz.JobBuilder;
43 import org.quartz.JobDataMap;
44 import org.quartz.JobDetail;
45 import org.quartz.JobExecutionContext;
46 import org.quartz.JobKey;
47 import org.quartz.Scheduler;
48 import org.quartz.SchedulerException;
49 import org.quartz.SimpleTrigger;
50 import org.quartz.TriggerBuilder;
51 import org.springframework.beans.factory.annotation.Autowired;
52 import org.springframework.stereotype.Component;
53
54 @Component
55 public class EventScheduler {
56
57
58     private final Scheduler scheduler;
59     private final KeywordsHandler keywordsHandler;
60     private final SSLAuthenticationHelper SSLAuthenticationHelper;
61
62     @Autowired
63     public EventScheduler(Scheduler scheduler, KeywordsHandler keywordsHandler, SSLAuthenticationHelper SSLAuthenticationHelper) {
64         this.scheduler = scheduler;
65         this.keywordsHandler = keywordsHandler;
66         this.SSLAuthenticationHelper = SSLAuthenticationHelper;
67     }
68
69     public String scheduleEvent(String vesUrl, Integer repeatInterval, Integer repeatCount,
70         String templateName, String eventId, JsonObject body)
71             throws SchedulerException, IOException, GeneralSecurityException {
72
73         JobDetail jobDetail = createJobDetail(vesUrl, templateName, eventId, body);
74         SimpleTrigger trigger = createTrigger(repeatInterval, repeatCount);
75
76         scheduler.scheduleJob(jobDetail, trigger);
77         return jobDetail.getKey().getName();
78     }
79
80     public boolean cancelAllEvents() throws SchedulerException {
81         List<JobKey> jobKeys = getActiveJobsKeys();
82         return scheduler.deleteJobs(jobKeys);
83     }
84
85     public boolean cancelEvent(String jobName) throws SchedulerException {
86         Optional<JobKey> activeJobKey = getActiveJobsKeys().stream().filter(e -> e.getName().equals(jobName)).findFirst();
87         return activeJobKey.isPresent() && scheduler.deleteJob(activeJobKey.get());
88     }
89
90     private SimpleTrigger createTrigger(int interval, int repeatCount) {
91         return TriggerBuilder.newTrigger()
92             .withSchedule(simpleSchedule()
93                 .withIntervalInSeconds(interval)
94                 .withRepeatCount(repeatCount - 1))
95             .build();
96     }
97
98     private JobDetail createJobDetail(String vesUrl, String templateName, String eventId, JsonObject body) throws IOException, GeneralSecurityException {
99         JobDataMap jobDataMap = new JobDataMap();
100         jobDataMap.put(TEMPLATE_NAME, templateName);
101         jobDataMap.put(VES_URL, vesUrl);
102         jobDataMap.put(EVENT_ID, eventId);
103         jobDataMap.put(KEYWORDS_HANDLER, keywordsHandler);
104         jobDataMap.put(BODY, body);
105         jobDataMap.put(CLIENT_ADAPTER, new HttpClientAdapterImpl(vesUrl, SSLAuthenticationHelper));
106
107         return JobBuilder
108             .newJob(EventJob.class)
109             .withDescription(templateName)
110             .usingJobData(jobDataMap)
111             .build();
112     }
113
114     private List<JobKey> getActiveJobsKeys() throws SchedulerException {
115         return scheduler.getCurrentlyExecutingJobs()
116             .stream()
117             .map(JobExecutionContext::getJobDetail)
118             .map(JobDetail::getKey)
119             .collect(Collectors.toList());
120     }
121 }