bce35a6b4fae248d976a95aa778a0cfff4d15b64
[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.*;
23 import javax.servlet.http.*;
24
25 import org.openecomp.portalsdk.analytics.error.RaptorException;
26 import org.openecomp.portalsdk.analytics.model.*;
27 import org.openecomp.portalsdk.analytics.model.base.*;
28 import org.openecomp.portalsdk.analytics.model.definition.*;
29 import org.openecomp.portalsdk.analytics.system.*;
30 import org.openecomp.portalsdk.analytics.util.*;
31 import org.openecomp.portalsdk.analytics.xmlobj.*;
32
33 public class ReportFormFields extends Vector {
34         private int nextElemIdx = 0;
35
36         public ReportFormFields(ReportWrapper rw, HttpServletRequest request) throws RaptorException {
37                 super();
38
39                 if (rw.getFormFieldList() != null)
40                         for (Iterator iter = rw.getFormFieldList().getFormField().iterator(); iter
41                                         .hasNext();) {
42                                 FormFieldType fft = (FormFieldType) iter.next();
43
44                                 String fieldName = fft.getFieldId();
45                                 String fieldDisplayName = fft.getFieldName();
46                                 String fieldType = fft.getFieldType();
47                                 String validationType = fft.getValidationType();
48                                 String mandatory = nvl(fft.getMandatory(), "N");
49                                 String defaultValue = fft.getDefaultValue();
50                                 String fieldSQL = fft.getFieldSQL();
51                 String fieldDefaultSQL = fft.getFieldDefaultSQL();
52                 String[] reqParameters = Globals.getRequestParams().split(",");
53                 String[] sessionParameters = Globals.getSessionParams().split(",");
54                 String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
55                 javax.servlet.http.HttpSession session = request.getSession();
56                 String visible = nvl(fft.getVisible(),"Y");
57                 String dependsOn = nvl(fft.getDependsOn(), "");
58                 Calendar rangeStartDate = (fft.getRangeStartDate()==null)?null:fft.getRangeStartDate().toGregorianCalendar(); 
59                 Calendar rangeEndDate = (fft.getRangeEndDate()==null)?null:fft.getRangeEndDate().toGregorianCalendar(); 
60                                 //Calendar rangeEndDate = fft.getRangeEndDate().toGregorianCalendar(); 
61                                 String rangeStartDateSQL = fft.getRangeStartDateSQL(); 
62                                 String rangeEndDateSQL = fft.getRangeEndDateSQL(); 
63                                 String user_id = AppUtils.getUserID(request);
64                                 String multiSelectListSize = fft.getMultiSelectListSize();
65                                 
66                                 //s_logger.debug("ranges are : " + fft.getRangeStartDate() + fft.getRangeEndDate());
67                                 //s_logger.debug("fieldSQL B4" + fieldSQL);
68                 if(fieldSQL!=null) {
69                     for (int i = 0; i < reqParameters.length; i++) {
70                         if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
71                          fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
72                         else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
73                          fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );   
74                     }
75
76                         for (int i = 0; i < scheduleSessionParameters.length; i++) {
77                                 //s_logger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
78                                 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
79                                         fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
80                                 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
81                                         fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
82
83                         }
84
85                     for (int i = 0; i < sessionParameters.length; i++) {
86                         //if(!sessionParameters[i].startsWith("ff"))
87                          //fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
88                         //else {
89                         if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {  
90                          //s_logger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
91                          fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
92                         }
93                        // }
94                     }
95                     fieldSQL = Utils.replaceInString(fieldSQL, "[USERID]", user_id);
96                     fieldSQL = Utils.replaceInString(fieldSQL, "[USER_ID]", user_id);
97                     fieldSQL = Utils.replaceInString(fieldSQL, "[LOGGED_USERID]", user_id);
98                     
99                 }
100
101                 if(fieldDefaultSQL!=null) {
102                     for (int i = 0; i < reqParameters.length; i++) {
103                         if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
104                          fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
105                         else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
106                          fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );   
107                     }
108                         for (int i = 0; i < scheduleSessionParameters.length; i++) {
109                                 //s_logger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
110                                 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
111                                         fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
112                                 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
113                                         fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
114                                 
115                         }
116                     
117                     for (int i = 0; i < sessionParameters.length; i++) {
118                         //if(!sessionParameters[i].startsWith("ff"))
119                                 //fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
120                         //else
121                         if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) 
122                                 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );   
123                     }
124                     
125                     fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USERID]", user_id);
126                     fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USER_ID]", user_id);
127                     fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[LOGGED_USERID]", user_id);
128                 }
129                                 //s_logger.debug("fieldSQL After" + fieldSQL);
130                                 if(rangeStartDateSQL!=null) {
131                     for (int i = 0; i < reqParameters.length; i++) {
132                         if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
133                                 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
134                         else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
135                                 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );   
136                     }
137                     for (int i = 0; i < sessionParameters.length; i++) {
138                         if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
139                         rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );   
140                     }                         
141                 }
142                                 if(rangeEndDateSQL!=null) {
143                     for (int i = 0; i < reqParameters.length; i++) {
144                         if(!reqParameters[i].startsWith("ff")&& (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
145                                 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
146                         else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
147                                 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );   
148                     }
149                     for (int i = 0; i < sessionParameters.length; i++) {
150                         if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
151                         rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );   
152                     }                         
153                 }
154                                 String helpText = fft.getComment();
155
156                                 List predefinedValues = null;
157                                 if (fft.getPredefinedValueList() != null) {
158                                         predefinedValues = fft.getPredefinedValueList().getPredefinedValue();
159                                         if (predefinedValues.size() == 0)
160                                                 predefinedValues = null;
161                                 } // if
162
163                                 DataColumnType dct = rw.getColumnById(nvl(fft.getColId()));
164
165                                 boolean basedOnColumn = false;
166                                 if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED))
167                                         basedOnColumn = (nvl(fft.getColId()).indexOf('.') > 0);
168                                 else
169                                         basedOnColumn = (dct != null);
170
171                                 if (((!basedOnColumn) && (nvl(fieldSQL).length() == 0))
172                                                 || predefinedValues != null) {
173                                         if (predefinedValues != null)
174                                                 if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE))
175                                                         defaultValue = (String) Collections.max(predefinedValues);
176                                                 else if (nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
177                                                         defaultValue = (String) Collections.min(predefinedValues);
178                                         add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
179                                                         mandatory.equals("Y"), defaultValue, helpText, predefinedValues,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
180                                 } else if (nvl(fieldSQL).length() > 0) {
181                                         add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
182                                                         mandatory.equals("Y"), fieldDefaultSQL, helpText, fieldSQL,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
183                                 } else {
184                                         String lTableName = null;
185                                         String lColumnName = null;
186                                         String lColumnType = null;
187                                         String lColFormat = null;
188                                         if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
189                                                 String colId = nvl(fft.getColId());
190                                                 lTableName = ReportWrapper.getSQLBasedFFTColTableName(colId); // colId.substring(0,
191                                                                                                                                                                                 // colId.indexOf('.'));
192                                                 lColumnName = ReportWrapper.getSQLBasedFFTColColumnName(colId); // colId.substring(colId.lastIndexOf('.')+1);
193                                                 lColumnType = AppConstants.CT_CHAR;
194                                                 try {
195                                                         lColumnType = nvl(DataCache.getReportTableDbColumnType(lTableName,
196                                                                         lColumnName, rw.getDBInfo()), AppConstants.CT_CHAR);
197                                                 } catch (Exception e) {
198                                                 }
199                                                 lColFormat = lColumnType.equals(AppConstants.CT_DATE) ? nvl(
200                                                                 ReportWrapper.getSQLBasedFFTColDisplayFormat(colId),
201                                                                 AppConstants.DEFAULT_DATE_FORMAT) : "";
202                                         } else {
203                                                 lTableName = rw.getColumnTableById(dct.getColId()).getTableName(); // should
204                                                                                                                                                                                         // be
205                                                                                                                                                                                         // same
206                                                                                                                                                                                         // as
207                                                                                                                                                                                         // rw.getTableById(dct.getTableId()).getTableName()
208                                                 lColumnName = dct.getColName();
209                                                 lColumnType = dct.getColType();
210                                                 lColFormat = nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT);
211                                         } // else
212
213                                         if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE)
214                                                         || nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
215                                                 try {
216                                                         String selectVal = (defaultValue
217                                                                         .equals(AppConstants.FILTER_MAX_VALUE) ? "MAX" : "MIN")
218                                                                         + "(" + lColumnName + ")";
219                                                         if (lColumnType.equals(AppConstants.CT_DATE))
220                                                                 selectVal = "TO_CHAR(" + selectVal + ", '"
221                                                                                 + AppConstants.DEFAULT_DATE_FORMAT + "')";
222                                                         // DataSet ds = DbUtils.executeQuery("SELECT
223                                                         // "+selectVal+" FROM "+lTableName);
224                                                         DataSet ds = ConnectionUtils.getDataSet("SELECT " + selectVal
225                                                                         + " FROM " + lTableName, rw.getDBInfo());
226                                                         if (ds.getRowCount() > 0)
227                                                                 defaultValue = ds.getString(0, 0);
228                                                 } catch (Exception e) {
229                                                 }
230
231                                         LookupDBInfo lookupDBInfo = DataCache.getLookupTable(lTableName,
232                                                         lColumnName);
233                                         String lookupTable = lookupDBInfo.getLookupTable();
234                                         String lookupIdField = lookupDBInfo.getLookupIdField();
235                                         String lookupNameField = lookupDBInfo.getLookupNameField();
236                                         String lookupSortByField = lookupDBInfo.getLookupNameField();
237                                         if (lColumnType.equals(AppConstants.CT_DATE)) {
238                                                 // Expects lookup on DATE fields will have both Id and
239                                                 // Name fields with DATE format; if not the case will
240                                                 // generate an error
241                                                 lookupIdField = "TO_CHAR(" + lookupIdField + ", '"
242                                                                 + AppConstants.DEFAULT_DATE_FORMAT + "')";
243                                                 lookupSortByField = " TO_DATE(TO_CHAR("+ lookupNameField +", '" + AppConstants.DEFAULT_DATE_FORMAT+ "'),'" + AppConstants.DEFAULT_DATE_FORMAT+ "') ";                        
244                                                 lookupNameField = "TO_CHAR(" + lookupNameField + ", '" + lColFormat
245                                                                 + "')";
246                                                 lookupSortByField += " DESC";
247                                         } // if
248                     if (fieldDefaultSQL!=null && fieldDefaultSQL.length()>0 && (fieldDefaultSQL.trim().length()>10) && fieldDefaultSQL.substring(0,10).toLowerCase().startsWith("select")) {
249                      add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
250                             mandatory.equals("Y"), fieldDefaultSQL, helpText, lookupTable,
251                             lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"),dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
252                         
253                     } else {
254                                          add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
255                                                         mandatory.equals("Y"), defaultValue, helpText, lookupTable,
256                                                         lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
257                     }
258                                 } // else
259                         } // for
260
261                 List reportCols = rw.getAllColumns();
262                 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
263                         DataColumnType dct = (DataColumnType) iter.next();
264
265                         if (dct.getColFilterList() != null) {
266                                 int fNo = 0;
267                                 List fList = dct.getColFilterList().getColFilter();
268                                 for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
269                                         ColFilterType cft = (ColFilterType) iterF.next();
270
271                                         if (nvl(cft.getArgType()).equals(AppConstants.AT_FORM)
272                                                         && rw.getFormFieldByDisplayValue(cft.getArgValue()) == null) {
273                                                 String fieldName = rw.getFormFieldName(cft);
274                                                 String fieldDisplayName = rw.getFormFieldDisplayName(dct, cft);
275
276                                                 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(rw
277                                                                 .getColumnTableById(dct.getColId()).getTableName(), dct
278                                                                 .getColName());
279                                                 String lookupTable = lookupDBInfo.getLookupTable();
280                                                 String lookupIdField = lookupDBInfo.getLookupIdField();
281                                                 String lookupNameField = lookupDBInfo.getLookupNameField();
282                                                 String lookupSortByField = lookupDBInfo.getLookupNameField();
283                                                 Calendar lookupRangeStartDate = rw.getFormFieldRangeStart(cft); 
284                                                 Calendar lookupRangeEndDate = rw.getFormFieldRangeEnd(cft); 
285                                                 String lookupRangeStartDateSQL = rw.getFormFieldRangeStartSQL(cft); 
286                                                 String lookupRangeEndDateSQL = rw.getFormFieldRangeEndSQL(cft); 
287                                                 if (dct.getColType().equals(AppConstants.CT_DATE)) {
288                                                         // Expects lookup on DATE fields will have both Id
289                                                         // and Name fields with DATE format; if not the case
290                                                         // will generate an error
291                                                         lookupIdField = "TO_CHAR("
292                                                                         + lookupIdField
293                                                                         + ", '"
294                                                                         + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
295                                                                         + "')";
296                                                         lookupNameField = "TO_CHAR("
297                                                                         + lookupNameField
298                                                                         + ", '"
299                                                                         + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
300                                                                         + "')";
301                                                         lookupSortByField += " DESC";
302                                                 } // if
303                                                 add(new FormField(fieldName, fieldDisplayName,
304                                                                 FormField.FFT_TEXT_W_POPUP, null, false, null, null,
305                                                                 lookupTable, lookupIdField, lookupNameField, lookupSortByField,null, lookupRangeStartDate, lookupRangeEndDate, lookupRangeStartDateSQL, lookupRangeEndDateSQL, "0"));
306                                         } // if
307                                 } // for
308                         } // if
309                 } // for
310         } // ReportFormFields
311
312         public int getFieldCount() {
313                 return size();
314         } // getFieldCount
315
316         public FormField getFormField(int fieldIdx) {
317                 return (FormField) get(fieldIdx);
318         } // getFormField
319
320         public FormField getFormField(String fieldName) {
321                 for (int i = 0; i < getFieldCount(); i++) {
322                         FormField ff = (FormField) get(i);
323                         if (ff.getFieldName().equals(fieldName))
324                                 return ff;
325                 } // for
326
327                 return null;
328         } // getFormField
329
330         public void resetNext() {
331                 resetNext(0);
332         } // resetNext
333
334         public void resetNext(int toPos) {
335                 nextElemIdx = toPos;
336         } // resetNext
337
338         public boolean hasNext() {
339                 return (nextElemIdx < size());
340         } // hasNext
341
342         public FormField getNext() {
343                 return hasNext() ? getFormField(nextElemIdx++) : null;
344         } // getNext
345
346         /** ************************************************************************************************* */
347
348         private String nvl(String s) {
349                 return (s == null) ? "" : s;
350         }
351
352         private String nvl(String s, String sDefault) {
353                 return nvl(s).equals("") ? sDefault : s;
354         }
355
356 } // ReportFormFields