2 * ================================================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ================================================================================
20 package org.openecomp.portalsdk.analytics.model.runtime;
22 import java.util.Enumeration;
23 import java.util.Hashtable;
24 import java.util.Iterator;
26 import javax.servlet.http.HttpServletRequest;
28 import org.openecomp.portalsdk.analytics.error.RaptorException;
29 import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
30 import org.openecomp.portalsdk.analytics.system.DbUtils;
31 import org.openecomp.portalsdk.analytics.system.Globals;
32 import org.openecomp.portalsdk.analytics.util.AppConstants;
33 import org.openecomp.portalsdk.analytics.util.DataSet;
34 import org.openecomp.portalsdk.analytics.util.Utils;
35 import org.openecomp.portalsdk.analytics.util.XSSFilter;
36 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
38 public class ReportParamValues extends Hashtable {
39 EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportParamValues.class);
41 private Hashtable paramIsMultiValue = null;
42 private Hashtable paramIsTextAreaValue = null;
43 private Hashtable paramIsTextAreaDrilldownValue = null;
44 private Hashtable paramIsTextAreaValueModified = null;
45 private ReportFormFields rff = null;
47 private Hashtable multiValueBaseSQL = null;
48 private Hashtable textAreaValueBaseSQL = null;
50 public ReportParamValues() {
52 paramIsMultiValue = new Hashtable();
53 multiValueBaseSQL = new Hashtable();
54 paramIsTextAreaValue = new Hashtable();
55 paramIsTextAreaDrilldownValue = new Hashtable();
56 paramIsTextAreaValueModified = new Hashtable();
57 } // ReportParamValues
59 public ReportParamValues(ReportFormFields rff, String reportDefType) {
62 for (Iterator iter = rff.iterator(); iter.hasNext();) {
63 FormField ff = (FormField) iter.next();
64 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
65 put(ff.getFieldName(), nvl(ff.getDefaultValue()));
66 put(ff.getFieldName()+"_Hr", nvl(ff.getDefaultValue()));
67 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
68 put(ff.getFieldName()+"_Min", nvl(ff.getDefaultValue()));
70 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
71 put(ff.getFieldName()+"_Sec", nvl(ff.getDefaultValue()));
74 put(ff.getFieldName(), nvl(ff.getDefaultValue()));
76 boolean isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
77 || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
78 boolean isTextAreaValue = ff.getFieldType().equals(FormField.FFT_TEXTAREA) && reportDefType
79 .equals(AppConstants.RD_SQL_BASED);
81 paramIsMultiValue.put(ff.getFieldName(), new Boolean(isMultiValue));
82 paramIsTextAreaValue.put(ff.getFieldName(), new Boolean(isTextAreaValue));
84 if ((isMultiValue || isTextAreaValue) && ff.getBaseSQL() != null)
85 multiValueBaseSQL.put(ff.getFieldName(), ff.getBaseSQL());
89 } // ReportParamValues
92 * public ReportParamValues(ReportFormFields rff, HttpServletRequest
93 * request) { this(rff);
95 * setParamValues(request); } // ReportParamValues
97 public boolean isParameterMultiValue(String fieldName) {
98 Boolean b = (Boolean) paramIsMultiValue.get(fieldName);
99 return (b != null) ? b.booleanValue() : false;
100 } // isParameterMultiValue
102 public boolean isParameterTextAreaValue(String fieldName) {
103 Boolean b = (Boolean) paramIsTextAreaValue.get(fieldName);
104 return (b != null) ? b.booleanValue() : false;
105 } // isParameterMultiValue
107 public boolean isParameterTextAreaValueAndModified(String fieldName) {
108 Boolean b = (Boolean) paramIsTextAreaValueModified.get(fieldName);
109 return (b != null) ? b.booleanValue() : false;
110 } // isParameterMultiValue
112 public boolean setParamValues(HttpServletRequest request, boolean refresh) {
113 long currentTime = System.currentTimeMillis();
114 //System.out.println("ReportParamValues setParamValues called " + refresh);
115 boolean paramUpdated = false;
116 if(refresh) clearValues();
117 for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
118 String key = (String) enKeys.nextElement();
119 String oldValue = XSSFilter.filterRequestOnlyScript(getParamValue(key));
120 String newValue = null;
121 if (isParameterMultiValue(key)) {
122 String[] values = request.getParameterValues(key);
124 if (values != null) {
125 StringBuffer sb = new StringBuffer();
126 for (int i = 0; i < values.length; i++) {
129 sb.append(values[i]);
132 newValue = XSSFilter.filterRequestOnlyScript(sb.toString());
134 } else if (isParameterTextAreaValue(key)) {
135 /* String[] values = request.getParameterValues(key);
137 if (values != null) {
138 StringBuffer sb = new StringBuffer();
139 for (int i = 0; i < values.length; i++) {
142 sb.append(values[i]);
146 value = request.getParameter(key);
147 value = Utils.oracleSafe(nvl(value));
148 paramIsTextAreaDrilldownValue.put(key, value);
149 value = value.replaceAll(",", "|");
150 value = "('" + Utils.replaceInString(value, "|", "','") + "')";
151 //value = Utils.replaceInString(value, "|", ",");
152 newValue = XSSFilter.filterRequestOnlyScript(value);
153 paramIsTextAreaValueModified.put(key, new Boolean(true));
157 // newValue = nvl(request.getParameter(key));
158 newValue = XSSFilter.filterRequestOnlyScript(request.getParameter(key));
159 //debugLogger.debug("IN REPORTPARAM ^NEW VALUE " + newValue + " OLD VALUE " + oldValue + " KEY " + key + " isParameterMultiValue(key) " + isParameterMultiValue(key));
160 if(!isParameterMultiValue(key) && !isParameterTextAreaValue(key)) {
161 if(refresh && nvl(newValue).length()<=0) {
163 } else if ( ((newValue != null && newValue.trim().length()>0) && (oldValue!=null && oldValue.trim().length()>0) && !newValue.equals(oldValue)) ||
164 ((newValue != null && newValue.trim().length()>0) && (oldValue == null || oldValue.trim().length() <= 0)) ) {
166 //System.out.println("paramupdated1 " +paramUpdated+ " " + newValue + " " + oldValue);
167 // if(newValue.startsWith("[") && newValue.endsWith("]")) {
168 // newValue = getDateAsString(newValue);
171 } else if (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0)) {
174 } else if (nvl(newValue).equals(nvl(oldValue)) ) {
180 if (((newValue != null && newValue.trim().length()>0) && (oldValue!=null && oldValue.trim().length()>0) && !newValue.equals(oldValue)) ||
181 ((newValue != null && newValue.trim().length()>0) && (oldValue == null || oldValue.trim().length() <= 0)) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
182 if(isParameterTextAreaValue(key)) {
183 newValue = getParamValueforTextAreaDrilldown(key);
184 if(newValue.length() > 0 && !newValue.equals(oldValue)) {
193 } else if (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
195 //System.out.println("paramupdated3 " +paramUpdated+ " N" + newValue + " O" + oldValue);
201 logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for Adding/Clearing Param Values for Search Field Display " + (System.currentTimeMillis() - currentTime)));
205 public String getParamValueforTextAreaDrilldown(String key) {
206 return (String) paramIsTextAreaDrilldownValue.get(key);
209 public String getParamValue(String key) {
210 //This logic below is added to avoid BLANK formfield to pass through logic - Sundar
212 if(isParameterTextAreaValueAndModified(key)) {
214 value = (String) get(key);
215 value = Utils.oracleSafe(nvl(value));
216 value = value.replaceAll(",","|");
217 if(nvl(value).length()>0) {
218 if(value.indexOf("|")!= -1) { // Need option to support "|"
219 value = Utils.replaceInString(value,"\r\n","~");
221 value = Utils.replaceInString(value, "~", "' , '");
222 value = "('" + Utils.replaceInString(value, "|", "','") + "')"; // changed from "|"
223 //value = Utils.replaceInString(value, "|", ",");
224 value = XSSFilter.filterRequestOnlyScript(value);
228 // if(nvl(value).length()>0) {
229 // value = Utils.replaceInString(value, ",", "|");
230 // value = value.indexOf("('")!=-1? value.substring(2, value.length()-2):value;
231 // value = Utils.replaceInString(value, "'|'", ",");
236 return (String) get(key);
242 public String getParamDisplayValue(String key) {
243 String value = getParamValue(key);
244 if (isParameterMultiValue(key))
245 value = "(" + Utils.replaceInString(value, "|", ",") + ")";
249 public String getParamBaseSQL(String key) {
250 return (String) multiValueBaseSQL.get(key);
253 /** ************************************************************************************************* */
255 private String nvl(String s) {
256 return (s == null) ? "" : s;
259 private String nvl(String s, String sDefault) {
260 return nvl(s).equals("") ? sDefault : s;
263 private boolean isNull(String a) {
264 if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
270 private void clearValues() {
272 String defaultValue = "";
273 String defaultSQL = "";
274 String defaultQuery = "";
275 DataSet dsDefault = null;
277 for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
278 String key = (String) enKeys.nextElement();
279 for(rff.resetNext(); rff.hasNext(); ) {
281 if(ff.getFieldName().equals(key)) {
283 defaultValue = ff.getDefaultValue();
284 defaultSQL = ff.getFieldDefaultSQL();
285 if(nvl(defaultValue).length()>0) {
286 put(key,ff.getDefaultValue());
287 } else if(nvl(defaultSQL).length() > 0) {
288 //defaultSQL = Utils.replaceInString(defaultSQL, "[LOGGED_USERID]", userId);
289 if(!(isParameterMultiValue(key) || isParameterTextAreaValue(key))) {
290 defaultQuery = "SELECT id, name FROM (SELECT rownum r, id, name FROM (" + defaultSQL
294 dsDefault = ConnectionUtils.getDataSet(defaultQuery, ff.getDbInfo());
295 if(dsDefault!=null && dsDefault.getRowCount()>0) {
296 for (int i = 0; i < dsDefault.getRowCount(); i++) {
297 put(key, dsDefault.getString(i, 0));
300 } catch (RaptorException ex) {}
310 /* for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
311 String key = (String) enKeys.nextElement();
318 public void printValues() {
319 for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
320 String key = (String) enKeys.nextElement();
321 String value = (String) get(key);
322 System.out.println("ReportParamValues " + key + " "+ value);
326 private String getDateAsString (String keyword) {
328 if (keyword.equals("[PROCESSING_DATE]")) {
329 //sql = "select to_char(trunc(sysdate,'dd'), 'mm/dd/yyyy') as dateStr from dual";
330 sql = "select to_char(trunc(sysdate,'dd'), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
331 } else if (keyword.equals("[PROCESSING_NEXT_DATE]")) {
332 //sql = "select to_char(trunc(sysdate+1,'dd'), 'mm/dd/yyyy') as dateStr from dual";
333 sql = "select to_char(trunc(sysdate+1,'dd'), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
334 } else if (keyword.equals("[PROCESSING_DAY_BEFORE_DATE]")) {
335 //sql = "select to_char(trunc(sysdate-1,'dd'), 'mm/dd/yyyy') as dateStr from dual";
336 sql = "select to_char(trunc(sysdate-1,'dd'), 'mm/dd/yyyy') as dateStr"+ Globals.getGenerateSqlVisualDual();
337 } else if (keyword.equals("[PROCESSING_MONTH_START_DATE]")) {
338 //sql = "select to_char(trunc(sysdate,'MM'), 'mm/dd/yyyy') as dateStr from dual";
339 sql = "select to_char(trunc(sysdate,'MM'), 'mm/dd/yyyy') as dateStr"+ Globals.getGenerateSqlVisualDual();
340 } else if (keyword.equals("[PROCESSING_MONTH_END_DATE]")) {
341 //sql = "select to_char(last_day(sysdate), 'mm/dd/yyyy') as dateStr from dual";
342 sql = "select to_char(last_day(sysdate), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
343 } else if (keyword.equals("[CURRENT_HOUR]")) {
344 //sql = "select to_char(trunc(sysdate,'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
345 sql = "select to_char(trunc(sysdate,'HH24'),'mm/dd/yyyy HH24') as dateStr"+ Globals.getGenerateSqlVisualDual();
346 } else if (keyword.equals("[PREVIOUS_HOUR]")) {
347 //sql = "select to_char(trunc(sysdate-1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
348 sql = "select to_char(trunc(sysdate-1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr" + Globals.getGenerateSqlVisualDual();
349 } else if (keyword.equals("[NEXT_HOUR]")) {
350 //sql = "select to_char(trunc(sysdate+1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
351 sql = "select to_char(trunc(sysdate+1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr" + Globals.getGenerateSqlVisualDual();
357 ds = DbUtils.executeQuery(sql);
358 return ds.getString(0,0);
362 } catch (RaptorException ex) {
363 ex.printStackTrace();
368 } // ReportParamValues