2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017 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 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
23 package org.onap.aai.sparky.sync.config;
25 import java.text.DateFormat;
26 import java.text.ParseException;
27 import java.text.SimpleDateFormat;
28 import java.util.Arrays;
29 import java.util.Calendar;
30 import java.util.Date;
31 import java.util.List;
32 import java.util.TimeZone;
33 import java.util.regex.Matcher;
34 import java.util.regex.Pattern;
36 import org.onap.aai.sparky.sync.SynchronizerConstants;
38 public class SyncControllerConfig {
40 private static final String UNKNOWN_CONTROLLER_NAME = "UnknownControllerName";
42 private String controllerName;
43 private boolean enabled;
44 private int syncTaskDelayInMs;
45 private int syncTaskFrequencyInDays;
47 private int numSyncControllerWorkers;
48 private boolean runOnceSyncEnabled;
49 private boolean periodicSyncEnabled;
51 private String targetSyncStartTimeStamp;
53 private int numInternalSyncWorkers;
54 private int numSyncElasticWorkers;
55 private int numSyncActiveInventoryWorkers;
58 * calculated variables based on incoming config
60 private String timeZoneOfSyncStartTimeStamp;
61 private int syncTaskStartTimeHr;
62 private int syncTaskStartTimeMin;
63 private int syncTaskStartTimeSec;
67 public SyncControllerConfig() {
68 controllerName = UNKNOWN_CONTROLLER_NAME;
70 syncTaskDelayInMs = 0;
71 syncTaskFrequencyInDays = 365;
72 numSyncControllerWorkers = 1;
73 runOnceSyncEnabled = false;
74 periodicSyncEnabled = false;
75 targetSyncStartTimeStamp = SynchronizerConstants.DEFAULT_START_TIMESTAMP;
76 numInternalSyncWorkers = 2;
77 numSyncElasticWorkers = 5;
78 numSyncActiveInventoryWorkers = 5;
81 protected void initializeSyncTimeParameters() {
83 if (syncTaskDelayInMs < 0) {
84 throw new IllegalArgumentException("syncTaskDelayInMs must >= 0");
87 Pattern pattern = Pattern.compile(SynchronizerConstants.TIMESTAMP24HOURS_PATTERN);
88 Matcher matcher = pattern.matcher(targetSyncStartTimeStamp);
89 if (!matcher.matches()) {
90 throw new IllegalArgumentException("Invalid time format for targetSyncStartTimeStamp");
93 List<String> timestampVal = Arrays.asList(targetSyncStartTimeStamp.split(" "));
95 if (timestampVal.size() == SynchronizerConstants.COMPONENTS_IN_TIMESTAMP) {
97 // Need both time and timezone offset
98 timeZoneOfSyncStartTimeStamp = timestampVal
99 .get(SynchronizerConstants.IDX_TIMEZONE_IN_TIMESTAMP).replaceAll("UTC", "GMT");
101 String time = timestampVal.get(SynchronizerConstants.IDX_TIME_IN_TIMESTAMP);
102 DateFormat format = new SimpleDateFormat("HH:mm:ss");
107 date = format.parse(time);
108 } catch (ParseException parseException) {
109 throw new IllegalArgumentException(parseException);
112 Calendar calendar = Calendar.getInstance();
113 calendar.setTime(date);
115 syncTaskStartTimeHr = calendar.get(Calendar.HOUR_OF_DAY);
116 syncTaskStartTimeMin = calendar.get(Calendar.MINUTE);
117 syncTaskStartTimeSec = calendar.get(Calendar.SECOND);
119 throw new IllegalArgumentException("Invalid timestamp format from targetSyncStartTimeStamp");
125 public int getNumInternalSyncWorkers() {
126 return numInternalSyncWorkers;
129 public void setNumInternalSyncWorkers(int numInternalSyncWorkers) {
130 this.numInternalSyncWorkers = numInternalSyncWorkers;
133 public int getNumSyncElasticWorkers() {
134 return numSyncElasticWorkers;
137 public void setNumSyncElasticWorkers(int numSyncElasticWorkers) {
138 this.numSyncElasticWorkers = numSyncElasticWorkers;
141 public int getNumSyncActiveInventoryWorkers() {
142 return numSyncActiveInventoryWorkers;
145 public void setNumSyncActiveInventoryWorkers(int numSyncActiveInventoryWorkers) {
146 this.numSyncActiveInventoryWorkers = numSyncActiveInventoryWorkers;
149 public String getTargetSyncStartTimeStamp() {
150 return targetSyncStartTimeStamp;
153 public void setTargetSyncStartTimeStamp(String targetSyncStartTimeStamp) {
154 this.targetSyncStartTimeStamp = targetSyncStartTimeStamp;
155 initializeSyncTimeParameters();
158 public String getControllerName() {
159 return controllerName;
162 public void setControllerName(String controllerName) {
163 this.controllerName = controllerName;
166 public boolean isEnabled() {
170 public void setEnabled(boolean enabled) {
171 this.enabled = enabled;
174 public int getSyncTaskDelayInMs() {
175 return syncTaskDelayInMs;
178 public void setSyncTaskDelayInMs(int syncTaskDelayInMs) {
179 this.syncTaskDelayInMs = syncTaskDelayInMs;
182 public int getSyncTaskFrequencyInDays() {
183 return syncTaskFrequencyInDays;
186 public void setSyncTaskFrequencyInDays(int syncTaskFrequencyInDays) {
187 this.syncTaskFrequencyInDays = syncTaskFrequencyInDays;
190 public int getNumSyncControllerWorkers() {
191 return numSyncControllerWorkers;
194 public void setNumSyncControllerWorkers(int numSyncControllerWorkers) {
195 this.numSyncControllerWorkers = numSyncControllerWorkers;
198 public boolean isRunOnceSyncEnabled() {
199 return runOnceSyncEnabled;
202 public void setRunOnceSyncEnabled(boolean runOnceSyncEnabled) {
203 this.runOnceSyncEnabled = runOnceSyncEnabled;
206 public boolean isPeriodicSyncEnabled() {
207 return periodicSyncEnabled;
210 public void setPeriodicSyncEnabled(boolean periodicSyncEnabled) {
211 this.periodicSyncEnabled = periodicSyncEnabled;
214 public long getSyncFrequencyInMs() {
216 return (syncTaskFrequencyInDays * SynchronizerConstants.MILLISEC_IN_A_DAY);
220 public Calendar getTargetSyncTime() {
222 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
223 Calendar targetSyncTime = Calendar.getInstance(tz);
225 targetSyncTime.set(Calendar.HOUR_OF_DAY, syncTaskStartTimeHr);
226 targetSyncTime.set(Calendar.MINUTE, syncTaskStartTimeMin);
227 targetSyncTime.set(Calendar.SECOND, syncTaskStartTimeSec);
229 return targetSyncTime;
234 public String getNextSyncTime() {
236 int taskFrequencyInSeconds = 0;
237 if (getSyncFrequencyInMs() > 0) {
238 taskFrequencyInSeconds = (int) (getSyncFrequencyInMs() / 1000);
241 if (taskFrequencyInSeconds < 86400) {
243 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
244 Calendar targetSyncTime = Calendar.getInstance(tz);
245 targetSyncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
247 return SynchronizerConstants.SIMPLE_DATE_FORMAT.format(targetSyncTime.getTimeInMillis())
248 .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
252 return SynchronizerConstants.SIMPLE_DATE_FORMAT
253 .format(getNextSyncTime(getTargetSyncTime(), taskFrequencyInSeconds))
254 .replaceAll(SynchronizerConstants.TIME_STD, SynchronizerConstants.TIME_CONFIG_STD);
260 public long getNextSyncTime(Calendar syncTime, int taskFrequencyInSeconds) {
262 TimeZone tz = TimeZone.getTimeZone(timeZoneOfSyncStartTimeStamp);
263 Calendar timeNow = Calendar.getInstance(tz);
265 return getNextSyncTime(syncTime, timeNow.getTimeInMillis(), taskFrequencyInSeconds);
269 * Gets the first sync time.
271 * @param calendar the calendar
272 * @param timeNow the time now in ms
273 * @param taskFrequencyInMs task period in ms
274 * @return the first sync time
277 public long getNextSyncTime(Calendar syncTime, long timeNowInMs, int taskFrequencyInSeconds) {
278 if (taskFrequencyInSeconds == 0) {
280 } else if (timeNowInMs > syncTime.getTimeInMillis()) {
283 * If current time is after the scheduled sync start time, then we'll skip ahead to the next
287 syncTime.add(Calendar.SECOND, taskFrequencyInSeconds);
290 return syncTime.getTimeInMillis();
293 public String getTimeZoneOfSyncStartTimeStamp() {
294 return timeZoneOfSyncStartTimeStamp;
297 public void setTimeZoneOfSyncStartTimeStamp(String timeZoneOfSyncStartTimeStamp) {
298 this.timeZoneOfSyncStartTimeStamp = timeZoneOfSyncStartTimeStamp;