b1c54fa3b86a83b67b716bb3a37b54cdbad7266e
[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.error.ReportSQLException;
30 import org.openecomp.portalsdk.analytics.system.AppUtils;
31 import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
32 import org.openecomp.portalsdk.analytics.system.Globals;
33 import org.openecomp.portalsdk.analytics.util.AppConstants;
34 import org.openecomp.portalsdk.analytics.util.DataSet;
35 import org.openecomp.portalsdk.analytics.util.Utils;
36 import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
37
38 public class ReportParamValuesForPDFExcel extends Hashtable {
39         
40         EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportParamValuesForPDFExcel.class);
41
42         private Hashtable paramIsMultiValue = null;
43         private Hashtable paramIsTextAreaValue = null;
44         private ReportFormFields rff = null;
45
46         private Hashtable multiValueBaseSQL = null;
47
48         public ReportParamValuesForPDFExcel() {
49                 super();
50                 paramIsMultiValue = new Hashtable();
51                 paramIsTextAreaValue = new Hashtable();
52                 multiValueBaseSQL = new Hashtable();
53         } // ReportParamValues
54
55         public ReportParamValuesForPDFExcel(ReportFormFields rff, String reportDefType) {
56                 this();
57                 this.rff = rff;
58                 for (Iterator iter = rff.iterator(); iter.hasNext();) {
59                         FormField ff = (FormField) iter.next();
60                         
61                         put(ff.getFieldName(), nvl(ff.getDefaultValue()));
62
63                         boolean isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
64                                         || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
65                         boolean isTextAreaValue = ff.getFieldType().equals(FormField.FFT_TEXTAREA) && reportDefType
66                                                         .equals(AppConstants.RD_SQL_BASED);
67                         paramIsMultiValue.put(ff.getFieldName(), new Boolean(isMultiValue));
68                         paramIsTextAreaValue.put(ff.getFieldName(), new Boolean(isTextAreaValue));
69                         if (isMultiValue && ff.getBaseSQL() != null)
70                                 multiValueBaseSQL.put(ff.getFieldName(), ff.getBaseSQL());
71                 } // for
72         } // ReportParamValues
73
74         /*
75          * public ReportParamValues(ReportFormFields rff, HttpServletRequest
76          * request) { this(rff);
77          * 
78          * setParamValues(request); } // ReportParamValues
79          */
80         public boolean isParameterMultiValue(String fieldName) {
81                 Boolean b = (Boolean) paramIsMultiValue.get(fieldName);
82                 return (b != null) ? b.booleanValue() : false;
83         } // isParameterMultiValue
84         
85         public boolean isParameterTextAreaValue(String fieldName) {
86                 Boolean b = (Boolean) paramIsTextAreaValue.get(fieldName);
87                 return (b != null) ? b.booleanValue() : false;
88         } // isParameterMultiValue      
89
90         public boolean setParamValues(HttpServletRequest request, boolean refresh) {
91                 //debugLogger.debug("ReportParamValues for PDF Excel setParamValues called " + refresh);
92            long currentTime = System.currentTimeMillis();
93                 boolean paramUpdated = false;
94        if(refresh) clearValues();
95                String name = null;
96                String value = null; 
97                String value1 = "";
98                String sql = "";
99                FormField ff = null;
100                          String dbInfo = null;
101                          ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
102                          if(rr!=null && rr.getReportType().equals(AppConstants.RT_DASHBOARD)) {
103                                 rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
104                                 if(rr!=null)
105                                         rff = rr.getReportFormFields();
106                          } else if (rr == null) {
107                                         rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
108                                         if(rr!=null)
109                                                 rff = rr.getReportFormFields();
110                          } else {
111                                  rff = rr.getReportFormFields();
112                          }
113                          
114                          if(rr!=null) { 
115                                 dbInfo = rr.getDBInfo();
116                                 if (Utils.isNull(dbInfo)) {
117                                         dbInfo = (String) request.getSession().getAttribute("remoteDB");
118                                 }       
119                                 if(!Utils.isNull(dbInfo)){             
120                         for (Iterator iter = rff.iterator(); iter.hasNext();) {
121                                     name=""; //just added
122                                         ff = (FormField) iter.next();
123                                         //debugLogger.debug("ff.getFieldName " + ff.getFieldName() + " " + ff.getFieldDisplayName() + " " + ff.getFieldType()+ " " +ff.getBaseSQLForPDFExcel()+ " "+ rr.getParamValue(ff.getFieldName()));
124                                         if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
125                                         sql = ff.getBaseSQLForPDFExcel();
126                                         if(sql!=null && sql.trim().length()>0)
127                                                 sql = Utils.replaceInString(sql, "[LOGGED_USERID]", AppUtils.getUserID(request));
128                                         if(ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX) || ff.getFieldType().equals(FormField.FFT_TEXT_W_POPUP) || ff.getFieldType().equals(FormField.FFT_HIDDEN)) {
129                                        for (Enumeration enum1 = rr.getParamKeys(); enum1.hasMoreElements();) {
130                                                name = (String) enum1.nextElement();
131                                                    value = rr.getParamValue(name);
132                                                    value = getParamValueForSQL(name, value);
133                                                    if(name.startsWith("ff")) {
134                                                                 for (Iterator iter1 = rff.iterator(); iter1.hasNext();) {
135                                                                         FormField ff1 = (FormField) iter1.next();
136                                                                         
137                                                                         if(sql!=null && sql.trim().length()>0){
138                                                                                  if(name.equals(ff.getFieldName())){
139                                                                                         sql = Utils.replaceInString(sql, "[VALUE]", value);
140                                                                                  }
141                                                if(name.equals(ff1.getFieldName())){
142                                                    sql = Utils.replaceInString(sql, "["+ff1.getFieldDisplayName()+"]", value);
143         
144                                                } else continue;
145                                                                         }
146                                                                 }
147                                            }
148                                        }
149                                         } else if (ff.getFieldType().equals(ff.FFT_LIST_MULTI)||ff.getFieldType().equals(ff.FFT_CHECK_BOX)) {
150                                                for (Enumeration enum1 = rr.getParamKeys(); enum1.hasMoreElements();) {
151                                                        name = (String) enum1.nextElement();
152                                                            value = rr.getParamValue(name);
153                                                            value = getParamValueForSQL(name, value);
154                                                            if(name.startsWith("ff")) {
155                                                                                 for (Iterator iter1 = rff.iterator(); iter1.hasNext();) {
156                                                                                         FormField ff1 = (FormField) iter1.next();
157                                                                                         
158                                                                                         if(sql!=null && sql.trim().length()>0){
159                                                                                                  if(name.equals(ff.getFieldName())){
160                                                                                                         sql = Utils.replaceInString(sql, "[VALUE]", value);
161                                                                                                  }
162                                                                if(name.equals(ff1.getFieldName())){
163                                                                    sql = Utils.replaceInString(sql, "["+ff1.getFieldDisplayName()+"]", value);
164                         
165                                                                } else continue;
166                                                                                         }
167                                                                                 }
168                                                    }
169                                                }
170                                                 } else {
171                                                         if(nvl(ff.getFieldDefaultSQL()).length()<=0)
172                                                                 sql = "";
173                                                 }
174                                          if(sql!=null && sql.trim().length()>0){
175                                                  name = "";
176                                                  if(name.length()<=0) name = ff.getFieldName();
177                                                  value = rr.getParamValue(name);
178                                                  //debugLogger.debug("Name "+ name+ " value:" + value);
179                                                  String paramValue = getParamValueForSQL(name, value);
180                                                  //debugLogger.debug("PDFEXCEL " + name+ " " + ff.getFieldName()+ " " +  value + " " + sql +" "+ paramValue);
181                                                  if(name!=null && name.equals(ff.getFieldName()))
182                                                         sql = Utils.replaceInString(sql, "[VALUE]", paramValue);
183                                                   if(paramValue == null) {
184                                                           if(sql.lastIndexOf("where id = ''")>0) 
185                                                                   sql = sql.substring(0, sql.lastIndexOf("where id = ''"));
186                                                   }
187                                                         //debugLogger.debug("SQL Modified " + sql);
188                                                         FormField ff2 = null;
189                                                         for (Iterator iter1 = rff.iterator(); iter1.hasNext();) {
190                                                                 ff2 = (FormField)iter1.next();
191                                                                 sql = Utils.replaceInString(sql, "[" + ff2.getFieldDisplayName() +"]", getParamValue(ff2.getFieldName()));
192                                                         }
193                                                         //debugLogger.debug("SQL Modified after replacing formfield" + sql);
194                                                         try {
195                                                         String[] reqParameters = Globals.getRequestParams().split(",");
196                                                         String[] sessionParameters = Globals.getSessionParams().split(",");
197                                                         String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
198                                                         javax.servlet.http.HttpSession session = request.getSession();
199                                 //debugLogger.debug("B4 Session " + sql);                                                               
200                                                     if(session != null ) {
201                                                         for (int i = 0; i < sessionParameters.length; i++) {
202                                                               sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
203                                                         }
204                                                      }                                                                  
205                                 //debugLogger.debug("B4 request " + sql);                                                               
206                                                         if(request != null ) {
207                                                         for (int i = 0; i < scheduleSessionParameters.length; i++) {
208                                                                 sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
209                                                         }
210                                                         for (int i = 0; i < reqParameters.length; i++) {
211                                                             if(!reqParameters[i].startsWith("ff")) {
212                                                                 if (request.getParameter(reqParameters[i])!=null) {
213                                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i]+"]", request.getParameter(reqParameters[i]) );
214                                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
215                                                                 }
216                                                                 else {
217                                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i]+"]", request.getParameter(reqParameters[i].toUpperCase()) );
218                                                                         sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
219                                                                 }
220                                                             }
221                                                             else
222                                                               sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );   
223                                                         }
224                                                      }
225                                 //debugLogger.debug("After request " + sql);                                                                    
226                                                      DataSet ds = null;
227                                                      try {
228                                                          ds = ConnectionUtils.getDataSet(sql, dbInfo);
229                                                      } catch (ReportSQLException ex) {
230                                                          logger.debug(EELFLoggerDelegate.debugLogger, ("sql not complete" + sql));
231                                                          }
232                                                           if(ff.getFieldType().equals(FormField.FFT_LIST_MULTI) || ff.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
233                                                          StringBuffer multiValue = new StringBuffer("");
234                                                          if(ds!=null) {
235                                                          for(int i = 0; i < ds.getRowCount(); i++) {
236                                                                  //if(i==0) multiValue.append("(");
237                                                                  multiValue.append(ds.getString(i,1));
238                                                                  if(i<ds.getRowCount()-1)
239                                                                   multiValue.append("|");
240                                                                  //else multiValue.append(")");
241                                                                  
242                                                          }
243                                                          }
244                                                           put(ff.getFieldName(), nvl(multiValue.toString()));
245                                                           } else {
246                                                                         if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
247                                                                                 value1 = nvl(rr.getParamValue(ff.getFieldName())) + " "+addZero(Utils.oracleSafe(nvl(rr
248                                                                                 .getParamValue(ff.getFieldName()+"_Hr"))));
249                                                                                 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
250                                                                                         value1 = value1 + (nvl(rr
251                                                                                                         .getParamValue(ff.getFieldName()+"_Min")).length() > 0 ? ":" + addZero(Utils.oracleSafe(nvl(rr
252                                                                                                 .getParamValue(ff.getFieldName()+"_Min")))) : ""); 
253                                                                                 }
254                                                                                 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
255                                                                                         value1 =  value1 + (nvl(rr
256                                                                                                         .getParamValue(ff.getFieldName()+"_Sec")).length() > 0 ? ":"+ addZero(Utils.oracleSafe(nvl(rr
257                                                                                                                 .getParamValue(ff.getFieldName()+"_Sec")))) : "");
258                                                                                 }
259                                                                                 //debugLogger.debug("77777777777777 " + value1);
260                                                                                 put(ff.getFieldName(), nvl(value1));
261                                                                         } else { 
262                                                                   
263                                                                   if(ds!=null && ds.getRowCount()>0) put(ff.getFieldName(), nvl(ds.getString(0,1)));
264                                                                   else put(ff.getFieldName(), nvl(value));
265                                                                         }
266                                                           }
267                                                          
268                                                           paramUpdated = true; 
269                                                         } catch (ReportSQLException ex) {
270                                                                 logger.debug(EELFLoggerDelegate.debugLogger, ("sql not complete" + sql));
271                                                         }
272                                                         catch (Exception ex) {}
273                                                         
274                                                         //debugLogger.debug("66666666666666666 " + ff.getValidationType());
275
276                                                         //Added for TimeStamp validation
277                                                         
278                                          } else {
279                                                  if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
280                                                                 //Added for TimeStamp validation
281                                                          //debugLogger.debug("666666666666 " + ff.getValidationType());
282                                                                 if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
283                                                                         value1 = nvl(rr.getParamValue(ff.getFieldName())) + " "+addZero(Utils.oracleSafe(nvl(rr
284                                                                         .getParamValue(ff.getFieldName()+"_Hr"))));
285                                                                         if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
286                                                                                 value1 = value1 + (nvl(rr
287                                                                                         .getParamValue(ff.getFieldName()+"_Min")).length() > 0 ? ":" + addZero(Utils.oracleSafe(nvl(rr
288                                                                                         .getParamValue(ff.getFieldName()+"_Min")))) : ""); 
289                                                                         }
290                                                                         if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
291                                                                                 value1 =  value1 + (nvl(rr
292                                                                                         .getParamValue(ff.getFieldName()+"_Sec")).length() > 0 ? ":"+ addZero(Utils.oracleSafe(nvl(rr
293                                                                                                         .getParamValue(ff.getFieldName()+"_Sec")))) : "");
294                                                                         }
295                                                                         //debugLogger.debug("77777777777777 " + value1);
296                                                                 } else 
297                                                                      value1 = nvl(rr.getParamValue(ff.getFieldName()));
298                                                                      if(value1.length()<=0) value1 = nvl(ff.getDefaultValue());
299                                                                          put(ff.getFieldName(), nvl(value1));
300
301                                                  }
302                                                  paramUpdated = true;
303                                          }
304
305                                         } // BLANK       
306                                                 } // for
307                                 } // dbInfo
308                          } // !=null
309                          
310                         //printValues();                 
311         logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for Adding/Clearing Param Values for FormField Info Bar " + (System.currentTimeMillis() - currentTime)));
312         return paramUpdated;
313         } // setParamValues
314
315         public String getParamValue(String key) {
316                 if (key!=null)          
317                         return (String) get(key);
318                 else 
319                         return "NULL";
320         } // getParamValue
321
322         public String getParamValueForSQL(String key, String value) {
323                 value = Utils.oracleSafe(value);
324                 if (isParameterMultiValue(key))
325                         value = "('" + Utils.replaceInString(value, "|", "','") + "')";
326                 return value;
327         } // getParamValue
328         
329         public String getParamDisplayValue(String key) {
330                 //debugLogger.debug("Key is " + key +" Value is " + getParamValue(key));
331                 String value = getParamValue(key);
332                 if (isParameterMultiValue(key))
333                         value = "(" + Utils.replaceInString(value, "|", ",") + ")";
334                 return value;
335         } // getParamValue
336
337         public String getParamBaseSQL(String key) {
338                 return (String) multiValueBaseSQL.get(key);
339         } // getParamBaseSQL
340
341         /** ************************************************************************************************* */
342
343         private String nvl(String s) {
344                 return (s == null) ? "" : s;
345         }
346
347         private String nvl(String s, String sDefault) {
348                 return nvl(s).equals("") ? sDefault : s;
349         }
350     
351     private boolean isNull(String a) {
352         if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
353             return true;
354         else
355             return false;
356     }
357     
358     private void clearValues() {
359         FormField ff = null;
360         String defaultValue = "";
361         String defaultSQL = "";
362         String defaultQuery = "";
363         DataSet dsDefault = null; 
364         if (rff!= null) {
365                         for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
366                             String key = (String) enKeys.nextElement();
367                                 for(rff.resetNext(); rff.hasNext(); ) {
368                                         ff = rff.getNext();
369                                         if(ff.getFieldName().equals(key)) {
370                                                 // Add default Value
371                                                 defaultValue = ff.getDefaultValue();
372                                                 defaultSQL = ff.getFieldDefaultSQL();
373                                                 if(nvl(defaultValue).length()>0) {
374                                                         put(key,ff.getDefaultValue());
375                                                 } else if(nvl(defaultSQL).length() > 0) {
376                                                         //defaultSQL = Utils.replaceInString(defaultSQL, "[LOGGED_USERID]", userId);
377                                                         if(!(isParameterMultiValue(key) || isParameterTextAreaValue(key))) {
378                                                     defaultQuery = "SELECT id, name FROM (SELECT rownum r, id, name FROM (" + defaultSQL
379                                                     + ") x "
380                                                     + ") xx ";
381                                                     try {
382                                                             dsDefault = ConnectionUtils.getDataSet(defaultQuery, ff.getDbInfo());
383                                                             if(dsDefault!=null && dsDefault.getRowCount()>0) {
384                                                                 for (int i = 0; i < dsDefault.getRowCount(); i++) {
385                                                                         put(key, dsDefault.getString(i, 1));
386                                                                 }
387                                                             }
388                                                     } catch (RaptorException ex) {}
389                                                         } else put(key, "");
390
391                                                 } else put(key,"");
392                                                 break;
393                                         }
394                                 }
395                         }
396                 }
397
398     }
399     
400     public void printValues() {
401         for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
402             String key = (String) enKeys.nextElement();
403             String value = (String) get(key);
404             logger.debug(EELFLoggerDelegate.debugLogger, ("ReportParamValuesForPDFEXCEL " + key + "  "+ value));
405         }
406     }    
407     public String addZero(String num) {
408         int numInt = 0;
409         try {
410                 numInt = Integer.parseInt(num);
411         }catch(NumberFormatException ex){
412                 numInt = 0;
413         }
414         if(numInt < 10) return "0"+numInt;
415         else return ""+numInt;
416     }    
417
418 } // ReportParamValues
419