2 * ================================================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ================================================================================
20 package org.openecomp.portalsdk.analytics.model.runtime;
23 import javax.servlet.http.*;
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.*;
33 public class ReportFormFields extends Vector {
34 private int nextElemIdx = 0;
36 public ReportFormFields(ReportWrapper rw, HttpServletRequest request) throws RaptorException {
39 if (rw.getFormFieldList() != null)
40 for (Iterator iter = rw.getFormFieldList().getFormField().iterator(); iter
42 FormFieldType fft = (FormFieldType) iter.next();
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();
66 //s_logger.debug("ranges are : " + fft.getRangeStartDate() + fft.getRangeEndDate());
67 //s_logger.debug("fieldSQL B4" + fieldSQL);
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]) );
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]) );
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()) );
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]) );
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);
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]) );
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]) );
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()) );
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]) );
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);
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]) );
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]) );
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]) );
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]) );
154 String helpText = fft.getComment();
156 List predefinedValues = null;
157 if (fft.getPredefinedValueList() != null) {
158 predefinedValues = fft.getPredefinedValueList().getPredefinedValue();
159 if (predefinedValues.size() == 0)
160 predefinedValues = null;
163 DataColumnType dct = rw.getColumnById(nvl(fft.getColId()));
165 boolean basedOnColumn = false;
166 if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED))
167 basedOnColumn = (nvl(fft.getColId()).indexOf('.') > 0);
169 basedOnColumn = (dct != null);
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));
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;
195 lColumnType = nvl(DataCache.getReportTableDbColumnType(lTableName,
196 lColumnName, rw.getDBInfo()), AppConstants.CT_CHAR);
197 } catch (Exception e) {
199 lColFormat = lColumnType.equals(AppConstants.CT_DATE) ? nvl(
200 ReportWrapper.getSQLBasedFFTColDisplayFormat(colId),
201 AppConstants.DEFAULT_DATE_FORMAT) : "";
203 lTableName = rw.getColumnTableById(dct.getColId()).getTableName(); // should
207 // rw.getTableById(dct.getTableId()).getTableName()
208 lColumnName = dct.getColName();
209 lColumnType = dct.getColType();
210 lColFormat = nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT);
213 if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE)
214 || nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
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) {
231 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(lTableName,
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
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
246 lookupSortByField += " DESC";
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));
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));
261 List reportCols = rw.getAllColumns();
262 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
263 DataColumnType dct = (DataColumnType) iter.next();
265 if (dct.getColFilterList() != null) {
267 List fList = dct.getColFilterList().getColFilter();
268 for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
269 ColFilterType cft = (ColFilterType) iterF.next();
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);
276 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(rw
277 .getColumnTableById(dct.getColId()).getTableName(), dct
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("
294 + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
296 lookupNameField = "TO_CHAR("
299 + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
301 lookupSortByField += " DESC";
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"));
310 } // ReportFormFields
312 public int getFieldCount() {
316 public FormField getFormField(int fieldIdx) {
317 return (FormField) get(fieldIdx);
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))
330 public void resetNext() {
334 public void resetNext(int toPos) {
338 public boolean hasNext() {
339 return (nextElemIdx < size());
342 public FormField getNext() {
343 return hasNext() ? getFormField(nextElemIdx++) : null;
346 /** ************************************************************************************************* */
348 private String nvl(String s) {
349 return (s == null) ? "" : s;
352 private String nvl(String s, String sDefault) {
353 return nvl(s).equals("") ? sDefault : s;
356 } // ReportFormFields