2 * Copyright 2017 BOCO Corporation. CMCC Technologies Co., Ltd
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
16 package org.onap.vfc.nfvo.emsdriver.commons.utils;
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
22 import java.text.SimpleDateFormat;
23 import java.util.Calendar;
24 import java.util.Locale;
25 import java.util.regex.Matcher;
26 import java.util.regex.Pattern;
28 public final class VarExprParser {
29 private static Log log = LogFactory.getFactory().getInstance(VarExprParser.class);
30 private static Pattern varPattern = Pattern.compile("(\\$\\{([^\\}]+)\\})",
31 Pattern.CASE_INSENSITIVE);
33 public static final String replaceVar(String str, long scanStartTime, long scanStopTime) {
34 if (str.indexOf("${") == -1)
37 // support original system variable
38 str = str.replace("${s_year}", "${SCAN_START_TIME,yyyy}");
39 str = str.replace("${s_mon}", "${SCAN_START_TIME,MM}");
40 str = str.replace("${s_day}", "${SCAN_START_TIME,dd}");
41 str = str.replace("${s_hour}", "${SCAN_START_TIME,HH}");
42 str = str.replace("${s_min}", "${SCAN_START_TIME,mm}");
43 str = str.replace("${e_year}", "${SCAN_STOP_TIME,yyyy}");
44 str = str.replace("${e_mon}", "${SCAN_STOP_TIME,MM}");
45 str = str.replace("${e_day}", "${SCAN_STOP_TIME,dd}");
46 str = str.replace("${e_hour}", "${SCAN_STOP_TIME,HH}");
47 str = str.replace("${e_min}", "${SCAN_STOP_TIME,mm}");
49 String expr, varName, value ;
50 Matcher matcher = varPattern.matcher(str);
51 while (matcher.find()) {
53 expr = matcher.group(1);
54 varName = matcher.group(2);
55 if (expr.indexOf("${SCAN_START_TIME") != -1) {
56 value = getTime(scanStartTime, varName, "yyyy-MM-dd HH:mm:ss");
57 } else if (expr.indexOf("${SCAN_STOP_TIME") != -1) {
58 value = getTime(scanStopTime, varName, "yyyy-MM-dd HH:mm:ss");
61 log.warn(" expr [" + str + "] var["
65 str = str.replace(expr, value);
70 private static String getTime(long time, String value, String defaultParam) {
71 String timeStr = null;
72 String formatStr = null;
73 String increaseTime = null;
74 if (value.indexOf(",") == -1) {
75 formatStr = defaultParam;
78 timeStr = value.split(",")[0];
79 formatStr = value.split(",")[1];
82 if (timeStr.indexOf("+") == -1 && timeStr.indexOf("-") == -1) {
83 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH);
84 return simpleDateFormat.format(time);
86 if (timeStr.indexOf("+") != -1) {
87 increaseTime = timeStr.substring(timeStr.indexOf("+") + 1, timeStr.length() - 1);
89 if (timeStr.indexOf("-") != -1) {
90 increaseTime = timeStr.substring(timeStr.indexOf("-"), timeStr.length() - 1);
92 if (timeStr.toLowerCase().endsWith("h")) {
93 Calendar cal = Calendar.getInstance();
94 cal.setTimeInMillis(time);
95 cal.add(Calendar.HOUR, Integer.parseInt(increaseTime));
96 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH);
97 return simpleDateFormat.format(cal.getTimeInMillis());
98 } else if (timeStr.toLowerCase().endsWith("m")) {
99 Calendar cal = Calendar.getInstance();
100 cal.setTimeInMillis(time);
101 cal.add(Calendar.MINUTE, Integer.parseInt(increaseTime));
102 SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH);
103 return simpleDateFormat.format(cal.getTimeInMillis());
110 * Support two variable substitutions
112 * @param scanStartTime
113 * @param scanStopTime
116 public static String replaceTimeVar(String result,String scanStartTime, String scanStopTime) {
117 boolean isReplace = false;
118 if (result.indexOf("${SCAN_ST") != -1) {
122 if (result.indexOf("${SCAN_START_TIME}") != -1) {
124 result = StringUtils.replace(result, "${SCAN_START_TIME}", scanStartTime);
126 if (result.indexOf("${SCAN_STOP_TIME") != -1) {
128 result = StringUtils.replace(result, "${SCAN_STOP_TIME}", scanStopTime);