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============================================
36 * ECOMP is a trademark and service mark of AT&T Intellectual Property.
38 package org.onap.portalsdk.analytics.model.runtime;
41 import javax.servlet.http.*;
43 import org.onap.portalsdk.analytics.error.RaptorException;
44 import org.onap.portalsdk.analytics.model.*;
45 import org.onap.portalsdk.analytics.model.base.*;
46 import org.onap.portalsdk.analytics.model.definition.*;
47 import org.onap.portalsdk.analytics.system.*;
48 import org.onap.portalsdk.analytics.util.*;
49 import org.onap.portalsdk.analytics.xmlobj.*;
51 public class ReportFormFields extends Vector {
52 private int nextElemIdx = 0;
54 public ReportFormFields(ReportWrapper rw, HttpServletRequest request) throws RaptorException {
57 if (rw.getFormFieldList() != null)
58 for (Iterator iter = rw.getFormFieldList().getFormField().iterator(); iter
60 FormFieldType fft = (FormFieldType) iter.next();
62 String fieldName = fft.getFieldId();
63 String fieldDisplayName = fft.getFieldName();
64 String fieldType = fft.getFieldType();
65 String validationType = fft.getValidationType();
66 String mandatory = nvl(fft.getMandatory(), "N");
67 String defaultValue = fft.getDefaultValue();
68 String fieldSQL = fft.getFieldSQL();
69 String fieldDefaultSQL = fft.getFieldDefaultSQL();
70 String[] reqParameters = Globals.getRequestParams().split(",");
71 String[] sessionParameters = Globals.getSessionParams().split(",");
72 String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
73 javax.servlet.http.HttpSession session = request.getSession();
74 String visible = nvl(fft.getVisible(),"Y");
75 String dependsOn = nvl(fft.getDependsOn(), "");
76 Calendar rangeStartDate = (fft.getRangeStartDate()==null)?null:fft.getRangeStartDate().toGregorianCalendar();
77 Calendar rangeEndDate = (fft.getRangeEndDate()==null)?null:fft.getRangeEndDate().toGregorianCalendar();
78 //Calendar rangeEndDate = fft.getRangeEndDate().toGregorianCalendar();
79 String rangeStartDateSQL = fft.getRangeStartDateSQL();
80 String rangeEndDateSQL = fft.getRangeEndDateSQL();
81 String user_id = AppUtils.getUserID(request);
82 String multiSelectListSize = fft.getMultiSelectListSize();
84 //s_logger.debug("ranges are : " + fft.getRangeStartDate() + fft.getRangeEndDate());
85 //s_logger.debug("fieldSQL B4" + fieldSQL);
87 for (int i = 0; i < reqParameters.length; i++) {
88 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
89 fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
90 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
91 fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
94 for (int i = 0; i < scheduleSessionParameters.length; i++) {
95 //s_logger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
96 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
97 fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
98 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
99 fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
103 for (int i = 0; i < sessionParameters.length; i++) {
104 //if(!sessionParameters[i].startsWith("ff"))
105 //fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
107 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {
108 //s_logger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
109 fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
113 fieldSQL = Utils.replaceInString(fieldSQL, "[USERID]", user_id);
114 fieldSQL = Utils.replaceInString(fieldSQL, "[USER_ID]", user_id);
115 fieldSQL = Utils.replaceInString(fieldSQL, "[LOGGED_USERID]", user_id);
119 if(fieldDefaultSQL!=null) {
120 for (int i = 0; i < reqParameters.length; i++) {
121 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
122 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
123 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
124 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
126 for (int i = 0; i < scheduleSessionParameters.length; i++) {
127 //s_logger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
128 if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
129 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
130 if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
131 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
135 for (int i = 0; i < sessionParameters.length; i++) {
136 //if(!sessionParameters[i].startsWith("ff"))
137 //fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
139 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
140 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
143 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USERID]", user_id);
144 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USER_ID]", user_id);
145 fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[LOGGED_USERID]", user_id);
147 //s_logger.debug("fieldSQL After" + fieldSQL);
148 if(rangeStartDateSQL!=null) {
149 for (int i = 0; i < reqParameters.length; i++) {
150 if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
151 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
152 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
153 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
155 for (int i = 0; i < sessionParameters.length; i++) {
156 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
157 rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
160 if(rangeEndDateSQL!=null) {
161 for (int i = 0; i < reqParameters.length; i++) {
162 if(!reqParameters[i].startsWith("ff")&& (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
163 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
164 else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
165 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
167 for (int i = 0; i < sessionParameters.length; i++) {
168 if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
169 rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
172 String helpText = fft.getComment();
174 List predefinedValues = null;
175 if (fft.getPredefinedValueList() != null) {
176 predefinedValues = fft.getPredefinedValueList().getPredefinedValue();
177 if (predefinedValues.size() == 0)
178 predefinedValues = null;
181 DataColumnType dct = rw.getColumnById(nvl(fft.getColId()));
183 boolean basedOnColumn = false;
184 if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED))
185 basedOnColumn = (nvl(fft.getColId()).indexOf('.') > 0);
187 basedOnColumn = (dct != null);
189 if (((!basedOnColumn) && (nvl(fieldSQL).length() == 0))
190 || predefinedValues != null) {
191 if (predefinedValues != null)
192 if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE))
193 defaultValue = (String) Collections.max(predefinedValues);
194 else if (nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
195 defaultValue = (String) Collections.min(predefinedValues);
196 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
197 mandatory.equals("Y"), defaultValue, helpText, predefinedValues,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
198 } else if (nvl(fieldSQL).length() > 0) {
199 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
200 mandatory.equals("Y"), fieldDefaultSQL, helpText, fieldSQL,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
202 String lTableName = null;
203 String lColumnName = null;
204 String lColumnType = null;
205 String lColFormat = null;
206 if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
207 String colId = nvl(fft.getColId());
208 lTableName = ReportWrapper.getSQLBasedFFTColTableName(colId); // colId.substring(0,
209 // colId.indexOf('.'));
210 lColumnName = ReportWrapper.getSQLBasedFFTColColumnName(colId); // colId.substring(colId.lastIndexOf('.')+1);
211 lColumnType = AppConstants.CT_CHAR;
213 lColumnType = nvl(DataCache.getReportTableDbColumnType(lTableName,
214 lColumnName, rw.getDBInfo()), AppConstants.CT_CHAR);
215 } catch (Exception e) {
217 lColFormat = lColumnType.equals(AppConstants.CT_DATE) ? nvl(
218 ReportWrapper.getSQLBasedFFTColDisplayFormat(colId),
219 AppConstants.DEFAULT_DATE_FORMAT) : "";
221 lTableName = rw.getColumnTableById(dct.getColId()).getTableName(); // should
225 // rw.getTableById(dct.getTableId()).getTableName()
226 lColumnName = dct.getColName();
227 lColumnType = dct.getColType();
228 lColFormat = nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT);
231 if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE)
232 || nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
234 String selectVal = (defaultValue
235 .equals(AppConstants.FILTER_MAX_VALUE) ? "MAX" : "MIN")
236 + "(" + lColumnName + ")";
237 if (lColumnType.equals(AppConstants.CT_DATE))
238 selectVal = "TO_CHAR(" + selectVal + ", '"
239 + AppConstants.DEFAULT_DATE_FORMAT + "')";
240 // DataSet ds = DbUtils.executeQuery("SELECT
241 // "+selectVal+" FROM "+lTableName);
242 DataSet ds = ConnectionUtils.getDataSet("SELECT " + selectVal
243 + " FROM " + lTableName, rw.getDBInfo());
244 if (ds.getRowCount() > 0)
245 defaultValue = ds.getString(0, 0);
246 } catch (Exception e) {
249 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(lTableName,
251 String lookupTable = lookupDBInfo.getLookupTable();
252 String lookupIdField = lookupDBInfo.getLookupIdField();
253 String lookupNameField = lookupDBInfo.getLookupNameField();
254 String lookupSortByField = lookupDBInfo.getLookupNameField();
255 if (lColumnType.equals(AppConstants.CT_DATE)) {
256 // Expects lookup on DATE fields will have both Id and
257 // Name fields with DATE format; if not the case will
259 lookupIdField = "TO_CHAR(" + lookupIdField + ", '"
260 + AppConstants.DEFAULT_DATE_FORMAT + "')";
261 lookupSortByField = " TO_DATE(TO_CHAR("+ lookupNameField +", '" + AppConstants.DEFAULT_DATE_FORMAT+ "'),'" + AppConstants.DEFAULT_DATE_FORMAT+ "') ";
262 lookupNameField = "TO_CHAR(" + lookupNameField + ", '" + lColFormat
264 lookupSortByField += " DESC";
266 if (fieldDefaultSQL!=null && fieldDefaultSQL.length()>0 && (fieldDefaultSQL.trim().length()>10) && fieldDefaultSQL.substring(0,10).toLowerCase().startsWith("select")) {
267 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
268 mandatory.equals("Y"), fieldDefaultSQL, helpText, lookupTable,
269 lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"),dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
272 add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
273 mandatory.equals("Y"), defaultValue, helpText, lookupTable,
274 lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
279 List reportCols = rw.getAllColumns();
280 for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
281 DataColumnType dct = (DataColumnType) iter.next();
283 if (dct.getColFilterList() != null) {
285 List fList = dct.getColFilterList().getColFilter();
286 for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
287 ColFilterType cft = (ColFilterType) iterF.next();
289 if (nvl(cft.getArgType()).equals(AppConstants.AT_FORM)
290 && rw.getFormFieldByDisplayValue(cft.getArgValue()) == null) {
291 String fieldName = rw.getFormFieldName(cft);
292 String fieldDisplayName = rw.getFormFieldDisplayName(dct, cft);
294 LookupDBInfo lookupDBInfo = DataCache.getLookupTable(rw
295 .getColumnTableById(dct.getColId()).getTableName(), dct
297 String lookupTable = lookupDBInfo.getLookupTable();
298 String lookupIdField = lookupDBInfo.getLookupIdField();
299 String lookupNameField = lookupDBInfo.getLookupNameField();
300 String lookupSortByField = lookupDBInfo.getLookupNameField();
301 Calendar lookupRangeStartDate = rw.getFormFieldRangeStart(cft);
302 Calendar lookupRangeEndDate = rw.getFormFieldRangeEnd(cft);
303 String lookupRangeStartDateSQL = rw.getFormFieldRangeStartSQL(cft);
304 String lookupRangeEndDateSQL = rw.getFormFieldRangeEndSQL(cft);
305 if (dct.getColType().equals(AppConstants.CT_DATE)) {
306 // Expects lookup on DATE fields will have both Id
307 // and Name fields with DATE format; if not the case
308 // will generate an error
309 lookupIdField = "TO_CHAR("
312 + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
314 lookupNameField = "TO_CHAR("
317 + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
319 lookupSortByField += " DESC";
321 add(new FormField(fieldName, fieldDisplayName,
322 FormField.FFT_TEXT_W_POPUP, null, false, null, null,
323 lookupTable, lookupIdField, lookupNameField, lookupSortByField,null, lookupRangeStartDate, lookupRangeEndDate, lookupRangeStartDateSQL, lookupRangeEndDateSQL, "0"));
328 } // ReportFormFields
330 public int getFieldCount() {
334 public FormField getFormField(int fieldIdx) {
335 return (FormField) get(fieldIdx);
338 public FormField getFormField(String fieldName) {
339 for (int i = 0; i < getFieldCount(); i++) {
340 FormField ff = (FormField) get(i);
341 if (ff.getFieldName().equals(fieldName))
348 public void resetNext() {
352 public void resetNext(int toPos) {
356 public boolean hasNext() {
357 return (nextElemIdx < size());
360 public FormField getNext() {
361 return hasNext() ? getFormField(nextElemIdx++) : null;
364 /** ************************************************************************************************* */
366 private String nvl(String s) {
367 return (s == null) ? "" : s;
370 private String nvl(String s, String sDefault) {
371 return nvl(s).equals("") ? sDefault : s;
374 } // ReportFormFields