2 * ============LICENSE_START=======================================================
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.onap.aai.sparky.sync.config;
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;
34 import org.onap.aai.sparky.sync.SynchronizerConstants;
36 public class SyncControllerConfig {
38 private static final String UNKNOWN_CONTROLLER_NAME = "UnknownControllerName";
40 private String controllerName;
41 private boolean enabled;
42 private int syncTaskDelayInMs;
43 private int syncTaskFrequencyInDays;
45 private int numSyncControllerWorkers;
46 private boolean runOnceSyncEnabled;
47 private boolean periodicSyncEnabled;
49 private String targetSyncStartTimeStamp;
51 private int numInternalSyncWorkers;
52 private int numSyncElasticWorkers;
53 private int numSyncActiveInventoryWorkers;
56 * calculated variables based on incoming config
58 private String timeZoneOfSyncStartTimeStamp;
59 private int syncTaskStartTimeHr;
60 private int syncTaskStartTimeMin;
61 private int syncTaskStartTimeSec;
65 public SyncControllerConfig() {
66 controllerName = UNKNOWN_CONTROLLER_NAME;
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;
79 protected void initializeSyncTimeParameters() {
81 if (syncTaskDelayInMs < 0) {
82 throw new IllegalArgumentException("syncTaskDelayInMs must >= 0");
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");
91 List<String> timestampVal = Arrays.asList(targetSyncStartTimeStamp.split(" "));
93 if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
95 // Need both time and timezone offset
96 timeZoneOfSyncStartTimeStamp = timestampVal
97 .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
99 String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
100 DateFormat format = new SimpleDateFormat("HH:mm:ss");
105 date = format.parse(time);
106 } catch (ParseException parseException) {
107 throw new IllegalArgumentException(parseException);
110 Calendar calendar = Calendar.getInstance();
111 calendar.setTime(date);
113 syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
114 syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
115 syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
117 throw new IllegalArgumentException("Invalid timestamp format from targetSyncStartTimeStamp");
123 public int getNumInternalSyncWorkers() {
124 return numInternalSyncWorkers;
127 public void setNumInternalSyncWorkers(int numInternalSyncWorkers) {
128 this.numInternalSyncWorkers = numInternalSyncWorkers;
131 public int getNumSyncElasticWorkers() {
132 return numSyncElasticWorkers;
135 public void setNumSyncElasticWorkers(int numSyncElasticWorkers) {
136 this.numSyncElasticWorkers = numSyncElasticWorkers;
139 public int getNumSyncActiveInventoryWorkers() {
140 return numSyncActiveInventoryWorkers;
143 public void setNumSyncActiveInventoryWorkers(int numSyncActiveInventoryWorkers) {
144 this.numSyncActiveInventoryWorkers = numSyncActiveInventoryWorkers;
147 public String getTargetSyncStartTimeStamp() {
148 return targetSyncStartTimeStamp;
151 public void setTargetSyncStartTimeStamp(String targetSyncStartTimeStamp) {
152 this.targetSyncStartTimeStamp = targetSyncStartTimeStamp;
153 initializeSyncTimeParameters();
156 public String getControllerName() {
157 return controllerName;
160 public void setControllerName(String controllerName) {
161 this.controllerName = controllerName;
164 public boolean isEnabled() {
168 public void setEnabled(boolean enabled) {
169 this.enabled = enabled;
172 public int getSyncTaskDelayInMs() {
173 return syncTaskDelayInMs;
176 public void setSyncTaskDelayInMs(int syncTaskDelayInMs) {
177 this.syncTaskDelayInMs = syncTaskDelayInMs;
180 public int getSyncTaskFrequencyInDays() {
181 return syncTaskFrequencyInDays;
184 public void setSyncTaskFrequencyInDays(int syncTaskFrequencyInDays) {
185 this.syncTaskFrequencyInDays = syncTaskFrequencyInDays;
188 public int getNumSyncControllerWorkers() {
189 return numSyncControllerWorkers;
192 public void setNumSyncControllerWorkers(int numSyncControllerWorkers) {
193 this.numSyncControllerWorkers = numSyncControllerWorkers;
196 public boolean isRunOnceSyncEnabled() {
197 return runOnceSyncEnabled;
200 public void setRunOnceSyncEnabled(boolean runOnceSyncEnabled) {
201 this.runOnceSyncEnabled = runOnceSyncEnabled;
204 public boolean isPeriodicSyncEnabled() {
205 return periodicSyncEnabled;
208 public void setPeriodicSyncEnabled(boolean periodicSyncEnabled) {
209 this.periodicSyncEnabled = periodicSyncEnabled;
212 public long getSyncFrequencyInMs() {
214 return (syncTaskFrequencyInDays * SynchronizerConstants.MILLISEC_IN_A_DAY);
218 public Calendar getTargetSyncTime() {
220 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
221 Calendar targetSyncTime = Calendar.getInstance(tz);
223 targetSyncTime.set(Calendar.HOUR_OF_DAY, syncTaskStartTimeHr);
224 targetSyncTime.set(Calendar.MINUTE, syncTaskStartTimeMin);
225 targetSyncTime.set(Calendar.SECOND, syncTaskStartTimeSec);
227 return targetSyncTime;
232 public String getNextSyncTime() {
234 int taskFrequencyInSeconds = 0;
235 if (getSyncFrequencyInMs() > 0) {
236 taskFrequencyInSeconds = (int) (getSyncFrequencyInMs() / 1000);
239 if (taskFrequencyInSeconds < 86400) {
241 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
242 Calendar targetSyncTime = Calendar.getInstance(tz);
243 targetSyncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
245 return SynchronizerConstants.SIMPLE_DATE_FORMAT.format(targetSyncTime.getTimeInMillis())
246 .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
250 return SynchronizerConstants.SIMPLE_DATE_FORMAT
251 .format(getNextSyncTime(getTargetSyncTime(), taskFrequencyInSeconds))
252 .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
258 public long getNextSyncTime(Calendar syncTime, int taskFrequencyInSeconds) {
260 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
261 Calendar timeNow = Calendar.getInstance(tz);
263 return getNextSyncTime(syncTime, timeNow.getTimeInMillis(), taskFrequencyInSeconds);
267 * Gets the first sync time.
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
275 public long getNextSyncTime(Calendar syncTime, long timeNowInMs, int taskFrequencyInSeconds) {
276 if (taskFrequencyInSeconds == 0) {
278 } else if (timeNowInMs > syncTime.getTimeInMillis()) {
281 * If current time is after the scheduled sync start time, then we'll skip ahead to the next
285 syncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
288 return syncTime.getTimeInMillis();
291 public String getTimeZoneOfSyncStartTimeStamp() {
292 return timeZoneOfSyncStartTimeStamp;
295 public void setTimeZoneOfSyncStartTimeStamp(String timeZoneOfSyncStartTimeStamp) {
296 this.timeZoneOfSyncStartTimeStamp = timeZoneOfSyncStartTimeStamp;