Update license and poms
[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
40   private String controllerName;
41   private boolean enabled;
42   private int syncTaskDelayInMs;
43   private int syncTaskFrequencyInDays;
44   
45   private int numSyncControllerWorkers;
46   private boolean runOnceSyncEnabled;
47   private boolean periodicSyncEnabled;
48   
49   private String targetSyncStartTimeStamp;
50
51   private int numInternalSyncWorkers;
52   private int numSyncElasticWorkers;
53   private int numSyncActiveInventoryWorkers;
54   
55   /*
56    * calculated variables based on incoming config
57    */
58   private String timeZoneOfSyncStartTimeStamp;
59   private int syncTaskStartTimeHr;
60   private int syncTaskStartTimeMin;
61   private int syncTaskStartTimeSec;
62   
63   
64
65   public SyncControllerConfig() {
66     controllerName = UNKNOWN_CONTROLLER_NAME;
67     enabled = false;
68     syncTaskDelayInMs = 0;
69     syncTaskFrequencyInDays = 365;
70     numSyncControllerWorkers = 1;
71     runOnceSyncEnabled = false;
72     periodicSyncEnabled = false;
73     targetSyncStartTimeStamp = SynchronizerConstants.DEFAULT_START_TIMESTAMP;
74     numInternalSyncWorkers = 2;
75     numSyncElasticWorkers = 5;
76     numSyncActiveInventoryWorkers = 5;
77   }
78
79   protected void initializeSyncTimeParameters() {
80
81     if (syncTaskDelayInMs < 0) {
82       throw new IllegalArgumentException("syncTaskDelayInMs must >= 0");
83     }
84
85     Pattern pattern = Pattern.compile(SynchronizerConstants.TIMESTAMP24HOURS_PATTERN);
86     Matcher matcher = pattern.matcher(targetSyncStartTimeStamp);
87     if (!matcher.matches()) {
88       throw new IllegalArgumentException("Invalid time format for targetSyncStartTimeStamp");
89     }
90
91     List<String> timestampVal = Arrays.asList(targetSyncStartTimeStamp.split(" "));
92
93     if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
94
95       // Need both time and timezone offset
96       timeZoneOfSyncStartTimeStamp = timestampVal
97           .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
98
99       String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
100       DateFormat format = new SimpleDateFormat("HH:mm:ss");
101
102       Date date = null;
103
104       try {
105         date = format.parse(time);
106       } catch (ParseException parseException) {
107         throw new IllegalArgumentException(parseException);
108       }
109
110       Calendar calendar = Calendar.getInstance();
111       calendar.setTime(date);
112
113       syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
114       syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
115       syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
116     } else {
117       throw new IllegalArgumentException("Invalid timestamp format from targetSyncStartTimeStamp");
118     }
119
120   }
121
122
123   public int getNumInternalSyncWorkers() {
124     return numInternalSyncWorkers;
125   }
126
127   public void setNumInternalSyncWorkers(int numInternalSyncWorkers) {
128     this.numInternalSyncWorkers = numInternalSyncWorkers;
129   }
130
131   public int getNumSyncElasticWorkers() {
132     return numSyncElasticWorkers;
133   }
134
135   public void setNumSyncElasticWorkers(int numSyncElasticWorkers) {
136     this.numSyncElasticWorkers = numSyncElasticWorkers;
137   }
138
139   public int getNumSyncActiveInventoryWorkers() {
140     return numSyncActiveInventoryWorkers;
141   }
142
143   public void setNumSyncActiveInventoryWorkers(int numSyncActiveInventoryWorkers) {
144     this.numSyncActiveInventoryWorkers = numSyncActiveInventoryWorkers;
145   }
146
147   public String getTargetSyncStartTimeStamp() {
148     return targetSyncStartTimeStamp;
149   }
150
151   public void setTargetSyncStartTimeStamp(String targetSyncStartTimeStamp) {
152     this.targetSyncStartTimeStamp = targetSyncStartTimeStamp;
153     initializeSyncTimeParameters();
154   }
155
156   public String getControllerName() {
157     return controllerName;
158   }
159
160   public void setControllerName(String controllerName) {
161     this.controllerName = controllerName;
162   }
163
164   public boolean isEnabled() {
165     return enabled;
166   }
167
168   public void setEnabled(boolean enabled) {
169     this.enabled = enabled;
170   }
171
172   public int getSyncTaskDelayInMs() {
173     return syncTaskDelayInMs;
174   }
175
176   public void setSyncTaskDelayInMs(int syncTaskDelayInMs) {
177     this.syncTaskDelayInMs = syncTaskDelayInMs;
178   }
179
180   public int getSyncTaskFrequencyInDays() {
181     return syncTaskFrequencyInDays;
182   }
183
184   public void setSyncTaskFrequencyInDays(int syncTaskFrequencyInDays) {
185     this.syncTaskFrequencyInDays = syncTaskFrequencyInDays;
186   }
187
188   public int getNumSyncControllerWorkers() {
189     return numSyncControllerWorkers;
190   }
191
192   public void setNumSyncControllerWorkers(int numSyncControllerWorkers) {
193     this.numSyncControllerWorkers = numSyncControllerWorkers;
194   }
195
196   public boolean isRunOnceSyncEnabled() {
197     return runOnceSyncEnabled;
198   }
199
200   public void setRunOnceSyncEnabled(boolean runOnceSyncEnabled) {
201     this.runOnceSyncEnabled = runOnceSyncEnabled;
202   }
203
204   public boolean isPeriodicSyncEnabled() {
205     return periodicSyncEnabled;
206   }
207
208   public void setPeriodicSyncEnabled(boolean periodicSyncEnabled) {
209     this.periodicSyncEnabled = periodicSyncEnabled;
210   }
211
212   public long getSyncFrequencyInMs() {
213
214     return (syncTaskFrequencyInDays * SynchronizerConstants.MILLISEC_IN_A_DAY);
215
216   }
217
218   public Calendar getTargetSyncTime() {
219
220     TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
221     Calendar targetSyncTime = Calendar.getInstance(tz);
222
223     targetSyncTime.set(Calendar.HOUR_OF_DAY, syncTaskStartTimeHr);
224     targetSyncTime.set(Calendar.MINUTE, syncTaskStartTimeMin);
225     targetSyncTime.set(Calendar.SECOND, syncTaskStartTimeSec);
226
227     return targetSyncTime;
228
229   }
230
231
232   public String getNextSyncTime() {
233
234     int taskFrequencyInSeconds = 0;
235     if (getSyncFrequencyInMs() > 0) {
236       taskFrequencyInSeconds = (int) (getSyncFrequencyInMs() / 1000);
237     }
238
239     if (taskFrequencyInSeconds < 86400) {
240
241       TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
242       Calendar targetSyncTime = Calendar.getInstance(tz);
243       targetSyncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
244
245       return SynchronizerConstants.SIMPLE_DATE_FORMAT.format(targetSyncTime.getTimeInMillis())
246           .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
247
248     } else {
249
250       return SynchronizerConstants.SIMPLE_DATE_FORMAT
251           .format(getNextSyncTime(getTargetSyncTime(), taskFrequencyInSeconds))
252           .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
253
254     }
255
256   }
257
258   public long getNextSyncTime(Calendar syncTime, int taskFrequencyInSeconds) {
259
260     TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
261     Calendar timeNow = Calendar.getInstance(tz);
262
263     return getNextSyncTime(syncTime, timeNow.getTimeInMillis(), taskFrequencyInSeconds);
264   }
265
266   /**
267    * Gets the first sync time.
268    *
269    * @param calendar the calendar
270    * @param timeNow the time now in ms
271    * @param taskFrequencyInMs task period in ms
272    * @return the first sync time
273    */
274   
275   public long getNextSyncTime(Calendar syncTime, long timeNowInMs, int taskFrequencyInSeconds) {
276     if (taskFrequencyInSeconds == 0) {
277       return 0;
278     } else if (timeNowInMs > syncTime.getTimeInMillis()) {
279
280       /*
281        * If current time is after the scheduled sync start time, then we'll skip ahead to the next
282        * sync time period
283        */
284
285       syncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
286     }
287
288     return syncTime.getTimeInMillis();
289   }
290
291   public String getTimeZoneOfSyncStartTimeStamp() {
292     return timeZoneOfSyncStartTimeStamp;
293   }
294
295   public void setTimeZoneOfSyncStartTimeStamp(String timeZoneOfSyncStartTimeStamp) {
296     this.timeZoneOfSyncStartTimeStamp = timeZoneOfSyncStartTimeStamp;
297   }
298   
299   
300
301 }