2d46326bdcb11b2d8fd4ee4da5a14e1f19e7ae48
[portal/sdk.git] /
1 /*
2  * ============LICENSE_START==========================================
3  * ONAP Portal SDK
4  * ===================================================================
5  * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6  * ===================================================================
7  *
8  * Unless otherwise specified, all software contained herein is licensed
9  * under the Apache License, Version 2.0 (the "License");
10  * you may not use this software except in compliance with the License.
11  * You may obtain a copy of the License at
12  *
13  *             http://www.apache.org/licenses/LICENSE-2.0
14  *
15  * Unless required by applicable law or agreed to in writing, software
16  * distributed under the License is distributed on an "AS IS" BASIS,
17  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18  * See the License for the specific language governing permissions and
19  * limitations under the License.
20  *
21  * Unless otherwise specified, all documentation contained herein is licensed
22  * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
23  * you may not use this documentation except in compliance with the License.
24  * You may obtain a copy of the License at
25  *
26  *             https://creativecommons.org/licenses/by/4.0/
27  *
28  * Unless required by applicable law or agreed to in writing, documentation
29  * distributed under the License is distributed on an "AS IS" BASIS,
30  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
31  * See the License for the specific language governing permissions and
32  * limitations under the License.
33  *
34  * ============LICENSE_END============================================
35  *
36  * 
37  */
38 package org.onap.portalsdk.analytics.model.runtime;
39
40 import java.util.Enumeration;
41 import java.util.Hashtable;
42 import java.util.Iterator;
43
44 import javax.servlet.http.HttpServletRequest;
45
46 import org.onap.portalsdk.analytics.error.RaptorException;
47 import org.onap.portalsdk.analytics.system.ConnectionUtils;
48 import org.onap.portalsdk.analytics.system.DbUtils;
49 import org.onap.portalsdk.analytics.system.Globals;
50 import org.onap.portalsdk.analytics.util.AppConstants;
51 import org.onap.portalsdk.analytics.util.DataSet;
52 import org.onap.portalsdk.analytics.util.Utils;
53 import org.onap.portalsdk.analytics.util.XSSFilter;
54 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
55
56 public class ReportParamValues extends Hashtable {
57         
58         private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportParamValues.class);
59
60         private Hashtable paramIsMultiValue = null;
61         private Hashtable paramIsTextAreaValue = null;
62         private Hashtable paramIsTextAreaDrilldownValue = null;
63         private Hashtable paramIsTextAreaValueModified = null;
64         private ReportFormFields rff = null;
65
66         private Hashtable multiValueBaseSQL = null;
67         private Hashtable textAreaValueBaseSQL = null;
68
69         public ReportParamValues() {
70                 super();
71                 paramIsMultiValue = new Hashtable();
72                 multiValueBaseSQL = new Hashtable();
73                 paramIsTextAreaValue = new Hashtable();
74                 paramIsTextAreaDrilldownValue = new Hashtable();
75                 paramIsTextAreaValueModified = new Hashtable();
76         } // ReportParamValues
77
78         public ReportParamValues(ReportFormFields rff, String reportDefType) {
79                 this();
80                 this.rff = rff;
81                 for (Iterator iter = rff.iterator(); iter.hasNext();) {
82                         FormField ff = (FormField) iter.next();
83                         if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
84                                 put(ff.getFieldName(), nvl(ff.getDefaultValue()));
85                                 put(ff.getFieldName()+"_Hr", nvl(ff.getDefaultValue()));
86                                 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC))  {
87                                         put(ff.getFieldName()+"_Min", nvl(ff.getDefaultValue()));
88                                 }
89                                 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) { 
90                                         put(ff.getFieldName()+"_Sec", nvl(ff.getDefaultValue()));
91                                 }
92                         } else 
93                         put(ff.getFieldName(), nvl(ff.getDefaultValue()));
94
95                         boolean    isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
96                                         || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
97                         boolean isTextAreaValue = ff.getFieldType().equals(FormField.FFT_TEXTAREA) && reportDefType
98                                         .equals(AppConstants.RD_SQL_BASED);
99
100                         paramIsMultiValue.put(ff.getFieldName(), new Boolean(isMultiValue));
101                         paramIsTextAreaValue.put(ff.getFieldName(), new Boolean(isTextAreaValue));
102
103                         if ((isMultiValue || isTextAreaValue)  && ff.getBaseSQL() != null)
104                                 multiValueBaseSQL.put(ff.getFieldName(), ff.getBaseSQL());
105
106                         
107                 } // for
108         } // ReportParamValues
109
110         /*
111          * public ReportParamValues(ReportFormFields rff, HttpServletRequest
112          * request) { this(rff);
113          * 
114          * setParamValues(request); } // ReportParamValues
115          */
116         public boolean isParameterMultiValue(String fieldName) {
117                 Boolean b = (Boolean) paramIsMultiValue.get(fieldName);
118                 return (b != null) ? b.booleanValue() : false;
119         } // isParameterMultiValue
120
121         public boolean isParameterTextAreaValue(String fieldName) {
122                 Boolean b = (Boolean) paramIsTextAreaValue.get(fieldName);
123                 return (b != null) ? b.booleanValue() : false;
124         } // isParameterMultiValue
125
126         public boolean isParameterTextAreaValueAndModified(String fieldName) {
127                 Boolean b = (Boolean) paramIsTextAreaValueModified.get(fieldName);
128                 return (b != null) ? b.booleanValue() : false;
129         } // isParameterMultiValue
130         
131         public boolean setParamValues(HttpServletRequest request, boolean refresh) {
132                 long currentTime = System.currentTimeMillis();
133                 //System.out.println("ReportParamValues setParamValues called " + refresh);
134                 boolean paramUpdated = false;
135        if(refresh) clearValues();
136                 for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
137                         String key = (String) enKeys.nextElement();
138                         String oldValue = XSSFilter.filterRequestOnlyScript(getParamValue(key));
139                         String newValue = null;
140                         if (isParameterMultiValue(key)) {
141                                 String[] values = request.getParameterValues(key);
142
143                                 if (values != null) {
144                                         StringBuffer sb = new StringBuffer();
145                                         for (int i = 0; i < values.length; i++) {
146                                                 if (sb.length() > 0)
147                                                         sb.append('|');
148                                                 sb.append(values[i]);
149                                         } // for
150
151                                         newValue = XSSFilter.filterRequestOnlyScript(sb.toString());
152                                 } // if
153                         } else if (isParameterTextAreaValue(key)) {
154 /*                                      String[] values = request.getParameterValues(key);
155
156                                         if (values != null) {
157                                                 StringBuffer sb = new StringBuffer();
158                                                 for (int i = 0; i < values.length; i++) {
159                                                         if (sb.length() > 0)
160                                                                 sb.append('|');
161                                                         sb.append(values[i]);
162                                                 } // for
163 */
164                                 String value = "";
165                                 value = request.getParameter(key);
166                                 value = Utils.oracleSafe(nvl(value));
167                                 paramIsTextAreaDrilldownValue.put(key, value);
168                                 value = value.replaceAll(",", "|");
169                                 value = "('" + Utils.replaceInString(value, "|", "','") + "')";
170                                 //value = Utils.replaceInString(value, "|", ",");
171                                         newValue = XSSFilter.filterRequestOnlyScript(value);
172                                         paramIsTextAreaValueModified.put(key, new Boolean(true));
173                                         //} // if
174                                 
175                         } else
176                                 // newValue = nvl(request.getParameter(key));
177                                 newValue = XSSFilter.filterRequestOnlyScript(request.getParameter(key));
178                          //debugLogger.debug("IN REPORTPARAM ^NEW VALUE " + newValue + " OLD VALUE " + oldValue + " KEY " + key + " isParameterMultiValue(key) " + isParameterMultiValue(key));
179                         if(!isParameterMultiValue(key) && !isParameterTextAreaValue(key)) {
180                                 if(refresh && nvl(newValue).length()<=0) {
181                                         put(key, oldValue);
182                                 } else  if ( ((newValue != null && newValue.trim().length()>0) && (oldValue!=null && oldValue.trim().length()>0) && !newValue.equals(oldValue)) ||
183                                                 ((newValue != null && newValue.trim().length()>0)   && (oldValue == null || oldValue.trim().length() <= 0)) ) {
184                                         paramUpdated = true;
185                                         //System.out.println("paramupdated1 " +paramUpdated+ " " + newValue + " " + oldValue);
186         //                              if(newValue.startsWith("[") && newValue.endsWith("]")) {
187         //                                      newValue = getDateAsString(newValue);
188         //              }                               
189                                         put(key, newValue);
190                     } else if  (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0)) {
191                         paramUpdated = true;
192                         put(key, newValue);
193                     } else if (nvl(newValue).equals(nvl(oldValue)) ) {
194                         put(key, newValue);
195                     } else {
196                         put(key, "");
197                     }
198                         } else {
199                                 if (((newValue != null && newValue.trim().length()>0) && (oldValue!=null && oldValue.trim().length()>0) && !newValue.equals(oldValue)) ||  
200                                    ((newValue != null && newValue.trim().length()>0)   && (oldValue == null || oldValue.trim().length() <= 0)) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
201                                         if(isParameterTextAreaValue(key)) {
202                                                 newValue = getParamValueforTextAreaDrilldown(key);
203                                                 if(newValue.length() > 0 && !newValue.equals(oldValue)) {
204                                                         paramUpdated = true;
205                                                         put (key, newValue);
206                                                 }
207                                         } else {
208                                                 paramUpdated = true;
209                                                 put (key, newValue);
210                                         }
211                         
212                     } else if (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
213                         paramUpdated = true;
214                                         //System.out.println("paramupdated3 " +paramUpdated+ " N" + newValue + " O" + oldValue);
215                         put(key, "");
216                     }
217                         }
218                 } // for
219         //printValues();
220         logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for Adding/Clearing Param Values for Search Field Display " + (System.currentTimeMillis() - currentTime)));
221                 return paramUpdated;
222         } // setParamValues
223
224         public String getParamValueforTextAreaDrilldown(String key) {
225                 return (String) paramIsTextAreaDrilldownValue.get(key);
226         }
227         
228         public String getParamValue(String key) {
229                 //This logic below is added to avoid BLANK formfield to pass through logic - Sundar
230                 if (key!=null) {
231                         if(isParameterTextAreaValueAndModified(key)) {
232                                 String value = "";
233                                 value = (String) get(key);
234                                 value = Utils.oracleSafe(nvl(value));
235                                 value = value.replaceAll(",","|");
236                                 if(nvl(value).length()>0) {
237                                         if(nvl(value).indexOf("|")!= -1) {  // Need option to support "|"
238                                                 value = Utils.replaceInString(value,"\r\n","~");
239                                 }
240                                         value = Utils.replaceInString(value, "~", "' , '");
241                                 value = "('" + Utils.replaceInString(value, "|", "','") + "')"; // changed from "|"
242                                 //value = Utils.replaceInString(value, "|", ",");
243                                         value = XSSFilter.filterRequestOnlyScript(value);
244                                 return value;
245                                 } else return "";
246                                 
247 //                              if(nvl(value).length()>0) {
248 //                                      value = Utils.replaceInString(value, ",", "|");
249 //                                      value = value.indexOf("('")!=-1? value.substring(2, value.length()-2):value;
250 //                                      value = Utils.replaceInString(value, "'|'", ",");
251 //                              }
252 //                              return value;
253                                 
254                         } else
255                         return (String) get(key);
256                 }
257                 else
258                         return "";
259         } // getParamValue
260
261         public String getParamDisplayValue(String key) {
262                 String value = getParamValue(key);
263                 if (isParameterMultiValue(key))
264                         value = "(" + Utils.replaceInString(value, "|", ",") + ")";
265                 return value;
266         } // getParamValue
267
268         public String getParamBaseSQL(String key) {
269                 return (String) multiValueBaseSQL.get(key);
270         } // getParamBaseSQL
271
272         /** ************************************************************************************************* */
273
274         private String nvl(String s) {
275                 return (s == null) ? "" : s;
276         }
277
278         private String nvl(String s, String sDefault) {
279                 return nvl(s).equals("") ? sDefault : s;
280         }
281     
282     private boolean isNull(String a) {
283         if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
284             return true;
285         else
286             return false;
287     }
288     
289     private void clearValues() {
290         FormField ff = null;
291         String defaultValue = "";
292         String defaultSQL = "";
293         String defaultQuery = "";
294         DataSet dsDefault = null; 
295         if (rff!= null) {
296                         for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
297                             String key = (String) enKeys.nextElement();
298                                 for(rff.resetNext(); rff.hasNext(); ) {
299                                         ff = rff.getNext();
300                                         if(ff.getFieldName().equals(key)) {
301                                                 // Add default Value
302                                                 defaultValue = ff.getDefaultValue();
303                                                 defaultSQL = ff.getFieldDefaultSQL();
304                                                 if(nvl(defaultValue).length()>0) {
305                                                         put(key,ff.getDefaultValue());
306                                                 } else if(nvl(defaultSQL).length() > 0) {
307                                                         //defaultSQL = Utils.replaceInString(defaultSQL, "[LOGGED_USERID]", userId);
308                                                         if(!(isParameterMultiValue(key) || isParameterTextAreaValue(key))) {
309                                                     defaultQuery = "SELECT id, name FROM (SELECT rownum r, id, name FROM (" + defaultSQL
310                                                     + ") x "
311                                                     + ") xx ";
312                                                     try {
313                                                             dsDefault = ConnectionUtils.getDataSet(defaultQuery, ff.getDbInfo());
314                                                             if(dsDefault!=null && dsDefault.getRowCount()>0) {
315                                                                 for (int i = 0; i < dsDefault.getRowCount(); i++) {
316                                                                         put(key, dsDefault.getString(i, 0));
317                                                                 }
318                                                             }
319                                                     } catch (RaptorException ex) {}
320                                                         } else put(key, "");
321
322                                                 } else put(key,"");
323                                                 break;
324                                         }
325                                 }
326                         }
327                 }       
328         
329 /*              for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
330                     String key = (String) enKeys.nextElement();
331                     put(key,"");
332                 }
333 */              
334         }
335         
336     
337     public void printValues() {
338         for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
339             String key = (String) enKeys.nextElement();
340             String value = (String) get(key);
341             System.out.println("ReportParamValues " + key + "  "+ value);
342         }
343     }
344     
345         private String getDateAsString (String keyword) {
346                 String sql = "";
347                 if (keyword.equals("[PROCESSING_DATE]")) {
348                         //sql = "select to_char(trunc(sysdate,'dd'), 'mm/dd/yyyy') as dateStr from dual"; 
349                         sql = "select to_char(trunc(sysdate,'dd'), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
350                 } else if (keyword.equals("[PROCESSING_NEXT_DATE]")) {
351                         //sql = "select to_char(trunc(sysdate+1,'dd'), 'mm/dd/yyyy') as dateStr from dual"; 
352                         sql = "select to_char(trunc(sysdate+1,'dd'), 'mm/dd/yyyy') as dateStr"  + Globals.getGenerateSqlVisualDual(); 
353                 } else if (keyword.equals("[PROCESSING_DAY_BEFORE_DATE]")) {
354                         //sql = "select to_char(trunc(sysdate-1,'dd'), 'mm/dd/yyyy') as dateStr from dual";
355                         sql = "select to_char(trunc(sysdate-1,'dd'), 'mm/dd/yyyy') as dateStr"+ Globals.getGenerateSqlVisualDual(); 
356                 } else if (keyword.equals("[PROCESSING_MONTH_START_DATE]")) {
357                         //sql = "select to_char(trunc(sysdate,'MM'), 'mm/dd/yyyy') as dateStr from dual";
358                         sql = "select to_char(trunc(sysdate,'MM'), 'mm/dd/yyyy') as dateStr"+ Globals.getGenerateSqlVisualDual(); 
359                 } else if (keyword.equals("[PROCESSING_MONTH_END_DATE]")) {
360                         //sql = "select to_char(last_day(sysdate), 'mm/dd/yyyy') as dateStr from dual"; 
361                         sql = "select to_char(last_day(sysdate), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();  
362                 } else if (keyword.equals("[CURRENT_HOUR]")) {
363                         //sql = "select to_char(trunc(sysdate,'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
364                         sql = "select to_char(trunc(sysdate,'HH24'),'mm/dd/yyyy HH24') as dateStr"+ Globals.getGenerateSqlVisualDual();
365                 } else if (keyword.equals("[PREVIOUS_HOUR]")) {
366                         //sql = "select to_char(trunc(sysdate-1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
367                         sql = "select to_char(trunc(sysdate-1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr" + Globals.getGenerateSqlVisualDual();
368                 } else if (keyword.equals("[NEXT_HOUR]")) {
369                         //sql = "select to_char(trunc(sysdate+1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
370                         sql = "select to_char(trunc(sysdate+1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr" + Globals.getGenerateSqlVisualDual();
371                 }
372                 DataSet ds = null;
373                 
374                 try {
375                         if(sql.length()>0) {
376                                 ds = DbUtils.executeQuery(sql);
377                                 return ds.getString(0,0);
378                         }
379                         else 
380                                 return "";
381                 } catch (RaptorException ex) {
382             logger.error(EELFLoggerDelegate.errorLogger, "RaptorException in getDateAsString", ex);
383                         //throw ex;
384                 }
385                 return "";
386         }
387 } // ReportParamValues
388