ebc103d16d2d7b71c3fff5acffd2a8b606e21fcb
[portal/sdk.git] /
1 /*-
2  * ================================================================================
3  * eCOMP Portal SDK
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
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
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  * ================================================================================
19  */
20 package org.openecomp.portalsdk.analytics.model.runtime;
21
22 import java.util.Enumeration;
23 import java.util.Hashtable;
24 import java.util.Iterator;
25
26 import javax.servlet.http.HttpServletRequest;
27
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;
37
38 public class ReportParamValues extends Hashtable {
39         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportParamValues.class);
40
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;
46
47         private Hashtable multiValueBaseSQL = null;
48         private Hashtable textAreaValueBaseSQL = null;
49
50         public ReportParamValues() {
51                 super();
52                 paramIsMultiValue = new Hashtable();
53                 multiValueBaseSQL = new Hashtable();
54                 paramIsTextAreaValue = new Hashtable();
55                 paramIsTextAreaDrilldownValue = new Hashtable();
56                 paramIsTextAreaValueModified = new Hashtable();
57         } // ReportParamValues
58
59         public ReportParamValues(ReportFormFields rff, String reportDefType) {
60                 this();
61                 this.rff = rff;
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()));
69                                 }
70                                 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) { 
71                                         put(ff.getFieldName()+"_Sec", nvl(ff.getDefaultValue()));
72                                 }
73                         } else 
74                         put(ff.getFieldName(), nvl(ff.getDefaultValue()));
75
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);
80
81                         paramIsMultiValue.put(ff.getFieldName(), new Boolean(isMultiValue));
82                         paramIsTextAreaValue.put(ff.getFieldName(), new Boolean(isTextAreaValue));
83
84                         if ((isMultiValue || isTextAreaValue)  && ff.getBaseSQL() != null)
85                                 multiValueBaseSQL.put(ff.getFieldName(), ff.getBaseSQL());
86
87                         
88                 } // for
89         } // ReportParamValues
90
91         /*
92          * public ReportParamValues(ReportFormFields rff, HttpServletRequest
93          * request) { this(rff);
94          * 
95          * setParamValues(request); } // ReportParamValues
96          */
97         public boolean isParameterMultiValue(String fieldName) {
98                 Boolean b = (Boolean) paramIsMultiValue.get(fieldName);
99                 return (b != null) ? b.booleanValue() : false;
100         } // isParameterMultiValue
101
102         public boolean isParameterTextAreaValue(String fieldName) {
103                 Boolean b = (Boolean) paramIsTextAreaValue.get(fieldName);
104                 return (b != null) ? b.booleanValue() : false;
105         } // isParameterMultiValue
106
107         public boolean isParameterTextAreaValueAndModified(String fieldName) {
108                 Boolean b = (Boolean) paramIsTextAreaValueModified.get(fieldName);
109                 return (b != null) ? b.booleanValue() : false;
110         } // isParameterMultiValue
111         
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);
123
124                                 if (values != null) {
125                                         StringBuffer sb = new StringBuffer();
126                                         for (int i = 0; i < values.length; i++) {
127                                                 if (sb.length() > 0)
128                                                         sb.append('|');
129                                                 sb.append(values[i]);
130                                         } // for
131
132                                         newValue = XSSFilter.filterRequestOnlyScript(sb.toString());
133                                 } // if
134                         } else if (isParameterTextAreaValue(key)) {
135 /*                                      String[] values = request.getParameterValues(key);
136
137                                         if (values != null) {
138                                                 StringBuffer sb = new StringBuffer();
139                                                 for (int i = 0; i < values.length; i++) {
140                                                         if (sb.length() > 0)
141                                                                 sb.append('|');
142                                                         sb.append(values[i]);
143                                                 } // for
144 */
145                                 String value = "";
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));
154                                         //} // if
155                                 
156                         } else
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) {
162                                         put(key, oldValue);
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)) ) {
165                                         paramUpdated = true;
166                                         //System.out.println("paramupdated1 " +paramUpdated+ " " + newValue + " " + oldValue);
167         //                              if(newValue.startsWith("[") && newValue.endsWith("]")) {
168         //                                      newValue = getDateAsString(newValue);
169         //              }                               
170                                         put(key, newValue);
171                     } else if  (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0)) {
172                         paramUpdated = true;
173                         put(key, newValue);
174                     } else if (nvl(newValue).equals(nvl(oldValue)) ) {
175                         put(key, newValue);
176                     } else {
177                         put(key, "");
178                     }
179                         } else {
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)) {
185                                                         paramUpdated = true;
186                                                         put (key, newValue);
187                                                 }
188                                         } else {
189                                                 paramUpdated = true;
190                                                 put (key, newValue);
191                                         }
192                         
193                     } else if (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
194                         paramUpdated = true;
195                                         //System.out.println("paramupdated3 " +paramUpdated+ " N" + newValue + " O" + oldValue);
196                         put(key, "");
197                     }
198                         }
199                 } // for
200         //printValues();
201         logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for Adding/Clearing Param Values for Search Field Display " + (System.currentTimeMillis() - currentTime)));
202                 return paramUpdated;
203         } // setParamValues
204
205         public String getParamValueforTextAreaDrilldown(String key) {
206                 return (String) paramIsTextAreaDrilldownValue.get(key);
207         }
208         
209         public String getParamValue(String key) {
210                 //This logic below is added to avoid BLANK formfield to pass through logic - Sundar
211                 if (key!=null) {
212                         if(isParameterTextAreaValueAndModified(key)) {
213                                 String value = "";
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","~");
220                                 }
221                                         value = Utils.replaceInString(value, "~", "' , '");
222                                 value = "('" + Utils.replaceInString(value, "|", "','") + "')"; // changed from "|"
223                                 //value = Utils.replaceInString(value, "|", ",");
224                                         value = XSSFilter.filterRequestOnlyScript(value);
225                                 return value;
226                                 } else return "";
227                                 
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, "'|'", ",");
232 //                              }
233 //                              return value;
234                                 
235                         } else
236                         return (String) get(key);
237                 }
238                 else
239                         return "";
240         } // getParamValue
241
242         public String getParamDisplayValue(String key) {
243                 String value = getParamValue(key);
244                 if (isParameterMultiValue(key))
245                         value = "(" + Utils.replaceInString(value, "|", ",") + ")";
246                 return value;
247         } // getParamValue
248
249         public String getParamBaseSQL(String key) {
250                 return (String) multiValueBaseSQL.get(key);
251         } // getParamBaseSQL
252
253         /** ************************************************************************************************* */
254
255         private String nvl(String s) {
256                 return (s == null) ? "" : s;
257         }
258
259         private String nvl(String s, String sDefault) {
260                 return nvl(s).equals("") ? sDefault : s;
261         }
262     
263     private boolean isNull(String a) {
264         if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
265             return true;
266         else
267             return false;
268     }
269     
270     private void clearValues() {
271         FormField ff = null;
272         String defaultValue = "";
273         String defaultSQL = "";
274         String defaultQuery = "";
275         DataSet dsDefault = null; 
276         if (rff!= null) {
277                         for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
278                             String key = (String) enKeys.nextElement();
279                                 for(rff.resetNext(); rff.hasNext(); ) {
280                                         ff = rff.getNext();
281                                         if(ff.getFieldName().equals(key)) {
282                                                 // Add default Value
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
291                                                     + ") x "
292                                                     + ") xx ";
293                                                     try {
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));
298                                                                 }
299                                                             }
300                                                     } catch (RaptorException ex) {}
301                                                         } else put(key, "");
302
303                                                 } else put(key,"");
304                                                 break;
305                                         }
306                                 }
307                         }
308                 }       
309         
310 /*              for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
311                     String key = (String) enKeys.nextElement();
312                     put(key,"");
313                 }
314 */              
315         }
316         
317     
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);
323         }
324     }
325     
326         private String getDateAsString (String keyword) {
327                 String sql = "";
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();
352                 }
353                 DataSet ds = null;
354                 
355                 try {
356                         if(sql.length()>0) {
357                                 ds = DbUtils.executeQuery(sql);
358                                 return ds.getString(0,0);
359                         }
360                         else 
361                                 return "";
362                 } catch (RaptorException ex) {
363                         ex.printStackTrace();
364                         //throw ex;
365                 }
366                 return "";
367         }
368 } // ReportParamValues
369