Fix critical and major sonar violations
[aai/sparky-be.git] / sparkybe-onap-service / src / main / java / org / onap / aai / sparky / sync / config / SyncControllerConfig.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
4  * ================================================================================
5  * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6  * Copyright © 2017-2018 Amdocs
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21 package org.onap.aai.sparky.sync.config;
22
23 import java.text.DateFormat;
24 import java.text.ParseException;
25 import java.text.SimpleDateFormat;
26 import java.util.Arrays;
27 import java.util.Calendar;
28 import java.util.Date;
29 import java.util.List;
30 import java.util.TimeZone;
31 import java.util.regex.Matcher;
32 import java.util.regex.Pattern;
33
34 import org.onap.aai.sparky.sync.SynchronizerConstants;
35
36 public class SyncControllerConfig {
37
38   private static final String UNKNOWN_CONTROLLER_NAME = "UnknownControllerName";
39   private final SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z");
40
41   private String controllerName;
42   private boolean enabled;
43   private int syncTaskDelayInMs;
44   private int syncTaskFrequencyInDays;
45   
46   private int numSyncControllerWorkers;
47   private boolean runOnceSyncEnabled;
48   private boolean periodicSyncEnabled;
49   
50   private String targetSyncStartTimeStamp;
51
52   private int numInternalSyncWorkers;
53   private int numSyncElasticWorkers;
54   private int numSyncActiveInventoryWorkers;
55   
56   /*
57    * calculated variables based on incoming config
58    */
59   private String timeZoneOfSyncStartTimeStamp;
60   private int syncTaskStartTimeHr;
61   private int syncTaskStartTimeMin;
62   private int syncTaskStartTimeSec;
63   
64   
65
66   public SyncControllerConfig() {
67     controllerName = UNKNOWN_CONTROLLER_NAME;
68     enabled = false;
69     syncTaskDelayInMs = 0;
70     syncTaskFrequencyInDays = 365;
71     numSyncControllerWorkers = 1;
72     runOnceSyncEnabled = false;
73     periodicSyncEnabled = false;
74     targetSyncStartTimeStamp = SynchronizerConstants.DEFAULT_START_TIMESTAMP;
75     numInternalSyncWorkers = 2;
76     numSyncElasticWorkers = 5;
77     numSyncActiveInventoryWorkers = 5;
78   }
79
80   protected void initializeSyncTimeParameters() {
81
82     if (syncTaskDelayInMs < 0) {
83       throw new IllegalArgumentException("syncTaskDelayInMs must >= 0");
84     }
85
86     Pattern pattern = Pattern.compile(SynchronizerConstants.TIMESTAMP24HOURS_PATTERN);
87     Matcher matcher = pattern.matcher(targetSyncStartTimeStamp);
88     if (!matcher.matches()) {
89       throw new IllegalArgumentException("Invalid time format for targetSyncStartTimeStamp");
90     }
91
92     List<String> timestampVal = Arrays.asList(targetSyncStartTimeStamp.split(" "));
93
94     if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
95
96       // Need both time and timezone offset
97       timeZoneOfSyncStartTimeStamp = timestampVal
98           .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
99
100       String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
101       DateFormat format = new SimpleDateFormat("HH:mm:ss");
102
103       Date date = null;
104
105       try {
106         date = format.parse(time);
107       } catch (ParseException parseException) {
108         throw new IllegalArgumentException(parseException);
109       }
110
111       Calendar calendar = Calendar.getInstance();
112       calendar.setTime(date);
113
114       syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
115       syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
116       syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
117     } else {
118       throw new IllegalArgumentException("Invalid timestamp format from targetSyncStartTimeStamp");
119     }
120
121   }
122
123
124   public int getNumInternalSyncWorkers() {
125     return numInternalSyncWorkers;
126   }
127
128   public void setNumInternalSyncWorkers(int numInternalSyncWorkers) {
129     this.numInternalSyncWorkers = numInternalSyncWorkers;
130   }
131
132   public int getNumSyncElasticWorkers() {
133     return numSyncElasticWorkers;
134   }
135
136   public void setNumSyncElasticWorkers(int numSyncElasticWorkers) {
137     this.numSyncElasticWorkers = numSyncElasticWorkers;
138   }
139
140   public int getNumSyncActiveInventoryWorkers() {
141     return numSyncActiveInventoryWorkers;
142   }
143
144   public void setNumSyncActiveInventoryWorkers(int numSyncActiveInventoryWorkers) {
145     this.numSyncActiveInventoryWorkers = numSyncActiveInventoryWorkers;
146   }
147
148   public String getTargetSyncStartTimeStamp() {
149     return targetSyncStartTimeStamp;
150   }
151
152   public void setTargetSyncStartTimeStamp(String targetSyncStartTimeStamp) {
153     this.targetSyncStartTimeStamp = targetSyncStartTimeStamp;
154     initializeSyncTimeParameters();
155   }
156
157   public String getControllerName() {
158     return controllerName;
159   }
160
161   public void setControllerName(String controllerName) {
162     this.controllerName = controllerName;
163   }
164
165   public boolean isEnabled() {
166     return enabled;
167   }
168
169   public void setEnabled(boolean enabled) {
170     this.enabled = enabled;
171   }
172
173   public int getSyncTaskDelayInMs() {
174     return syncTaskDelayInMs;
175   }
176
177   public void setSyncTaskDelayInMs(int syncTaskDelayInMs) {
178     this.syncTaskDelayInMs = syncTaskDelayInMs;
179   }
180
181   public int getSyncTaskFrequencyInDays() {
182     return syncTaskFrequencyInDays;
183   }
184
185   public void setSyncTaskFrequencyInDays(int syncTaskFrequencyInDays) {
186     this.syncTaskFrequencyInDays = syncTaskFrequencyInDays;
187   }
188
189   public int getNumSyncControllerWorkers() {
190     return numSyncControllerWorkers;
191   }
192
193   public void setNumSyncControllerWorkers(int numSyncControllerWorkers) {
194     this.numSyncControllerWorkers = numSyncControllerWorkers;
195   }
196
197   public boolean isRunOnceSyncEnabled() {
198     return runOnceSyncEnabled;
199   }
200
201   public void setRunOnceSyncEnabled(boolean runOnceSyncEnabled) {
202     this.runOnceSyncEnabled = runOnceSyncEnabled;
203   }
204
205   public boolean isPeriodicSyncEnabled() {
206     return periodicSyncEnabled;
207   }
208
209   public void setPeriodicSyncEnabled(boolean periodicSyncEnabled) {
210     this.periodicSyncEnabled = periodicSyncEnabled;
211   }
212
213   public long getSyncFrequencyInMs() {
214
215     return (syncTaskFrequencyInDays * SynchronizerConstants.MILLISEC_IN_A_DAY);
216
217   }
218
219   public Calendar getTargetSyncTime() {
220
221     TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
222     Calendar targetSyncTime = Calendar.getInstance(tz);
223
224     targetSyncTime.set(Calendar.HOUR_OF_DAY, syncTaskStartTimeHr);
225     targetSyncTime.set(Calendar.MINUTE, syncTaskStartTimeMin);
226     targetSyncTime.set(Calendar.SECOND, syncTaskStartTimeSec);
227
228     return targetSyncTime;
229
230   }
231
232
233   public String getNextSyncTime() {
234
235     int taskFrequencyInSeconds = 0;
236     if (getSyncFrequencyInMs() > 0) {
237       taskFrequencyInSeconds = (int) (getSyncFrequencyInMs() / 1000);
238     }
239
240     if (taskFrequencyInSeconds < 86400) {
241
242       TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
243       Calendar targetSyncTime = Calendar.getInstance(tz);
244       targetSyncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
245
246       return this.simpleDateFormat.format(targetSyncTime.getTimeInMillis())
247           .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
248
249     } else {
250
251       return this.simpleDateFormat
252           .format(getNextSyncTime(getTargetSyncTime(), taskFrequencyInSeconds))
253           .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
254
255     }
256
257   }
258
259   public long getNextSyncTime(Calendar syncTime, int taskFrequencyInSeconds) {
260
261     TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
262     Calendar timeNow = Calendar.getInstance(tz);
263
264     return getNextSyncTime(syncTime, timeNow.getTimeInMillis(), taskFrequencyInSeconds);
265   }
266
267   /**
268    * Gets the first sync time.
269    *
270    * @param calendar the calendar
271    * @param timeNow the time now in ms
272    * @param taskFrequencyInMs task period in ms
273    * @return the first sync time
274    */
275   
276   public long getNextSyncTime(Calendar syncTime, long timeNowInMs, int taskFrequencyInSeconds) {
277     if (taskFrequencyInSeconds == 0) {
278       return 0;
279     } else if (timeNowInMs > syncTime.getTimeInMillis()) {
280
281       /*
282        * If current time is after the scheduled sync start time, then we'll skip ahead to the next
283        * sync time period
284        */
285
286       syncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
287     }
288
289     return syncTime.getTimeInMillis();
290   }
291
292   public String getTimeZoneOfSyncStartTimeStamp() {
293     return timeZoneOfSyncStartTimeStamp;
294   }
295
296   public void setTimeZoneOfSyncStartTimeStamp(String timeZoneOfSyncStartTimeStamp) {
297     this.timeZoneOfSyncStartTimeStamp = timeZoneOfSyncStartTimeStamp;
298   }
299   
300   
301
302 }