2 * ============LICENSE_START==========================================
4 * ===================================================================
5 * Copyright © 2017 AT&T Intellectual Property. All rights reserved.
6 * ===================================================================
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
13 * http://www.apache.org/licenses/LICENSE-2.0
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.
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
26 * https://creativecommons.org/licenses/by/4.0/
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.
34 * ============LICENSE_END============================================
38 package org.onap.portalsdk.analytics.model.runtime;
40 import java.util.Calendar;
41 import java.util.Collections;
42 import java.util.Iterator;
43 import java.util.List;
44 import java.util.Vector;
46 import javax.servlet.http.HttpServletRequest;
48 import org.onap.portalsdk.analytics.error.RaptorException;
49 import org.onap.portalsdk.analytics.model.DataCache;
50 import org.onap.portalsdk.analytics.model.base.ReportWrapper;
51 import org.onap.portalsdk.analytics.system.AppUtils;
52 import org.onap.portalsdk.analytics.system.ConnectionUtils;
53 import org.onap.portalsdk.analytics.system.Globals;
54 import org.onap.portalsdk.analytics.util.AppConstants;
55 import org.onap.portalsdk.analytics.util.DataSet;
56 import org.onap.portalsdk.analytics.util.Utils;
57 import org.onap.portalsdk.analytics.xmlobj.ColFilterType;
58 import org.onap.portalsdk.analytics.xmlobj.DataColumnType;
59 import org.onap.portalsdk.analytics.xmlobj.FormFieldType;
60 import org.onap.portalsdk.core.util.SecurityCodecUtil;
61 import org.owasp.esapi.ESAPI;
63 public class ReportFormFields extends Vector {
64 private int nextElemIdx = 0;
66 public ReportFormFields(ReportWrapper rw, HttpServletRequest request) throws RaptorException {
69 if (rw.getFormFieldList() != null)
70 for (Iterator iter = rw.getFormFieldList().getFormField().iterator(); iter
72 FormFieldType fft = (FormFieldType) iter.next();
74 String fieldName = fft.getFieldId();
75 String fieldDisplayName = fft.getFieldName();
76 String fieldType = fft.getFieldType();
77 String validationType = fft.getValidationType();
78 String mandatory = nvl(fft.getMandatory(), "N");
79 String defaultValue = fft.getDefaultValue();
80 String fieldSQL = fft.getFieldSQL();
81 String fieldDefaultSQL = fft.getFieldDefaultSQL();
82 String[] reqParameters = Globals.getRequestParams().split(",");
83 String[] sessionParameters = Globals.getSessionParams().split(",");
84 String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
85 javax.servlet.http.HttpSession session = request.getSession();
86 String visible = nvl(fft.getVisible(),"Y");
87 String dependsOn = nvl(fft.getDependsOn(), "");
88 Calendar rangeStartDate = (fft.getRangeStartDate()==null)?null:fft.getRangeStartDate().toGregorianCalendar();
89 Calendar rangeEndDate = (fft.getRangeEndDate()==null)?null:fft.getRangeEndDate().toGregorianCalendar();
90 String rangeStartDateSQL = fft.getRangeStartDateSQL();
91 String rangeEndDateSQL = fft.getRangeEndDateSQL();
92 String userId = AppUtils.getUserID(request);
93 String multiSelectListSize = fft.getMultiSelectListSize();
96 for (int i = 0; i < reqParameters.length; i++) {
97 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
98 fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i].toUpperCase()) ));
99 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
100 fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i]) ));
103 for (int i = 0; i < scheduleSessionParameters.length; i++) {
104 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
105 fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(scheduleSessionParameters[i]) ));
106 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
107 fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), (String) request.getAttribute(scheduleSessionParameters[i]) ));
111 for (int i = 0; i < sessionParameters.length; i++) {
112 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {
113 fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
116 fieldSQL = Utils.replaceInString(fieldSQL, "[USERID]", userId);
117 fieldSQL = Utils.replaceInString(fieldSQL, "[USER_ID]", userId);
118 fieldSQL = Utils.replaceInString(fieldSQL, "[LOGGED_USERID]", userId);
122 if(fieldDefaultSQL!=null) {
123 for (int i = 0; i < reqParameters.length; i++) {
124 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
125 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i].toUpperCase()) ));
126 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
127 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i]) ));
129 for (int i = 0; i < scheduleSessionParameters.length; i++) {
130 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
131 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(scheduleSessionParameters[i]) ));
132 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
133 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), (String) request.getAttribute(scheduleSessionParameters[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 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
142 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USERID]", userId);
143 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USER_ID]", userId);
144 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[LOGGED_USERID]", userId);
146 if(rangeStartDateSQL!=null) {
147 for (int i = 0; i < reqParameters.length; i++) {
148 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
149 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i].toUpperCase()) ));
150 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
151 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i]) ));
153 for (int i = 0; i < sessionParameters.length; i++) {
154 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
155 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
158 if(rangeEndDateSQL!=null) {
159 for (int i = 0; i < reqParameters.length; i++) {
160 if(!reqParameters[i].startsWith("ff")&& (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
161 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), request.getParameter(reqParameters[i].toUpperCase()) ));
162 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
163 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
165 for (int i = 0; i < sessionParameters.length; i++) {
166 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
167 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", ESAPI.encoder().encodeForSQL( SecurityCodecUtil.getCodec(), (String)session.getAttribute(sessionParameters[i]) ));
170 String helpText = fft.getComment();
172 List predefinedValues = null;
173 if (fft.getPredefinedValueList() != null) {
174 predefinedValues = fft.getPredefinedValueList().getPredefinedValue();
175 if (predefinedValues.size() == 0)
176 predefinedValues = null;
179 DataColumnType dct = rw.getColumnById(nvl(fft.getColId()));
181 boolean basedOnColumn = false;
182 if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED))
183 basedOnColumn = (nvl(fft.getColId()).indexOf('.') > 0);
185 basedOnColumn = (dct != null);
187 if (((!basedOnColumn) && (nvl(fieldSQL).length() == 0))
188 || predefinedValues != null) {
189 if (predefinedValues != null)
190 if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE))
191 defaultValue = (String) Collections.max(predefinedValues);
192 else if (nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
193 defaultValue = (String) Collections.min(predefinedValues);
194 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
195 mandatory.equals("Y"), defaultValue, helpText, predefinedValues,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
196 } else if (nvl(fieldSQL).length() > 0) {
197 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
198 mandatory.equals("Y"), fieldDefaultSQL, helpText, fieldSQL,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
200 String lTableName = null;
201 String lColumnName = null;
202 String lColumnType = null;
203 String lColFormat = null;
204 if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
205 String colId = nvl(fft.getColId());
206 lTableName = ReportWrapper.getSQLBasedFFTColTableName(colId);
207 lColumnName = ReportWrapper.getSQLBasedFFTColColumnName(colId);
208 lColumnType = AppConstants.CT_CHAR;
210 lColumnType = nvl(DataCache.getReportTableDbColumnType(lTableName,
211 lColumnName, rw.getDBInfo()), AppConstants.CT_CHAR);
212 } catch (Exception e) {
214 lColFormat = lColumnType.equals(AppConstants.CT_DATE) ? nvl(
215 ReportWrapper.getSQLBasedFFTColDisplayFormat(colId),
216 AppConstants.DEFAULT_DATE_FORMAT) : "";
218 lTableName = rw.getColumnTableById(dct.getColId()).getTableName(); // should
222 // rw.getTableById(dct.getTableId()).getTableName()
223 lColumnName = dct.getColName();
224 lColumnType = dct.getColType();
225 lColFormat = nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT);
228 if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE)
229 || nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
231 String selectVal = (defaultValue
232 .equals(AppConstants.FILTER_MAX_VALUE) ? "MAX" : "MIN")
233 + "(" + lColumnName + ")";
234 if (lColumnType.equals(AppConstants.CT_DATE))
235 selectVal = "TO_CHAR(" + selectVal + ", '"
236 + AppConstants.DEFAULT_DATE_FORMAT + "')";
237 DataSet ds = ConnectionUtils.getDataSet("SELECT " + selectVal
238 + " FROM " + lTableName, rw.getDBInfo());
239 if (ds.getRowCount() > 0)
240 defaultValue = ds.getString(0, 0);
241 } catch (Exception e) {
244 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(lTableName,
246 String lookupTable = lookupDBInfo.getLookupTable();
247 String lookupIdField = lookupDBInfo.getLookupIdField();
248 String lookupNameField = lookupDBInfo.getLookupNameField();
249 String lookupSortByField = lookupDBInfo.getLookupNameField();
250 if (lColumnType.equals(AppConstants.CT_DATE)) {
251 // Expects lookup on DATE fields will have both Id and
252 // Name fields with DATE format; if not the case will
254 lookupIdField = "TO_CHAR(" + lookupIdField + ", '"
255 + AppConstants.DEFAULT_DATE_FORMAT + "')";
256 lookupSortByField = " TO_DATE(TO_CHAR("+ lookupNameField +", '" + AppConstants.DEFAULT_DATE_FORMAT+ "'),'" + AppConstants.DEFAULT_DATE_FORMAT+ "') ";
257 lookupNameField = "TO_CHAR(" + lookupNameField + ", '" + lColFormat
259 lookupSortByField += " DESC";
261 if (fieldDefaultSQL!=null && fieldDefaultSQL.length()>0 && (fieldDefaultSQL.trim().length()>10) && fieldDefaultSQL.substring(0,10).toLowerCase().startsWith("select")) {
262 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
263 mandatory.equals("Y"), fieldDefaultSQL, helpText, lookupTable,
264 lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"),dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
267 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
268 mandatory.equals("Y"), defaultValue, helpText, lookupTable,
269 lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
274 List reportCols = rw.getAllColumns();
275 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
276 DataColumnType dct = (DataColumnType) iter.next();
278 if (dct.getColFilterList() != null) {
280 List fList = dct.getColFilterList().getColFilter();
281 for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
282 ColFilterType cft = (ColFilterType) iterF.next();
284 if (nvl(cft.getArgType()).equals(AppConstants.AT_FORM)
285 && rw.getFormFieldByDisplayValue(cft.getArgValue()) == null) {
286 String fieldName = rw.getFormFieldName(cft);
287 String fieldDisplayName = rw.getFormFieldDisplayName(dct, cft);
289 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(rw
290 .getColumnTableById(dct.getColId()).getTableName(), dct
292 String lookupTable = lookupDBInfo.getLookupTable();
293 String lookupIdField = lookupDBInfo.getLookupIdField();
294 String lookupNameField = lookupDBInfo.getLookupNameField();
295 String lookupSortByField = lookupDBInfo.getLookupNameField();
296 Calendar lookupRangeStartDate = rw.getFormFieldRangeStart(cft);
297 Calendar lookupRangeEndDate = rw.getFormFieldRangeEnd(cft);
298 String lookupRangeStartDateSQL = rw.getFormFieldRangeStartSQL(cft);
299 String lookupRangeEndDateSQL = rw.getFormFieldRangeEndSQL(cft);
300 if (dct.getColType().equals(AppConstants.CT_DATE)) {
301 // Expects lookup on DATE fields will have both Id
302 // and Name fields with DATE format; if not the case
303 // will generate an error
304 lookupIdField = "TO_CHAR("
307 + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
309 lookupNameField = "TO_CHAR("
312 + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
314 lookupSortByField += " DESC";
316 add(new FormField(fieldName, fieldDisplayName,
317 FormField.FFT_TEXT_W_POPUP, null, false, null, null,
318 lookupTable, lookupIdField, lookupNameField, lookupSortByField,null, lookupRangeStartDate, lookupRangeEndDate, lookupRangeStartDateSQL, lookupRangeEndDateSQL, "0"));
323 } // ReportFormFields
325 public int getFieldCount() {
329 public FormField getFormField(int fieldIdx) {
330 return (FormField) get(fieldIdx);
333 public FormField getFormField(String fieldName) {
334 for (int i = 0; i < getFieldCount(); i++) {
335 FormField ff = (FormField) get(i);
336 if (ff.getFieldName().equals(fieldName))
343 public void resetNext() {
347 public void resetNext(int toPos) {
351 public boolean hasNext() {
352 return (nextElemIdx < size());
355 public FormField getNext() {
356 return hasNext() ? getFormField(nextElemIdx++) : null;
359 /** ************************************************************************************************* */
361 private String nvl(String s) {
362 return (s == null) ? "" : s;
365 private String nvl(String s, String sDefault) {
366 return nvl(s).equals("") ? sDefault : s;
369 } // ReportFormFields