Code improvements in Common Utils
[vfc/nfvo/driver/ems.git] / ems / boco / src / main / java / org / onap / vfc / nfvo / emsdriver / commons / utils / VarExprParser.java
1 /*
2  * Copyright 2017 BOCO Corporation.  CMCC Technologies Co., Ltd
3  *
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
7  *
8  *     http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16 package org.onap.vfc.nfvo.emsdriver.commons.utils;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.apache.commons.logging.Log;
20 import org.apache.commons.logging.LogFactory;
21
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;
27
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);
32
33     public static final String replaceVar(String str, long scanStartTime, long scanStopTime) {
34         if (str.indexOf("${") == -1)
35             return str;
36
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}");
48
49         String expr, varName, value ;
50         Matcher matcher = varPattern.matcher(str);
51         while (matcher.find()) {
52             value = null;
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");
59             }
60             if (value == null) {
61                 log.warn(" expr [" + str + "] var["
62                         + expr + "]is fail");
63                 continue;
64             }
65             str = str.replace(expr, value);
66         }
67         return str;
68     }
69
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;
76             timeStr = value;
77         } else {
78             timeStr = value.split(",")[0];
79             formatStr = value.split(",")[1];
80         }
81
82         if (timeStr.indexOf("+") == -1 && timeStr.indexOf("-") == -1) {
83             SimpleDateFormat simpleDateFormat = new SimpleDateFormat(formatStr, Locale.ENGLISH);
84             return simpleDateFormat.format(time);
85         } else {
86             if (timeStr.indexOf("+") != -1) {
87                 increaseTime = timeStr.substring(timeStr.indexOf("+") + 1, timeStr.length() - 1);
88             }
89             if (timeStr.indexOf("-") != -1) {
90                 increaseTime = timeStr.substring(timeStr.indexOf("-"), timeStr.length() - 1);
91             }
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());
104             }
105         }
106         return null;
107     }
108
109     /**
110      * Support two variable substitutions
111      * @param result
112      * @param scanStartTime
113      * @param scanStopTime
114      * @return
115      */
116     public static String replaceTimeVar(String result,String scanStartTime, String scanStopTime) {
117         boolean isReplace = false;
118         if (result.indexOf("${SCAN_ST") != -1) {
119             isReplace = true;
120         }
121         if (isReplace) {
122             if (result.indexOf("${SCAN_START_TIME}") != -1) {
123
124                 result = StringUtils.replace(result, "${SCAN_START_TIME}", scanStartTime);
125             }
126             if (result.indexOf("${SCAN_STOP_TIME") != -1) {
127
128                 result = StringUtils.replace(result, "${SCAN_STOP_TIME}", scanStopTime);
129             }
130         }
131         return result;
132     }
133 }