summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model
diff options
context:
space:
mode:
Diffstat (limited to 'ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model')
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/DataCache.java524
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportHandler.java6605
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportLoader.java1061
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/SearchHandler.java490
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ChartSeqComparator.java49
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameColLookup.java35
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameList.java183
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameLookup.java198
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameSql.java400
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameValue.java100
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/NameComparator.java32
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderBySeqComparator.java37
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderSeqComparator.java37
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportSecurity.java407
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportWrapper.java5719
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DBColumnInfo.java76
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DrillDownParamDef.java111
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/Marker.java79
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportDefinition.java1465
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportLogEntry.java89
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportMap.java82
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportSchedule.java1407
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/SecurityEntry.java44
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableJoin.java67
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableSource.java101
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PageEvent.java256
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfBean.java242
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfReportHandler.java1890
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/BarChartOptions.java75
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CategoryAxisJSON.java24
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java4064
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartGen.java73
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java448
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSONHelper.java1550
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java420
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CommonChartOptions.java81
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java43
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FlexTimeSeriesChartOptions.java38
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java2111
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.java375
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/Item.java54
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/LookupDBInfo.java89
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/RangeAxisJSON.java93
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java366
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java694
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.java194
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.java370
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValuesForPDFExcel.java419
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java3618
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/TimeSeriesChartOptions.java62
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.java68
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResult.java84
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResultJSON.java251
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResult.java213
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultColumn.java254
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultField.java212
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultJSON.java80
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultRow.java92
58 files changed, 38301 insertions, 0 deletions
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/DataCache.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/DataCache.java
new file mode 100644
index 00000000..5bf4e003
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/DataCache.java
@@ -0,0 +1,524 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.definition.DBColumnInfo;
+import org.openecomp.portalsdk.analytics.model.definition.TableJoin;
+import org.openecomp.portalsdk.analytics.model.definition.TableSource;
+import org.openecomp.portalsdk.analytics.model.runtime.LookupDBInfo;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+
+public class DataCache extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private static Vector dataViewActions = null;
+
+ private static Vector publicReportIdNames = null;
+
+ private static Vector privateReportIdNames = null;
+
+ private static Vector groupReportIdNames = null;
+
+ private static Vector reportTableSources = null;
+
+ private static Vector reportTableJoins = null;
+
+ private static HashMap reportTableDbColumns = new HashMap();
+
+ private static HashMap reportFieldDbLookups = null;
+
+ public DataCache() {
+ }
+
+ public static Vector getDataViewActions() throws RaptorException {
+ if (dataViewActions == null)
+ /* try */{
+ dataViewActions = new Vector();
+
+ //DataSet ds = DbUtils
+ // .executeQuery("SELECT ts.web_view_action FROM cr_table_source ts WHERE ts.web_view_action IS NOT NULL");
+
+ String sql = Globals.getTheDataViewActions();
+ DataSet ds = DbUtils
+ .executeQuery(sql);
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ dataViewActions.add(ds.getString(i, 0));
+ } // catch(Exception e) {}
+
+ return dataViewActions;
+ } // getDataViewActions
+
+ public static Vector getPublicReportIdNames() throws RaptorException {
+ // if(publicReportIdNames==null) => needs to be up-to-date at any time
+ /* try */{
+ publicReportIdNames = new Vector();
+
+ //DataSet ds = DbUtils
+ // .executeQuery("SELECT rep_id, title FROM cr_report WHERE public_yn = 'Y' ORDER BY title");
+
+ String sql = Globals.getThePublicReportIdNames();
+ DataSet ds = DbUtils
+ .executeQuery(sql);
+ for (int i = 0; i < ds.getRowCount(); i++)
+ publicReportIdNames
+ .add(new IdNameValue(ds.getString(i, 0), ds.getString(i, 1)));
+ } // catch(Exception e) {}
+
+ return publicReportIdNames;
+ } // getPublicReportIdNames
+
+ public static Vector getPrivateAccessibleReportIdNames(String user_id, Vector userRoles) throws RaptorException {
+ // if(publicReportIdNames==null) => needs to be up-to-date at any time
+ /* try */{
+ privateReportIdNames = new Vector();
+
+ // StringBuffer query = new StringBuffer(" SELECT cr.rep_id, cr.title FROM cr_report cr ");
+ String sql = Globals.getThePrivateAccessibleNamesA();
+ //query.append(" WHERE cr.rep_id not in (select rep_id from cr_report_access cra where user_id = '"+ user_id+"' ");
+ sql = sql.replace("[user_id]", user_id);
+ StringBuffer query = new StringBuffer(sql);
+ for (int i = 0; i < userRoles.size(); i++) {
+ if( i == 0){
+ // query.append(" OR role_id in (");
+ query.append(Globals.getThePrivateAccessibleNamesIf());
+ }
+ if(i < (userRoles.size()-1))
+ query.append((String)userRoles.get(i) + ",");
+
+ else if(i == (userRoles.size()-1))
+ query.append((String)userRoles.get(i)+")");
+
+ }
+ //query.append(" ) ");
+ //query.append(" AND public_yn = 'N' and cr.owner_id = '"+ user_id+"' order by 2 ");
+ sql = Globals.getThePrivateAccessibleNamesB();
+ sql = sql.replace("[user_id]", user_id);
+ query.append(sql);
+
+ DataSet ds = DbUtils
+ .executeQuery(query.toString() );
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ privateReportIdNames
+ .add(new IdNameValue(ds.getString(i, 0), ds.getString(i, 1)));
+ } // catch(Exception e) {}
+
+ return privateReportIdNames;
+ } // getPrivateAccessibleReportIdNames
+
+
+ public static Vector getGroupAccessibleReportIdNames(String user_id, Vector userRoles) throws RaptorException {
+ // if(publicReportIdNames==null) => needs to be up-to-date at any time
+ /* try */{
+ groupReportIdNames = new Vector();
+
+ //StringBuffer query = new StringBuffer(" SELECT cr.rep_id, cr.title FROM cr_report cr ");
+ //query.append(" WHERE cr.rep_id in (select rep_id from cr_report_access cra where user_id = '"+ user_id+"' ");
+ String sql = Globals.getTheGroupAccessibleNamesA();
+ sql = sql.replace("[user_id]", user_id);
+ StringBuffer query = new StringBuffer(sql);
+
+ for (int i = 0; i < userRoles.size(); i++) {
+ if( i == 0)
+ query.append(Globals.getThePrivateAccessibleNamesIf());
+ if(i < (userRoles.size()-1))
+ query.append((String)userRoles.get(i) + ",");
+ else if(i == (userRoles.size()-1))
+ query.append((String)userRoles.get(i)+")");
+
+ }
+ //query.append(" ) ");
+ //query.append(" AND public_yn = 'N' order by 2 ");
+
+ query.append(Globals.getTheGroupAccessibleNamesB());
+ DataSet ds = DbUtils
+ .executeQuery(query.toString() );
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ groupReportIdNames
+ .add(new IdNameValue(ds.getString(i, 0), ds.getString(i, 1)));
+ } // catch(Exception e) {}
+
+ return groupReportIdNames;
+ } // getGroupAccessibleReportIdNames
+
+
+ public static TableSource getTableSource(String tableName, String dBinfo, Vector userRoles, String userId, HttpServletRequest request) throws RaptorException {
+ try {
+ Vector tableSources = null;
+ if(Globals.getRestrictTablesByRole()) {
+ tableSources = getReportTableSources(userRoles, dBinfo, userId, request);
+ } else {
+ tableSources = getReportTableSources(dBinfo);
+ }
+ for (Iterator iter = getReportTableSources(dBinfo).iterator(); iter.hasNext();) {
+ TableSource tableSource = (TableSource) iter.next();
+ if (tableSource.getTableName().equals(tableName))
+ return tableSource;
+ } // for
+ } catch (RaptorException e) {
+ throw new RaptorException(e.getMessage(), e.getCause());
+ }
+
+ return null;
+ }
+ public static void refreshReportTableSources() {
+ reportTableSources = null;
+ }
+
+ public static Vector getReportTableSources(String dBInfo) throws RaptorException {
+ if (reportTableSources == null)
+ /* try */{
+ reportTableSources = new Vector();
+ //String query = " SELECT table_name, display_name, pk_fields, web_view_action, large_data_source_yn, filter_sql FROM cr_table_source ";
+ String query = Globals.getTheReportTableSourcesA();
+ if (dBInfo != null && !dBInfo.equals(AppConstants.DB_LOCAL)){
+ //query += " where SOURCE_DB= '" + dBInfo + "'";
+ query+=Globals.getTheReportTableSourcesWhere();
+ query = query.replace("[dBInfo]", dBInfo);
+ }
+ else {
+ //query += " where SOURCE_DB is null or SOURCE_DB = '" + AppConstants.DB_LOCAL
+ // + "'";
+ query+=Globals.getTheReportTableSourcesIf();
+ query = query.replace("[AppConstants.DB_LOCAL]", AppConstants.DB_LOCAL);
+ }
+ //query += " ORDER BY table_name ";
+ query+=Globals.getTheReportTableSourcesElse();
+ DataSet ds = DbUtils.executeQuery(query);
+ for (int i = 0; i < ds.getRowCount(); i++)
+ reportTableSources.add(new TableSource(ds.getString(i, 0), ds.getString(i, 1),
+ ds.getString(i, 2), ds.getString(i, 3), ds.getString(i, 4), ds
+ .getString(i, 5)));
+ } // catch(Exception e) {}
+
+ return reportTableSources;
+ } // getReportTableSources
+
+ public static Vector getReportTableSources(Vector userRoles, String dBInfo, String userId, HttpServletRequest request)
+ throws RaptorException {
+ if (!Globals.getRestrictTablesByRole())
+ return getReportTableSources(dBInfo);
+ Vector userTableSources = new Vector();
+ if (userRoles.size() > 0)
+ /* try */{
+ StringBuffer sb = new StringBuffer();
+ for (Iterator iter = userRoles.iterator(); iter.hasNext();) {
+ sb.append((sb.length() == 0) ? "(" : ", ");
+ sb.append(iter.next());
+ } // for
+ sb.append(")");
+ //StringBuffer query = new StringBuffer("SELECT ts.table_name, ts.display_name, ts.pk_fields, ");
+ // query.append(" ts.web_view_action, ts.large_data_source_yn, ts.filter_sql FROM cr_table_source ts ");
+ // query.append (" WHERE ");
+ StringBuffer query = new StringBuffer(Globals.grabTheReportTableA());
+ //if(!(AppUtils.isAdminUser(userId) || AppUtils.isSuperUser(userId)))
+ // query.append (" (EXISTS (SELECT 1 FROM cr_table_role tr WHERE tr.table_name=ts.table_name AND tr.role_id IN "+sb.toString()+")) and ");
+ //+ " OR (NOT EXISTS (SELECT 1 FROM cr_table_role tr WHERE tr.table_name=ts.table_name)) ";
+ if (dBInfo != null && !dBInfo.equals(AppConstants.DB_LOCAL)){
+ String d_sql = Globals.grabTheReportTableIf();
+ d_sql = d_sql.replace("[dBInfo]", dBInfo);
+ //query.append( " ts.SOURCE_DB= '" + dBInfo + "'");
+ query.append(d_sql);
+ }
+ else{
+ //query.append(" (ts.SOURCE_DB is null or ts.SOURCE_DB = '"+ AppConstants.DB_LOCAL + "')");
+ String d_sql = Globals.grabTheReportTableElse();
+ d_sql = d_sql.replace("[AppConstants.DB_LOCAL]", AppConstants.DB_LOCAL);
+ query.append(d_sql);
+ }
+ if(!(AppUtils.isAdminUser(request) || AppUtils.isSuperUser(request))) {
+ //query.append(" minus ");
+
+ // query.append(" SELECT ts.table_name, ts.display_name, ts.pk_fields, ts.web_view_action, ");
+ // query.append(" ts.large_data_source_yn, ts.filter_sql from cr_table_source ts where ");
+ // query.append(" table_name in (select table_name from cr_table_role where role_id not IN "+sb.toString()+") and ");
+ String e_sql = Globals.grabTheReportTableB();
+ e_sql = e_sql.replace("[sb.toString()]", sb.toString());
+ query.append(e_sql);
+
+ if (dBInfo != null && !dBInfo.equals(AppConstants.DB_LOCAL)){
+
+ // query.append( " ts.SOURCE_DB= '" + dBInfo + "'");
+ String d_sql = Globals.grabTheReportTableIf();
+ d_sql = d_sql.replace("[dBInfo]", dBInfo);
+ query.append(d_sql);
+ }
+ else{
+ //query.append(" (ts.SOURCE_DB is null or ts.SOURCE_DB = '"+ AppConstants.DB_LOCAL + "')");
+ String d_sql = Globals.grabTheReportTableElse();
+ d_sql = d_sql.replace("[AppConstants.DB_LOCAL]", AppConstants.DB_LOCAL);
+ query.append(d_sql);
+ }
+ }
+ //query.append(" ORDER BY 1 ");
+ query.append(Globals.grabTheReportTableC());
+ DataSet ds = DbUtils.executeQuery(query.toString());
+ for (int i = 0; i < ds.getRowCount(); i++)
+ userTableSources.add(new TableSource(ds.getString(i, 0), ds.getString(i, 1),
+ ds.getString(i, 2), ds.getString(i, 3), ds.getString(i, 4), ds
+ .getString(i, 5)));
+ } // catch(Exception e) {}
+
+ return userTableSources;
+ } // getReportTableSources
+
+ public static Vector getReportTableJoins() throws RaptorException {
+ if (reportTableJoins == null)
+ /* try */{
+ reportTableJoins = new Vector();
+
+ //DataSet ds = DbUtils
+ // .executeQuery("SELECT src_table_name, dest_table_name, join_expr FROM cr_table_join");
+ DataSet ds = DbUtils
+ .executeQuery(Globals.getTheReportTableCrJoin());
+ for (int i = 0; i < ds.getRowCount(); i++)
+ reportTableJoins.add(new TableJoin(ds.getString(i, 0), ds.getString(i, 1), ds
+ .getString(i, 2)));
+ } // catch(Exception e) {}
+
+ return reportTableJoins;
+ } // getReportTableJoins
+
+ public static Vector getReportTableJoins(Vector userRoles) throws RaptorException {
+ if (!Globals.getRestrictTablesByRole())
+ return getReportTableJoins();
+
+ Vector userTableJoins = new Vector();
+ if (userRoles.size() > 0)
+ /* try */{
+ StringBuffer sb = new StringBuffer();
+ for (Iterator iter = userRoles.iterator(); iter.hasNext();) {
+ sb.append((sb.length() == 0) ? "(" : ", ");
+ sb.append(iter.next());
+ } // for
+ sb.append(")");
+
+ /*DataSet ds = DbUtils
+ .executeQuery("SELECT tj.src_table_name, tj.dest_table_name, tj.join_expr FROM cr_table_join tj "
+ + "WHERE ((EXISTS (SELECT 1 FROM cr_table_role trs WHERE trs.table_name=tj.src_table_name AND trs.role_id IN "
+ + sb.toString()
+ + ")) "
+ + "OR (NOT EXISTS (SELECT 1 FROM cr_table_role trs WHERE trs.table_name=tj.src_table_name))) "
+ + "AND ((EXISTS (SELECT 1 FROM cr_table_role trd WHERE trd.table_name=tj.dest_table_name AND trd.role_id IN "
+ + sb.toString()
+ + ")) "
+ + "OR (NOT EXISTS (SELECT 1 FROM cr_table_role trd WHERE trd.table_name=tj.dest_table_name)))");*/
+
+
+ String f_sql = Globals.getTheReportTableJoins();
+ f_sql = f_sql.replace("[sb.toString()]", sb.toString());
+
+ DataSet ds = DbUtils
+ .executeQuery(f_sql);
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ userTableJoins.add(new TableJoin(ds.getString(i, 0), ds.getString(i, 1), ds
+ .getString(i, 2)));
+ } // catch(Exception e) {}
+
+ return userTableJoins;
+ } // getReportTableJoins
+
+ private static void processDollarFields(Vector tableDbColumns) {
+ int i = 0;
+ while (i < tableDbColumns.size()) {
+ DBColumnInfo dbci = (DBColumnInfo) tableDbColumns.get(i);
+ if (dbci.getColName().equals("DL$MONTH")) {
+ tableDbColumns.remove(i);
+ dbci.setLabel("Data Month/Year");
+ tableDbColumns.add(0, dbci);
+ i++;
+ } else if (dbci.getColName().indexOf('$') >= 0)
+ tableDbColumns.remove(i);
+ else
+ i++;
+ } // while
+ } // processDollarFields
+
+ private static String generateReportTableDbUserColumnSQL(String tableName) {
+ StringBuffer sb = new StringBuffer();
+ // sb.append("SELECT a.table_name, a.column_name, a.data_type, a.label ");
+ //sb.append(" FROM user_column_def a ");
+ // sb.append("WHERE a.table_name = '" + tableName.toUpperCase() + "' ");
+ // sb.append("ORDER BY a.column_id");
+
+ String sql = Globals.getGenerateReportTableCol();
+ sql = sql.replace("[tableName.toUpperCase()]", tableName.toUpperCase());
+ sb.append(sql);
+
+ return sb.toString();
+ }//generateReportTableDbUserColumnSQL
+ private static String generateReportTableDbColumnsSQL(String tableName, String maskSql) {
+ StringBuffer sb = new StringBuffer();
+ //sb.append("SELECT utc.table_name, utc.column_name, utc.data_type, ");
+ sb.append(Globals.getGenerateDbUserSqlA());
+ if (maskSql == null){
+ //sb.append("utc.column_name label ");
+ sb.append(Globals.getGenerateDbUserSqlIf());
+ }
+ else{
+ //sb.append("nvl(x.label, utc.column_name) label ");
+ //sb.append("FROM user_tab_columns utc ");
+ sb.append(Globals.getGenerateDbUserSqlElse());
+ }
+ if (maskSql != null) {
+ sb.append(", (");
+ sb.append(maskSql);
+ sb.append(") AS x ");
+ }
+ //sb.append("WHERE utc.table_name = '" + tableName.toUpperCase() + "' ");
+ String g_sql = Globals.getGenerateDbUserSqlB();
+ g_sql = g_sql.replace("[tableName.toUpperCase()]", tableName.toUpperCase());
+ sb.append(g_sql);
+ if (maskSql != null){
+ //sb.append(" AND utc.table_name = x.table_name AND utc.column_name = x.column_name ");
+ sb.append(Globals.getGenerateDbUserSqlC());
+ }
+ //sb.append("ORDER BY utc.column_id");
+ sb.append(Globals.getGenerateDbUserSqlD());
+ //System.out.println(sb.toString());
+ return sb.toString();
+ } // generateReportTableDbColumnsSQL
+
+ public static synchronized Vector getReportTableDbColumns(String tableName,
+ String remoteDbPrefix) throws RaptorException {
+ Vector tableDbColumns = null;
+ if(reportTableDbColumns!=null)
+ tableDbColumns = (Vector) reportTableDbColumns.get(tableName);
+ else
+ reportTableDbColumns = new HashMap();
+ if (tableDbColumns == null)
+ /* try */{
+ tableDbColumns = new Vector();
+
+ String maskSql = AppUtils.getReportDbColsMaskSQL();
+ DataSet ds = null;
+ if(Globals.getUserColDef()) {
+ try {
+ ds = ConnectionUtils.getDataSet(
+ generateReportTableDbUserColumnSQL(tableName),AppConstants.DB_LOCAL);
+ }
+ catch (ReportSQLException ex) {
+ throw new ReportSQLException("No Such Table. Please create table or make user_column_def in raptor.properties as \"false\"");
+ }
+
+ }
+ else if(maskSql!=null){
+ try {
+ ds = ConnectionUtils.getDataSet(
+ generateReportTableDbColumnsSQL(tableName, maskSql), remoteDbPrefix);
+ }
+ catch(ReportSQLException ex){
+ throw new ReportSQLException("Field related table is not present in the database. Please make \"use_field_table\"" +
+ " as \"no\" in the raptor_app_<framework>.properties");}
+ }
+ if (ds==null || ds.getRowCount() == 0) {
+ // In case there are no records in the FIELDS table
+ ds = ConnectionUtils.getDataSet(generateReportTableDbColumnsSQL(tableName,
+ null), remoteDbPrefix);
+ }
+ for (int i = 0; i < ds.getRowCount(); i++)
+ tableDbColumns.add(new DBColumnInfo(ds.getString(i, 0), ds.getString(i, 1), ds
+ .getString(i, 2), ds.getString(i, 3)));
+
+ processDollarFields(tableDbColumns);
+ reportTableDbColumns.put(tableName, tableDbColumns);
+ } // catch(Exception e) {}
+
+ return tableDbColumns;
+ } // getReportTableDbColumns
+
+ public static synchronized String getReportTableDbColumnType(String tableName,
+ String columnName, String dbInfo) throws RaptorException {
+ for (Iterator iter = getReportTableDbColumns(tableName, dbInfo).iterator(); iter
+ .hasNext();) {
+ DBColumnInfo dbCol = (DBColumnInfo) iter.next();
+ if (dbCol.getColName().equals(columnName))
+ return dbCol.getColType();
+ } // for
+
+ return null;
+ } // getReportTableDbColumnType
+
+ public static synchronized LookupDBInfo getLookupTable(String tableName, String fieldName) throws RaptorException {
+ if (reportFieldDbLookups == null)
+ try {
+ String sql = AppUtils.getReportDbLookupsSQL();
+
+ if (sql != null) {
+ DataSet ds = DbUtils.executeQuery(sql);
+ reportFieldDbLookups = new HashMap();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ String tName = ds.getString(i, 0);
+ String fName = ds.getString(i, 1);
+ reportFieldDbLookups.put(tName + '|' + fName, new LookupDBInfo(tName,
+ fName, ds.getString(i, 2), ds.getString(i, 3), ds.getString(i,
+ 4)));
+ } // for
+ } // if
+ } catch (Exception e) { throw new RaptorException(e.getMessage(), e.getCause());
+ }
+
+ LookupDBInfo lookupDBInfo = null;
+ if (reportFieldDbLookups != null)
+ lookupDBInfo = (LookupDBInfo) reportFieldDbLookups
+ .get(tableName + '|' + fieldName);
+
+ if (lookupDBInfo == null)
+ lookupDBInfo = new LookupDBInfo(tableName, fieldName, tableName, fieldName,
+ fieldName);
+
+ return lookupDBInfo;
+ } // getLookupTable
+
+ // public static void setRemoteDBPrefix (String remoteDBPrefix) {
+ // _remoteDBPrefix = remoteDBPrefix;
+ // }
+ //
+ // public static String getRemoteDBPrefix () {
+ // return _remoteDBPrefix;
+ // }
+
+ public static void refreshAll() {
+ DataCache.dataViewActions = null;
+ DataCache.privateReportIdNames = null;
+ DataCache.publicReportIdNames = null;
+ DataCache.reportFieldDbLookups = null;
+ DataCache.reportTableDbColumns = null;
+ DataCache.reportTableJoins = null;
+ DataCache.reportTableSources = null;
+ AppUtils.resetUserCache();
+ }
+} // DataCache
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportHandler.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportHandler.java
new file mode 100644
index 00000000..c663e69c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportHandler.java
@@ -0,0 +1,6605 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+/* ===========================================================================================
+ * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
+ * Raptor : This tool is used to generate different kinds of reports with lot of utilities
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * ReportHandler.java - This class is used to generate reports in Excel using POI and also to
+ * create ReportRuntime and ReportDefinition object using report id.
+ * -------------------------------------------------------------------------------------------
+ *
+ *
+ * Changes
+ * -------
+ * 18-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> request Object is passed to prevent caching user/roles - Datamining/Hosting. </LI></UL>
+ * 14-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Signature for generating excel method has been changed to add the report name as sheet name. </LI>
+ * <LI> Dashboard reports can be downloaded with each report as a separate sheet. </LI>
+ * </UL>
+ * 08-Jun-2009 : Version 8.3 (Sundar); <UL><LI> Short datatype is replaced with default integer datatype to create
+ * row as short is not expoting more than 32768 rows. </LI></UL>
+ *
+ */
+package org.openecomp.portalsdk.analytics.model;
+
+import java.io.BufferedInputStream;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.StringReader;
+import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+import java.util.Vector;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.concurrent.ScheduledThreadPoolExecutor;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+import java.util.zip.ZipOutputStream;
+
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.apache.poi.hssf.usermodel.HSSFCell;
+import org.apache.poi.hssf.usermodel.HSSFCellStyle;
+import org.apache.poi.hssf.usermodel.HSSFDateUtil;
+import org.apache.poi.hssf.usermodel.HSSFFont;
+import org.apache.poi.hssf.usermodel.HSSFFooter;
+import org.apache.poi.hssf.usermodel.HSSFHeader;
+import org.apache.poi.hssf.usermodel.HSSFRow;
+import org.apache.poi.hssf.usermodel.HSSFSheet;
+import org.apache.poi.hssf.usermodel.HSSFWorkbook;
+import org.apache.poi.hssf.util.HSSFColor;
+import org.apache.poi.hssf.util.Region;
+import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.ss.usermodel.CreationHelper;
+import org.apache.poi.ss.usermodel.DateUtil;
+import org.apache.poi.ss.usermodel.Header;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.IndexedColors;
+import org.apache.poi.ss.util.CellRangeAddress;
+import org.apache.poi.ss.util.CellReference;
+import org.apache.poi.xssf.usermodel.XSSFCell;
+import org.apache.poi.xssf.usermodel.XSSFCellStyle;
+import org.apache.poi.xssf.usermodel.XSSFDataFormat;
+import org.apache.poi.xssf.usermodel.XSSFFont;
+import org.apache.poi.xssf.usermodel.XSSFRow;
+import org.apache.poi.xssf.usermodel.XSSFSheet;
+import org.apache.poi.xssf.usermodel.XSSFWorkbook;
+import org.openecomp.portalsdk.analytics.controller.ErrorHandler;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.ExecuteQuery;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.ExcelColorDef;
+import org.openecomp.portalsdk.analytics.util.HtmlStripper;
+import org.openecomp.portalsdk.analytics.util.Log;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.view.ColumnHeader;
+import org.openecomp.portalsdk.analytics.view.ColumnHeaderRow;
+import org.openecomp.portalsdk.analytics.view.DataRow;
+import org.openecomp.portalsdk.analytics.view.DataValue;
+import org.openecomp.portalsdk.analytics.view.HtmlFormatter;
+import org.openecomp.portalsdk.analytics.view.ReportData;
+import org.openecomp.portalsdk.analytics.view.RowHeader;
+import org.openecomp.portalsdk.analytics.view.RowHeaderCol;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataSourceType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatList;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatType;
+import org.openecomp.portalsdk.analytics.xmlobj.Reports;
+import org.openecomp.portalsdk.analytics.xmlobj.SemaphoreList;
+import org.openecomp.portalsdk.analytics.xmlobj.SemaphoreType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.html.simpleparser.HTMLWorker;
+import com.lowagie.text.html.simpleparser.StyleSheet;
+import com.lowagie.text.pdf.PdfPTable;
+//import javax.servlet.RequestDispatcher;
+
+public class ReportHandler extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportHandler.class);
+
+ public ReportHandler() {
+ }
+
+ private String SHEET_NAME = "";
+ private static final String XML_ENCODING = "UTF-8";
+ private static int font_size = 10;
+ private static int font_header_title_size = 12;
+ private static int font_header_descr_size = 9;
+ private static int font_footer_size = 9;
+
+
+ private HashMap loadStyles(ReportRuntime rr, HSSFWorkbook wb) {
+ HSSFCellStyle styleDefault = wb.createCellStyle();
+ //System.out.println("Load Styles");
+ // Style default will be normal with no background
+ HSSFFont fontDefault = wb.createFont();
+ // The default will be plain .
+ fontDefault.setColor((short) HSSFFont.COLOR_NORMAL);
+ fontDefault.setFontHeight((short) (font_size / 0.05));
+ fontDefault.setFontName("Tahoma");
+
+ styleDefault.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDefault.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDefault.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleDefault.setFont(fontDefault);
+
+ HSSFCellStyle styleRed = wb.createCellStyle();
+ styleRed.cloneStyleFrom(styleDefault);
+ styleRed.setFillForegroundColor((short)HSSFColor.RED.index);
+ styleRed.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ HSSFFont fontRed = wb.createFont();
+ fontRed.setColor((short) HSSFColor.WHITE.index);
+ fontRed.setFontHeight((short) (font_size / 0.05));
+ fontRed.setFontName("Tahoma");
+ styleRed.setFont(fontRed);
+
+ HSSFCellStyle styleYellow = wb.createCellStyle();
+ styleYellow.cloneStyleFrom(styleDefault);
+ styleYellow.setFillForegroundColor((short)HSSFColor.YELLOW.index);
+ styleYellow.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ HSSFFont fontYellow = wb.createFont();
+ fontYellow.setColor((short) HSSFColor.BLACK.index);
+ fontYellow.setFontHeight((short) (font_size / 0.05));
+ fontYellow.setFontName("Tahoma");
+ styleYellow.setFont(fontYellow);
+
+ HSSFCellStyle styleGreen = wb.createCellStyle();
+ styleGreen.cloneStyleFrom(styleDefault);
+ styleGreen.setFillForegroundColor((short)HSSFColor.GREEN.index);
+ styleGreen.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ HSSFFont fontGreen = wb.createFont();
+ fontGreen.setColor((short) HSSFColor.WHITE.index);
+ fontGreen.setFontHeight((short) (font_size / 0.05));
+ fontGreen.setFontName("Tahoma");
+ styleGreen.setFont(fontGreen);
+
+
+ ArrayList semColumnList = new ArrayList();
+ List dsList = rr.getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType element = (DataSourceType) iter.next();
+ List dcList = element.getDataColumnList().getDataColumn();
+ for (Iterator iterator = dcList.iterator(); iterator.hasNext();) {
+ DataColumnType element1 = (DataColumnType) iterator.next();
+ semColumnList.add(element1.getSemaphoreId());
+
+ }
+ }
+ SemaphoreList semList = rr.getSemaphoreList();
+ HashMap hashMapStyles = new HashMap();
+ HashMap hashMapFonts = new HashMap();
+ hashMapFonts.put("default", fontDefault);
+ hashMapFonts.put("red", fontRed);
+ hashMapFonts.put("yellow", fontYellow);
+ hashMapFonts.put("green", fontGreen);
+ hashMapStyles.put("default", styleDefault);
+ hashMapStyles.put("red", styleRed);
+ hashMapStyles.put("yellow", styleYellow);
+ hashMapStyles.put("green", styleGreen);
+ HSSFCellStyle cellStyle = null;
+ if (semList == null || semList.getSemaphore() == null) {
+ return hashMapStyles;
+ } else {
+ for (Iterator iter = semList.getSemaphore().iterator(); iter.hasNext();) {
+ SemaphoreType sem = (SemaphoreType) iter.next();
+ if(!semColumnList.contains(sem.getSemaphoreId())) continue;
+ //System.out.println("SemphoreId ----> " + sem.getSemaphoreId());
+ FormatList fList = sem.getFormatList();
+ List formatList = fList.getFormat();
+ for (Iterator fIter = formatList.iterator(); fIter.hasNext();) {
+ FormatType fmt = (FormatType) fIter.next();
+ if(fmt!=null){
+ //if (fmt.getLessThanValue().length() > 0) {
+ cellStyle = wb.createCellStyle();
+ HSSFFont cellFont = wb.createFont();
+ //System.out.println("Format Id " + fmt.getFormatId());
+ if (nvl(fmt.getBgColor()).length() > 0) {
+// System.out.println("Load Styles " +
+// fmt.getFormatId()
+// + " " +fmt.getBgColor() + " " +
+// ExcelColorDef.getExcelColor(fmt.getBgColor()));
+ cellStyle.setFillForegroundColor(ExcelColorDef.getExcelColor(fmt
+ .getBgColor()));
+ cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ }
+ if (nvl(fmt.getFontColor()).length() > 0) {
+ cellFont.setColor(ExcelColorDef.getExcelColor(fmt.getFontColor()));
+ } else
+ cellFont.setColor((short) HSSFFont.COLOR_NORMAL);
+ if (fmt.isBold())
+ cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ if (fmt.isItalic())
+ cellFont.setItalic(true);
+ if (fmt.isUnderline())
+ cellFont.setUnderline(HSSFFont.U_SINGLE);
+ if(nvl(fmt.getFontFace()).length()>0)
+ cellFont.setFontName(fmt.getFontFace());
+ else
+ cellFont.setFontName("Tahoma");
+ //cellFont.setFontHeight((short) (10 / 0.05));
+
+ if(nvl(fmt.getFontSize()).length()>0) {
+ try {
+ //cellFont.setFontHeight((short) (Integer.parseInt(fmt.getFontSize()) / 0.05));
+ cellFont.setFontHeight((short) (font_size/0.05));
+ } catch(NumberFormatException e){
+ cellFont.setFontHeight((short) (font_size / 0.05));//10
+ }
+ }
+ else
+ cellFont.setFontHeight((short) (font_size / 0.05));
+ cellStyle.setFont(cellFont);
+ cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ hashMapStyles.put(fmt.getFormatId(), cellStyle);
+ } else {
+ hashMapStyles.put(fmt.getFormatId(), styleDefault);
+ hashMapStyles.put("default", styleDefault);
+ }
+ }
+
+ }
+ }
+ return hashMapStyles;
+ }
+
+ private void paintExcelParams(HSSFWorkbook wb,int rowNum,int col,ArrayList paramsList, String customizedParamInfo, HSSFSheet sheet, String reportTitle, String reportDescr) throws IOException {
+ //HSSFSheet sheet = wb.getSheet(getSheetName());
+ int cellNum = 0;
+ HSSFRow row = null;
+ short s1 = 0, s2 = (short) 1;
+ HtmlStripper strip = new HtmlStripper();
+ // Name Style
+ HSSFCellStyle styleName = wb.createCellStyle();
+ //styleName.setFillBackgroundColor(HSSFColor.GREY_80_PERCENT.index);
+ styleName.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
+ //styleName.setFillPattern(HSSFCellStyle.SPARSE_DOTS);
+ styleName.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleName.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleName.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleName.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ styleName.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleName.setDataFormat((short)0);
+ HSSFFont font = wb.createFont();
+ font.setFontHeight((short) (font_size / 0.05));
+ font.setFontName("Tahoma");
+ font.setColor(HSSFColor.BLACK.index);
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ styleName.setFont(font);
+ //Data Style
+
+ // Create some fonts.
+ HSSFFont fontDefault = wb.createFont();
+ // Initialize the styles & fonts.
+ // The default will be plain .
+ fontDefault.setColor((short) HSSFFont.COLOR_NORMAL);
+ fontDefault.setFontHeight((short) (font_size / 0.05));
+ fontDefault.setFontName("Tahoma");
+ fontDefault.setItalic(true);
+ // Style default will be normal with no background
+ HSSFCellStyle styleValue = wb.createCellStyle();
+ styleValue.setDataFormat((short)0);
+ styleValue.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleValue.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleValue.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleValue.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleValue.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleValue.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleValue.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleValue.setFont(fontDefault);
+ HSSFCell cell = null;
+ HSSFCellStyle styleDescription = wb.createCellStyle();
+ styleDescription.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+// styleDescription.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+// styleDescription.setBorderTop(HSSFCellStyle.BORDER_THIN);
+// styleDescription.setBorderRight(HSSFCellStyle.BORDER_THIN);
+// styleDescription.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ HSSFFont fontDescr = wb.createFont();
+ fontDescr.setFontHeight((short) (font_size / 0.05)); //14
+ fontDescr.setFontName("Tahoma");
+ fontDescr.setColor(HSSFColor.BLACK.index);
+ fontDescr.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ styleDescription.setFont(font);
+ HSSFCell cellDescr = null;
+ int paramSeq = 0;
+ HSSFHeader header = sheet.getHeader();
+ StringBuffer strBuf = new StringBuffer();
+ if(!Globals.customizeFormFieldInfo() || customizedParamInfo.length()<=0) {
+ for (Iterator iter = paramsList.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+ //System.out.println("\"" + value.getId() + " = " + value.getName() + "\"");
+ if(nvl(value.getId()).trim().length()>0 && (!nvl(value.getId()).trim().equals("BLANK"))) {
+ paramSeq += 1;
+ if(paramSeq <= 1) {
+ row = sheet.createRow(++rowNum);
+ cell = row.createCell((short) 0);
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ cellDescr = row.createCell((short) 0);
+ cellDescr.setCellValue("Run-time Parameters");
+ cellDescr.setCellStyle(styleDescription);
+
+
+ strBuf.append(reportTitle+"\n");
+ //strBuf.append("Run-time Parameters\n");
+ }
+ row = sheet.createRow(++rowNum);
+ cellNum = 0;
+ //System.out.println("RowNum " + rowNum + " " + value.getId() + " " +value.getName());
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.getId());
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.getName().replaceAll("~",","));
+ cell.setCellStyle(styleValue);
+
+ //strBuf.append(value.getId()+": "+ value.getName()+"\n");
+ }
+ } //for
+ } else {
+ strBuf.append(reportTitle+"\n");
+ Document document = new Document();
+ document.open();
+ HTMLWorker worker = new HTMLWorker(document);
+ StyleSheet style = new StyleSheet();
+ style.loadTagStyle("body", "leading", "16,0");
+ ArrayList p = HTMLWorker.parseToList(new StringReader(customizedParamInfo), style);
+ String name = "";
+ String token = "";
+ String value = "";
+ String s = "";
+ PdfPTable pdfTable = null;
+ for (int k = 0; k < p.size(); ++k){
+ if(p.get(k) instanceof Paragraph)
+ s = ((Paragraph)p.get(k)).toString();
+ else { /*if ((p.get(k) instanceof PdfPTable))*/
+ pdfTable = ((PdfPTable)p.get(k));
+ }
+ //todo: Logic for parsing pdfTable should be added after upgrading to iText 5.0.0
+ //s = Utils.replaceInString(s, ",", "|");
+ s = s.replaceAll(",", "|");
+ s = s.replaceAll("~", ",");
+ if(s.indexOf(":")!= -1) {
+ //System.out.println("|"+s+"|");
+ row = sheet.createRow(++rowNum);
+ cell = row.createCell((short) 0);
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ cellDescr = row.createCell((short) 0);
+ cellDescr.setCellValue("Run-time Parameters");
+ cellDescr.setCellStyle(styleDescription);
+
+ //strBuf.append("Run-time Parameters\n");
+ StringTokenizer st = new StringTokenizer(s.trim(), "|");
+ while(st.hasMoreTokens()) {
+ token = st.nextToken();
+ token = token.trim();
+ if (!(token.trim().equals("|") || token.trim().equals("]]") || token.trim().equals("]") || token.trim().equals("[") )) {
+ if(token.endsWith(":")) {
+ name = token;
+ name = name.substring(0, name.length()-1);
+ if(name.startsWith("["))
+ name = name.substring(1);
+ value = st.nextToken();
+ if(nvl(value).endsWith("]"))value = nvl(value).substring(0, nvl(value).length()-1);
+ } /*else if(name != null && name.length() > 0) {
+ value = st.nextToken();
+ if(value.endsWith("]]"))value = value.substring(0, value.length()-1);
+ }*/
+ if(name!=null && name.trim().length()>0) {
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(name.trim());
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.trim());
+ cell.setCellStyle(styleValue);
+ //strBuf.append(name.trim()+": "+ value.trim()+"\n");
+ }
+/* if(token.endsWith(":") && (value!=null && value.trim().length()<=0) && (name!=null && name.trim().length()>0 && name.endsWith(":"))) {
+ name = name.substring(0, name.indexOf(":")+1);
+ //value = token.substring(token.indexOf(":")+1);
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(name.trim());
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.trim());
+ cell.setCellStyle(styleValue);
+
+ //strBuf.append(name.trim()+": "+ value.trim()+"\n");
+ value = "";
+ name = "";
+ }
+*/ }
+ int cw = 0;
+ cw = name.trim().length() + 12;
+ // if(i!=cellWidth.size()-1)
+ if(sheet.getColumnWidth((short)0)< (short) name.trim().length())
+ sheet.setColumnWidth((short)0, (short) name.trim().length());
+ if(sheet.getColumnWidth((short)1)< (short) value.trim().length())
+ sheet.setColumnWidth((short)1, (short) value.trim().length());
+ name = "";
+ value = "";
+
+ }
+
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue("Report Date/Time");
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+
+ cell.setCellValue(dtimestamp.format(sysdate)+" "+Globals.getTimeZone());
+ cell.setCellStyle(styleValue);
+
+ } catch(Exception ex) {
+ //ex.printStackTrace();
+ }
+
+
+ }
+ }
+
+
+/* Iterator iter1 = paramsList.iterator();
+ s1 = 0; s2 = (short)10;
+ if(iter1.hasNext()) {
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ cell.setCellValue(strip.stripHtml(customizedParamInfo));
+ }
+*/
+/* rowNum += 2;
+ row = sheet.createRow(rowNum);*/
+ } // if
+ Iterator iterCheck = paramsList.iterator();
+ if(iterCheck.hasNext()) {
+ rowNum += 2;
+ row = sheet.createRow(rowNum);
+ }
+ header.setCenter(HSSFHeader.font("Tahoma", "")+ HSSFHeader.fontSize((short) 9)+" " + strBuf.toString());
+ HSSFFooter footer = sheet.getFooter();
+ footer.setLeft(HSSFFooter.font("Tahoma", "")+ HSSFFooter.fontSize((short) 9)+ "Page " + HSSFFooter.page()
+ + " of " + HSSFFooter.numPages() );
+ footer.setCenter(HSSFFooter.font("Tahoma", "")+ HSSFFooter.fontSize((short) 9)+Globals.getFooterFirstLine()+"\n"+Globals.getFooterSecondLine());
+
+ }
+
+
+
+ private int paintExcelData(HSSFWorkbook wb, int rowNum, int col, ReportData rd,
+ HashMap styles, ReportRuntime rr, HSSFSheet sheet, String sql_whole, OutputStream sos, HttpServletRequest request) throws RaptorException {
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+ int returnValue = 0;
+ // HSSFSheet sheet = wb.getSheetAt(0);
+ HSSFCellStyle styleDefault = wb.createCellStyle();
+ HSSFCellStyle styleNumber = wb.createCellStyle();
+ HSSFCellStyle styleDecimalNumber = wb.createCellStyle();
+ HSSFCellStyle styleCurrencyNumber = wb.createCellStyle();
+ HSSFCellStyle styleCurrencyDecimalNumber = wb.createCellStyle();
+ HSSFCellStyle styleDate = wb.createCellStyle();
+ HtmlStripper strip = new HtmlStripper();
+ //HSSFSheet sheet = wb.getSheet(getSheetName());
+ HSSFCellStyle styleDataHeader = wb.createCellStyle();
+ // style.setFillBackgroundColor(HSSFColor.AQUA.index);
+ styleDataHeader.setFillForegroundColor(HSSFColor.GREY_40_PERCENT.index);
+ styleDataHeader.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ styleDataHeader.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDataHeader.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDataHeader.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDataHeader.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ styleDataHeader.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ HSSFFont font = wb.createFont();
+ font.setFontHeight((short) (font_size / 0.05));
+ font.setFontName("Tahoma");
+ font.setColor(HSSFColor.BLACK.index);
+ styleDataHeader.setFont(font);
+ // Column Header
+ boolean firstPass = true;
+ ArrayList cellWidth = new ArrayList();
+ java.util.HashMap dataTypeMap = new java.util.HashMap();
+ int cellNum = 0;
+ rowNum += 0;
+ ColumnHeaderRow chr = null;
+ String title = "";
+
+// System.out.println("***************** Size " + rd.reportColumnHeaderRows.size());
+// for (int i = 0; i < rd.reportColumnHeaderRows.size(); i++) {
+// for (int j = 0; j < rd.reportColumnHeaderRows.getColumnHeaderRow(i).size(); j++) {
+// System.out.println("Column Title " + rd.reportColumnHeaderRows.getColumnHeaderRow(i).getColumnHeader(j).getColumnTitle()
+// + " " + rd.reportColumnHeaderRows.getColumnHeaderRow(i).getColumnHeader(j).isVisible());
+// }
+// }
+/* List dsList = rr.getDataSourceList().getDataSource();
+ HashMap dataColumnTypeHashMap = new HashMap();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType element = (DataSourceType) iter.next();
+ List dcList = element.getDataColumnList().getDataColumn();
+ for (Iterator iterator = dcList.iterator(); iterator.hasNext();) {
+ DataColumnType element1 = (DataColumnType) iterator.next();
+ dataTypeMap.put(element1.getColId(), element1.getColType());
+ dataColumnTypeHashMap.put(element1.getColName(), element1);
+ }
+ }
+*/
+ int columnRows = rr.getVisibleColumnCount() - 1;
+
+ HttpSession session = request.getSession();
+ String drilldown_index = (String) session.getAttribute("drilldown_index");
+ int index = 0;
+ try {
+ index = Integer.parseInt(drilldown_index);
+ } catch (NumberFormatException ex) {
+ index = 0;
+ }
+ String header = (String) session.getAttribute("TITLE_"+index);
+ String subtitle = (String) session.getAttribute("SUBTITLE_"+index);
+ if(nvl(header).length()>0) {
+ header = Utils.replaceInString(header, "<BR/>", " ");
+ header = Utils.replaceInString(header, "<br/>", " ");
+ header = Utils.replaceInString(header, "<br>", " ");
+ header = strip.stripHtml(nvl(header).trim());
+ subtitle = Utils.replaceInString(subtitle, "<BR/>", " ");
+ subtitle = Utils.replaceInString(subtitle, "<br/>", " ");
+ subtitle = Utils.replaceInString(subtitle, "<br>", " ");
+ subtitle = strip.stripHtml(nvl(subtitle).trim());
+ HSSFRow row = sheet.createRow(rowNum);
+ cellNum = 0;
+ row.createCell((short) cellNum).setCellValue(header);
+ sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (columnRows)));
+ rowNum += 1;
+ row = sheet.createRow(rowNum);
+ cellNum = 0;
+ row.createCell((short) cellNum).setCellValue(subtitle);
+ sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (columnRows)));
+ rowNum += 1;
+ }
+
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ HSSFRow row = sheet.createRow(rowNum);
+ cellNum = -1;
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ cellNum +=1;
+ row.createCell((short) cellNum).setCellValue("Total");
+ row.createCell((short) cellNum).setCellStyle(styleDataHeader);
+ //row.getCell((short) cellNum).setCellStyle(styleDataHeader);
+ }*/
+ chr = rd.reportColumnHeaderRows.getNext();
+
+ if(nvl(sql_whole).length() <= 0 || (!rr.getReportType().equals(AppConstants.RT_LINEAR))) {
+ if(rr.getReportType().equals(AppConstants.RT_CROSSTAB))
+ rd.reportRowHeaderCols.resetNext(0);
+ else
+ rd.reportRowHeaderCols.resetNext(1);
+
+ for (; rd.reportRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+
+ if (firstPass) {
+ title = rhc.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+ row.createCell((short) cellNum).setCellValue(title);
+ //commented after bug reported by EPAT 01/17/2015
+ //sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum+columnRows, (short) (cellNum)));
+ //System.out.println(" **************** Row Header Title " + rhc.getColumnTitle() + " " + cellNum + " " );
+ //System.out.println(cellNum + " " + cellWidth.size());
+ if (cellWidth.size() > 0 && cellWidth.size() > cellNum) {
+ if (((Integer) cellWidth.get(cellNum)).intValue() < rhc
+ .getColumnTitle().length())
+ cellWidth.set(cellNum, new Integer(title.length()));
+ } else
+ cellWidth.add(cellNum, new Integer(title.length()));
+ row.getCell((short) cellNum).setCellStyle(styleDataHeader);
+ }
+
+
+ } // for
+
+ }
+
+ firstPass = false;
+
+/* for(chr.resetNext(); chr.hasNext(); ) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ cellNum += 1;
+ row.createCell((short) cellNum).setCellValue(ch.getColumnTitle());
+// <td align="center"<%= ch.getColumnWidthHtml() %><%= ch.getColSpanHtml() %><%= ch.getRowSpanHtml() %>>
+// <b class=rtableheader><%= ch.getColumnTitleHtml() %></b>
+// </td>
+ } // if
+ } // for
+*/
+
+ //cellNum = -1;
+
+
+// Set mapSet = dataTypeMap.entrySet();
+// Map.Entry me;
+// String element, value ;
+// for (Iterator iter = mapSet.iterator(); iter.hasNext();) {
+// me=(Map.Entry)iter.next();
+// element = (String) me.getKey();
+// value = (String) me.getValue();
+// System.out.println("DataTypeMap " + element + " " + value);
+// }
+
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ cellNum += 1;
+
+ int colSpan = ch.getColSpan()-1;
+ title = ch.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+ row.createCell((short) cellNum).setCellValue(title);
+ if(colSpan > 0) {
+ for ( int k = 1; k <= colSpan; k++ ) {
+ row.createCell((short) cellNum+k);
+ }
+ sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (cellNum+colSpan)));
+ }
+
+
+
+/* if (cellWidth.size() > cellNum) {
+ if (((Integer) cellWidth.get(cellNum)).intValue() < ch
+ .getColumnTitle().length())
+ cellWidth
+ .set((cellNum), new Integer(ch.getColumnTitle().length()));
+ } else
+ cellWidth.add((cellNum), new Integer(ch.getColumnTitle().length()));
+*/ row.getCell((short) (cellNum)).setCellStyle(styleDataHeader);
+ for ( int k = 1; k <= colSpan; k++ ) {
+ row.getCell((short) (cellNum+k)).setCellStyle(styleDataHeader);
+ }
+
+ if(colSpan > 0)
+ cellNum += colSpan;
+ }
+ } // for
+
+/* int cw = 0;
+ for (int i = 0; i < cellWidth.size(); i++) {
+ cw = ((Integer) cellWidth.get(i)).intValue() + 6;
+ sheet.setColumnWidth((short) (i), (short) ((cw * 8) / ((double) 1 / 20)));
+ }
+*/
+ rowNum += 1;
+ } // for
+
+
+ // Data
+ // Create some cell styles.
+ //HSSFCellStyle styleDefault = wb.createCellStyle();
+ HSSFCellStyle styleCell = null;
+
+ HSSFCellStyle styleTotal = wb.createCellStyle();
+ HSSFCellStyle styleCurrencyTotal = wb.createCellStyle();
+ HSSFCellStyle styleDefaultTotal = wb.createCellStyle();
+ HSSFCellStyle styleCurrencyDecimalNumberTotal = wb.createCellStyle();
+ HSSFCellStyle styleDecimalNumberTotal = wb.createCellStyle();
+ HSSFCellStyle styleCurrencyNumberTotal = wb.createCellStyle();
+
+
+ // Create some fonts.
+ HSSFFont fontDefault = wb.createFont();
+ HSSFFont fontBold = wb.createFont();
+ // Initialize the styles & fonts.
+ // The default will be plain .
+ fontDefault.setColor((short) HSSFFont.COLOR_NORMAL);
+ fontDefault.setFontHeight((short) (font_size / 0.05));
+ fontDefault.setFontName("Tahoma");
+
+ // The default will be bold black tachoma 10pt text.
+ fontBold.setColor((short) HSSFFont.COLOR_NORMAL);
+ fontBold.setFontHeight((short) (font_size / 0.05));
+ fontBold.setFontName("Tahoma");
+ fontBold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ // Style default will be normal with no background
+ styleDefault.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDefault.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDefault.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleDefault.setFont(fontDefault);
+ styleDefault.setWrapText(true);
+ //Number
+ styleNumber.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleNumber.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleNumber.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleNumber.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleNumber.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleNumber.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleNumber.setFont(fontDefault);
+ try {
+ styleNumber.setDataFormat((short)0x26);//HSSFDataFormat.getBuiltinFormat("(#,##0_);[Red](#,##0)"));
+ } catch (Exception e) {
+
+ }
+ //Decimal Number
+ styleDecimalNumber.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDecimalNumber.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDecimalNumber.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDecimalNumber.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleDecimalNumber.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDecimalNumber.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleDecimalNumber.setFont(fontDefault);
+ styleDecimalNumber.setDataFormat((short)0x27);//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+
+ //Decimal Number
+ styleDecimalNumberTotal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDecimalNumberTotal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDecimalNumberTotal.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDecimalNumberTotal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleDecimalNumberTotal.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDecimalNumberTotal.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleDecimalNumberTotal.setFont(fontBold);
+ styleDecimalNumberTotal.setDataFormat((short)0x27);//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+
+ //CurrencyNumber
+ styleCurrencyDecimalNumber.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleCurrencyDecimalNumber.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyDecimalNumber.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyDecimalNumber.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyDecimalNumber.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleCurrencyDecimalNumber.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleCurrencyDecimalNumber.setFont(fontDefault);
+ styleCurrencyDecimalNumber.setDataFormat((short)8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+
+ //currency number bold
+ styleCurrencyDecimalNumberTotal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleCurrencyDecimalNumberTotal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyDecimalNumberTotal.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyDecimalNumberTotal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyDecimalNumberTotal.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleCurrencyDecimalNumberTotal.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleCurrencyDecimalNumberTotal.setFont(fontBold);
+ styleCurrencyDecimalNumberTotal.setDataFormat((short)8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+
+
+ //CurrencyNumber
+ styleCurrencyNumber.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleCurrencyNumber.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyNumber.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyNumber.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyNumber.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleCurrencyNumber.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleCurrencyNumber.setFont(fontDefault);
+ styleCurrencyNumber.setDataFormat((short) 6);//HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
+
+
+ //CurrencyNumber
+ styleCurrencyNumberTotal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleCurrencyNumberTotal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyNumberTotal.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyNumberTotal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyNumberTotal.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleCurrencyNumberTotal.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleCurrencyNumberTotal.setFont(fontBold);
+ styleCurrencyNumberTotal.setDataFormat((short) 6);//HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
+
+ //Date
+ styleDate.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDate.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDate.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDate.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleDate.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDate.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleDate.setFont(fontDefault);
+ styleDate.setDataFormat((short)0xe);//HSSFDataFormat.getBuiltinFormat("m/d/yy"));
+
+ // Style for Total will be Bold with normal font with no background
+ styleTotal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleTotal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleTotal.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleTotal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleTotal.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleTotal.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleTotal.setDataFormat((short)0x28);//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+ styleTotal.setFont(fontBold);
+
+ styleCurrencyTotal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleCurrencyTotal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyTotal.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyTotal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleCurrencyTotal.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleCurrencyTotal.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleCurrencyTotal.setDataFormat((short)8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ styleCurrencyTotal.setFont(fontBold);
+
+ styleDefaultTotal.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleDefaultTotal.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleDefaultTotal.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleDefaultTotal.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleDefaultTotal.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDefaultTotal.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleDefaultTotal.setDataFormat((short)0x28);
+ ////styleDefaultTotal.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ styleDefaultTotal.setFont(fontBold);
+
+ firstPass = true;
+ // Declare a row object reference.
+ HSSFRow row = null;
+ // Declare a cell object reference.
+ HSSFCell cell = null;
+ //HSSFCell cellNumber = null;
+ //HSSFCell cellCurrencyNumber = null;
+ //HSSFCell cellDate = null;
+
+ //All the possible combinations of date format
+ SimpleDateFormat MMDDYYYYFormat = new SimpleDateFormat("MM/dd/yyyy");
+ SimpleDateFormat YYYYMMDDFormat = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat MONYYYYFormat = new SimpleDateFormat("MMM yyyy");
+ SimpleDateFormat MMYYYYFormat = new SimpleDateFormat("MM/yyyy");
+ SimpleDateFormat MMMMMDDYYYYFormat = new SimpleDateFormat("MMMMM dd, yyyy");
+ SimpleDateFormat YYYYMMDDDASHFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat DDMONYYYYFormat = new SimpleDateFormat("dd-MMM-yyyy");
+ SimpleDateFormat MONTHYYYYFormat = new SimpleDateFormat("MMMMM, yyyy");
+ SimpleDateFormat MMDDYYYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
+ SimpleDateFormat YYYYMMDDHHMMSSFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ SimpleDateFormat YYYYMMDDHHMMFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+ SimpleDateFormat DDMONYYYYHHMMSSFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+ SimpleDateFormat DDMONYYYYHHMMFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
+ SimpleDateFormat DDMONYYHHMMFormat = new SimpleDateFormat("dd-MMM-yy HH:mm");
+ SimpleDateFormat MMDDYYFormat = new SimpleDateFormat("MM/dd/yy");
+ SimpleDateFormat MMDDYYHHMMFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
+ SimpleDateFormat MMDDYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMZFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
+ SimpleDateFormat MMMMMDDYYYYHHMMSS = new SimpleDateFormat("MMMMM-dd-yyyy HH:mm:ss");
+
+
+
+
+ ResultSet rs = null;
+ Connection conn = null;
+ Statement st = null;
+ ResultSetMetaData rsmd = null;
+ CreationHelper createHelper = wb.getCreationHelper();
+
+ if(nvl(sql_whole).length() >0 && rr.getReportType().equals(AppConstants.RT_LINEAR)) {
+ try {
+ conn = ConnectionUtils.getConnection(rr.getDbInfo());
+ st = conn.createStatement();
+ System.out.println("************* Map Whole SQL *************");
+ System.out.println(sql_whole);
+ System.out.println("*****************************************");
+ rs = st.executeQuery(sql_whole);
+ rsmd = rs.getMetaData();
+ int numberOfColumns = rsmd.getColumnCount();
+ HashMap colHash = new HashMap();
+ DataRow dr = null;
+ int j = 0;
+ int rowCount = 0;
+ while(rs.next()) {
+ rowCount++;
+ row = sheet.createRow(rowNum);
+ cellNum = -1;
+ colHash = new HashMap();
+ for (int i = 1; i <= numberOfColumns; i++) {
+ colHash.put(rsmd.getColumnLabel(i).toUpperCase(), strip.stripHtml(rs.getString(i)));
+ }
+ rd.reportDataRows.resetNext();
+ dr = rd.reportDataRows.getNext();
+ j = 0;
+ //if(rowCount%1000 == 0) wb.write(sos);
+
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ //cellNum = -1;
+ //for (rd.reportRowHeaderCols.resetNext(); rd.reportRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ //RowHeaderCol rhc = rd.reportRowHeaderCols.getRowHeaderCol(0);
+ //if (firstPass)
+ // rhc.resetNext();
+ //RowHeader rh = rhc.getRowHeader(rowCount-1);
+ row.createCell((short) cellNum).setCellValue(rowCount);
+ row.getCell((short) cellNum).setCellStyle(styleDefault);
+ if (firstPass)
+ cellWidth.add(cellNum, new Integer((rowCount+"").length()));
+ else
+ cellWidth.set(cellNum, new Integer((rowCount+"").length()));
+
+ //} // for
+ }*/
+ firstPass = false;
+ //cellNum = -1;
+ for (dr.resetNext(); dr.hasNext();j++) {
+ //for (chr.resetNext(); chr.hasNext();) {
+ //ColumnHeader ch = chr.getNext();
+ styleCell = null;
+ DataValue dv = dr.getNext();
+ HtmlFormatter htmlFormat = dv.getCellFormatter();
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null)
+ styleCell = (HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default"));
+ if (htmlFormat != null && dv.getFormatId() != null && styles != null)
+ styleCell = (HSSFCellStyle) styles.get(nvl(dv.getFormatId(),"default"));
+ String value = nvl((String)colHash.get(dv.getColId().toUpperCase()));
+
+ boolean bold = false;
+
+ if(dv.isVisible()) {
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ //System.out.println("Stripping HTML 1");
+ //cell.setCellValue(strip.stripHtml(dv.getDisplayValue()));
+ String dataType = (String) (dataTypeMap.get(dv.getColId()));
+ //System.out.println("Value " + value + " " + (( dataType !=null && dataType.equals("DATE")) || (dv.getColName()!=null && dv.getColName().toLowerCase().endsWith("date"))) );
+ if (dataType!=null && dataType.equals("NUMBER")){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(dv.getDisplayValue());
+ //cellCurrencyNumber = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ cell.setCellValue(zInt);
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (dv.getDisplayValue().startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = dv.getDisplayValue().trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 1 is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyDecimalNumber);
+ cell.setCellValue(tempDoubleDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ //cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDollar);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(value);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short)0x28);//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDecimalNumber);
+ cell.setCellValue(tempDouble);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(value);
+ }
+
+ }
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (dv.getDisplayValue().startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT is "+tempInt);
+ Long tempIntDollar = 0L;
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 6);//HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyNumber);
+ cell.setCellValue(tempIntDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempInt);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 0x26);//HSSFDataFormat.getBuiltinFormat("(#,##0_);[Red](#,##0)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleNumber);
+ cell.setCellValue(temp);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempStr);
+ }
+
+
+ }
+ //int temp = Integer.parseInt(value.trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ }
+ }
+ }
+
+ }else if ( ( dataType !=null && dataType.equals("DATE")) || (dv.getDisplayName()!=null && dv.getDisplayName().toLowerCase().endsWith("date")) ||
+ (dv.getColId()!=null && dv.getColId().toLowerCase().endsWith("date")) ||
+ (dv.getColName()!=null && dv.getColName().toLowerCase().endsWith("date")) ) {
+ //cellDate = row.createCell((short) cellNum);
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yy"));
+
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 0xe);//HSSFDataFormat.getBuiltinFormat("m/d/yy"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDate);
+ //String MY_DATE_FORMAT = "yyyy-MM-dd";
+ //value = nvl(value).length()<=0?nvl(dv.getDisplayValue()):value;
+ Date date = null;
+ int flag = 0;
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy/m/d"));
+ flag = 1;
+ }
+ if(date==null)
+ date = timestampFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy-m-d h:mm:ss")); //yyyy-MM-dd HH:mm:ss
+ flag = 1;
+ }
+ if(date==null)
+ date = MONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("mmm yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("mmm/d/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MONTHYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("mmm/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy/m/d h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDDASHFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy-m-d"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy/m/d h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yyyy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yyyy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMZFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYHHMMSS.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm"));
+ flag = 1;
+ }
+
+ if(date!=null) {
+ //System.out.println("ExcelDate " + HSSFDateUtil.getExcelDate(date));
+ cell.setCellValue(HSSFDateUtil.getExcelDate(date));
+ try {
+ String str = cell.getStringCellValue();
+ } catch (IllegalStateException ex) { /*cell.getCellStyle().setDataFormat((short)0);*/cell.setCellValue(value);}
+ } else {
+ /*cell.getCellStyle().setDataFormat((short)0);*/
+ cell.setCellValue(value);
+ }
+ //cellDate.setCellValue(date);
+ //cellDate.setCellValue(value); //cellDate.setCellValue(date);
+ //cellDate.setCellValue(dv.getDisplayValue());
+
+ }else if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(dv.getDisplayValue());
+ cell = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ cell.setCellValue(zInt);
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 2IF is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyDecimalNumber);
+ cell.setCellValue(tempDoubleDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDollar);
+ }
+
+
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempDoubleStr = value.trim();
+ tempDoubleStr = tempDoubleStr.replaceAll(" ", "").substring(0);
+ if ((tempDoubleStr.indexOf(","))!= -1){
+ tempDoubleStr = tempDoubleStr.replaceAll(",", "");
+ }
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(tempDoubleStr);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short)0x28 );//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDecimalNumber);
+ cell.setCellValue(tempDouble);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDoubleStr);
+ }
+ }
+
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT 2 is "+tempInt);
+
+ Long tempIntDollar = 0L;
+
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 6);//HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyNumber);
+ cell.setCellValue(tempIntDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempInt);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 0x26);//HSSFDataFormat.getBuiltinFormat("(#,##0_);[Red](#,##0)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleNumber);
+ cell.setCellValue(temp);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempStr);
+ }
+ }
+ //int temp = Integer.parseInt(dv.getDisplayValue().trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(dv.getDisplayValue()));
+ //}
+ } else {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ }
+ }
+ }
+
+
+ }
+ else {
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("General"));
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(strip.stripHtml(value));
+ }
+
+ //if (!(value.equals(""))){
+ //int temp = Integer.parseInt(value.trim());
+ //cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ //HSSFCellStyle styleFormat = null;
+ //HSSFCellStyle numberStyle = null;
+ //HSSFFont formatFont = null;
+ //short fgcolor = 0;
+ //short fillpattern = 0;
+ if (cellWidth.size() > cellNum) {
+ if (((Integer) cellWidth.get(cellNum)).intValue() < dv
+ .getDisplayValue().length())
+ cellWidth.set((cellNum),
+ (value.length()<=Globals.getMaxCellWidthInExcel())?new Integer(value.length()):new Integer(Globals.getMaxCellWidthInExcel()));
+ } else
+ cellWidth.add((cellNum), (value.length()<=Globals.getMaxCellWidthInExcel())?new Integer(value.length()):new Integer(Globals.getMaxCellWidthInExcel()));
+ //System.out.println("1IF "+ (dv.isBold()) + " "+ value + " " + dv.getDisplayTotal() + " " + dv.getColName() );
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ cell.setCellStyle(styleCurrencyTotal);
+ }
+ else {
+ cell.setCellStyle(styleTotal);
+ }
+ } else {
+ cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ //System.out.println("2IF "+ (dr.isRowFormat()) + " " + (dv.isCellFormat()) + " " + (styles!=null));
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null) {
+ //cell.setCellStyle((HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default")));
+ continue;
+ }
+ //System.out.println("3IF "+ (htmlFormat != null) + " " + (dv.getFormatId() != null) + " " + (bold == false) + " "+ (styles != null));
+ if (htmlFormat != null && dv.getFormatId() != null && bold == false
+ && styles != null) {
+ //cell.setCellStyle((HSSFCellStyle) styles.get(nvl(dv.getFormatId(),"default")));
+ } //else if (bold == false)
+ //cell.setCellStyle(styleDefault);
+ } // dv.isVisible
+ }
+ rowNum += 1;
+
+ }
+
+ int cw = 0;
+ for (int i = 0; i < cellWidth.size(); i++) {
+ cw = ((Integer) cellWidth.get(i)).intValue() + 12;
+ // if(i!=cellWidth.size()-1)
+ sheet.setColumnWidth((short) (i), (short) ((cw * 8) / ((double) 1 / 20)));
+ // else
+ // sheet.setColumnWidth((short) (i + 1), (short) ((cw * 10) /
+ // ((double) 1 / 20)));
+ }
+
+ // To Display Total Values for Linear report
+ if(rd.reportDataTotalRow!=null) {
+ row = sheet.createRow(rowNum);
+ cellNum = -1;
+ rd.reportTotalRowHeaderCols.resetNext();
+ //for (rd.reportTotalRowHeaderCols.resetNext(); rd.reportTotalRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportTotalRowHeaderCols.getNext();
+ RowHeader rh = rhc.getRowHeader(0);
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(rh.getRowTitle()));
+ row.getCell((short) cellNum).setCellStyle(styleDefaultTotal);
+ //}
+
+ rd.reportDataTotalRow.resetNext();
+ DataRow drTotal = rd.reportDataTotalRow.getNext();
+ //cellNum = -1;
+
+ drTotal.resetNext();
+ drTotal.getNext();
+ for (; drTotal.hasNext();) {
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ DataValue dv = drTotal.getNext();
+ String value = dv.getDisplayValue();
+ cell.setCellValue(value);
+ boolean bold = false;
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ cell.setCellStyle(styleCurrencyTotal);
+ } else {
+ cell.setCellStyle(styleTotal);
+ }
+ } else {
+ cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ }
+ }
+
+ } catch (SQLException ex) {
+ ex.printStackTrace();
+ throw new RaptorException(ex);
+ } catch (ReportSQLException ex) {
+ throw new RaptorException(ex);
+ } catch (Exception ex) {
+ if(!(ex.getCause() instanceof java.net.SocketException) )
+ throw new RaptorException (ex);
+ } finally {
+ try {
+ if(conn!=null)
+ conn.close();
+ if(st!=null)
+ st.close();
+ if(rs!=null)
+ rs.close();
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ /*if(Globals.getShowDisclaimer() && !Globals.disclaimerPositionedTopInCSVExcel()) {
+ rowNum += 1;
+ row = sheet.createRow(rowNum);
+ cellNum = 0;
+ String disclaimer = Globals.getFooterFirstLine() + " " + Globals.getFooterSecondLine();
+ row.createCell((short) cellNum).setCellValue(disclaimer);
+ sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (columnRows)));
+ rowNum += 1;
+ }*/
+ } else {
+ if(rr.getReportType().equals(AppConstants.RT_LINEAR)) {
+ int rowCount = 0;
+ for (rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext();) {
+ DataRow dr = rd.reportDataRows.getNext();
+ //List l = rd.getReportDataList();
+ //for (int dataRow = 0; dataRow < l.size(); dataRow++) {
+ rowCount++;
+
+
+ //DataRow dr = (DataRow) l.get(dataRow);
+ row = sheet.createRow(rowNum);
+
+ cellNum = -1;
+
+ if (rr.getReportType().equals(AppConstants.RT_LINEAR) && rd.reportTotalRowHeaderCols!=null) {
+ rd.reportRowHeaderCols.resetNext(0);
+ if(rd.reportTotalRowHeaderCols!=null) {
+ //cellNum = -1;
+ //for (rd.reportRowHeaderCols.resetNext(); rd.reportRowHeaderCols.hasNext();) {
+ //cellNum += 1;
+ //RowHeaderCol rhc = rd.reportRowHeaderCols.getRowHeaderCol(0);
+ //if (firstPass)
+ // rhc.resetNext();
+ //RowHeader rh = rhc.getRowHeader(rowCount-1);
+ //row.createCell((short) cellNum).setCellValue(rowCount);
+ //row.getCell((short) cellNum).setCellStyle(styleDefault);
+ //if (firstPass)
+ //cellWidth.add(cellNum, new Integer((rowCount+"").length()));
+ //else
+ //cellWidth.set(cellNum, new Integer((rowCount+"").length()));
+
+ //} // for
+ }
+
+ } else {
+ rd.reportRowHeaderCols.resetNext(0);
+ }
+ for (; rd.reportRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ if (firstPass)
+ rhc.resetNext();
+ RowHeader rh = rhc.getNext();
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(rh.getRowTitle()));
+ row.getCell((short) cellNum).setCellStyle(styleDefault);
+ if (cellWidth.size() > 0) {
+ if (((Integer) cellWidth.get(cellNum)).intValue() < rh.getRowTitle()
+ .length())
+ cellWidth.set(cellNum, new Integer(rh.getRowTitle().length()));
+ } else
+ cellWidth.add(cellNum, new Integer(rh.getRowTitle().length()));
+
+ } // for
+ firstPass = false;
+ //cellNum = -1;
+ int j = 0;
+
+ for (dr.resetNext(); dr.hasNext();j++) {
+ DataValue dv = dr.getNext();
+ styleCell = null;
+ boolean bold = false;
+ String value = nvl(dv.getDisplayValue());
+ value = strip.stripHtml(value);
+ HtmlFormatter htmlFormat = dv.getCellFormatter();
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null)
+ styleCell = (HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default"));
+ if (htmlFormat != null && dv.getFormatId() != null && styles != null)
+ styleCell = (HSSFCellStyle) styles.get(nvl(dv.getFormatId(),"default"));
+
+ if(dv.isVisible()) {
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ //System.out.println("Stripping HTML 1");
+ //cell.setCellValue(strip.stripHtml(value));
+ String dataType = (String) (dataTypeMap.get(dv.getColId()));
+ //System.out.println(" The Display Value is ********"+value + " " + dv.getDisplayTotal() + " " + dv.getColName());
+
+ if (dataType!=null && dataType.equals("NUMBER")){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(value);
+ //cellCurrencyNumber = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ cell.setCellValue(zInt);
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 1 is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyDecimalNumber);
+ cell.setCellValue(tempDoubleDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDollar);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(value);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 0x28);//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDecimalNumber);
+ cell.setCellValue(tempDouble);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(value);
+ }
+
+ }
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT is "+tempInt);
+ Long tempIntDollar = 0L;
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short)6);//HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyNumber);
+ cell.setCellValue(tempIntDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempInt);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short)0x26);//HSSFDataFormat.getBuiltinFormat("(#,##0_);[Red](#,##0)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleNumber);
+ cell.setCellValue(temp);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempStr);
+ }
+
+
+ }
+ //int temp = Integer.parseInt(value.trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ }
+ }
+ }
+
+ }else if ( ( dataType !=null && dataType.equals("DATE")) || (dv.getDisplayName()!=null && dv.getDisplayName().toLowerCase().endsWith("date")) ||
+ (dv.getColId()!=null && dv.getColId().toLowerCase().endsWith("date")) ||
+ (dv.getColName()!=null && dv.getColName().toLowerCase().endsWith("date")) ) {
+ //cellDate = row.createCell((short) cellNum);
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("mm/dd/yy"));
+
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short)0xe); //HSSFDataFormat.getBuiltinFormat("m/d/yy"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDate);
+ //String MY_DATE_FORMAT = "yyyy-MM-dd";
+ Date date = null;
+ int flag = 0;
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy/m/d"));
+ flag = 1;
+ }
+ if(date==null)
+ date = timestampFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy-m-d h:mm:ss")); //yyyy-MM-dd HH:mm:ss
+ flag = 1;
+ }
+ if(date==null)
+ date = MONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("mmm yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("mmm/d/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MONTHYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("mmm/yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy/m/d h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDDASHFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy-m-d"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("yyyy/m/d h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yyyy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yyyy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("d-mmm-yyyy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yy h:mm:ss"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMZFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYHHMMSS.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cell.getCellStyle().setDataFormat(
+ createHelper.createDataFormat().getFormat("m/d/yyyy h:mm"));
+ flag = 1;
+ }
+
+ if(date!=null) {
+ //System.out.println("ExcelDate " + HSSFDateUtil.getExcelDate(date));
+ cell.setCellValue(HSSFDateUtil.getExcelDate(date));
+ try {
+ String str = cell.getStringCellValue();
+ } catch (IllegalStateException ex) { /*cell.getCellStyle().setDataFormat((short)0);*/cell.setCellValue(value);}
+ } else {
+ /*cell.getCellStyle().setDataFormat((short)0);*/
+ cell.setCellValue(value);
+ }
+ //cellDate.setCellValue(date);
+ //cellDate.setCellValue(value);
+
+ }else if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(value);
+ cell = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ cell.setCellValue(zInt);
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 2IF is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short)8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyDecimalNumber);
+ cell.setCellValue(tempDoubleDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDollar);
+ }
+
+
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempDoubleStr = value.trim();
+ tempDoubleStr = tempDoubleStr.replaceAll(" ", "").substring(0);
+ if ((tempDoubleStr.indexOf(","))!= -1){
+ tempDoubleStr = tempDoubleStr.replaceAll(",", "");
+ }
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(tempDoubleStr);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 0x28); // for decimal
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDecimalNumber);
+ cell.setCellValue(tempDouble);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDoubleStr);
+ }
+ }
+
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT 2 is "+tempInt);
+
+ Long tempIntDollar = 0L;
+
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 6);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleCurrencyNumber);
+ cell.setCellValue(tempIntDollar);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempInt);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleCell!=null) {
+ styleCell.setDataFormat((short) 0x26);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleNumber);
+ cell.setCellValue(temp);
+ } catch (NumberFormatException ne) {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempStr);
+ }
+ }
+ //int temp = Integer.parseInt(value.trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ } else {
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ }
+ }
+ }
+
+
+ }
+ else {
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("General"));
+ if(styleCell!=null) {
+ styleCell.setWrapText(true);
+ cell.setCellStyle(styleCell);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(strip.stripHtml(value));
+ }
+
+ //if (!(value.equals(""))){
+ //int temp = Integer.parseInt(value.trim());
+ //cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ //HSSFCellStyle styleFormat = null;
+ //HSSFCellStyle numberStyle = null;
+ //HSSFFont formatFont = null;
+ //short fgcolor = 0;
+ //short fillpattern = 0;
+ if (cellWidth.size() > cellNum) {
+ if (((Integer) cellWidth.get(cellNum)).intValue() < dv
+ .getDisplayValue().length())
+ cellWidth.set((cellNum),
+ (value.length()<=Globals.getMaxCellWidthInExcel())?new Integer(value.length()):new Integer(Globals.getMaxCellWidthInExcel()));
+ } else
+ cellWidth.add((cellNum), (value.length()<=Globals.getMaxCellWidthInExcel())?new Integer(value.length()):new Integer(Globals.getMaxCellWidthInExcel()));
+ //System.out.println("1IF "+ (dv.isBold()) + " "+ value + " " + dv.getDisplayTotal() + " " + dv.getColName() );
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ cell.setCellStyle(styleCurrencyTotal);
+ }
+ else {
+ cell.setCellStyle(styleTotal);
+ }
+ } else {
+ cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ //System.out.println("2IF "+ (dr.isRowFormat()) + " " + (dv.isCellFormat()) + " " + (styles!=null));
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null) {
+ //cell.setCellStyle((HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default")));
+ continue;
+ }
+ //System.out.println("3IF "+ (htmlFormat != null) + " " + (dv.getFormatId() != null) + " " + (bold == false) + " "+ (styles != null));
+ if (htmlFormat != null && dv.getFormatId() != null && bold == false
+ && styles != null) {
+ // cell.setCellStyle((HSSFCellStyle) styles.get(nvl(dv.getFormatId(),"default")));
+ } //else if (bold == false)
+ //cell.setCellStyle(styleDefault);
+ } // if (dv.isVisible)
+ } // for
+
+ /*for (int tmp=0; tmp<dataTypeMap.size(); tmp++){
+ String dataTypeStr = (String)(dataTypeMap.get(tmp));
+ if(dataTypeStr.equals("NUMBER")){
+ cell.setCellStyle(styleNumber);
+ }else if (dataTypeStr.equals("VARCHAR2")){
+ cell.setCellStyle(styleDefault);
+
+ }else if (dataTypeStr.equals("DATE")){
+ cell.setCellStyle(styleDate);
+ }else{
+
+ }
+
+ }*/
+ rowNum += 1;
+ int cw = 0;
+ for (int i = 0; i < cellWidth.size(); i++) {
+ cw = ((Integer) cellWidth.get(i)).intValue() + 12;
+ // if(i!=cellWidth.size()-1)
+ sheet.setColumnWidth((short) (i), (short) ((cw * 8) / ((double) 1 / 20)));
+ // else
+ // sheet.setColumnWidth((short) (i + 1), (short) ((cw * 10) /
+ // ((double) 1 / 20)));
+ }
+
+ } // for
+
+ // To Display Total Values for Linear report
+ if(rd.reportDataTotalRow!=null) {
+ row = sheet.createRow(rowNum);
+ cellNum = -1;
+ rd.reportTotalRowHeaderCols.resetNext();
+ //for (rd.reportTotalRowHeaderCols.resetNext(); rd.reportTotalRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportTotalRowHeaderCols.getNext();
+ RowHeader rh = rhc.getRowHeader(0);
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(rh.getRowTitle()));
+ row.getCell((short) cellNum).setCellStyle(styleDefaultTotal);
+ //}
+
+ rd.reportDataTotalRow.resetNext();
+ DataRow drTotal = rd.reportDataTotalRow.getNext();
+ //cellNum = -1;
+
+ drTotal.resetNext();
+ drTotal.getNext();
+ for (; drTotal.hasNext();) {
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ DataValue dv = drTotal.getNext();
+ String value = dv.getDisplayValue();
+ cell.setCellValue(value);
+ boolean bold = false;
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ cell.setCellStyle(styleCurrencyTotal);
+ } else {
+ cell.setCellStyle(styleTotal);
+ }
+ } else {
+ cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ }
+ }
+
+ /*
+ if (rr.getReportType().equals(AppConstants.RT_LINEAR) && rd.reportTotalRowHeaderCols!=null) {
+
+ for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();) {
+ rowCount++;
+
+
+ DataRow dr = rd.reportDataTotalRow.getNext();
+ row = sheet.createRow(rowNum);
+ cellNum = -1;
+ int j = 0;
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue("Total");
+ cell.setCellStyle(styleTotal);
+
+ for (dr.resetNext(); dr.hasNext();j++) {
+ DataValue dv = dr.getNext();
+ if(j==0 || !dv.isVisible()) continue;
+ cellNum += 1;
+ styleCell = null;
+ boolean bold = true;
+ String value = nvl(dv.getDisplayValue());
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(dv.getDisplayValue());
+ cell = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ cell.setCellValue(zInt);
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 2IF is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleTotal!=null) {
+ styleTotal.setDataFormat((short) 8);//HSSFDataFormat.getBuiltinFormat("($#,##0.00_);[Red]($#,##0.00)"));
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleCurrencyDecimalNumberTotal);
+ cell.setCellValue(tempDoubleDollar);
+ } catch (NumberFormatException ne) {
+ if(styleTotal!=null) {
+ styleTotal.setWrapText(true);
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDollar);
+ }
+
+
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempDoubleStr = value.trim();
+ tempDoubleStr = tempDoubleStr.replaceAll(" ", "").substring(0);
+ if ((tempDoubleStr.indexOf(","))!= -1){
+ tempDoubleStr = tempDoubleStr.replaceAll(",", "");
+ }
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(tempDoubleStr);
+ if(styleTotal!=null) {
+ styleTotal.setDataFormat((short)0x28 );//HSSFDataFormat.getBuiltinFormat("(#,##0.00_);[Red](#,##0.00)"));
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleDecimalNumberTotal);
+ cell.setCellValue(tempDouble);
+ } catch (NumberFormatException ne) {
+ if(styleTotal!=null) {
+ styleTotal.setWrapText(true);
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempDoubleStr);
+ }
+ }
+
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT 2 is "+tempInt);
+
+ Long tempIntDollar = 0L;
+
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleTotal!=null) {
+ styleTotal.setDataFormat((short) 6);//HSSFDataFormat.getBuiltinFormat("($#,##0_);[Red]($#,##0)"));
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleCurrencyNumberTotal);
+ cell.setCellValue(tempIntDollar);
+ } catch (NumberFormatException ne) {
+ if(styleTotal!=null) {
+ styleTotal.setWrapText(true);
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempInt);
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleTotal!=null) {
+ styleTotal.setDataFormat((short) 0x26);//HSSFDataFormat.getBuiltinFormat("(#,##0_);[Red](#,##0)"));
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleNumber);
+ cell.setCellValue(temp);
+ } catch (NumberFormatException ne) {
+ if(styleTotal!=null) {
+ styleTotal.setWrapText(true);
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleDefault);
+ cell.setCellValue(tempStr);
+ }
+ }
+ //int temp = Integer.parseInt(dv.getDisplayValue().trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(dv.getDisplayValue()));
+ //}
+ } else {
+ if(styleTotal!=null) {
+ styleTotal.setWrapText(true);
+ cell.setCellStyle(styleTotal);
+ } else
+ cell.setCellStyle(styleDefault);
+ }
+ }
+ }
+
+
+
+
+ }
+ }
+ }
+ */
+
+
+
+ } else if (rr.getReportType().equals(AppConstants.RT_CROSSTAB)) { // Linear
+ int rowCount = 0;
+ List l = rd.getReportDataList();
+ boolean first = true;
+ for (int dataRow = 0; dataRow < l.size(); dataRow++) {
+
+
+ DataRow dr = (DataRow) l.get(dataRow);
+ row = sheet.createRow(rowNum);
+
+ cellNum = -1;
+ first = true;
+ Vector<DataValue> rowNames = dr.getRowValues();
+ for(dr.resetNext(); dr.hasNext(); rowCount++ ) {
+ if(first) {
+ if(rowNames!=null) {
+ for(int i=0; i<rowNames.size(); i++) {
+ DataValue dv = rowNames.get(i);
+ cellNum += 1;
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(dv.getDisplayValue()));
+ row.getCell((short) cellNum).setCellStyle(styleDefault);
+ }
+ }
+ }
+ first = false;
+
+ DataValue dv = dr.getNext();
+ if(dv.isVisible()) {
+ String value = dv.getDisplayValue();
+ if(value.indexOf("|#")!=-1)
+ value = value.substring(0,value.indexOf("|"));
+
+ if(dr.isRowFormat() || nvl(dv.getFormatId()).length()>0) {
+ cellNum += 1;
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(dv.getDisplayValue()));
+ //row.getCell((short) cellNum).setCellStyle(styleDefault);
+ if(nvl(dv.getFormatId()).length()>0)
+ row.getCell((short) cellNum).setCellStyle((HSSFCellStyle) styles.get(nvl(dv.getFormatId(),"default")));
+ else
+ row.setRowStyle((HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default")));
+ } else {
+ cellNum += 1;
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(value));
+ row.getCell((short) cellNum).setCellStyle(styleDefault);
+ } // end
+ value = dv.getDisplayValue();
+ if(value.indexOf("|#")!=-1) {
+ String color = value.substring(value.indexOf("|")+1);
+ if(color.equals("#FF0000"))
+ row.getCell((short) cellNum).setCellStyle((HSSFCellStyle) styles.get("red"));
+ else if (color.equals("#008000"))
+ row.getCell((short) cellNum).setCellStyle((HSSFCellStyle) styles.get("green"));
+ else if (color.equals("#FFFF00"))
+ row.getCell((short) cellNum).setCellStyle((HSSFCellStyle) styles.get("yellow"));
+ else {
+ row.getCell((short) cellNum).setCellStyle((HSSFCellStyle) styles.get("default"));
+ }
+
+ }
+ }
+ }
+ rowNum += 1;
+ int cw = 0;
+ for (int i = 0; i < cellWidth.size(); i++) {
+ cw = ((Integer) cellWidth.get(i)).intValue() + 12;
+ // if(i!=cellWidth.size()-1)
+ sheet.setColumnWidth((short) (i), (short) ((cw * 8) / ((double) 1 / 20)));
+ // else
+ // sheet.setColumnWidth((short) (i + 1), (short) ((cw * 10) /
+ // ((double) 1 / 20)));
+ }
+
+
+ } // for
+
+ }
+
+
+ }
+
+ String footer = (String) session.getAttribute("FOOTER_"+index);
+ if(nvl(footer).length()>0) {
+ footer = Utils.replaceInString(footer, "<BR/>", " ");
+ footer = Utils.replaceInString(footer, "<br/>", " ");
+ footer = Utils.replaceInString(footer, "<br>", " ");
+ footer = strip.stripHtml(nvl(footer).trim());
+ row = sheet.createRow(rowNum);
+ cellNum = 0;
+ row.createCell((short) cellNum).setCellValue(footer);
+ sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (columnRows)));
+ //sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum+columnRows, (short) (cellNum)));
+ rowNum += 1;
+ }
+
+ if(Globals.getShowDisclaimer() && !Globals.disclaimerPositionedTopInCSVExcel()) {
+
+ rowNum += 1;
+ row = sheet.createRow(rowNum);
+ cellNum = 0;
+ String disclaimer = Globals.getFooterFirstLine() + " " + Globals.getFooterSecondLine();
+ row.createCell((short) cellNum).setCellValue(disclaimer);
+ sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (columnRows)));
+ rowNum += 1;
+ }
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:"
+ + (runtime.maxMemory() - runtime.freeMemory()) / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
+ + runtime.freeMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
+ return returnValue;
+
+ }
+
+ private void paintExcelHeader(HSSFWorkbook wb, int rowNum, int col, String reportTitle,
+ String reportDescr, HSSFSheet sheet) {
+ short s1 = 0, s2 = (short) (col-1);
+ rowNum += 1;
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ HSSFRow row = null, row1 = null;
+
+ row = sheet.createRow(rowNum);
+ // Header Style
+ HSSFCellStyle styleHeader = wb.createCellStyle();
+ styleHeader.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ HSSFFont font = wb.createFont();
+ font.setFontHeight((short) (font_header_title_size / 0.05)); //14
+ font.setFontName("Tahoma");
+ font.setColor(HSSFColor.BLACK.index);
+ styleHeader.setFont(font);
+
+ HSSFCell cell = row.createCell((short) 0);
+ cell.setCellValue(reportTitle);
+ cell.setCellStyle(styleHeader);
+ HSSFHeader header = sheet.getHeader();
+ header.setCenter(HSSFHeader.font("Tahoma", "")+ HSSFHeader.fontSize((short) 9)+" " + reportTitle);
+
+ //header.setCenter(HSSFHeader.font("Tahoma", "")+ HSSFHeader.fontSize((short) 9)+reportTitle+"\n"+((Globals.getShowDescrAtRuntime() && nvl(reportDescr).length() > 0)?reportDescr:""));
+
+ // Report Description
+ if (Globals.getShowDescrAtRuntime() && nvl(reportDescr).length() > 0) {
+ rowNum += 1;
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ HSSFCellStyle styleDescription = wb.createCellStyle();
+ styleDescription.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ HSSFFont fontDescr = wb.createFont();
+ fontDescr.setFontHeight((short) font_header_descr_size);
+ fontDescr.setFontName("Tahoma");
+ fontDescr.setColor(HSSFColor.BLACK.index);
+ styleDescription.setFont(fontDescr);
+ HSSFCell cellDescr = row.createCell((short) 0);
+ cellDescr.setCellValue(reportDescr);
+ cellDescr.setCellStyle(styleHeader);
+ }
+
+ if(Globals.disclaimerPositionedTopInCSVExcel()) {
+ rowNum += 1;
+ row = sheet.createRow(rowNum);
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ HSSFCellStyle styleDescription = wb.createCellStyle();
+ styleDescription.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ HSSFFont fontDescr = wb.createFont();
+ fontDescr.setFontHeight((short) (font_size / 0.05)); //14
+ fontDescr.setFontName("Tahoma");
+ fontDescr.setColor(HSSFColor.BLACK.index);
+ fontDescr.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ styleDescription.setFont(fontDescr);
+ HSSFCell cellDescr = row.createCell((short) 0);
+ String disclaimer = Globals.getFooterFirstLine() + " " + Globals.getFooterSecondLine();
+ cellDescr.setCellValue(disclaimer);
+ cellDescr.setCellStyle(styleDescription);
+ }
+
+ rowNum += 1;
+ row = sheet.createRow(rowNum);
+ // System.out.println(" Last Row " + wb.getSheetAt(0).getLastRowNum());
+ }
+
+ private void paintExcelFooter(HSSFWorkbook wb, int rowNum, int col, HSSFSheet sheet) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("excel footer"));
+ //HSSFSheet sheet = wb.getSheet(getSheetName());
+ HSSFFooter footer = sheet.getFooter();
+ footer.setLeft(HSSFFooter.font("Tahoma", "")+ HSSFFooter.fontSize((short) font_footer_size)+ "Page " + HSSFFooter.page()
+ + " of " + HSSFFooter.numPages() );
+ footer.setCenter(HSSFFooter.font("Tahoma", "")+ HSSFFooter.fontSize((short) font_footer_size)+Globals.getFooterFirstLine()+"\n"+Globals.getFooterSecondLine());
+ //footer.setCenter(HSSFFooter.font("Tahoma", "Italic")+ HSSFFooter.fontSize((short) 16))+Globals.getFooterSecondLine());
+/* footer.font("Tahoma");
+ short s1 = 0, s2 = (short) (col-1);
+ rowNum += 1;
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ HSSFRow row = null, row1 = null;
+
+ row = sheet.createRow(rowNum);
+ // Header Style
+ HSSFCellStyle styleFooter = wb.createCellStyle();
+ styleFooter.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ HSSFFont font = wb.createFont();
+ font.setFontHeight((short) (10 / 0.05));
+ font.setFontName("Tahoma");
+ font.setColor(HSSFColor.BLACK.index);
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ styleFooter.setFont(font);
+
+ HSSFCell cell = row.createCell((short) 0);
+ debugLogger.debug(Globals.getFooterFirstLine());
+ cell.setCellValue(Globals.getFooterFirstLine());
+ cell.setCellStyle(styleFooter);
+
+ rowNum += 1;
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ row = sheet.createRow(rowNum);
+ cell = row.createCell((short) 0);
+ debugLogger.debug(Globals.getFooterSecondLine());
+ cell.setCellValue(Globals.getFooterSecondLine());
+ cell.setCellStyle(styleFooter);
+*/
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Done"));
+ }
+
+ public String saveAsExcelFile(HttpServletRequest request, ReportData rd,
+ ArrayList reportParamNameValues, String reportTitle, String reportDescr) {
+ return saveAsExcelFile(request, rd, reportParamNameValues, reportTitle, reportDescr, 2); //2 denotes ReportRuntime object should be taken from session.
+ }
+ public String saveAsExcelFile(HttpServletRequest request, ReportData rd,
+ ArrayList reportParamNameValues, String reportTitle, String reportDescr, int requestFlag) {
+ setSheetName(Globals.getSheetName());
+ try {
+ ReportRuntime rr;
+ if(requestFlag == 2)
+ rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ else
+ rr = (ReportRuntime) request.getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ HSSFWorkbook wb = new HSSFWorkbook();
+ HashMap styles = new HashMap();
+ if (rr != null)
+ styles = loadStyles(rr, wb);
+ String xlsFName = AppUtils.generateUniqueFileName(request, rr.getReportName(), AppConstants.FT_XLS);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Xls File name " +
+ AppUtils.getTempFolderPath()
+ + xlsFName));
+ FileOutputStream xlsOut = new FileOutputStream(AppUtils.getTempFolderPath()
+ + xlsFName);
+ // BufferedWriter xlsOut = new BufferedWriter(new
+ // FileWriter(AppUtils
+ // .getTempFolderPath()
+ // + xlsFName));
+
+ int col = 0;
+ //System.out.println("Row Header Count " + rd.reportRowHeaderCols.getRowCount());
+ //System.out.println("Total Count " + rd.getTotalColumnCount());
+
+ if (!rd.reportRowHeaderCols.hasNext())
+ col = rd.getTotalColumnCount();
+ else
+ col = rd.getTotalColumnCount();
+ int rowNum = 0;
+ HSSFSheet sheet = wb.createSheet(getSheetName());
+
+ if (Globals.getPrintTitleInDownload()&& reportTitle != null ) {
+ paintExcelHeader(wb, rowNum, col, reportTitle, reportDescr, sheet);
+ rowNum = sheet.getLastRowNum();
+ } else
+ rowNum = 0;
+ if (Globals.getPrintParamsInDownload() && rr.getParamNameValuePairsforPDFExcel(request, 1) != null) {
+ paintExcelParams(wb,rowNum,col,rr.getParamNameValuePairsforPDFExcel(request, 1), rr.getFormFieldComments(request), sheet, reportTitle, reportDescr);
+ } // if
+ rowNum = sheet.getLastRowNum();
+ //System.out.println(" rowNum after Params " + rowNum);
+ paintExcelData(wb, rowNum, col, rd, styles,rr, sheet, "", xlsOut, request);
+ if (Globals.getPrintFooterInDownload() ) {
+ rowNum = sheet.getLastRowNum();
+ rowNum += 2;
+ paintExcelFooter(wb, rowNum, col, sheet);
+ }
+ //response.setContentType("application/vnd.ms-excel");
+ //response.setHeader("Content-disposition", "attachment;filename=download_all_"
+ // + user_id + ".xls");
+ wb.write(xlsOut);
+ xlsOut.flush();
+ xlsOut.close();
+ return xlsFName;
+ } catch (Exception e) {
+ e.printStackTrace();
+ (new ErrorHandler()).processError(request, "Exception saving data to EXCEL file: "
+ + e.getMessage());
+ return null;
+ }
+ } // saveAsExcelFile
+
+ public void createExcelFileContent(Writer out, ReportData rd, ReportRuntime rr, HttpServletRequest request,
+ HttpServletResponse response, String user_id, int type) throws IOException, RaptorException {
+ // Adding utility for downloading Dashboard reports.
+
+ HashMap styles = new HashMap();
+ HttpSession session = request.getSession();
+ ServletOutputStream sos = null;
+ BufferedInputStream buf = null;
+ HSSFWorkbook wb = null;
+// if(session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null)
+// ReportRuntime rrDashboard = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ String formattedDate = "";
+ String xlsFName = "";
+ int returnValue = 0;
+ boolean isDashboard = false;
+ if ((session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null) && ( ((String) session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)).equals(rr.getReportID())) ) {
+ isDashboard = true;
+ }
+ if(isDashboard) {
+ try {
+ formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ xlsFName = "dashboard"+formattedDate+user_id+".xls";
+
+ FileInputStream xlsIn = null;
+ POIFSFileSystem fileSystem = null;
+ buf = null;
+ FileOutputStream xlsOut = null;
+
+
+/* try {
+ xlsIn = new FileInputStream (AppUtils.getTempFolderPath()
+ + xlsFName);
+ }
+ catch (FileNotFoundException e) {
+ System.out.println ("File not found in the specified path.");
+ e.printStackTrace ();
+ }
+ if(xlsIn != null) {
+ fileSystem = new POIFSFileSystem (xlsIn);
+ wb = new HSSFWorkbook(fileSystem);
+ } else {
+ xlsOut = new FileOutputStream(AppUtils.getTempFolderPath()
+ + xlsFName);
+ wb = new HSSFWorkbook();
+ }
+*/
+
+ Map reportRuntimeMap = null;
+ Map reportDataMap = null;
+ //Map reportDisplayTypeMap = null;
+ reportRuntimeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ reportDataMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+ //reportDisplayTypeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI);
+ HSSFSheet sheet = null;
+ if(reportRuntimeMap!=null) {
+ //ServletOutputStream sos = response.getOutputStream();
+ Set setReportRuntime = reportRuntimeMap.entrySet();
+ Set setReportDataMap = reportDataMap.entrySet();
+ Iterator iter2 = setReportDataMap.iterator();
+ int count = 0;
+
+ for(Iterator iter = setReportRuntime.iterator(); iter.hasNext(); ) {
+ count++;
+ try {
+ xlsIn = new FileInputStream (AppUtils.getTempFolderPath()
+ + xlsFName);
+ }
+ catch (FileNotFoundException e) {
+ System.out.println ("File not found in the specified path.");
+ //e.printStackTrace ();
+ }
+ if(xlsIn != null) {
+ fileSystem = new POIFSFileSystem (xlsIn);
+ wb = new HSSFWorkbook(fileSystem);
+ xlsOut = new FileOutputStream(AppUtils.getTempFolderPath()
+ + xlsFName);
+ } else {
+ xlsOut = new FileOutputStream(AppUtils.getTempFolderPath()
+ + xlsFName);
+ wb = new HSSFWorkbook();
+ }
+
+ Map.Entry entryData = (Entry) iter2.next();
+ Map.Entry entry = (Entry) iter.next();
+ //String rep_id = (String) entry.getKey();
+ ReportRuntime rrDashRep = (ReportRuntime) entry.getValue();
+ ReportData rdDashRep = (ReportData) entryData.getValue();
+ //styles = loadStyles(rrDashRep, wb);
+ int col = 0;
+ String reportTitle = (nvl(rrDashRep.getReportTitle()).length()>0?rrDashRep.getReportTitle():rrDashRep.getReportName());
+ String reportDescr = rrDashRep.getReportDescr();
+ if (!rdDashRep.reportRowHeaderCols.hasNext())
+ col = rdDashRep.getTotalColumnCount();
+ else
+ col = rdDashRep.getTotalColumnCount();
+ if(col==0) col=10;
+ int rowNum = 0;
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(rrDashRep.getReportName());
+
+ try {
+ sheet = wb.createSheet(formattedReportName);
+ sheet.getPrintSetup().setLandscape(true);
+ styles = loadStyles(rrDashRep, wb);
+ } catch (IllegalArgumentException ex) { wb.write(xlsOut);xlsOut.flush();xlsOut.close();continue;}
+
+ if (Globals.getPrintTitleInDownload()&& reportTitle != null ) {
+ paintExcelHeader(wb, rowNum, col, reportTitle, reportDescr, sheet);
+ rowNum = sheet.getLastRowNum();
+ } else
+ rowNum = 0;
+ //getting ReportRuntime object from session
+ if (Globals.getPrintParamsInDownload() && rrDashRep.getParamNameValuePairsforPDFExcel(request, 1) != null) {
+ if(count > 1 && Globals.showParamsInAllDashboardReports())
+ paintExcelParams(wb,rowNum,col,rrDashRep.getParamNameValuePairsforPDFExcel(request, 1), rrDashRep.getFormFieldComments(request), sheet, reportTitle, reportDescr);
+ else if (count == 1)
+ paintExcelParams(wb,rowNum,col,rrDashRep.getParamNameValuePairsforPDFExcel(request, 1), rrDashRep.getFormFieldComments(request), sheet, reportTitle, reportDescr);
+ } // if
+ rowNum = sheet.getLastRowNum();
+ String sql_whole = rrDashRep.getWholeSQL();
+ returnValue = paintExcelData(wb, rowNum, col, rdDashRep, styles,rrDashRep, sheet, sql_whole, xlsOut, request);
+ if( returnValue == 0 ) {
+ if (Globals.getPrintFooterInDownload()) {
+ rowNum = sheet.getLastRowNum();
+ rowNum += 2;
+ paintExcelFooter(wb, rowNum, col, sheet);
+ }
+ //wb.write(sos);
+ wb.write(xlsOut);
+ //TODO Remove comment
+ xlsOut.flush();
+ xlsOut.close();
+ wb = null;
+ } else {
+ //xlsOut.flush();
+ //xlsOut.close();
+ //response.reset();
+ //response.setContentType("application/vnd.ms-excel");
+// RequestDispatcher dispatcher = request.getRequestDispatcher("raptor.htm?r_action=report.message");
+// request.setAttribute("message", Globals.getUserDefinedMessageForMemoryLimitReached());
+// try {
+// dispatcher.forward(request, response);
+// } catch (ServletException ex) {}
+ }
+ }
+
+ response.reset();
+ response.setContentType("application/vnd.ms-excel");
+ response.setHeader("Content-disposition", "attachment;filename="+"dashboard"+formattedDate+user_id+".xls");
+ sos = response.getOutputStream();
+ xlsIn = new FileInputStream (AppUtils.getTempFolderPath()
+ + xlsFName);
+ buf = new BufferedInputStream(xlsIn);
+ int readBytes = 0;
+ byte [] bOut = new byte [4096];
+ //read from the file; write to the ServletOutputStream
+ //while ((readBytes = buf.read()) != -1)
+ while ((readBytes = buf.read (bOut, 0, 4096))> 0) {
+ buf.available();
+ sos.write (bOut, 0, readBytes);
+ }
+
+ //sos.write(readBytes);
+ }
+ } catch (IOException ex) { ex.printStackTrace(); throw ex;}
+
+ finally {
+ if (sos != null)
+ sos.close();
+ if (buf != null)
+ buf.close();
+ }
+
+ File f = new File (AppUtils.getTempFolderPath()
+ + xlsFName);
+ if(f.exists()) f.delete();
+
+ } else {
+ wb = new HSSFWorkbook();
+ // PrintWriter xlsOut = new PrintWriter(out).;
+ setSheetName(Globals.getSheetName());
+ //ServletOutputStream sos = response.getOutputStream();
+ //PrintWriter outWriter = response.getWriter();
+ if (rr != null)
+ styles = loadStyles(rr, wb);
+ /* int col = 0;
+ if (!rd.reportRowHeaderCols.hasNext())
+ col = rd.getTotalColumnCount();
+ else
+ col = rd.getTotalColumnCount() + 1;
+ int rowNum = 0;
+ String reportTitle = rr.getReportName();
+ String reportDescr = rr.getReportDescr();
+ // if (Globals.getPrintTitleInDownload() && reportTitle != null) {
+ HSSFSheet sheet = wb.createSheet(getSheetName());
+ System.out.println(" Title " + Globals.getPrintTitleInDownload());
+
+ if (Globals.getPrintTitleInDownload()&& reportTitle != null ) {
+ paintExcelHeader(wb, rowNum, col, reportTitle, reportDescr);
+ rowNum = wb.getSheetAt(0).getLastRowNum();
+ } else
+ rowNum = 0;
+ System.out.println(" Params " + Globals.getPrintParamsInDownload());
+ if (Globals.getPrintParamsInDownload() && rr.getParamNameValuePairs() != null) {
+ paintExcelParams(wb,rowNum,col,rr.getParamNameValuePairs());
+ } // if
+ paintExcelData(wb, rowNum, col, rd, styles);
+ rowNum = wb.getSheetAt(0).getLastRowNum();
+ */
+ int col = 0;
+ //System.out.println("Row Header Count " + rd.reportRowHeaderCols.getRowCount());
+ //System.out.println("Total Count " + rd.getTotalColumnCount());
+ String reportTitle = (nvl(rr.getReportTitle()).length()>0?rr.getReportTitle():rr.getReportName());
+ String reportDescr = rr.getReportDescr();
+
+ col = getColumnCountForDownloadFile(rr,rd);
+ /*if (!rd.reportRowHeaderCols.hasNext())
+ col = rd.getTotalColumnCount();
+ else
+ col = rd.getTotalColumnCount();
+ */
+ int rowNum = 0;
+ HSSFSheet sheet = wb.createSheet(getSheetName());
+ sheet.getPrintSetup().setLandscape(true);
+
+ if (Globals.getPrintTitleInDownload()&& reportTitle != null ) {
+ paintExcelHeader(wb, rowNum, col, reportTitle, reportDescr, sheet);
+ rowNum = sheet.getLastRowNum();
+ } else
+ rowNum = 0;
+ if (Globals.getPrintParamsInDownload() && rr.getParamNameValuePairsforPDFExcel(request, 1) != null) {
+ ArrayList paramsList = rr.getParamNameValuePairsforPDFExcel(request, 1);
+ if(paramsList.size()<=0) {
+ paramsList = (ArrayList) request.getSession().getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+ }
+
+ paintExcelParams(wb,rowNum,col,paramsList, rr.getFormFieldComments(request), sheet, reportTitle, reportDescr);
+ } // if
+ rowNum = sheet.getLastRowNum();
+
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName());
+ formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ response.reset();
+ response.setContentType("application/vnd.ms-excel");
+ response.setHeader("Content-disposition", "attachment;filename="+formattedReportName+formattedDate+user_id+".xls");
+ sos = response.getOutputStream();
+
+ if(type == 3 && rr.getSemaphoreList()==null && !(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) ) { //type = 3 is whole
+ //String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
+ String sql_whole = rr.getWholeSQL();
+ returnValue = paintExcelData(wb, rowNum, col, rd, styles,rr, sheet, sql_whole, sos, request);
+ } else if(type == 2) {
+ returnValue = paintExcelData(wb, rowNum, col, rd, styles,rr, sheet, "", sos, request);
+ } else {
+ //String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
+ int downloadLimit = (rr.getMaxRowsInExcelDownload()>0)?rr.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ String action = request.getParameter(AppConstants.RI_ACTION);
+ if(!(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) && !action.endsWith("session")) {
+ rd = rr.loadReportData(-1, AppUtils.getUserID(request), downloadLimit,request, false /*download*/);
+ }
+ if(rr.getSemaphoreList()!=null) {
+ if(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ returnValue = paintExcelData(wb, rowNum, col, rd, styles,rr, sheet, "", sos, request);
+ } else {
+ rd = rr.loadReportData(-1, AppUtils.getUserID(request), downloadLimit,request, true);
+ returnValue = paintExcelData(wb, rowNum, col, rd, styles,rr, sheet, "", sos, request);
+ }
+ } else {
+ returnValue = paintExcelData(wb, rowNum, col, rd, styles,rr, sheet, rr.getWholeSQL(), sos, request);
+ }
+ }
+ if( returnValue == 0 ) {
+ if (Globals.getPrintFooterInDownload()) {
+ rowNum = sheet.getLastRowNum();
+ rowNum += 2;
+ paintExcelFooter(wb, rowNum, col, sheet);
+ }
+ //Alternatively:
+ wb.setPrintArea(
+ 0, //sheet index
+ 0, //start column
+ col, //end column
+ 0, //start row
+ rowNum //end row
+ );
+ //TODO Remove comment
+ wb.write(sos);
+ sos.flush();
+ sos.close();
+ wb = null;
+ } else {
+ //sos.flush();
+ //sos.close();
+/* response.reset();
+
+ RequestDispatcher dispatcher = request.getRequestDispatcher("/raptor.htm?action=raptor&r_action=report.message");
+ request.setAttribute("message", Globals.getUserDefinedMessageForMemoryLimitReached());
+ try {
+ dispatcher.forward(request, response);
+ } catch (ServletException ex) {}
+*/
+ }
+ }
+ }
+
+
+ public void createFlatFileContent(Writer out, ReportData rd, ReportRuntime rr,
+ HttpServletRequest request, HttpServletResponse response, String user_id)
+ throws IOException, Exception {
+ ReportHandler rephandler = new ReportHandler();
+ String reportID = rr.getReportID();
+ rr = rephandler.loadReportRuntime(request, reportID);
+ String query = rr.getWholeSQL();
+ String dbInfo = rr.getDbInfo();
+ //File f = new File(request.(arg0)("/"));
+ DataSet ds = ConnectionUtils.getDataSet(query, dbInfo);
+
+ //Writing Column names to the file
+ List l = rr.getAllColumns();
+ StringBuffer allColumnsBuffer = new StringBuffer();
+ DataColumnType dct = null;
+
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ allColumnsBuffer.append(dct.getDisplayName());
+ if(iter.hasNext())
+ allColumnsBuffer.append("|");
+ }
+ rd = rr.loadReportData(-1, user_id, -1,request, true);
+ //PrintWriter txtOut = new PrintWriter(out);
+ //response.setContentType("application/notepad");
+ //response.setHeader("Content-disposition", "attachment;filename=download_all_"+AppUtils.getUserID(request)+".txt");
+ ServletOutputStream sos = response.getOutputStream();
+
+ //No Report Title for flat file.
+// if (Globals.getPrintTitleInDownload() && reportTitle != null) {
+// txtOut.println();
+// txtOut.println("\"" + reportTitle + "\"");
+// txtOut.println();
+// if (Globals.getShowDescrAtRuntime() && nvl(reportDescr).length() > 0) {
+// txtOut.println("\"" + reportDescr + "\"");
+// txtOut.println();
+// }
+// } // if
+ // No Params either
+// int count = 0;
+// if (Globals.getPrintParamsInDownload() && reportParamNameValues != null) {
+// for (Iterator iter = reportParamNameValues.iterator(); iter.hasNext();) {
+// count += 1;
+// if(count == 1) txtOut.println();
+// IdNameValue value = (IdNameValue) iter.next();
+// txtOut.println(value.getId() + " = " + value.getName());
+// if(!iter.hasNext()) txtOut.println();
+// } // for
+// } // if
+
+
+
+ boolean firstPass = true;
+ for (rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext();) {
+ DataRow dr = rd.reportDataRows.getNext();
+ for (rd.reportRowHeaderCols.resetNext(1); rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ if (firstPass)
+ rhc.resetNext();
+ RowHeader rh = rhc.getNext();
+
+ sos.print(rh.getRowTitle());
+ if(rhc.hasNext()) sos.print("|");
+ } // for
+ firstPass = false;
+
+ for (dr.resetNext(); dr.hasNext();) {
+ DataValue dv = dr.getNext();
+
+ sos.print( dv.getDisplayValue());
+ if(dr.hasNext()) sos.print("|");
+ } // for
+
+ sos.println();
+ } // for
+ //sos.flush();
+ sos.close();
+ } // createFlatFileContent
+
+
+ public void createExcel2007FileContent(Writer out, ReportData rd, ReportRuntime rr, HttpServletRequest request,
+ HttpServletResponse response, String user_id, int type)
+ throws Exception {
+
+ // to check performance
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("STARTING.EXCELX DOWNLOAD...."));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:"
+ + (runtime.totalMemory() - runtime.freeMemory()) / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
+ + runtime.freeMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### END #####"));
+
+ // Adding utility for downloading Dashboard reports.
+
+ Map<String, XSSFCellStyle> styles = new HashMap<String, XSSFCellStyle>();
+ HttpSession session = request.getSession();
+ ServletOutputStream sos = null;
+ BufferedInputStream buf = null;
+ XSSFWorkbook wb = null;
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName());
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ //Sheet name to be filled is taken from property. How would this be called if it is Dashboard?
+ //commented out since application will create and leave it blank.
+ //setSheetName(Globals.getSheetName());
+ boolean isDashboard = false;
+ if ((session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null) && ( ((String) session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)).equals(rr.getReportID())) ) {
+ isDashboard = true;
+ }
+ //boolean isDashboard = (session.getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null);
+ ArrayList sheetArrayList = new ArrayList();
+
+ Map reportRuntimeMap = null;
+ Map reportDataMap = null;
+
+ ArrayList reportIDList = new ArrayList();
+
+ //Map reportDisplayTypeMap = null;
+ if(isDashboard) {
+ reportRuntimeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ reportDataMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+
+ if(reportRuntimeMap!=null) {
+ Set setReportRuntime = reportRuntimeMap.entrySet();
+ for(Iterator iter = setReportRuntime.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ ReportRuntime rrDashRep = (ReportRuntime) entry.getValue();
+ reportIDList.add(rrDashRep.getReportID());
+ }
+ }
+ }
+
+
+
+
+ int col = 0;
+ String reportTitle = (nvl(rr.getReportTitle()).length()>0?rr.getReportTitle():rr.getReportName());
+ String reportDescr = rr.getReportDescr();
+
+ // Total Columns visible in excel
+ //col = getColumnCountForDownloadFile(rr, rd);
+
+ int rowNum = 0;
+
+
+ XSSFSheet sheet = null;
+ //save the template
+ String filename = "";
+ String extension = "";
+
+ String sheetRef = null;
+
+ FileOutputStream os = null; //template file
+ File templateFile = null;
+
+ if(isDashboard) {
+ if(reportRuntimeMap!=null) {
+
+ FileInputStream readTemplate = null;
+ //Load customized styles
+ int count = 0;
+
+ //If template supplied by Application
+ String templateFilename = rr.getTemplateFile();
+ extension = templateFilename.substring(templateFilename.lastIndexOf(".")+1);
+ filename = formattedReportName+formattedDate+user_id;
+
+ Set setReportRuntimeWB = reportRuntimeMap.entrySet();
+ for(Iterator iter = setReportRuntimeWB.iterator(); iter.hasNext(); ) {
+ count++;
+ Map.Entry entry = (Entry) iter.next();
+ ReportRuntime rrDashRep = (ReportRuntime) entry.getValue();
+ os = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"));
+
+ if(count==1) {
+ if(nvl(rr.getTemplateFile()).length()>0) {
+ readTemplate = new FileInputStream(org.openecomp.portalsdk.analytics.system.AppUtils.getExcelTemplatePath()+rr.getTemplateFile());
+ wb=new XSSFWorkbook(readTemplate);
+ } else {
+ //copy the os file to new file and open new file in below line
+ wb=new XSSFWorkbook();
+ }
+ } else {
+ readTemplate = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"));
+ wb=new XSSFWorkbook(readTemplate);
+ }
+ if(rrDashRep!=null)
+ styles = loadXSSFStyles(rrDashRep, wb, styles);
+ String reportSheetName = new HtmlStripper().stripSpecialCharacters(rrDashRep.getReportName());
+ if(nvl(reportSheetName).length()>28)
+ reportSheetName = reportSheetName.substring(0, 28);
+ sheet = wb.createSheet(count+"-"+reportSheetName);
+ if(!Globals.printExcelInLandscapeMode())
+ sheet.getPrintSetup().setLandscape(false);
+ else
+ sheet.getPrintSetup().setLandscape(true);
+ wb.write(os);
+ os.flush();
+ if(nvl(rr.getTemplateFile()).length()>0) {
+ readTemplate.close();
+ }
+ os.close();
+
+ FileInputStream inF = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"));
+ FileOutputStream outStream = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"));
+ copyStream(inF, outStream);
+ outStream.flush();
+ outStream.close();
+ inF.close();
+
+ }
+
+ FileInputStream xlsIn = null;
+ POIFSFileSystem fileSystem = null;
+ buf = null;
+ FileOutputStream xlsOut = null;
+ formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ String xlsFName = "dashboard"+formattedDate+user_id+".xls";
+
+ Set setReportRuntime = reportRuntimeMap.entrySet();
+ Set setReportDataMap = reportDataMap.entrySet();
+ Iterator iter2 = setReportDataMap.iterator();
+
+
+ //filename = templateFilename.substring(0, templateFilename.lastIndexOf("."))+"_"+formattedDate+user_id;
+
+ count = 0;
+ for(Iterator iter = setReportRuntime.iterator(); iter.hasNext(); ) {
+ count++;
+
+ Map.Entry entry = (Entry) iter.next();
+ Map.Entry entryData = (Entry) iter2.next();
+ ReportRuntime rrDashRep = (ReportRuntime) entry.getValue();
+ ReportData rdDashRep = (ReportData) entryData.getValue();
+
+ String reportSheetName = new HtmlStripper().stripSpecialCharacters(rrDashRep.getReportName());
+ if(nvl(reportSheetName).length()>28)
+ reportSheetName = reportSheetName.substring(0, 28);
+ sheet = wb.getSheet(count+"-"+reportSheetName);
+ sheetRef = sheet.getPackagePart().getPartName().getName();
+
+ //Step 2. Generate XML file.
+ File tmp = File.createTempFile("sheet", ".xml");
+ FileOutputStream fileOutTemp = new FileOutputStream(tmp);
+ Writer fw = new OutputStreamWriter(fileOutTemp, XML_ENCODING);
+ String sql_whole = rrDashRep.getWholeSQL();
+ SpreadsheetWriter sw = new SpreadsheetWriter(fw);
+ sw.beginSheet();
+
+
+ generate(wb, sw, styles, rdDashRep, sql_whole, rrDashRep, request, sheet);
+
+
+ sw.endSheet();
+
+ fw.flush();
+ fw.close();
+ fileOutTemp.flush();
+ fileOutTemp.close();
+
+
+ //Step 3. Substitute the template entry with the generated data
+
+ FileOutputStream outF = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"));
+ templateFile = new File(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"));
+ substitute(templateFile, tmp, sheetRef.substring(1), outF);
+ outF.flush();
+ outF.close();
+
+ FileInputStream inF = new FileInputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"));
+ FileOutputStream outStream = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"));
+ copyStream(inF, outStream);
+ outStream.flush();
+ outStream.close();
+ inF.close();
+ }
+ }
+ } else {
+ //If template supplied by Application
+ if(nvl(rr.getTemplateFile()).length()>0) {
+ String templateFilename = rr.getTemplateFile();
+ extension = templateFilename.substring(templateFilename.lastIndexOf(".")+1);
+ filename = formattedReportName+formattedDate+user_id;
+ //filename = templateFilename.substring(0, templateFilename.lastIndexOf("."))+"_"+formattedDate+user_id;
+ } else
+ filename = formattedReportName+formattedDate+user_id;
+
+
+ if(nvl(rr.getTemplateFile()).length()<=0) {
+ os = new FileOutputStream(AppUtils.getTempFolderPath()+"template"+formattedDate+user_id+".xlsx");
+ wb=new XSSFWorkbook();
+ //Load customized styles
+ if (rr != null)
+ styles = loadXSSFStyles(rr, wb, styles);
+ //create data sheet
+ if(isDashboard) {
+
+ } else {
+
+ }
+ String reportSheetName = new HtmlStripper().stripSpecialCharacters(rr.getReportName());
+ if(nvl(reportSheetName).length()>28)
+ reportSheetName = reportSheetName.substring(0, 28);
+ sheet = wb.createSheet(reportSheetName);
+
+ //customized mode
+ if(!Globals.printExcelInLandscapeMode())
+ sheet.getPrintSetup().setLandscape(false);
+ else
+ sheet.getPrintSetup().setLandscape(true);
+ //get data sheet name
+ sheetRef = sheet.getPackagePart().getPartName().getName();
+ wb.write(os);
+ os.flush();
+ //wb = null;
+ os.close();
+
+ } else {
+ os = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"));
+ FileInputStream readTemplate = new FileInputStream(org.openecomp.portalsdk.analytics.system.AppUtils.getExcelTemplatePath()+rr.getTemplateFile());
+ wb=new XSSFWorkbook(readTemplate);
+ if (rr != null)
+ styles = loadXSSFStyles(rr, wb, styles);
+ sheet = wb.getSheetAt(0);
+ if(!Globals.printExcelInLandscapeMode())
+ sheet.getPrintSetup().setLandscape(false);
+ else
+ sheet.getPrintSetup().setLandscape(true);
+ //sheet = wb.getSheet(getSheetName());
+ sheetRef = sheet.getPackagePart().getPartName().getName();
+ wb.write(os);
+ os.flush();
+ readTemplate.close();
+ //wb = null;
+ os.close();
+ }
+
+ //Step 2. Generate XML file.
+ File tmp = File.createTempFile("sheet", ".xml");
+ FileOutputStream fileOutTemp = new FileOutputStream(tmp);
+ Writer fw = new OutputStreamWriter(fileOutTemp, XML_ENCODING);
+
+ //String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
+ String sql_whole = "";
+ if (!rr.getReportType().equals(AppConstants.RT_HIVE))
+ sql_whole = rr.getWholeSQL();
+ else
+ sql_whole = rr.getReportSQL();
+
+ SpreadsheetWriter sw = new SpreadsheetWriter(fw);
+
+ sw.beginSheet();
+
+ if((rd.getDataRowCount() >= rr.getReportDataSize()) && !rr.getReportType().equals(AppConstants.RT_HIVE)) {
+ sql_whole="";
+ }
+
+ generate(wb, sw, styles, rd, sql_whole, rr, request, sheet);
+
+ sw.endSheet();
+
+ fw.flush();
+ fw.close();
+ fileOutTemp.flush();
+ fileOutTemp.close();
+
+
+ //Step 3. Substitute the template entry with the generated data
+
+ FileOutputStream outF = new FileOutputStream(AppUtils.getTempFolderPath()+ filename+"."+ nvls(extension, "xlsx"));
+
+ if(nvl(rr.getTemplateFile()).length()>0) {
+ templateFile = new File(AppUtils.getTempFolderPath()+ filename+"T."+ nvls(extension, "xlsx"));
+ } else
+ templateFile = new File(AppUtils.getTempFolderPath()+"template"+formattedDate+user_id+".xlsx");
+
+ substitute(templateFile, tmp, sheetRef.substring(1), outF);
+ outF.flush();
+ outF.close();
+
+ }
+ //get servlet output stream
+
+
+ response.reset();
+ sos = response.getOutputStream();
+ String mime_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+ if(extension.equals("xlsm"))
+ mime_type = "application/vnd.ms-excel.sheet.macroEnabled.12";
+ response.setContentType(mime_type);
+
+ response.setHeader("Content-disposition", "attachment;filename="+filename+"."+ nvls(extension, "xlsx"));
+
+ buf = new BufferedInputStream(new FileInputStream(AppUtils.getTempFolderPath()+filename + "."+ nvls(extension, "xlsx")));
+ int readBytes = 0;
+
+ //read from the file; write to the ServletOutputStream
+ while ((readBytes = buf.read()) != -1)
+ sos.write(readBytes);
+
+ buf.close();
+ sos.flush();
+ sos.close();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("ENDING..DOWNLOADING XLSX..."));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:"
+ + (runtime.totalMemory() - runtime.freeMemory()) / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
+ + runtime.freeMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### END #####"));
+ }
+
+ /**
+ *
+ * @param zipfile the template file
+ * @param tmpfile the XML file with the sheet data
+ * @param entry the name of the sheet entry to substitute, e.g. xl/worksheets/sheet1.xml
+ * @param out the stream to write the result to
+ */
+ private static void substitute(File zipfile, File tmpfile, String entry, OutputStream out) throws IOException {
+ ZipFile zip = new ZipFile(zipfile);
+
+ ZipOutputStream zos = new ZipOutputStream(out);
+
+ @SuppressWarnings("unchecked")
+ Enumeration<ZipEntry> en = (Enumeration<ZipEntry>) zip.entries();
+ while (en.hasMoreElements()) {
+ ZipEntry ze = en.nextElement();
+ if(!ze.getName().equals(entry)){
+ zos.putNextEntry(new ZipEntry(ze.getName()));
+ InputStream is = zip.getInputStream(ze);
+ copyStream(is, zos);
+ is.close();
+ }
+ }
+ zos.putNextEntry(new ZipEntry(entry));
+ InputStream is = new FileInputStream(tmpfile);
+ copyStream(is, zos);
+ zos.flush();
+ zos.close();
+ is.close();
+ zip.close();
+ }
+
+ private static void copyStream(InputStream in, OutputStream out) throws IOException {
+ byte[] chunk = new byte[1024];
+ int count;
+ while ((count = in.read(chunk)) >=0 ) {
+ out.write(chunk,0,count);
+ }
+ }
+
+
+ public void createCSVFileContent(Writer out, ReportData rd,
+ ReportRuntime rr, HttpServletRequest request, HttpServletResponse response)
+ throws RaptorException {
+ //ArrayList reportParamNameValues = rr.getParamNameValuePairs();
+ //String reportTitle = rr.getReportName();
+ //String reportDescr = rr.getReportDescr();
+ PrintWriter csvOut = new PrintWriter(out);
+ ServletOutputStream sos = null;
+ BufferedInputStream buf = null;
+ String fileName = "";
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName());
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ String fName = formattedReportName+formattedDate+AppUtils.getUserID(request);
+ boolean raw = AppUtils.getRequestFlag(request, "raw");
+ String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
+
+
+ String csvFName = fName+".csv";
+ String zipFName = fName+".zip";
+ if(true) {
+ try {
+ fileName = AppUtils.getTempFolderPath()+""+csvFName;
+ csvOut = new PrintWriter(new BufferedWriter(
+ new OutputStreamWriter(
+ new FileOutputStream(fileName), "UTF-8")), false);
+ } catch (FileNotFoundException fex) {
+ fex.printStackTrace();
+ }
+ catch (UnsupportedEncodingException fex1) {
+ fex1.printStackTrace();
+ }
+ }
+ HtmlStripper strip = new HtmlStripper();
+ ResultSet rs = null;
+ //OracleConnection conn = null;
+ //OracleStatement st = null;
+ //Connection conO = null;
+ //Statement stO = null;
+ Connection conn = null;
+ Statement st = null;
+ ResultSetMetaData rsmd = null;
+ ColumnHeaderRow chr = null;
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+ String valueName = "";
+ if(!raw) {
+ String reportTitle = (nvl(rr.getReportTitle()).length()>0?rr.getReportTitle():rr.getReportName());
+ csvOut.println();
+ csvOut.print("\"" + reportTitle + "\",");
+ csvOut.println();
+
+ if(Globals.disclaimerPositionedTopInCSVExcel()) {
+ if(Globals.getShowDisclaimer()) {
+ csvOut.println();
+ csvOut.print("\"" + Globals.getFooterFirstLine() + "\",");
+ csvOut.println();
+ csvOut.print("\"" + Globals.getFooterSecondLine() + "\",");
+ csvOut.println();
+ csvOut.println();
+ }
+ }
+ }
+ if (Globals.getPrintParamsInCSVDownload() && !raw) {
+ ArrayList paramsList = rr.getParamNameValuePairsforPDFExcel(request, 1);
+ if(paramsList.size()<=0) {
+ paramsList = (ArrayList) request.getSession().getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+ }
+ int paramSeq = 0;
+ for (Iterator iter = paramsList.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+ //System.out.println("\"" + value.getId() + " = " + value.getName() + "\"");
+ if(nvl(value.getId()).trim().length()>0 && (!nvl(value.getId()).trim().equals("BLANK"))) {
+ paramSeq += 1;
+ if(paramSeq <= 1) {
+ csvOut.print("\"" + "Run-time Parameters" + "\"");
+ csvOut.println();
+ //strBuf.append("Run-time Parameters\n");
+ }
+ csvOut.print("\"" + value.getId() +":" + "\",");
+ valueName = nvl(value.getName());
+ if(valueName.indexOf("~")!= -1 && valueName.startsWith("(")) {
+ csvOut.print("\"'" + valueName.replaceAll("~",",")+ "'\",");
+ } else {
+ if(valueName.startsWith("(") && valueName.endsWith(")")) {
+ csvOut.print("\"" + valueName.replaceAll("~",",").substring(1, valueName.length()-1)+ "\",");
+ } else
+ csvOut.print("\"" + valueName.replaceAll("~",",")+ "\",");
+ }
+ csvOut.println();
+
+ //strBuf.append(value.getId()+": "+ value.getName()+"\n");
+ }
+ } //for
+ csvOut.println();
+ csvOut.println();
+ }
+
+ System.out.println("##### Heap utilization statistics [MB] #####");
+ System.out.println("Used Memory:"
+ + (runtime.maxMemory() - runtime.freeMemory()) / mb);
+ System.out.println("Free Memory:"
+ + runtime.freeMemory() / mb);
+ System.out.println("Total Memory:" + runtime.totalMemory() / mb);
+ System.out.println("Max Memory:" + runtime.maxMemory() / mb);
+ if (!rr.getReportType().equals(AppConstants.RT_HIVE))
+ sql_whole = rr.getWholeSQL();
+ else
+ sql_whole = rr.getReportSQL();
+ if(nvl(sql_whole).length()>0) {
+ try {
+ conn = ConnectionUtils.getConnection(rr.getDbInfo());
+ st = conn.createStatement();
+ //conn.setDefaultRowPrefetch(1000);
+ //st.setFetchDirection(ResultSet.TYPE_FORWARD_ONLY);
+ //st.setFetchSize(1000);
+ System.out.println("************* Map Whole SQL *************");
+ System.out.println(sql_whole);
+ System.out.println("*****************************************");
+ rs = st.executeQuery(sql_whole);
+ //st.setFetchSize(1000);
+ rsmd = rs.getMetaData();
+ int numberOfColumns = rsmd.getColumnCount();
+ HashMap colHash = new HashMap();
+ String title = "";
+
+ if(rd!=null) {
+
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ csvOut.print("\"" + "#" + "\",");
+ }*/
+
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ chr = rd.reportColumnHeaderRows.getNext();
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ title = ch.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+ if(ch.isVisible() && nvl(title).length()>0) {
+ csvOut.print("\"" + title + "\",");
+ for (int i = 1; i < ch.getColSpan(); i++)
+ csvOut.print(",");
+ }
+ } // for
+
+ csvOut.println();
+ } // for
+ int rowCount = 0;
+ while(rs.next()) {
+/* if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
+ csvOut.print(Globals.getUserDefinedMessageForMemoryLimitReached() + " " + rowCount +"records out of " + rr.getReportDataSize() + " were downloaded to CSV.");
+ break;
+ }
+*/ rowCount++;
+ //if(!raw) {
+ colHash = new HashMap();
+ for (int i = 1; i <= numberOfColumns; i++) {
+ colHash.put(rsmd.getColumnLabel(i).toUpperCase(), rs.getString(i));
+ }
+ /*if(rd.reportDataTotalRow!=null) {
+ csvOut.print("\"" + rowCount + "\",");
+ }*/
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ title = ch.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+
+ if(ch.isVisible() && nvl(title).length()>0) {
+ csvOut.print("\"" + strip.stripCSVHtml(nvl((String)colHash.get(ch.getColId().toUpperCase()))) + "\",");
+ }
+
+ }
+ csvOut.println();
+ /*} else {
+ for (int i = 1; i <= numberOfColumns; i++) {
+ csvOut.print("\"" + strip.stripCSVHtml( rs.getString(i)) + "\",");
+ }
+ csvOut.println();
+ }*/
+
+ }
+
+ if(rd.reportDataTotalRow!=null) {
+ for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();) {
+ DataRow dr = rd.reportDataTotalRow.getNext();
+ csvOut.print("\"" + "Total" + "\",");
+ dr.resetNext();dr.getNext();
+ for (; dr.hasNext();) {
+ DataValue dv = dr.getNext();
+ if(dv.isVisible()) {
+ csvOut.print("\"" + strip.stripCSVHtml(dv.getDisplayValue()) + "\",");
+ }
+ } // for
+
+ csvOut.println();
+ }
+ }
+
+ if(rowCount == 0) {
+ csvOut.print("\"No Data Found \"");
+ }
+ } else {
+ csvOut.print("\"No Data Found \"");
+ }
+
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ } catch (ReportSQLException ex) {
+ throw new RaptorException(ex);
+ } catch (Exception ex) {
+ throw new RaptorException (ex);
+ } finally {
+ try {
+ if(conn!=null)
+ conn.close();
+ if(st!=null)
+ st.close();
+ if(rs!=null)
+ rs.close();
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ if(!raw) {
+ if(!Globals.disclaimerPositionedTopInCSVExcel()) {
+ if(Globals.getShowDisclaimer()) {
+ csvOut.print("\"" + Globals.getFooterFirstLine() + "\",");
+ csvOut.println();
+ csvOut.print("\"" + Globals.getFooterSecondLine() + "\",");
+ csvOut.println();
+ }
+ }
+ }
+
+ // csvOut.flush();
+ } else {
+ boolean firstPass = true;
+ if(rd!=null) {
+ if(rd.reportTotalRowHeaderCols!=null) {
+ csvOut.print("\"" + "#" + "\",");
+ }
+
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ chr = rd.reportColumnHeaderRows.getNext();
+ for (rd.reportRowHeaderCols.resetNext(1); rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+
+ if (firstPass)
+ csvOut.print("\"" + rhc.getColumnTitle() + "\"");
+ csvOut.print(",");
+ } // for
+ firstPass = false;
+
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ csvOut.print("\"" + ch.getColumnTitle() + "\",");
+ for (int i = 1; i < ch.getColSpan(); i++)
+ csvOut.print(",");
+ }
+ } // for
+
+ csvOut.println();
+ } // for
+
+ firstPass = true;
+ int rowCount = 0;
+ for (rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext();) {
+ if(rd.reportDataTotalRow!=null) {
+ rowCount++;
+ csvOut.print("\"" + rowCount + "\",");
+ }
+
+ DataRow dr = rd.reportDataRows.getNext();
+
+ for (rd.reportRowHeaderCols.resetNext(1); rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ if (firstPass)
+ rhc.resetNext();
+ RowHeader rh = rhc.getNext();
+
+ csvOut.print("\"" + strip.stripCSVHtml(rh.getRowTitle()) + "\",");
+ } // for
+ firstPass = false;
+
+ for (dr.resetNext(); dr.hasNext();) {
+ DataValue dv = dr.getNext();
+ if(dv.isVisible())
+ csvOut.print("\"" + strip.stripCSVHtml(dv.getDisplayValue()) + "\",");
+ } // for
+
+ csvOut.println();
+ } // for
+ if(rd.reportDataTotalRow!=null) {
+ for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();) {
+ DataRow dr = rd.reportDataTotalRow.getNext();
+ csvOut.print("\"" + "Total" + "\",");
+ firstPass = false;
+
+ for (dr.resetNext(); dr.hasNext();) {
+ DataValue dv = dr.getNext();
+ if(dv.isVisible())
+ csvOut.print("\"" + strip.stripCSVHtml(dv.getDisplayValue()) + "\",");
+ } // for
+
+ csvOut.println();
+ }
+ }
+
+ if(!raw) {
+ if(!Globals.disclaimerPositionedTopInCSVExcel()) {
+ if(Globals.getShowDisclaimer()) {
+ csvOut.print("\"" + Globals.getFooterFirstLine() + "\",");
+ csvOut.println();
+ csvOut.print("\"" + Globals.getFooterSecondLine() + "\",");
+ csvOut.println();
+ }
+ }
+ }
+
+ //csvOut.flush();
+ } else {
+ csvOut.print("\"No Data Found \"");
+ }
+ }
+ csvOut.flush();
+ csvOut.close();
+
+/*
+ if (Globals.getPrintTitleInDownload() && reportTitle != null) {
+ csvOut.println();
+ csvOut.println("\"" + reportTitle + "\"");
+ csvOut.println();
+ if (Globals.getShowDescrAtRuntime() && nvl(reportDescr).length() > 0) {
+ csvOut.println("\"" + reportDescr + "\"");
+ csvOut.println();
+ }
+ } // if
+
+ if (Globals.getPrintParamsInDownload() && reportParamNameValues != null) {
+ csvOut.println();
+ for (Iterator iter = reportParamNameValues.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+ csvOut.println("\"" + value.getId() + " = " + value.getName() + "\"");
+ } // for
+ csvOut.println();
+ } // if
+*/
+ if(true && !raw) {
+ try {
+
+ //final int BUFFER = 2048;
+
+ //fis.read(buf,0,buf.length);
+ int size = 0;
+ byte[] buffer = new byte[1024];
+
+ //CRC32 crc = new CRC32();
+ //PrintStream fos = new PrintStream(new WriterOutputStream(out));
+ //BufferedOutputStream dest = new BufferedOutputStream(fos, BUFFER);
+ //ZipOutputStream s = new ZipOutputStream(dest);
+ ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(AppUtils.getTempFolderPath()+""+zipFName));
+ FileInputStream fis = new FileInputStream(fileName);
+
+ //s.setLevel(6);
+
+ ZipEntry entry = new ZipEntry(csvFName);
+ //crc.reset();
+ zos.putNextEntry(entry);
+
+ // read data to the end of the source file and write it to the zip
+ // output stream.
+ while ((size = fis.read(buffer, 0, buffer.length)) > 0) {
+ zos.write(buffer, 0, size);
+ }
+
+ zos.closeEntry();
+ fis.close();
+
+ // Finish zip process
+ zos.close();
+
+ } catch(Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+ response.reset();
+ java.io.File file = null;
+
+ if(true && !raw) {
+ response.setContentType("application/octet-stream");
+ response.setHeader("Content-disposition","attachment;filename="+fName+".zip");
+ file = new java.io.File(AppUtils.getTempFolderPath()+""+fName+".zip");
+ } else {
+ response.setContentType("application/csv");
+ response.setHeader("Content-disposition","attachment;filename="+fName+".csv");
+ file = new java.io.File(AppUtils.getTempFolderPath()+""+fName+".csv");
+ }
+
+
+ FileInputStream fileIn = null;
+ int c;
+ try {
+ sos = response.getOutputStream();
+ fileIn = new FileInputStream(file);
+ buf = new BufferedInputStream(fileIn);
+ byte [] bOut = new byte [4096];
+ //read from the file; write to the ServletOutputStream
+ //while ((readBytes = buf.read()) != -1)
+ int readBytes = 0;
+ while ((readBytes = buf.read (bOut, 0, 4096))> 0) {
+ buf.available();
+ sos.write (bOut, 0, readBytes);
+ }
+
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ catch(Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (sos != null)
+ sos.close();
+ if (buf != null)
+ buf.close();
+ } catch (Exception e1) {
+ e1.printStackTrace();
+ }
+ }
+
+ File f = new File (AppUtils.getTempFolderPath()
+ + fName);
+ if(f.exists()) f.delete();
+ System.out.println("##### Heap utilization statistics [MB] #####");
+ System.out.println("Used Memory:"
+ + (runtime.maxMemory() - runtime.freeMemory()) / mb);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
+ + runtime.freeMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
+
+ } // createCSVFileContent
+
+/* public String saveCSVPageFile(HttpServletRequest request, ReportData rd,
+ ArrayList reportParamNameValues, String reportTitle, String reportDescr) {
+ try {
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(reportTitle);
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+
+ String csvFName = formattedReportName+formattedDate+AppUtils.getUserID(request)+".csv";
+ //String csvFName = AppUtils.generateFileName(request, AppConstants.FT_CSV);
+
+ BufferedWriter csvOut = new BufferedWriter(new FileWriter(AppUtils
+ .getTempFolderPath()
+ + csvFName));
+ createCSVFileContent(csvOut, rd, reportParamNameValues, reportTitle, reportDescr);
+ csvOut.close();
+
+ return csvFName;
+ } catch (Exception e) {
+ (new ErrorHandler()).processError(request, "Exception saving data to CSV file: "
+ + e.getMessage());
+ return null;
+ }
+ } // saveCSVPageFile
+*/
+
+// public String saveAsFlatFile(HttpServletRequest request, ReportData rd,
+// ReportRuntime rr, String reportTitle, String reportDescr) {
+// try {
+// String csvFName = AppUtils.generateFileName(request, AppConstants.FT_TXT);
+//
+// BufferedWriter txtOut = new BufferedWriter(new FileWriter(AppUtils
+// .getTempFolderPath()
+// + csvFName));
+// createFlatFileContent(txtOut, rd, rr, reportTitle, reportDescr);
+// txtOut.close();
+//
+// return csvFName;
+// } catch (Exception e) {
+// (new ErrorHandler()).processError(request, "Exception saving data to CSV file: "
+// + e.getMessage());
+// return null;
+// }
+// } // saveCSVPageFile
+
+ public String saveXMLFile(HttpServletRequest request, String reportName, String reportXML) {
+ try {
+ String xmlFName = AppUtils.generateUniqueFileName(request, reportName, AppConstants.FT_XML);
+
+ PrintWriter xmlOut = new PrintWriter(new BufferedWriter(new FileWriter(new File(
+ AppUtils.getTempFolderPath() + xmlFName))));
+ xmlOut.println(reportXML);
+ xmlOut.close();
+
+ //return AppUtils.getTempFolderURL()
+ // + java.net.URLEncoder.encode(java.net.URLDecoder.decode(xmlFName));
+ return java.net.URLEncoder.encode(java.net.URLDecoder.decode(xmlFName));
+
+ } catch (Exception e) {
+ (new ErrorHandler()).processError(request,
+ "Exception saving XML source to file system: " + e.getMessage());
+ return null;
+ }
+ } // saveXMLFile
+
+ public ReportRuntime loadReportRuntime(HttpServletRequest request, String reportID)
+ throws RaptorException {
+ return loadReportRuntime(request, reportID, true);
+ } // loadReportRuntime
+
+ public ReportRuntime loadReportRuntime(HttpServletRequest request, String reportID,
+ boolean prepareForExecution) throws RaptorException {
+ return loadReportRuntime(request, reportID, true, 2); // where 2 is adding to session
+ }
+ public ReportRuntime loadReportRuntime(HttpServletRequest request, String reportID,
+ boolean prepareForExecution, int requestFlag) throws RaptorException {
+ boolean refresh = nvl(request.getParameter(AppConstants.RI_REFRESH)).toUpperCase().startsWith("Y");
+ boolean rDisplayContent = AppUtils.getRequestFlag(request,
+ AppConstants.RI_DISPLAY_CONTENT)
+ || AppUtils.getRequestFlag(request, "noFormFields");
+
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ boolean inSchedule = AppUtils.getRequestFlag(request, AppConstants.SCHEDULE_ACTION);
+ if (rr != null ) {
+ if(requestFlag == 7) { // DASH
+ String reportXML = ReportLoader.loadCustomReportXML(reportID);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML loaded"));
+ rr = ReportRuntime.unmarshal(reportXML, reportID, request);
+ rr.setParamValues(request, false,refresh);
+ rr.setDisplayFlags(true, true); // show content even at the first time
+ return rr;
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Load Report Runtime "+ reportID + " " +rr.getReportID() + " " + request.getParameter("refresh") ));
+ if (reportID.equals(rr.getReportID()) && (request.getParameter("refresh")==null || !request.getParameter("refresh").equals("Y"))) {
+ // The report runtime is already in the session
+ if (prepareForExecution) {
+ boolean resetParams = AppUtils.getRequestFlag(request,
+ AppConstants.RI_RESET_PARAMS);
+ rr.setParamValues(request, resetParams,refresh);
+
+ if (resetParams)
+ rr.resetVisualSettings();
+ rr.setDisplayFlags(nvl(request.getParameter(AppConstants.RI_SOURCE_PAGE))
+ .length() == 0, rDisplayContent || rr.isDisplayOptionHideForm());
+ } // if
+
+ return rr;
+ } // if
+ }
+ }
+
+ /*
+ * Cannot convert the definition => XML file not saved for preview also,
+ * commented code not maintained up to date ReportDefinition rdef =
+ * (ReportDefinition)
+ * request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
+ * if(rdef!=null) if(reportID.equals(rdef.getReportID())) { // The
+ * report definition is in the session => create report runtime from it
+ * rr = new ReportRuntime(rdef, request); if(prepareForExecution) {
+ * request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME,
+ * rr);
+ * rr.setDisplayFlags(request.getParameter(AppConstants.RI_SOURCE_PAGE)==null); } //
+ * if return rr; } // if
+ */
+
+ // Report is NOT in the session => load from the database
+ String reportXML = ReportLoader.loadCustomReportXML(reportID);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML loaded"));
+
+ rr = ReportRuntime.unmarshal(reportXML, reportID, request);
+ if (prepareForExecution) {
+ String userID ;
+ int flag = 0;
+ if(request.getAttribute("schedule_email_userId") != null) {
+ userID = (String)request.getAttribute("schedule_email_userId");
+ flag = 1;
+ }
+ else
+ userID = AppUtils.getUserID(request);
+ // If it is dashboard type then report can be viewed without specific privilege to report
+ String dashboardId = AppUtils.getRequestValue(request, AppConstants.RI_DASHBOARD_ID);
+ //System.out.println("USSSSSSSSSSSSERID " + userID);
+ //System.out.println("PDF " + AppUtils.getRequestNvlValue(request, "pdfAttachmentKey") );
+ if(!rr.isDashboardType() && !(isReportAddedAsDashboard(request, dashboardId, rr.getReportID()))) {
+ if ( AppUtils.getRequestNvlValue(request, "pdfAttachmentKey").length()<=0 )
+ if(flag == 1 )rr.checkUserReadAccess(request, userID);
+ else rr.checkUserReadAccess(request);
+ }
+ // TODO ON Demand
+ //rr.setXmlFileName(saveXMLFile(request, rr.getReportName(), reportXML));
+ if (rDisplayContent) {
+ //System.out.println("In rDisplayContent ");
+ rr.setParamValues(request, false,true);
+ //if (requestFlag==2)
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr);
+ }
+ if(inSchedule) {
+ //System.out.println("In inSchedule ");
+ rr.setParamValues(request, false,false);
+ }
+ if( requestFlag == 7 ) { // DASH
+ rr.setDisplayFlags(true, true);
+ } else {
+ rr.setDisplayFlags(request.getParameter(AppConstants.RI_SOURCE_PAGE) == null,
+ rDisplayContent || rr.isDisplayOptionHideForm());
+ }
+// System.out.println("Report ID B4 Id in reportHandler "
+// + ( request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null?((ReportRuntime)request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)).getReportID():"Not in session"));
+// System.out.println("requestFlag " + requestFlag);
+ if(requestFlag==2 && !rDisplayContent) {
+ //System.out.println("In Request Flag ");
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr);
+ rr.setParamValues(request, false, false);
+ }
+ else if(requestFlag==1) {
+ rr.setParamValues(request, false,refresh);
+ request.setAttribute(AppConstants.SI_REPORT_RUNTIME, rr);
+
+ }
+// System.out.println("Report ID B4 Id in reportHandler "
+// + ( request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null?((ReportRuntime)request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)).getReportID():"Not in session"));
+ //request.setAttribute(AppConstants.SI_REPORT_RUNTIME, rr);
+ } // if
+
+ return rr;
+ } // loadReportRuntime
+
+ private boolean isReportAddedAsDashboard(HttpServletRequest request, String dashboardId, String reportId)throws RaptorException {
+ if(nvl(dashboardId).length() <= 0)
+ return false;
+ String reportXML = ReportLoader.loadCustomReportXML(dashboardId);
+ ReportDefinition rdef = createReportDefinition(request, dashboardId, reportXML);
+ List l = rdef.getDashBoardReports().getReportsList();
+ for (Iterator iterator = l.iterator(); iterator.hasNext();) {
+ Reports reports = (Reports) iterator.next();
+ if(reports.getReportId().equals(reportId)) return true;
+
+ }
+ return false;
+ }
+
+ public ReportDefinition createReportDefinition(HttpServletRequest request,
+ String reportID, String reportXML) throws RaptorException {
+ ReportDefinition rdef = ReportDefinition.unmarshal(reportXML, reportID, request);
+ rdef.generateWizardSequence(request);
+ return rdef;
+ } // createReportDefinition
+
+ public ReportDefinition loadReportDefinition(HttpServletRequest request, String reportID)
+ throws RaptorException {
+ //System.out.println("********* ReportID " + reportID);
+ boolean isReportIDBlank = (reportID.length() == 0 || reportID.equals("-1"));
+ String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), "");
+ String wizardActionKey = nvl(request.getParameter(AppConstants.RI_WIZARD_ACTION), "");
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ if(nvl(actionKey).equals("report.edit"))
+ rdef = null;
+ //ReportDefinition rdef = null;
+ if (rdef != null)
+ if (isReportIDBlank || reportID.equals(rdef.getReportID())) {
+ // The report definition is already in the session
+ return rdef;
+ }
+
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ if (rr != null)
+ if (isReportIDBlank || reportID.equals(rr.getReportID())) {
+ // The report runtime is in the session => create report
+ // definition from it
+ rdef = new ReportDefinition(rr, request);
+ String userID = AppUtils.getUserID(request);
+ rdef.generateWizardSequence(request);
+ // rdef.checkUserWriteAccess(userID);
+
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ return rdef;
+ } // if
+
+ // Report is NOT in the session => load from the database
+ if (isReportIDBlank)
+ rdef = ReportDefinition.createBlank(request);
+ else {
+ String reportXML = ReportLoader.loadCustomReportXML(reportID);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML loaded"));
+ rdef = createReportDefinition(request, reportID, reportXML);
+ } // else
+
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ return rdef;
+ } // loadReportDefinition
+
+ public void setSheetName( String sheet_name ) {
+ SHEET_NAME = sheet_name;
+ }
+
+ public String getSheetName() {
+ return SHEET_NAME;
+ }
+
+ /**
+ * Writes spreadsheet data in a Writer.
+ * (YK: in future it may evolve in a full-featured API for streaming data in Excel)
+ */
+ public static class SpreadsheetWriter {
+ private final Writer _out;
+ private int _rownum;
+
+ public SpreadsheetWriter(Writer out){
+ _out = out;
+ }
+
+ public void beginSheet() throws IOException {
+ _out.write("<?xml version=\"1.0\" encoding=\""+XML_ENCODING+"\"?>" +
+ "<worksheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">" );
+ _out.write("<sheetData>\n");
+ }
+
+ public void endSheet() throws IOException {
+ _out.write("</sheetData>");
+ _out.write("</worksheet>");
+ }
+
+ /**
+ * Insert a new row
+ *
+ * @param rownum 0-based row number
+ */
+ public void insertRow(int rownum) throws IOException {
+ _out.write("<row r=\""+(rownum+1)+"\">\n");
+ this._rownum = rownum;
+ }
+
+ /**
+ * Insert row end marker
+ */
+ public void endRow() throws IOException {
+ _out.write("</row>\n");
+ }
+
+ public void createCell(int columnIndex, String value, int styleIndex) throws IOException {
+ String ref = new CellReference(_rownum, columnIndex).formatAsString();
+ _out.write("<c r=\""+ref+"\" t=\"inlineStr\"");
+ if(styleIndex != -1) _out.write(" s=\""+styleIndex+"\"");
+ _out.write(">");
+ _out.write("<is><t>"+value+"</t></is>");
+ _out.write("</c>");
+ }
+
+ public void createCell(int columnIndex, String value) throws IOException {
+ createCell(columnIndex, value, -1);
+ }
+
+ public void createCell(int columnIndex, double value, int styleIndex) throws IOException {
+ String ref = new CellReference(_rownum, columnIndex).formatAsString();
+ _out.write("<c r=\""+ref+"\" t=\"n\"");
+ if(styleIndex != -1) _out.write(" s=\""+styleIndex+"\"");
+ _out.write(">");
+ _out.write("<v>"+value+"</v>");
+ _out.write("</c>");
+ }
+
+ public void createCell(int columnIndex, double value) throws IOException {
+ createCell(columnIndex, value, -1);
+ }
+
+ public void createCell(int columnIndex, Calendar value, int styleIndex) throws IOException {
+ createCell(columnIndex, DateUtil.getExcelDate(value, false), styleIndex);
+ }
+ }
+
+ public int getColumnCountForDownloadFile(ReportRuntime rr, ReportData rd) {
+ int columnCount = 0;
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
+ for(chr.resetNext(); chr.hasNext(); ) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ columnCount++;
+ }
+ }
+ }
+ if(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ for (rd.reportRowHeaderCols.resetNext(); rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ if(rhc.isVisible()) {
+ columnCount++;
+ }
+ }
+ }
+ return columnCount;
+ }
+
+
+ private Map<String, XSSFCellStyle> loadXSSFStyles(ReportRuntime rr, XSSFWorkbook wb, Map<String, XSSFCellStyle> loadedStyles) {
+ XSSFCellStyle styleDefault = wb.createCellStyle();
+ //System.out.println("Load Styles");
+ // Style default will be normal with no background
+ XSSFFont fontDefault = wb.createFont();
+
+ XSSFDataFormat xssffmt = wb.createDataFormat();
+ // The default will be plain .
+ fontDefault.setColor((short) HSSFFont.COLOR_NORMAL);
+ fontDefault.setFontHeight((short) (font_size / 0.05));
+ fontDefault.setFontName("Tahoma");
+
+ styleDefault.setAlignment(XSSFCellStyle.ALIGN_CENTER);
+ styleDefault.setBorderBottom(XSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderTop(XSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderLeft(XSSFCellStyle.BORDER_THIN);
+ styleDefault.setBorderRight(XSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDefault.setFillPattern(XSSFCellStyle.NO_FILL);
+ styleDefault.setFont(fontDefault);
+ ArrayList semColumnList = new ArrayList();
+ List dsList = rr.getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType element = (DataSourceType) iter.next();
+ List dcList = element.getDataColumnList().getDataColumn();
+ for (Iterator iterator = dcList.iterator(); iterator.hasNext();) {
+ DataColumnType element1 = (DataColumnType) iterator.next();
+ semColumnList.add(element1.getSemaphoreId());
+
+ }
+ }
+ SemaphoreList semList = rr.getSemaphoreList();
+ Map<String, XSSFCellStyle> hashMapStyles = new HashMap<String, XSSFCellStyle>();;
+ Map<String, XSSFFont> hashMapFonts = new HashMap<String, XSSFFont>();
+ hashMapFonts.put("default", fontDefault);
+ hashMapStyles.put("default", styleDefault);
+ XSSFCellStyle styleLeftDefault = wb.createCellStyle();
+ styleLeftDefault.setAlignment(XSSFCellStyle.ALIGN_LEFT);
+ styleLeftDefault.setBorderBottom(XSSFCellStyle.BORDER_THIN);
+ styleLeftDefault.setBorderTop(XSSFCellStyle.BORDER_THIN);
+ styleLeftDefault.setBorderLeft(XSSFCellStyle.BORDER_THIN);
+ styleLeftDefault.setBorderRight(XSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleLeftDefault.setFillPattern(XSSFCellStyle.NO_FILL);
+ styleLeftDefault.setFont(fontDefault);
+ hashMapStyles.put("defaultLeft", styleLeftDefault);
+
+
+ XSSFCellStyle styleDate = wb.createCellStyle();
+ styleDate.setAlignment(XSSFCellStyle.ALIGN_RIGHT);
+ styleDate.setDataFormat(xssffmt.getFormat("d-mmm-yy"));
+ styleDate.setAlignment(XSSFCellStyle.ALIGN_CENTER);
+ styleDate.setBorderBottom(XSSFCellStyle.BORDER_THIN);
+ styleDate.setBorderTop(XSSFCellStyle.BORDER_THIN);
+ styleDate.setBorderLeft(XSSFCellStyle.BORDER_THIN);
+ styleDate.setBorderRight(XSSFCellStyle.BORDER_THIN);
+ // styleDefault.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleDate.setFillPattern(XSSFCellStyle.NO_FILL);
+ styleDate.setFont(fontDefault);
+ hashMapStyles.put("date", styleDate);
+
+ XSSFCellStyle rowHeaderStyle = wb.createCellStyle();
+ XSSFFont headerFont = wb.createFont();
+ headerFont.setBold(true);
+ rowHeaderStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
+ rowHeaderStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
+ rowHeaderStyle.setFont(headerFont);
+ rowHeaderStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
+ rowHeaderStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
+ rowHeaderStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
+ rowHeaderStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
+ hashMapStyles.put("header", rowHeaderStyle);
+
+
+ XSSFCellStyle boldStyle = wb.createCellStyle();
+ //headerFont = wb.createFont();
+ //headerFont.setBold(true);
+ boldStyle.setFont(headerFont);
+ boldStyle.setBorderTop(XSSFCellStyle.BORDER_THIN);
+ boldStyle.setBorderLeft(XSSFCellStyle.BORDER_THIN);
+ boldStyle.setBorderBottom(XSSFCellStyle.BORDER_THIN);
+ boldStyle.setBorderRight(XSSFCellStyle.BORDER_THIN);
+ boldStyle.setAlignment(HorizontalAlignment.CENTER);
+ hashMapStyles.put("title", boldStyle);
+
+ XSSFCellStyle cellStyle = null;
+ if (semList == null || semList.getSemaphore() == null) {
+ hashMapStyles.put("default", styleDefault);
+ } /*else {
+ for (Iterator iter = semList.getSemaphore().iterator(); iter.hasNext();) {
+ SemaphoreType sem = (SemaphoreType) iter.next();
+ if(!semColumnList.contains(sem.getSemaphoreId())) continue;
+ //System.out.println("SemphoreId ----> " + sem.getSemaphoreId());
+ FormatList fList = sem.getFormatList();
+ List formatList = fList.getFormat();
+ for (Iterator fIter = formatList.iterator(); fIter.hasNext();) {
+ FormatType fmt = (FormatType) fIter.next();
+ if(fmt!=null){
+ //if (fmt.getLessThanValue().length() > 0) {
+ cellStyle = wb.createCellStyle();
+ XSSFFont cellFont = wb.createFont();
+ //System.out.println("Format Id " + fmt.getFormatId());
+ if (nvl(fmt.getBgColor()).length() > 0) {
+// System.out.println("Load Styles " +
+// fmt.getFormatId()
+// + " " +fmt.getBgColor() + " " +
+// ExcelColorDef.getExcelColor(fmt.getBgColor()));
+ cellStyle.setFillForegroundColor(ExcelColorDef.getExcelColor(fmt
+ .getBgColor()));
+ cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
+ }
+ if (nvl(fmt.getFontColor()).length() > 0) {
+ cellFont.setColor(ExcelColorDef.getExcelColor(fmt.getFontColor()));
+ } else
+ cellFont.setColor((short) HSSFFont.COLOR_NORMAL);
+ if (fmt.isBold())
+ cellFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ if (fmt.isItalic())
+ cellFont.setItalic(true);
+ if (fmt.isUnderline())
+ cellFont.setUnderline(HSSFFont.U_SINGLE);
+ if(nvl(fmt.getFontFace()).length()>0)
+ cellFont.setFontName(fmt.getFontFace());
+ else
+ cellFont.setFontName("Tahoma");
+ //cellFont.setFontHeight((short) (10 / 0.05));
+
+ if(nvl(fmt.getFontSize()).length()>0) {
+ try {
+ cellFont.setFontHeight((short) (Integer.parseInt(fmt.getFontSize()) / 0.05));
+ } catch(NumberFormatException e){
+ cellFont.setFontHeight((short) (font_size / 0.05));
+ }
+ }
+ else
+ cellFont.setFontHeight((short) (font_size / 0.05));
+ cellStyle.setFont(cellFont);
+ cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ hashMapStyles.put(fmt.getFormatId(), cellStyle);
+ } else {
+ //hashMapStyles.put(fmt.getFormatId(), styleDefault);
+ hashMapStyles.put("default", styleDefault);
+ }
+ }
+
+ }
+ }*/
+ loadedStyles.putAll(hashMapStyles);
+ return loadedStyles;
+ }
+
+ private void generate(XSSFWorkbook wb, SpreadsheetWriter sw, Map<String, XSSFCellStyle> styles, ReportData rd, String sql_whole, ReportRuntime rr, HttpServletRequest request, XSSFSheet sheet) throws Exception {
+ HtmlStripper strip = new HtmlStripper();
+ XSSFCellStyle styleCell = null;
+ XSSFCellStyle styleRowCell = null;
+ XSSFCellStyle styleDefaultCell = null;
+
+ styleDefaultCell = (XSSFCellStyle) styles.get("default");
+
+
+ // to check performance
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+
+ int rowNum = 0;
+ /*short s1 = 0, s2 = (short) (col-1);
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ int styleIndex = styles.get("header").getIndex();
+ sw.createCell(rowNum, reportTitle, styleIndex);
+
+ //header.setCenter(HSSFHeader.font("Tahoma", "")+ HSSFHeader.fontSize((short) 9)+reportTitle+"\n"+((Globals.getShowDescrAtRuntime() && nvl(reportDescr).length() > 0)?reportDescr:""));
+
+ // Report Description
+ if (Globals.getShowDescrAtRuntime() && nvl(reportDescr).length() > 0) {
+ sw.createCell(rowNum, reportDescr, styleIndex);
+ }
+ rowNum += 2;
+ sw.insertRow(rowNum);*/
+ int cellNum = 0;
+
+
+ ColumnHeaderRow chr = null;
+ java.util.HashMap dataTypeMap = new java.util.HashMap();
+ boolean firstPass = true;
+ int columnRows = rr.getVisibleColumnCount() ;
+
+ HttpSession session = request.getSession();
+ String drilldown_index = (String) session.getAttribute("drilldown_index");
+ int index = 0;
+ try {
+ index = Integer.parseInt(drilldown_index);
+ } catch (NumberFormatException ex) {
+ index = 0;
+ }
+ String header = (String) session.getAttribute("TITLE_"+index);
+ String subtitle = (String) session.getAttribute("SUBTITLE_"+index);
+ if(nvl(header).length()>0) {
+ header = Utils.replaceInString(header, "<BR/>", " ");
+ header = Utils.replaceInString(header, "<br/>", " ");
+ header = Utils.replaceInString(header, "<br>", " ");
+ header = strip.stripHtml(nvl(header).trim());
+ subtitle = Utils.replaceInString(subtitle, "<BR/>", " ");
+ subtitle = Utils.replaceInString(subtitle, "<br/>", " ");
+ subtitle = Utils.replaceInString(subtitle, "<br>", " ");
+ subtitle = strip.stripHtml(nvl(subtitle).trim());
+ //XSSFRow row = sheet.createRow(rowNum);
+ sw.insertRow(rowNum);
+ cellNum = 0;
+ //XSSFCell cell = row.createCell(cellNum);
+ sw.createCell(cellNum, Utils.excelEncode(header));
+ for (int i = 1; i <= columnRows; i++) {
+ sw.createCell(cellNum+i, "");
+ }
+ sheet.addMergedRegion(new CellRangeAddress(rowNum+1, rowNum+1, cellNum+1, columnRows));
+ sw.endRow();
+/* cell.setCellValue(Utils.excelEncode(header));
+ cell.setCellStyle(styles.get("title"));
+*/ //sw.createCell(cellNum,Utils.excelEncode(header), styles.get("title").getIndex());
+// sheet.addMergedRegion(new CellRangeAddress(rowNum+1, rowNum+1, cellNum+1, columnRows));
+ rowNum += 1;
+// row = sheet.createRow(rowNum);
+ sw.insertRow(rowNum);
+ cellNum = 0;
+/* cell = row.createCell(cellNum);
+ cell.setCellValue(Utils.excelEncode(subtitle));
+ cell.setCellStyle(styles.get("title"));
+*/ //sw.createCell(cellNum,Utils.excelEncode(header), styles.get("title").getIndex());
+
+ sheet.addMergedRegion(new CellRangeAddress(rowNum+1, rowNum+1, cellNum+1, columnRows));
+ sw.createCell(cellNum, Utils.excelEncode(subtitle));
+ sw.endRow();
+ //sheet.addMergedRegion(new CellRangeAddress(rowNum+1, rowNum+1, cellNum+1, columnRows));
+/* sw.insertRow(rowNum);
+ cellNum = 0;
+ sw.createCell(cellNum,Utils.excelEncode(subtitle), styles.get("title").getIndex());
+ sheet.addMergedRegion(new CellRangeAddress(rowNum+1, rowNum+1, cellNum+1, columnRows));
+
+*/ rowNum += 1;
+ }
+ cellNum = 0;
+ String title = "";
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ sw.insertRow(rowNum);
+ cellNum = -1;
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ cellNum +=1;
+ sw.createCell(cellNum, "No.", styles.get("header").getIndex());
+
+ //row.getCell((short) cellNum).setCellStyle(styleDataHeader);
+ }*/
+ chr = rd.reportColumnHeaderRows.getNext();
+
+ if(nvl(sql_whole).length() <= 0 || (!rr.getReportType().equals(AppConstants.RT_LINEAR))) {
+
+ for (rd.reportRowHeaderCols.resetNext(1); rd.reportRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ title = rhc.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+
+ sw.createCell(cellNum,Utils.excelEncode(title), styles.get("header").getIndex());
+ //sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum+columnRows, (short) (cellNum)));
+ //System.out.println(" **************** Row Header Title " + rhc.getColumnTitle() + " " + cellNum + " " );
+ //System.out.println(cellNum + " " + cellWidth.size());
+ } // for
+
+ }
+
+ firstPass = false;
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ cellNum += 1;
+ int colSpan = ch.getColSpan()-1;
+ title = ch.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+ sw.createCell(cellNum, Utils.excelEncode(title), styles.get("header").getIndex());
+ if(colSpan > 0) {
+ for ( int k = 1; k <= colSpan; k++ ) {
+ sw.createCell(cellNum+k, "", styles.get("header").getIndex());
+ }
+ //sheet.addMergedRegion(new Region(rowNum, (short) cellNum, rowNum, (short) (cellNum+colSpan)));
+ }
+ if(colSpan > 0)
+ cellNum += colSpan;
+ }
+ } // for
+ rowNum += 1;
+ } // for
+
+ sw.endRow();
+ //All the possible combinations of date format
+ CreationHelper createHelper = wb.getCreationHelper();
+ HashMap<String, Short> dateFormatMap = new HashMap<String, Short>();
+
+ SimpleDateFormat MMDDYYYYFormat = new SimpleDateFormat("MM/dd/yyyy");
+ SimpleDateFormat YYYYMMDDFormat = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat MONYYYYFormat = new SimpleDateFormat("MMM yyyy");
+ SimpleDateFormat MMYYYYFormat = new SimpleDateFormat("MM/yyyy");
+ SimpleDateFormat MMMMMDDYYYYFormat = new SimpleDateFormat("MMMMM dd, yyyy");
+ SimpleDateFormat YYYYMMDDDASHFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat DDMONYYYYFormat = new SimpleDateFormat("dd-MMM-yyyy");
+ SimpleDateFormat MONTHYYYYFormat = new SimpleDateFormat("MMMMM, yyyy");
+ SimpleDateFormat MMDDYYYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
+ SimpleDateFormat YYYYMMDDHHMMSSFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ SimpleDateFormat YYYYMMDDHHMMFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+ SimpleDateFormat DDMONYYYYHHMMSSFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+ SimpleDateFormat DDMONYYYYHHMMFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
+ SimpleDateFormat DDMONYYHHMMFormat = new SimpleDateFormat("dd-MMM-yy HH:mm");
+ SimpleDateFormat MMDDYYFormat = new SimpleDateFormat("MM/dd/yy");
+ SimpleDateFormat MMDDYYHHMMFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
+ SimpleDateFormat MMDDYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMZFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
+ SimpleDateFormat MMMMMDDYYYYHHMMSS = new SimpleDateFormat("MMMMM-dd-yyyy HH:mm:ss");
+
+ short dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yyyy");
+ dateFormatMap.put("MMDDYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("yyyy/MM/dd");
+ dateFormatMap.put("YYYYMMDD", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MMM yyyy");
+ dateFormatMap.put("MONYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/yyyy");
+ dateFormatMap.put("MMYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MMMMM dd, yyyy");
+ dateFormatMap.put("MMMMMDDYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("yyyy-MM-dd");
+ dateFormatMap.put("YYYYMMDDDASH", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("yyyy-MM-dd HH:mm:ss");
+ dateFormatMap.put("timestamp", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("dd-MMM-yyyy");
+ dateFormatMap.put("MONTHYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MMMMM, yyyy");
+ dateFormatMap.put("MMDDYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yyyy HH:mm:ss");
+ dateFormatMap.put("MMDDYYYYHHMM", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yyyy HH:mm");
+ dateFormatMap.put("MMDDYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("yyyy/MM/dd HH:mm:ss");
+ dateFormatMap.put("YYYYMMDDHHMMSS", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("yyyy/MM/dd HH:mm");
+ dateFormatMap.put("YYYYMMDDHHMM", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("dd-MMM-yyyy HH:mm:ss");
+ dateFormatMap.put("DDMONYYYYHHMMSS", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("dd-MMM-yyyy HH:mm");
+ dateFormatMap.put("DDMONYYYYHHMM", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("dd-MMM-yy HH:mm");
+ dateFormatMap.put("DDMONYYHHMM", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("dd-MMM-yyyy");
+ dateFormatMap.put("DDMONYYYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yy");
+ dateFormatMap.put("MMDDYY", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yy HH:mm");
+ dateFormatMap.put("MMDDYYHHMM", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yy HH:mm:ss");
+ dateFormatMap.put("MMDDYYHHMMSS", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MM/dd/yyyy HH:mm z");
+ dateFormatMap.put("MMDDYYYYHHMMZ", new Short(dateFormat));
+ dateFormat = createHelper.createDataFormat().getFormat("MMMMM-dd-yyyy HH:mm:ss");
+ dateFormatMap.put("MMMMMDDYYYYHHMMSS", new Short(dateFormat));
+
+ ResultSet rs = null;
+ Connection conn = null;
+ Statement st = null;
+ ResultSetMetaData rsmd = null;
+
+
+ if(nvl(sql_whole).length() >0 && (rr.getReportType().equals(AppConstants.RT_LINEAR) || rr.getReportType().equals(AppConstants.RT_HIVE) )) {
+ try {
+ conn = ConnectionUtils.getConnection(rr.getDbInfo());
+ st = conn.createStatement();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("************* Map Whole SQL *************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, (sql_whole));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("*****************************************"));
+ rs = st.executeQuery(sql_whole);
+ rsmd = rs.getMetaData();
+ int numberOfColumns = rsmd.getColumnCount();
+ HashMap colHash = new HashMap();
+ DataRow dr = null;
+ int j = 0;
+ int rowCount = 0;
+ while(rs.next()) {
+
+ rowCount++;
+
+ if(rowCount%10000 == 0) {
+ // to check performance
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Performance check for "+rowCount+" starting**************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:"
+ + (runtime.totalMemory() - runtime.freeMemory()) / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
+ + runtime.freeMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
+ System.out.println(rowCount+"TH ROW****##### END #####");
+
+ //
+ }
+ sw.insertRow(rowNum);
+ cellNum = -1;
+ colHash = new HashMap();
+ for (int i = 1; i <= numberOfColumns; i++) {
+ colHash.put(rsmd.getColumnName(i).toUpperCase(), strip.stripHtml(rs.getString(i)));
+ }
+ rd.reportDataRows.resetNext();
+ dr = rd.reportDataRows.getNext();
+ styleRowCell = null;
+ if (dr.isRowFormat() && styles != null)
+ styleRowCell = (XSSFCellStyle) styles.get(nvl(/*dr.getFormatId(),*/"","default"));
+ j = 0;
+ //if(rowCount%1000 == 0) wb.write(sos);
+
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ //cellNum = -1;
+ //for (rd.reportRowHeaderCols.resetNext(); rd.reportRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ //RowHeaderCol rhc = rd.reportRowHeaderCols.getRowHeaderCol(0);
+ //if (firstPass)
+ // rhc.resetNext();
+ //RowHeader rh = rhc.getRowHeader(rowCount-1);
+ sw.createCell(cellNum, rowCount, styleDefaultCell.getIndex());
+
+ //} // for
+ }*/
+ firstPass = false;
+ //cellNum = -1;
+ for (dr.resetNext(); dr.hasNext();j++) {
+ styleCell = null;
+ //for (chr.resetNext(); chr.hasNext();) {
+ //ColumnHeader ch = chr.getNext();
+ DataValue dv = dr.getNext();
+ HtmlFormatter htmlFormat = dv.getCellFormatter();
+
+ if (htmlFormat != null && dv.getFormatId() != null && styles != null)
+ styleCell = (XSSFCellStyle) styles.get(nvl(/*dv.getFormatId()*/"","default"));
+ String value = nvl((String)colHash.get(dv.getColId().toUpperCase()));
+
+ boolean bold = false;
+
+ if(dv.isVisible()) {
+ cellNum += 1;
+ //System.out.println("Stripping HTML 1");
+ //cell.setCellValue(strip.stripHtml(dv.getDisplayValue()));
+ String dataType = (String) (dataTypeMap.get(dv.getColId()));
+ //System.out.println("Value " + value + " " + (( dataType !=null && dataType.equals("DATE")) || (dv.getColName()!=null && dv.getColName().toLowerCase().endsWith("date"))) );
+ if (dataType!=null && dataType.equals("NUMBER")){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(dv.getDisplayValue());
+ //cellCurrencyNumber = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ sw.createCell(cellNum,zInt,styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (dv.getDisplayValue().startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = dv.getDisplayValue().trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 1 is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDoubleDollar, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(value);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDouble, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDouble, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDouble, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value),styleRowCell.getIndex() );
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(value), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+
+ }
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (dv.getDisplayValue().startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT is "+tempInt);
+ Long tempIntDollar = 0L;
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempIntDollar, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempIntDollar, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempIntDollar, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempInt, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempInt, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempInt, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, temp, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, temp, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, temp, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+ }
+ }
+ }
+ }
+
+ } else if ( ( dataType !=null && dataType.equals("DATE")) || (dv.getDisplayName()!=null && dv.getDisplayName().toLowerCase().endsWith("date")) ||
+ (dv.getColId()!=null && dv.getColId().toLowerCase().endsWith("date")) ||
+ (dv.getColName()!=null && dv.getColName().toLowerCase().endsWith("date")) ) {
+ XSSFCellStyle cellStyle = null;
+ if(styleRowCell!=null) {
+ cellStyle = styleRowCell;
+ } else if (styleCell!=null) {
+ cellStyle = styleCell;
+ } else {
+ cellStyle = styles.get(nvl(/*dv.getFormatId()*/"","date"));
+ }
+
+
+ Date date = null;
+ int flag = 0;
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYHHMMSS"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYYYHHMMSS"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYYYHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("YYYYMMDD"));
+ flag = 1;
+ }
+ if(date==null)
+ date = timestampFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("timestamp"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MONYYYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMYYYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMMMMDDYYYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MONTHYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MONTHYYYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("YYYYMMDDHHMMSS"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDDASHFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("YYYYMMDDDASH"));
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("YYYYMMDDHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("DDMONYYYYHHMMSS"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("DDMONYYYYHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("DDMONYYHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("DDMONYYYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYHHMMSS"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYY"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYHHMM"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYHHMMSS"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMZFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMDDYYYYHHMMZ"));
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYHHMMSS.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ cellStyle.setDataFormat(dateFormatMap.get("MMMMMDDYYYYHHMMSS"));
+ flag = 1;
+ }
+
+ if(date!=null) {
+ //System.out.println("ExcelDate " + HSSFDateUtil.getExcelDate(date));
+ Calendar cal=Calendar.getInstance();
+ cal.setTime(date);
+ //sw.createCell(cellNum, cal,styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ //if(styleRowCell!=null)
+ sw.createCell(cellNum, cal, cellStyle.getIndex());
+ //else if (styleCell!=null)
+ //sw.createCell(cellNum, cal, cellStyle.getIndex());
+ //else
+ //sw.createCell(cellNum, cal, cellStyle.getIndex());
+ } else {
+ //cell.getCellStyle().setDataFormat((short)0);
+ //if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value), cellStyle.getIndex());
+ //else if (styleCell!=null)
+ //sw.createCell(cellNum, Utils.excelEncode(value), cellStyle.getIndex());
+ //else
+ //sw.createCell(cellNum, Utils.excelEncode(value), cellStyle.getIndex());
+
+ }
+ //cellDate.setCellValue(date);
+ //cellDate.setCellValue(value); //cellDate.setCellValue(date);
+ //cellDate.setCellValue(dv.getDisplayValue());
+
+ } else if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(dv.getDisplayValue());
+ int zInt = 0;
+ if (value.equals("null")){
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, zInt, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, zInt, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, zInt, styleDefaultCell.getIndex());
+
+ } else {
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 2IF is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar,styleRowCell.getIndex() );
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDoubleDollar, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+
+
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempDoubleStr = value.trim();
+ tempDoubleStr = tempDoubleStr.replaceAll(" ", "").substring(0);
+ if ((tempDoubleStr.indexOf(","))!= -1){
+ tempDoubleStr = tempDoubleStr.replaceAll(",", "");
+ }
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(tempDoubleStr);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDouble, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDouble, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDouble, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDoubleStr), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDoubleStr), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempDoubleStr), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+ }
+
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT 2 is "+tempInt);
+
+ Long tempIntDollar = 0L;
+
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempIntDollar,styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempIntDollar,styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempIntDollar,styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempInt), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempInt),styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempInt), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, temp, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, temp, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, temp, styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+
+ }
+ }
+ } else {
+ sw.createCell(cellNum, "", styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ }
+ }
+ }
+
+
+ }
+ else {
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("General"));
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styleCell.getIndex());
+ else {
+ if(nvl(value).startsWith(" "))
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styles.get(nvl(/*dv.getFormatId(),*/"","defaultLeft")).getIndex());
+ else
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+
+ }
+
+ }
+
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //cell.setCellStyle(styleCurrencyTotal);
+ }
+ else {
+ //cell.setCellStyle(styleTotal);
+ }
+ } else {
+ //cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ //System.out.println("2IF "+ (dr.isRowFormat()) + " " + (dv.isCellFormat()) + " " + (styles!=null));
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null) {
+ //cell.setCellStyle((HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default")));
+ continue;
+ }
+ //System.out.println("3IF "+ (htmlFormat != null) + " " + (dv.getFormatId() != null) + " " + (bold == false) + " "+ (styles != null));
+ if (htmlFormat != null && dv.getFormatId() != null && bold == false
+ && styles != null) {
+ //cell.setCellStyle((HSSFCellStyle) styles.get(nvl(/*dv.getFormatId()*/"","default")));
+ } //else if (bold == false)
+ //cell.setCellStyle(styleDefault);
+ } // dv.isVisible
+
+ }
+ rowNum += 1;
+ sw.endRow();
+
+ }
+ if(rd.reportTotalRowHeaderCols!=null) {
+ rowCount++;
+ sw.insertRow(rowNum);
+ cellNum = -1;
+ rd.reportTotalRowHeaderCols.resetNext();
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportTotalRowHeaderCols.getNext();
+ RowHeader rh = rhc.getRowHeader(0);
+ if (dr.isRowFormat() && styles != null)
+ styleRowCell = (XSSFCellStyle) styles.get(nvl(/*dr.getFormatId(),*/"","default"));
+
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, strip.stripHtml(rh.getRowTitle()), styleRowCell.getIndex());
+ else
+ sw.createCell(cellNum, strip.stripHtml(rh.getRowTitle()), styleDefaultCell.getIndex());
+ rd.reportDataTotalRow.resetNext();
+ //rd.reportDataTotalRow.getNext();
+ DataRow drTotal = rd.reportDataTotalRow.getNext();
+ if(drTotal!=null) {
+ drTotal.resetNext(); drTotal.getNext();
+ for (; drTotal.hasNext();) {
+ DataValue dv = drTotal.getNext();
+ if(dv.isVisible()) {
+ cellNum += 1;
+ styleCell = null;
+ String value = dv.getDisplayValue();
+ sw.createCell(cellNum,value,styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }
+ }
+ rowNum += 1;
+ sw.endRow();
+ }
+
+
+
+
+
+/* // To Display Total Values for Linear report
+ if(rd.reportDataTotalRow!=null) {
+ row = sheet.createRow(rowNum);
+ cellNum = -1;
+ rd.reportTotalRowHeaderCols.resetNext();
+ //for (rd.reportTotalRowHeaderCols.resetNext(); rd.reportTotalRowHeaderCols.hasNext();) {
+ cellNum += 1;
+ RowHeaderCol rhc = rd.reportTotalRowHeaderCols.getNext();
+ RowHeader rh = rhc.getRowHeader(0);
+ row.createCell((short) cellNum).setCellValue(strip.stripHtml(rh.getRowTitle()));
+ row.getCell((short) cellNum).setCellStyle(styleDefaultTotal);
+ //}
+
+ DataRow drTotal = rd.reportDataTotalRow.getNext();
+ //cellNum = -1;
+ for (drTotal.resetNext(); drTotal.hasNext();j++) {
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ DataValue dv = drTotal.getNext();
+ String value = dv.getDisplayValue();
+ cell.setCellValue(value);
+ boolean bold = false;
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ cell.setCellStyle(styleCurrencyTotal);
+ } else {
+ cell.setCellStyle(styleTotal);
+ }
+ } else {
+ cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ }
+ }*/
+
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ } catch (ReportSQLException ex) {
+ throw new RaptorException(ex);
+ } catch (Exception ex) {
+ if(!(ex.getCause() instanceof java.net.SocketException) )
+ throw new RaptorException (ex);
+ } finally {
+ try {
+ if(conn!=null)
+ conn.close();
+ if(st!=null)
+ st.close();
+ if(rs!=null)
+ rs.close();
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ String footer = (String) session.getAttribute("FOOTER_"+index);
+ if(nvl(footer).length()>0) {
+ footer = Utils.replaceInString(footer, "<BR/>", " ");
+ footer = Utils.replaceInString(footer, "<br/>", " ");
+ footer = Utils.replaceInString(footer, "<br>", " ");
+ footer = strip.stripHtml(nvl(footer).trim());
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ cellNum = 0;
+ sw.createCell(cellNum, footer.replaceAll("&", "&amp;"), styleDefaultCell.getIndex());
+ sw.endRow();
+ rowNum += 1;
+ }
+
+ if(Globals.getShowDisclaimer()) {
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ cellNum = 0;
+
+ sw.createCell(cellNum, org.openecomp.portalsdk.analytics.system.Globals.getFooterFirstLine().replaceAll("&", "&amp;"), styleDefaultCell.getIndex());
+ sw.endRow();
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ cellNum = 0;
+ sw.createCell(cellNum, org.openecomp.portalsdk.analytics.system.Globals.getFooterSecondLine().replaceAll("&", "&amp;"), styleDefaultCell.getIndex());
+ sw.endRow();
+ }
+
+ } else {
+ //start data from rd
+
+ int rowCount = 0;
+ DataRow dr = null;
+ for (rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext();) {
+ rowCount++;
+
+
+ dr = rd.reportDataRows.getNext();
+ sw.insertRow(rowNum);
+
+ cellNum = -1;
+
+ if (rr.getReportType().equals(AppConstants.RT_LINEAR) && rd.reportTotalRowHeaderCols!=null) {
+ rd.reportRowHeaderCols.resetNext(0);
+ if(rd.reportTotalRowHeaderCols!=null) {
+ //cellNum = -1;
+ //for (rd.reportRowHeaderCols.resetNext(); rd.reportRowHeaderCols.hasNext();) {
+ //a commented to suppress rownum
+ //a cellNum += 1;
+ //RowHeaderCol rhc = rd.reportRowHeaderCols.getRowHeaderCol(0);
+ //if (firstPass)
+ // rhc.resetNext();
+ //RowHeader rh = rhc.getRowHeader(rowCount-1);
+ //a sw.createCell(cellNum, rowCount, styleDefaultCell.getIndex());
+ //} // for
+ }
+
+ }
+ firstPass = false;
+ //cellNum = -1;
+ int j = 0;
+
+ for (dr.resetNext(); dr.hasNext();j++) {
+ DataValue dv = dr.getNext();
+ styleCell = null;
+ boolean bold = false;
+ String value = nvl(dv.getDisplayValue());
+ value = strip.stripHtml(value);
+ HtmlFormatter htmlFormat = dv.getCellFormatter();
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null)
+ styleCell = (XSSFCellStyle) styles.get(nvl(/*dr.getFormatId(),*/"","default"));
+ if (htmlFormat != null && dv.getFormatId() != null && styles != null)
+ styleCell = (XSSFCellStyle) styles.get(nvl(/*dv.getFormatId(),*/"","default"));
+
+ if(dv.isVisible()) {
+ cellNum += 1;
+ //cell = row.createCell((short) cellNum);
+ //System.out.println("Stripping HTML 1");
+ //cell.setCellValue(strip.stripHtml(value));
+ String dataType = (String) (dataTypeMap.get(dv.getColId()));
+ //System.out.println(" The Display Value is ********"+value + " " + dv.getDisplayTotal() + " " + dv.getColName());
+
+ if (dataType!=null && dataType.equals("NUMBER")){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(value);
+ //cellCurrencyNumber = row.createCell((short) cellNum);
+ int zInt = 0;
+ if (value.equals("null")){
+ sw.createCell(cellNum,zInt,styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }else{
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 1 is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDoubleDollar, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(value);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDouble, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDouble, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDouble, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value),styleRowCell.getIndex() );
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(value), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+
+ }
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT is "+tempInt);
+ Long tempIntDollar = 0L;
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempIntDollar, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempIntDollar, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempIntDollar, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempInt, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempInt, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempInt, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, temp, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, temp, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, temp, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+
+
+ }
+ //int temp = Integer.parseInt(value.trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ }
+ }
+ }
+
+ }else if ( ( dataType !=null && dataType.equals("DATE")) || (dv.getDisplayName()!=null && dv.getDisplayName().toLowerCase().endsWith("date")) ||
+ (dv.getColId()!=null && dv.getColId().toLowerCase().endsWith("date")) ||
+ (dv.getColName()!=null && dv.getColName().toLowerCase().endsWith("date")) ) {
+ Date date = null;
+ int flag = 0;
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = timestampFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MONTHYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDDASHFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = YYYYMMDDHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = DDMONYYYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYHHMMSSFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMDDYYYYHHMMZFormat.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+ if(date==null)
+ date = MMMMMDDYYYYHHMMSS.parse(value, new ParsePosition(0));
+ if(date != null && flag == 0) {
+ flag = 1;
+ }
+
+
+ if(date!=null) {
+ Calendar cal=Calendar.getInstance();
+ cal.setTime(date);
+ //sw.createCell(cellNum, cal,styles.get(nvl(/*dv.getFormatId()*/"","default")).getIndex());
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, cal, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, cal, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, cal, styles.get(nvl(/*dv.getFormatId()*/"","date")).getIndex());
+
+ } else {
+ /*cell.getCellStyle().setDataFormat((short)0);*/
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(value), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(value), styles.get(nvl(/*dv.getFormatId(),*/"","date")).getIndex());
+
+ }
+ //cellDate.setCellValue(date);
+ //cellDate.setCellValue(value);
+
+ }else if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ //cellNumber = row.createCell((short) cellNum);
+ //cellNumber.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
+ //cellNumber.setCellValue(value);
+ int zInt = 0;
+ if (value.equals("null")){
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, zInt, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, zInt, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, zInt, styleDefaultCell.getIndex());
+ } else {
+
+ if ((value.indexOf("."))!= -1){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempDollar = value.trim();
+ tempDollar = tempDollar.replaceAll(" ", "").substring(0);
+ tempDollar = tempDollar.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempDollar);
+ //System.out.println("Before copy Value |" + tempDollar);
+ //tempDollar = String.copyValueOf(tempDollar.toCharArray(), 1, tempDollar.length()-1);
+ //System.out.println("After copy Value |" + tempDollar);
+ if ((tempDollar.indexOf(","))!= -1){
+ tempDollar = tempDollar.replaceAll(",", "");
+ }
+ //System.out.println("The final string 2IF is "+tempDollar);
+ double tempDoubleDollar = 0.0;
+ try {
+ tempDoubleDollar = Double.parseDouble(tempDollar);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar,styleRowCell.getIndex() );
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDoubleDollar, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDoubleDollar, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempDollar), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+
+
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempDoubleStr = value.trim();
+ tempDoubleStr = tempDoubleStr.replaceAll(" ", "").substring(0);
+ if ((tempDoubleStr.indexOf(","))!= -1){
+ tempDoubleStr = tempDoubleStr.replaceAll(",", "");
+ }
+ double tempDouble = 0.0;
+ try {
+ tempDouble = Double.parseDouble(tempDoubleStr);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempDouble, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempDouble, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempDouble, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDoubleStr), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempDoubleStr), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempDoubleStr), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }
+
+ }else {
+ if (!(value.equals(""))){
+ if ((value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //if (value.startsWith("$")){
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("($#,##0.00);($#,##0.00)"));
+ String tempInt = value.trim();
+ tempInt = tempInt.replaceAll(" ", "").substring(0);
+ tempInt = tempInt.replaceAll("\\$", "").substring(0);
+ //System.out.println("SUBSTRING |" + tempInt);
+ //System.out.println("Before copy Value |" + tempInt);
+ //tempInt = String.copyValueOf(tempInt.toCharArray(), 1, tempInt.length()-1);
+ //System.out.println("After copy Value |" + tempInt);
+ if ((tempInt.indexOf(","))!= -1){
+ tempInt = tempInt.replaceAll(",", "");
+ }
+ //System.out.println("The final string INT 2 is "+tempInt);
+
+ Long tempIntDollar = 0L;
+
+ try {
+ tempIntDollar = Long.parseLong(tempInt);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, tempIntDollar,styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, tempIntDollar,styleCell.getIndex());
+ else
+ sw.createCell(cellNum, tempIntDollar,styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempInt), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempInt),styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempInt), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }else{
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("#,##0.00"));
+ String tempStr = value.trim();
+ if ((tempStr.indexOf(","))!= -1){
+ tempStr = tempStr.replaceAll(",", "");
+ }
+ Long temp = 0L;
+
+ try {
+ temp = Long.parseLong(tempStr);
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, temp, styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, temp, styleCell.getIndex());
+ else
+ sw.createCell(cellNum, temp, styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ } catch (NumberFormatException ne) {
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, Utils.excelEncode(tempStr), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }
+ //int temp = Integer.parseInt(value.trim());
+ // cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ } else {
+ sw.createCell(cellNum, "", styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }
+ }
+
+
+ }
+ else {
+ //styleDefault.setDataFormat(HSSFDataFormat.getBuiltinFormat("General"));
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styleRowCell.getIndex());
+ else if (styleCell!=null)
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styleCell.getIndex());
+ else
+ sw.createCell(cellNum, strip.stripHtml(Utils.excelEncode(value)), styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+
+ //if (!(value.equals(""))){
+ //int temp = Integer.parseInt(value.trim());
+ //cell.setCellValue(temp);
+ //}else{
+ // cell.setCellValue(strip.stripHtml(value));
+ //}
+ //HSSFCellStyle styleFormat = null;
+ //HSSFCellStyle numberStyle = null;
+ //HSSFFont formatFont = null;
+ //short fgcolor = 0;
+ //short fillpattern = 0;
+ //System.out.println("1IF "+ (dv.isBold()) + " "+ value + " " + dv.getDisplayTotal() + " " + dv.getColName() );
+ if (dv.isBold()) {
+ if((dv.getDisplayTotal()!=null && dv.getDisplayTotal().equals("SUM(")) || (dv.getColName()!=null && dv.getColName().indexOf("999")!=-1)){
+ if (value!=null && (value.trim().startsWith("$")) || (value.trim().startsWith("-$") )) {
+ //cell.setCellStyle(styleCurrencyTotal);
+ }
+ else {
+ //cell.setCellStyle(styleTotal);
+ }
+ } else {
+ //cell.setCellStyle(styleDefaultTotal);
+ }
+ bold = true;
+ }
+ //System.out.println("2IF "+ (dr.isRowFormat()) + " " + (dv.isCellFormat()) + " " + (styles!=null));
+ if ((dr.isRowFormat() && !dv.isCellFormat()) && styles != null) {
+ //cell.setCellStyle((HSSFCellStyle) styles.get(nvl(dr.getFormatId(),"default")));
+ continue;
+ }
+ //System.out.println("3IF "+ (htmlFormat != null) + " " + (dv.getFormatId() != null) + " " + (bold == false) + " "+ (styles != null));
+ if (htmlFormat != null && dv.getFormatId() != null && bold == false
+ && styles != null) {
+ // cell.setCellStyle((HSSFCellStyle) styles.get(nvl(/*dv.getFormatId()*/"","default")));
+ } //else if (bold == false)
+ //cell.setCellStyle(styleDefault);
+ } // if (dv.isVisible)
+ } // for
+
+ /*for (int tmp=0; tmp<dataTypeMap.size(); tmp++){
+ String dataTypeStr = (String)(dataTypeMap.get(tmp));
+ if(dataTypeStr.equals("NUMBER")){
+ cell.setCellStyle(styleNumber);
+ }else if (dataTypeStr.equals("VARCHAR2")){
+ cell.setCellStyle(styleDefault);
+
+ }else if (dataTypeStr.equals("DATE")){
+ cell.setCellStyle(styleDate);
+ }else{
+
+ }
+
+ }*/
+ rowNum += 1;
+ sw.endRow();
+ } // for
+
+ if (rr.getReportType().equals(AppConstants.RT_LINEAR) && rd.reportTotalRowHeaderCols!=null) {
+
+ for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();) {
+ rowCount++;
+ sw.insertRow(rowNum);
+ cellNum = -1;
+ cellNum += 1;
+
+ RowHeaderCol rhc = rd.reportTotalRowHeaderCols.getNext();
+ RowHeader rh = rhc.getRowHeader(0);
+ if (dr.isRowFormat() && styles != null)
+ styleRowCell = (XSSFCellStyle) styles.get(nvl(/*dr.getFormatId(),*/"","default"));
+ if(styleRowCell!=null)
+ sw.createCell(cellNum, strip.stripHtml(rh.getRowTitle()), styleRowCell.getIndex());
+ else
+ sw.createCell(cellNum, strip.stripHtml(rh.getRowTitle()), styleDefaultCell.getIndex());
+
+ DataRow drTotal = rd.reportDataTotalRow.getNext();
+ if(drTotal!=null) {
+ drTotal.resetNext(); drTotal.getNext();
+ for (; drTotal.hasNext();) {
+ cellNum += 1;
+ styleCell = null;
+ DataValue dv = drTotal.getNext();
+ String value = dv.getDisplayValue();
+ sw.createCell(cellNum,value,styles.get(nvl(/*dv.getFormatId(),*/"","default")).getIndex());
+ }
+ }
+
+ rowNum += 1;
+ sw.endRow();
+ }
+
+
+ String footer = (String) session.getAttribute("FOOTER_"+index);
+ if(nvl(footer).length()>0) {
+ footer = Utils.replaceInString(footer, "<BR/>", " ");
+ footer = Utils.replaceInString(footer, "<br/>", " ");
+ footer = Utils.replaceInString(footer, "<br>", " ");
+ footer = strip.stripHtml(nvl(footer).trim());
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ cellNum = 0;
+ sw.createCell(cellNum, footer.replaceAll("&", "&amp;"), styleDefaultCell.getIndex());
+ sw.endRow();
+ rowNum += 1;
+ }
+
+
+ if(Globals.getShowDisclaimer()) {
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ cellNum = 0;
+
+ sw.createCell(cellNum, org.openecomp.portalsdk.analytics.system.Globals.getFooterFirstLine().replaceAll("&", "&amp;"), styleDefaultCell.getIndex());
+ sw.endRow();
+ rowNum += 1;
+ sw.insertRow(rowNum);
+ cellNum = 0;
+ sw.createCell(cellNum, org.openecomp.portalsdk.analytics.system.Globals.getFooterSecondLine().replaceAll("&", "&amp;"), styleDefaultCell.getIndex());
+ sw.endRow();
+ }
+
+
+ }
+ // end data from rd
+ }
+
+ // System.out.println(" Last Row " + wb.getSheetAt(0).getLastRowNum());
+ }
+
+ private void paintXSSFExcelParams(XSSFWorkbook wb,int rowNum,int col,ArrayList paramsList, String customizedParamInfo, XSSFSheet sheet, String reportTitle, String reportDescr) throws IOException {
+ //HSSFSheet sheet = wb.getSheet(getSheetName());
+ int cellNum = 0;
+ XSSFRow row = null;
+ short s1 = 0, s2 = (short) 1;
+ HtmlStripper strip = new HtmlStripper();
+ // Name Style
+ XSSFCellStyle styleName = wb.createCellStyle();
+ //styleName.setFillBackgroundColor(HSSFColor.GREY_80_PERCENT.index);
+ styleName.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
+ //styleName.setFillPattern(HSSFCellStyle.SPARSE_DOTS);
+ styleName.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleName.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleName.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleName.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ styleName.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleName.setDataFormat((short)0);
+ XSSFFont font = wb.createFont();
+ font.setFontHeight((short) (font_size / 0.05));
+ font.setFontName("Tahoma");
+ font.setColor(HSSFColor.BLACK.index);
+ font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ styleName.setFont(font);
+ //Data Style
+
+ // Create some fonts.
+ XSSFFont fontDefault = wb.createFont();
+ // Initialize the styles & fonts.
+ // The default will be plain .
+ fontDefault.setColor((short) HSSFFont.COLOR_NORMAL);
+ fontDefault.setFontHeight((short) (font_size / 0.05));
+ fontDefault.setFontName("Tahoma");
+ fontDefault.setItalic(true);
+ // Style default will be normal with no background
+ XSSFCellStyle styleValue = wb.createCellStyle();
+ styleValue.setDataFormat((short)0);
+ styleValue.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+ styleValue.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+ styleValue.setBorderTop(HSSFCellStyle.BORDER_THIN);
+ styleValue.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ styleValue.setBorderRight(HSSFCellStyle.BORDER_THIN);
+ // styleValue.setFillForegroundColor(HSSFColor.YELLOW.index);
+ styleValue.setFillPattern(HSSFCellStyle.NO_FILL);
+ styleValue.setFont(fontDefault);
+ XSSFCell cell = null;
+ XSSFCellStyle styleDescription = wb.createCellStyle();
+ styleDescription.setAlignment(HSSFCellStyle.ALIGN_CENTER);
+// styleDescription.setBorderBottom(HSSFCellStyle.BORDER_THIN);
+// styleDescription.setBorderTop(HSSFCellStyle.BORDER_THIN);
+// styleDescription.setBorderRight(HSSFCellStyle.BORDER_THIN);
+// styleDescription.setBorderLeft(HSSFCellStyle.BORDER_THIN);
+ XSSFFont fontDescr = wb.createFont();
+ fontDescr.setFontHeight((short) (font_header_descr_size / 0.05));
+ fontDescr.setFontName("Tahoma");
+ fontDescr.setColor(HSSFColor.BLACK.index);
+ fontDescr.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
+ styleDescription.setFont(font);
+ XSSFCell cellDescr = null;
+ int paramSeq = 0;
+ Header header = sheet.getHeader();
+ StringBuffer strBuf = new StringBuffer();
+ if(!Globals.customizeFormFieldInfo() || customizedParamInfo.length()<=0) {
+ for (Iterator iter = paramsList.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+ //System.out.println("\"" + value.getId() + " = " + value.getName() + "\"");
+ if(nvl(value.getId()).trim().length()>0 && (!nvl(value.getId()).trim().equals("BLANK"))) {
+ paramSeq += 1;
+ if(paramSeq <= 1) {
+ row = sheet.createRow(++rowNum);
+ cell = row.createCell((short) 0);
+ sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, s1, s2));
+ cellDescr = row.createCell((short) 0);
+ cellDescr.setCellValue("Run-time Parameters");
+ cellDescr.setCellStyle(styleDescription);
+
+
+ strBuf.append(reportTitle+"\n");
+ //strBuf.append("Run-time Parameters\n");
+ }
+ row = sheet.createRow(++rowNum);
+ cellNum = 0;
+ //System.out.println("RowNum " + rowNum + " " + value.getId() + " " +value.getName());
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.getId());
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.getName().replaceAll("~",","));
+ cell.setCellStyle(styleValue);
+
+ //strBuf.append(value.getId()+": "+ value.getName()+"\n");
+ }
+ } //for
+ } else {
+ strBuf.append(reportTitle+"\n");
+ Document document = new Document();
+ document.open();
+ HTMLWorker worker = new HTMLWorker(document);
+ StyleSheet style = new StyleSheet();
+ style.loadTagStyle("body", "leading", "16,0");
+ ArrayList p = HTMLWorker.parseToList(new StringReader(customizedParamInfo), style);
+ String name = "";
+ String token = "";
+ String value = "";
+ String s = "";
+ PdfPTable pdfTable = null;
+ for (int k = 0; k < p.size(); ++k){
+ if(p.get(k) instanceof Paragraph)
+ s = ((Paragraph)p.get(k)).toString();
+ else { /*if ((p.get(k) instanceof PdfPTable))*/
+ pdfTable = ((PdfPTable)p.get(k));
+ }
+ //todo: Logic for parsing pdfTable should be added after upgrading to iText 5.0.0
+ //s = Utils.replaceInString(s, ",", "|");
+ s = s.replaceAll(",", "|");
+ s = s.replaceAll("~", ",");
+ if(s.indexOf(":")!= -1) {
+ //System.out.println("|"+s+"|");
+ row = sheet.createRow(++rowNum);
+ cell = row.createCell((short) 0);
+ sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, s1, s2));
+ cellDescr = row.createCell((short) 0);
+ cellDescr.setCellValue("Run-time Parameters");
+ cellDescr.setCellStyle(styleDescription);
+
+ //strBuf.append("Run-time Parameters\n");
+ StringTokenizer st = new StringTokenizer(s.trim(), "|");
+ while(st.hasMoreTokens()) {
+ token = st.nextToken();
+ token = token.trim();
+ if (!(token.trim().equals("|") || token.trim().equals("]]") || token.trim().equals("]") || token.trim().equals("[") )) {
+ if(token.endsWith(":")) {
+ name = token;
+ name = name.substring(0, name.length()-1);
+ if(name.startsWith("["))
+ name = name.substring(1);
+ value = st.nextToken();
+ if(nvl(value).endsWith("]"))value = nvl(value).substring(0, nvl(value).length()-1);
+ } /*else if(name != null && name.length() > 0) {
+ value = st.nextToken();
+ if(value.endsWith("]]"))value = value.substring(0, value.length()-1);
+ }*/
+ if(name!=null && name.trim().length()>0) {
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(name.trim());
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.trim());
+ cell.setCellStyle(styleValue);
+ //strBuf.append(name.trim()+": "+ value.trim()+"\n");
+ }
+/* if(token.endsWith(":") && (value!=null && value.trim().length()<=0) && (name!=null && name.trim().length()>0 && name.endsWith(":"))) {
+ name = name.substring(0, name.indexOf(":")+1);
+ //value = token.substring(token.indexOf(":")+1);
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(name.trim());
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue(value.trim());
+ cell.setCellStyle(styleValue);
+
+ //strBuf.append(name.trim()+": "+ value.trim()+"\n");
+ value = "";
+ name = "";
+ }
+*/ }
+ int cw = 0;
+ cw = name.trim().length() + 12;
+ // if(i!=cellWidth.size()-1)
+ if(sheet.getColumnWidth((short)0)< (short) name.trim().length())
+ sheet.setColumnWidth((short)0, (short) name.trim().length());
+ if(sheet.getColumnWidth((short)1)< (short) value.trim().length())
+ sheet.setColumnWidth((short)1, (short) value.trim().length());
+ name = "";
+ value = "";
+
+ }
+
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ cell.setCellValue("Report Date/Time");
+ cell.setCellStyle(styleName);
+ cellNum += 1;
+ cell = row.createCell((short) cellNum);
+
+ cell.setCellValue(dtimestamp.format(sysdate)+" "+Globals.getTimeZone());
+ cell.setCellStyle(styleValue);
+
+ } catch(Exception ex) {
+ //ex.printStackTrace();
+ }
+
+
+ }
+ }
+
+
+/* Iterator iter1 = paramsList.iterator();
+ s1 = 0; s2 = (short)10;
+ if(iter1.hasNext()) {
+ row = sheet.createRow((short) ++rowNum);
+ cellNum = 0;
+ cell = row.createCell((short) cellNum);
+ sheet.addMergedRegion(new Region(rowNum, s1, rowNum, s2));
+ cell.setCellValue(strip.stripHtml(customizedParamInfo));
+ }
+*/
+/* rowNum += 2;
+ row = sheet.createRow(rowNum);*/
+ } // if
+ Iterator iterCheck = paramsList.iterator();
+ if(iterCheck.hasNext()) {
+ rowNum += 2;
+ row = sheet.createRow(rowNum);
+ }
+ header.setCenter(HSSFHeader.font("Tahoma", "")+ HSSFHeader.fontSize((short) font_header_title_size)+strBuf.toString());
+ }
+
+ // Trying different -->
+ public void createHTMLFileContent(Writer out, ReportData rd,
+ ReportRuntime rr, String sql_whole, HttpServletRequest request, HttpServletResponse response)
+ throws RaptorException, IOException {
+ //response.setContentType("application/vnd.ms-excel");
+ //response.setHeader("Content-disposition",
+ // "attachment; filename=" +
+ // "Example.xls" );
+ PrintWriter csvOut = response.getWriter();
+ HtmlStripper strip = new HtmlStripper();
+ ResultSet rs = null;
+ Connection conn = null;
+ Statement st = null;
+ ResultSetMetaData rsmd = null;
+ ColumnHeaderRow chr = null;
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+ csvOut.println("<HTML>\n" +
+ "<HEAD><TITLE>" + rr.getReportName() + "</TITLE></HEAD>\n" +
+ "<BODY>\n" );
+ System.out.println("HTML-Excel Generation Triggered: " + new java.util.Date());
+ csvOut.print("<TABLE>");
+ if (Globals.getPrintParamsInCSVDownload()) {
+ ArrayList paramsList = rr.getParamNameValuePairsforPDFExcel(request, 1);
+ int paramSeq = 0;
+ for (Iterator iter = paramsList.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+ //System.out.println("\"" + value.getId() + " = " + value.getName() + "\"");
+ if(nvl(value.getId()).trim().length()>0 && (!nvl(value.getId()).trim().equals("BLANK"))) {
+ paramSeq += 1;
+ if(paramSeq <= 1) {
+ csvOut.println("<TR><TD COLSPAN=\"2\">" + "Run-time Parameters" + "</TD></TR>");
+ //strBuf.append("Run-time Parameters\n");
+ }
+ csvOut.println("<TR><TD>" + value.getId() +"</TD>");
+ csvOut.println("<TD>" + value.getName().replaceAll("~",",")+ "</TD>");
+ csvOut.println("</TR>");
+
+ //strBuf.append(value.getId()+": "+ value.getName()+"\n");
+ }
+ } //for
+ csvOut.println("<TR><TD COLSPAN=\"2\"> &nbsp;</TD></TR>");
+ csvOut.println("<TR><TD COLSPAN=\"2\"> &nbsp;</TD></TR>");
+ System.out.println("HTML-Excel: Header Rendering complete " + new java.util.Date());
+ }
+ int rowCount = 0;
+ if(nvl(sql_whole).length()>0) {
+ try {
+ conn = ConnectionUtils.getConnection(rr.getDbInfo());
+ st = conn.createStatement();
+ Log.write("[SQL] " + sql_whole, 4);
+ int downloadLimit = Globals.getDownloadLimit();
+ Callable<ResultSet> callable = new ExecuteQuery(st, sql_whole, downloadLimit);
+ ExecutorService executor = new ScheduledThreadPoolExecutor(5);
+ System.out.println("Time Started" + new java.util.Date());
+ Future<ResultSet> future = executor.submit(callable);
+ try {
+ rs = future.get(900, TimeUnit.SECONDS);
+ } catch (TimeoutException ex) {
+ System.out.println("Cancelling Query");
+ st.cancel();
+ System.out.println("Query Cancelled");
+ throw new Exception("user requested");
+ }
+ rsmd = rs.getMetaData();
+ int numberOfColumns = rsmd.getColumnCount();
+ HashMap colHash = new HashMap();
+
+ if(rd!=null) {
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ chr = rd.reportColumnHeaderRows.getNext();
+ csvOut.println("<TR>");
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ csvOut.print("<TD bgColor=\"8F9381\">" + ch.getColumnTitle() + "</TD>");
+ //for (int i = 1; i < ch.getColSpan(); i++)
+ // csvOut.print(",");
+
+ }
+ } // for
+ csvOut.println("</TR>");
+ } // for
+
+
+ while(rs.next()) {
+ csvOut.println("<TR>");
+/* if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
+ csvOut.print(Globals.getUserDefinedMessageForMemoryLimitReached() + " " + rowCount +"records out of " + rr.getReportDataSize() + " were downloaded to CSV.");
+ break;
+ }
+*/ rowCount++;
+ colHash = new HashMap();
+ for (int i = 1; i <= numberOfColumns; i++) {
+ colHash.put(rsmd.getColumnName(i), rs.getString(i));
+ }
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ csvOut.println("<TD>" + strip.stripCSVHtml(nvl((String)colHash.get(ch.getLinkColId().toUpperCase()))) + "</TD>");
+ }
+
+ }
+ csvOut.println("</TR>");
+ }
+ System.out.println("Downloaded Rows in HTML-Excel " + rowCount + " : "+ new java.util.Date());
+ if(rowCount == 0) {
+ csvOut.print("<TR><TD COLSPAN=\""+ numberOfColumns + "\">No Data Found</TD></TR>");
+ } else {
+ }
+ } else {
+ csvOut.println("<TR><TD COLSPAN=\""+ numberOfColumns + "\">No Data Found</TD></TR>");
+ }
+ csvOut.println("</TABLE></BODY>\n</HTML>");
+
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ } catch (ReportSQLException ex) {
+ throw new RaptorException(ex);
+ } catch (Exception ex) {
+ throw new RaptorException (ex);
+ } finally {
+ try {
+ if(conn!=null)
+ conn.close();
+ if(st!=null)
+ st.close();
+ if(rs!=null)
+ rs.close();
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ //csvOut.flush();
+ } else {
+ boolean firstPass = true;
+ int numberOfColumns = 0;
+ if(rd!=null) {
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();) {
+ chr = rd.reportColumnHeaderRows.getNext();
+ csvOut.println("<TR>");
+ for (rd.reportRowHeaderCols.resetNext(1); rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+
+ if (firstPass) {
+ numberOfColumns++;
+ csvOut.print("<TD bgColor=\"8F9381\">" + rhc.getColumnTitle() + "</TD>");
+ }
+ //csvOut.print(",");
+ } // for
+
+
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if(ch.isVisible()) {
+ if(firstPass) numberOfColumns++;
+ csvOut.print("<TD bgColor=\"8F9381\">" + ch.getColumnTitle() + "</TD>");
+ //for (int i = 1; i < ch.getColSpan(); i++)
+ //csvOut.print(",");
+ }
+ } // for
+ firstPass = false;
+ csvOut.println("</TR>");
+ } // for
+
+ firstPass = true;
+ for (rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext();) {
+ DataRow dr = rd.reportDataRows.getNext();
+ csvOut.println("<TR>");
+ for (rd.reportRowHeaderCols.resetNext(1); rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ if (firstPass)
+ rhc.resetNext();
+ RowHeader rh = rhc.getNext();
+
+ csvOut.print("<TD bgColor=\"8F9381\">" + strip.stripCSVHtml(rh.getRowTitle()) + "</TD>");
+ } // for
+ firstPass = false;
+
+ for (dr.resetNext(); dr.hasNext();) {
+ DataValue dv = dr.getNext();
+ if(dv.isVisible())
+ csvOut.print("<TD bgColor=\"8F9381\">" + strip.stripCSVHtml(dv.getDisplayValue()) + "</TD>");
+ } // for
+
+ csvOut.println("</TR>");
+
+ } // for
+ //csvOut.flush();
+ } else {
+ csvOut.println("<TR><TD COLSPAN=\""+ numberOfColumns + "\">No Data Found</TD></TR>");
+ }
+ }
+ csvOut.println("</TABLE></BODY>\n</HTML>");
+ System.out.println("HTML-Excel Generation: Data Rendering complete " + new java.util.Date());
+ System.out.println("##### Heap utilization statistics [MB] #####");
+ System.out.println("Used Memory:"
+ + (runtime.maxMemory() - runtime.freeMemory()) / mb);
+ System.out.println("Free Memory:"
+ + runtime.freeMemory() / mb);
+ System.out.println("Total Memory:" + runtime.totalMemory() / mb);
+ System.out.println("Max Memory:" + runtime.maxMemory() / mb);
+
+ } // createCSVFileContent
+
+ /**
+ * Checking if every row and cell in merging region exists, and create those which are not
+ * @param sheet in which check is performed
+ * @param region to check
+ * @param cellStyle cell style to apply for whole region
+ */
+ private void cleanBeforeMergeOnValidCells(XSSFSheet sheet,CellRangeAddress region, XSSFCellStyle cellStyle )
+ {
+ for(int rowNum =region.getFirstRow();rowNum<=region.getLastRow();rowNum++){
+ XSSFRow row= sheet.getRow(rowNum);
+ if(row==null){
+ sheet.createRow(rowNum);
+ }
+ for(int colNum=region.getFirstColumn();colNum<=region.getLastColumn();colNum++){
+ XSSFCell currentCell = row.getCell(colNum);
+ if(currentCell==null){
+ currentCell = row.createCell(colNum);
+ }
+
+ currentCell.setCellStyle(cellStyle);
+
+ }
+ }
+
+
+ }
+} // ReportHandler
+
+
+/**
+ * Adapter for a Writer to behave like an OutputStream.
+ *
+ * Bytes are converted to chars using the platform default encoding.
+ * If this encoding is not a single-byte encoding, some data may be lost.
+ */
+ class WriterOutputStream extends OutputStream {
+
+ private final Writer writer;
+
+ public WriterOutputStream(Writer writer) {
+ this.writer = writer;
+ }
+
+ public void write(int b) throws IOException {
+ // It's tempting to use writer.write((char) b), but that may get the encoding wrong
+ // This is inefficient, but it works
+ write(new byte[] {(byte) b}, 0, 1);
+ }
+
+ public void write(byte b[], int off, int len) throws IOException {
+ writer.write(new String(b, off, len));
+ }
+
+ public void flush() throws IOException {
+ writer.flush();
+ }
+
+ public void close() throws IOException {
+ writer.close();
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportLoader.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportLoader.java
new file mode 100644
index 00000000..2197de66
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/ReportLoader.java
@@ -0,0 +1,1061 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+/* ===========================================================================================
+ * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
+ * Raptor : This tool is used to generate different kinds of reports with lot of utilities
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * ReportLoader.java - This class is used to call database interaction related to reports.
+ * -------------------------------------------------------------------------------------------
+ *
+ *
+ *
+ * Changes
+ * -------
+ * 28-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> isDashboardType is made to return false, as any report can be added to Dashboard. </LI></UL>
+ * 18-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> request Object is passed to prevent caching user/roles - Datamining/Hosting. </LI></UL>
+ * 27-Jul-2009 : Version 8.4 (Sundar);<UL><LI>Admin User is given the same privilege as Super User when the property
+ * "admin_role_equiv_to_super_role" in raptor.properties is Y. A check is made in corresponding to that. </LI></UL>
+ *
+ */
+package org.openecomp.portalsdk.analytics.model;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.Writer;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.base.ReportWrapper;
+import org.openecomp.portalsdk.analytics.model.definition.ReportLogEntry;
+import org.openecomp.portalsdk.analytics.model.search.ReportSearchResult;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.system.fusion.domain.QuickLink;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class ReportLoader extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportLoader.class);
+
+
+ //private static Properties sqlProperty;
+
+ public static String loadCustomReportXML(String reportID) throws RaptorException {
+ Connection connection = DbUtils.getConnection();
+ try {
+ return loadCustomReportXML(connection, reportID);
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // loadCustomReportXML
+
+ public static String loadCustomReportXML(Connection connection, String reportID)
+ throws RaptorException {
+
+ StringBuffer sb = new StringBuffer();
+
+ PreparedStatement stmt = null;
+
+ ResultSet rs = null;
+
+ try {
+
+ String sql = Globals.getLoadCustomReportXml();
+ stmt = connection.prepareStatement(sql);
+ stmt.setInt(1,Integer.parseInt(reportID));
+ rs = stmt.executeQuery();
+ if(Globals.isWeblogicServer()) {
+ java.sql.Clob clob= null;
+ Object obj = null;
+ if (rs.next()) {
+ clob = rs.getClob(1);
+ }
+ else
+ throw new RaptorException("Report " + reportID + " not found in the database");
+
+ int len = 0;
+ char[] buffer = new char[512];
+ Reader in = null;
+ in = new InputStreamReader(clob.getAsciiStream());
+ // if(obj instanceof oracle.sql.CLOB) {
+ // in = ((oracle.sql.CLOB) obj).getCharacterStream();
+ // } else if (obj instanceof weblogic.jdbc.wrapper.Clob) {
+ // in = ((weblogic.jdbc.base.BaseClob) obj).getCharacterStream();
+ // }
+ while ((len = in.read(buffer)) != -1)
+ sb.append(buffer, 0, len);
+ in.close();
+ } else if (Globals.isPostgreSQL() || Globals.isMySQL()) {
+ String clob= null;
+ Object obj = null;
+ if (rs.next()) {
+ sb.append(rs.getString(1));
+ }
+ else
+ throw new RaptorException("Report " + reportID + " not found in the database");
+ } else {
+ /*oracle.sql.CLOB clob = null;
+ if (rs.next())
+ clob = (oracle.sql.CLOB) rs.getObject(1);
+ else
+ throw new RaptorException("Report " + reportID + " not found in the database");
+ int len = 0;
+ char[] buffer = new char[512];
+ Reader in = clob.getCharacterStream();
+ while ((len = in.read(buffer)) != -1)
+ sb.append(buffer, 0, len);
+ in.close();*/
+ throw new RaptorException("only maria db support for this ");
+ }
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } catch (IOException ex) {
+ throw new RaptorException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ return sb.toString();
+ } // loadCustomReportXML
+
+ private static void dbUpdateReportXML(Connection connection, String reportID,
+ String reportXML) throws RaptorException {
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+
+ try {
+ String sql = Globals.getDBUpdateReportXml();
+ stmt = connection.prepareStatement(sql,ResultSet.TYPE_SCROLL_SENSITIVE,
+ ResultSet.CONCUR_UPDATABLE);
+ stmt.setInt(1,Integer.parseInt(reportID));
+ rs = stmt.executeQuery();
+ Writer out = null;
+ /*if(Globals.isWeblogicServer()) {
+ java.sql.Clob clob = null;
+ if (rs.next())
+ clob = rs.getClob(1);
+ else
+ throw new RaptorException("Report " + reportID + " not found in the database");
+
+ if (clob.length() > reportXML.length())
+ clob.truncate(0);
+ //clob.trim(reportXML.length());
+ out = ((weblogic.jdbc.vendor.oracle.OracleThinClob)clob).getCharacterOutputStream();
+ } else*/
+ if (Globals.isPostgreSQL() || Globals.isMySQL()) {
+ if (rs.next()) {
+ rs.updateString("report_xml",reportXML);
+ rs.updateRow();
+ connection.commit();
+ //sb.append(rs.getString(1));
+ }
+ else
+ throw new RaptorException("Report " + reportID + " not found in the database");
+ } else {
+ /*oracle.sql.CLOB clob = null;
+ if (rs.next())
+ clob = (oracle.sql.CLOB) rs.getObject(1);
+ else
+ throw new RaptorException("Report " + reportID + " not found in the database");
+
+ if (clob.length() > reportXML.length())
+ clob.trim(reportXML.length());
+ out = clob.getCharacterOutputStream();*/
+ throw new RaptorException("only maria db support for this ");
+ }
+ if(!(Globals.isPostgreSQL() || Globals.isMySQL())) {
+ out.write(reportXML);
+ out.flush();
+ out.close();
+ }
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } catch (IOException ex) {
+ throw new RaptorException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ } // dbUpdateReportXML
+
+ public static void updateCustomReportRec(Connection connection, ReportWrapper rw,
+ String reportXML) throws RaptorException {
+ /* DbUtils.executeUpdate(connection,"UPDATE cr_report SET title='"
+ + Utils.oracleSafe(rw.getReportName()) + "', descr='"
+ + Utils.oracleSafe(rw.getReportDescr()) + "', public_yn='"
+ + (rw.isPublic() ? "Y" : "N") + "', menu_id='" + rw.getMenuID()
+ + "', menu_approved_yn='" + (rw.isMenuApproved() ? "Y" : "N") + "', owner_id="
+ + rw.getOwnerID() + ", maint_id=" + rw.getUpdateID()
+ + ", maint_date=TO_DATE('" + rw.getUpdateDate() + "', '"
+ + Globals.getOracleTimeFormat() + "'), dashboard_type_yn='"+ (rw.isDashboardType()?"Y":"N")+"', dashboard_yn= '"
+ + (rw.getReportType().equals(AppConstants.RT_DASHBOARD)?"Y":"N") + "' WHERE rep_id = " + rw.getReportID());*/
+
+ String sql = Globals.getUpdateCustomReportRec();
+
+ sql = sql.replace("[Utils.oracleSafe(rw.getReportName())]", Utils.oracleSafe(rw.getReportName()));
+ sql = sql.replace("[Utils.oracleSafe(rw.getReportDescr())]", Utils.oracleSafe(rw.getReportDescr()));
+ sql = sql.replace("[(rw.isPublic()]",(rw.isPublic() ? "Y" : "N"));
+ sql = sql.replace("[rw.getMenuID()]", rw.getMenuID());
+ sql = sql.replace("[(rw.isMenuApproved()]", (rw.isMenuApproved() ? "Y" : "N"));
+ sql = sql.replace("[rw.getOwnerID()]",rw.getOwnerID());
+ sql = sql.replace("[rw.getUpdateID()]",rw.getUpdateID());
+ sql = sql.replace("[rw.getUpdateDate()]",rw.getUpdateDate());
+ sql = sql.replace("[Globals.getOracleTimeFormat()]", Globals.getOracleTimeFormat());
+ sql = sql.replace("[(rw.isDashboardType()]", (rw.isDashboardType()?"Y":"N"));
+ sql = sql.replace("[(rw.getReportType().equals(AppConstants.RT_DASHBOARD)]", (rw.getReportType().equals(AppConstants.RT_DASHBOARD)?"Y":"N"));
+ sql = sql.replace("[rw.getReportID()]", rw.getReportID());
+
+ DbUtils.executeUpdate(connection, sql);
+
+ dbUpdateReportXML(connection, rw.getReportID(), reportXML);
+ } // updateCustomReportRec
+
+ public static boolean isDashboardType ( String reportID ) throws RaptorException {
+ return false;
+/* String sql = "select dashboard_type_yn from cr_report where rep_id = ?";
+ Connection connection = DbUtils.getConnection();
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+ boolean dashboardType= false;
+ try {
+ stmt = connection.prepareStatement(sql);
+ stmt.setString(1, reportID);
+ rs = stmt.executeQuery();
+ if(rs.next()) {
+ dashboardType = nvls(rs.getString(1),"N").trim().toUpperCase().startsWith("Y");
+ }
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ rs.close();
+ stmt.close();
+ DbUtils.clearConnection(connection);
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ return dashboardType;*/
+ }
+
+ public static boolean isReportsAlreadyScheduled ( String reportID ) throws RaptorException {
+ //String sql = "select rep_id from cr_report_schedule where rep_id = ?";
+ String sql = Globals.getIsReportAlreadyScheduled();
+
+ Connection connection = DbUtils.getConnection();
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+ boolean isScheduled= false;
+ try {
+ stmt = connection.prepareStatement(sql);
+ stmt.setInt(1, Integer.parseInt(reportID));
+ rs = stmt.executeQuery();
+ if(rs.next()) {
+ isScheduled = true;
+ }
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+ DbUtils.clearConnection(connection);
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ return isScheduled;
+}
+
+ public static void createCustomReportRec(Connection connection, ReportWrapper rw,
+ String reportXML) throws RaptorException {
+
+ /*DbUtils
+ .executeUpdate(
+ connection,
+ "INSERT INTO cr_report(rep_id, title, descr, public_yn, menu_id, menu_approved_yn, report_xml, owner_id, create_id, create_date, maint_id, maint_date, dashboard_type_yn, dashboard_yn, folder_id) VALUES("
+ + rw.getReportID()
+ + ", '"
+ + Utils.oracleSafe(rw.getReportName())
+ + "', '"
+ + Utils.oracleSafe(rw.getReportDescr())
+ + "', '"
+ + (rw.isPublic() ? "Y" : "N")
+ + "', '"
+ + rw.getMenuID()
+ + "', '"
+ + (rw.isMenuApproved() ? "Y" : "N")
+ + "', '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>', "
+ + rw.getOwnerID()
+ + ", "
+ + rw.getCreateID()
+ + ", TO_DATE('"
+ + rw.getCreateDate()
+ + "', '"
+ + Globals.getOracleTimeFormat()
+ + "'), "
+ + rw.getUpdateID()
+ + ", TO_DATE('"
+ + rw.getUpdateDate()
+ + "', '"
+ + Globals.getOracleTimeFormat()
+ + "'), '"
+ + (rw.isDashboardType()?"Y":"N")
+ + "', '"
+ + (rw.getReportType().equals(AppConstants.RT_DASHBOARD)?"Y":"N")
+ + "', "
+ + rw.getFolderId()
+ + ")");*/
+ String sql = Globals.getCreateCustomReportRec();
+
+ sql = sql.replace("[rw.getReportID()]", rw.getReportID());
+ sql = sql.replace("[Utils.oracleSafe(rw.getReportName())]", Utils.oracleSafe(rw.getReportName()));
+ sql = sql.replace("[Utils.oracleSafe(rw.getReportDescr())]", Utils.oracleSafe(rw.getReportDescr()));
+ sql = sql.replace("[rw.isPublic()]", (rw.isPublic() ? "Y" : "N"));
+ sql = sql.replace("[rw.getMenuID()]", rw.getMenuID());
+ sql = sql.replace("[rw.isMenuApproved()]", (rw.isMenuApproved() ? "Y" : "N"));
+ sql = sql.replace("[rw.getOwnerID()]", rw.getOwnerID());
+ sql = sql.replace("[rw.getCreateID()]", rw.getCreateID());
+ sql = sql.replace("[rw.getCreateDate()]", rw.getCreateDate());
+ sql = sql.replace("[Globals.getOracleTimeFormat()]", Globals.getOracleTimeFormat());
+ sql = sql.replace("[rw.getUpdateID()]", rw.getUpdateID());
+ sql = sql.replace("[rw.getUpdateDate()]", rw.getUpdateDate());
+ sql = sql.replace("[rw.isDashboardType()]", (rw.isDashboardType()?"Y":"N"));
+ sql = sql.replace("[rw.getReportType().equals(AppConstants.RT_DASHBOARD)]", (rw.getReportType().equals(AppConstants.RT_DASHBOARD)?"Y":"N"));
+ sql = sql.replace("[rw.getFolderId()]", rw.getFolderId());
+
+
+ DbUtils.executeUpdate(connection,sql);
+
+ dbUpdateReportXML(connection, rw.getReportID(), reportXML);
+ } // createCustomReportRec
+
+ public static Vector getUserReportNames(HttpServletRequest request) {
+ return getUserReportNames(AppUtils.getUserID(request));
+ } // getUserReportNames
+
+ public static Vector getUserReportNames(String userID) {
+ Vector reportIdNames = new Vector();
+
+ try {
+
+ String sql = Globals.getTheUserReportNames();
+ sql = sql.replace("[userID]", userID);
+ DataSet ds = DbUtils.executeQuery(sql);
+
+ //DataSet ds = DbUtils
+ // .executeQuery("SELECT cr.rep_id, cr.title FROM cr_report cr WHERE nvl(cr.owner_id, cr.create_id) = "
+ // + userID);
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ reportIdNames.add(new IdNameValue(ds.getString(i, 0), ds.getString(i, 1)));
+ } catch (Exception e) {
+ }
+
+ return reportIdNames;
+ } // getUserReportNames
+
+ public static String getReportOwnerID(String reportID) throws RaptorException {
+
+ // String sql = "SELECT nvl(cr.owner_id, cr.create_id) owner FROM cr_report cr WHERE rep_id = ?";
+
+ String sql = Globals.getTheReportOwnerId();
+
+ Connection connection = DbUtils.getConnection();
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+ String reportOwnerID = null;
+ try {
+ stmt = connection.prepareStatement(sql);
+ stmt.setInt(1, Integer.parseInt(reportID));
+ rs = stmt.executeQuery();
+ if(rs.next()) {
+ reportOwnerID = rs.getString(1);
+ }
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+ DbUtils.clearConnection(connection);
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+
+ return reportOwnerID;
+ } // getReportOwnerID
+
+ public static void deleteReportRecord(String reportID) throws RaptorException {
+ Connection con = DbUtils.startTransaction();
+
+ /*try {
+ DbUtils.executeUpdate(con, "DELETE cr_report_log WHERE rep_id = " + reportID);
+ DbUtils.executeUpdate(con, "DELETE cr_report_schedule_users WHERE rep_id = "
+ + reportID);
+ DbUtils.executeUpdate(con, "DELETE cr_report_schedule WHERE rep_id = " + reportID);
+ DbUtils.executeUpdate(con, "DELETE cr_report_access WHERE rep_id = " + reportID);
+ DbUtils.executeUpdate(con, "DELETE cr_report_email_sent_log WHERE rep_id = " + reportID);
+ DbUtils.executeUpdate(con, "DELETE cr_favorite_reports WHERE rep_id = " + reportID);
+ DbUtils.executeUpdate(con, "DELETE cr_report WHERE rep_id = " + reportID);
+ DbUtils.commitTransaction(con);
+ } */
+
+ try{
+ String sql1= Globals.getDeleteReportRecordLog();
+ sql1 = sql1.replace("[reportID]", reportID);
+ String sql2= Globals.getDeleteReportRecordUsers();
+ sql2 = sql2.replace("[reportID]", reportID);
+ String sql3= Globals.getDeleteReportRecordSchedule();
+ sql3 = sql3.replace("[reportID]", reportID);
+ String sql4= Globals.getDeleteReportRecordAccess();
+ sql4 = sql4.replace("[reportID]", reportID);
+ String sql5= Globals.getDeleteReportRecordEmail();
+ sql5 = sql5.replace("[reportID]", reportID);
+ String sql6= Globals.getDeleteReportRecordFavorite();
+ sql6 = sql6.replace("[reportID]", reportID);
+ String sql7= Globals.getDeleteReportRecordReport();
+ sql7 = sql7.replace("[reportID]", reportID);
+
+ DbUtils.executeUpdate(con, sql1);
+ DbUtils.executeUpdate(con, sql2);
+ DbUtils.executeUpdate(con, sql3);
+ DbUtils.executeUpdate(con, sql4);
+ DbUtils.executeUpdate(con, sql5);
+ DbUtils.executeUpdate(con, sql6);
+ DbUtils.executeUpdate(con, sql7);
+ DbUtils.commitTransaction(con);
+
+ }
+
+
+ catch (Exception e) {
+ DbUtils.rollbackTransaction(con);
+ } finally {
+ DbUtils.clearConnection(con);
+ }
+ } // deleteReportRecord
+
+ public static ArrayList loadQuickLinks(HttpServletRequest request, String menuId, boolean b) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+
+ // DataSet ds = DbUtils.executeQuery("SELECT cr.rep_id, cr.title FROM
+ // cr_report cr WHERE cr.public_yn = 'Y' AND cr.menu_id =
+ // '"+nvls(menuId)+"' AND cr.menu_approved_yn = 'Y' ORDER BY cr.title");
+ // Copied from SearchHandler and simplified
+ /*String query = "SELECT cr.rep_id, "
+ + "cr.title, "
+ + "cr.descr "
+ + "FROM cr_report cr, "
+ + "(SELECT rep_id, "
+ + "MIN(read_only_yn) read_only_yn "
+ + "FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = "
+ + userID
+ + ") "
+ + "UNION ALL "
+ + "(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN ("
+ + roleList.toString() + "))" + ") report_access "
+ + "GROUP BY rep_id) ra " + "WHERE INSTR('|'||cr.menu_id||'|', '|'||'"
+ + nvls(menuId) + "'||'|') > 0 AND " + "cr.menu_approved_yn = 'Y' AND "
+ + "cr.rep_id = ra.rep_id (+) AND "
+ + "(nvl(cr.owner_id, cr.create_id) = " + userID
+ + " OR cr.public_yn = 'Y' OR ra.read_only_yn IS NOT NULL) "
+ + "ORDER BY cr.title";*/
+
+ String query = Globals.getLoadQuickLinks();
+ query = query.replace("[userID]", userID);
+ query = query.replace("[roleList.toString()]", roleList.toString());
+ query = query.replace("[nvls(menuId)]", nvls(menuId));
+
+ DataSet ds = DbUtils
+ .executeQuery(query);
+
+ ArrayList quickLinks = new ArrayList(ds.getRowCount());
+ StringBuffer link = new StringBuffer("");
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ link = new StringBuffer("");
+ link.append("<a href=\"" + AppUtils.getReportExecuteActionURL() + ds.getString(i, 0));
+ if(b) link.append("&PAGE_ID="+menuId+"&refresh=Y");
+ link.append("\">" +ds.getString(i, 1) + "</a>" + (Globals.getShowDescrAtRuntime() ? " - " + ds.getString(i, 2) : "") );
+ quickLinks.add(link.toString());
+ }
+
+ return quickLinks;
+ } // loadQuickLinks
+
+ public static ArrayList<QuickLink> getQuickLinksJSON(HttpServletRequest request, String menuId, boolean b) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+
+ String query = Globals.getLoadQuickLinks();
+ query = query.replace("[userID]", userID);
+ query = query.replace("[roleList.toString()]", roleList.toString());
+ query = query.replace("[nvls(menuId)]", nvls(menuId));
+
+ DataSet ds = DbUtils
+ .executeQuery(query);
+
+ ArrayList<QuickLink> quickLinksArray = new ArrayList<QuickLink>(ds.getRowCount());
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ QuickLink quickLink = new QuickLink();
+ StringBuffer link = new StringBuffer("");
+ link.append(AppUtils.getReportExecuteActionURLNG() +"c_master="+ ds.getString(i, 0));
+ if(b) link.append("&PAGE_ID="+menuId+"&refresh=Y");
+ quickLink.setReportURL(link.toString());
+ quickLink.setReportName(ds.getString(i, 1));
+ quickLink.setShowDescr(Globals.getShowDescrAtRuntime());
+ quickLink.setReportDescr(ds.getString(i, 2));
+ quickLinksArray.add(quickLink);
+ }
+
+ return quickLinksArray;
+ } // loadQuickLinks
+
+ //this will retrieve all the reports within the specified folder.
+ public static ReportSearchResult loadFolderReports(HttpServletRequest request, String menuId, boolean b, String folderId, boolean isUserReport, boolean isPublicReport) throws RaptorException {
+ String HTML_FORM = "forma";
+ String userID = AppUtils.getUserID(request);
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ String rep_title_sql = "'<a class=\"hyperref1\" href=''#'' onClick=''document."+HTML_FORM+"."+AppConstants.RI_ACTION+".value=\"report.run\";"+
+ "document."+HTML_FORM+".c_master.value=\"'|| cr.rep_id||'\";document."+HTML_FORM+".submit()''>'";
+ String PRIVATE_ICON = "<img border=0 src="
+ + AppUtils.getImgFolderURL()
+ + "accessicon.gif alt=Private width=16 height=12>&nbsp;";
+
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+
+ /*String sql= "SELECT cr.rep_id, " +
+ "cr.rep_id report_id, " +
+ rep_title_sql+
+ "||DECODE(cr.public_yn, 'Y', '', '" +
+ PRIVATE_ICON +
+ "')||cr.title||'</a>' title, " +
+ "cr.descr, " +
+ "au.first_name||' '||au.last_name owner_name, " +
+ "TO_CHAR(cr.create_date, 'MM/DD/YYYY') create_date, " +
+ "DECODE(NVL(cr.owner_id, cr.create_id), " +
+ userID +
+ ", 'N', NVL(ra.read_only_yn, 'Y')) read_only_yn, " +
+ "DECODE(NVL(cr.owner_id, cr.create_id), " +
+ userID +
+ ", 'Y', 'N') user_is_owner_yn " +
+ " FROM cr_report cr, " +
+ "app_user au, " +
+ "(SELECT rep_id, MIN(read_only_yn) read_only_yn " +
+ "FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = " +
+ userID +
+ ") " +
+ "UNION ALL " +
+ "(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN " +
+ "(-1,1000,1))" + ") report_access GROUP BY rep_id) ra " +
+ "WHERE TO_CHAR(cr.rep_id) = nvl('', TO_CHAR(cr.rep_id)) AND UPPER(cr.title) LIKE UPPER('%%') " +
+ "AND nvl(cr.owner_id, cr.create_id) = au.user_id AND cr.rep_id = ra.rep_id (+) " +
+ " AND cr.folder_id= '" + folderId + "'" ;*/
+
+ /*String sql = "" +
+ "SELECT cr.rep_id, "
+ + "cr.rep_id report_id, "
+ + rep_title_sql + "||DECODE(cr.public_yn, 'Y', '', '" + PRIVATE_ICON + "')||cr.title||'</a>' title, "
+ + "cr.descr, "
+ + "au.first_name||' '||au.last_name owner_name, "
+ + "TO_CHAR(cr.create_date, 'MM/DD/YYYY') create_date, "
+ + "DECODE(NVL(cr.owner_id, cr.create_id), " + userID
+ + ", 'N', NVL(ra.read_only_yn, 'Y')) read_only_yn, "
+ + "DECODE(NVL(cr.owner_id, cr.create_id), " + userID
+ + ", 'Y', 'N') user_is_owner_yn "
+ + "FROM cr_report cr, "
+ + "app_user au, "
+ + "(SELECT rep_id, "
+ + "MIN(read_only_yn) read_only_yn "
+ + "FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = "
+ + userID
+ + ") "
+ + "UNION ALL "
+ + "(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN ("
+ + roleList.toString() + "))" + ") report_access " + "GROUP BY rep_id) ra "
+ + "WHERE " + "nvl(cr.owner_id, cr.create_id) = au.user_id "
+ + "AND cr.rep_id = ra.rep_id (+) AND cr.folder_id= '" + folderId + "'";*/
+
+ String sql = Globals.getLoadFolderReports();
+ sql = sql.replace("[userID]", userID);
+ sql = sql.replace("[PRIVATE_ICON]", PRIVATE_ICON);
+ sql = sql.replace("[rep_title_sql]", rep_title_sql);
+ sql = sql.replace("[roleList.toString()]", roleList.toString());
+ sql = sql.replace("[folderId]", folderId);
+
+
+ // String user_sql = " AND nvl(cr.owner_id, cr.create_id) = " + userID;
+ // String public_sql = " AND (nvl(cr.owner_id, cr.create_id) = " + userID
+ // + " OR cr.public_yn = 'Y' OR ra.read_only_yn IS NOT NULL)";
+
+ String user_sql = Globals.getLoadFolderReportsUser();
+ user_sql = user_sql.replace("[userID]", userID);
+ String public_sql = Globals.getLoadFolderReportsPublicSql();
+ public_sql = public_sql.replace("[userID]", userID);
+
+ if (isUserReport)
+ // My reports - user is owner
+ sql += user_sql;
+ else if (isPublicReport)
+ // Public reports - user has read or write access to the report
+ // (user is owner or report is public or user has explicit user or
+ // role access)
+ if (!AppUtils.isSuperUser(request))
+ sql += public_sql;
+ else if (!AppUtils.isSuperUser(request))
+ // All reports
+ // If user is super user - gets unrestricted access to all reports
+ // (read_only gets overriden later)
+ // else - not super user - doesn't get access to private reports of
+ // other users (= Public reports); Admin users get edit right
+ // override later
+ sql += public_sql;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("query is for folder list is : " + sql));
+
+ DataSet ds = DbUtils.executeQuery(sql);
+
+ /*Vector quickLinks = new Vector(ds.getRowCount());
+ StringBuffer link = new StringBuffer("");
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ link = new StringBuffer("");
+ link.append("<a href=\"" + AppUtils.getReportExecuteActionURL() + ds.getString(i, 0));
+ if(b) link.append("&PAGE_ID="+menuId+"&refresh=Y");
+ link.append("\">" +ds.getString(i, 2) + "</a>" + (Globals.getShowDescrAtRuntime() ? " - " + ds.getString(i, 2) : "") );
+ quickLinks.add(link.toString());
+ }
+
+ return quickLinks;*/
+ ReportSearchResult rsr = new ReportSearchResult(-1, ds.getRowCount(), 6, 7);
+ rsr.parseData(ds, request);
+ //rsr.truncateToPage(pageNo);
+
+ return rsr;
+ } // loadFolderReports
+
+ public static ArrayList loadQuickDownloadLinks(String userID, HttpServletRequest request) throws RaptorException {
+ /*String query = " SELECT a.file_name, b.title,to_char(a.dwnld_start_time, 'Dy DD-Mon-YYYY HH24:MI:SS') as time, "+
+ " a.dwnld_start_time " +
+ " FROM cr_report_dwnld_log a, cr_report b where a.user_id = "+userID +" and "+
+ " a.rep_id = b.rep_id " +
+ " and (a.dwnld_start_time) >= to_date(to_char(sysdate-24/24, 'mm/dd/yyyy'), 'mm/dd/yyyy') " +
+ " and a.record_ready_time is not null " +
+ " order by a.dwnld_start_time desc"; */
+
+ String query = Globals.getLoadQuickDownloadLinks();
+ query = query.replace("[userID]", userID);
+
+
+ DataSet ds = DbUtils
+ .executeQuery(query);
+ ArrayList quickDownloadLinks = new ArrayList(ds.getRowCount());
+ logger.debug(EELFLoggerDelegate.debugLogger, ("ROW SIZE " + ds.getRowCount()));
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ quickDownloadLinks.add("<a href=\"" + AppUtils.getRaptorActionURL()+"download.data.file&filename="
+ + ds.getString(i, 0)+"\">" + ds.getString(i, 1)+ "</a>" + "&nbsp;"+ ds.getString(i, 2));
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("VECTOR SIZE " + quickDownloadLinks.size()));
+
+ return quickDownloadLinks;
+ } // loadQuickLinks
+
+ public static HashMap loadReportsToSchedule (HttpServletRequest request) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+ /*StringBuffer query = new StringBuffer("");
+ query.append("SELECT cr.rep_id, ");
+ query.append("Initcap(cr.title), ");
+ query.append("cr.descr ");
+ query.append("FROM cr_report cr, ");
+ query.append("(SELECT rep_id, ");
+ query.append("MIN(read_only_yn) read_only_yn ");
+ query.append("FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = ");
+ query.append(userID);
+ query.append(") ");
+ query.append("UNION ALL ");
+ query.append("(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN (");
+ query.append(roleList.toString() + "))" + ") report_access ");
+ query.append("GROUP BY rep_id) ra " + "WHERE ");
+ query.append("cr.rep_id = ra.rep_id (+) AND ");
+ query.append(" (cr.public_yn = 'Y' OR ra.read_only_yn IS NOT NULL or cr.owner_id = " + userID +") ");
+ query.append("ORDER BY Initcap(cr.title)") ;*/
+
+ String sql = Globals.getLoadReportsToSchedule();
+ sql = sql.replace("[userID]", userID);
+ sql = sql.replace("[roleList.toString()]", roleList.toString());
+
+ // DataSet ds = DbUtils
+ // .executeQuery(query.toString());
+
+ DataSet ds = DbUtils
+ .executeQuery(sql);
+ HashMap map = new HashMap();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ map.put(ds.getItem(i,0), ds.getItem(i,1));
+ }
+
+ return map;
+ }
+
+ public static HashMap loadReportsToAddInDashboard (HttpServletRequest request) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+ /*StringBuffer query = new StringBuffer("");
+ query.append("SELECT cr.rep_id, ");
+ query.append("cr.title, ");
+ query.append("cr.descr ");
+ query.append("FROM cr_report cr, ");
+ query.append("(SELECT rep_id, ");
+ query.append("MIN(read_only_yn) read_only_yn ");
+ query.append("FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = ");
+ query.append(userID);
+ query.append(") ");
+ query.append("UNION ALL ");
+ query.append("(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN (");
+ query.append(roleList.toString() + "))" + ") report_access ");
+ query.append("GROUP BY rep_id) ra " + "WHERE ");
+ query.append("cr.rep_id = ra.rep_id (+) AND ");
+ query.append("(nvl(cr.owner_id, cr.create_id) = " + userID);
+ query.append(" OR cr.public_yn = 'Y' OR ra.read_only_yn IS NOT NULL) ");
+ query.append(" AND (cr.dashboard_yn = 'N' or cr.dashboard_yn is null) ");
+ query.append("ORDER BY cr.title") ;*/
+
+ String sql = Globals.getLoadReportsToAddInDashboard();
+ sql = sql.replace("[userID]", userID);
+ sql = sql.replace("[roleList.toString()]", roleList.toString());
+
+ // DataSet ds = DbUtils
+ // .executeQuery(query.toString());
+
+ DataSet ds = DbUtils
+ .executeQuery(sql);
+
+ HashMap map = new HashMap();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ map.put(ds.getItem(i,0), ds.getItem(i,1));
+ }
+
+ return map;
+ }
+
+ public static Vector loadMyRecentLinks(String userID, HttpServletRequest request) throws RaptorException {
+ /* StringBuffer query = new StringBuffer("");
+ query.append("select rep_id, title, descr, form_fields from ( select rownum, rep_id, title, descr, form_fields from ");
+ query.append(" (select cr.rep_id, cr.title, a.form_fields, cr.descr, a.log_time, a.user_id, a.action, a.action_value " );
+ query.append(" from cr_report_log a, cr_report cr where user_id = " + userID);
+ query.append(" and action = 'Report Execution Time' and a.rep_id = cr.rep_id order by log_time desc) x where rownum <= 6 ) y where rownum >= 1");*/
+// DataSet ds = DbUtils
+// .executeQuery(
+// " SELECT a.file_name, b.title,to_char(a.dwnld_start_time, 'Dy DD-Mon-YYYY HH24:MI:SS') as time, "+
+// " a.dwnld_start_time " +
+// " FROM cr_report_dwnld_log a, cr_report b where a.user_id = "+userID +" and "+
+// " a.rep_id = b.rep_id and (a.dwnld_start_time) >= to_date(to_char(sysdate-24/24, 'mm/dd/yyyy'), 'mm/dd/yyyy') " +
+// " and a.record_ready_time is not null " +
+// " order by a.dwnld_start_time desc");
+// DataSet ds = DbUtils
+ // .executeQuery(query.toString());
+
+
+ String sql = Globals.getLoadMyRecentLinks();
+ sql = sql.replace("[userID]", userID);
+
+ DataSet ds = DbUtils
+ .executeQuery(sql);
+
+ Vector myRecentLinks = new Vector(ds.getRowCount());
+ logger.debug(EELFLoggerDelegate.debugLogger, ("ROW SIZE " + ds.getRowCount()));
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ myRecentLinks.add("<a href=\"" + AppUtils.getRaptorActionURL()+"report.run.container&display_content=Y&fromReportLog=Y&refresh=Y&c_master="+ds.getString(i, 0)+ds.getString(i, 3)+"\">" + ds.getString(i, 1)+ "</a>");
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("VECTOR SIZE " + myRecentLinks.size()));
+
+ return myRecentLinks;
+ } // loadQuickLinks
+
+ public static void createReportLogEntry(Connection connection, String reportID,
+ String userID, String action, String executionTime,String form_fields) throws RaptorException {
+ if(form_fields.length()>=4000) form_fields = "";
+ //String stmt = "INSERT INTO cr_report_log (rep_id, log_time, user_id, action, action_value, form_fields) VALUES("
+ // + reportID + ", SYSDATE, " + userID + ", '" + action + "' , '" + executionTime + "', '"+ form_fields +"')";
+
+ String stmt = Globals.getCreateReportLogEntry();
+ stmt = stmt.replace("[reportID]", reportID);
+ stmt = stmt.replace("[userID]", userID);
+ stmt = stmt.replace("[action]", action);
+ stmt = stmt.replace("[executionTime]", executionTime);
+ stmt = stmt.replace("[form_fields]", form_fields);
+
+ if (Globals.getEnableReportLog())
+ if (connection == null)
+ DbUtils.executeUpdate(stmt);
+ else
+ DbUtils.executeUpdate(connection, stmt);
+ } // createReportLogEntry
+
+ public static void createReportLogEntryForExecutionTime(Connection connection, String reportID,
+ String userID, String executionTime, String action, String formFields) throws RaptorException {
+ if(formFields.length()>=4000) formFields = "";
+ //String stmt = "INSERT INTO cr_report_log (rep_id, log_time, user_id, action, action_value, form_fields) VALUES("
+ // + reportID + ", sysdate+1/(24*60*60) , " + userID + ", '" + action + "' , '" + executionTime + "', '"+ formFields +"')";
+
+ String stmt = Globals.getCreateReportLogEntryExecTime();
+ stmt = stmt.replace("[reportID]", reportID);
+ stmt = stmt.replace("[userID]", userID);
+ stmt = stmt.replace("[action]", action);
+ stmt = stmt.replace("[executionTime]", executionTime);
+ stmt = stmt.replace("[formFields]", formFields);
+
+ if (Globals.getEnableReportLog())
+ if (connection == null)
+ DbUtils.executeUpdate(stmt);
+ else
+ DbUtils.executeUpdate(connection, stmt);
+ } // createReportLogEntry
+
+ public static void clearReportLogEntries(String reportId, String userId) throws RaptorException {
+ String sql = Globals.getClearReportLogEntries();
+ Connection connection = DbUtils.getConnection();
+ PreparedStatement stmt = null;
+ String reportOwnerID = null;
+ int rowsAffected = 0;
+ try {
+ stmt = connection.prepareStatement(sql);
+ stmt.setInt(1, Integer.parseInt(reportId));
+ stmt.setInt(2, Integer.parseInt(userId));
+ rowsAffected = stmt.executeUpdate();
+ if(rowsAffected > 0) connection.commit();
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ stmt.close();
+ connection.close();
+ DbUtils.clearConnection(connection);
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ } // clearReportLogEntries
+
+ public static Vector loadReportLogEntries(String reportId) throws RaptorException {
+ /* StringBuffer query = new StringBuffer("SELECT x.log_time, x.user_id,") ;
+ query.append(" (CASE WHEN x.action = 'Report Execution Time' THEN ");
+ query.append(" '<a href=\"" + AppUtils.getRaptorActionURL() +"report.run.container&c_master='||x.rep_id||'&'||x.form_fields||'&fromReportLog=Y&display_content=Y&noFormFields=Y&refresh=Y\">'||x.action||'</a>'");
+ query.append(" ELSE x.action END) action, " );
+ query.append(" (CASE WHEN x.action = 'Report Execution Time' THEN ");
+ query.append(" action_value " );
+ query.append(" ELSE 'N/A' END) time_taken, " );
+ query.append( " (CASE WHEN x.action = 'Report Execution Time' THEN '<a href=\"" + AppUtils.getRaptorActionURL() +"report.run.container&c_master='||x.rep_id||'&'||x.form_fields||'&fromReportLog=Y&display_content=Y&noFormFields=Y&refresh=Y\"><img src=\""+AppUtils.getImgFolderURL()+ "test_run.gif\" width=\"12\" height=\"12\" border=0 alt=\"Run report\"/></a>' ELSE 'N/A' END) run_image, " );
+ query.append(" x.name FROM ");
+ query.append(" (SELECT rl.rep_id, TO_CHAR(rl.log_time, 'Month DD, YYYY HH:MI:SS AM') log_time, rl.action_value, fuser.last_name ||', '||fuser.first_name name, ");
+ query.append(" rl.user_id, rl.action, rl.form_fields FROM cr_report_log rl, fn_user fuser WHERE rl.rep_id = "+ nvls(reportId)+ " and rl.action != 'Report Run' and fuser.user_id = rl.user_id" );
+ query.append(" ORDER BY rl.log_time DESC) x WHERE ROWNUM <= 100");*/
+// DataSet ds = DbUtils
+// .executeQuery("SELECT x.log_time, x.user_id, x.action FROM (SELECT TO_CHAR(rl.log_time, 'Month DD, YYYY HH:MI:SS AM') log_time, rl.user_id, rl.action FROM cr_report_log rl WHERE rl.rep_id = "
+// + nvls(reportId) + " ORDER BY rl.log_time DESC) x WHERE ROWNUM <= 100");
+ // DataSet ds = DbUtils.executeQuery(query.toString());
+
+ String sql = Globals.getLoadReportLogEntries();
+ sql = sql.replace("[AppUtils.getRaptorActionURL()]", AppUtils.getRaptorActionURL());
+ sql = sql.replace("[AppUtils.getImgFolderURL()]", AppUtils.getImgFolderURL());
+ sql = sql.replace("[nvls(reportId)]", nvls(reportId));
+
+
+ DataSet ds = DbUtils.executeQuery(sql);
+
+ Vector logEntries = new Vector(ds.getRowCount());
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ logEntries.add(new ReportLogEntry(ds.getString(i, 0), ds
+ .getString(i, 5), ds.getString(i, 2), ds.getString(i, 3), ds.getString(i, 4)));
+
+ return logEntries;
+ } // loadReportLogEntries
+
+ public static boolean doesUserCanScheduleReport(HttpServletRequest request, String scheduleId) throws RaptorException {
+ boolean flagLimit = false;
+ boolean flagScheduleIdPresent = false;
+ String userId = AppUtils.getUserID(request);
+ if(AppUtils.isAdminUser(request))return true;
+ //String query = "select crs.sched_user_id, count(*) from cr_report_schedule crs where sched_user_id = " + userId + " group by crs.sched_user_id having count(*) >= " + Globals.getScheduleLimit();
+ String query = Globals.getDoesUserCanScheduleReport();
+ query = query.replace("[userId]", userId);
+ query = query.replace("[Globals.getScheduleLimit()]", String.valueOf(Globals.getScheduleLimit()));
+
+ DataSet ds = DbUtils.executeQuery(query);
+ logger.debug(EELFLoggerDelegate.debugLogger, (" User Schedule ds.getRowCount() " + ds.getRowCount() + " " +(ds.getRowCount()>0)));
+ if(ds.getRowCount() > 0) flagLimit = true;
+ else flagLimit = false;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("scheduleId " + scheduleId));
+ if(scheduleId==null || scheduleId.trim().length()<=0) return !flagLimit;
+ //query = "select crs.schedule_id from cr_report_schedule crs where schedule_id = " + scheduleId;
+ query = Globals.getDoesUserCanSchedule();
+ query = query.replace("[scheduleId]", scheduleId);
+
+ if(ds.getRowCount() > 0) flagScheduleIdPresent = true;
+ else flagScheduleIdPresent = false;
+ if(!flagLimit) return true;
+ if(flagLimit && flagScheduleIdPresent) return true;
+ else return false;
+ }
+
+ public static String getSystemDateTime() throws RaptorException {
+ //String query = "select to_char(sysdate,'MM/dd/yyyy HH24:mi:ss') from dual";
+ String query = Globals.getTheSystemDateTime();
+
+ DataSet ds = DbUtils.executeQuery(query);
+ String timeStr = "";
+ if(ds.getRowCount() > 0) {
+ timeStr = ds.getString(0,0);
+ }
+ return timeStr;
+
+ }
+
+ public static String getNextDaySystemDateTime() throws RaptorException {
+ //String query = "select to_char(sysdate+1,'MM/dd/yyyy HH24:mi:ss') from dual";
+ String query = Globals.getTheNextDayDateTime();
+ DataSet ds = DbUtils.executeQuery(query);
+ String timeStr = "";
+ if(ds.getRowCount() > 0) {
+ timeStr = ds.getString(0,0);
+ }
+ return timeStr;
+
+ }
+
+ public static String getNext15MinutesOfSystemDateTime() throws RaptorException {
+ //String query = "select to_char(sysdate+15/(24*60),'MM/dd/yyyy HH24:mi:ss') from dual";
+ String query = Globals.getTheNextFifteenMinDateTime();
+
+ DataSet ds = DbUtils.executeQuery(query);
+ String timeStr = "";
+ if(ds.getRowCount() > 0) {
+ timeStr = ds.getString(0,0);
+ }
+ return timeStr;
+
+ }
+
+ public static String getNext30MinutesOfSystemDateTime() throws RaptorException {
+ //String query = "select to_char(sysdate+30/(24*60),'MM/dd/yyyy HH24:mi:ss') from dual";
+ String query = Globals.getTheNextThirtyMinDateTime();
+ DataSet ds = DbUtils.executeQuery(query);
+ String timeStr = "";
+ if(ds.getRowCount() > 0) {
+ timeStr = ds.getString(0,0);
+ }
+ return timeStr;
+
+ }
+
+ public static String getTemplateFile(String reportId) throws RaptorException {
+ //String query = "select template_file from cr_report_template_map where report_id = " + reportId;
+ String query = Globals.getTheTemplateFile();
+ query = query.replace("[reportId]", reportId);
+ String templateFile = "";
+ try {
+ DataSet ds = DbUtils.executeQuery(query);
+ if(ds.getRowCount() > 0) {
+ templateFile = ds.getString(0,0);
+ }
+ }catch(RaptorException ex) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL Exception while trying to access cr_report_template_map "));
+ }
+ return templateFile;
+
+ }
+
+
+ public static HashMap loadPDFImgLookUp() throws RaptorException {
+ StringBuffer query = new StringBuffer("");
+ HashMap pdfImgMap = new HashMap();
+ //query.append("select image_id, image_loc from cr_raptor_pdf_img");
+ query.append(Globals.getLoadPdfImgLookup());
+ DataSet ds = DbUtils.executeQuery(query.toString());
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ pdfImgMap.put(ds.getString(i, 0), ds.getString(i,1));
+ }
+ return pdfImgMap;
+ } // loadQuickLinks
+
+ public static HashMap loadActionImgLookUp() throws RaptorException {
+ StringBuffer query = new StringBuffer("");
+ HashMap pdfImgMap = new HashMap();
+ //query.append("select image_id, image_loc from cr_raptor_action_img");
+ query.append(Globals.getLoadActionImgLookup());
+ DataSet ds = DbUtils.executeQuery(query.toString());
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ pdfImgMap.put(ds.getString(i, 0), ds.getString(i,1));
+ }
+ return pdfImgMap;
+ } // loadQuickLinks
+
+} // ReportLoader
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/SearchHandler.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/SearchHandler.java
new file mode 100644
index 00000000..428bc90a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/SearchHandler.java
@@ -0,0 +1,490 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+/* ===========================================================================================
+ * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
+ * Raptor : This tool is used to generate different kinds of reports with lot of utilities
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * SearchHandler.java - This class is used to search reports and sort them in different order
+ * based on preference. It can also download the list in CSV format.
+ * -------------------------------------------------------------------------------------------
+ *
+ *
+ *
+ * Changes
+ * -------
+ * 18-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> request Object is passed to prevent caching user/roles - Datamining/Hosting. </LI></UL>
+ * 13-Aug-2009 : Version 8.5 (Sundar);<UL><LI>Refresh is added while running report.</LI>
+ * </UL>
+ * 27-Jul-2009 : Version 8.4 (Sundar);<UL><LI> A new sort order PUBLIC is added.</LI>
+ * <LI> In Public reports option it brings all the reports
+ * including the one which logged in user didn't create
+ * and which is not public. This is available for Super users and "Admin equivalent Super Users".</LI>
+ * </UL>
+ *
+ */
+package org.openecomp.portalsdk.analytics.model;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.controller.ErrorHandler;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.search.ReportSearchResult;
+import org.openecomp.portalsdk.analytics.model.search.ReportSearchResultJSON;
+import org.openecomp.portalsdk.analytics.model.search.SearchResultColumn;
+import org.openecomp.portalsdk.analytics.model.search.SearchResultField;
+import org.openecomp.portalsdk.analytics.model.search.SearchResultRow;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.HtmlStripper;
+
+public class SearchHandler extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private static final String HTML_FORM = "forma";
+ private final static String PRIVATE_ICON = "<img border=0 src="
+ + AppUtils.getImgFolderURL()
+ + "accessicon.gif alt=Private width=16 height=12>&nbsp;";
+
+ public SearchHandler() {
+ }
+
+ public void createCSVFileContent(Writer out, ReportSearchResult sr) throws IOException {
+ PrintWriter csvOut = new PrintWriter(out);
+ HtmlStripper strip = new HtmlStripper();
+
+ for (int c = 1; c < sr.getNumColumns(); c++) {
+ SearchResultColumn column = sr.getColumn(c);
+ if (column.getLinkURL() == null)
+ csvOut.print("\"" + column.getColumnTitle() + "\",");
+ } // for
+ csvOut.println();
+
+ for (int r = 0; r < sr.getNumRows(); r++) {
+ SearchResultRow row = sr.getRow(r);
+
+ int c = 1;
+ for (row.resetNext(1); row.hasNext();) {
+ SearchResultField field = row.getNext();
+ if (sr.getColumn(c++).getLinkURL() == null)
+ if (field.getDisplayValue().startsWith(PRIVATE_ICON))
+ csvOut.print("\""
+ + strip.stripHtml(field.getDisplayValue().substring(PRIVATE_ICON.length()))
+ + "\",");
+ else
+ csvOut.print("\"" + strip.stripHtml(field.getDisplayValue()) + "\",");
+ } // for
+
+ csvOut.println();
+ } // for
+ } // createCSVFileContent
+
+ public String saveCSVPageFile(HttpServletRequest request, ReportSearchResult sr) {
+ try {
+ String csvFName = AppUtils.generateFileName(request,
+ (sr.getPageNo() < 0) ? AppConstants.FT_CSV_ALL : AppConstants.FT_CSV);
+
+ BufferedWriter csvOut = new BufferedWriter(new FileWriter(AppUtils
+ .getTempFolderPath()
+ + csvFName));
+ createCSVFileContent(csvOut, sr);
+ csvOut.close();
+
+ if (sr.getPageNo() < 0)
+ sr.setCsvAllRowsFileName(csvFName);
+ else
+ sr.setCsvPageFileName(csvFName);
+
+ return csvFName;
+ } catch (Exception e) {
+ (new ErrorHandler()).processError(request, "Exception saving data to CSV file: "
+ + e.getMessage());
+ return null;
+ }
+ } // saveCSVPageFile
+
+ public ReportSearchResultJSON loadReportSearchResult(HttpServletRequest request)
+ throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ String fReportID = nvl(AppUtils.getRequestValue(request, AppConstants.RI_F_REPORT_ID));
+ String fReportName = nvl(AppUtils.getRequestValue(request,
+ AppConstants.RI_F_REPORT_NAME));
+ String sortOrder = nvl(AppUtils.getRequestValue(request, AppConstants.RI_SORT_ORDER),
+ AppConstants.RI_F_REPORT_NAME);
+
+ String menuId = nvl(AppUtils.getRequestValue(request, AppConstants.RI_LIST_CATEGORY));
+
+ boolean userOnly = AppUtils.getRequestFlag(request, AppConstants.RI_USER_REPORTS);
+ boolean publicOnly = AppUtils.getRequestFlag(request, AppConstants.RI_PUBLIC_REPORTS);
+ boolean favoriteOnly = AppUtils.getRequestFlag(request, AppConstants.RI_FAVORITE_REPORTS);
+
+ int pageNo = 0;
+ try {
+ pageNo = Integer.parseInt(request.getParameter(AppConstants.RI_NEXT_PAGE));
+ } catch (Exception e) {
+ }
+
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ String rep_title_sql = "'<a class=\"hyperref1\" href=''#'' onClick=''document."+HTML_FORM+"."+AppConstants.RI_ACTION+".value=\"report.run\";"+
+ "document."+HTML_FORM+".c_master.value=\"'|| cr.rep_id||'\";document."+HTML_FORM+".refresh.value=\"Y\";document."+HTML_FORM+".submit();return false;''>'";
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+ //<a href="#" alt="Run report" onClick="document.forma.r_action.value='report.run'; document.forma.c_master.value='1073';">
+ /*String sql = "SELECT cr.rep_id, "
+ + "cr.rep_id report_id, "
+ + rep_title_sql+
+ "||DECODE(cr.public_yn, 'Y', '', '"
+ + PRIVATE_ICON
+ + "')||cr.title||'</a>' title, "
+ + "cr.descr, "
+ + "au.first_name||' '||au.last_name owner_name, "
+ + "TO_CHAR(cr.create_date, 'MM/DD/YYYY') create_date, "
+ + "DECODE(NVL(cr.owner_id, cr.create_id), "
+ + userID
+ + ", 'N', NVL(ra.read_only_yn, 'Y')) read_only_yn, "
+ + "DECODE(NVL(cr.owner_id, cr.create_id), "
+ + userID
+ + ", 'Y', 'N') user_is_owner_yn, "
+ + "case when report_xml like '%<allowSchedule>N</allowSchedule>%' "
+ + "then 'N' "
+ + "when report_xml like '%<allowSchedule>Y</allowSchedule>%' "
+ + "or 1 = (select distinct 1 from cr_report_schedule where rep_id = cr.rep_id) "
+ + "then 'Y' "
+ + "else 'N' end "
+ + "FROM cr_report cr, "
+ + "app_user au, "
+ + "(SELECT rep_id, "
+ + "MIN(read_only_yn) read_only_yn "
+ + "FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = "
+ + userID
+ + ") "
+ + "UNION ALL "
+ + "(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN ("
+ + roleList.toString() + "))" + ") report_access " + "GROUP BY rep_id) ra "
+ + "WHERE TO_CHAR(cr.rep_id) = nvl('" + fReportID
+ + "', TO_CHAR(cr.rep_id)) AND " + "UPPER(cr.title) LIKE UPPER('%"
+ + fReportName + "%') AND " + "nvl(cr.owner_id, cr.create_id) = au.user_id "
+ + "AND cr.rep_id = ra.rep_id (+) ";*/
+
+ String sql = Globals.getLoadReportSearchResult();
+ String rep_id = "";
+ String rep_id_options = "";
+ String rep_id_sql = " AND FORMAT(cr.rep_id, 0) like coalesce('%%', FORMAT(cr.rep_id, 0)) ";
+ if(request.getParameter("rep_id")!=null) {
+ rep_id = request.getParameter("rep_id");
+ }
+ if(request.getParameter("rep_id_options")!=null) {
+ rep_id_options = request.getParameter("rep_id_options");
+ }
+
+ /*Default: AND FORMAT(cr.rep_id, 0) like coalesce('%%', FORMAT(cr.rep_id, 0)) */
+
+ /*Equal to AND cr.rep_id = 1000 0 */
+ /*Less than : AND cr.rep_id < 1000 1 */
+ /*Greater than AND cr.rep_id > 1000 2 */
+
+
+ if(AppUtils.nvl(rep_id).length()>0 ) {
+ if(AppUtils.nvl(rep_id_options).length()>0 ) {
+ switch (rep_id_options) {
+ case "0":
+ rep_id_sql = " AND cr.rep_id = "+ rep_id+" ";
+ break;
+ case "1":
+ rep_id_sql = " AND cr.rep_id < "+ rep_id+" ";
+ break;
+ case "2":
+ rep_id_sql = " AND cr.rep_id > "+ rep_id+" ";
+ break;
+ default:
+ rep_id_sql = " AND FORMAT(cr.rep_id, 0) like coalesce('%%', FORMAT(cr.rep_id, 0)) ";
+ break;
+ }
+ } else {
+ rep_id_sql = " AND cr.rep_id = "+ rep_id+" ";
+ }
+ } else {
+ rep_id_sql = " AND FORMAT(cr.rep_id, 0) like coalesce('%%', FORMAT(cr.rep_id, 0)) "; //equal is default
+ }
+
+ sql = sql.replace("[fReportID]", rep_id_sql);
+
+ String rep_name = "";
+ String rep_name_options = "";
+ String rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('%%') ";
+ if(request.getParameter("rep_name")!=null) {
+ rep_name = request.getParameter("rep_name");
+ }
+ if(request.getParameter("rep_name_options")!=null) {
+ rep_name_options = request.getParameter("rep_name_options");
+ }
+
+ /* Report name AND UPPER(cr.title) LIKE UPPER('Dash%') 0 */
+
+ /* Report name AND UPPER(cr.title) LIKE UPPER('%1') 1 */
+ /* Report name AND UPPER(cr.title) LIKE UPPER('%1%') 2 */
+
+ if(AppUtils.nvl(rep_name).length()>0 ) {
+ if(AppUtils.nvl(rep_name_options).length()>0 ) {
+ switch (rep_name_options) {
+ case "0":
+ rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('"+rep_name+"%') ";
+ break;
+ case "1":
+ rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('%"+rep_name+"') ";
+ break;
+ case "2":
+ rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('%"+rep_name+"%') ";
+ break;
+ default:
+ rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('%%') ";
+ break;
+ }
+ } else {
+ rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('%"+rep_name+"%') "; //contains is default
+ }
+ } else {
+ rep_name_sql = " AND UPPER(cr.title) LIKE UPPER('%%') ";
+ }
+ sql = sql.replace("[fReportName]", rep_name_sql);
+
+ if (menuId.length() > 0){
+ /*sql += "AND INSTR('|'||cr.menu_id||'|', '|'||'" + menuId + "'||'|') > 0 "
+ * +"AND
+ * cr.menu_approved_yn =
+ * 'Y' "
+ ;*/
+ String sql_add = Globals.getLoadReportSearchInstr();
+ sql+= sql_add;
+ }
+
+ //String user_sql = " AND nvl(cr.owner_id, cr.create_id) = " + userID;
+ String user_sql = Globals.getLoadReportSearchResultUser();
+
+ //String public_sql = " AND (nvl(cr.owner_id, cr.create_id) = " + userID
+ // + " OR cr.public_yn = 'Y' OR ra.read_only_yn IS NOT NULL)";
+ String public_sql = Globals.getLoadReportSearchResultPublic();
+
+ //String fav_sql = " AND cr.rep_id in (select rep_id from cr_favorite_reports where user_id = " + userID +" ) ";
+ String fav_sql = Globals.getLoadReportSearchResultFav();
+
+ if (userOnly)
+ // My reports - user is owner
+ sql += " " + user_sql;
+ else if (publicOnly) {
+ // Public reports - user has read or write access to the report
+ // (user is owner or report is public or user has explicit user or
+ // role access)
+ if (!AppUtils.isSuperUser(request))
+ sql += " " + public_sql;
+ } else if (favoriteOnly) {
+ sql += " " + public_sql;
+ sql += " " + fav_sql;
+ } else if (!AppUtils.isSuperUser(request)) {
+ // All reports
+ // If user is super user - gets unrestricted access to all reports
+ // (read_only gets overriden later)
+ // else - not super user - doesn't get access to private reports of
+ // other users (= Public reports); Admin users get edit right
+ // override later
+ //sql += public_sql;
+ sql += " " + public_sql;
+ }
+
+
+
+ if (sortOrder.equals(AppConstants.RI_F_OWNER_ID)){
+ //sql += " ORDER BY DECODE(nvl(cr.owner_id, cr.create_id), " + userID
+ //+ ", ' ', upper(au.first_name||' '||au.last_name)), upper(cr.title)";
+ String sql_sort = Globals.getLoadReportSearchResultSort();
+ sql+=" " + sql_sort;
+ }
+ else if (sortOrder.equals(AppConstants.RI_F_REPORT_ID))
+ sql += " ORDER BY cr.rep_id";
+ else if(sortOrder.equals(AppConstants.RI_F_REPORT_CREATE_DATE))
+ sql += " ORDER BY cr.create_date";
+ else if(sortOrder.equals(AppConstants.RI_F_PUBLIC))
+ sql += " ORDER BY cr.public_yn desc";
+
+ else
+ // if(sortOrder.equals(AppConstants.RI_F_REPORT_NAME))
+ sql += " ORDER BY upper(cr.title)";
+
+ sql = sql.replace("[rep_title_sql]", "cr.title");
+ sql = sql.replace("[PRIVATE_ICON]", PRIVATE_ICON);
+ sql = sql.replace("[userID]", userID);
+ sql = sql.replace("[roleList.toString()]", roleList.toString());
+
+ //System.out.println("query is for search list is : " + sql);
+ DataSet ds = DbUtils.executeQuery(sql);
+
+ ReportSearchResultJSON rsr = new ReportSearchResultJSON(0, 6, 7);
+ rsr.parseData(ds, request, 0, 20, 6, 7);
+ //saveCSVPageFile(request, rsr);
+ //rsr.truncateToPage(pageNo);
+ //saveCSVPageFile(request, rsr);
+
+ return rsr;
+ } // loadReportSearchResult
+
+ public ReportSearchResult loadFolderReportResult(HttpServletRequest request)
+ throws Exception {
+ String userID = AppUtils.getUserID(request);
+ String fReportID = nvl(AppUtils.getRequestValue(request, AppConstants.RI_F_REPORT_ID));
+ String fReportName = nvl(AppUtils.getRequestValue(request,
+ AppConstants.RI_F_REPORT_NAME));
+ String sortOrder = nvl(AppUtils.getRequestValue(request, AppConstants.RI_SORT_ORDER),
+ AppConstants.RI_F_REPORT_NAME);
+
+ String menuId = nvl(AppUtils.getRequestValue(request, AppConstants.RI_LIST_CATEGORY));
+
+ boolean userOnly = AppUtils.getRequestFlag(request, AppConstants.RI_USER_REPORTS);
+ boolean publicOnly = AppUtils.getRequestFlag(request, AppConstants.RI_PUBLIC_REPORTS);
+
+ int pageNo = 0;
+ try {
+ pageNo = Integer.parseInt(request.getParameter(AppConstants.RI_NEXT_PAGE));
+ } catch (Exception e) {
+ }
+
+ StringBuffer roleList = new StringBuffer();
+ roleList.append("-1");
+ String rep_title_sql = "'<a class=\"hyperref1\" href=''#'' onClick=''document."+HTML_FORM+"."+AppConstants.RI_ACTION+".value=\"report.run\";"+
+ "document."+HTML_FORM+".c_master.value=\"'|| cr.rep_id||'\";document."+HTML_FORM+".submit();return false;''>'";
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();)
+ roleList.append("," + ((String) iter.next()));
+ //<a href="#" alt="Run report" onClick="document.forma.r_action.value='report.run'; document.forma.c_master.value='1073';">
+ /*String sql = "SELECT cr.rep_id, "
+ + "cr.rep_id report_id, "
+ + rep_title_sql+
+ "||DECODE(cr.public_yn, 'Y', '', '"
+ + PRIVATE_ICON
+ + "')||cr.title||'</a>' title, "
+ + "cr.descr, "
+ + "au.first_name||' '||au.last_name owner_name, "
+ + "TO_CHAR(cr.create_date, 'MM/DD/YYYY') create_date, "
+ + "DECODE(NVL(cr.owner_id, cr.create_id), "
+ + userID
+ + ", 'N', NVL(ra.read_only_yn, 'Y')) read_only_yn, "
+ + "DECODE(NVL(cr.owner_id, cr.create_id), "
+ + userID
+ + ", 'Y', 'N') user_is_owner_yn "
+ + "FROM cr_report cr, "
+ + "app_user au, "
+ + "(SELECT rep_id, "
+ + "MIN(read_only_yn) read_only_yn "
+ + "FROM ((SELECT ua.rep_id, ua.read_only_yn FROM cr_report_access ua WHERE ua.user_id = "
+ + userID
+ + ") "
+ + "UNION ALL "
+ + "(SELECT ra.rep_id, ra.read_only_yn FROM cr_report_access ra WHERE ra.role_id IN ("
+ + roleList.toString() + "))" + ") report_access " + "GROUP BY rep_id) ra "
+ + "WHERE TO_CHAR(cr.rep_id) = nvl('" + fReportID
+ + "', TO_CHAR(cr.rep_id)) AND " + "UPPER(cr.title) LIKE UPPER('%"
+ + fReportName + "%') AND " + "nvl(cr.owner_id, cr.create_id) = au.user_id "
+ + "AND cr.rep_id = ra.rep_id (+) ";*/
+
+ String sql = Globals.getLoadFolderReportResult();
+ sql = sql.replace("[rep_title_sql]", rep_title_sql);
+ sql = sql.replace("[PRIVATE_ICON]", PRIVATE_ICON);
+ sql = sql.replace("[userID]", userID);
+ sql = sql.replace("[roleList.toString()]", roleList.toString());
+ sql = sql.replace("[fReportID]", fReportID);
+ sql = sql.replace("[fReportName]", fReportName);
+
+ if (menuId.length() > 0){
+ /*sql += "AND INSTR('|'||cr.menu_id||'|', '|'||'" + menuId + "'||'|') > 0 "
+ * +"AND
+ * cr.menu_approved_yn =
+ * 'Y' "
+ ;*/
+ String sql_add = Globals.getLoadReportSearchInstr();
+ sql+= sql_add;
+ }
+
+ //String user_sql = " AND nvl(cr.owner_id, cr.create_id) = " + userID;
+ String user_sql = Globals.getLoadReportSearchResultUser();
+
+ //String public_sql = " AND (nvl(cr.owner_id, cr.create_id) = " + userID
+ // + " OR cr.public_yn = 'Y' OR ra.read_only_yn IS NOT NULL)";
+ String public_sql = Globals.getLoadReportSearchResultPublic();
+
+ if (userOnly)
+ // My reports - user is owner
+ sql += user_sql;
+ else if (publicOnly)
+ // Public reports - user has read or write access to the report
+ // (user is owner or report is public or user has explicit user or
+ // role access)
+ if (!AppUtils.isSuperUser(request))
+ sql += public_sql;
+ else if (!AppUtils.isSuperUser(request)) {
+ // All reports
+ // If user is super user - gets unrestricted access to all reports
+ // (read_only gets overriden later)
+ // else - not super user - doesn't get access to private reports of
+ // other users (= Public reports); Admin users get edit right
+ // override later
+ sql += public_sql;
+ }
+
+ if (sortOrder.equals(AppConstants.RI_F_OWNER_ID)){
+
+
+ //sql += " ORDER BY DECODE(nvl(cr.owner_id, cr.create_id), " + userID
+ // + ", ' ', au.first_name||' '||au.last_name), cr.title";
+
+ String sql_sort = Globals.getLoadFolderReportResultSort();
+ sql+=sql_sort;
+ }
+ else if (sortOrder.equals(AppConstants.RI_F_REPORT_ID))
+ sql += " ORDER BY cr.rep_id";
+ else if(sortOrder.equals(AppConstants.RI_F_REPORT_CREATE_DATE))
+ sql += " ORDER BY cr.create_date";
+ else if(sortOrder.equals(AppConstants.RI_F_PUBLIC))
+ sql += " ORDER BY cr.public_yn desc";
+ else
+ // if(sortOrder.equals(AppConstants.RI_F_REPORT_NAME))
+ sql += " ORDER BY cr.title";
+
+ //System.out.println("query is for search list is : " + sql);
+ DataSet ds = DbUtils.executeQuery(sql);
+
+ ReportSearchResult rsr = new ReportSearchResult(-1, 6, 7);
+ rsr.parseData(ds, request);
+ saveCSVPageFile(request, rsr);
+ rsr.truncateToPage(pageNo);
+ saveCSVPageFile(request, rsr);
+
+ return rsr;
+ } // loadFolderReportResult
+
+
+} // SearchHandler
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ChartSeqComparator.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ChartSeqComparator.java
new file mode 100644
index 00000000..7b15db55
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ChartSeqComparator.java
@@ -0,0 +1,49 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.Comparator;
+
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+
+public class ChartSeqComparator implements Comparator {
+
+ public int compare(Object o1, Object o2) {
+ DataColumnType dct1 = (DataColumnType) o1;
+ DataColumnType dct2 = (DataColumnType) o2;
+
+ int dct1ChartSeq = (dct1.getChartSeq()!=null ? dct1.getChartSeq().intValue(): -1);
+ int dct2ChartSeq = (dct2.getChartSeq()!=null ? dct2.getChartSeq().intValue(): -1);
+
+ if (dct1ChartSeq == dct2ChartSeq)
+ return 0;
+ else if (dct1ChartSeq < 0) // Position columns
+ // with seq -1 at
+ // the end
+ return 1;
+ else if (dct2ChartSeq < 0)
+ return -1;
+ else if (dct1ChartSeq < dct2ChartSeq)
+ return -1;
+ else
+ return 1;
+ } // compare
+
+} // ChartSeqComparator
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameColLookup.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameColLookup.java
new file mode 100644
index 00000000..d7fdc33a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameColLookup.java
@@ -0,0 +1,35 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+public class IdNameColLookup extends IdNameLookup {
+ private String colId = null;
+
+ public IdNameColLookup(String colId, String dbTableName, String dbIdField,
+ String dbNameField, String dbSortByField) {
+ super(dbTableName, dbIdField, dbNameField, dbSortByField, false);
+ this.colId = colId;
+ } // IdNameColLookup
+
+ public String getColId() {
+ return colId;
+ }
+
+} // IdNameColLookup
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameList.java
new file mode 100644
index 00000000..dba3db03
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameList.java
@@ -0,0 +1,183 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.Vector;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+public class IdNameList extends Vector {
+ protected int pageNo = -1;
+
+ protected int pageSize = 50;
+
+ private int nextElemIdx = 0;
+
+ private String oldSql = null;
+
+ public IdNameList() {
+ super();
+ pageSize = Globals.getFormFieldsListSize();
+ } // IdNameList
+
+ public int getPageNo() {
+ return pageNo;
+ } // getPageNo
+
+ public int getPageSize() {
+ return pageSize;
+ } // getPageSize
+
+ public int getDataSize() {
+ return size();
+ } // getDataSize
+
+ public void resetNext() {
+ resetNext(0);
+ } // resetNext
+
+ public void resetNext(int toPos) {
+ nextElemIdx = toPos;
+ } // resetNext
+
+ public boolean hasNext() {
+ return (nextElemIdx < size());
+ } // hasNext
+
+ public IdNameValue getNext() {
+ return hasNext() ? getValue(nextElemIdx++) : null;
+ } // getNext
+
+ public int getCount() {
+ return size();
+ } // getCount
+
+ public IdNameValue getValue(int idx) {
+ return (IdNameValue) get(idx);
+ } // getValue
+
+ public void addValue(IdNameValue value) {
+ add(value);
+ } // addValue
+
+ public void addValue(String id, String name, boolean defaultValue) {
+ addValue(new IdNameValue(id, name, defaultValue));
+ } // addValue
+
+ public void addValue(String id, String name, boolean defaultValue, boolean readOnly) {
+ addValue(new IdNameValue(id, name, defaultValue, readOnly));
+ } // addValue
+
+ public void addValue(String id, String name) {
+ addValue(new IdNameValue(id, name));
+ } // addValue
+
+ public void addValue(int idx, IdNameValue value) {
+ add(idx, value);
+ } // addValue
+
+ public void addValue(int idx, String id, String name) {
+ addValue(idx, new IdNameValue(id, name));
+ } // addValue
+
+ public String getNameById(String id) {
+ for (int i = 0; i < size(); i++) {
+ IdNameValue value = getValue(i);
+ if (value.getId().equals(id))
+ return value.getName();
+ } // for
+
+ return null;
+ } // getNameById
+
+ public String getIdByName(String name) {
+ for (int i = 0; i < size(); i++) {
+ IdNameValue value = getValue(i);
+ if (value.getName().equals(name))
+ return value.getId();
+ } // for
+
+ return null;
+ } // getIdByName
+
+ public boolean canUseSearchString() {
+ return true;
+ }
+
+ public String getBaseSQL() {
+ return null;
+ }
+
+ public String getOldSql() {
+ return oldSql;
+ }
+
+ public void setOldSql(String oldSql) {
+ this.oldSql = oldSql;
+ }
+ public String getBaseWholeSQL() {
+ return null;
+ }
+
+ public String getBaseWholeReadonlySQL() {
+ return null;
+ }
+
+ public String getBaseSQLForPDFExcel(boolean multiParam) {
+ return null;
+ }
+
+ public void clearData() {
+ }
+
+ public void loadData(String pageNo, String searchString, String dbInfo,String userId) throws RaptorException {}
+ public void loadUserData(String pageNo, String searchString, String dbInfo,String userId) throws RaptorException {}
+ public void loadUserData(int pageNo, String searchString, String dbInfo, String userId) throws RaptorException {}
+ public void loadUserData(String searchString, int pageNo, String dbInfo) throws RaptorException {}
+
+ public void loadData(String pageNo) throws RaptorException {}
+ public void loadData(int pageNo) throws RaptorException {}
+ public void loadData(String pageNo, String searchString, String dbInfo) throws RaptorException {}
+ private void loadData(int pageNo, String searchString, String dbInfo) throws RaptorException {}
+
+/*
+ public void loadData(int pageNo, String dbInfo) throws RaptorException {
+ }
+
+ public void loadUserData(int pageNo, String dbInfo, String userId) throws RaptorException {
+ }
+
+
+
+
+ public void loadData(String pageNo, String searchString) throws RaptorException {
+ }
+
+*/
+ protected static String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ protected static String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+} // IdNameList
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameLookup.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameLookup.java
new file mode 100644
index 00000000..e4424f62
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameLookup.java
@@ -0,0 +1,198 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+
+public class IdNameLookup extends IdNameSql {
+ private String dbTableName = null;
+
+ private String dbIdField = null;
+
+ private String dbNameField = null;
+
+ private String dbSortByField = null;
+
+ private String searchString = "";
+
+ public IdNameLookup(int pageNo, String dbTableName, String dbIdField, String dbNameField) {
+ this(dbTableName, dbIdField, dbNameField);
+
+ this.pageNo = pageNo;
+ } // IdNameLookup
+
+ public IdNameLookup(String dbTableName, String dbIdField, String dbNameField) {
+ this(dbTableName, dbIdField, dbNameField, null, "", false);
+ } // IdNameLookup
+
+/* public IdNameLookup(String dbTableName, String dbIdField, String dbNameField,
+ String dbSortByField) {
+ super();
+
+ setDbTableName(dbTableName);
+ setDbIdField(dbIdField);
+ setDbNameField(dbNameField);
+ setDbSortByField(dbSortByField);
+ updateParentSQL();
+ } // IdNameLookup
+
+ public IdNameLookup(String dbTableName, String dbIdField, String dbNameField,
+ String dbSortByField, String defaultSQL) {
+ super();
+
+ setDbTableName(dbTableName);
+ setDbIdField(dbIdField);
+ setDbNameField(dbNameField);
+ setDbSortByField(dbSortByField);
+ setDefaultSQL(defaultSQL);
+ updateParentSQL();
+ } // IdNameLookup
+*/
+ public IdNameLookup(String dbTableName, String dbIdField, String dbNameField,
+ String dbSortByField, boolean textField) {
+ super();
+ setDbTableName(dbTableName);
+ setDbIdField(dbIdField);
+ setDbNameField(dbNameField);
+ setDbSortByField(dbSortByField);
+ if(!textField)
+ updateParentSQL();
+ } // IdNameLookup
+
+ public IdNameLookup(String dbTableName, String dbIdField, String dbNameField,
+ String dbSortByField, String defaultSQL, boolean textField) {
+ super();
+
+ setDbTableName(dbTableName);
+ setDbIdField(dbIdField);
+ setDbNameField(dbNameField);
+ setDbSortByField(dbSortByField);
+ setDefaultSQL(defaultSQL);
+ if(!textField)
+ updateParentSQL();
+ } // IdNameLookup
+
+ public String getDbTableName() {
+ return dbTableName;
+ }
+
+ public String getDbIdField() {
+ return dbIdField;
+ }
+
+ public String getDbNameField() {
+ return dbNameField;
+ }
+
+ public String getDbSortByField() {
+ return dbSortByField;
+ }
+
+ public void setDbTableName(String dbTableName) {
+ this.dbTableName = dbTableName;
+ }
+
+ public void setDbIdField(String dbIdField) {
+ this.dbIdField = dbIdField;
+ }
+
+ public void setDbNameField(String dbNameField) {
+ this.dbNameField = dbNameField;
+ }
+
+
+ public void setDbSortByField(String dbSortByField) {
+ this.dbSortByField = dbSortByField;
+ }
+
+ private void updateParentSQL() {
+ String sql_start = "SELECT DISTINCT " + dbIdField + " id, " + dbNameField + " name";
+ String sql_end = " FROM " + dbTableName + " WHERE " + dbIdField + " IS NOT NULL";
+ if (searchString.length() > 0)
+ sql_end += " AND UPPER(" + dbNameField + ") LIKE UPPER('" + searchString + "')";
+
+ String sql_middle = "";
+ if (dbSortByField != null && (!dbSortByField.equals(dbNameField)) && (!dbSortByField.trim().startsWith("TO_DATE")))
+ sql_middle = ", "
+ + ((dbSortByField.indexOf(' ') > 0) ? dbSortByField.substring(0,
+ dbSortByField.indexOf(' ')) : dbSortByField) + " sort";
+
+ setSqlNoOrderBy(sql_start + sql_middle + sql_end);
+// System.out.println("SQL Start " + sql_start);
+// System.out.println("SQL Middle " + sql_middle);
+// System.out.println("SQL End " + sql_end);
+// System.out.println("DbSortByField " + dbSortByField);
+
+ setSql(sql_start + sql_middle + sql_end + " ORDER BY " + nvl(dbSortByField, "2"));
+ } // updateParentSQL
+
+ public boolean canUseSearchString() {
+ return true;
+ }
+
+ public String getBaseSQL() {
+ return "SELECT " + dbIdField + " FROM " + dbTableName;
+ } // getBaseSQL
+
+ public String getBaseWholeSQL() {
+ return "SELECT " + dbIdField + " FROM " + dbTableName;
+ } // getBaseSQL
+
+ /*
+ public void loadData(int pageNo) throws RaptorException {
+ loadData(pageNo, "");
+ } // loadData
+
+ public void loadData(String pageNo) throws RaptorException {
+ loadData(pageNo, "");
+ } // loadData
+*/
+
+ public void loadData(String pageNo, String searchString, String dbInfo) throws RaptorException {
+ int iPageNo = 0;
+
+ if (pageNo != null)
+ try {
+ iPageNo = Integer.parseInt(pageNo);
+ } catch (NumberFormatException e) {
+ }
+
+ loadData(iPageNo, searchString, dbInfo);
+ } // loadData
+
+ private void loadData(int pageNo, String searchString, String dbInfo) throws RaptorException {
+ boolean dataAlreadyLoaded = (this.pageNo == pageNo)
+ && (this.searchString.equals(searchString));
+
+ if (dataAlreadyLoaded)
+ return;
+
+ if (!this.searchString.equals(searchString)) {
+ dataSize = -1;
+ pageNo = 0;
+ } // if
+
+ this.pageNo = pageNo;
+ this.searchString = searchString;
+ updateParentSQL();
+ performLoadData(searchString,dbInfo);
+ } // loadData
+
+} // IdNameLookup
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameSql.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameSql.java
new file mode 100644
index 00000000..9928ad80
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameSql.java
@@ -0,0 +1,400 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+/* ===========================================================================================
+ * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
+ * Raptor : This tool is used to generate different kinds of reports with lot of utilities
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * IdNameSql.java - This class is used to generate form field items when sql is provided.
+ * -------------------------------------------------------------------------------------------
+ *
+ * Created By : Stan Pishamanov
+ * Modified By: Sundar Ramalingam
+ *
+ * Changes
+ * -------
+ * 08-Jun-2009 : Version 8.3 (RS); Rownum references is avoided for reports connnecting to Daytona
+ * Database.
+ *
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.HashMap;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class IdNameSql extends IdNameList {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(IdNameSql.class);
+
+
+ protected int dataSize = -1;
+
+ protected int dataSizeUsedInPopup = -1;
+
+ private String sql = null;
+
+ private String oldSql = null;
+
+ private String defaultSQL = null;
+
+ private String sqlNoOrderBy = null;
+
+ public IdNameSql(int pageNo, String sql, String defaultSQL) {
+ this(sql,defaultSQL);
+ this.pageNo = pageNo;
+ } // IdNameSql
+
+ public IdNameSql(String sql) {
+ this();
+ setSql(sql);
+ } // IdNameSql
+
+ public IdNameSql(String sql, String defaultSQL) {
+ this();
+ setDefaultSQL(defaultSQL);
+ setSql(sql);
+ } // IdNameSql
+
+ protected IdNameSql() {
+ super();
+ } // IdNameSql
+
+ public boolean canUseSearchString() {
+ return true;
+ }
+
+ public String getSql() {
+ return sql;
+ }
+
+ public String getOldSql() {
+ return oldSql;
+ }
+
+ public String getBaseSQL() {
+ return "SELECT id FROM (" + sql + ") xid";
+ }
+
+ public String getBaseWholeSQL() {
+ return "SELECT id, name FROM (" + sql + ") xid";
+ }
+
+ public String getBaseWholeReadonlySQL() {
+ return "SELECT id, name, ff_readonly FROM (" + sql + ") xid";
+ }
+
+ public String getBaseSQLForPDFExcel(boolean multiParam) {
+ if(!multiParam)
+ return "SELECT id, name FROM (" + sql + ") xid where id = '[VALUE]'";
+ else
+ return "SELECT id, name FROM (" + sql + ") xid where id in [VALUE]";
+
+ }
+
+ // public String getSqlNoOrderBy() { return sqlNoOrderBy; }
+
+ protected void setSql(String sql) {
+ this.sql = sql;
+ }
+
+ public void setOldSql(String oldSql) {
+ this.oldSql = oldSql;
+ }
+
+ protected void setSqlNoOrderBy(String sql) {
+ this.sqlNoOrderBy = sql;
+ }
+
+ public int getDataSize() {
+ return dataSize;
+ } // getDataSize
+
+ public int getDataSizeUsedinPopup() {
+ return dataSizeUsedInPopup;
+ } // getDataSizeUsedinPopup
+
+ public void setDataSizeUsedinPopup(int dataSizePop) {
+ this.dataSizeUsedInPopup = dataSizePop;
+ } // getDataSizeUsedinPopup
+
+ public void clearData() {
+ removeAllElements();
+ } // clearData
+
+/* public void loadData(String pageNo, String searchString, String dbInfo, String userId) throws RaptorException {
+ // setSql(searchString);
+ loadUserData(pageNo, searchString, dbInfo,userId);
+ } // loadData
+*/
+
+ public void loadUserData(String pageNo, String searchString, String dbInfo,String userId) throws RaptorException {
+ int iPageNo = 0;
+
+ if (pageNo != null)
+ try {
+ iPageNo = Integer.parseInt(pageNo);
+ } catch (NumberFormatException e) {
+ }
+
+ loadUserData(iPageNo, searchString, dbInfo,userId);
+ } // loadData
+
+ public void loadUserData(int pageNo, String searchString, String dbInfo, String userId) throws RaptorException {
+ if(userId!=null) {
+ String sql = Utils.replaceInString(getSql(), "[LOGGED_USERID]", userId);
+ //String defaultSQL = "";
+ if(defaultSQL!=null && (defaultSQL.trim().toLowerCase().startsWith("select")) ) {
+ defaultSQL = Utils.replaceInString(getDefaultSQL(), "[LOGGED_USERID]", userId);
+ setDefaultSQL(defaultSQL);
+ }
+ setSql(sql);
+
+ }
+ loadData(searchString,pageNo, dbInfo);
+ }
+
+ public void loadData(String searchString, int pageNo, String dbInfo) throws RaptorException {
+
+ //boolean dataAlreadyLoaded = (this.pageNo == pageNo);
+
+ //if (dataAlreadyLoaded)
+ // return;
+
+ this.pageNo = pageNo;
+
+ performLoadData(searchString, dbInfo);
+ } // loadData
+
+ protected void performLoadData(String searchString, String dbInfo) throws RaptorException {
+ long currentTime = System.currentTimeMillis();
+ int startRow = 0;
+ int endRow = dataSize;
+ String readOnlyInSql = "ff_readonly";
+ String dbType = Globals.getDBType();
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if (pageNo >= 0) {
+ startRow = pageNo * pageSize;
+ endRow = startRow + pageSize;
+ } // if
+ DataSet ds = null;
+ DataSet dsDefault = null;
+ StringBuffer query = new StringBuffer("");
+ StringBuffer queryPop = new StringBuffer("");
+ String sql = getSql();
+ boolean avail_ReadOnly = (sql.toLowerCase().indexOf(readOnlyInSql)!=-1);
+
+ if (dbType.equals("DAYTONA") && getSql().trim().toUpperCase().startsWith("SELECT")) {
+ query.append(getSql());
+ } else {
+ if(avail_ReadOnly) // need to add readonlyinsql
+ if(!(Globals.isMySQL() && dbType.equals(AppConstants.MYSQL)))
+ query.append("SELECT rownum, id, name, " + readOnlyInSql +" FROM ("+ Globals.getReportSqlForFormfield() +", " + readOnlyInSql + " FROM (" + sql
+ + ") x "+ Globals.getReportSqlForFormfieldSuffix());
+ else
+ query.append("SELECT id, name, " + readOnlyInSql +" FROM ("+ Globals.getReportSqlForFormfield() +", " + readOnlyInSql + " FROM (" + sql
+ + ") x "+ Globals.getReportSqlForFormfieldSuffix());
+ else
+ query.append(Globals.getReportSqlForFormfieldPrefix()+ Globals.getReportSqlForFormfield() +" FROM (" + sql
+ + ") x " + Globals.getReportSqlForFormfieldSuffix());
+ if(pageNo!= -2 && (dbType.equals(AppConstants.ORACLE)) ) {
+ query.append(" WHERE rownum <= " + ((dataSize < 0) ? (endRow + 1) : endRow));
+ } else if(pageNo!=2 && (dbType.equals(AppConstants.POSTGRESQL))) {
+ query.append(" LIMIT " + ((dataSize < 0) ? (endRow + 1) : endRow));
+
+ } else if(pageNo!=2 && (dbType.equals(AppConstants.MYSQL))) {
+ query.append(" LIMIT " + startRow); //((dataSize < 0) ? (endRow + 1) : endRow)
+
+ }
+ if(searchString!=null && searchString.length()>0 && !searchString.equals("%")) {
+ if(pageNo == -2) query.append(" WHERE ");
+ else query.append(" and ");
+ query.append("name like '"+ searchString +"'");
+ }
+ if(dbType.equals(AppConstants.POSTGRESQL)) {
+ query.append(") xx OFFSET " + startRow);
+ } else if(dbType.equals(AppConstants.MYSQL)) {
+ query.append(" ," + ((dataSize < 0) ? (endRow + 1) : endRow) +") xx");
+ } else if(dbType.equals(AppConstants.ORACLE))
+ query.append(") xx WHERE rownum>" + startRow);
+ }
+ String defaultQuery ="";
+ boolean readOnly = true;
+ ds = ConnectionUtils.getDataSet(query.toString(), dbInfo);
+
+ // if ( (dbInfo!=null) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ // Globals.getRDbUtils().setDBPrefix(dbInfo);
+ // ds = RemDbUtils.executeQuery(query);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(query);
+ clearData();
+ if (dbType.equals("DAYTONA") && (getDefaultSQL()!=null && getDefaultSQL().trim().toUpperCase().startsWith("SELECT"))) {
+ defaultQuery = getDefaultSQL();
+ } else if (getDefaultSQL()!=null && getDefaultSQL().length()>10 && getDefaultSQL().substring(0,10).toLowerCase().startsWith("select")) {
+ defaultQuery = Globals.getReportSqlForFormfieldPrefix()+ Globals.getReportSqlForFormfield() +" FROM (" + getDefaultSQL()
+ + ") x "
+ + ") xx ";
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Default Query " +defaultQuery));
+ }
+ HashMap defaultMap = new HashMap();
+ if(!isNull(defaultQuery)) {
+ dsDefault = ConnectionUtils.getDataSet(defaultQuery, dbInfo);
+ if(dsDefault!=null && dsDefault.getRowCount()>0) {
+ for (int i = 0; i < dsDefault.getRowCount(); i++) {
+ //addValue(dsDefault.getString(i, 0), dsDefault.getString(i, 1), true);
+ defaultMap.put(dsDefault.getString(i, "id"), dsDefault.getString(i, "name"));
+ }
+ }
+ }
+
+ for (int i = 0; i < ((pageNo!=-2)?Math.min(ds.getRowCount(), pageSize):ds.getRowCount()); i++) {
+ //if(getCount()==0)
+ // addValue(ds.getString(i, 0), ds.getString(i, 1));
+ if(i==0 && avail_ReadOnly)
+ readOnly = ds.getString(i, "ff_readonly").toUpperCase().startsWith("Y")||ds.getString(i, "ff_readonly").toUpperCase().startsWith("T");
+ if(getCount()>=0) {//&& !((IdNameValue)getValue(0)).getId().equals(ds.getString(i, 0)))
+ if(defaultMap.get(ds.getString(i, "id")) == null)
+ if(avail_ReadOnly)
+ addValue(ds.getString(i, "id"), ds.getString(i, "name"), false, readOnly);
+ else
+ addValue(ds.getString(i, "id"), ds.getString(i, "name"), false);
+ else
+ if(avail_ReadOnly)
+ addValue(ds.getString(i, "id"), ds.getString(i, "name"), true, readOnly);
+ else
+ addValue(ds.getString(i, "id"), ds.getString(i, "name"), true);
+ }
+ }
+
+ if (!(dbType.equals("DAYTONA"))) {
+ if (ds.getRowCount() <= pageSize) {
+ if(dsDefault!=null && dsDefault.getRowCount()>0)
+ dataSize = ds.getRowCount()+1;
+ else
+ dataSize = ds.getRowCount();
+
+ //System.out.println("IDNAME SQL COUNT");*/
+ if(searchString!=null && searchString.length()>0 && !searchString.equals("%")) {
+ queryPop = new StringBuffer("");
+ queryPop.append("SELECT count(*) num_rows FROM ("+ Globals.getReportSqlForFormfield() +", name FROM (" + sql
+ + ") x ");
+ if(searchString!=null && searchString.length()>0 && !searchString.equals("%"))
+ queryPop.append(" where name like '"+ searchString +"'");
+ queryPop.append(") xx ");
+
+ ds = ConnectionUtils.getDataSet(queryPop.toString(), dbInfo);
+ try {
+ dataSizeUsedInPopup = Integer.parseInt(ds.getString(0, 0));
+ } catch (NumberFormatException e) {
+ }
+ } else if(dataSizeUsedInPopup == -3) {
+ queryPop = new StringBuffer("");
+ //System.out.println("IDNAME SQL COUNT");
+ //queryPop.append("SELECT count(*) num_rows FROM ("+query.toString()+") x");
+ queryPop.append("SELECT count(*) num_rows FROM ("+ Globals.getReportSqlForFormfield() +", name FROM (" + sql
+ + ") x ");
+ queryPop.append(") xx ");
+
+ ds = ConnectionUtils.getDataSet(queryPop.toString(), dbInfo);
+ // if ( (dbInfo!=null) &&
+ // (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ // Globals.getRDbUtils().setDBPrefix(dbInfo);
+ // ds = RemDbUtils.executeQuery(query);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(query);
+ //
+ try {
+ dataSizeUsedInPopup = Integer.parseInt(ds.getString(0, 0));
+ } catch (NumberFormatException e) {
+ }
+
+ }
+
+ } else {
+ //pageNo = 0;
+ if(pageNo!= -2) {
+ queryPop = new StringBuffer("");
+ //System.out.println("IDNAME SQL COUNT");
+ //queryPop.append("SELECT count(*) num_rows FROM ("+query.toString()+") x");
+ queryPop.append("SELECT count(*) num_rows FROM ("+ Globals.getReportSqlForFormfield() +" FROM (" + sql
+ + ") x ");
+ queryPop.append(") xx ");
+
+ ds = ConnectionUtils.getDataSet(queryPop.toString(), dbInfo);
+ // if ( (dbInfo!=null) &&
+ // (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ // Globals.getRDbUtils().setDBPrefix(dbInfo);
+ // ds = RemDbUtils.executeQuery(query);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(query);
+ //
+ try {
+ dataSize = Integer.parseInt(ds.getString(0, 0));
+ dataSizeUsedInPopup = Integer.parseInt(ds.getString(0, 0));
+ } catch (NumberFormatException e) {
+ }
+ }
+ } // else
+ } // dataSize < 0
+ long totalTime = System.currentTimeMillis() - currentTime;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken to the above formfield Query (+ count Query if any) --- " + totalTime));
+ } // performLoadData
+
+
+ public String getDefaultSQL() {
+
+ return defaultSQL;
+ }
+
+
+ public void setDefaultSQL(String defaultSQL) {
+
+ this.defaultSQL = defaultSQL;
+ }
+
+ public void setSQL(String sql_)
+ {
+ this.sql = sql_;
+ }
+
+ public static boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+} // IdNameSql
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameValue.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameValue.java
new file mode 100644
index 00000000..5ac81f7b
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/IdNameValue.java
@@ -0,0 +1,100 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+public class IdNameValue {
+ private String id = null;
+
+ private String name = null;
+
+ private boolean defaultValue = false;
+
+ private boolean readOnly = false;
+
+ public IdNameValue() {
+ super();
+ }
+
+ public IdNameValue(String id, String name) {
+ this();
+
+ setId(id);
+ setName(name);
+ setDefaultValue(false);
+
+ } // IdNameValue
+
+ public IdNameValue(String id, String name, boolean defaultValue) {
+ this();
+
+ setId(id);
+ setName(name);
+ setDefaultValue(defaultValue);
+ } // IdNameValue
+
+ public IdNameValue(String id, String name, boolean defaultValue, boolean readOnly) {
+ this();
+
+ setId(id);
+ setName(name);
+ setDefaultValue(defaultValue);
+ setReadOnly(readOnly);
+ } // IdNameValue
+
+ public String getId() {
+ return id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public boolean isDefaultValue() {
+ return defaultValue;
+ }
+
+ public void setDefaultValue(boolean defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ /**
+ * @return the visibility
+ */
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+
+ /**
+ * @param visibility the visibility to set
+ */
+ public void setReadOnly(boolean readOnly) {
+ this.readOnly = readOnly;
+ }
+
+
+} // IdNameValue
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/NameComparator.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/NameComparator.java
new file mode 100644
index 00000000..8a6f2a9e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/NameComparator.java
@@ -0,0 +1,32 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.Comparator;
+
+public class NameComparator implements Comparator {
+
+ public int compare(Object o1, Object o2) {
+ return ((IdNameValue) o1).getName()
+ .compareToIgnoreCase((((IdNameValue) o2).getName()));
+ } // compare
+
+} // NameComparator
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderBySeqComparator.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderBySeqComparator.java
new file mode 100644
index 00000000..930f508c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderBySeqComparator.java
@@ -0,0 +1,37 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.Comparator;
+
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+
+public class OrderBySeqComparator implements Comparator {
+
+ public int compare(Object o1, Object o2) {
+ if (((DataColumnType) o1).getOrderBySeq() == ((DataColumnType) o2).getOrderBySeq())
+ return 0;
+ else if (((DataColumnType) o1).getOrderBySeq() < ((DataColumnType) o2).getOrderBySeq())
+ return -1;
+ else
+ return 1;
+ } // compare
+
+} // OrderSeqComparator
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderSeqComparator.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderSeqComparator.java
new file mode 100644
index 00000000..e6c013dc
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/OrderSeqComparator.java
@@ -0,0 +1,37 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.Comparator;
+
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+
+public class OrderSeqComparator implements Comparator {
+
+ public int compare(Object o1, Object o2) {
+ if (((DataColumnType) o1).getOrderSeq() == ((DataColumnType) o2).getOrderSeq())
+ return 0;
+ else if (((DataColumnType) o1).getOrderSeq() < ((DataColumnType) o2).getOrderSeq())
+ return -1;
+ else
+ return 1;
+ } // compare
+
+} // OrderSeqComparator
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportSecurity.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportSecurity.java
new file mode 100644
index 00000000..f281ac4d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportSecurity.java
@@ -0,0 +1,407 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.UserAccessException;
+import org.openecomp.portalsdk.analytics.model.definition.SecurityEntry;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class ReportSecurity extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportSecurity.class);
+
+
+ private String reportID = null;
+
+ private String ownerID = null;
+
+ private String createID = null;
+
+ private String createDate = null;
+
+ private String updateID = null;
+
+ private String updateDate = null;
+
+ private boolean isPublic = false;
+
+ private Hashtable reportRoles = new Hashtable();
+
+ private Hashtable reportUsers = new Hashtable();
+
+ public ReportSecurity(String reportID) {
+ this(reportID, null, null, null, null, null, false);
+ } // ReportSecurity
+
+ public ReportSecurity(String reportID, String ownerID, String createID, String createDate,
+ String updateID, String updateDate, boolean isPublic) {
+ super();
+
+ if (ownerID == null)
+ // Need to load the report record from the database
+ if (!reportID.equals("-1"))
+ try {
+ /*DataSet ds = DbUtils
+ .executeQuery("SELECT NVL(cr.owner_id, cr.create_id) owner_id, cr.create_id, TO_CHAR(cr.create_date, '"
+ + Globals.getOracleTimeFormat()
+ + "') create_date, maint_id, TO_CHAR(cr.maint_date, '"
+ + Globals.getOracleTimeFormat()
+ + "') update_date, cr.public_yn FROM cr_report cr WHERE cr.rep_id="
+ + reportID);*/
+ String sql = Globals.getReportSecurity();
+ sql = sql.replace("[rw.getReportID()]", reportID);
+ DataSet ds = DbUtils.executeQuery(sql);
+ ownerID = ds.getString(0, 0);
+ createID = ds.getString(0, 1);
+ createDate = ds.getString(0, 2);
+ updateID = ds.getString(0, 3);
+ updateDate = ds.getString(0, 4);
+ isPublic = nvl(ds.getString(0, 5)).equals("Y");
+ } catch (Exception e) {
+ String eMsg = "ReportSecurity.ReportSecurity: Unable to load report record details. Exception: "
+ + e.getMessage();
+ //Log.write(eMsg);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] "+eMsg));
+ throw new RuntimeException(eMsg);
+ }
+
+ this.reportID = reportID;
+ this.ownerID = ownerID;
+ this.createID = createID;
+ this.createDate = createDate;
+ this.updateID = updateID;
+ this.updateDate = updateDate;
+ this.isPublic = isPublic;
+
+ /*
+ * reportUsers.put(ownerID, "N"); // Owner has full access
+ * reportRoles.put(AppUtils.getSuperRoleID(), "N"); // Super role has
+ * full access for(Iterator iter=AppUtils.getAdminRoleIDs().iterator();
+ * iter.hasNext(); ) reportRoles.put((String) iter.next(), "Y"); //
+ * Admin role(s) have read-only access
+ */
+ try {
+ String reportUserAccessSql= Globals.getReportUserAccess();
+ reportUserAccessSql = reportUserAccessSql.replace("[reportID]", reportID);
+
+ DataSet ds = DbUtils
+ .executeQuery(reportUserAccessSql);
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ String roleID = nvl(ds.getString(i, 0));
+ if (roleID.length() > 0)
+ reportRoles.put(roleID, ds.getString(i, 2));
+
+ String userID = nvl(ds.getString(i, 1));
+ if (userID.length() > 0)
+ reportUsers.put(userID, ds.getString(i, 2));
+ } // for
+ } catch (Exception e) {
+ String eMsg = "ReportSecurity.ReportSecurity: Unable to load access priviledges - error "
+ + e.getMessage();
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] " + eMsg));
+ throw new RuntimeException(eMsg);
+ }
+ } // ReportSecurity
+
+ public String getOwnerID() {
+ return ownerID;
+ }
+
+ public String getCreateID() {
+ return createID;
+ }
+
+ public String getCreateDate() {
+ return createDate;
+ }
+
+ public String getUpdateID() {
+ return updateID;
+ }
+
+ public String getUpdateDate() {
+ return updateDate;
+ }
+
+ public void setOwnerID(String ownerID) {
+ this.ownerID = ownerID;
+ }
+
+ public void setPublic(boolean isPublic) {
+ this.isPublic = isPublic;
+ }
+
+ public void reportCreate(String reportID, String userID, boolean isPublic) {
+ this.reportID = reportID;
+ this.ownerID = userID;
+ this.createID = userID;
+ this.createDate = Utils.getCurrentDateTime();
+ this.updateID = userID;
+ this.updateDate = this.createDate;
+ this.isPublic = isPublic;
+ } // reportCreate
+
+ public void reportUpdate(HttpServletRequest request) throws RaptorException {
+ checkUserWriteAccess(request);
+ String userID = AppUtils.getUserID(request);
+ this.updateID = userID;
+ this.updateDate = Utils.getCurrentDateTime();
+ } // reportUpdate
+
+ /** ************************************************************* */
+
+ public Vector getReportUsers(HttpServletRequest request) throws RaptorException {
+ HttpSession session = request.getSession();
+ String query = Globals.getCustomizedScheduleQueryForUsers();
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ String param = "";
+ for (int i = 0; i < sessionParameters.length; i++) {
+ param = (String)session.getAttribute(sessionParameters[0]);
+ query = Utils.replaceInString(query, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ boolean isAdmin = AppUtils.isAdminUser(request);
+ Vector allUsers = AppUtils.getAllUsers(query,param, isAdmin);
+ Vector rUsers = new Vector(allUsers.size());
+
+ for (Iterator iter = allUsers.iterator(); iter.hasNext();) {
+ IdNameValue user = (IdNameValue) iter.next();
+ String readOnlyAccess = (String) reportUsers.get(user.getId());
+ if (readOnlyAccess != null)
+ rUsers.add(new SecurityEntry(user.getId(), user.getName(), readOnlyAccess
+ .equals("Y")));
+ } // for
+
+ return rUsers;
+ } // getReportUsers
+
+ public Vector getReportRoles(HttpServletRequest request) throws RaptorException {
+ HttpSession session = request.getSession();
+ String query = Globals.getCustomizedScheduleQueryForRoles();
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String param = "";
+ for (int i = 0; i < sessionParameters.length; i++) {
+ param = (String)session.getAttribute(sessionParameters[0]);
+ query = Utils.replaceInString(query, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+
+ }
+ boolean isAdmin = AppUtils.isAdminUser(request);
+ Vector allRoles = AppUtils.getAllRoles(query, param, isAdmin);
+ Vector rRoles = new Vector(allRoles.size());
+
+ for (Iterator iter = allRoles.iterator(); iter.hasNext();) {
+ IdNameValue role = (IdNameValue) iter.next();
+ String readOnlyAccess = (String) reportRoles.get(role.getId());
+ if (readOnlyAccess != null)
+ rRoles.add(new SecurityEntry(role.getId(), role.getName(), readOnlyAccess
+ .equals("Y")));
+ } // for
+
+ return rRoles;
+ } // getReportRoles
+
+ /** ************************************************************* */
+
+ private void validateReadOnlyAccess(String readOnlyAccess) throws Exception {
+ if (!(readOnlyAccess != null && (readOnlyAccess.equals("Y") || readOnlyAccess
+ .equals("N"))))
+ throw new RuntimeException(
+ "[ReportSecurity.validateReadOnlyAccess] Invalid parameter value");
+ } // validateReadOnlyAccess
+
+ public void addUserAccess(String userID, String readOnlyAccess) throws Exception {
+ validateReadOnlyAccess(readOnlyAccess);
+ reportUsers.put(userID, readOnlyAccess);
+ String addUserAccessSql= Globals.getAddUserAccess();
+ addUserAccessSql = addUserAccessSql.replace("[reportID]", reportID);
+ addUserAccessSql = addUserAccessSql.replace("[userID]", userID);
+ addUserAccessSql = addUserAccessSql.replace("[readOnlyAccess]", readOnlyAccess);
+ DbUtils
+ .executeUpdate(addUserAccessSql);
+ } // addUserAccess
+
+ public void updateUserAccess(String userID, String readOnlyAccess) throws Exception {
+ validateReadOnlyAccess(readOnlyAccess);
+ reportUsers.remove(userID);
+ reportUsers.put(userID, readOnlyAccess);
+ String updateUserAccessSql= Globals.getUpdateUserAccess();
+ updateUserAccessSql = updateUserAccessSql.replace("[reportID]", reportID);
+ updateUserAccessSql = updateUserAccessSql.replace("[userID]", userID);
+ updateUserAccessSql = updateUserAccessSql.replace("[readOnlyAccess]", readOnlyAccess);
+ DbUtils.executeUpdate(updateUserAccessSql);
+ } // updateUserAccess
+
+ public void removeUserAccess(String userID) throws Exception {
+ reportUsers.remove(userID);
+
+ String removeUserAccessSql= Globals.getRemoveUserAccess();
+ removeUserAccessSql = removeUserAccessSql.replace("[reportID]", reportID);
+ removeUserAccessSql = removeUserAccessSql.replace("[userID]", userID);
+ DbUtils.executeUpdate(removeUserAccessSql);
+ } // removeUserAccess
+
+ public void addRoleAccess(String roleID, String readOnlyAccess) throws Exception {
+ validateReadOnlyAccess(readOnlyAccess);
+ reportRoles.put(roleID, readOnlyAccess);
+ String addRoleAccessSql= Globals.getAddRoleAccess();
+ addRoleAccessSql = addRoleAccessSql.replace("[reportID]", reportID);
+ addRoleAccessSql = addRoleAccessSql.replace("[roleID]", roleID);
+ addRoleAccessSql = addRoleAccessSql.replace("[readOnlyAccess]", readOnlyAccess);
+ DbUtils
+ .executeUpdate(addRoleAccessSql);
+ } // addRoleAccess
+
+ public void updateRoleAccess(String roleID, String readOnlyAccess) throws Exception {
+ validateReadOnlyAccess(readOnlyAccess);
+ reportRoles.remove(roleID);
+ reportRoles.put(roleID, readOnlyAccess);
+ String updateRoleAccessSql= Globals.getUpdateRoleAccess();
+ updateRoleAccessSql = updateRoleAccessSql.replace("[reportID]", reportID);
+ updateRoleAccessSql = updateRoleAccessSql.replace("[roleID]", roleID);
+ updateRoleAccessSql = updateRoleAccessSql.replace("[readOnlyAccess]", readOnlyAccess);
+ DbUtils.executeUpdate(updateRoleAccessSql);
+ } // updateRoleAccess
+
+ public void removeRoleAccess(String roleID) throws Exception {
+ reportRoles.remove(roleID);
+ String removeRoleAccessSql= Globals.getRemoveRoleAccess();
+ removeRoleAccessSql = removeRoleAccessSql.replace("[reportID]", reportID);
+ removeRoleAccessSql = removeRoleAccessSql.replace("[roleID]", roleID);
+ DbUtils.executeUpdate(removeRoleAccessSql);
+ } // removeRoleAccess
+
+ /** ************************************************************* */
+
+ public void checkUserReadAccess(HttpServletRequest request, String userID) throws RaptorException {
+ if(userID == null)
+ userID = AppUtils.getUserID(request);
+ if(userID != null) {
+ //userID = AppUtils.getUserID(request);
+ if (nvl(reportID).equals("-1"))
+ return;
+
+ if (true) //todo: replace with proper check isPublic
+ return;
+
+ if (userID.equals(ownerID))
+ return;
+
+ if (reportUsers.get(userID) != null)
+ return;
+ }
+ Vector userRoles = null;
+ String userName = null;
+ if(userID == null) {
+ userRoles = AppUtils.getUserRoles(request);
+ userName = AppUtils.getUserName(request);
+ userID = AppUtils.getUserID(request);
+ } else {
+ userRoles = AppUtils.getUserRoles(userID);
+ userName = AppUtils.getUserName(userID);
+ }
+ if (nvl(reportID).equals("-1"))
+ return;
+
+ if (isPublic)
+ return;
+
+ if (userID.equals(ownerID))
+ return;
+
+ if (reportUsers.get(userID) != null)
+ return;
+
+ for (Iterator iter = userRoles.iterator(); iter.hasNext();) {
+ String userRole = (String) iter.next();
+ if (nvl(userRole).equals(AppUtils.getSuperRoleID()))
+ return;
+ }
+ for (Iterator iter = userRoles.iterator(); iter.hasNext();) {
+ String userRole = (String) iter.next();
+
+ if (nvl(userRole).equals(AppUtils.getSuperRoleID()))
+ return;
+
+ if (reportRoles.get(userRole) != null)
+ return;
+
+ for (Iterator iterA = AppUtils.getAdminRoleIDs().iterator(); iterA.hasNext();)
+ if (nvl(userRole).equals((String) iterA.next()))
+ return;
+ } // for
+
+ throw new UserAccessException(reportID, "[" + userID + "] "
+ + userName, AppConstants.UA_READ);
+ } // checkUserReadAccess
+
+ public void checkUserWriteAccess(HttpServletRequest request) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ if (nvl(reportID).equals("-1"))
+ return;
+
+ if (userID.equals(ownerID))
+ return;
+
+ if (nvl((String) reportUsers.get(userID)).equals("N"))
+ return;
+
+ for (Iterator iter = AppUtils.getUserRoles(request).iterator(); iter.hasNext();) {
+ String userRole = (String) iter.next();
+
+ if (nvl(userRole).equals(AppUtils.getSuperRoleID()))
+ return;
+
+ if (nvl((String) reportRoles.get(userRole)).equals("N"))
+ return;
+
+ for (Iterator iterA = AppUtils.getAdminRoleIDs().iterator(); iterA.hasNext();)
+ if (nvl(userRole).equals((String) iterA.next()))
+ return;
+ } // for
+
+ throw new UserAccessException(reportID, "[" + userID + "] "
+ + AppUtils.getUserName(request), AppConstants.UA_WRITE);
+ } // checkUserWriteAccess
+
+ public void checkUserDeleteAccess(HttpServletRequest request) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ if (Globals.getDeleteOnlyByOwner()) {
+ if (!userID.equals(ownerID))
+ throw new UserAccessException(reportID, "[" + userID + "] "
+ + AppUtils.getUserName(request), AppConstants.UA_DELETE);
+ } else
+ checkUserWriteAccess(request);
+ } // checkUserDeleteAccess
+
+} // ReportSecurity
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportWrapper.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportWrapper.java
new file mode 100644
index 00000000..f856318d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/base/ReportWrapper.java
@@ -0,0 +1,5719 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.base;
+
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.GregorianCalendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeSet;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.transform.stream.StreamResult;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.error.UserDefinedException;
+import org.openecomp.portalsdk.analytics.model.DataCache;
+import org.openecomp.portalsdk.analytics.model.ReportLoader;
+import org.openecomp.portalsdk.analytics.model.definition.TableSource;
+import org.openecomp.portalsdk.analytics.model.runtime.FormField;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportParamValues;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.SQLCorrector;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.xmlobj.ChartAdditionalOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.ChartDrillFormfield;
+import org.openecomp.portalsdk.analytics.xmlobj.ChartDrillOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.ColFilterList;
+import org.openecomp.portalsdk.analytics.xmlobj.ColFilterType;
+import org.openecomp.portalsdk.analytics.xmlobj.CustomReportType;
+import org.openecomp.portalsdk.analytics.xmlobj.DashboardEditorList;
+import org.openecomp.portalsdk.analytics.xmlobj.DashboardReports;
+import org.openecomp.portalsdk.analytics.xmlobj.DashboardReportsNew;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnList;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataSourceList;
+import org.openecomp.portalsdk.analytics.xmlobj.DataSourceType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataminingOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldList;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatList;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatType;
+import org.openecomp.portalsdk.analytics.xmlobj.JavascriptItemType;
+import org.openecomp.portalsdk.analytics.xmlobj.JavascriptList;
+import org.openecomp.portalsdk.analytics.xmlobj.Marker;
+import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
+import org.openecomp.portalsdk.analytics.xmlobj.PDFAdditionalOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.PredefinedValueList;
+import org.openecomp.portalsdk.analytics.xmlobj.ReportMap;
+import org.openecomp.portalsdk.analytics.xmlobj.Reports;
+import org.openecomp.portalsdk.analytics.xmlobj.SemaphoreList;
+import org.openecomp.portalsdk.analytics.xmlobj.SemaphoreType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+/**<HR/>
+ * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
+ * <HR/>
+ *
+ * --------------------------------------------------------------------------------------------------<BR/>
+ * <B>ReportWrapper.java</B> - This is the base class for the RAPTOR. This involves in creating,<BR/>
+ * modifying, running RAPTOR reports.<BR/>
+ * --------------------------------------------------------------------------------------------------<BR/>
+ *
+ *
+ * <U>Change Log</U><BR/><BR/>
+ *
+ * 31-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> All the elements in the meta xml is copied to the target reports. </LI></UL>
+ * 18-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> request Object is passed to prevent caching user/roles - Datamining/Hosting. </LI></UL>
+ * 27-Jul-2009 : Version 8.4 (Sundar); <UL><LI> verifySQLBasedReportAccess method checks for Admin user instead of super user. </LI></UL>
+ * 09-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Bug due to parsing and removing formfields from "and" is bulletproofed to the right "and" to which the formfield is associated. </LI></UL>
+ * 08-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Bug due to parsing and removing formfields when there is no parameter for Daytona specific database is resolved. </LI></UL>
+ * 29-Jun-2009 : Version 8.4 (Sundar); <UL><LI> isLastSeriesALineChart() and setLastSeriesALineChart(String value) method have been added for the Bar Chart enhancements. </LI></UL>
+ * 23-Jun-2009 : Version 8.4 (Sundar); <UL><LI> check for cr.getChartAdditionalOptions() for null value is added.</LI></UL>
+ * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI> Wrapper functions to call JAXB were added. These Wrapper
+ * functions are related to the Pareto chart, Time Difference Chart, Multiple Pie Chart and generic Chart Options.</LI></UL>
+ *
+ */
+
+public class ReportWrapper extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportWrapper.class);
+
+
+ protected CustomReportType cr = null;
+
+ protected Vector allColumns = null;
+
+ protected Vector allVisibleColumns = null;
+
+ protected Vector allFilters = null;
+
+ protected String generatedSQL = null;
+
+ protected String generatedChartSQL = null;
+
+ protected String wholeSQL = null; // For display purposes only
+
+
+ protected String reportID = null;
+
+ protected String menuID = "";
+
+ protected boolean menuApproved = false;
+
+ protected String reportDefType = "";
+
+ protected ReportSecurity reportSecurity = null;
+
+ protected String reportSQLWithRowNum = null;
+
+ protected String reportSQLOnlyFirstPart = null;
+
+
+ private ReportWrapper(CustomReportType cr, String reportID, ReportSecurity reportSecurity) {
+ super();
+
+ if (reportID == null)
+ reportID = "-1";
+
+ this.cr = cr;
+ this.reportID = reportID;
+
+ this.reportSecurity = reportSecurity;
+ } // ReportWrapper
+
+ public ReportWrapper(ReportWrapper rw) {
+ this(rw.getCustomReport(), // .cloneCustomReport()
+ rw.getReportID(), rw.reportSecurity);
+
+ this.menuID = rw.getMenuID();
+ this.menuApproved = rw.isMenuApproved();
+
+ this.reportDefType = rw.getReportDefType();
+ } // ReportWrapper
+
+ public ReportWrapper(CustomReportType cr, String reportID, String ownerID, String createID,
+ String createDate, String updateID, String updateDate, String menuID,
+ boolean menuApproved) throws RaptorException {
+ this(cr, reportID, null);
+
+ if (ownerID == null)
+ // Need to load the report record from the database
+ if (!reportID.equals("-1"))
+ try {
+ /*DataSet ds = DbUtils
+ .executeQuery("SELECT NVL(cr.owner_id, cr.create_id) owner_id, cr.create_id, TO_CHAR(cr.create_date, '"
+ + Globals.getOracleTimeFormat()
+ + "') create_date, maint_id, TO_CHAR(cr.maint_date, '"
+ + Globals.getOracleTimeFormat()
+ + "') update_date, cr.menu_id, cr.menu_approved_yn FROM cr_report cr WHERE cr.rep_id="
+ + reportID);*/
+
+ String r_sql = Globals.getReportWrapperFormat();
+ r_sql = r_sql.replace("[Globals.getOracleTimeFormat()]", Globals.getOracleTimeFormat());
+ r_sql = r_sql.replace("[reportID]", reportID);
+
+ DataSet ds = DbUtils
+ .executeQuery(r_sql);
+
+ ownerID = ds.getString(0, 0);
+ createID = ds.getString(0, 1);
+ createDate = ds.getString(0, 2);
+ updateID = ds.getString(0, 3);
+ updateDate = ds.getString(0, 4);
+ menuID = nvl(ds.getString(0, 5));
+ menuApproved = nvl(ds.getString(0, 6)).equals("Y");
+ } catch (Exception e) {
+ String eMsg = "ReportWrapper.ReportWrapper: Unable to load report record details. Exception: "
+ + e.getMessage();
+ //Log.write(eMsg);
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] "+ eMsg));
+ throw new RaptorRuntimeException(eMsg);
+ }
+
+ this.menuID = nvl(menuID);
+ this.menuApproved = menuApproved;
+
+ if (!reportID.equals("-1"))
+ updateReportDefType();
+
+ reportSecurity = new ReportSecurity(reportID, ownerID, createID, createDate, updateID,
+ updateDate, cr.isPublic());
+ } // ReportWrapper
+
+ public CustomReportType getCustomReport() {
+ return cr;
+ }
+
+ public String getReportID() {
+ return reportID;
+ }
+
+ public String getMenuID() {
+ return menuID;
+ }
+
+ public boolean checkMenuIDSelected(String chkMenuID) {
+ return ("|" + menuID + "|").indexOf("|" + chkMenuID + "|") >= 0;
+ }
+
+ public boolean isMenuApproved() {
+ return menuApproved;
+ }
+
+ public String getReportDefType() {
+ return reportDefType;
+ }
+
+ public void setMenuID(String menuID) {
+ this.menuID = menuID;
+ }
+
+ public void setMenuApproved(boolean menuApproved) {
+ this.menuApproved = menuApproved;
+ }
+
+ public void setReportDefType(String reportDefType) {
+ this.reportDefType = reportDefType;
+ }
+
+ public void updateReportDefType() {
+ this.reportDefType = (nvl(cr.getReportSQL()).length() > 0) ? ((cr.getDataminingOptions()!=null && nvl(cr.getDataminingOptions().getClassifier()).length()>0) ?
+ AppConstants.RD_SQL_BASED_DATAMIN:AppConstants.RD_SQL_BASED)
+ : AppConstants.RD_VISUAL;
+ }
+
+ public String getJavascriptElement() {
+ return cr.getJavascriptElement();
+ }
+
+ public int getPageSize() {
+ return cr.getPageSize()==null?50:cr.getPageSize();
+ }
+
+ public int getMaxRowsInExcelDownload() {
+ return cr.getMaxRowsInExcelDownload()==null?500:cr.getMaxRowsInExcelDownload();
+ }
+
+ public boolean isDisplayFolderTree() {
+ return cr.isDisplayFolderTree()!=null?cr.isDisplayFolderTree().booleanValue():false;
+ }
+
+ public boolean isHideFormFieldAfterRun() {
+ return cr.isHideFormFieldAfterRun()!=null?cr.isHideFormFieldAfterRun().booleanValue():false;
+ }
+
+ public void setHideFormFieldAfterRun(boolean hideFormFieldAfterRun) {
+ cr.setHideFormFieldAfterRun(hideFormFieldAfterRun);
+ }
+
+ public boolean isReportInNewWindow() {
+ return cr.isReportInNewWindow()!=null?cr.isReportInNewWindow().booleanValue():false;
+ }
+
+ public String getReportType() {
+ return cr.getReportType();
+ }
+
+ public String getReportName() {
+ return cr.getReportName();
+ }
+
+ public String getDBInfo() {
+ return cr.getDbInfo();
+ }
+
+ public String getDBType() {
+ return cr.getDbType();
+ }
+
+ public boolean isDrillDownURLInPopupPresent() {
+ return cr.isDrillURLInPoPUpPresent()!=null?cr.isDrillURLInPoPUpPresent().booleanValue():false;
+ }
+
+ public void setDrillDownURLInPopupPresent(boolean value) {
+ cr.setDrillURLInPoPUpPresent(value);
+ }
+
+ public String getReportDescr() {
+ return cr.getReportDescr();
+ }
+
+ public String getChartType() {
+ return cr.getChartType();
+ }
+
+ public boolean displayChartTitle() {
+ return cr.isShowChartTitle();
+ }
+
+ public void setShowChartTitle(boolean showTitle) {
+ cr.setShowChartTitle(showTitle);
+ }
+
+
+ public String getChartTypeFixed() {
+ return cr.getChartTypeFixed();
+ }
+
+ public boolean isChartTypeFixed() {
+ return nvl(cr.getChartTypeFixed()).length() > 0 ? cr.getChartTypeFixed().equals("Y")
+ : (!Globals.getAllowRuntimeChartSel());
+ }
+
+ public String getChartLeftAxisLabel() {
+ return cr.getChartLeftAxisLabel();
+ }
+
+ public String getChartRightAxisLabel() {
+ return cr.getChartRightAxisLabel();
+ }
+
+ public String getChartWidth() {
+ return cr.getChartWidth();
+ }
+
+ public int getChartWidthAsInt() {
+ return getIntValue(cr.getChartWidth(), Globals.getDefaultChartWidth());
+ }
+
+ public String getChartHeight() {
+ return cr.getChartHeight()==null?"500":cr.getChartHeight();
+ }
+
+ /*public boolean isChartMultiSeries() {
+ //String s = cr.getChartMultiSeries();
+ return
+ return (nvl(s).length()>0)? (s.equals("Y")||s.equals("y")||s.equalsIgnoreCase("true")?true:false):true;
+ }*/
+
+ public boolean displayPieOrderinRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartMultiplePieOrder():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+ }
+
+ public boolean isMultiplePieOrderByRow() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartMultiplePieOrder():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return (nvl(s).length()>0)? (s.equals("row")?true:false):true;
+ }
+
+ public boolean isMultiplePieOrderByColumn() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartMultiplePieOrder():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return (nvl(s).length()>0)&&(s.equals("column"))?true:false;
+ }
+
+ public boolean displayPieLabelDisplayinRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartMultiplePieLabelDisplay():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+ }
+
+ public String getMultiplePieLabelDisplay() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartMultiplePieLabelDisplay():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return s;
+ }
+
+ public boolean displayChartDisplayinRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartDisplay():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+ }
+
+ public boolean isChartDisplayIn3D() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartDisplay():"";
+ if(nvl(s).length()<=0) return true;
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return (nvl(s).length()>0)&&(s.equals("3D"))?true:false;
+ }
+
+ public boolean displayChartOrientationInRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartOrientation():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+
+ }
+
+ public String getLinearRegression() {
+ String s = "";
+ s = nvl((cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLinearRegression():"Y");
+ return s;
+ }
+
+ public void setLinearRegression(String linear) {
+ cr.getChartAdditionalOptions().setLinearRegression(linear);
+ }
+
+ public String getLinearRegressionColor() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLinearRegressionColor():"";
+ }
+
+ public String getCustomizedRegressionPoint() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getMaxRegression():"";
+ }
+
+ public void setCustomizedRegressionPoint( String d) {
+ cr.getChartAdditionalOptions().setMaxRegression(d);
+ }
+
+ public void setLinearRegressionColor(String color) {
+ cr.getChartAdditionalOptions().setLinearRegressionColor(color);
+ }
+
+ public String getExponentialRegressionColor() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getExponentialRegressionColor():"";
+ }
+
+ public void setExponentialRegressionColor(String color) {
+ cr.getChartAdditionalOptions().setExponentialRegressionColor(color);
+ }
+
+ public void setRangeAxisUpperLimit(String d) {
+ if(cr.getChartAdditionalOptions()!=null)
+ cr.getChartAdditionalOptions().setRangeAxisUpperLimit(d);
+ }
+
+ public void setRangeAxisLowerLimit(String d) {
+ if(cr.getChartAdditionalOptions()!=null)
+ cr.getChartAdditionalOptions().setRangeAxisLowerLimit(d);
+ }
+
+ public String getRangeAxisUpperLimit() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getRangeAxisUpperLimit():"";
+ }
+
+ public String getRangeAxisLowerLimit() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getRangeAxisLowerLimit():"";
+ }
+
+ public boolean isChartAnimate() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isAnimate()!=null?cr.getChartAdditionalOptions().isAnimate():false):false;
+ }
+
+ public boolean isAnimateAnimatedChart() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isAnimateAnimatedChart()!=null?cr.getChartAdditionalOptions().isAnimateAnimatedChart():false):true;
+ }
+
+ public void setAnimateAnimatedChart(boolean animate) {
+ cr.getChartAdditionalOptions().setAnimateAnimatedChart(animate);
+ }
+
+ public void setChartStacked(boolean stacked) {
+ cr.getChartAdditionalOptions().setStacked(stacked);
+ }
+
+ public boolean isChartStacked() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isStacked()!=null?cr.getChartAdditionalOptions().isStacked():true):false;
+ }
+
+ public void setBarControls(boolean barControls) {
+ cr.getChartAdditionalOptions().setBarControls(barControls);
+ }
+
+ public boolean displayBarControls() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isBarControls()!=null?cr.getChartAdditionalOptions().isBarControls():false):false;
+ }
+
+ public void setXAxisDateType(boolean dateType) {
+ cr.getChartAdditionalOptions().setXAxisDateType(dateType);
+ }
+
+ public boolean isXAxisDateType() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isXAxisDateType()!=null?cr.getChartAdditionalOptions().isXAxisDateType():false):false;
+ }
+
+ public void setLessXaxisTickers(boolean lessTickers) {
+ cr.getChartAdditionalOptions().setLessXaxisTickers(lessTickers);
+ }
+
+ public boolean isLessXaxisTickers() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isLessXaxisTickers()!=null?cr.getChartAdditionalOptions().isLessXaxisTickers():false):false;
+ }
+
+ public void setTimeAxis(boolean timeAxis) {
+ cr.getChartAdditionalOptions().setTimeAxis(timeAxis);
+ }
+
+ public boolean isTimeAxis() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isTimeAxis()!=null?cr.getChartAdditionalOptions().isTimeAxis():true):true;
+ }
+
+ public void setLogScale(boolean logScale) {
+ cr.getChartAdditionalOptions().setLogScale(logScale);
+ }
+
+ public boolean isLogScale() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isLogScale()!=null?cr.getChartAdditionalOptions().isLogScale():false):false;
+ }
+
+
+ public void setMultiSeries(boolean multiSeries) {
+ cr.getChartAdditionalOptions().setMultiSeries(multiSeries);
+ cr.setChartMultiSeries(multiSeries?"Y":"N");
+ }
+
+ public boolean isMultiSeries() {
+ if(AppUtils.nvl(cr.getChartMultiSeries()).equals("Y"))
+ cr.getChartAdditionalOptions().setMultiSeries(true);
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isMultiSeries()!=null?cr.getChartAdditionalOptions().isMultiSeries():false):false;
+ }
+
+ public void setTimeSeriesRender(String timeSeriesRenderer) {
+ cr.getChartAdditionalOptions().setTimeSeriesRender(timeSeriesRenderer);
+ }
+
+ public String getTimeSeriesRender() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getTimeSeriesRender():"line";
+ }
+
+ public void setShowXAxisLabel(boolean showXaxisLabel) {
+ cr.getChartAdditionalOptions().setShowXAxisLabel(showXaxisLabel);
+ }
+
+ public boolean isShowXaxisLabel() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isShowXAxisLabel()!=null?cr.getChartAdditionalOptions().isShowXAxisLabel():false):false;
+ }
+
+ public void setAddXAxisTickers(boolean addXAxisTickers) {
+ cr.getChartAdditionalOptions().setAddXAxisTickers(addXAxisTickers);
+ }
+
+ public boolean isAddXAxisTickers() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().isAddXAxisTickers()!=null?cr.getChartAdditionalOptions().isAddXAxisTickers():false):true;
+ }
+
+ public void setZoomIn(Integer zoomIn) {
+ cr.getChartAdditionalOptions().setZoomIn(zoomIn);
+ }
+
+ public Integer getZoomIn() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().getZoomIn()!=null?cr.getChartAdditionalOptions().getZoomIn():new Integer("25")): new Integer("25");
+ }
+
+ public void setTimeAxisType(String timeAxisType) {
+ cr.getChartAdditionalOptions().setTimeAxisType(timeAxisType);
+ }
+
+ public String getTimeAxisType() {
+ return (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().getTimeAxisType()!=null?cr.getChartAdditionalOptions().getTimeAxisType():"hourly"): "hourly";
+ }
+
+ public void setTopMargin(Integer topMargin) {
+ cr.getChartAdditionalOptions().setTopMargin(topMargin);
+ }
+
+ public Integer getTopMargin() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getTopMargin(): new Integer("30");
+ }
+
+ public void setBottomMargin(Integer bottomMargin) {
+ cr.getChartAdditionalOptions().setBottomMargin(bottomMargin);
+ }
+
+ public Integer getBottomMargin() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getBottomMargin(): new Integer("50");
+ }
+
+ public void setRightMargin(Integer rightMargin) {
+ cr.getChartAdditionalOptions().setRightMargin(rightMargin);
+ }
+
+ public Integer getRightMargin() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getRightMargin(): new Integer("60");
+ }
+
+ public void setLeftMargin(Integer leftMargin) {
+ cr.getChartAdditionalOptions().setLeftMargin(leftMargin);
+ }
+
+ public Integer getLeftMargin() {
+ return (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLeftMargin(): new Integer("100");
+ }
+
+
+ public boolean isVerticalOrientation() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartOrientation():"";
+ if(nvl(s).length()<=0) return true;
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return (nvl(s).length()>0)&&(s.equals("vertical"))?true:false;
+ }
+
+ public boolean isHorizontalOrientation() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getChartOrientation():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return (nvl(s).length()>0)&&(s.equals("horizontal"))?true:false;
+ }
+
+ public boolean displaySecondaryChartRendererInRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getSecondaryChartRenderer():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+
+ }
+
+ public String getSecondaryChartRenderer() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getSecondaryChartRenderer():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return s;
+ }
+
+ public String getOverlayItemValueOnStackBar() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getOverlayItemValueOnStackBar():"N";
+ return s;
+ }
+
+ public boolean displayIntervalInputInRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getIntervalFromdate():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+ }
+
+ public boolean showLegendDisplayOptionsInRunPage() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getHidechartLegend():"";
+ if(nvl(s).indexOf("|")!= -1) {
+ s = s.substring(s.indexOf("|")+1);
+ return getFlagInBoolean(s);
+ } else return false;
+ }
+
+ public String getIntervalFromdate() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getIntervalFromdate():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return nvl(s,"");
+ }
+
+ public String getIntervalTodate() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getIntervalTodate():"";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return nvl(s,"");
+ }
+
+ public String getIntervalLabel() {
+ return cr.getChartAdditionalOptions()!=null ? nvl(cr.getChartAdditionalOptions().getIntervalLabel()):"";
+ }
+
+ public String getLegendPosition() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLegendPosition():"";
+ return nvl(s,"bottom");
+ }
+
+ public String getLegendLabelAngle() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLabelAngle():"";
+ return nvl(s,"UP90");
+ }
+
+ public String getMaxLabelsInDomainAxis() {
+ String s = "";
+ s = (cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getMaxLabelsInDomainAxis():"";
+ return nvl(s,"99");
+ }
+
+ public boolean isLastSeriesALineChart() {
+ String s = "";
+ s = nvl((cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLastSeriesALineChart():"");
+ return s.equals("Y");
+ }
+
+ public boolean isLastSeriesABarChart() {
+ String s = "";
+ s = nvl((cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getLastSeriesABarChart():"");
+ return s.equals("Y");
+ }
+
+ public void setChartLegendDisplay(String value) {
+ cr.getChartAdditionalOptions().setHidechartLegend(value);
+ }
+
+ public boolean hideChartLegend() {
+ String s = "";
+ s = nvl((cr.getChartAdditionalOptions()!=null)?cr.getChartAdditionalOptions().getHidechartLegend():"N");
+ if(nvl(s).length()<=0) s = "N";
+ if(nvl(s).indexOf("|")!= -1) s = s.substring(0, s.indexOf("|"));
+ return s.equals("Y");
+ }
+
+ public void setChartToolTips(String value) {
+ cr.getChartAdditionalOptions().setHideToolTips(value);
+ }
+
+ public void setDomainAxisValuesAsString(String value) {
+ cr.getChartAdditionalOptions().setKeepDomainAxisValueAsString(value);
+ }
+
+ public boolean hideChartToolTips() {
+ boolean s = true;
+ s = (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().getHideToolTips()!=null?
+ (cr.getChartAdditionalOptions().getHideToolTips().equals("Y")?true:false):(Globals.hideToolTipsGlobally()?true:false)):(Globals.hideToolTipsGlobally()?true:false);
+ return s;
+ }
+
+ public boolean keepDomainAxisValueInChartAsString() {
+ boolean s = true;
+ s = (cr.getChartAdditionalOptions()!=null)?(cr.getChartAdditionalOptions().getKeepDomainAxisValueAsString()!=null?
+ (cr.getChartAdditionalOptions().getKeepDomainAxisValueAsString().equals("Y")?true:false):false):false;
+ return s;
+ }
+
+ public int getChartHeightAsInt() {
+ return getIntValue(cr.getChartHeight(), Globals.getDefaultChartHeight());
+ }
+
+ public boolean isPublic() {
+ return cr.isPublic();
+ }
+
+ public boolean isDashboardType() throws RaptorException {
+ return cr.isDashboardType()!=null?cr.isDashboardType().booleanValue():false;
+ }
+
+ // public String getCreateId() { return cr.getCreateId(); }
+ // public Calendar getCreateDate() { return cr.getCreateDate(); }
+ public String getReportSQL() {
+ return cr.getReportSQL();
+ }
+
+ public String getReportTitle() {
+ return cr.getReportTitle();
+ }
+
+ public String getReportSubTitle() {
+ return cr.getReportSubTitle();
+ }
+
+ public String getReportHeader() {
+ return cr.getReportHeader();
+ }
+
+ public String getReportFooter() {
+ return cr.getReportFooter();
+ }
+
+ public String getNumDashCols() {
+ return cr.getNumDashCols();
+ }
+
+ public int getNumDashColsAsInt() {
+ return getIntValue(cr.getNumDashCols(), 1);
+ }
+
+ public String getNumFormCols() {
+ return cr.getNumFormCols();
+ }
+
+ public int getNumFormColsAsInt() {
+ return getIntValue(cr.getNumFormCols(), 5);
+ }
+
+ public String getDisplayOptions() {
+ return cr.getDisplayOptions();
+ }
+
+
+
+//Additional Methods
+
+ public int getJumpTo() {
+ return cr.getJumpTo()==null?1:cr.getJumpTo();
+ }
+ public void setJumpTo(int value){
+ cr.setJumpTo(value);
+ }
+
+
+ public int getSearchPageSize(){
+ return cr.getSearchPageSize()==null?20:cr.getSearchPageSize();
+ }
+ public void setSearchPageSize(int value){
+ cr.setSearchPageSize(value);
+ }
+
+
+ public boolean isToggleLayout(){
+ if(cr.isToggleLayout()!=null)
+ return cr.isToggleLayout();
+
+ else
+ return Globals.displayRuntimeOptionsAsDefault();
+
+ }
+ public void setToggleLayout(boolean value){
+ cr.setToggleLayout(value);
+ }
+
+ public boolean isShowPageSize(){
+ if(cr.isShowPageSize()!=null)
+ return cr.isShowPageSize();
+
+ else
+ return Globals.displayRuntimeOptionsAsDefault();
+
+ }
+ public void setShowPageSize(boolean value){
+ cr.setShowPageSize(value);
+ }
+
+ public boolean isShowNavPos(){
+ if(cr.isShowNavPos()!=null)
+ return cr.isShowNavPos();
+
+ else
+ return Globals.displayRuntimeOptionsAsDefault();
+
+ }
+ public void setShowNavPos(boolean value){
+ cr.setShowNavPos(value);
+ }
+
+ public boolean isShowGotoOption(){
+ if(cr.isShowGotoOption()!=null)
+ return cr.isShowGotoOption();
+
+ else
+ return Globals.displayRuntimeOptionsAsDefault();
+
+ }
+ public void setShowGotoOption(boolean value){
+ cr.setShowGotoOption(value);
+ }
+
+ public boolean isPageNav(){
+
+ if(cr.isPageNav()!=null)
+ return cr.isPageNav();
+
+ else
+ return Globals.displayRuntimeOptionsAsDefault();
+
+ }
+
+ public void setPageNav(boolean value){
+ cr.setPageNav(value);
+ }
+
+
+ public String getNavPosition(){
+ if(cr.getNavPosition()!=null)
+ return cr.getNavPosition();
+
+ else
+ return "top";
+ //return cr.getNavPosition();
+ }
+ public void setNavPosition(String value){
+ cr.setNavPosition(value);
+ }
+
+
+ public String getDashboardEditor(){
+ return getDashBoardReportsNew().getDashboardEditor();
+ }
+
+ public void setDashboardEditor(String value){
+ getDashBoardReportsNew().setDashboardEditor(value);
+ }
+
+
+ public DashboardEditorList getDashboardEditorList(){
+ return getDashBoardReportsNew().getDashboardEditorList();
+ }
+
+ public void setDashboardEditorList(DashboardEditorList value){
+ getDashBoardReportsNew().setDashboardEditorList(value);
+ }
+
+ public PDFAdditionalOptions getPDFAdditionalOptions() {
+ try {
+ if(cr.getPdfAdditionalOptions()==null)
+ addPDFAdditionalOptions(new ObjectFactory());
+ } catch(RaptorException ex) {
+ ex.printStackTrace();
+ }
+ return cr.getPdfAdditionalOptions();
+ }
+
+ public String getPDFFont(){
+ return getPDFAdditionalOptions().getPDFFont()!=null?getPDFAdditionalOptions().getPDFFont():Globals.getDataFontFamily();
+ }
+ public void setPDFFont(String value){
+ getPDFAdditionalOptions().setPDFFont(value);
+ }
+
+ public int getPDFFontSize() {
+ return getPDFAdditionalOptions().getPDFFontSize()==null?9:getPDFAdditionalOptions().getPDFFontSize();
+ }
+ public void setPDFFontSize(int value){
+ getPDFAdditionalOptions().setPDFFontSize(value);
+ }
+
+ public String getPDFOrientation(){
+ return getPDFAdditionalOptions().getPDFOrientation()!=null?"portrait":"landscape";
+ }
+ public void setPDFOrientation(String value){
+ getPDFAdditionalOptions().setPDFOrientation(value);
+ }
+
+ public String getPDFLogo1(){
+ return getPDFAdditionalOptions().getPDFLogo1();
+ }
+ public void setPDFLogo1(String value){
+ getPDFAdditionalOptions().setPDFLogo1(value);
+ }
+
+ public String getPDFLogo2(){
+ return getPDFAdditionalOptions().getPDFLogo2();
+ }
+ public void setPDFLogo2(String value){
+ getPDFAdditionalOptions().setPDFLogo2(value);
+ }
+
+ public int getPDFLogo1Size() {
+ return getPDFAdditionalOptions().getPDFLogo1Size()==null?0:getPDFAdditionalOptions().getPDFLogo1Size();
+ }
+ public void setPDFLogo1Size(int value){
+ getPDFAdditionalOptions().setPDFLogo1Size(value);
+ }
+
+ public int getPDFLogo2Size() {
+ return getPDFAdditionalOptions().getPDFLogo2Size()==null?0:getPDFAdditionalOptions().getPDFLogo2Size();
+ }
+ public void setPDFLogo2Size(int value){
+ getPDFAdditionalOptions().setPDFLogo2Size(value);
+ }
+
+ public boolean isPDFCoverPage(){
+
+ if(getPDFAdditionalOptions().isPDFCoverPage()!=null)
+ return getPDFAdditionalOptions().isPDFCoverPage();
+
+ else
+ return true;
+
+ }
+
+ public void setPDFCoverPage(boolean value){
+ getPDFAdditionalOptions().setPDFCoverPage(value);
+ }
+
+ public String getPDFFooter1(){
+ return getPDFAdditionalOptions().getPDFFooter1();
+ }
+ public void setPDFFooter1(String value){
+ getPDFAdditionalOptions().setPDFFooter1(value);
+ }
+
+ public String getPDFFooter2(){
+ return getPDFAdditionalOptions().getPDFFooter2();
+ }
+ public void setPDFFooter2(String value){
+ getPDFAdditionalOptions().setPDFFooter2(value);
+ }
+
+
+
+//End of Additional Methods
+
+ public String getDataContainerHeight() {
+ return cr.getDataContainerHeight();
+ }
+
+ public String getDataContainerWidth() {
+ return cr.getDataContainerWidth();
+ }
+
+ public boolean isAllowSchedule() {
+ String allowSchedule = getAllowSchedule();
+ return (allowSchedule !=null )? allowSchedule.startsWith("Y"):false;
+ }
+
+ public String getAllowSchedule() {
+ return cr.getAllowSchedule();
+ }
+
+ /* Multi Group */
+
+ public boolean isMultiGroupColumn() {
+ String multiGroupColumn = getMultiGroupColumn();
+ return (multiGroupColumn !=null )? multiGroupColumn.startsWith("Y"):false;
+ }
+
+ public String getMultiGroupColumn() {
+ return cr.getMultiGroupColumn();
+ }
+
+ public void setMultiGroupColumn(String value) {
+ cr.setMultiGroupColumn(value);
+ }
+
+ private int getColumnGroupLevel(String colId) throws RaptorException {
+ DataColumnType dc = getColumnById(colId);
+ return (dc == null) ? 0 : dc.getLevel();
+ } // getColumnGroupLevel
+
+ public int getMaxGroupLevel() {
+ List reportCols = getAllColumns();
+ int maxLevel = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.getLevel()!=null) {
+ if(maxLevel < dc.getLevel())
+ maxLevel = dc.getLevel();
+ }
+ } // for
+ return maxLevel;
+ } // getMaxGroupLevel
+
+ private int getColumnGroupStart(String colId) throws RaptorException {
+ DataColumnType dc = getColumnById(colId);
+ return (dc == null) ? 0 : dc.getStart();
+ } // getColumnGroupStart
+
+ private int getColumnGroupColSpan(String colId) throws RaptorException {
+ DataColumnType dc = getColumnById(colId);
+ return (dc == null) ? 0 : dc.getColspan();
+ } // getColumnGroupColSpan
+
+ public void setTopDown(String value) {
+ cr.setTopDown(value);
+ }
+
+ public boolean isTopDown() {
+ String topDown = getTopDownOption();
+ return (topDown !=null )? topDown.startsWith("Y"):false;
+ }
+
+ public String getTopDownOption() {
+ return cr.getTopDown();
+ }
+
+ public void setSizedByContent(String value) {
+ cr.setSizedByContent(value);
+ }
+
+ public boolean isSizedByContent() {
+ String sizedByContent = getSizedByContentOption();
+ return (sizedByContent !=null )? sizedByContent.startsWith("Y"):false;
+ }
+
+ public String getSizedByContentOption() {
+ return cr.getSizedByContent();
+ }
+
+ public String getDashboardOptions() {
+ return cr.getDashboardOptions();
+ }
+
+ public boolean isDashboardOptionHideChart() {
+ return nvl(getDashboardOptions()).length() > 0 && (getDashboardOptions().charAt(0) == 'Y');
+ }
+
+ public boolean isDashboardOptionHideData() {
+ return nvl(getDashboardOptions()).length() > 0 && (getDashboardOptions().charAt(1) == 'Y');
+ }
+
+ public boolean isDashboardOptionHideBtns() {
+ return nvl(getDashboardOptions()).length() > 0 && (getDashboardOptions().charAt(2) == 'Y');
+ }
+
+ public boolean isDisplayOptionHideForm() {
+ return nvl(getDisplayOptions()).length() > 0 && (getDisplayOptions().charAt(0) == 'Y');
+ }
+
+ public boolean isDisplayOptionHideChart() {
+ return nvl(getDisplayOptions()).length() > 1 && (getDisplayOptions().charAt(1) == 'Y');
+ }
+
+ public boolean isDisplayOptionHideData() {
+ return nvl(getDisplayOptions()).length() > 2 && (getDisplayOptions().charAt(2) == 'Y');
+ }
+
+ public boolean isDisplayOptionHideBtns() {
+ return nvl(getDisplayOptions()).length() > 3 && (getDisplayOptions().charAt(3) == 'Y');
+ }
+
+ public boolean isDisplayOptionHideMap() {
+ return nvl(getDisplayOptions()).length() > 4 && (getDisplayOptions().charAt(4) == 'Y');
+ }
+
+ public boolean isDisplayOptionHideExcelIcons() {
+ return nvl(getDisplayOptions()).length() > 5 && (getDisplayOptions().charAt(5) == 'Y');
+ }
+
+ public boolean isDisplayOptionHidePDFIcons() {
+ return nvl(getDisplayOptions()).length() > 6 && (getDisplayOptions().charAt(6) == 'Y');
+ }
+
+ public String getComment() {
+ return cr.getComment();
+ }
+
+ public DataSourceList getDataSourceList() {
+ return cr.getDataSourceList();
+ }
+
+ public ChartAdditionalOptions getChartAdditionalOptions() {
+ return cr.getChartAdditionalOptions();
+ }
+
+ public ChartDrillOptions getChartDrillOptions() {
+ return cr.getChartDrillOptions();
+ }
+
+
+ public DataminingOptions getDataminingOptions() {
+ return cr.getDataminingOptions();
+ }
+
+ public DashboardReports getDashBoardReports() {
+ return cr.getDashBoardReports();
+ }
+
+
+ public DashboardReportsNew getDashBoardReportsNew() {
+ try {
+ if(cr.getDashBoardReportsNew()==null)
+ addDashboardReportsNew(new ObjectFactory());
+ } catch(RaptorException ex) {
+ ex.printStackTrace();
+ }
+ return cr.getDashBoardReportsNew();
+ }
+
+ public String getDashboardLayoutHTML() {
+ return cr.getDashboardLayoutHTML();
+ }
+
+ public FormFieldList getFormFieldList() {
+ return cr.getFormFieldList();
+ }
+
+ public JavascriptList getJavascriptList() {
+ return cr.getJavascriptList();
+ }
+
+ public SemaphoreList getSemaphoreList() {
+ return cr.getSemaphoreList();
+ }
+
+ public void setPageSize(int value) {
+ cr.setPageSize(value);
+ }
+
+ public void setAllowSchedule(String value) {
+ cr.setAllowSchedule(value);
+ }
+
+ public void setMaxRowsInExcelDownload(int value) {
+ cr.setMaxRowsInExcelDownload(value);
+ }
+
+ public void setReportInNewWindow (boolean value) {
+ cr.setReportInNewWindow(value);
+ }
+
+ public void setDisplayFolderTree (boolean value) {
+ cr.setDisplayFolderTree(value);
+ }
+
+ public void setReportType(String value) {
+ cr.setReportType(value);
+ }
+
+ public void setReportName(String value) {
+ cr.setReportName(value);
+ }
+
+ public void setDBInfo(String value) {
+ if (!(cr.getDbInfo() != null && cr.getDbInfo().length() > 0))
+ cr.setDbInfo(value);
+ }
+
+ public void setDBType(String value) {
+ if (!(cr.getDbType() != null && cr.getDbType().length() > 0))
+ cr.setDbType(value);
+ }
+
+ public void setReportDescr(String value) {
+ cr.setReportDescr(value);
+ }
+
+ public void setChartType(String value) {
+ cr.setChartType(value);
+ }
+
+ public void setChartMultiplePieOrder(String value) {
+ cr.getChartAdditionalOptions().setChartMultiplePieOrder(value);
+ }
+
+ public void setChartMultiplePieLabelDisplay(String value) {
+ cr.getChartAdditionalOptions().setChartMultiplePieLabelDisplay(value);
+ }
+
+ public void setChartOrientation(String value) {
+ cr.getChartAdditionalOptions().setChartOrientation(value);
+ }
+
+ public void setSecondaryChartRenderer(String value) {
+ cr.getChartAdditionalOptions().setSecondaryChartRenderer(value);
+ }
+
+ public void setOverlayItemValueOnStackBar(String value) {
+ cr.getChartAdditionalOptions().setOverlayItemValueOnStackBar(value);
+ }
+
+ public void setIntervalFromdate(String value) {
+ cr.getChartAdditionalOptions().setIntervalFromdate(value);
+ }
+
+ public void setIntervalLabel(String value) {
+ cr.getChartAdditionalOptions().setIntervalLabel(value);
+ }
+
+ public void setIntervalTodate(String value) {
+ cr.getChartAdditionalOptions().setIntervalTodate(value);
+ }
+
+ public void setLegendPosition(String value) {
+ cr.getChartAdditionalOptions().setLegendPosition(value);
+ }
+
+ public void setLegendLabelAngle(String value) {
+ cr.getChartAdditionalOptions().setLabelAngle(value);
+ }
+
+ public void setMaxLabelsInDomainAxis(String value) {
+ if(nvl(value).length()<=0) value = "99";
+ cr.getChartAdditionalOptions().setMaxLabelsInDomainAxis(value);
+ }
+
+ public void setLastSeriesALineChart(String value) {
+ cr.getChartAdditionalOptions().setLastSeriesALineChart(value);
+ }
+
+ public void setLastSeriesABarChart(String value) {
+ cr.getChartAdditionalOptions().setLastSeriesABarChart(value);
+ }
+
+ public void setChartDisplay(String value) {
+ cr.getChartAdditionalOptions().setChartDisplay(value);
+ }
+
+ public void setChartAnimate(boolean animate) {
+ if(cr.getChartAdditionalOptions()!=null)
+ cr.getChartAdditionalOptions().setAnimate(animate);
+ else {
+ try {
+ if(getChartAdditionalOptions()==null)
+ addChartAdditionalOptions(new ObjectFactory());
+ } catch(RaptorException ex) {
+ ex.printStackTrace();
+ }
+ if(cr.getChartAdditionalOptions()!=null)
+ cr.getChartAdditionalOptions().setAnimate(animate);
+
+ }
+
+ }
+
+ public void addChartAdditionalOptions(ObjectFactory objFactory) throws RaptorException {
+ ChartAdditionalOptions chartOptions = objFactory.createChartAdditionalOptions();
+ cr.setChartAdditionalOptions(chartOptions);
+ }
+
+ public void addDashboardReportsNew(ObjectFactory objFactory) throws RaptorException {
+ DashboardReportsNew dashboardReports = objFactory.createDashboardReportsNew();
+ cr.setDashBoardReportsNew(dashboardReports);
+ }
+
+ public void addPDFAdditionalOptions(ObjectFactory objFactory) throws RaptorException {
+ PDFAdditionalOptions pdfOptions = objFactory.createPDFAdditionalOptions();
+ cr.setPdfAdditionalOptions(pdfOptions);
+ }
+
+ public void setChartTypeFixed(String value) {
+ cr.setChartTypeFixed(value);
+ }
+
+ public void setChartLeftAxisLabel(String value) {
+ cr.setChartLeftAxisLabel(value);
+ }
+
+ public void setChartRightAxisLabel(String value) {
+ cr.setChartRightAxisLabel(value);
+ }
+
+ public void setChartWidth(String value) {
+ cr.setChartWidth(value);
+ }
+
+ public void setChartHeight(String value) {
+ cr.setChartHeight(value);
+ }
+
+ public void setChartMultiSeries(String value) {
+ cr.setChartMultiSeries(value);
+ }
+
+ public void setPublic(boolean value) {
+ cr.setPublic(value);
+ if (reportSecurity != null)
+ reportSecurity.setPublic(value);
+ }
+
+ // public void setCreateId(String value) { cr.setCreateId(value); }
+ // public void setCreateDate(Calendar value) { cr.setCreateDate(value); }
+ public void setReportSQL(String value) {
+ cr.setReportSQL(value);
+ }
+
+ public void setReportTitle(String value) {
+ cr.setReportTitle(value);
+ }
+
+ public void setReportSubTitle(String value) {
+ cr.setReportSubTitle(value);
+ }
+
+ public void setReportHeader(String value) {
+ cr.setReportHeader(value);
+ }
+
+ public void setReportFooter(String value) {
+ cr.setReportFooter(value);
+ }
+
+ public void setNumFormCols(String value) {
+ cr.setNumFormCols(value);
+ }
+
+ public void setNumDashCols(String value) {
+ cr.setNumDashCols(value);
+ }
+
+ public void setDisplayOptions(String value) {
+ cr.setDisplayOptions(value);
+ }
+
+ public void setDataContainerHeight(String value) {
+ cr.setDataContainerHeight(value);
+ }
+
+ public void setDataContainerWidth(String value) {
+ cr.setDataContainerWidth(value);
+ }
+
+ public void setDashboardOptions(String value) {
+ cr.setDashboardOptions(value);
+ }
+
+ public void setComment(String value) {
+ cr.setComment(value);
+ }
+
+ public void setDashboardType(boolean dashboardType) {
+ cr.setDashboardType(dashboardType);
+ }
+
+ public void setDashboardLayoutHTML(String html) {
+ cr.setDashboardLayoutHTML(html);
+ }
+
+ public void setDataSourceList(DataSourceList value) {
+ cr.setDataSourceList(value);
+ }
+
+ public void setFormFieldList(FormFieldList value) {
+ cr.setFormFieldList(value);
+ }
+
+ public void setDashBoardReports(DashboardReports value) {
+ cr.setDashBoardReports(value);
+ }
+
+ public void setSemaphoreList(SemaphoreList value) {
+ cr.setSemaphoreList(value);
+ }
+
+ public void setJavascriptList(JavascriptList value) {
+ cr.setJavascriptList(value);
+ }
+
+ public void setJavascriptElement(String javascriptElement) {
+ cr.setJavascriptElement(javascriptElement);
+ }
+
+ public void checkUserReadAccess(HttpServletRequest request) throws RaptorException {
+ reportSecurity.checkUserReadAccess(request, null);
+ }
+ public void checkUserReadAccess(HttpServletRequest request, String userID) throws RaptorException {
+ reportSecurity.checkUserReadAccess(request, userID);
+ }
+
+ public void checkUserWriteAccess(HttpServletRequest request) throws RaptorException {
+ reportSecurity.checkUserWriteAccess(request);
+ verifySQLBasedReportAccess(request);
+ }
+
+ public String getOwnerID() {
+ return reportSecurity.getOwnerID();
+ }
+
+ public String getCreateID() {
+ return reportSecurity.getCreateID();
+ }
+
+ public String getCreateDate() {
+ return reportSecurity.getCreateDate();
+ }
+
+ public String getUpdateID() {
+ return reportSecurity.getUpdateID();
+ }
+
+ public String getUpdateDate() {
+ return reportSecurity.getUpdateDate();
+ }
+
+ public ReportSecurity getReportSecurity() {
+ return reportSecurity;
+ }
+
+ /****Report Maps - Start****/
+ public ReportMap getReportMap() {
+ return cr.getReportMap();
+ }
+
+ public void setReportMap(ReportMap reportMap) {
+ cr.setReportMap(reportMap);
+ }
+ /****Report Maps - End****/
+
+ /****Report Chart Drilldown - Start****/
+ public ChartDrillOptions getReportChartDrillOptions() {
+ return cr.getChartDrillOptions();
+ }
+
+ public void setReportChartDrillOptions(ChartDrillOptions chartDrillOptions) {
+ cr.setChartDrillOptions(chartDrillOptions);
+ }
+ /****Report Maps - End****/
+
+
+ /** ************************************************************************************************* */
+
+ public String getFormHelpText() {
+ String formHelpText = nvl(getComment());
+
+ if (formHelpText.indexOf('|') >= 0)
+ formHelpText = formHelpText.substring(formHelpText.lastIndexOf('|') + 1);
+
+ return formHelpText;
+ } // getFormHelpText
+
+ public void setFormHelpText(String formHelpText) {
+ String comment = nvl(getComment());
+
+ if (comment.indexOf('|') >= 0)
+ comment = comment.substring(0, comment.lastIndexOf('|'));
+ if (comment.length() > 0)
+ comment += '|';
+
+ setComment(comment + formHelpText);
+ } // setFormHelpText
+
+ public boolean isRuntimeColSortDisabled() {
+ String comment = nvl(getComment());
+
+ if (comment.indexOf('|') < 0)
+ return false;
+
+ return comment.substring(0, comment.indexOf('|')).equals("Y");
+ } // isRuntimeColSortDisabled
+
+ public void setRuntimeColSortDisabled(boolean value) {
+ String comment = nvl(getComment());
+
+ if (comment.indexOf('|') >= 0)
+ comment = comment.substring(comment.indexOf('|') + 1);
+
+ setComment((value ? "Y" : "N") + "|" + comment);
+ } // setRuntimeColSortDisabled
+
+ /** ************************************************************************************************* */
+
+ protected void verifySQLBasedReportAccess(HttpServletRequest request) throws RaptorException {
+ String userID = AppUtils.getUserID(request);
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED)
+ && (!Globals.getAllowSQLBasedReports()) && (!AppUtils.isAdminUser(request)))
+ throw new org.openecomp.portalsdk.analytics.error.UserAccessException(reportID, "[" + userID + "] "
+ + AppUtils.getUserName(request), AppConstants.UA_WRITE);
+ } // verifySQLBasedReportAccess
+
+ /** ************************************************************************************************* */
+
+ private String getColumnNameById(String colId) throws RaptorException {
+ DataColumnType dc = getColumnById(colId);
+ return (dc == null) ? "NULL" : dc.getColName();
+ } // getColumnNameById
+
+ // Checks if drill-down URL points to individual record display (return
+ // true) or another report (return false)
+ private boolean isViewAction(String value) throws RaptorException {
+ try {
+ Vector viewActions = org.openecomp.portalsdk.analytics.model.DataCache.getDataViewActions();
+
+ for (int i = 0; i < viewActions.size(); i++)
+ if (value.equals(AppUtils.getBaseActionURL() + ((String) viewActions.get(i))))
+ return true;
+ } catch (Exception e) {
+ throw new RaptorRuntimeException("ReportWrapper.isViewAction Exception: "
+ + e.getMessage());
+ }
+
+ return false;
+ } // isViewAction
+
+ public String getSelectExpr(DataColumnType dct) {
+ // String colName =
+ // dct.isCalculated()?dct.getColName():((nvl(dct.getTableId()).length()>0)?(dct.getTableId()+"."+dct.getColName()):dct.getColName());
+ return getSelectExpr(dct, dct.getColName() /* colName */);
+ } // getSelectExpr
+
+ /*private String getSelectExpr(DataColumnType dct, String colName) {
+ String colType = dct.getColType();
+ if (colType.equals(AppConstants.CT_CHAR)
+ || ((nvl(dct.getColFormat()).length() == 0) && (!colType
+ .equals(AppConstants.CT_DATE))))
+ return colName;
+ else
+ return "TO_CHAR(" + colName + ", '"
+ + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT) + "')";
+ } // getSelectExpr
+ */
+
+ private String getSelectExpr(DataColumnType dct, String colName) {
+ String colType = dct.getColType();
+ if(colType.equals(AppConstants.CT_NUMBER)) {
+ return colName;
+ } else
+ if (colType.equals(AppConstants.CT_CHAR)
+ || ((nvl(dct.getColFormat()).length() == 0) && (!colType
+ .equals(AppConstants.CT_DATE))))
+ return colName;
+
+ else
+ return "TO_CHAR(" + colName + ", '"
+ + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT) + "')";
+ } // getSelectExpr
+
+
+ /** ************************************************************************************************* */
+
+ public DataSourceType getTableById(String tableId) {
+ for (Iterator iter = getDataSourceList().getDataSource().iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+ if (ds.getTableId().equals(tableId))
+ return ds;
+ } // for
+
+ return null;
+ } // getTableById
+
+ public DataSourceType getTableByDBName(String tableName) {
+ for (Iterator iter = getDataSourceList().getDataSource().iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+ if (ds.getTableName().equals(tableName))
+ return ds;
+ } // for
+
+ return null;
+ } // getTableByDBName
+
+ public DataSourceType getColumnTableById(String colId) {
+ return getTableById(getColumnById(colId).getTableId());
+ } // getColumnTableById
+
+ public DataColumnType getColumnById(String colId) {
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.getColId().toLowerCase().equals(colId.toLowerCase()))
+ return dc;
+ } // for
+
+ return null;
+ } // getColumnById
+
+ public DataColumnType getChartLegendColumn() {
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ return dc;
+ } // for
+ return null;
+ } // getChartLegendColumn
+
+ /*
+ * public DataColumnType getChartValueColumn() { List reportCols =
+ * getAllColumns(); for(Iterator iter=reportCols.iterator(); iter.hasNext(); ) {
+ * DataColumnType dc = (DataColumnType) iter.next(); if(dc.getChartSeq()>0)
+ * return dc; } // for
+ *
+ * return null; } // getChartValueColumn
+ */
+
+ public List getChartValueColumnsList( int filter, HashMap formValues) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = getAllColumns();
+
+ ArrayList chartValueCols = new ArrayList();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0 ) {
+ if(!AppUtils.nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ }
+ else if(filter == 0) chartValueCols.add(dc);
+ } else chartValueCols.add(dc);
+ }
+ }
+// } else
+// chartValueCols.add(dc);
+ } // for
+ Collections.sort(chartValueCols, new ChartSeqComparator());
+ return chartValueCols;
+ } // getChartValueColumnsList
+
+
+ /* public ListModelList<Item> getChartValueColumnsListModelList( int filter, HashMap formValues) { / *filter; all=0;create without new chart =1; createNewChart=2 * /
+ List reportCols = getAllColumns();
+
+ ArrayList chartValueCols = new ArrayList();
+ ListModelList<Item> chartValueListModelList = new ListModelList<Item>();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0 ) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ }
+ else if(filter == 0) chartValueCols.add(dc);
+ } else chartValueCols.add(dc);
+ }
+// } else
+// chartValueCols.add(dc);
+ chartValueListModelList.add(new Item(dc.getColId(), dc.getDisplayName()));
+ } // for
+ Collections.sort(chartValueCols, new ChartSeqComparator());
+ return chartValueListModelList;
+ } // getChartValueColumnsList */
+
+
+ /** Check whether chart has series (Category) columns **/
+ public boolean hasSeriesColumn() {
+ List reportCols = getAllColumns();
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.isChartSeries()!=null && dc.isChartSeries().booleanValue())
+ return true;
+ } // for
+ return false;
+ } // hasSeriesColumn
+
+
+ public List getChartDisplayNamesList( int filter, HashMap formValues) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = getAllColumns();
+ ArrayList chartValueColNames = new ArrayList();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue()) ) {
+ chartValueColNames.add(dc.getDisplayName());
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueColNames.add(dc.getDisplayName());
+ }
+ else if(filter == 0) chartValueColNames.add(dc.getDisplayName());
+ } else if(filter == 0) chartValueColNames.add(dc.getDisplayName());
+ }
+ // } else
+ // chartValueColNames.add(dc.getDisplayName());
+
+ }
+ return chartValueColNames;
+ } // getChartDisplayNamesList
+
+
+ public List getChartColumnColorsList(int filter, HashMap formValues) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = getAllColumns();
+ ArrayList chartValueColColors = new ArrayList();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue()) ) {
+ chartValueColColors.add(dc.getChartColor());
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueColColors.add(dc.getChartColor());
+ }
+ else if(filter == 0) chartValueColColors.add(dc.getChartColor());
+ } else if(filter == 0) chartValueColColors.add(dc.getChartColor());
+ }
+// } else
+// chartValueColColors.add(dc.getChartColor());
+ }
+ return chartValueColColors;
+ } // getChartColumnColorsList
+
+ public List getChartValueColumnAxisList( int filter, HashMap formValues) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = getAllColumns();
+ ArrayList chartValueColAxis = new ArrayList();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue())) {
+ chartValueColAxis.add(nvl(dc.getColOnChart(), "0"));
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueColAxis.add(nvl(dc.getColOnChart(), "0"));
+ }
+ else if(filter == 0) chartValueColAxis.add(nvl(dc.getColOnChart(), "0"));
+ } else if(filter == 0) chartValueColAxis.add(nvl(dc.getColOnChart(), "0"));
+ }
+// } else
+// chartValueColAxis.add(nvl(dc.getColOnChart(), "0"));
+ }
+ return chartValueColAxis;
+ } // getChartColumnAxisList
+
+
+ public List getChartValueNewChartList() {
+ ArrayList chartValueNewChartAxis = new ArrayList();
+ for (Iterator iter = getChartValueColumnsList(2, null).iterator(); iter.hasNext();)
+ chartValueNewChartAxis.add(new Boolean(((DataColumnType) iter.next()).isCreateInNewChart()));
+ return chartValueNewChartAxis;
+ } // getChartValueNewChartList
+
+ public List getAllChartGroups() {
+ ArrayList chartGroups = new ArrayList();
+ String chartGroupName="";
+ List reportCols = getAllColumns();
+ Set groupSet = new TreeSet();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(dc.getChartSeq()!=null && dc.getChartSeq()> 0) {
+ chartGroupName = dc.getChartGroup();
+ if(nvl(chartGroupName).length()>0)
+ groupSet.add(chartGroupName);
+ }
+ }
+ List l = new ArrayList(groupSet);
+ return l;
+ } // getAllChartGroups
+
+ public HashMap getAllChartYAxis(ReportParamValues reportParamValues) {
+ String chartYAxis="";
+ List reportCols = getAllColumns();
+ HashMap hashMap = new HashMap();
+ FormFieldList formFieldList = getFormFieldList();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(dc.getChartSeq()!=null && dc.getChartSeq()> 0) {
+ chartYAxis = dc.getYAxis();
+ if(formFieldList!=null && reportParamValues!=null) {
+ for (Iterator iter1 = getFormFieldList().getFormField().iterator(); iter1.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter1.next();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ String fieldId = fft.getFieldId();
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK) && !fft.getFieldType().equals(FormField.FFT_LIST_MULTI) && !fft.getFieldType().equals(FormField.FFT_TEXTAREA)) {
+ String paramValue = Utils.oracleSafe(nvl(reportParamValues.getParamValue(fieldId)));
+ chartYAxis = Utils.replaceInString(chartYAxis, fieldDisplay, nvl(
+ paramValue, ""));
+ }
+ }
+ }
+ if(nvl(dc.getChartGroup()).length()>0)
+ hashMap.put(dc.getChartGroup(),chartYAxis);
+ }
+ }
+ return hashMap;
+ } // getAllChartGroups
+
+ public List getChartGroupColumnAxisList( String chartGroupName, HashMap formValues ) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = getAllColumns();
+ ArrayList chartGroupColAxis = new ArrayList();
+ String chartGroup = chartGroupName.substring(0,chartGroupName.lastIndexOf("|"));
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0) {
+ if( nvl(dc.getChartGroup()).indexOf("|") > 0 && (nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup))) {
+ //if( nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup)) {
+ //System.out.println("$$$$$$$DC " + dc.getColId()+ " " + dc.getColOnChart());
+ chartGroupColAxis.add(dc);
+ }
+ }
+// } else
+// chartValueColAxis.add(nvl(dc.getColOnChart(), "0"));
+ }
+ Collections.sort(chartGroupColAxis, new ChartSeqComparator());
+ return chartGroupColAxis;
+ } // getChartColumnAxisList
+
+ public List getChartGroupValueColumnAxisList( String chartGroupName, HashMap formValues ) {
+ List reportCols = getAllColumns();
+ String index = chartGroupName.substring(chartGroupName.lastIndexOf("|")+1);
+ String chartGroup = chartGroupName.substring(0,chartGroupName.lastIndexOf("|"));
+ //System.out.println("$$$$INDEX " + index);
+ ArrayList chartGroupValueColAxis = new ArrayList();
+ int flag = 0;
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0) {
+ //System.out.println(" Chartgroup " + dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|")));
+ if( nvl(dc.getChartGroup()).indexOf("|") > 0 && (nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup))) {
+ //if( nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup)) {
+ //System.out.println(" Added Chartgroupname " + chartGroup + " " + dc.getChartGroup() + " " + index);
+ chartGroupValueColAxis.add(dc);
+ }
+ }
+ }
+ return chartGroupValueColAxis;
+ } // getChartColumnAxisList
+
+ public List getChartGroupDisplayNamesList( String chartGroupName, HashMap formValues) {
+ List reportCols = getAllColumns();
+ ArrayList chartGroupValueColNames = new ArrayList();
+ String chartGroup = chartGroupName.substring(0,chartGroupName.lastIndexOf("|"));
+ int flag = 0;
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+ //System.out.println("$$$$$CHART " + dc.getChartSeq()+ " " + dc.getChartGroup()+ " " + chartGroup);
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0 ) {
+ if( nvl(dc.getChartGroup()).indexOf("|") > 0 && (nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup))) {
+ chartGroupValueColNames.add(dc.getDisplayName());
+ }
+ }
+ }
+ return chartGroupValueColNames;
+ } // getChartDisplayNamesList
+
+
+ public List getChartGroupColumnColorsList(String chartGroupName, HashMap formValues) {
+ List reportCols = getAllColumns();
+ ArrayList chartValueColColors = new ArrayList();
+ String chartGroup = chartGroupName.substring(0,chartGroupName.lastIndexOf("|"));
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+ flag = getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0 ) {
+ if( nvl(dc.getChartGroup()).indexOf("|") > 0 && (nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup))) {
+ //if( nvl(dc.getChartGroup().substring(0,dc.getChartGroup().lastIndexOf("|"))).equals(chartGroup)) {
+ chartValueColColors.add(dc.getChartColor());
+ }
+ }
+ }
+ return chartValueColColors;
+ } // getChartColumnColorsList
+
+
+ public List getCrossTabRowColumns() {
+ List reportCols = getAllColumns();
+ Vector v = new Vector(reportCols.size());
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (nvl(dc.getCrossTabValue()).equals(AppConstants.CV_ROW))
+ v.add(dc);
+ } // for
+
+ return v;
+ } // getCrossTabRowColumns
+
+ public List getCrossTabColColumns() {
+ List reportCols = getAllColumns();
+ Vector v = new Vector(reportCols.size());
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (nvl(dc.getCrossTabValue()).equals(AppConstants.CV_COLUMN))
+ v.add(dc);
+ } // for
+
+ return v;
+ } // getCrossTabColColumns
+
+ public String getCrossTabDisplayTotal(String rowColPos) {
+ DataColumnType dct = getCrossTabValueColumn();
+ if (dct == null)
+ return "";
+
+ String displayTotal = nvl(dct.getDisplayTotal());
+ if (displayTotal.indexOf('|') >= 0) {
+ String displayColTotal = displayTotal.substring(0, displayTotal.indexOf('|'));
+ String displayRowTotal = displayTotal.substring(displayTotal.indexOf('|') + 1);
+
+ if (rowColPos.equals(AppConstants.CV_COLUMN))
+ displayTotal = displayColTotal;
+ else if (rowColPos.equals(AppConstants.CV_ROW))
+ displayTotal = displayRowTotal;
+ else if (displayColTotal.equals(displayRowTotal))
+ displayTotal = displayColTotal;
+ } // if
+
+ return displayTotal;
+ } // getCrossTabDisplayTotal
+
+ public DataColumnType getCrossTabValueColumn() {
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (nvl(dc.getCrossTabValue()).equals(AppConstants.CV_VALUE))
+ return dc;
+ } // for
+
+ return null;
+ } // getCrossTabValueColumn
+
+ public int getCrossTabValueColumnIndex() { // Returns the index counting
+ // only visible columns
+ List reportCols = getAllColumns();
+
+ int idx = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (nvl(dc.getCrossTabValue()).equals(AppConstants.CV_VALUE))
+ break;
+ if (dc.isVisible())
+ idx++;
+ } // for
+
+ return idx;
+ } // getCrossTabValueColumnIndex
+
+ public ColFilterType getFilterById(String colId, int filterIndex) {
+ DataColumnType dc = getColumnById(colId);
+ try {
+ return (ColFilterType) dc.getColFilterList().getColFilter().get(filterIndex);
+ } catch (Exception e) {
+ return null;
+ }
+ } // getFilterById
+
+ public boolean needFormInput() {
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.getColFilterList() != null) {
+ List fList = dct.getColFilterList().getColFilter();
+ for (Iterator iterF = fList.iterator(); iterF.hasNext();) {
+ ColFilterType cft = (ColFilterType) iterF.next();
+
+ if (nvl(cft.getArgType()).equals(AppConstants.AT_FORM))
+ return true;
+ } // for
+ } // if
+ } // for
+
+ return false;
+ } // needFormInput
+
+ public int getNumSortColumns() {
+ int numSortCols = 0;
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (dct.getOrderBySeq() != null && dct.getOrderBySeq() > 0)
+ numSortCols++;
+ } // for
+
+ return numSortCols;
+ } // getNumSortColumns
+
+ public SemaphoreType getSemaphoreById(String semaphoreId) {
+ if (getSemaphoreList() != null && semaphoreId != null)
+ for (Iterator iter = getSemaphoreList().getSemaphore().iterator(); iter.hasNext();) {
+ SemaphoreType sem = (SemaphoreType) iter.next();
+ if (sem.getSemaphoreId().equals(semaphoreId))
+ return sem;
+ } // for
+
+ return null;
+ } // getSemaphoreById
+
+ public void deleteSemaphore(SemaphoreType semaphore) {
+ if (getSemaphoreList() != null) {
+ if(getSemaphoreList().getSemaphore()!= null)
+ getSemaphoreList().getSemaphore().remove((SemaphoreType) semaphore);
+ }
+ } // deleteSemaphore
+
+
+ public void setSemaphore(SemaphoreType sem) {
+ if (getSemaphoreList() != null) {
+ getSemaphoreList().getSemaphore().add(sem);
+ }
+
+ } // setSemaphore
+
+ public static FormatType getSemaphoreFormatById(SemaphoreType semaphore, String formatId) {
+ if (semaphore != null)
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter
+ .hasNext();) {
+ FormatType fmt = (FormatType) iter.next();
+ if (fmt.getFormatId().equals(formatId))
+ return fmt;
+ } // for
+
+ return null;
+ } // getSemaphoreFormatById
+
+ public FormFieldType getFormFieldById(String fieldId) {
+ if (getFormFieldList() != null && fieldId != null)
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if (fft.getFieldId().equals(fieldId))
+ return fft;
+ } // for
+
+ return null;
+ } // getFormFieldById
+
+ public FormFieldType getFormFieldByDisplayValue(String fieldDisplay) {
+ // fieldDisplay expected to be [fieldName]
+ if (getFormFieldList() != null && fieldDisplay != null)
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if (fieldDisplay.equals(getFormFieldDisplayName(fft)))
+ return fft;
+ } // for
+
+ return null;
+ } // getFormFieldById
+
+ public String getFormFieldDisplayName(FormFieldType fft) {
+ return "[" + fft.getFieldName() + "]";
+ } // getFormFieldDisplayName
+
+ /** ************************************************************************************************* */
+
+ public void resetCache(boolean sqlOnly) {
+ generatedSQL = null;
+ if (!sqlOnly) {
+ allColumns = null;
+ allFilters = null;
+ }
+ } // resetCache
+
+ public String getOuterJoinType(DataSourceType curTable) {
+ String refDefinition = nvl(curTable.getRefDefinition());
+ int outerJoinIdx = refDefinition.indexOf(" (+)");
+ if (outerJoinIdx < 0)
+ // No outer join
+ return "";
+
+ int equalSignIdx = refDefinition.indexOf("=");
+ if (refDefinition.indexOf(curTable.getTableId()) < equalSignIdx)
+ // Cur. table is on the left side
+ return (outerJoinIdx < equalSignIdx) ? AppConstants.OJ_CURRENT
+ : AppConstants.OJ_JOINED;
+ else
+ // Joined table is on the left side
+ return (outerJoinIdx < equalSignIdx) ? AppConstants.OJ_JOINED
+ : AppConstants.OJ_CURRENT;
+ } // getOuterJoinType
+
+ public String getFormFieldName(ColFilterType filter) {
+ FormFieldType fft = null;
+ if (filter.getArgType().equals(AppConstants.AT_FORM))
+ fft = getFormFieldByDisplayValue(filter.getArgValue());
+
+ return (fft != null) ? fft.getFieldId() : filter.getColId() + "_f"
+ + filter.getFilterSeq();
+ } // getFormFieldName
+
+ public String getFormFieldDisplayName(DataColumnType column, ColFilterType filter) {
+ FormFieldType fft = null;
+ if (filter.getArgType().equals(AppConstants.AT_FORM))
+ fft = getFormFieldByDisplayValue(filter.getArgValue());
+
+ return (fft != null) ? fft.getFieldName() : column.getDisplayName() + "&nbsp;"
+ + filter.getExpression();
+ } // getFormFieldDisplayName
+
+ public Calendar getFormFieldRangeStart(ColFilterType filter) {
+ FormFieldType fft = null;
+ if (filter.getArgType().equals(AppConstants.AT_FORM))
+ fft = getFormFieldByDisplayValue(filter.getArgValue());
+
+ return (fft != null) ? fft.getRangeStartDate().toGregorianCalendar() : null;
+ } // getFormFieldRangeStart
+
+ public Calendar getFormFieldRangeEnd(ColFilterType filter) {
+ FormFieldType fft = null;
+ if (filter.getArgType().equals(AppConstants.AT_FORM))
+ fft = getFormFieldByDisplayValue(filter.getArgValue());
+
+ //System.out.println("as " + fft.getRangeEndDate());
+ return (fft != null) ? fft.getRangeEndDate().toGregorianCalendar() : null;
+ } // getFormFieldRangeEnd
+
+ public String getFormFieldRangeStartSQL(ColFilterType filter) {
+ FormFieldType fft = null;
+ if (filter.getArgType().equals(AppConstants.AT_FORM))
+ fft = getFormFieldByDisplayValue(filter.getArgValue());
+
+ return (fft != null) ? fft.getRangeStartDateSQL() : null;
+ } // getFormFieldRangeStart
+
+ public String getFormFieldRangeEndSQL(ColFilterType filter) {
+ FormFieldType fft = null;
+ if (filter.getArgType().equals(AppConstants.AT_FORM))
+ fft = getFormFieldByDisplayValue(filter.getArgValue());
+
+ //System.out.println("as " + fft.getRangeEndDate());
+ return (fft != null) ? fft.getRangeEndDateSQL() : null;
+ } // getFormFieldRangeEnd
+
+ public String getUniqueTableId(String tableName) {
+ String tableIdPrefix = tableName.startsWith("MSA_") ? tableName.substring(4, 6)
+ : tableName.substring(0, 2);
+ String tableId = "";
+
+ int tableIdN = getDataSourceList().getDataSource().size() + 1;
+ do {
+ tableId = tableIdPrefix.toLowerCase() + (tableIdN++);
+ } while (getTableById(tableId) != null);
+
+ return tableId;
+ } // getUniqueTableId
+
+ /** ************************************************************************************************* */
+
+ protected void deleteDataSourceType(String tableId) {
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType dst = (DataSourceType) iter.next();
+ if (dst.getTableId().equals(tableId))
+ iter.remove();
+ else if (nvl(dst.getRefTableId()).equals(tableId)) {
+ dst.setRefTableId(null);
+ dst.setRefDefinition(null);
+ }
+ } // for
+
+ resetCache(false);
+ } // deleteDataSourceType
+
+ public static void adjustColumnType(DataColumnType dct) {
+ dct.setColType(dct.getDbColType());
+
+ if (dct.isCalculated())
+ if (dct.getColName().startsWith("SUM(") || dct.getColName().startsWith("COUNT(")
+ || dct.getColName().startsWith("AVG(")
+ || dct.getColName().startsWith("STDDEV(")
+ || dct.getColName().startsWith("VARIANCE("))
+ dct.setColType(AppConstants.CT_NUMBER);
+ else if (dct.getColName().startsWith("DECODE(") || dct.getColName().startsWith("coalesce("))
+ dct.setColType(AppConstants.CT_CHAR);
+ } // adjustColumnType
+
+ public static boolean getColumnNoParseDateFlag(DataColumnType dct) {
+ return (nvls(dct.getComment()).indexOf(AppConstants.CF_NO_PARSE_DATE) >= 0);
+ } // getColumnNoParseDateFlag
+
+ public static void setColumnNoParseDateFlag(DataColumnType dct, boolean noParseDateFlag) {
+ dct.setComment(noParseDateFlag ? AppConstants.CF_NO_PARSE_DATE : null);
+ } // setColumnNoParseDateFlag
+
+ /** ************************************************************************************************* */
+
+ public static String getSQLBasedFFTColTableName(String fftColId) {
+ return fftColId.substring(0, fftColId.indexOf('.'));
+ } // getSQLBasedFFTColTableName
+
+ public static String getSQLBasedFFTColColumnName(String fftColId) {
+ fftColId = (fftColId.indexOf('|') < 0) ? fftColId : fftColId.substring(0, fftColId
+ .indexOf('|'));
+ return fftColId.substring(fftColId.indexOf('.') + 1);
+ } // getSQLBasedFFTColColumnName
+
+ public static String getSQLBasedFFTColDisplayFormat(String fftColId) {
+ return (fftColId.indexOf('|') < 0) ? "" : fftColId
+ .substring(fftColId.indexOf('|') + 1);
+ } // getSQLBasedFFTColDisplayFormat
+
+ /** ************************************************************************************************* */
+
+ public List<DataColumnType> getAllColumns() {
+ if (cr == null)
+ throw new NullPointerException("CustomReport not initialized");
+
+ if (allColumns == null) {
+ allColumns = new Vector();
+
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+
+ // allColumns.addAll(ds.getDataColumnList().getDataColumn());
+ List dcList = ds.getDataColumnList().getDataColumn();
+ for (Iterator iterC = dcList.iterator(); iterC.hasNext();) {
+ DataColumnType dc = (DataColumnType) iterC.next();
+
+ allColumns.add(dc);
+ } // for
+ } // for
+
+ Collections.sort(allColumns, new OrderSeqComparator());
+ } // if
+
+ return allColumns;
+ } // getAllColumns
+
+ public List getOnlyVisibleColumns() {
+ if (cr == null)
+ throw new NullPointerException("CustomReport not initialized");
+
+ if (allVisibleColumns == null) {
+ allVisibleColumns = new Vector();
+
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+
+ // allColumns.addAll(ds.getDataColumnList().getDataColumn());
+ List dcList = ds.getDataColumnList().getDataColumn();
+ for (Iterator iterC = dcList.iterator(); iterC.hasNext();) {
+ DataColumnType dc = (DataColumnType) iterC.next();
+ if(dc.isVisible())
+ allVisibleColumns.add(dc);
+ } // for
+ } // for
+
+ Collections.sort(allVisibleColumns, new OrderSeqComparator());
+ } // if
+
+ return allVisibleColumns;
+ } // getOnlyVisibleColumns
+ public int getVisibleColumnCount() {
+ if (cr == null)
+ throw new NullPointerException("CustomReport not initialized");
+ int colCount = 0;
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+
+ // allColumns.addAll(ds.getDataColumnList().getDataColumn());
+ List dcList = ds.getDataColumnList().getDataColumn();
+ for (Iterator iterC = dcList.iterator(); iterC.hasNext();) {
+ DataColumnType dc = (DataColumnType) iterC.next();
+ if(dc.isVisible()) colCount ++;
+ } // for
+ } // for
+
+ return colCount;
+ }
+
+ public List getAllFilters() {
+ if (cr == null)
+ throw new NullPointerException("CustomReport not initialized");
+
+ // if(allFilters==null) {
+ allFilters = new Vector();
+
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.getColFilterList() != null) {
+ List colFilters = dct.getColFilterList().getColFilter();
+
+ for (Iterator iterF = colFilters.iterator(); iterF.hasNext();) {
+ ColFilterType cft = (ColFilterType) iterF.next();
+
+ allFilters.add(cft);
+ } // for
+ } // if
+ } // for
+
+ // Collections.sort(allFilters, ??);
+ // } // if
+
+ return allFilters;
+ } // getAllFilters
+
+ private String formatValue(String value, DataColumnType dc, boolean useDefaultDateFormat) throws RaptorException {
+ return formatValue(value, dc, useDefaultDateFormat, getColumnTableById(dc.getColId()), null);
+ } // formatValue
+
+ private String formatValue(String value, DataColumnType dc, boolean useDefaultDateFormat,
+ DataSourceType ds, FormFieldType fft) throws RaptorException {
+ String fmtValue = null;
+
+ if (nvl(value).length() == 0)
+ fmtValue = "";
+ else if (value.equals(AppConstants.FILTER_MAX_VALUE)
+ || value.equals(AppConstants.FILTER_MIN_VALUE))
+ fmtValue = "(SELECT "
+ + (value.equals(AppConstants.FILTER_MAX_VALUE) ? "MAX" : "MIN") + "("
+ + dc.getColName() + ") FROM " + ds.getTableName() + ")";
+ else if (dc.getColType().equals(AppConstants.CT_NUMBER)) {
+ try {
+ double vD = Double.parseDouble(value);
+ fmtValue = value;
+ } catch(NumberFormatException ex) {
+ throw new UserDefinedException("Expected number, Given String for the form field \"" + fft.getFieldName()+"\"");
+ }
+ }
+ else if (dc.getColType().equals(AppConstants.CT_DATE)) {
+ if (fft!=null && (fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) ) {
+ fmtValue = "TO_DATE('"
+ + value
+ + "', '"
+ + (useDefaultDateFormat ? AppConstants.DEFAULT_DATE_FORMAT : nvl(dc
+ .getColFormat(), AppConstants.DEFAULT_DATE_FORMAT));//+" HH24:MI:SS')";
+ fmtValue = fmtValue + " HH24";
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC))
+ fmtValue = fmtValue + ":MI";
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC))
+ fmtValue = fmtValue + " HH24:MI:SS";
+ } else {
+ fmtValue = "TO_DATE('"
+ + value
+ + "', '"
+ + (useDefaultDateFormat ? AppConstants.DEFAULT_DATE_FORMAT : nvl(dc
+ .getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)) + "')";
+ if (Globals.getMonthFormatUseLastDay())
+ if (!useDefaultDateFormat)
+ if (nvl(dc.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT).equals(
+ "MM/YYYY")
+ || nvl(dc.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
+ .equals("MONTH, YYYY"))
+ fmtValue = "ADD_MONTHS(" + fmtValue + ", 1)-1";
+ }
+ }else {
+ fmtValue = value;
+ if (!fmtValue.startsWith("'"))
+ fmtValue = "'" + fmtValue + "'";
+ }
+
+ return fmtValue;
+ } // formatValue
+
+ private String formatListValue(String listValue, DataColumnType dc,
+ boolean useDefaultDateFormat, boolean useOnlyPipeDelimiter) throws RaptorException {
+ return formatListValue("", listValue, dc, useDefaultDateFormat, useOnlyPipeDelimiter,
+ getColumnTableById(dc.getColId()), null);
+ } // formatListValue
+
+ public String formatListValue(String fieldDisplay, String listValue, DataColumnType dc,
+ boolean useDefaultDateFormat, boolean useOnlyPipeDelimiter, DataSourceType ds,
+ String listBaseSQL) throws RaptorException {
+ StringBuffer fmtValue = new StringBuffer("");
+ //if(nvl(listValue,"").trim().length()>0) {
+ // The below statement is commented so that pipe is taken out from parsing for text area form field
+// StringTokenizer st = new StringTokenizer(listValue, useOnlyPipeDelimiter ? "|"
+ //: ",|\n\r\f");
+ StringTokenizer st = new StringTokenizer(listValue, useOnlyPipeDelimiter ? "|"
+ : ",\n\r\f");
+
+ while (st.hasMoreTokens()) {
+ if (fmtValue.length() > 0)
+ fmtValue.append(", ");
+
+ if (dc == null) {
+ // For SQL-based reports - value always string
+ String value = st.nextToken().trim();
+ if (value.startsWith("'"))
+ fmtValue.append(value);
+ else
+ fmtValue.append("'" + value + "'");
+ } else
+ fmtValue.append(formatValue(st.nextToken().trim(), dc, useDefaultDateFormat,
+ ds, null) );
+
+ } // while
+
+ if (fmtValue.length() == 0) {
+ if(nvl(fieldDisplay).length() > 0) {
+ fmtValue.append("");
+ } else {
+ fmtValue.append("(");
+ fmtValue.append(nvl(listBaseSQL, "NULL"));
+ fmtValue.append(")");
+ }
+ } else if (fmtValue.charAt(0) != '(') {
+ fmtValue.insert(0, '(');
+ fmtValue.append(')');
+ }
+ /* } else {
+ fmtValue = new StringBuffer("()");
+ }*/
+ return fmtValue.toString();
+ } // formatListValue
+
+ private String getColumnSelectStr(DataColumnType dc, ReportParamValues paramValues) {
+ String colName = dc.isCalculated() ? dc.getColName()
+ : ((nvl(dc.getTableId()).length() > 0) ? (dc.getTableId() + "." + dc
+ .getColName()) : dc.getColName());
+ String paramValue = null;
+ if (dc.isCalculated())
+ if (getFormFieldList() != null)
+ for (Iterator iter2 = getFormFieldList().getFormField().iterator(); iter2
+ .hasNext();) {
+ FormFieldType fft = (FormFieldType) iter2.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ if (!paramValues.isParameterMultiValue(fieldId)) {
+ paramValue = paramValues.getParamValue(fieldId);
+ if(paramValue!=null && paramValue.length() > 0) {
+ colName = Utils.replaceInString(colName, fieldDisplay, Utils
+ .oracleSafe(nvl(paramValue, "NULL")));
+ } else {
+ colName = Utils.replaceInString(colName, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ colName = Utils.replaceInString(colName, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ }
+ } // for
+
+ return colName;
+ } // getColumnSelectStr
+
+ private void addExtraIdSelect(StringBuffer selectExtraIdCl, String drillDownParams,
+ boolean includeSelectExpr) {
+ // drillDownParams - example value "c_master=[bo1.RECID$]"
+ drillDownParams = drillDownParams.substring(10, drillDownParams.length() - 1); // i.e.
+ // "bo1.RECID$"
+
+ selectExtraIdCl.append(", ");
+ if (includeSelectExpr) {
+ selectExtraIdCl.append(drillDownParams);
+ selectExtraIdCl.append(" ");
+ } // if
+ selectExtraIdCl.append(drillDownParams.replace('.', '_')); // i.e.
+ // "bo1_RECID$"
+ } // addExtraIdSelect
+
+ private void addExtraDateSelect(StringBuffer selectExtraDateCl, String drillDownParams,
+ ReportParamValues paramValues, boolean includeSelectExpr) {
+ // drillDownParams - example value "ff1=[dl1]&fc2=[mo3]"
+ String colId = "";
+ while (drillDownParams.indexOf('[') >= 0) {
+ int startIdx = drillDownParams.indexOf('[');
+ int endIdx = drillDownParams.indexOf(']');
+
+ if(startIdx<=endIdx) {
+ colId = drillDownParams.substring(startIdx + 1, endIdx); // i.e.
+ } else {
+ drillDownParams = drillDownParams.substring(endIdx + 1);
+ continue;
+ }
+ // "dl1"
+
+ DataColumnType column = getColumnById(colId);
+ if (column != null)
+ if (column.getColType().equals(AppConstants.CT_DATE))
+ if (!nvl(column.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT).equals(
+ AppConstants.DEFAULT_DATE_FORMAT))
+ if (selectExtraDateCl.toString().indexOf(
+ " " + colId + AppConstants.DD_COL_EXTENSION) < 0) {
+ selectExtraDateCl.append(", ");
+ if (includeSelectExpr) {
+ selectExtraDateCl.append("TO_CHAR("
+ + getColumnSelectStr(column, paramValues) + ", '"
+ + AppConstants.DEFAULT_DATE_FORMAT + "')");
+ selectExtraDateCl.append(" ");
+ } // if
+ selectExtraDateCl.append(colId + AppConstants.DD_COL_EXTENSION); // i.e.
+ // "dl1_dde"
+ } // if
+
+ drillDownParams = drillDownParams.substring(endIdx + 1);
+ } // while
+ } // addExtraDateSelect
+
+ /*
+ * public String generateSQL() { return generateSQL(null); } // generateSQL
+ */
+ public String generateSQL(String userId, HttpServletRequest request) throws RaptorException {
+ return generateSQL(new ReportParamValues(), userId, request);
+ } // generateSQL
+
+ public String generateSQL(ReportParamValues paramValues, String userId, HttpServletRequest request) throws RaptorException {
+ return generateSQL(paramValues, null, AppConstants.SO_ASC, userId, request);
+ } // generateSQL
+
+ public String generateSQL(ReportParamValues paramValues, String overrideSortByColId,
+ String overrideSortByAscDesc, String userId, HttpServletRequest request) throws RaptorException {
+ if (cr == null)
+ throw new NullPointerException("CustomReport not initialized");
+ if(nvl(getWholeSQL()).length()>0) return getWholeSQL();
+ if (paramValues.size() > 0)
+ resetCache(true);
+ //resetCache(true);
+ if (generatedSQL == null) {
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED) || getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN)) {
+ generatedSQL = generateSQLSQLBased(paramValues, overrideSortByColId,
+ overrideSortByAscDesc, userId, request );
+ generatedChartSQL = generateSQLSQLBased(paramValues, null,
+ AppConstants.SO_ASC, userId, request );
+ } else if (getReportDefType().equals(AppConstants.RD_VISUAL) && !getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ generatedSQL = generateSQLVisual(paramValues, overrideSortByColId,
+ overrideSortByAscDesc, userId, request);
+ generatedChartSQL = generateSQLVisual(paramValues, null,
+ AppConstants.SO_ASC, userId, request);
+ } else {
+ generatedSQL = generateSQLCrossTabVisual(paramValues, overrideSortByColId,
+ overrideSortByAscDesc, userId, request);
+ }
+
+ //debugLogger.debug("******************");
+ //debugLogger.debug("SQL Before Changing new line \n" + generatedSQL);
+ //debugLogger.debug("******************");
+ generatedSQL = replaceNewLine(generatedSQL, ""+ '\n', " "+'\n'+" " );
+ //chart sql should not be null
+ if(nvl(generatedChartSQL).trim().length()>0)
+ generatedChartSQL = replaceNewLine(generatedChartSQL, ""+ '\n', " "+'\n'+" " );
+ //(generatedSQL, "\n", " \n ");
+ //debugLogger.debug("******************");
+ //debugLogger.debug("SQL After Changing new line \n" + generatedSQL);
+ //debugLogger.debug("******************");
+ //generatedSQL = replaceNewLine(generatedSQL, "SELECT", "SELECT ");
+ //generatedSQL = replaceNewLine(generatedSQL, "select", "select ");
+ //debugLogger.debug("SQL After Changing new line \n" + generatedSQL);
+ //debugLogger.debug("[[[[[[[[[[[[[[[[[[");
+ //generatedSQL = Utils.replaceInString(generatedSQL, "\n", " ");
+ //generatedSQL = Utils.replaceInString(generatedSQL, "\t", " ");
+ } // if
+
+ return generatedSQL;
+ } // generateSQL
+
+ public String generateSQLSQLBased(ReportParamValues paramValues,
+ String overrideSortByColId, String overrideSortByAscDesc, String userId, HttpServletRequest request) throws RaptorException {
+ String sql = getReportSQL();
+ DataSet ds = null;
+ //debugLogger.debug(" generateSQLSQLBased " + sql);
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
+ javax.servlet.http.HttpSession session = request.getSession();
+ String dbType = "";
+ String dbInfo = getDBInfo();
+ int fieldCount = 0;
+ // For Daytona removing all formfields which has null param value
+ Pattern re1 = null;
+ Matcher matcher = null;
+ int index = 0;
+ int posFormField = 0;
+ int posAnd = 0;
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ sql = sql + " ";
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ss][Ee][Ll][Ee][Cc][Tt]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" SELECT ");
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ff][Rr][Oo][Mm]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" FROM ");
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Rr][Ee]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" WHERE ");
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Nn]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" WHEN ");
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Aa][Nn][Dd]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" AND ");
+
+ if (getFormFieldList() != null) {
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK)) {
+ if (paramValues.isParameterMultiValue(fieldId)) {
+ String replaceValue = formatListValue(fieldDisplay, Utils
+ .oracleSafe(nvl(paramValues.getParamValue(fieldId))), null, false,
+ true, null, paramValues.getParamBaseSQL(fieldId));
+ if(replaceValue.length() > 0) {
+ sql = Utils.replaceInString(sql, fieldDisplay, replaceValue);
+ } else {
+ fieldCount++;
+ if(fieldCount == 1) {
+ //sql = sql + " ";
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ss][Ee][Ll][Ee][Cc][Tt]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" SELECT ");
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Rr][Ee]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" WHERE ");
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Aa][Nn][Dd]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" AND ");
+ }
+ //sql = getReportSQL();
+ while(sql.indexOf(fieldDisplay) > 0) {
+/* sql = Utils.replaceInString(sql, "SELECT ", "select ");
+ sql = Utils.replaceInString(sql, "WHERE", "where");
+ sql = Utils.replaceInString(sql, " AND ", " and ");
+*/
+ re1 = Pattern.compile("(^[\r\n]|[\\s])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL);
+ //re1 = Pattern.compile("(^[\r\n]|[\\s])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\]", Pattern.DOTALL);
+/* posFormField = sql.indexOf(fieldDisplay);
+ posAnd = sql.lastIndexOf("and", posFormField);
+ if(posAnd < 0) posAnd = 0;
+ else if (posAnd > 2) posAnd = posAnd - 2;
+ matcher = re1.matcher(sql);
+*/
+ posFormField = sql.indexOf(fieldDisplay);
+ int posSelectField = sql.lastIndexOf("SELECT ", posFormField);
+ int andField = 0;
+ int whereField = 0, whenField = 0;
+ andField = sql.lastIndexOf(" AND ", posFormField);
+ whereField = sql.indexOf(" WHERE" , posSelectField);
+ whenField = sql.indexOf(" WHEN" , posSelectField);
+
+ if(posFormField > whereField)
+ andField = sql.lastIndexOf(" AND ", posFormField);
+ if (posFormField > andField && (andField > whereField || andField > whenField))
+ posAnd = andField;
+ else
+ posAnd = 0;
+ matcher = re1.matcher(sql);
+
+
+ if (posAnd > 0 && matcher.find(posAnd-1)) {
+ //sql = Utils.replaceInString(sql, matcher.group(), " ");
+ matcher = re1.matcher(sql);
+ index = sql!=null?sql.lastIndexOf("["+fft.getFieldName()+"]"):-1;
+
+ if(andField>0)
+ index = andField;
+ else
+ index = whereField;
+ if(index >= 0 && matcher.find(index-1)) {
+ sql = sql.replace(matcher.group(), " ");
+ }
+ } else {
+
+ //sql = sql.replace
+ re1 = Pattern.compile("(^[\r\n]|[\\s])WHERE(.*?[^\r\n]*)\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL);
+ matcher = re1.matcher(sql);
+ if(whereField != -1) {
+ if(matcher.find(whereField-1)) {
+ matcher = re1.matcher(sql);
+ index = sql!=null?sql.lastIndexOf("["+fft.getFieldName()+"]"):-1;
+ if(index >= 0 && matcher.find(index-30)) {
+ sql = sql.replace(matcher.group(), " WHERE 1=1 ");
+ }
+ //sql = Utils.replaceInString(sql, matcher.group(), " where 1=1 ");
+ } /*else {
+ replaceValue = formatListValue("", Utils
+ .oracleSafe(nvl(paramValues.getParamValue(fieldId))), null, false,
+ true, null, paramValues.getParamBaseSQL(fieldId));
+ sql = Utils.replaceInString(sql, fieldDisplay, replaceValue);
+ }*/
+ } else {
+ sql = Utils.replaceInString(sql, fieldDisplay, replaceValue);
+ }
+
+ }
+ }
+ }
+
+ //sql = Utils.replaceInString(sql, " select ", " SELECT ");
+ //sql = Utils.replaceInString(sql, " where ", " WHERE ");
+ //sql = Utils.replaceInString(sql, " and ", " AND ");
+
+ } else {
+ String paramValue = "";
+ if(paramValues.isParameterTextAreaValueAndModified(fieldId)) {
+ String value = "";
+ value = nvl(paramValues
+ .getParamValue(fieldId));
+// value = Utils.oracleSafe(nvl(value));
+// if (!(dbType.equals("DAYTONA") && sql.trim().toUpperCase().startsWith("SELECT"))) {
+// value = "('" + Utils.replaceInString(value, ",", "'|'") + "')";
+// value = Utils.replaceInString(value, "|", ",");
+// paramValue = XSSFilter.filterRequestOnlyScript(value);
+// } else if (nvl(value.trim()).length()>0) {
+// value = "('" + Utils.replaceInString(value, ",", "'|'") + "')";
+// value = Utils.replaceInString(value, "|", ",");
+// paramValue = XSSFilter.filterRequestOnlyScript(value);
+// }
+ paramValue = value;
+ } else
+ paramValue = Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId)));
+
+ if (paramValue!=null && paramValue.length() > 0) {
+ if(paramValue.toLowerCase().trim().startsWith("select ")) {
+ paramValue = Utils.replaceInString(paramValue, "[LOGGED_USERID]", userId);
+ paramValue = Utils.replaceInString(paramValue, "[USERID]", userId);
+ paramValue = Utils.replaceInString(paramValue, "[USER_ID]", userId);
+
+ paramValue = Utils.replaceInString(paramValue, "''", "'");
+ ds = ConnectionUtils.getDataSet(paramValue, dbInfo);
+ if (ds.getRowCount() > 0) paramValue = ds.getString(0, 0);
+ }
+ //debugLogger.debug("SQLSQLBASED B4^^^^^^^^^ " + sql + " " + fft.getValidationType() + " " + fft.getFieldName() + " " + fft.getFieldId());
+ if(fft!=null && (fft.getValidationType()!=null && (fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) ||fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ||fft.getValidationType().equals(FormField.VT_DATE) ))) {
+ //System.out.println("paramValues.getParamValue(fieldId_Hr) Inside if " + fft.getValidationType() + " " + fieldDisplay);
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue) +((nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ).length()>0)?" "+addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ) ):""));
+ }
+ else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+/* System.out.println("paramValues.getParamValue(fieldId_Hr)" + paramValues
+ .getParamValue(fieldId+"_Hr") + " " + paramValues
+ .getParamValue(fieldId+"_Min")) ;
+*/ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue) + ((nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ).length()>0)?" "+addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ) ):"") + ((nvl(paramValues
+ .getParamValue(fieldId+"_Min") ).length()>0)?":" + addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Min") ) ) ) : "") ) ;
+ }
+ else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue) + ((nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ).length()>0)?" "+addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ) ):"") + ((nvl(paramValues
+ .getParamValue(fieldId+"_Min") ).length()>0)?":" + addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Min") ) ) ) : "") + ((nvl(paramValues
+ .getParamValue(fieldId+"_Sec") ).length()>0)?":"+addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Sec") ) ) ) : "" ) ) ;
+ } else {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+
+
+ } else {
+ if(paramValue!=null && paramValue.length() > 0) {
+ if(sql.indexOf("'"+fieldDisplay+"'")!=-1 || sql.indexOf("'"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"'")!=-1
+ || sql.indexOf("'%"+fieldDisplay+"%'")!=-1 || sql.indexOf("'%"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"%'")!=-1
+ || sql.indexOf("'_"+fieldDisplay+"_'")!=-1 || sql.indexOf("'_"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"_'")!=-1
+ || sql.indexOf("'%_"+fieldDisplay+"_%'")!=-1 || sql.indexOf("^"+fieldDisplay+"^")!=-1 || sql.indexOf("'%_"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"_%'")!=-1) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ } else {
+ if(sql.indexOf(fieldDisplay)!=-1) {
+ if(nvl(paramValue).length()>0) {
+ try {
+ double vD = Double.parseDouble(paramValue);
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+
+ } catch (NumberFormatException ex) {
+ if (/*dbType.equals("DAYTONA") &&*/ sql.trim().toUpperCase().startsWith("SELECT")) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ } else
+ throw new UserDefinedException("Expected number, Given String for the form field \"" + fieldDisplay+"\"");
+ }
+ /*sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));*/
+ } else
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+
+ }
+ }
+ }
+ else {
+ if (dbType.equals("DAYTONA") && sql.trim().toUpperCase().startsWith("SELECT")) {
+ sql = sql + " ";
+ re1 = Pattern.compile("(^[\r\n]|[\\s]|[^0-9a-zA-Z])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL);
+ posFormField = sql.indexOf(fieldDisplay);
+ posAnd = sql.lastIndexOf(" AND ", posFormField);
+ if(posAnd < 0) posAnd = 0;
+ else if (posAnd > 2) posAnd = posAnd - 2;
+ matcher = re1.matcher(sql);
+ if (matcher.find(posAnd)) {
+ sql = sql.replace(matcher.group(), "");
+ }
+ } else {
+ sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ }
+ }
+
+ }
+
+ if (dbType.equals("DAYTONA") && sql.trim().toUpperCase().startsWith("SELECT")) {
+ sql = sql + " ";
+ re1 = Pattern.compile("(^[\r\n]|[\\s]|[^0-9a-zA-Z])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL); //+[\'\\)|\'|\\s]
+ posFormField = sql.indexOf(fieldDisplay);
+ posAnd = sql.lastIndexOf(" AND ", posFormField);
+ if(posAnd < 0) posAnd = 0;
+ else if (posAnd > 2) posAnd = posAnd - 2;
+ matcher = re1.matcher(sql);
+ if (matcher.find(posAnd)) {
+ sql = sql.replace(matcher.group(), " ");
+ }
+ } else {
+ if( fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ sql = Pattern.compile("[[\\s*][,]]\\["+fft.getFieldName()+"\\](.*?)[,]",Pattern.MULTILINE).matcher(sql).replaceAll(" ");
+ //sql = Pattern.compile("[,][\\s*]\\["+fft.getFieldName()+"\\][\\s]",Pattern.MULTILINE).matcher(sql).replaceAll(" ");
+ sql = Pattern.compile("(,.+?)[\\s*]\\["+fft.getFieldName()+"\\][\\s]",Pattern.MULTILINE).matcher(sql).replaceAll(" ");
+ //sql = Pattern.compile("(?:,?)[\\s*]\\["+fft.getFieldName()+"\\]",Pattern.MULTILINE).matcher(sql).replaceAll("");
+ //sql = Pattern.compile("[,][\\s*]\\["+fft.getFieldName()+"\\]",Pattern.MULTILINE).matcher(sql).replaceAll(" ");
+ //sql = Pattern.compile( "\\["+fft.getFieldName()+"\\](.*?[^\r\n]*)[,]",Pattern.DOTALL).matcher(sql).replaceAll("");
+
+ //sql = Pattern.compile("[,]|(.*?[^\r\n]*)"+fieldDisplay+"(.*?)\\s",Pattern.DOTALL).matcher(sql).replaceAll("");
+ //sql = Pattern.compile("(.*?[^\r\n]*)"+fieldDisplay+"(.*?)\\s|[,]",Pattern.DOTALL).matcher(sql).replaceAll("");
+/* sql = Utils.replaceInString(sql, "," + fieldDisplay , nvl(
+ paramValue, ""));
+ sql = Utils.replaceInString(sql, fieldDisplay + "," , nvl(
+ paramValue, ""));
+*/ } else {
+ //debugLogger.debug("ParamValue |" + paramValue + "| Sql |" + sql + "| Multi Value |" + paramValues.isParameterMultiValue(fieldId));
+ sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ sql = Utils.replaceInString(sql, fieldDisplay , nvl(
+ paramValue, "NULL"));
+ //debugLogger.debug("SQLSQLBASED AFTER^^^^^^^^^ " + sql);
+ }
+ }
+
+ } // else
+ } // if BLANK
+ } // for
+ if(request != null ) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff")) {
+ if (nvl(request.getParameter(reqParameters[i].toUpperCase())).length() > 0)
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ }
+ else
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ if(nvl(request.getParameter(scheduleSessionParameters[i])).trim().length()>0 )
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ }
+ }
+ if(session != null ) {
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ // paramValue = Utils.replaceInString(paramValue, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
+ // else {
+ //debugLogger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ //}
+ }
+ }
+ } else {
+ //debugLogger.debug("BEFORE LOGGED USERID REPLACE " + sql);
+ //sql = Utils.replaceInString(sql, "'[logged_userId]'", "'"+userId+"'");
+ //debugLogger.debug("Replacing string 2 " + sql);
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USER_ID]", userId);
+ //debugLogger.debug("AFTER LOGGED USERID REPLACE " + sql);
+ // Added for Simon's GM Project where they need to get page_id in their query
+ //debugLogger.debug("SQLSQLBASED no formfields " + sql);
+ if(request != null ) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ }
+ if(session != null ) {
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //debugLogger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ }
+ }
+ // if it is not multiple select and ParamValue is empty this is the place it can be replaced.
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USER_ID]", userId);
+ //debugLogger.debug("SQLSQLBASED no formfields after" + sql);
+ //debugLogger.debug("Replacing String 2 "+ sql);
+ //debugLogger.debug("Replaced String " + sql);
+
+ int closeBracketPos = 0;
+ if (nvl(overrideSortByColId).length() > 0) {
+ if(sql.lastIndexOf(")")!= -1) closeBracketPos = sql.lastIndexOf(")");
+ int idxOrderBy = (closeBracketPos>0)?sql.toUpperCase().indexOf("ORDER BY", closeBracketPos):sql.toUpperCase().lastIndexOf("ORDER BY");
+ DataColumnType dct = getColumnById(overrideSortByColId+"_sort");
+ if(dct!=null && dct.getColName().length()>0) {
+ overrideSortByColId = overrideSortByColId+"_sort";
+ }
+ if (idxOrderBy < 0)
+ sql += " ORDER BY " + overrideSortByColId + " " + overrideSortByAscDesc;
+ else {
+ int braketCount = 0;
+ int idxOrderByClauseEnd = 0;
+ for (idxOrderByClauseEnd = idxOrderBy; idxOrderByClauseEnd < sql.length(); idxOrderByClauseEnd++) {
+ char ch = sql.charAt(idxOrderByClauseEnd);
+
+ if (ch == '(')
+ braketCount++;
+ else if (ch == ')') {
+ if (braketCount == 0)
+ break;
+ braketCount--;
+ }
+ } // for
+
+ sql = sql.substring(0, idxOrderBy) + " ORDER BY " + overrideSortByColId + " "
+ + overrideSortByAscDesc + sql.substring(idxOrderByClauseEnd);
+ } // else
+ } // if
+ sql = Pattern.compile("([\n][\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" ");
+ return sql;
+ } // generateSQLSQLBased
+
+ public String generateSQLVisual(ReportParamValues paramValues, String overrideSortByColId,
+ String overrideSortByAscDesc, String userId, HttpServletRequest request)throws RaptorException {
+ StringBuffer selectCl = new StringBuffer();
+ StringBuffer fromCl = new StringBuffer();
+ StringBuffer whereCl = new StringBuffer();
+ StringBuffer groupByCl = new StringBuffer();
+ StringBuffer havingCl = new StringBuffer();
+ StringBuffer orderByCl = new StringBuffer();
+ StringBuffer selectExtraIdCl = new StringBuffer();
+ StringBuffer selectExtraDateCl = new StringBuffer();
+
+ int whereClBracketCount = 0;
+ int havingClBracketCount = 0;
+ int whereClCarryoverBrackets = 0;
+ int havingClCarryoverBrackets = 0;
+
+ // Identifying FROM clause tables and WHERE clause joins
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+
+ if (fromCl.length() > 0)
+ fromCl.append(", ");
+ fromCl.append(ds.getTableName());
+ fromCl.append(" ");
+ fromCl.append(ds.getTableId());
+
+ if (nvl(ds.getRefTableId()).length() > 0) {
+ if (whereCl.length() > 0)
+ whereCl.append(" AND ");
+ whereCl.append(ds.getRefDefinition());
+ } // if
+ // Add the condition.
+ TableSource tableSource = null;
+ String dBInfo = this.cr.getDbInfo();
+ Vector userRoles = AppUtils.getUserRoles(request);
+ tableSource = DataCache.getTableSource(ds.getTableName(), dBInfo,userRoles,userId, request);
+ if (userId != null && (!AppUtils.isSuperUser(request))
+ && (!AppUtils.isAdminUser(request)) && tableSource != null
+ && nvl(tableSource.getFilterSql()).length() > 0) {
+ if (whereCl.length() > 0)
+ whereCl.append(" AND ");
+ whereCl.append(Utils.replaceInString(Utils.replaceInString(tableSource
+ .getFilterSql(), "[" + ds.getTableName() + "]", ds.getTableId()),
+ "[USER_ID]", userId));
+ } // if
+ } // for
+
+ List reportCols = getAllColumns();
+
+ boolean isGroupStmt = false;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.isGroupBreak()) {
+ isGroupStmt = true;
+ break;
+ } // if
+ } // for
+
+ // Identifying SELECT and GROUP BY clause fields and WHERE and HAVING
+ // clause filters
+ // Collections.sort(reportCols, new OrderSeqComparator());
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+
+ // SELECT clause fields
+ //TODO: Uncomment if it's not working -- if (dc.isVisible()) {
+ if (selectCl.length() > 0)
+ selectCl.append(", ");
+ selectCl.append(getSelectExpr(dc, colName));
+ selectCl.append(" ");
+ selectCl.append(dc.getColId());
+ //TODO } // if
+
+ // Checking for extra fields necessary for drill-down
+ if (nvl(dc.getDrillDownURL()).length() > 0)
+ if (isViewAction(dc.getDrillDownURL()))
+ addExtraIdSelect(selectExtraIdCl, nvl(dc.getDrillDownParams()), true);
+ else
+ addExtraDateSelect(selectExtraDateCl, nvl(dc.getDrillDownParams()),
+ paramValues, true);
+
+ // GROUP BY clause fields
+ if (dc.isGroupBreak()) {
+ if (groupByCl.length() > 0)
+ groupByCl.append(", ");
+ groupByCl.append(colName);
+ } // if
+
+ // WHERE/HAVING clause fields
+ //boolean isHavingCl = isGroupStmt && dc.isVisible() && (!dc.isGroupBreak());
+ boolean isHavingCl = isGroupStmt && (!dc.isGroupBreak());
+ StringBuffer filterCl = isHavingCl ? havingCl : whereCl;
+ // StringBuffer filterCl =
+ // isGroupStmt?(dc.isVisible()?(dc.isGroupBreak()?whereCl:havingCl):whereCl):whereCl;
+ if (dc.getColFilterList() != null) {
+ int fNo = 0;
+ List fList = dc.getColFilterList().getColFilter();
+ for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
+ ColFilterType cf = (ColFilterType) iterF.next();
+
+ StringBuffer curFilter = new StringBuffer();
+ if (filterCl.length() > 0)
+ curFilter.append(" " + cf.getJoinCondition() + " ");
+ if ((isHavingCl ? havingClCarryoverBrackets : whereClCarryoverBrackets) > 0)
+ for (int b = 0; b < (isHavingCl ? havingClCarryoverBrackets
+ : whereClCarryoverBrackets); b++)
+ filterCl.append('(');
+ curFilter.append(nvl(cf.getOpenBrackets()));
+ curFilter.append(colName + " ");
+ curFilter.append(cf.getExpression() + " ");
+
+ boolean applyFilter = true;
+ if ((nvl(cf.getArgValue()).length() > 0)
+ || (nvl(cf.getArgType()).equals(AppConstants.AT_FORM)))
+ if (nvl(cf.getArgType()).equals(AppConstants.AT_FORMULA))
+ curFilter.append(cf.getArgValue());
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_VALUE))
+ curFilter.append(formatValue(cf.getArgValue(), dc, false));
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_LIST))
+ curFilter.append(formatListValue(cf.getArgValue(), dc, false,
+ false));
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_COLUMN))
+ curFilter.append(getColumnNameById(cf.getArgValue()));
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_FORM)) {
+ String fieldName = getFormFieldName(cf);
+ String fieldValue = Utils.oracleSafe(paramValues
+ .getParamValue(fieldName));
+ boolean isMultiValue = paramValues
+ .isParameterMultiValue(fieldName);
+ boolean usePipeDelimiterOnly = false;
+
+ FormFieldType fft = getFormFieldByDisplayValue(cf.getArgValue());
+ if (fft == null)
+ // If not FormField => applying default value
+ fieldValue = nvl(fieldValue, Utils
+ .oracleSafe(cf.getArgValue()));
+ else
+ usePipeDelimiterOnly = fft.getFieldType().equals(
+ FormField.FFT_CHECK_BOX)
+ || fft.getFieldType().equals(FormField.FFT_LIST_MULTI);
+ //Added for TimeStamp validation
+ String fieldId = fft.getFieldId();
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)||fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ fieldValue = nvl(
+ fieldValue + " " + addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ) ) ) ;
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ fieldValue = fieldValue + (nvl(paramValues
+ .getParamValue(fieldId+"_Min")).length()>0 ? ":" + addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Min")))): "") ;
+ }
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ fieldValue = fieldValue + (nvl(paramValues
+ .getParamValue(fieldId+"_Sec")).length()>0 ? ":"+ addZero(Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fieldId+"_Sec")))) : "");
+ }
+ }
+
+ // End
+ if (nvl(fieldValue).length() == 0)
+ // Does not append filter with missing form
+ // field argument
+ applyFilter = false;
+ else if (isMultiValue || nvl(cf.getExpression()).equals("IN")
+ || nvl(cf.getExpression()).equals("NOT IN"))
+ curFilter.append(formatListValue(fieldValue, dc, true,
+ usePipeDelimiterOnly));
+ else
+ curFilter.append(formatValue(fieldValue, dc, true, null, fft));
+ } // else
+ curFilter.append(nvl(cf.getCloseBrackets()));
+
+ if (applyFilter) {
+ filterCl.append(curFilter.toString());
+
+ if (isHavingCl) {
+ havingClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ havingClCarryoverBrackets = 0;
+ } else {
+ whereClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ whereClCarryoverBrackets = 0;
+ }
+ } else if (nvl(cf.getOpenBrackets()).length() != nvl(cf.getCloseBrackets())
+ .length())
+ if (nvl(cf.getOpenBrackets()).length() > nvl(cf.getCloseBrackets())
+ .length()) {
+ // Carry over opening brackets
+ if (isHavingCl)
+ havingClCarryoverBrackets += (nvl(cf.getOpenBrackets())
+ .length() - nvl(cf.getCloseBrackets()).length());
+ else
+ whereClCarryoverBrackets += (nvl(cf.getOpenBrackets())
+ .length() - nvl(cf.getCloseBrackets()).length());
+
+ if (isHavingCl)
+ havingClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ else
+ whereClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ } else {
+ // Adding closing brackets
+ if (filterCl.length() > 0) {
+ for (int b = 0; b < nvl(cf.getCloseBrackets()).length()
+ - nvl(cf.getOpenBrackets()).length(); b++)
+ filterCl.append(')');
+
+ if (isHavingCl)
+ havingClBracketCount += (nvl(cf.getOpenBrackets())
+ .length() - nvl(cf.getCloseBrackets()).length());
+ else
+ whereClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ } // if
+ } // else
+ } // for
+ } // if
+ } // for
+
+ // Identifying ORDER BY clause fields
+ DataColumnType overrideSortByCol = null;
+ if (overrideSortByColId != null)
+ overrideSortByCol = getColumnById(overrideSortByColId);
+
+ if (overrideSortByCol != null) {
+ orderByCl.append(getColumnSelectStr(overrideSortByCol, paramValues));
+ orderByCl.append(" ");
+ orderByCl.append(nvl(overrideSortByAscDesc, AppConstants.SO_ASC));
+ } else if (getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ /*
+ * for(Iterator iter=reportCols.iterator(); iter.hasNext(); ) {
+ * DataColumnType dc = (DataColumnType) iter.next();
+ *
+ * if(nvl(dc.getCrossTabValue()).equals(AppConstants.CV_ROW)||nvl(dc.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ * if(orderByCl.length()>0) orderByCl.append(", ");
+ * orderByCl.append(getColumnSelectStr(dc, paramValues));
+ * orderByCl.append(" ");
+ * if(dc.getColType().equals(AppConstants.CT_DATE))
+ * orderByCl.append(AppConstants.SO_DESC); else
+ * orderByCl.append(AppConstants.SO_ASC); } // if } // for
+ */
+ } else {
+ Collections.sort(reportCols, new OrderBySeqComparator());
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+
+ if (dc.getOrderBySeq() > 0) {
+ if (orderByCl.length() > 0)
+ orderByCl.append(", ");
+ orderByCl.append(getColumnSelectStr(dc, paramValues));
+ orderByCl.append(" ");
+ orderByCl.append(dc.getOrderByAscDesc());
+ } // if
+ } // for
+ Collections.sort(reportCols, new OrderSeqComparator());
+ } // else
+
+ // Adding up the actual statement
+ StringBuffer sql = new StringBuffer();
+ //sql.append("SELECT "); // Need to add PK for /*+ FIRST_ROWS */ ");
+ sql.append(Globals.getGenerateSqlVisualSelect());
+ //sql.append((selectCl.length() == 0) ? "COUNT(*) cnt" : selectCl.toString());
+ sql.append((selectCl.length() == 0) ? Globals.getGenerateSqlVisualCount() : selectCl.toString());
+ if (groupByCl.length() == 0)
+ sql.append(selectExtraIdCl.toString());
+ sql.append(selectExtraDateCl.toString());
+ // sql.append(" FROM ");
+ sql.append((fromCl.length() == 0) ? Globals.getGenerateSqlVisualDual() : "FROM "+fromCl.toString());
+ if (whereCl.length() > 0) {
+ if (whereClBracketCount > 0) {
+ for (int b = 0; b < whereClBracketCount; b++)
+ whereCl.append(')');
+ } else if (whereClBracketCount < 0) {
+ for (int b = 0; b < Math.abs(whereClBracketCount); b++)
+ whereCl.insert(0, '(');
+ } // else
+
+ sql.append(" WHERE ");
+ sql.append(whereCl.toString());
+ } // if
+ if (groupByCl.length() > 0) {
+ sql.append(" GROUP BY ");
+ sql.append(groupByCl.toString());
+
+ if (havingCl.length() > 0) {
+ if (havingClBracketCount > 0) {
+ for (int b = 0; b < havingClBracketCount; b++)
+ havingCl.append(')');
+ } else if (havingClBracketCount < 0) {
+ for (int b = 0; b < Math.abs(havingClBracketCount); b++)
+ havingCl.insert(0, '(');
+ } // else
+
+ sql.append(" HAVING ");
+ sql.append(havingCl.toString());
+ }
+ }
+ if (orderByCl.length() > 0) {
+ sql.append(" ORDER BY ");
+ sql.append(orderByCl.toString());
+ }
+ //String sqlStr = Utils.replaceInString(sql.toString(), "[LOGGED_USERID]", userId);
+ //return sqlStr;
+ return sql.toString();
+ } // generateSQLVisual
+
+ public String generateSQLCrossTabVisual(ReportParamValues paramValues, String overrideSortByColId,
+ String overrideSortByAscDesc, String userId, HttpServletRequest request) throws RaptorException {
+ StringBuffer selectCl = new StringBuffer();
+ StringBuffer fromCl = new StringBuffer();
+ StringBuffer whereCl = new StringBuffer();
+ StringBuffer groupByCl = new StringBuffer();
+ StringBuffer havingCl = new StringBuffer();
+ StringBuffer orderByCl = new StringBuffer();
+ StringBuffer selectExtraIdCl = new StringBuffer();
+ StringBuffer selectExtraDateCl = new StringBuffer();
+
+ int whereClBracketCount = 0;
+ int havingClBracketCount = 0;
+ int whereClCarryoverBrackets = 0;
+ int havingClCarryoverBrackets = 0;
+
+ // Identifying FROM clause tables and WHERE clause joins
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+
+ if (fromCl.length() > 0)
+ fromCl.append(", ");
+ fromCl.append(ds.getTableName());
+ fromCl.append(" ");
+ fromCl.append(ds.getTableId());
+
+ if (nvl(ds.getRefTableId()).length() > 0) {
+ if (whereCl.length() > 0)
+ whereCl.append(" AND ");
+ whereCl.append(ds.getRefDefinition());
+ } // if
+ // Add the condition.
+ TableSource tableSource = null;
+ String dBInfo = this.cr.getDbInfo();
+ Vector userRoles = AppUtils.getUserRoles(request);
+ tableSource = DataCache.getTableSource(ds.getTableName(), dBInfo,userRoles,userId, request);
+ if (userId != null && (!AppUtils.isSuperUser(request))
+ && (!AppUtils.isAdminUser(request)) && tableSource != null
+ && nvl(tableSource.getFilterSql()).length() > 0) {
+ if (whereCl.length() > 0)
+ whereCl.append(" AND ");
+ whereCl.append(Utils.replaceInString(Utils.replaceInString(tableSource
+ .getFilterSql(), "[" + ds.getTableName() + "]", ds.getTableId()),
+ "[USER_ID]", userId));
+ } // if
+ } // for
+
+ List reportCols = getAllColumns();
+
+ boolean isGroupStmt = false;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.isGroupBreak()) {
+ isGroupStmt = true;
+ break;
+ } // if
+ } // for
+
+ // Identifying SELECT and GROUP BY clause fields and WHERE and HAVING
+ // clause filters
+ // Collections.sort(reportCols, new OrderSeqComparator());
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+
+ // SELECT clause fields
+ if (dc.isVisible()) {
+ if (selectCl.length() > 0)
+ selectCl.append(", ");
+ selectCl.append(getSelectExpr(dc, colName));
+ selectCl.append(" ");
+ selectCl.append(dc.getColId());
+ } // if
+
+ // Checking for extra fields necessary for drill-down
+ if (nvl(dc.getDrillDownURL()).length() > 0)
+ if (isViewAction(dc.getDrillDownURL()))
+ addExtraIdSelect(selectExtraIdCl, nvl(dc.getDrillDownParams()), true);
+ else
+ addExtraDateSelect(selectExtraDateCl, nvl(dc.getDrillDownParams()),
+ paramValues, true);
+
+ // GROUP BY clause fields
+ if (dc.isGroupBreak()) {
+ if (groupByCl.length() > 0)
+ groupByCl.append(", ");
+ groupByCl.append(colName);
+ } // if
+
+ // WHERE/HAVING clause fields
+ boolean isHavingCl = isGroupStmt && dc.isVisible() && (!dc.isGroupBreak());
+ //boolean isHavingCl = isGroupStmt && (!dc.isGroupBreak());
+ //StringBuffer filterCl = isHavingCl ? havingCl : whereCl;
+ StringBuffer filterCl =
+ isGroupStmt?(dc.isVisible()?(dc.isGroupBreak()?whereCl:havingCl):whereCl):whereCl;
+ if (dc.getColFilterList() != null) {
+ int fNo = 0;
+ List fList = dc.getColFilterList().getColFilter();
+ for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
+ ColFilterType cf = (ColFilterType) iterF.next();
+
+ StringBuffer curFilter = new StringBuffer();
+ if (filterCl.length() > 0)
+ curFilter.append(" " + cf.getJoinCondition() + " ");
+ if ((isHavingCl ? havingClCarryoverBrackets : whereClCarryoverBrackets) > 0)
+ for (int b = 0; b < (isHavingCl ? havingClCarryoverBrackets
+ : whereClCarryoverBrackets); b++)
+ filterCl.append('(');
+ curFilter.append(nvl(cf.getOpenBrackets()));
+ curFilter.append(colName + " ");
+ curFilter.append(cf.getExpression() + " ");
+
+ boolean applyFilter = true;
+ if ((nvl(cf.getArgValue()).length() > 0)
+ || (nvl(cf.getArgType()).equals(AppConstants.AT_FORM)))
+ if (nvl(cf.getArgType()).equals(AppConstants.AT_FORMULA))
+ curFilter.append(cf.getArgValue());
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_VALUE))
+ curFilter.append(formatValue(cf.getArgValue(), dc, false));
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_LIST))
+ curFilter.append(formatListValue(cf.getArgValue(), dc, false,
+ false));
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_COLUMN))
+ curFilter.append(getColumnNameById(cf.getArgValue()));
+ else if (nvl(cf.getArgType()).equals(AppConstants.AT_FORM)) {
+ String fieldName = getFormFieldName(cf);
+ String fieldValue = Utils.oracleSafe(paramValues
+ .getParamValue(fieldName));
+ boolean isMultiValue = paramValues
+ .isParameterMultiValue(fieldName);
+ boolean usePipeDelimiterOnly = false;
+
+ FormFieldType fft = getFormFieldByDisplayValue(cf.getArgValue());
+ if (fft == null)
+ // If not FormField => applying default value
+ fieldValue = nvl(fieldValue, Utils
+ .oracleSafe(cf.getArgValue()));
+ else
+ usePipeDelimiterOnly = fft.getFieldType().equals(
+ FormField.FFT_CHECK_BOX)
+ || fft.getFieldType().equals(FormField.FFT_LIST_MULTI);
+
+ if (nvl(fieldValue).length() == 0)
+ // Does not append filter with missing form
+ // field argument
+ applyFilter = false;
+ else if (isMultiValue || nvl(cf.getExpression()).equals("IN")
+ || nvl(cf.getExpression()).equals("NOT IN"))
+ curFilter.append(formatListValue(fieldValue, dc, true,
+ usePipeDelimiterOnly));
+ else
+ curFilter.append(formatValue(fieldValue, dc, true));
+ } // else
+ curFilter.append(nvl(cf.getCloseBrackets()));
+
+ if (applyFilter) {
+ filterCl.append(curFilter.toString());
+
+ if (isHavingCl) {
+ havingClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ havingClCarryoverBrackets = 0;
+ } else {
+ whereClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ whereClCarryoverBrackets = 0;
+ }
+ } else if (nvl(cf.getOpenBrackets()).length() != nvl(cf.getCloseBrackets())
+ .length())
+ if (nvl(cf.getOpenBrackets()).length() > nvl(cf.getCloseBrackets())
+ .length()) {
+ // Carry over opening brackets
+ if (isHavingCl)
+ havingClCarryoverBrackets += (nvl(cf.getOpenBrackets())
+ .length() - nvl(cf.getCloseBrackets()).length());
+ else
+ whereClCarryoverBrackets += (nvl(cf.getOpenBrackets())
+ .length() - nvl(cf.getCloseBrackets()).length());
+
+ if (isHavingCl)
+ havingClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ else
+ whereClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ } else {
+ // Adding closing brackets
+ if (filterCl.length() > 0) {
+ for (int b = 0; b < nvl(cf.getCloseBrackets()).length()
+ - nvl(cf.getOpenBrackets()).length(); b++)
+ filterCl.append(')');
+
+ if (isHavingCl)
+ havingClBracketCount += (nvl(cf.getOpenBrackets())
+ .length() - nvl(cf.getCloseBrackets()).length());
+ else
+ whereClBracketCount += (nvl(cf.getOpenBrackets()).length() - nvl(
+ cf.getCloseBrackets()).length());
+ } // if
+ } // else
+ } // for
+ } // if
+ } // for
+
+ // Identifying ORDER BY clause fields
+ DataColumnType overrideSortByCol = null;
+ if (overrideSortByColId != null)
+ overrideSortByCol = getColumnById(overrideSortByColId);
+
+ if (overrideSortByCol != null) {
+ orderByCl.append(getColumnSelectStr(overrideSortByCol, paramValues));
+ orderByCl.append(" ");
+ orderByCl.append(nvl(overrideSortByAscDesc, AppConstants.SO_ASC));
+ } else if (getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ /*
+ * for(Iterator iter=reportCols.iterator(); iter.hasNext(); ) {
+ * DataColumnType dc = (DataColumnType) iter.next();
+ *
+ * if(nvl(dc.getCrossTabValue()).equals(AppConstants.CV_ROW)||nvl(dc.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ * if(orderByCl.length()>0) orderByCl.append(", ");
+ * orderByCl.append(getColumnSelectStr(dc, paramValues));
+ * orderByCl.append(" ");
+ * if(dc.getColType().equals(AppConstants.CT_DATE))
+ * orderByCl.append(AppConstants.SO_DESC); else
+ * orderByCl.append(AppConstants.SO_ASC); } // if } // for
+ */
+ } else {
+ Collections.sort(reportCols, new OrderBySeqComparator());
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+
+ if (dc.getOrderBySeq() > 0) {
+ if (orderByCl.length() > 0)
+ orderByCl.append(", ");
+ orderByCl.append(getColumnSelectStr(dc, paramValues));
+ orderByCl.append(" ");
+ orderByCl.append(dc.getOrderByAscDesc());
+ } // if
+ } // for
+ Collections.sort(reportCols, new OrderSeqComparator());
+ } // else
+
+ // Adding up the actual statement
+ StringBuffer sql = new StringBuffer();
+ //sql.append("SELECT "); // Need to add PK for /*+ FIRST_ROWS */ ");
+ sql.append(Globals.getGenerateSqlVisualSelect());
+ // sql.append((selectCl.length() == 0) ? "COUNT(*) cnt" : selectCl.toString());
+ sql.append((selectCl.length() == 0) ? Globals.getGenerateSqlVisualCount() : selectCl.toString());
+ if (groupByCl.length() == 0)
+ sql.append(selectExtraIdCl.toString());
+ sql.append(selectExtraDateCl.toString());
+ // sql.append(" FROM ");
+ sql.append((fromCl.length() == 0) ? Globals.getGenerateSqlVisualDual() : "FROM "+fromCl.toString());
+ if (whereCl.length() > 0) {
+ if (whereClBracketCount > 0) {
+ for (int b = 0; b < whereClBracketCount; b++)
+ whereCl.append(')');
+ } else if (whereClBracketCount < 0) {
+ for (int b = 0; b < Math.abs(whereClBracketCount); b++)
+ whereCl.insert(0, '(');
+ } // else
+
+ sql.append(" WHERE ");
+ sql.append(whereCl.toString());
+ } // if
+ if (groupByCl.length() > 0) {
+ sql.append(" GROUP BY ");
+ sql.append(groupByCl.toString());
+
+ if (havingCl.length() > 0) {
+ if (havingClBracketCount > 0) {
+ for (int b = 0; b < havingClBracketCount; b++)
+ havingCl.append(')');
+ } else if (havingClBracketCount < 0) {
+ for (int b = 0; b < Math.abs(havingClBracketCount); b++)
+ havingCl.insert(0, '(');
+ } // else
+
+ sql.append(" HAVING ");
+ sql.append(havingCl.toString());
+ }
+ }
+ if (orderByCl.length() > 0) {
+ sql.append(" ORDER BY ");
+ sql.append(orderByCl.toString());
+ }
+
+ System.out.println("Created SQL statement: "+sql);
+
+ //String sqlStr = Utils.replaceInString(sql.toString(), "[LOGGED_USERID]", userId);
+ //return sqlStr;
+ return sql.toString();
+ } // generateSQLCrossTabVisual
+
+
+ public String generatePagedSQL(int pageNo, String userId, HttpServletRequest request, boolean getColumnNamesFromReportSQL, ReportParamValues paramValues) throws RaptorException {
+ int counter = 0;
+ if(!Globals.isMySQL())
+ counter = 1;
+ return generateSubsetSQL(pageNo * getPageSize() + counter, ((pageNo + 1) * getPageSize())
+ + ((pageNo == 0) ? 1 : 0), userId, request, getColumnNamesFromReportSQL, paramValues);
+ } // generatePagedSQL
+
+ public String generateSubsetSQL(int startRow, int endRow, String userId, HttpServletRequest request, boolean getColumnNamesFromReportSQL, ReportParamValues paramValues) throws RaptorException {
+ //debugLogger.debug(" ******** End Row ********* " + endRow);
+ String dbInfo = getDBInfo();
+ String dbType = "";
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ List reportCols = getAllColumns();
+ String wholeSQL_OrderBy = getWholeSQL();
+ String reportSQL = getWholeSQL();
+ reportSQL = reportSQL.replace(";", "");
+ setWholeSQL(reportSQL);
+ if(nvl(reportSQL).length()>0)
+ reportSQL = generateSQL(userId, request);
+
+ if (reportSQL.toUpperCase().indexOf("ORDER BY ") < 0) {
+ StringBuffer sortBy = null;
+
+ if (reportSQL.toUpperCase().indexOf("GROUP BY ") < 0)
+ if (getDataSourceList().getDataSource().size() > 0) {
+ DataSourceType dst = (DataSourceType) getDataSourceList().getDataSource()
+ .get(0);
+ String tId = dst.getTableId();
+ String tPK = dst.getTablePK();
+ if (nvl(tPK).length() > 0) {
+ sortBy = new StringBuffer();
+ StringTokenizer st = new StringTokenizer(tPK, ", ");
+ while (st.hasMoreTokens()) {
+ if (sortBy.length() > 0)
+ sortBy.append(",");
+ sortBy.append(tId);
+ sortBy.append(".");
+ sortBy.append(st.nextToken());
+ } // while
+ }
+ } // if
+ if (reportSQL.trim().toUpperCase().startsWith("SELECT")) {
+ //if (!(dbType.equals("DAYTONA") && reportSQL.trim().toUpperCase().startsWith("SELECT")))
+ // reportSQL += " ORDER BY " + ((sortBy == null) ? "1" : sortBy.toString());
+ }
+ }
+
+ StringBuffer colNames = new StringBuffer();
+ StringBuffer colExtraIdNames = new StringBuffer();
+ StringBuffer colExtraDateNames = new StringBuffer();
+
+ if(getColumnNamesFromReportSQL) {
+ DataSet ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+ List reportCols1 = getAllColumns();
+ reportCols = new Vector();
+ outer:
+ for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ for (int k=0; k<ds.getColumnCount(); k++) {
+ if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
+ reportCols.add(dct);
+ continue outer;
+ }
+ }
+ }
+
+ if (getFormFieldList() != null) {
+ String paramValue = "";
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ paramValue = Utils.oracleSafe(nvl(paramValues
+ .getParamValue(fft.getFieldId())));
+ outer:
+ for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter1.next();
+ if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
+ dct.setDisplayName(paramValue);
+ continue outer;
+ }
+ }
+
+
+ }
+ }
+ }
+
+ }
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ //TODO: commented if (dc.isVisible()) {
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ //TODO uncomment if it's not working} // if
+
+ // Checking for extra fields necessary for drill-down
+ if (nvl(dc.getDrillDownURL()).length() > 0)
+ if (isViewAction(dc.getDrillDownURL()))
+ addExtraIdSelect(colExtraIdNames, nvl(dc.getDrillDownParams()), false);
+ else
+ addExtraDateSelect(colExtraDateNames, nvl(dc.getDrillDownParams()), null,
+ false);
+ } // for
+
+ if (reportSQL.toUpperCase().indexOf("GROUP BY ") < 0)
+ colNames.append(colExtraIdNames.toString());
+ //commented to avoid coldId_dde
+ //colNames.append(colExtraDateNames.toString());
+
+ /*
+ * if(pageNo==0) if(reportSQL.toUpperCase().indexOf(" WHERE ")<0)
+ * if(reportSQL.toUpperCase().indexOf(" GROUP BY ")<0) reportSQL =
+ * reportSQL.substring(0, reportSQL.toUpperCase().indexOf(" ORDER BY
+ * "))+" WHERE ROWNUM <=
+ * "+getPageSize()+reportSQL.substring(reportSQL.toUpperCase().indexOf("
+ * ORDER BY ")); else reportSQL = "SELECT "+colNames.toString()+" FROM
+ * (SELECT ROWNUM rnum, "+colNames.toString()+" FROM ("+reportSQL+") x)
+ * y WHERE rnum <= "+getPageSize()+" ORDER BY rnum"; else reportSQL =
+ * reportSQL.substring(0, reportSQL.toUpperCase().indexOf(" WHERE "))+"
+ * WHERE ROWNUM <= "+getPageSize()+" AND
+ * "+reportSQL.substring(reportSQL.toUpperCase().indexOf(" WHERE ")+7);
+ * else reportSQL = "SELECT "+colNames.toString()+" FROM (SELECT ROWNUM
+ * rnum, "+colNames.toString()+" FROM ("+reportSQL+") x) y WHERE rnum >=
+ * "+(pageNo*getPageSize()+1)+" AND rnum <=
+ * "+((pageNo+1)*getPageSize())+" ORDER BY rnum";
+ */
+ if (dbType.equals("DAYTONA") && reportSQL.trim().toUpperCase().startsWith("SELECT")) {
+ if(endRow == -1) endRow = (getMaxRowsInExcelDownload()>0)?getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ reportSQL = reportSQL + " LIMIT TO " +(startRow==0?startRow+1:startRow)+"->"+endRow;
+ return reportSQL;
+ } else if (dbType.equals("DAYTONA")) {
+ return reportSQL;
+ }
+
+ //reportSQL = "SELECT " + colNames.toString() + " FROM (SELECT ROWNUM rnum, "
+ // + colNames.toString() + " FROM (" + reportSQL + ") x ";
+
+ String rSQL = Globals.getGenerateSubsetSql();
+ rSQL = rSQL.replace("[colNames.toString()]", colNames.toString());
+ rSQL = rSQL.replace("[reportSQL]", reportSQL);
+
+ reportSQL=rSQL;
+ //added rownum for total report where row header need to be shown
+ //reportSQLOnlyFirstPart = "SELECT rnum," + colNames.toString() + " FROM (SELECT ROWNUM rnum, "
+ //+ colNames.toString() + " FROM (" ;
+
+ reportSQLOnlyFirstPart = Globals.getReportSqlOnlyFirstPart();
+ reportSQLOnlyFirstPart = reportSQLOnlyFirstPart.replace("[colNames.toString()]", colNames.toString());
+
+
+ reportSQLWithRowNum = reportSQL;
+
+ /* if( endRow != -1)
+ reportSQL += " WHERE ROWNUM <= " + endRow;
+ reportSQL += " ) y WHERE rnum >= " + startRow + " ORDER BY rnum";
+ return reportSQL;*/
+ String parta = Globals.getReportSqlOnlySecondPartA();
+ String partb = Globals.getReportSqlOnlySecondPartB();
+
+ String partSql = "";
+ if(!AppUtils.isNotEmpty(getDBType())){
+ setDBType(Globals.getDBType());
+ }
+
+ int closeBracketPos = 0;
+ if(wholeSQL_OrderBy.lastIndexOf(")")!= -1) closeBracketPos = wholeSQL_OrderBy.lastIndexOf(")");
+ int idxOrderBy = (closeBracketPos>0)?wholeSQL_OrderBy.toUpperCase().indexOf("ORDER BY", closeBracketPos):wholeSQL_OrderBy.toUpperCase().lastIndexOf("ORDER BY");
+ String orderbyclause = "";
+ if (idxOrderBy < 0) {
+ orderbyclause = " ORDER BY 1 ";
+ partSql += " "+ orderbyclause+ " ";
+ }
+ else {
+ orderbyclause = wholeSQL_OrderBy.substring(idxOrderBy);
+ partSql += " "+ orderbyclause+ " ";
+ }
+
+ if(getDBType().equals(AppConstants.MYSQL)) {
+ partSql = "LIMIT "+ String.valueOf(startRow)+" , "+ String.valueOf(getPageSize());
+ } else if(getDBType().equals(AppConstants.ORACLE)) {
+ reportSQL = reportSQL.replace(" AS ", " ");
+ partSql = "where rownum >= "+ String.valueOf(startRow)+" and rownum <= "+(Integer.parseInt(String.valueOf(startRow)) + Integer.parseInt(String.valueOf(getPageSize())));
+ } else if(getDBType().equals(AppConstants.POSTGRESQL)) {
+ partSql = "LIMIT "+ String.valueOf(getPageSize())+" , "+ String.valueOf(startRow);//limit [pageSize] offset [startRow]
+ }
+
+ // Limit only to MYSQL or MariaDB
+ //if (reportSQL.toUpperCase().indexOf("ORDER BY ") < 0)
+ //partSql += " ORDER BY 1";
+ //else {
+
+
+
+ /*if(!Globals.isMySQL())
+ parta = parta.replace("[endRow]", String.valueOf(endRow));
+ else
+ parta = parta.replace("[startRow]", String.valueOf(startRow));
+
+ //String partb = Globals.getReportSqlOnlySecondPartB();
+ if(!Globals.isMySQL())
+ partb = partb.replace("[startRow]", String.valueOf(startRow));
+ else
+ partb = partb.replace("[pageSize]", String.valueOf(getPageSize()));
+
+ if( endRow != -1)
+ reportSQL += parta;*/
+ reportSQL += partSql;
+
+ return reportSQL;
+
+ } // generateSubsetSQL
+
+ public String generateChartSQL(ReportParamValues paramValues, String userId, HttpServletRequest request ) throws RaptorException {
+ List reportCols = getAllColumns();
+ List chartValueCols = getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, null); // parameter is 0 has this requires all columns.
+ String reportSQL = generateSQL(userId, request);
+ //if(nvl(reportSQL).length()>0) reportSQL = generatedChartSQL;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL " + reportSQL));
+ String legendCol = "1 a";
+ // String valueCol = "1";
+ StringBuffer groupCol = new StringBuffer();
+ StringBuffer seriesCol = new StringBuffer();
+ StringBuffer valueCols = new StringBuffer();
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ if (nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ legendCol = getSelectExpr(dc, colName)+" " + dc.getColId();
+ // if(dc.getChartSeq()>0)
+ // valueCol = "NVL("+colName+", 0) "+dc.getColId();
+ if ((!nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ && (dc.getChartSeq()==null || dc.getChartSeq() <= 0) && dc.isGroupBreak()) {
+ groupCol.append(", ");
+ groupCol.append(colName + " " + dc.getColId());
+ }
+ } // for
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(dc.isChartSeries()!=null && dc.isChartSeries().booleanValue()) {
+ //System.out.println("*****************, "+ " " +getColumnSelectStr(dc, paramValues)+ " "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues)));
+ seriesCol.append(", "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues))+ " " + dc.getColId());
+ }
+ }
+
+ /*for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(!dc.isChartSeries() && !(nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ //System.out.println("*****************, "+ " " +getColumnSelectStr(dc, paramValues)+ " "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues)));
+ seriesCol.append(", "+ formatChartColumn(getSelectExpr(dc,getColumnSelectStr(dc, paramValues)))+ " " + dc.getColId());
+ }
+ }*/
+
+ for (Iterator iter = chartValueCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //valueCols.append(", NVL(" + formatChartColumn(colName) + ",0) " + dc.getColId());
+ seriesCol.append("," + formatChartColumn(colName) + " " + dc.getColId());
+ } // for
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ if(colName.equals(AppConstants.RI_CHART_TOTAL_COL))
+ seriesCol.append(", " + AppConstants.RI_CHART_TOTAL_COL + " " + AppConstants.RI_CHART_TOTAL_COL );
+ if (colName.equals(AppConstants.RI_CHART_COLOR))
+ seriesCol.append(", " + AppConstants.RI_CHART_COLOR + " " + AppConstants.RI_CHART_COLOR );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_START))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_START + " " + AppConstants.RI_CHART_MARKER_START );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_END))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_END + " " + AppConstants.RI_CHART_MARKER_END );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_TEXT_LEFT))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_TEXT_LEFT + " " + AppConstants.RI_CHART_MARKER_TEXT_LEFT );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_TEXT_RIGHT))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_TEXT_RIGHT + " " + AppConstants.RI_CHART_MARKER_TEXT_RIGHT );
+ if(colName.equals(AppConstants.RI_ANOMALY_TEXT))
+ seriesCol.append(", " + AppConstants.RI_ANOMALY_TEXT + " " + AppConstants.RI_ANOMALY_TEXT );
+ }
+
+ //debugLogger.debug("ReportSQL Chart " + reportSQL );
+ /*for (Iterator iter = chartValueCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //valueCols.append(", NVL(" + formatChartColumn(colName) + ",0) " + dc.getColId());
+ valueCols.append("," + formatChartColumn(colName) + " " + dc.getColId());
+ } // for
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //if(colName.equals(AppConstants.RI_CHART_TOTAL_COL) || colName.equals(AppConstants.RI_CHART_COLOR)) {
+ if(colName.equals(AppConstants.RI_CHART_TOTAL_COL))
+ valueCols.append(", " + AppConstants.RI_CHART_TOTAL_COL + " " + AppConstants.RI_CHART_TOTAL_COL );
+ if (colName.equals(AppConstants.RI_CHART_COLOR))
+ valueCols.append(", " + AppConstants.RI_CHART_COLOR + " " + AppConstants.RI_CHART_COLOR );
+ if (colName.equals(AppConstants.RI_CHART_INCLUDE))
+ valueCols.append(", " + AppConstants.RI_CHART_INCLUDE + " " + AppConstants.RI_CHART_INCLUDE );
+ //}
+ }*/
+ String final_sql = "";
+ reportSQL = Utils.replaceInString(reportSQL, " from ", " FROM ");
+ reportSQL = Utils.replaceInString(reportSQL, " select ", " SELECT ");
+ reportSQL = Utils.replaceInString(reportSQL, " union ", " UNION ");
+ //reportSQL = reportSQL.replaceAll("[\\s]*\\(", "(");
+// if(reportSQL.indexOf("UNION") != -1) {
+// if(reportSQL.indexOf("FROM(")!=-1)
+// final_sql += " "+reportSQL.substring(reportSQL.indexOf("FROM(") );
+// else if (reportSQL.indexOf("FROM (")!=-1)
+// final_sql += " "+reportSQL.substring(reportSQL.indexOf("FROM (") );
+// //TODO ELSE THROW ERROR
+// }
+// else {
+// final_sql += " "+reportSQL.substring(reportSQL.toUpperCase().indexOf(" FROM "));
+// }
+ int pos = 0;
+ int pos_first_select = 0;
+ int pos_dup_select = 0;
+ int pos_prev_select = 0;
+ int pos_last_select = 0;
+ if (reportSQL.indexOf("FROM", pos)!=-1) {
+ pos = reportSQL.indexOf("FROM", pos);
+ pos_dup_select = reportSQL.lastIndexOf("SELECT",pos);
+ pos_first_select = reportSQL.indexOf("SELECT");//,pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_select " + pos_first_select + " " + pos_dup_select));
+ if(pos_dup_select > pos_first_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********pos_dup_select ********" + pos_dup_select));
+ //pos_dup_select1 = pos_dup_select;
+ pos_prev_select = pos_first_select;
+ pos_last_select = pos_dup_select;
+ while (pos_last_select > pos_prev_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_last , pos_prev " + pos_last_select + " " + pos_prev_select));
+ pos = reportSQL.indexOf("FROM", pos+2);
+ pos_prev_select = pos_last_select;
+ pos_last_select = reportSQL.lastIndexOf("SELECT",pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("in WHILE LOOP LAST " + pos_last_select));
+ }
+ }
+
+ }
+ final_sql += " "+reportSQL.substring(pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Final SQL " + final_sql));
+ String sql = "SELECT " + legendCol + ", " + legendCol+"_1" + seriesCol.toString()+ nvl(valueCols.toString(), ", 1")
+ + groupCol.toString()
+ + final_sql;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Final sql in generateChartSQL " +sql));
+
+ return sql;
+ } // generateChartSQL
+
+ private String formatChartColumn(String colName) {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Format Chart Column Input colName" + colName));
+ colName = colName.trim();
+ colName = Utils.replaceInString(colName, "TO_CHAR", "to_char");
+ colName = Utils.replaceInString(colName, "to_number", "TO_NUMBER");
+ //reportSQL = reportSQL.replaceAll("[\\s]*\\(", "(");
+ colName = colName.replaceAll(",[\\s]*\\(", ",(");
+ StringBuffer colNameBuf = new StringBuffer(colName);
+ int pos = 0, posFormatStart = 0, posFormatEnd = 0;
+ String format = "";
+ if(colNameBuf.indexOf("999")==-1 && colNameBuf.indexOf("990")==-1) {
+ logger.debug(EELFLoggerDelegate.debugLogger, (" return colName " + colNameBuf.toString()));
+ return colNameBuf.toString();
+ }
+ while (colNameBuf.indexOf("to_char")!=-1) {
+ if(colNameBuf.indexOf("999")!=-1 || colNameBuf.indexOf("990")!=-1) {
+ pos = colNameBuf.indexOf("to_char");
+ colNameBuf.insert(pos, " TO_NUMBER ( CR_RAPTOR.SAFE_TO_NUMBER (");
+ pos = colNameBuf.indexOf("to_char");
+ colNameBuf.replace(pos, pos+7, "TO_CHAR");
+ //colName = Utils.replaceInString(colNameBuf.toString(), "to_char", " TO_NUMBER ( CR_RAPTOR.SAFE_TO_NUMBER ( TO_CHAR ");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("After adding to_number " + colNameBuf.toString()));
+ //posFormatStart = colNameBuf.lastIndexOf(",'")+1;
+ posFormatStart = colNameBuf.indexOf(",'", pos)+1;
+ posFormatEnd = colNameBuf.indexOf(")",posFormatStart);
+ logger.debug(EELFLoggerDelegate.debugLogger, (posFormatStart + " " + posFormatEnd + " "+ pos));
+ format = colNameBuf.substring(posFormatStart, posFormatEnd);
+ //posFormatEnd = colNameBuf.indexOf(")",posFormatEnd);
+ colNameBuf.insert(posFormatEnd+1, " ," + format + ") , "+ format + ")");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("colNameBuf " + colNameBuf.toString()));
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, (" return colName " + colNameBuf.toString()));
+ return colNameBuf.toString();
+ }
+ public String generateTotalSQLLinear(ReportParamValues paramValues, String userId, HttpServletRequest request) throws RaptorException {
+ List reportCols = getAllColumns();
+ String reportSQL = generateSQL(userId,request);
+ //debugLogger.debug("After GenerateSQL " + reportSQL);
+
+ StringBuffer sbSelect = new StringBuffer();
+ StringBuffer sbTotal = new StringBuffer();
+ StringBuffer colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ //if (!dct.isVisible())
+ // continue;
+
+ String colName = getColumnSelectStr(dct, paramValues);
+
+ sbSelect.append((sbSelect.length() == 0) ? "SELECT " : ", ");
+
+ sbSelect.append(colName);
+ sbSelect.append(" ");
+ sbSelect.append(dct.getColId());
+
+
+ sbTotal.append((sbTotal.length() == 0) ? "SELECT " : ", ");
+ if (nvl(dct.getDisplayTotal()).length() > 0) {
+ // sbTotal.append(getSelectExpr(dct,
+ // dct.getDisplayTotal()+dct.getColId()+")"));
+ String displayTotal = dct.getDisplayTotal();
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < displayTotal.length(); i++) {
+ char ch = displayTotal.charAt(i);
+ if (ch == '+' || ch == '-')
+ sb.append(dct.getColId() + ")");
+ sb.append(ch);
+ } // for
+ sb.append(dct.getColId() + ")");
+
+ //debugLogger.debug("SB " + sb.toString() + "\n " + getSelectExpr(dct, sb.toString()));
+ sbTotal.append(getSelectExpr(dct, sb.toString()));
+ //debugLogger.debug("SBTOTAL " + sbTotal.toString());
+ } else
+ sbTotal.append("NULL");
+ sbTotal.append(" total_");
+ sbTotal.append(dct.getColId());
+ } // for
+
+ //debugLogger.debug(" ****** " + sbTotal.toString());
+ logger.debug(EELFLoggerDelegate.debugLogger, ("REPORTWRAPPER " + reportSQL));
+ int pos = 0;
+ int pos_first_select = 0;
+ int pos_dup_select = 0;
+ int pos_prev_select = 0;
+ int pos_last_select = 0;
+
+ //reportSQL = Utils.replaceInString(reportSQL, " from ", " FROM ");
+ //reportSQL = Utils.replaceInString(reportSQL, "select ", "SELECT ");
+ reportSQL = replaceNewLine(reportSQL, " from ", " FROM ");
+ reportSQL = replaceNewLine(reportSQL, "from ", " FROM ");
+ reportSQL = replaceNewLine(reportSQL, "FROM ", " FROM ");
+
+ reportSQL = " "+reportSQL;
+ reportSQL = replaceNewLine(reportSQL, "select ", " SELECT ");
+ reportSQL = replaceNewLine(reportSQL, "SELECT ", " SELECT ");
+ if (reportSQL.indexOf("FROM", pos)!=-1) {
+ pos = reportSQL.indexOf("FROM", pos);
+ pos_dup_select = reportSQL.lastIndexOf("SELECT",pos);
+ pos_first_select = reportSQL.indexOf("SELECT");//,pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_select " + pos_first_select + " " + pos_dup_select));
+ if(pos_dup_select > pos_first_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********pos_dup_select ********" + pos_dup_select));
+ //pos_dup_select1 = pos_dup_select;
+ pos_prev_select = pos_first_select;
+ pos_last_select = pos_dup_select;
+ while (pos_last_select > pos_prev_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_last , pos_prev " + pos_last_select + " " + pos_prev_select));
+ pos = reportSQL.indexOf("FROM", pos+2);
+ pos_prev_select = pos_last_select;
+ pos_last_select = reportSQL.lastIndexOf("SELECT",pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("in WHILE LOOP LAST " + pos_last_select));
+ }
+ }
+
+ }
+
+
+ //sbSelect.append(reportSQL.substring(reportSQL.toUpperCase().indexOf(" FROM ")));
+
+ logger.debug(EELFLoggerDelegate.debugLogger, (" *************** " + pos + " " + reportSQL));
+ //sbSelect.append(" "+ reportSQL.substring(pos));
+ sbSelect.append(" "+reportSQL.substring(pos));
+ logger.debug(EELFLoggerDelegate.debugLogger, (" **************** " + sbSelect.toString()));
+ sbTotal.append(" FROM (");
+ sbTotal.append(sbSelect.toString());
+ sbTotal.append(") totalSQL");
+
+ String dbType = "";
+ String dbInfo = getDBInfo();
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if (dbType.equals("DAYTONA")) {
+ sbTotal.append("("+ colNames+ ")");
+ }
+ String sql = sbTotal.toString();
+ sql = Utils.replaceInString(sql, " from ", " FROM ");
+ sql = Utils.replaceInString(sql, "select ", "SELECT ");
+ //sql = Utils.replaceInString(sql, " select ", " SELECT ");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Before SQL Corrector " + sql));
+ String corrected_SQL = new SQLCorrector().fixSQL(new StringBuffer(sql));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Corrected SQL " + corrected_SQL));
+ return corrected_SQL;
+ //return sbTotal.toString();
+ } // generateTotalSQLLinear
+
+ public String generateTotalSQLCrossTab(String sql, String rowColPos,
+ String userId, HttpServletRequest request, ReportParamValues paramValues) throws RaptorException {
+ List reportCols = getAllColumns();
+ String reportSQL = sql;
+
+ StringBuffer sbSelect = new StringBuffer();
+ StringBuffer sbGroup = new StringBuffer();
+ // StringBuffer sbOrder = new StringBuffer();
+ StringBuffer sbTotal = new StringBuffer();
+ StringBuffer colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (!dct.isVisible())
+ continue;
+
+
+ String colName = getColumnSelectStr(dct, paramValues);
+ String colExpr = getSelectExpr(dct, colName);
+
+ sbSelect.append((sbSelect.length() == 0) ? "SELECT " : ", ");
+
+ if (nvl(dct.getCrossTabValue()).equals(rowColPos)) {
+ //sbSelect.append(colExpr);
+ sbSelect.append(dct.getColId());
+ sbGroup.append((sbGroup.length() == 0) ? " GROUP BY " : ", ");
+ sbGroup.append(dct.getColId());
+
+ /*
+ * sbOrder.append((sbOrder.length()==0)?" ORDER BY ":", ");
+ * sbOrder.append(dct.getColId());
+ * if(dct.getColType().equals(AppConstants.CT_DATE))
+ * sbOrder.append(" DESC");
+ */
+
+ sbTotal.append((sbTotal.length() == 0) ? "SELECT " : ", ");
+ sbTotal.append(dct.getColId());
+ } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE)) {
+ //sbSelect.append(colName);
+ sbSelect.append(dct.getColId());
+
+ String displayTotal = getCrossTabDisplayTotal(rowColPos);
+ if (displayTotal.length() > 0) {
+ // displayTotal += dct.getColId()+")";
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < displayTotal.length(); i++) {
+ char ch = displayTotal.charAt(i);
+ if (ch == '+' || ch == '-')
+ sb.append(dct.getColId() + ")");
+ sb.append(ch);
+ } // for
+ sb.append(dct.getColId() + ")");
+
+ displayTotal = sb.toString();
+ } else
+ displayTotal = "COUNT(*)";
+
+ sbTotal.append((sbTotal.length() == 0) ? "SELECT " : ", ");
+ sbTotal.append(getSelectExpr(dct, displayTotal));
+ sbTotal.append(" total_");
+ sbTotal.append(dct.getColId());
+ } else {
+ //sbSelect.append(colExpr);
+ sbSelect.append(dct.getColId());
+ } // if
+
+ sbSelect.append(" ");
+ sbSelect.append(dct.getColId());
+ } // for
+
+ sbSelect.append(reportSQL.substring(reportSQL.toUpperCase().indexOf(" FROM ")));
+
+ sbTotal.append(" FROM (");
+ sbTotal.append(sbSelect.toString());
+ sbTotal.append(") totalSQL");
+ sbTotal.append(sbGroup.toString());
+ String dbType = "";
+ String dbInfo = getDBInfo();
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if (dbType.equals("DAYTONA")) {
+ sbTotal.append("("+ colNames+ ")");
+ }
+
+ // sbTotal.append(sbOrder.toString());
+
+ //debugLogger.debug(getReportDefType() + " " + AppConstants.RD_SQL_BASED);
+ //debugLogger.debug("SQL To Delete " + sbTotal.toString());
+ sql = "";
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ sql = Utils.replaceInString(sbTotal.toString(), " from ", " FROM ");
+ sql = Utils.replaceInString(sql, "select ", "SELECT ");
+ return new SQLCorrector().fixSQL(new StringBuffer(sql));
+ }
+
+ return sbTotal.toString();
+
+ } // generateTotalSQLCrossTab
+
+
+ public String generateTotalSQLCrossTab(ReportParamValues paramValues, String rowColPos,
+ String userId, HttpServletRequest request) throws RaptorException {
+ List reportCols = getAllColumns();
+ String reportSQL = generateSQL(userId, request);
+
+ StringBuffer sbSelect = new StringBuffer();
+ StringBuffer sbGroup = new StringBuffer();
+ // StringBuffer sbOrder = new StringBuffer();
+ StringBuffer sbTotal = new StringBuffer();
+ StringBuffer colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (!dct.isVisible())
+ continue;
+
+ String colName = getColumnSelectStr(dct, paramValues);
+ String colExpr = getSelectExpr(dct, colName);
+
+ sbSelect.append((sbSelect.length() == 0) ? "SELECT " : ", ");
+
+ if (nvl(dct.getCrossTabValue()).equals(rowColPos)) {
+ sbSelect.append(colExpr);
+
+ sbGroup.append((sbGroup.length() == 0) ? " GROUP BY " : ", ");
+ sbGroup.append(dct.getColId());
+
+ /*
+ * sbOrder.append((sbOrder.length()==0)?" ORDER BY ":", ");
+ * sbOrder.append(dct.getColId());
+ * if(dct.getColType().equals(AppConstants.CT_DATE))
+ * sbOrder.append(" DESC");
+ */
+
+ sbTotal.append((sbTotal.length() == 0) ? "SELECT " : ", ");
+ sbTotal.append(dct.getColId());
+ } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE)) {
+ sbSelect.append(colName);
+
+ String displayTotal = getCrossTabDisplayTotal(rowColPos);
+ if (displayTotal.length() > 0) {
+ // displayTotal += dct.getColId()+")";
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < displayTotal.length(); i++) {
+ char ch = displayTotal.charAt(i);
+ if (ch == '+' || ch == '-')
+ sb.append(dct.getColId() + ")");
+ sb.append(ch);
+ } // for
+ sb.append(dct.getColId() + ")");
+
+ displayTotal = sb.toString();
+ } else
+ displayTotal = "COUNT(*)";
+
+ sbTotal.append((sbTotal.length() == 0) ? "SELECT " : ", ");
+ sbTotal.append(getSelectExpr(dct, displayTotal));
+ sbTotal.append(" total_");
+ sbTotal.append(dct.getColId());
+ } else {
+ sbSelect.append(colExpr);
+ } // if
+
+ sbSelect.append(" ");
+ sbSelect.append(dct.getColId());
+ } // for
+
+ sbSelect.append(reportSQL.substring(reportSQL.toUpperCase().indexOf(" FROM ")));
+
+ sbTotal.append(" FROM (");
+ sbTotal.append(sbSelect.toString());
+ sbTotal.append(") totalSQL");
+ sbTotal.append(sbGroup.toString());
+ String dbType = "";
+ String dbInfo = getDBInfo();
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if (dbType.equals("DAYTONA")) {
+ sbTotal.append("("+ colNames+ ")");
+ }
+
+ // sbTotal.append(sbOrder.toString());
+
+ //debugLogger.debug(getReportDefType() + " " + AppConstants.RD_SQL_BASED);
+ //debugLogger.debug("SQL To Delete " + sbTotal.toString());
+ String sql = "";
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ sql = Utils.replaceInString(sbTotal.toString(), " from ", " FROM ");
+ sql = Utils.replaceInString(sql, "select ", "SELECT ");
+ return new SQLCorrector().fixSQL(new StringBuffer(sql));
+ }
+
+ return sbTotal.toString();
+
+ } // generateTotalSQLCrossTab
+
+ public String generateDistinctValuesSQL(ReportParamValues paramValues, DataColumnType dct,
+ String userId, HttpServletRequest request) throws RaptorException {
+ DataSourceType dst = getColumnTableById(dct.getColId());
+ String colName = getColumnSelectStr(dct, paramValues);
+ String colExpr = getSelectExpr(dct, colName);
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ StringBuffer sb = new StringBuffer();
+ sb.append("SELECT DISTINCT ");
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ sb.append(dct.getColId());
+ sb.append(" FROM (");
+ //paramvalues added below to filter distinct values based on formfields.
+ //sb.append(generateSQL(paramValues, userId, request));
+ sb.append(rr.getWholeSQL());
+ sb.append(") " + (Globals.isPostgreSQL() || Globals.isMySQL() ?" AS ":"") + " report_sql ORDER BY 1");
+ } else {
+ sb.append(colExpr);
+ sb.append(" ");
+ sb.append(dct.getColId());
+ if (!colExpr.equals(colName)) {
+ sb.append(", ");
+ sb.append(colName);
+ } // if
+ sb.append(" FROM ");
+ sb.append(dst.getTableName());
+ sb.append(" ");
+ sb.append(dst.getTableId());
+ sb.append(" ORDER BY ");
+ sb.append(colName);
+ if (dct.getColType().equals(AppConstants.CT_DATE))
+ sb.append(" DESC");
+ } // else
+
+ return sb.toString();
+ } // generateDistinctValuesSQL
+
+ /** ************************************************************************************************* */
+
+ public DataSourceType getTableWithoutColumns() {
+ List dsList = getDataSourceList().getDataSource();
+ for (Iterator iter = dsList.iterator(); iter.hasNext();) {
+ DataSourceType ds = (DataSourceType) iter.next();
+
+ if (ds.getDataColumnList().getDataColumn().size() == 0)
+ return ds;
+ } // for
+
+ return null;
+ } // getTableWithoutColumns
+
+ public CustomReportType cloneCustomReportClearTables() throws RaptorException {
+ ReportWrapper nrw = new ReportWrapper(cloneCustomReport(), reportID, getOwnerID(),
+ getCreateID(), getCreateDate(), getUpdateID(), getUpdateDate(), getMenuID(),
+ isMenuApproved());
+
+ DataSourceType ndst = null;
+ while ((ndst = nrw.getTableWithoutColumns()) != null)
+ nrw.deleteDataSourceType(ndst.getTableId());
+
+ return nrw.getCustomReport();
+ } // cloneCustomReportClearTables
+
+ public String marshal() throws RaptorException {
+ StringWriter sw = new StringWriter();
+ ObjectFactory objFactory = new ObjectFactory();
+
+ try {
+ JAXBContext jc = JAXBContext.newInstance("org.openecomp.portalsdk.analytics.xmlobj");
+ Marshaller m = jc.createMarshaller();
+ m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
+ //JAXBElement jaxbElement = new JAXBElement(new QName("customReport"), Object.class, "");
+ //m.marshal( System.out );
+ //m.marshal(jaxbElement, new StreamResult(sw));
+ m.marshal((getTableWithoutColumns() == null) ? objFactory.createCustomReport(cr) : objFactory.createCustomReport(cloneCustomReportClearTables()),
+ new StreamResult(sw));
+ } catch (JAXBException ex) {
+ throw new RaptorException (ex.getMessage(), ex.getCause());
+ }
+ return sw.toString();
+ } // marshal
+
+ public static CustomReportType unmarshalCR(String reportXML) throws RaptorException {
+ //CustomReport cr = null;
+ try {
+ JAXBContext jc = JAXBContext.newInstance("org.openecomp.portalsdk.analytics.xmlobj");
+ Unmarshaller u = jc.createUnmarshaller();
+ javax.xml.bind.JAXBElement<CustomReportType> doc = (javax.xml.bind.JAXBElement<CustomReportType>) u.unmarshal(new java.io.StringReader(
+ reportXML));
+ return doc.getValue();
+ } catch (JAXBException ex) {
+ ex.printStackTrace();
+ throw new RaptorException (ex.getMessage(), ex.getCause());
+ }
+
+
+ } // unmarshal
+
+ protected static CustomReportType createBlankCR() throws RaptorException {
+ return createBlankCR("N/A");
+ } // createBlank
+
+ protected static CustomReportType createBlankCR(String createID) throws RaptorException {
+ ObjectFactory objFactory = new ObjectFactory();
+ CustomReportType cr = objFactory.createCustomReportType();
+ //CustomReport cr = null;
+ try {
+ //cr = (CustomReport) objFactory.createCustomReport(customReportType);
+
+ cr.setReportName("");
+ cr.setReportDescr("");
+ cr.setChartType("");
+ cr.setPublic(false);
+ cr.setCreateId(createID);
+ cr.setCreateDate(DatatypeFactory.newInstance().newXMLGregorianCalendar(new GregorianCalendar()));
+ // cr.setReportSQL("");
+ cr.setReportType("");
+ cr.setPageSize(50);
+
+ DataSourceList dataSourceList = objFactory.createDataSourceList();
+ cr.setDataSourceList(dataSourceList);
+ } catch (DatatypeConfigurationException ex) {
+ throw new RaptorException (ex.getMessage(), ex.getCause());
+ }
+ return cr;
+ } // createBlank
+
+ protected void replaceCustomReportWithClone() throws RaptorException {
+ try {
+ CustomReportType clone = cloneCustomReport();
+ this.cr = clone;
+ } catch (Exception e) {
+ e.printStackTrace();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[SYSTEM ERROR] ReportWrapper.replaceCustomReportWithClone generated exception for report ["
+ + reportID + "]. Exception: " + e.getMessage()));
+ throw new RaptorException("[SYSTEM ERROR] ReportWrapper.replaceCustomReportWithClone generated exception for report ["
+ + reportID + "]. Exception: " + e.getMessage(), e.getCause());
+ }
+ } // replaceCustomReportWithClone
+
+ /** ************************************************************************************************* */
+
+ public FormatType cloneFormatType(ObjectFactory objFactory, FormatType ft)
+ throws JAXBException {
+ FormatType nft = objFactory.createFormatType();
+
+ nft.setLessThanValue(ft.getLessThanValue());
+ nft.setExpression(ft.getExpression());
+ nft.setBold(ft.isBold());
+ nft.setItalic(ft.isItalic());
+ nft.setUnderline(ft.isUnderline());
+ if (nvl(ft.getBgColor()).length() > 0)
+ nft.setBgColor(ft.getBgColor());
+ if (nvl(ft.getFontColor()).length() > 0)
+ nft.setFontColor(ft.getFontColor());
+ if (nvl(ft.getFontFace()).length() > 0)
+ nft.setFontFace(ft.getFontFace());
+ if (nvl(ft.getFontSize()).length() > 0)
+ nft.setFontSize(ft.getFontSize());
+ if (nvl(ft.getAlignment()).length() > 0)
+ nft.setAlignment(ft.getAlignment());
+ if (nvl(ft.getComment()).length() > 0)
+ nft.setComment(ft.getComment());
+
+ nft.setFormatId(ft.getFormatId());
+
+ return nft;
+ } // cloneFormatType
+
+ public SemaphoreType cloneSemaphoreType(ObjectFactory objFactory, SemaphoreType st)
+ throws JAXBException {
+ SemaphoreType nst = objFactory.createSemaphoreType();
+
+ nst.setSemaphoreName(st.getSemaphoreName());
+ nst.setSemaphoreType(st.getSemaphoreType());
+ nst.setSemaphoreId(st.getSemaphoreId());
+ if (nvl(st.getComment()).length() > 0)
+ nst.setComment(st.getComment());
+
+ if (st.getFormatList() != null) {
+ FormatList formatList = objFactory.createFormatList();
+ nst.setFormatList(formatList);
+
+ for (Iterator iter = st.getFormatList().getFormat().iterator(); iter.hasNext();)
+ formatList.getFormat().add(
+ cloneFormatType(objFactory, (FormatType) iter.next()));
+ } // if
+
+ return nst;
+ } // cloneSemaphoreType
+
+ public Reports cloneDashboardType(ObjectFactory objFactory, Reports rpt)
+ throws JAXBException {
+ Reports nrpt = objFactory.createReports();
+
+ nrpt.setReportId(rpt.getReportId());
+ nrpt.setBgcolor(rpt.getBgcolor());
+ return nrpt;
+ } // cloneDashboardType
+
+ public Marker cloneMarkerType(ObjectFactory objFactory, Marker marker)
+ throws JAXBException {
+ Marker nMarker = objFactory.createMarker();
+ nMarker.setAddressColumn(marker.getAddressColumn());
+ nMarker.setDataColumn(marker.getDataColumn());
+ nMarker.setDataHeader(marker.getDataHeader());
+ nMarker.setMarkerColor(marker.getMarkerColor());
+ return nMarker;
+ } // cloneDashboardType
+
+ public ChartDrillFormfield cloneChartDrillFormfield(ObjectFactory objFactory, ChartDrillFormfield chartDrillFormfield)
+ throws JAXBException {
+ ChartDrillFormfield nChartDrillFormfield = objFactory.createChartDrillFormfield();
+ nChartDrillFormfield.setFormfield(chartDrillFormfield.getFormfield());
+ return nChartDrillFormfield;
+ } // cloneDashboardType
+
+ public boolean isChartDrillDownContainsName(String name) {
+ for (Iterator iter = getChartDrillOptions().getTargetFormfield().iterator(); iter
+ .hasNext();) {
+ org.openecomp.portalsdk.analytics.xmlobj.ChartDrillFormfield cdf = (org.openecomp.portalsdk.analytics.xmlobj.ChartDrillFormfield) iter.next();
+ if(cdf.getFormfield().equals(name)) {
+ return true;
+ }
+ }
+ return false;
+ }
+ public FormFieldType cloneFormFieldType(ObjectFactory objFactory, FormFieldType fft)
+ throws JAXBException {
+ FormFieldType nfft = objFactory.createFormFieldType();
+
+ nfft.setColId(fft.getColId());
+ nfft.setFieldName(fft.getFieldName());
+ nfft.setFieldType(fft.getFieldType());
+ if (nvl(fft.getVisible()).length() > 0)
+ nfft.setVisible(fft.getVisible());
+ if (nvl(fft.getValidationType()).length() > 0)
+ nfft.setValidationType(fft.getValidationType());
+ if (nvl(fft.getMandatory()).length() > 0)
+ nfft.setMandatory(fft.getMandatory());
+ if (nvl(fft.getDefaultValue()).length() > 0)
+ nfft.setDefaultValue(fft.getDefaultValue());
+ nfft.setOrderBySeq(fft.getOrderBySeq());
+ if (nvl(fft.getFieldSQL()).length() > 0)
+ nfft.setFieldSQL(fft.getFieldSQL());
+ if (nvl(fft.getFieldDefaultSQL()).length() > 0)
+ nfft.setFieldDefaultSQL(fft.getFieldDefaultSQL());
+ if(fft.getRangeStartDate()!=null)
+ nfft.setRangeStartDate(fft.getRangeStartDate());
+ if(fft.getRangeEndDate()!=null)
+ nfft.setRangeEndDate(fft.getRangeEndDate());
+ if(fft.getRangeStartDateSQL()!=null)
+ nfft.setRangeStartDateSQL(fft.getRangeStartDateSQL());
+ if(fft.getRangeEndDateSQL()!=null)
+ nfft.setRangeEndDateSQL(fft.getRangeEndDateSQL());
+
+ if (nvl(fft.getComment()).length() > 0)
+ nfft.setComment(fft.getComment());
+
+ if (fft.getPredefinedValueList() != null) {
+ PredefinedValueList predefinedValueList = objFactory.createPredefinedValueList();
+ nfft.setPredefinedValueList(predefinedValueList);
+
+ for (Iterator iter = fft.getPredefinedValueList().getPredefinedValue().iterator(); iter
+ .hasNext();)
+ predefinedValueList.getPredefinedValue().add(new String((String) iter.next()));
+ } // if
+ if (nvl(fft.getDependsOn()).length() > 0)
+ nfft.setDependsOn(fft.getDependsOn());
+
+ nfft.setGroupFormField((fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue())?true:false);
+ if (nvl(fft.getMultiSelectListSize()).length() > 0)
+ nfft.setMultiSelectListSize(fft.getMultiSelectListSize());
+
+ nfft.setFieldId(fft.getFieldId());
+ return nfft;
+ } // cloneFormFieldType
+
+ public JavascriptItemType cloneJavascriptType(ObjectFactory objFactory, JavascriptItemType jit)
+ throws JAXBException {
+ JavascriptItemType njit = objFactory.createJavascriptItemType();
+
+ njit.setId(jit.getId());
+ njit.setFieldId(jit.getFieldId());
+ njit.setCallText(jit.getCallText());
+ return njit;
+ } // cloneJavascriptType
+
+ public ColFilterType cloneColFilterType(ObjectFactory objFactory, ColFilterType cft)
+ throws JAXBException {
+ ColFilterType ncft = objFactory.createColFilterType();
+
+ ncft.setColId(cft.getColId());
+ ncft.setFilterSeq(cft.getFilterSeq());
+ ncft.setJoinCondition(cft.getJoinCondition());
+ if (nvl(cft.getOpenBrackets()).length() > 0)
+ ncft.setOpenBrackets(cft.getOpenBrackets());
+ ncft.setExpression(cft.getExpression());
+ if (nvl(cft.getArgType()).length() > 0)
+ ncft.setArgType(cft.getArgType());
+ if (nvl(cft.getArgValue()).length() > 0)
+ ncft.setArgValue(cft.getArgValue());
+ if (nvl(cft.getCloseBrackets()).length() > 0)
+ ncft.setCloseBrackets(cft.getCloseBrackets());
+ if (nvl(cft.getComment()).length() > 0)
+ ncft.setComment(cft.getComment());
+
+ return ncft;
+ } // cloneColFilterType
+
+ public DataColumnType cloneDataColumnType(ObjectFactory objFactory, DataColumnType dct)
+ throws JAXBException {
+ DataColumnType ndct = objFactory.createDataColumnType();
+
+ ndct.setTableId(dct.getTableId());
+ ndct.setDbColName(dct.getDbColName());
+ if (nvl(dct.getCrossTabValue()).length() > 0)
+ ndct.setCrossTabValue(dct.getCrossTabValue());
+ ndct.setColName(dct.getColName());
+ ndct.setDisplayName(dct.getDisplayName());
+ if (dct.getDisplayWidth() > 0)
+ ndct.setDisplayWidth(dct.getDisplayWidth());
+ if (nvl(dct.getDisplayWidthInPxls()).length()>0)
+ ndct.setDisplayWidthInPxls(dct.getDisplayWidthInPxls());
+ if (nvl(dct.getDisplayAlignment()).length() > 0)
+ ndct.setDisplayAlignment(dct.getDisplayAlignment());
+ if (nvl(dct.getDisplayHeaderAlignment()).length() > 0)
+ ndct.setDisplayHeaderAlignment(dct.getDisplayHeaderAlignment());
+ ndct.setOrderSeq(dct.getOrderSeq());
+ ndct.setVisible(dct.isVisible());
+ ndct.setCalculated(dct.isCalculated());
+ ndct.setColType(dct.getColType());
+ if(dct.getColType().equals(AppConstants.CT_HYPERLINK)) {
+ ndct.setHyperlinkURL(dct.getHyperlinkURL());
+ ndct.setHyperlinkType(dct.getHyperlinkType());
+ if(dct.getHyperlinkType().equals("IMAGE")) {
+ ndct.setActionImg(dct.getActionImg());
+ }
+ }
+
+ if(dct.getIndentation()!=null) {
+ ndct.setIndentation(dct.getIndentation());
+ }
+
+ if (nvl(dct.getColFormat()).length() > 0)
+ ndct.setColFormat(dct.getColFormat());
+ ndct.setGroupBreak(dct.isGroupBreak());
+ ndct.setNowrap(dct.getNowrap());
+ if (nvl(dct.getYAxis()).length() > 0)
+ ndct.setYAxis(dct.getYAxis());
+ if (dct.getOrderBySeq()!=null && dct.getOrderBySeq() > 0)
+ ndct.setOrderBySeq(dct.getOrderBySeq());
+ if (nvl(dct.getOrderByAscDesc()).length() > 0)
+ ndct.setOrderByAscDesc(dct.getOrderByAscDesc());
+ if (nvl(dct.getDisplayTotal()).length() > 0)
+ ndct.setDisplayTotal(dct.getDisplayTotal());
+ if (nvl(dct.getColOnChart()).length() > 0)
+ ndct.setColOnChart(dct.getColOnChart());
+ if (dct.getChartSeq() !=null)
+ ndct.setChartSeq(dct.getChartSeq());
+ if (nvl(dct.getChartColor()).length() > 0)
+ ndct.setChartColor(dct.getChartColor());
+ if (nvl(dct.getChartLineType()).length() > 0)
+ ndct.setChartLineType(dct.getChartLineType());
+ ndct.setChartSeries((dct.isChartSeries()!=null && dct.isChartSeries().booleanValue())?true:false);
+ ndct.setIsRangeAxisFilled((dct.isIsRangeAxisFilled()!=null && dct.isIsRangeAxisFilled().booleanValue())?true:false);
+
+ if (dct.isCreateInNewChart()!=null)
+ ndct.setCreateInNewChart(dct.isCreateInNewChart());
+ if (nvl(dct.getDrillDownType()).length() > 0)
+ ndct.setDrillDownType(dct.getDrillDownType());
+ ndct.setDrillinPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
+ if (nvl(dct.getDrillDownURL()).length() > 0)
+ ndct.setDrillDownURL(dct.getDrillDownURL());
+ if (nvl(dct.getDrillDownParams()).length() > 0)
+ ndct.setDrillDownParams(dct.getDrillDownParams());
+ if (nvl(dct.getComment()).length() > 0)
+ ndct.setComment(dct.getComment());
+ if (nvl(dct.getDependsOnFormField()).length() > 0)
+ ndct.setDependsOnFormField(dct.getDependsOnFormField());
+ if (dct.getColFilterList() != null) {
+ ColFilterList colFilterList = objFactory.createColFilterList();
+ ndct.setColFilterList(colFilterList);
+
+ for (Iterator iter = dct.getColFilterList().getColFilter().iterator(); iter
+ .hasNext();)
+ colFilterList.getColFilter().add(
+ cloneColFilterType(objFactory, (ColFilterType) iter.next()));
+ } // if
+
+ if (nvl(dct.getSemaphoreId()).length() > 0)
+ ndct.setSemaphoreId(dct.getSemaphoreId());
+ if (nvl(dct.getDbColType()).length() > 0)
+ ndct.setDbColType(dct.getDbColType());
+ else {
+ ndct.setDbColType(dct.getColType());
+ adjustColumnType(ndct);
+ }
+ if (nvl(dct.getChartGroup()).length() > 0)
+ ndct.setChartGroup(dct.getChartGroup());
+
+ if (nvl(dct.getYAxis()).length() > 0)
+ ndct.setYAxis(dct.getYAxis());
+
+ if (nvl(dct.getDependsOnFormField()).length() > 0)
+ ndct.setDependsOnFormField(dct.getDependsOnFormField());
+
+
+
+ if(nvl(dct.getNowrap()).length() > 0)
+ ndct.setNowrap(dct.getNowrap());
+
+ if(dct.getIndentation()!=null) {
+ ndct.setIndentation(dct.getIndentation());
+ }
+
+ ndct.setEnhancedPagination((dct.isEnhancedPagination()!=null && dct.isEnhancedPagination().booleanValue())?true:false);
+ if(nvl(dct.getDataMiningCol()).length() > 0)
+ ndct.setDataMiningCol(dct.getDataMiningCol());
+
+ ndct.setColId(dct.getColId());
+
+ // ndct.setSemaphoreId(nvl(dct.getSemaphoreId()));
+ // if(nvl(dct.getDbColType()).length()>0)
+ // ndct.setDbColType(dct.getDbColType());
+ return ndct;
+ } // cloneDataColumnType
+
+ public DataSourceType cloneDataSourceType(ObjectFactory objFactory, DataSourceType dst)
+ throws JAXBException {
+ DataSourceType ndst = objFactory.createDataSourceType();
+
+ ndst.setTableName(dst.getTableName());
+ ndst.setTablePK(dst.getTablePK());
+ ndst.setDisplayName(dst.getDisplayName());
+ if (nvl(dst.getRefTableId()).length() > 0)
+ ndst.setRefTableId(dst.getRefTableId());
+ if (nvl(dst.getRefDefinition()).length() > 0)
+ ndst.setRefDefinition(dst.getRefDefinition());
+ if (nvl(dst.getComment()).length() > 0)
+ ndst.setComment(dst.getComment());
+ DataColumnList dataColumnList = objFactory.createDataColumnList();
+ ndst.setDataColumnList(dataColumnList);
+
+ for (Iterator iter = dst.getDataColumnList().getDataColumn().iterator(); iter
+ .hasNext();)
+ dataColumnList.getDataColumn().add(
+ cloneDataColumnType(objFactory, (DataColumnType) iter.next()));
+ ndst.setTableId(dst.getTableId());
+
+
+ return ndst;
+ } // cloneDataSourceType
+
+ public CustomReportType cloneCustomReport() throws RaptorException {
+ ObjectFactory objFactory = new ObjectFactory();
+ CustomReportType ncr = objFactory.createCustomReportType();
+
+ //CustomReport ncr = null;
+ try {
+ //ncr = (CustomReport) objFactory.createCustomReport(customReportType);
+ ncr.setReportName(cr.getReportName());
+ ncr.setReportDescr(cr.getReportDescr());
+ if (nvl(cr.getNumDashCols()).length() > 0)
+ ncr.setNumDashCols(cr.getNumDashCols());
+ if (nvl(cr.getDashboardLayoutHTML()).length() > 0)
+ ncr.setDashboardLayoutHTML(cr.getDashboardLayoutHTML());
+ if (nvl(cr.getDbInfo()).length() > 0)
+ ncr.setDbInfo(cr.getDbInfo());
+ ncr.setChartType(cr.getChartType());
+ if (nvl(cr.getChartTypeFixed()).length() > 0)
+ ncr.setChartTypeFixed(cr.getChartTypeFixed());
+ if (nvl(cr.getChartMultiSeries()).length() > 0)
+ ncr.setChartMultiSeries(cr.getChartMultiSeries());
+ if (nvl(cr.getChartLeftAxisLabel()).length() > 0)
+ ncr.setChartLeftAxisLabel(cr.getChartLeftAxisLabel());
+ if (nvl(cr.getChartRightAxisLabel()).length() > 0)
+ ncr.setChartRightAxisLabel(cr.getChartRightAxisLabel());
+ if (nvl(cr.getChartWidth()).length() > 0)
+ ncr.setChartWidth(cr.getChartWidth());
+ if (nvl(cr.getChartHeight()).length() > 0)
+ ncr.setChartHeight(cr.getChartHeight());
+ ncr.setShowChartTitle(cr.isShowChartTitle());
+ ncr.setPublic(cr.isPublic());
+ ncr.setHideFormFieldAfterRun(cr.isHideFormFieldAfterRun());
+ ncr.setCreateId(cr.getCreateId());
+ ncr.setCreateDate(cr.getCreateDate());
+ if (nvl(cr.getReportSQL()).length() > 0)
+ ncr.setReportSQL(cr.getReportSQL());
+ if (nvl(cr.getReportTitle()).length() > 0)
+ ncr.setReportTitle(cr.getReportTitle());
+ if (nvl(cr.getReportSubTitle()).length() > 0)
+ ncr.setReportSubTitle(cr.getReportSubTitle());
+ if (nvl(cr.getReportHeader()).length() > 0)
+ ncr.setReportHeader(cr.getReportHeader());
+ if (cr.getFrozenColumns()!=null)
+ ncr.setFrozenColumns(cr.getFrozenColumns());
+ if (nvl(cr.getPdfImgLogo()).length()>0)
+ ncr.setPdfImgLogo(cr.getPdfImgLogo());
+ if (nvl(cr.getEmptyMessage()).length()>0)
+ ncr.setEmptyMessage(cr.getEmptyMessage());
+ if (nvl(cr.getWidthNoColumn()).length()>0)
+ ncr.setWidthNoColumn(cr.getWidthNoColumn());
+ if (nvl(cr.getDataGridAlign()).length()>0)
+ ncr.setDataGridAlign(cr.getDataGridAlign());
+
+ if (nvl(cr.getReportFooter()).length() > 0)
+ ncr.setReportFooter(cr.getReportFooter());
+ if (nvl(cr.getNumFormCols()).length() > 0)
+ ncr.setNumFormCols(cr.getNumFormCols());
+ if (nvl(cr.getDisplayOptions()).length() > 0)
+ ncr.setDisplayOptions(cr.getDisplayOptions());
+ if (nvl(cr.getDataContainerHeight()).length() > 0)
+ ncr.setDataContainerHeight(cr.getDataContainerHeight());
+ if (nvl(cr.getDataContainerWidth()).length() > 0)
+ ncr.setDataContainerWidth(cr.getDataContainerWidth());
+ if (nvl(cr.getAllowSchedule()).length() > 0)
+ ncr.setAllowSchedule(cr.getAllowSchedule());
+ if (nvl(cr.getTopDown()).length() > 0)
+ ncr.setTopDown(cr.getTopDown());
+ if (nvl(cr.getSizedByContent()).length() > 0)
+ ncr.setSizedByContent(cr.getSizedByContent());
+ if (nvl(cr.getComment()).length() > 0)
+ ncr.setComment(cr.getComment());
+ if (nvl(cr.getDashboardOptions()).length()>0)
+ ncr.setDashboardOptions(cr.getDashboardOptions());
+
+ if(cr.isDashboardType()!=null)
+ ncr.setDashboardType(cr.isDashboardType());
+ if(cr.isReportInNewWindow()!=null)
+ ncr.setReportInNewWindow(cr.isReportInNewWindow());
+ ncr.setDisplayFolderTree(cr.isDisplayFolderTree());
+ if (cr.getDashBoardReports() == null) {
+ if (cr.getMaxRowsInExcelDownload()!=null && cr.getMaxRowsInExcelDownload()>0)
+ ncr.setMaxRowsInExcelDownload(cr.getMaxRowsInExcelDownload());
+ }
+
+ if (nvl(cr.getJavascriptElement()).length()>0)
+ ncr.setJavascriptElement(cr.getJavascriptElement());
+ if (nvl(cr.getFolderId()).length()>0)
+ ncr.setFolderId(cr.getFolderId());
+ ncr.setDrillURLInPoPUpPresent((cr.isDrillURLInPoPUpPresent()!=null && cr.isDrillURLInPoPUpPresent().booleanValue())?true:false);
+
+ if (nvl(cr.getIsOneTimeScheduleAllowed()).length()>0)
+ ncr.setIsOneTimeScheduleAllowed(cr.getIsOneTimeScheduleAllowed());
+ if (nvl(cr.getIsHourlyScheduleAllowed()).length()>0)
+ ncr.setIsHourlyScheduleAllowed(cr.getIsHourlyScheduleAllowed());
+ if (nvl(cr.getIsDailyScheduleAllowed()).length()>0)
+ ncr.setIsDailyScheduleAllowed(cr.getIsDailyScheduleAllowed());
+ if (nvl(cr.getIsDailyMFScheduleAllowed()).length()>0)
+ ncr.setIsDailyMFScheduleAllowed(cr.getIsDailyMFScheduleAllowed());
+ if (nvl(cr.getIsWeeklyScheduleAllowed()).length()>0)
+ ncr.setIsWeeklyScheduleAllowed(cr.getIsWeeklyScheduleAllowed());
+ if (nvl(cr.getIsMonthlyScheduleAllowed()).length()>0)
+ ncr.setIsMonthlyScheduleAllowed(cr.getIsMonthlyScheduleAllowed());
+
+ ncr.setPageSize(cr.getPageSize());
+ ncr.setReportType(cr.getReportType());
+
+
+ DataSourceList dataSourceList = objFactory.createDataSourceList();
+ ncr.setDataSourceList(dataSourceList);
+
+ for (Iterator iter = cr.getDataSourceList().getDataSource().iterator(); iter.hasNext();) {
+ dataSourceList.getDataSource().add(
+ cloneDataSourceType(objFactory, (DataSourceType) iter.next()));
+ }
+
+ if (cr.getFormFieldList() != null) {
+ FormFieldList formFieldList = objFactory.createFormFieldList();
+ ncr.setFormFieldList(formFieldList);
+ ncr.getFormFieldList().setComment(formFieldList.getComment());
+
+ for (Iterator iter = cr.getFormFieldList().getFormField().iterator(); iter
+ .hasNext();)
+ formFieldList.getFormField().add(
+ cloneFormFieldType(objFactory, (FormFieldType) iter.next()));
+ formFieldList.setComment(cr.getFormFieldList().getComment());
+ } // if
+
+ if (cr.getJavascriptList() != null) {
+ JavascriptList javascriptList = objFactory.createJavascriptList();
+ ncr.setJavascriptList(javascriptList);
+
+ for (Iterator iter = cr.getJavascriptList().getJavascriptItem().iterator(); iter
+ .hasNext();)
+ javascriptList.getJavascriptItem().add(
+ cloneJavascriptType(objFactory, (JavascriptItemType) iter.next()));
+ } // if
+
+ if (cr.getSemaphoreList() != null) {
+ SemaphoreList semaphoreList = objFactory.createSemaphoreList();
+ ncr.setSemaphoreList(semaphoreList);
+
+ for (Iterator iter = cr.getSemaphoreList().getSemaphore().iterator(); iter
+ .hasNext();) {
+ semaphoreList.getSemaphore().add(
+ cloneSemaphoreType(objFactory, (SemaphoreType) iter.next()));
+ }
+ } // if
+
+ if (nvl(cr.getDashboardOptions()).length()>0)
+ ncr.setDashboardOptions(cr.getDashboardOptions());
+ if(cr.isDashboardType()!=null)
+ ncr.setDashboardType(cr.isDashboardType());
+ if(cr.isReportInNewWindow()!=null)
+ ncr.setReportInNewWindow(cr.isReportInNewWindow());
+ ncr.setDisplayFolderTree(cr.isDisplayFolderTree());
+ if (cr.getDashBoardReports() == null) {
+ if (cr.getMaxRowsInExcelDownload()!=null && cr.getMaxRowsInExcelDownload()>0)
+ ncr.setMaxRowsInExcelDownload(cr.getMaxRowsInExcelDownload());
+ }
+
+ if (cr.getDashBoardReports() != null) {
+ DashboardReports dashboardReports = objFactory.createDashboardReports();
+ ncr.setDashBoardReports(dashboardReports);
+
+ for (Iterator iter = cr.getDashBoardReports().getReportsList().iterator(); iter
+ .hasNext();) {
+ dashboardReports.getReportsList().add(
+ cloneDashboardType(objFactory, (Reports) iter.next()));
+ }
+ } // if
+
+ if (cr.getChartAdditionalOptions() != null) {
+ ChartAdditionalOptions chartAdditionalOptions = objFactory.createChartAdditionalOptions();
+ if(nvl(cr.getChartAdditionalOptions().getChartMultiplePieOrder()).length()>0)
+ chartAdditionalOptions.setChartMultiplePieOrder(cr.getChartAdditionalOptions().getChartMultiplePieOrder());
+ if(nvl(cr.getChartAdditionalOptions().getChartMultiplePieLabelDisplay()).length()>0)
+ chartAdditionalOptions.setChartMultiplePieLabelDisplay(cr.getChartAdditionalOptions().getChartMultiplePieLabelDisplay());
+
+ if(nvl(cr.getChartAdditionalOptions().getChartOrientation()).length()>0)
+ chartAdditionalOptions.setChartOrientation(cr.getChartAdditionalOptions().getChartOrientation());
+ if(nvl(cr.getChartAdditionalOptions().getSecondaryChartRenderer()).length()>0)
+ chartAdditionalOptions.setSecondaryChartRenderer(cr.getChartAdditionalOptions().getSecondaryChartRenderer());
+
+ if(nvl(cr.getChartAdditionalOptions().getChartDisplay()).length()>0)
+ chartAdditionalOptions.setChartDisplay(cr.getChartAdditionalOptions().getChartDisplay());
+ if(nvl(cr.getChartAdditionalOptions().getHideToolTips()).length()>0)
+ chartAdditionalOptions.setHideToolTips(cr.getChartAdditionalOptions().getHideToolTips());
+ if(nvl(cr.getChartAdditionalOptions().getHidechartLegend()).length()>0)
+ chartAdditionalOptions.setHidechartLegend(cr.getChartAdditionalOptions().getHidechartLegend());
+ if(nvl(cr.getChartAdditionalOptions().getLegendPosition()).length()>0)
+ chartAdditionalOptions.setLegendPosition(cr.getChartAdditionalOptions().getLegendPosition());
+ if(nvl(cr.getChartAdditionalOptions().getLabelAngle()).length()>0)
+ chartAdditionalOptions.setLabelAngle(cr.getChartAdditionalOptions().getLabelAngle());
+
+ if(nvl(cr.getChartAdditionalOptions().getIntervalFromdate()).length()>0)
+ chartAdditionalOptions.setIntervalFromdate(cr.getChartAdditionalOptions().getIntervalFromdate());
+ if(nvl(cr.getChartAdditionalOptions().getIntervalTodate()).length()>0)
+ chartAdditionalOptions.setIntervalTodate(cr.getChartAdditionalOptions().getIntervalTodate());
+ if(nvl(cr.getChartAdditionalOptions().getIntervalLabel()).length()>0)
+ chartAdditionalOptions.setIntervalLabel(cr.getChartAdditionalOptions().getIntervalLabel());
+
+ if(nvl(cr.getChartAdditionalOptions().getLastSeriesALineChart()).length()>0)
+ chartAdditionalOptions.setLastSeriesALineChart(cr.getChartAdditionalOptions().getLastSeriesALineChart());
+ if(nvl(cr.getChartAdditionalOptions().getLastSeriesABarChart()).length()>0)
+ chartAdditionalOptions.setLastSeriesABarChart(cr.getChartAdditionalOptions().getLastSeriesABarChart());
+
+ if(nvl(cr.getChartAdditionalOptions().getMaxLabelsInDomainAxis()).length()>0)
+ chartAdditionalOptions.setMaxLabelsInDomainAxis(cr.getChartAdditionalOptions().getMaxLabelsInDomainAxis());
+ if(nvl(cr.getChartAdditionalOptions().getLinearRegression()).length()>0)
+ chartAdditionalOptions.setLinearRegression(cr.getChartAdditionalOptions().getLinearRegression());
+ if(nvl(cr.getChartAdditionalOptions().getLinearRegressionColor()).length()>0)
+ chartAdditionalOptions.setLinearRegressionColor(cr.getChartAdditionalOptions().getLinearRegressionColor());
+ if(nvl(cr.getChartAdditionalOptions().getExponentialRegressionColor()).length()>0)
+ chartAdditionalOptions.setExponentialRegressionColor(cr.getChartAdditionalOptions().getExponentialRegressionColor());
+ if(nvl(cr.getChartAdditionalOptions().getMaxRegression()).length()>0)
+ chartAdditionalOptions.setMaxRegression(cr.getChartAdditionalOptions().getMaxRegression());
+ if(nvl(cr.getChartAdditionalOptions().getRangeAxisUpperLimit()).length()>0)
+ chartAdditionalOptions.setRangeAxisUpperLimit(cr.getChartAdditionalOptions().getRangeAxisUpperLimit());
+ if(nvl(cr.getChartAdditionalOptions().getRangeAxisLowerLimit()).length()>0)
+ chartAdditionalOptions.setRangeAxisLowerLimit(cr.getChartAdditionalOptions().getRangeAxisLowerLimit());
+ if(nvl(cr.getChartAdditionalOptions().getOverlayItemValueOnStackBar()).length()>0)
+ chartAdditionalOptions.setOverlayItemValueOnStackBar(cr.getChartAdditionalOptions().getOverlayItemValueOnStackBar());
+ chartAdditionalOptions.setAnimate((cr.getChartAdditionalOptions().isAnimate()!=null && cr.getChartAdditionalOptions().isAnimate().booleanValue())?true:false);
+
+ if(nvl(cr.getChartAdditionalOptions().getKeepDomainAxisValueAsString()).length()>0)
+ chartAdditionalOptions.setKeepDomainAxisValueAsString(cr.getChartAdditionalOptions().getKeepDomainAxisValueAsString());
+
+
+ // Animate
+ chartAdditionalOptions.setAnimateAnimatedChart((cr.getChartAdditionalOptions().isAnimateAnimatedChart()!=null && cr.getChartAdditionalOptions().isAnimateAnimatedChart().booleanValue())?true:false);
+ chartAdditionalOptions.setStacked((cr.getChartAdditionalOptions().isStacked()!=null && cr.getChartAdditionalOptions().isStacked().booleanValue())?true:false);
+ chartAdditionalOptions.setBarControls((cr.getChartAdditionalOptions().isBarControls()!=null && cr.getChartAdditionalOptions().isBarControls().booleanValue())?true:false);
+ chartAdditionalOptions.setXAxisDateType((cr.getChartAdditionalOptions().isXAxisDateType()!=null && cr.getChartAdditionalOptions().isXAxisDateType().booleanValue())?true:false);
+ chartAdditionalOptions.setLessXaxisTickers((cr.getChartAdditionalOptions().isLessXaxisTickers()!=null && cr.getChartAdditionalOptions().isLessXaxisTickers().booleanValue())?true:false);
+ chartAdditionalOptions.setTimeAxis((cr.getChartAdditionalOptions().isTimeAxis()!=null && cr.getChartAdditionalOptions().isTimeAxis().booleanValue())?true:false);
+
+ if(nvl(cr.getChartAdditionalOptions().getTimeSeriesRender()).length()>0)
+ chartAdditionalOptions.setTimeSeriesRender(cr.getChartAdditionalOptions().getTimeSeriesRender());
+
+ chartAdditionalOptions.setMultiSeries((cr.getChartAdditionalOptions().isMultiSeries()!=null && cr.getChartAdditionalOptions().isMultiSeries().booleanValue())?true:false);
+
+ chartAdditionalOptions.setTopMargin(cr.getChartAdditionalOptions().getTopMargin()!=null?cr.getChartAdditionalOptions().getTopMargin():new Integer(30));
+ chartAdditionalOptions.setBottomMargin(cr.getChartAdditionalOptions().getBottomMargin()!=null?cr.getChartAdditionalOptions().getBottomMargin():new Integer(50));
+ chartAdditionalOptions.setLeftMargin(cr.getChartAdditionalOptions().getLeftMargin()!=null?cr.getChartAdditionalOptions().getLeftMargin():new Integer(100));
+ chartAdditionalOptions.setRightMargin(cr.getChartAdditionalOptions().getRightMargin()!=null?cr.getChartAdditionalOptions().getRightMargin():new Integer(60));
+
+
+ ncr.setChartAdditionalOptions(chartAdditionalOptions);
+ } // if
+
+ if (nvl(cr.getJavascriptElement()).length()>0)
+ ncr.setJavascriptElement(cr.getJavascriptElement());
+ if (nvl(cr.getFolderId()).length()>0)
+ ncr.setFolderId(cr.getFolderId());
+
+ if (cr.getChartDrillOptions() != null) {
+ ChartDrillOptions chartDrillOptions = objFactory.createChartDrillOptions();
+
+ if(nvl(cr.getChartDrillOptions().getDrillReportId()).length()>0)
+ chartDrillOptions.setDrillReportId(cr.getChartDrillOptions().getDrillReportId());
+
+ for (Iterator iter = cr.getChartDrillOptions().getTargetFormfield().iterator(); iter
+ .hasNext();) {
+ chartDrillOptions.getTargetFormfield().add(
+ cloneChartDrillFormfield(objFactory, (ChartDrillFormfield)iter.next()));
+
+ }
+
+ if(nvl(cr.getChartDrillOptions().getDrillXAxisFormField()).length()>0)
+ chartDrillOptions.setDrillXAxisFormField(cr.getChartDrillOptions().getDrillXAxisFormField());
+ if(nvl(cr.getChartDrillOptions().getDrillYAxisFormField()).length()>0)
+ chartDrillOptions.setDrillYAxisFormField(cr.getChartDrillOptions().getDrillYAxisFormField());
+ if(nvl(cr.getChartDrillOptions().getDrillSeriesFormField()).length()>0)
+ chartDrillOptions.setDrillSeriesFormField(cr.getChartDrillOptions().getDrillSeriesFormField());
+
+
+ ncr.setChartDrillOptions(chartDrillOptions);
+ }
+
+ if (nvl(cr.getIsOneTimeScheduleAllowed()).length()>0)
+ ncr.setIsOneTimeScheduleAllowed(cr.getIsOneTimeScheduleAllowed());
+ if (nvl(cr.getIsHourlyScheduleAllowed()).length()>0)
+ ncr.setIsHourlyScheduleAllowed(cr.getIsHourlyScheduleAllowed());
+ if (nvl(cr.getIsDailyScheduleAllowed()).length()>0)
+ ncr.setIsDailyScheduleAllowed(cr.getIsDailyScheduleAllowed());
+ if (nvl(cr.getIsDailyMFScheduleAllowed()).length()>0)
+ ncr.setIsDailyMFScheduleAllowed(cr.getIsDailyMFScheduleAllowed());
+ if (nvl(cr.getIsWeeklyScheduleAllowed()).length()>0)
+ ncr.setIsWeeklyScheduleAllowed(cr.getIsWeeklyScheduleAllowed());
+ if (nvl(cr.getIsMonthlyScheduleAllowed()).length()>0)
+ ncr.setIsMonthlyScheduleAllowed(cr.getIsMonthlyScheduleAllowed());
+
+ ncr.setPageSize(cr.getPageSize());
+ ncr.setReportType(cr.getReportType());
+
+ if (cr.getReportMap() != null){
+ ReportMap repMap = objFactory.createReportMap();
+ if(nvl(cr.getReportMap().getMarkerColor()).length()>0)
+ repMap.setMarkerColor(cr.getReportMap().getMarkerColor());
+ if(nvl(cr.getReportMap().getUseDefaultSize()).length()>0)
+ repMap.setUseDefaultSize(cr.getReportMap().getUseDefaultSize());
+ if(nvl(cr.getReportMap().getHeight()).length()>0)
+ repMap.setHeight(cr.getReportMap().getHeight());
+ if(nvl(cr.getReportMap().getWidth()).length()>0)
+ repMap.setWidth(cr.getReportMap().getWidth());
+ if(nvl(cr.getReportMap().getIsMapAllowedYN()).length()>0)
+ repMap.setIsMapAllowedYN(cr.getReportMap().getIsMapAllowedYN());
+ if(nvl(cr.getReportMap().getAddAddressInDataYN()).length()>0)
+ repMap.setAddAddressInDataYN(cr.getReportMap().getAddAddressInDataYN());
+ if(nvl(cr.getReportMap().getAddressColumn()).length()>0)
+ repMap.setAddressColumn(cr.getReportMap().getAddressColumn());
+ if(nvl(cr.getReportMap().getDataColumn()).length()>0)
+ repMap.setDataColumn(cr.getReportMap().getDataColumn());
+ if(nvl(cr.getReportMap().getDefaultMapType()).length()>0)
+ repMap.setDefaultMapType(cr.getReportMap().getDefaultMapType());
+ if(nvl(cr.getReportMap().getLatColumn()).length()>0)
+ repMap.setLatColumn(cr.getReportMap().getLatColumn());
+ if(nvl(cr.getReportMap().getLongColumn()).length()>0)
+ repMap.setLongColumn(cr.getReportMap().getLongColumn());
+ if(nvl(cr.getReportMap().getColorColumn()).length()>0)
+ repMap.setColorColumn(cr.getReportMap().getColorColumn());
+ if(nvl(cr.getReportMap().getLegendColumn()).length()>0)
+ repMap.setLegendColumn(cr.getReportMap().getLegendColumn());
+
+
+ for (Iterator iter = cr.getReportMap().getMarkers().iterator(); iter
+ .hasNext();) {
+ repMap.getMarkers().add(
+ cloneMarkerType(objFactory, (Marker)iter.next()));
+
+ }
+
+ ncr.setReportMap(repMap);
+ }
+
+
+
+ } catch (JAXBException ex) { // try
+ throw new RaptorException(ex.getMessage(), ex.getCause());
+ }
+
+ return ncr;
+ } // cloneCustomReport
+
+ /** ************************************************************************************************* */
+
+ public void printFormatType(FormatType ft) {
+ System.out.println("------------------------------------------------");
+ System.out.println("Semaphore Col Format");
+ System.out.println("------------------------------------------------");
+ System.out.println("FormatId: [" + ft.getFormatId() + "]");
+ System.out.println("LessThanValue: [" + ft.getLessThanValue() + "]");
+ System.out.println("Expression: [" + ft.getExpression() + "]");
+ System.out.println("Bold: [" + ft.isBold() + "]");
+ System.out.println("Italic: [" + ft.isItalic() + "]");
+ System.out.println("Underline: [" + ft.isUnderline() + "]");
+ System.out.println("BgColor: [" + ft.getBgColor() + "]");
+ System.out.println("FontColor: [" + ft.getFontColor() + "]");
+ System.out.println("FontFace: [" + ft.getFontFace() + "]");
+ System.out.println("FontSize: [" + ft.getFontSize() + "]");
+ System.out.println("Alignment: [" + ft.getAlignment() + "]");
+ System.out.println("Comment: [" + ft.getComment() + "]");
+ System.out.println("------------------------------------------------");
+ } // printFormatType
+
+ public void printSemaphoreType(SemaphoreType st) {
+ System.out.println("------------------------------------------------");
+ System.out.println("Semaphore");
+ System.out.println("------------------------------------------------");
+ System.out.println("SemaphoreId: [" + st.getSemaphoreId() + "]");
+ System.out.println("SemaphoreName: [" + st.getSemaphoreName() + "]");
+ System.out.println("SemaphoreType: [" + st.getSemaphoreType() + "]");
+ System.out.println("Comment: [" + st.getComment() + "]");
+
+ if (st.getFormatList() != null)
+ for (Iterator iter = st.getFormatList().getFormat().iterator(); iter.hasNext();)
+ printFormatType((FormatType) iter.next());
+
+ System.out.println("------------------------------------------------");
+ } // printSemaphoreType
+
+ public void printFormFieldType(FormFieldType fft) {
+ System.out.println("------------------------------------------------");
+ System.out.println("Form Field");
+ System.out.println("------------------------------------------------");
+ System.out.println("FieldId: [" + fft.getFieldId() + "]");
+ System.out.println("ColId: [" + fft.getColId() + "]");
+ System.out.println("FieldName: [" + fft.getFieldName() + "]");
+ System.out.println("FieldType: [" + fft.getFieldType() + "]");
+ System.out.println("ValidationType: [" + fft.getValidationType() + "]");
+ System.out.println("Mandatory: [" + fft.getMandatory() + "]");
+ System.out.println("DefaultValue: [" + fft.getDefaultValue() + "]");
+ System.out.println("OrderBySeq: [" + fft.getOrderBySeq() + "]");
+ System.out.println("FieldSQL: [" + fft.getFieldSQL() + "]");
+ System.out.println("Comment: [" + fft.getComment() + "]");
+ if (fft.getPredefinedValueList() != null)
+ for (Iterator iter = fft.getPredefinedValueList().getPredefinedValue().iterator(); iter
+ .hasNext();)
+ System.out.println("PredefinedValues: [" + ((String) iter.next()) + "]");
+
+ System.out.println("------------------------------------------------");
+ } // printFormFieldType
+
+ public void printColFilterType(ColFilterType cft) {
+ System.out.println("------------------------------------------------");
+ System.out.println("Col Filter");
+ System.out.println("------------------------------------------------");
+ System.out.println("ColId: [" + cft.getColId() + "]");
+ System.out.println("FilterSeq: [" + cft.getFilterSeq() + "]");
+ System.out.println("JoinCondition: [" + cft.getJoinCondition() + "]");
+ System.out.println("OpenBrackets: [" + cft.getOpenBrackets() + "]");
+ System.out.println("Expression: [" + cft.getExpression() + "]");
+ System.out.println("ArgType: [" + cft.getArgType() + "]");
+ System.out.println("ArgValue: [" + cft.getArgValue() + "]");
+ System.out.println("CloseBrackets: [" + cft.getCloseBrackets() + "]");
+ System.out.println("Comment: [" + cft.getComment() + "]");
+ System.out.println("------------------------------------------------");
+ } // printColFilterType
+
+ public void printDataColumnType(DataColumnType dct) {
+ System.out.println("------------------------------------------------");
+ System.out.println("Data Column");
+ System.out.println("------------------------------------------------");
+ System.out.println("ColId: [" + dct.getColId() + "]");
+ System.out.println("TableId: [" + dct.getTableId() + "]");
+ System.out.println("DbColName: [" + dct.getDbColName() + "]");
+ System.out.println("CrossTabValue: [" + dct.getCrossTabValue() + "]");
+ System.out.println("ColName: [" + dct.getColName() + "]");
+ System.out.println("DisplayName: [" + dct.getDisplayName() + "]");
+ System.out.println("DisplayWidth: [" + dct.getDisplayWidth() + "]");
+ System.out.println("DisplayAlignment: [" + dct.getDisplayAlignment() + "]");
+ System.out.println("DisplayHeaderAlignment: [" + dct.getDisplayHeaderAlignment() + "]");
+ System.out.println("OrderSeq(): [" + dct.getOrderSeq() + "]");
+ System.out.println("Visible: [" + dct.isVisible() + "]");
+ System.out.println("Calculated: [" + dct.isCalculated() + "]");
+ System.out.println("ColType: [" + dct.getColType() + "]");
+ System.out.println("ColFormat: [" + dct.getColFormat() + "]");
+ System.out.println("GroupBreak: [" + dct.isGroupBreak() + "]");
+ System.out.println("OrderBySeq: [" + dct.getOrderBySeq() + "]");
+ System.out.println("OrderByAscDesc: [" + dct.getOrderByAscDesc() + "]");
+ System.out.println("DisplayTotal: [" + dct.getDisplayTotal() + "]");
+ System.out.println("ColOnChart: [" + dct.getColOnChart() + "]");
+ System.out.println("ChartSeq: [" + dct.getChartSeq() + "]");
+ System.out.println("ChartColor: [" + dct.getChartColor() + "]");
+ System.out.println("DrillDownType: [" + dct.getDrillDownType() + "]");
+ System.out.println("DrillDownURL: [" + dct.getDrillDownURL() + "]");
+ System.out.println("DrillDownParams: [" + dct.getDrillDownParams() + "]");
+ System.out.println("Comment: [" + dct.getComment() + "]");
+
+ if (dct.getColFilterList() != null)
+ for (Iterator iter = dct.getColFilterList().getColFilter().iterator(); iter
+ .hasNext();)
+ printColFilterType((ColFilterType) iter.next());
+
+ System.out.println("SemaphoreId: [" + dct.getSemaphoreId() + "]");
+ System.out.println("DbColType: [" + dct.getDbColType() + "]");
+ System.out.println("------------------------------------------------");
+ } // printDataColumnType
+
+ public void printDataSourceType(DataSourceType dst) {
+ System.out.println("------------------------------------------------");
+ System.out.println("Data Source");
+ System.out.println("------------------------------------------------");
+ System.out.println("TableId: [" + dst.getTableId() + "]");
+ System.out.println("TableName: [" + dst.getTableName() + "]");
+ System.out.println("TablePK: [" + dst.getTablePK() + "]");
+ System.out.println("DisplayName: [" + dst.getDisplayName() + "]");
+ System.out.println("RefTableId: [" + dst.getRefTableId() + "]");
+ System.out.println("RefDefinition: [" + dst.getRefDefinition() + "]");
+ System.out.println("Comment: [" + dst.getComment() + "]");
+
+ for (Iterator iter = dst.getDataColumnList().getDataColumn().iterator(); iter
+ .hasNext();)
+ printDataColumnType((DataColumnType) iter.next());
+
+ System.out.println("------------------------------------------------");
+ } // printDataSourceType
+
+ public void print() {
+ System.out.println("------------------------------------------------");
+ System.out.println("ReportWrapper object");
+ System.out.println("------------------------------------------------");
+ System.out.println("PageSize: [" + getPageSize() + "]");
+ System.out.println("ReportType: [" + getReportType() + "]");
+ System.out.println("ReportName: [" + getReportName() + "]");
+ System.out.println("ReportDescr: [" + getReportDescr() + "]");
+ System.out.println("ChartType: [" + getChartType() + "]");
+ System.out.println("ChartTypeFixed: [" + getChartTypeFixed() + "]");
+ //System.out.println("ChartLeftAxisLabel: [" + getChartLeftAxisLabel() + "]");
+ //System.out.println("ChartRightAxisLabel: [" + getChartRightAxisLabel() + "]");
+ System.out.println("ChartWidth: [" + getChartWidth() + "]");
+ System.out.println("ChartHeight: [" + getChartHeight() + "]");
+ System.out.println("Public: [" + isPublic() + "]");
+ System.out.println("CreateId: NOT USED ANYMORE[" + /* getCreateId()+ */"]");
+ System.out.println("CreateDate: NOT USED ANYMORE[" + /* getCreateDate()+ */"]");
+ System.out.println("ReportSQL: [" + getReportSQL() + "]");
+ System.out.println("ReportTitle: [" + getReportTitle() + "]");
+ System.out.println("DbInfo: [" + getDBInfo() + "]");
+ System.out.println("ReportSubTitle: [" + getReportSubTitle() + "]");
+ System.out.println("ReportHeader: [" + getReportHeader() + "]");
+ System.out.println("ReportFooter: [" + getReportFooter() + "]");
+ System.out.println("NumFormCols: [" + getNumFormCols() + "]");
+ System.out.println("DisplayOptions: [" + getDisplayOptions() + "]");
+ System.out.println("Comment: [" + getComment() + "]");
+
+ for (Iterator iter = cr.getDataSourceList().getDataSource().iterator(); iter.hasNext();)
+ printDataSourceType((DataSourceType) iter.next());
+
+ if (cr.getFormFieldList() != null)
+ for (Iterator iter = cr.getFormFieldList().getFormField().iterator(); iter
+ .hasNext();)
+ printFormFieldType((FormFieldType) iter.next());
+
+ if (cr.getSemaphoreList() != null)
+ for (Iterator iter = cr.getSemaphoreList().getSemaphore().iterator(); iter
+ .hasNext();)
+ printSemaphoreType((SemaphoreType) iter.next());
+
+ System.out.println("------------------------------------------------");
+ System.out.println("ReportWrapper object end");
+ System.out.println("------------------------------------------------");
+ } // print
+
+ private int getIntValue(String value, int defaultValue) {
+ int iValue = defaultValue;
+ try {
+ iValue = Integer.parseInt(value);
+ } catch (Exception e) {
+ }
+
+ return iValue;
+ } // getIntValue
+ public static String replaceNewLine( String strSource, String strFind, String chrReplace )
+ {
+ // buffer to hold the target string after replacement is done.
+ StringBuffer sbfTemp = new StringBuffer();
+
+ try
+ {
+ // for each occurrence of strFind in strSource, replace it with chrReplace.
+ int intIndex = strSource.indexOf( strFind, 0 );
+
+ // check if there is any instace of strFind in strSource
+ if( intIndex >= 0 )
+ {
+ // holds the index from where the search is supposed to happen.
+ int intStart = 0;
+
+ // size of the source string
+ int intTotalSize = strSource.length();
+
+ while( intStart < intTotalSize &&
+ ( ( intIndex = strSource.indexOf( strFind, intStart ) ) >= 0 ) )
+ {
+ // check if strFind is at the beginning... i.e., at index intStart
+ if( intIndex == intStart )
+ {
+ /*
+ * starts with strFind...just append chrReplace
+ * to the target
+ */
+ sbfTemp.append( chrReplace );
+ }
+ else
+ {
+ // append the sub-string...plus chrReplace
+ sbfTemp.append( strSource.substring( intStart, intIndex ) );
+ sbfTemp.append( chrReplace );
+ }
+
+ // advance string index
+ intStart = intIndex + strFind.length();
+ }
+
+ // append the last portion of the source string.
+ sbfTemp.append( strSource.substring( intStart ) );
+ }
+ else
+ {
+ // strFind not found... just copy the text as it is.
+ sbfTemp.append( strSource );
+ }
+ }
+ catch( Exception expGeneral )
+ {
+ // in case of any exception, return the source string as it is.
+ sbfTemp = new StringBuffer( strSource );
+ }
+
+ return sbfTemp.toString();
+ }
+
+ /*folder id*/
+ public String getFolderId() {
+ return nvl(cr.getFolderId()).length()>0?cr.getFolderId():"NULL";
+ }
+ public void setFolderId(String folderId ) {
+ cr.setFolderId(folderId);
+ }
+
+ public String addZero(String num) {
+ int numInt = 0;
+ try {
+ numInt = Integer.parseInt(num);
+ }catch(NumberFormatException ex){
+ numInt = 0;
+ }
+ if(numInt < 10) return "0"+numInt;
+ else return ""+numInt;
+ }
+
+ public String getIsDailyMFScheduleAllowed() {
+ return cr.getIsDailyMFScheduleAllowed();
+ }
+
+ public void setIsDailyMFScheduleAllowed(String isDailyMFScheduleAllowed) {
+ cr.setIsDailyMFScheduleAllowed(isDailyMFScheduleAllowed);
+ }
+
+ public String getIsDailyScheduleAllowed() {
+ return cr.getIsDailyScheduleAllowed();
+ }
+
+ public void setIsDailyScheduleAllowed(String isDailyScheduleAllowed) {
+ cr.setIsDailyScheduleAllowed(isDailyScheduleAllowed);
+ }
+
+ public String getIsHourlyScheduleAllowed() {
+ return cr.getIsHourlyScheduleAllowed();
+ }
+
+ public void setIsHourlyScheduleAllowed(String isHourlyScheduleAllowed) {
+ cr.setIsHourlyScheduleAllowed(isHourlyScheduleAllowed);
+ }
+
+ public String getIsMonthlyScheduleAllowed() {
+ return cr.getIsMonthlyScheduleAllowed();
+ }
+
+ public void setIsMonthlyScheduleAllowed(String isMonthlyScheduleAllowed) {
+ cr.setIsMonthlyScheduleAllowed(isMonthlyScheduleAllowed);
+ }
+
+ public String getIsOneTimeScheduleAllowed() {
+ return cr.getIsOneTimeScheduleAllowed();
+ }
+
+ public void setIsOneTimeScheduleAllowed(String isOneTimeScheduleAllowed) {
+ cr.setIsOneTimeScheduleAllowed(isOneTimeScheduleAllowed);
+ }
+
+ public String getIsWeeklyScheduleAllowed() {
+ return cr.getIsWeeklyScheduleAllowed();
+ }
+
+ public void setIsWeeklyScheduleAllowed(String isWeeklyScheduleAllowed) {
+ cr.setIsWeeklyScheduleAllowed(isWeeklyScheduleAllowed);
+
+ }
+
+ public static boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+ public int getDependsOnFormFieldFlag(DataColumnType dc, HashMap formValues) {
+ int flag = 0;
+ String fieldValue = "";
+ if(nvl(dc.getDependsOnFormField()).length()>0 && nvl(dc.getDependsOnFormField()).indexOf("[")!=-1) {
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter1 = set.iterator(); iter1.hasNext(); ) {
+ Map.Entry entry = (Entry) iter1.next();
+ value = (String) entry.getValue();
+ if (dc.getDependsOnFormField().equals("["+entry.getKey()+"]")) {
+ fieldValue = nvl(value);
+
+ if (fieldValue.length()>0 && !fieldValue.equals("NULL")) {
+ flag = 0;
+ } else {
+ flag = 1;
+ }
+
+ }
+ }
+ }
+ }
+
+ return flag;
+ }
+
+ /* Datamining Getter Setter */
+
+ public String getClassifier() {
+ return (cr.getDataminingOptions()!=null?cr.getDataminingOptions().getClassifier():"");
+ }
+
+ public void setClassifier( String classifier) {
+ cr.getDataminingOptions().setClassifier(classifier);
+ }
+
+
+ public int getForecastingPeriod() {
+ return (cr.getDataminingOptions()!=null? new Integer(cr.getDataminingOptions().getForecastingUnits()).intValue():-1);
+ }
+
+ public void setForecastingPeriod( String period) {
+ cr.getDataminingOptions().setForecastingUnits(period);
+ }
+
+ public String getForecastingTimeFormat() {
+ return (cr.getDataminingOptions()!=null?cr.getDataminingOptions().getTimeformat():"");
+ }
+
+ public void setForecastingTimeFormat( String format) {
+ cr.getDataminingOptions().setTimeformat(format);
+ }
+
+ /**
+ * Get Number of Columns to Frozen in Data Grid
+ */
+
+ public int getFrozenColumns() {
+ return cr.getFrozenColumns()==null?0:cr.getFrozenColumns();
+ }
+
+ public String getFrozenColumnId() {
+ int noOfColumns = cr.getFrozenColumns()==null?0:cr.getFrozenColumns();
+ if(noOfColumns != 0) {
+ List reportCols = getOnlyVisibleColumns();
+ int colIdx = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ ++colIdx;
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(colIdx == noOfColumns) {
+
+ return dc.getColId();
+ } else continue;
+ } // for
+ return "";
+ } else return "";
+
+ }
+
+ /**
+ * Set Number of Columns to Frozen in Data Grid
+ */
+
+ public void setFrozenColumns( int frozenColumns) {
+ cr.setFrozenColumns(frozenColumns);
+ }
+
+ /**
+ * @return the reportSQLWithRowNum for ZK Support
+ */
+ public String getReportSQLWithRowNum() {
+ return reportSQLWithRowNum;
+ }
+
+ /**
+ * @param reportSQLWithRowNum the reportSQLWithRowNum to set for ZK Support
+ */
+ public void setReportSQLWithRowNum(String reportSQLWithRowNum) {
+ this.reportSQLWithRowNum = reportSQLWithRowNum;
+ }
+
+ //used for Zk sort
+ public void setReportSQLOnlyFirstPart(String reportSQLOnlyFirstPart) {
+ this.reportSQLOnlyFirstPart = reportSQLOnlyFirstPart;
+ }
+
+ public String getReportSQLOnlyFirstPart() {
+ return this.reportSQLOnlyFirstPart;
+ }
+
+ public String getTemplateFile() throws RaptorException {
+ return ReportLoader.getTemplateFile(getReportID());
+ }
+
+ public String getPdfImg() {
+ return cr.getPdfImgLogo();
+ }
+
+
+ public String getEmptyMessage() {
+ String emptyMessage = cr.getEmptyMessage();
+ if(nvl(emptyMessage).length()<=0)
+ emptyMessage = Globals.getReportEmptyMessage();
+ return emptyMessage;
+ }
+
+ public void setPdfImg(String img_loc) {
+ cr.setPdfImgLogo(img_loc);
+ }
+
+ public void setEmptyMessage(String emptyMessage) {
+ cr.setEmptyMessage(emptyMessage);
+ }
+
+ public void setDrillReportIdForChart(String reportId) {
+ //(cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().setDrillReportId():"";
+ cr.getChartDrillOptions().setDrillReportId(reportId);
+ }
+
+ public String getDrillReportIdForChart() {
+ return (cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().getDrillReportId():"";
+ }
+
+ public void setDrillXAxisFormField(String formField) {
+ //(cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().setDrillReportId():"";
+ cr.getChartDrillOptions().setDrillXAxisFormField(formField);
+ }
+
+ public String getDrillXAxisFormField() {
+ return (cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().getDrillXAxisFormField():"";
+ }
+
+ public void setDrillYAxisFormField(String formField) {
+ //(cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().setDrillReportId():"";
+ cr.getChartDrillOptions().setDrillYAxisFormField(formField);
+ }
+
+ public String getDrillYAxisFormField() {
+ return (cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().getDrillYAxisFormField():"";
+ }
+
+ public void setDrillSeriesFormField(String formField) {
+ //(cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().setDrillReportId():"";
+ cr.getChartDrillOptions().setDrillSeriesFormField(formField);
+ }
+
+ public String getDrillSeriesFormField() {
+ return (cr.getChartDrillOptions()!=null)?cr.getChartDrillOptions().getDrillSeriesFormField():"";
+ }
+
+ public boolean isEnhancedPaginationNeeded() {
+ List reportCols = getAllColumns();
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.isEnhancedPagination()!=null && dc.isEnhancedPagination().booleanValue())
+ return true;
+ } // for
+ return false;
+ }
+
+ public DataColumnType getColumnWhichNeedEnhancedPagination() {
+ List reportCols = getAllColumns();
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (dc.isEnhancedPagination()!=null && dc.isEnhancedPagination().booleanValue())
+ return dc;
+ } // for
+ return null;
+ }
+
+ public void setDataGridAlign(String align) {
+ cr.setDataGridAlign(align);
+ }
+
+
+ public String getDataGridAlign() {
+ return (cr.getDataGridAlign()!=null)?cr.getDataGridAlign():"left";
+ }
+
+ public void setWidthNoColumn(String width) {
+ cr.setWidthNoColumn(width);
+ }
+
+
+ public String getWidthNoColumn() {
+ return (cr.getWidthNoColumn()!=null)?cr.getWidthNoColumn():"30px";
+ }
+
+ public void setWholeSQL(String sql) {
+ wholeSQL = sql;
+ }
+ public String getWholeSQL() {
+ return wholeSQL;
+ }
+
+} // ReportWrapper
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DBColumnInfo.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DBColumnInfo.java
new file mode 100644
index 00000000..4496fdca
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DBColumnInfo.java
@@ -0,0 +1,76 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class DBColumnInfo extends RaptorObject {
+ private String tableName = null;
+
+ private String colName = null;
+
+ private String colType = null;
+
+ private String label = null;
+
+ // public DBColumnInfo() {}
+
+ public DBColumnInfo(String tableName, String colName, String colType, String label) {
+ super();
+
+ setTableName(tableName);
+ setColName(colName);
+ setColType(colType);
+ setLabel(label);
+ } // DBColumnInfo
+
+ public String getTableName() {
+ return tableName;
+ }
+
+ public String getColName() {
+ return colName;
+ }
+
+ public String getColType() {
+ return colType;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ private void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+
+ private void setColName(String colName) {
+ this.colName = colName;
+ }
+
+ private void setColType(String colType) {
+ this.colType = colType;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+} // DBColumnInfo
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DrillDownParamDef.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DrillDownParamDef.java
new file mode 100644
index 00000000..8972e54a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/DrillDownParamDef.java
@@ -0,0 +1,111 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class DrillDownParamDef extends RaptorObject {
+ private String fieldName = "";
+
+ private String valType = "0";
+
+ private String valValue = "";
+
+ private String valColId = "";
+
+ private String valFieldId = "";
+
+ public DrillDownParamDef(String drillDownParamStr) {
+ super();
+
+ drillDownParamStr = nvl(drillDownParamStr).trim();
+ if (drillDownParamStr.indexOf('=') >= 0) {
+ fieldName = drillDownParamStr.substring(0, drillDownParamStr.indexOf('='));
+
+ if (drillDownParamStr.length() > drillDownParamStr.indexOf('=') + 2
+ && drillDownParamStr.charAt(drillDownParamStr.indexOf('=') + 1) == '['
+ && drillDownParamStr.charAt(drillDownParamStr.length() - 1) == ']') {
+ drillDownParamStr = drillDownParamStr.substring(
+ drillDownParamStr.indexOf('=') + 2, drillDownParamStr.length() - 1);
+
+ if (drillDownParamStr.indexOf('!') < 0)
+ valColId = drillDownParamStr;
+ else if (drillDownParamStr.indexOf('!') == 0)
+ valFieldId = drillDownParamStr.substring(1);
+ else {
+ valColId = drillDownParamStr.substring(0, drillDownParamStr.indexOf('!'));
+ valFieldId = drillDownParamStr
+ .substring(drillDownParamStr.indexOf('!') + 1);
+ } // else
+
+ if (valColId.length() > 0 && valFieldId.length() > 0)
+ valType = "4";
+ else if (valFieldId.length() > 0)
+ valType = "3";
+ else if (valColId.length() > 0)
+ valType = "2";
+ } else {
+ valType = "1";
+ valValue = drillDownParamStr.substring(drillDownParamStr.indexOf('=') + 1);
+ } // else
+ } // if
+ } // DrillDownParamDef
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public String getValType() {
+ return valType;
+ }
+
+ public String getValValue() {
+ return valValue;
+ }
+
+ public String getValColId() {
+ return valColId;
+ }
+
+ public String getValFieldId() {
+ return valFieldId;
+ }
+
+ private void setFieldName(String fieldName) {
+ this.fieldName = fieldName;
+ }
+
+ private void setValType(String valType) {
+ this.valType = valType;
+ }
+
+ private void setValValue(String valValue) {
+ this.valValue = valValue;
+ }
+
+ private void setValColId(String valColId) {
+ this.valColId = valColId;
+ }
+
+ private void setValFieldId(String valFieldId) {
+ this.valFieldId = valFieldId;
+ }
+
+} // DrillDownParamDef
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/Marker.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/Marker.java
new file mode 100644
index 00000000..a9d9be85
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/Marker.java
@@ -0,0 +1,79 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class Marker extends RaptorObject {
+ String markerColor = "";
+ String addressColumn = "";
+ String dataColumn = "";
+ String address = "";
+ String data = "";
+ String color = "";
+ public String getAddress() {
+ return address;
+ }
+
+ public void setAddress(String address) {
+ this.address = address;
+ }
+
+ public String getColor() {
+ return color;
+ }
+
+ public void setColor(String color) {
+ this.color = color;
+ }
+
+ public String getData() {
+ return data;
+ }
+
+ public void setData(String data) {
+ this.data = data;
+ }
+
+ public Marker(String markerColor, String addressColumn, String dataColumn){
+ this.setMarkerColor(markerColor);
+ this.setAddressColumn(addressColumn);
+ this.setDataColumn(dataColumn);
+ }
+
+ public String getAddressColumn() {
+ return addressColumn;
+ }
+ public void setAddressColumn(String addressColumn) {
+ this.addressColumn = addressColumn;
+ }
+ public String getDataColumn() {
+ return dataColumn;
+ }
+ public void setDataColumn(String dataColumn) {
+ this.dataColumn = dataColumn;
+ }
+ public String getMarkerColor() {
+ return markerColor;
+ }
+ public void setMarkerColor(String markerColor) {
+ this.markerColor = markerColor;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportDefinition.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportDefinition.java
new file mode 100644
index 00000000..71ec9f87
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportDefinition.java
@@ -0,0 +1,1465 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.bind.JAXBException;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+//import javax.xml.transform.stream.*;
+
+import org.openecomp.portalsdk.analytics.controller.WizardSequence;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceCrossTab;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceDashboard;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceLinear;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceSQLBasedCrossTab;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceSQLBasedHive;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceSQLBasedLinear;
+import org.openecomp.portalsdk.analytics.controller.WizardSequenceSQLBasedLinearDatamining;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.DataCache;
+import org.openecomp.portalsdk.analytics.model.ReportLoader;
+import org.openecomp.portalsdk.analytics.model.base.OrderBySeqComparator;
+import org.openecomp.portalsdk.analytics.model.base.OrderSeqComparator;
+import org.openecomp.portalsdk.analytics.model.base.ReportWrapper;
+import org.openecomp.portalsdk.analytics.model.runtime.FormField;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.xmlobj.ChartAdditionalOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.ChartDrillOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.ColFilterType;
+import org.openecomp.portalsdk.analytics.xmlobj.CustomReportType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnList;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataSourceType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataminingOptions;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldList;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatList;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatType;
+import org.openecomp.portalsdk.analytics.xmlobj.JavascriptItemType;
+import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
+import org.openecomp.portalsdk.analytics.xmlobj.PredefinedValueList;
+import org.openecomp.portalsdk.analytics.xmlobj.SemaphoreType;
+import org.openecomp.portalsdk.core.controller.FavoritesController;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+/**<HR/>
+ * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
+ * <HR/>
+ *
+ * --------------------------------------------------------------------------------------------------<BR/>
+ * <B>ReportDefinition.java</B> - This involves in creating and modifying RAPTOR reports.
+ * --------------------------------------------------------------------------------------------------<BR/>
+ *
+ *
+ * <U>Change Log</U><BR/><BR/>
+ *
+ * 18-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> request Object is passed to prevent caching user/roles - Datamining/Hosting. </LI></UL>
+ * 27-Jul-2009 : Version 8.4 (Sundar); <UL><LI>userIsAuthorizedToSeeLog is checked for Admin User instead of Super User.</LI></UL>
+ * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI>A new type ChartAdditionalOptions is introduced in RAPTOR XSD.
+ * For this type a create procedure is added to this class.</LI></UL>
+ *
+ */
+
+public class ReportDefinition extends ReportWrapper implements Serializable {
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FavoritesController.class);
+
+
+ private ReportSchedule reportSchedule = null;
+
+ private WizardSequence wizardSequence = null;
+
+
+ private boolean reportUpdateLogged = false; // Used to avoid multiple
+ // entries in the report log
+ // when persisting report on
+ // each step
+
+ private ReportDefinition(CustomReportType crType, String reportID, String ownerID,
+ String createID, String createDate, String updateID, String updateDate,
+ String menuID, boolean menuApproved, HttpServletRequest request) throws RaptorException {
+ super(crType, reportID, ownerID, createID, createDate, updateID, updateDate, menuID,
+ menuApproved);
+ if(reportID.equals("-1"))
+ reportSchedule = new ReportSchedule(getReportID(), getOwnerID(), false, request);
+ else
+ reportSchedule = new ReportSchedule(getReportID(), getOwnerID(), true, request);
+ generateWizardSequence(null);
+ } // ReportDefinition
+
+ public ReportDefinition(ReportWrapper rw, HttpServletRequest request)throws RaptorException {
+ super(rw);
+
+ reportSchedule = new ReportSchedule(reportID, rw.getOwnerID(),false, request);
+ generateWizardSequence(null);
+ } // ReportDefinition
+
+ private void setReportID(String reportID) {
+ this.reportID = reportID;
+ reportSchedule.setReportID(reportID);
+ reportSchedule.setScheduleUserID(getOwnerID());
+ } // setReportID
+
+ public ReportSchedule getReportSchedule() {
+ return reportSchedule;
+ }
+
+ public static ReportDefinition unmarshal(String reportXML, String reportID, HttpServletRequest request)
+ throws RaptorException {
+ ReportDefinition rn = null;
+ CustomReportType crType = ReportWrapper.unmarshalCR(reportXML);
+ //Log.write("Report [" + reportID + "]: XML unmarshalled", 4);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML unmarshalled"));
+
+ rn = new ReportDefinition(crType, reportID, null, null, null, null, null, null, false, request);
+ return rn;
+ } // unmarshal
+
+ public static ReportDefinition createBlank(HttpServletRequest request) throws RaptorException {
+ String curTime = Utils.getCurrentDateTime();
+ String userID = AppUtils.getUserID(request);
+ ReportDefinition rd = new ReportDefinition(ReportWrapper.createBlankCR(userID), "-1",
+ userID, userID, curTime, userID, curTime, "", false, request);
+
+ // Necessary initialization
+
+ return rd;
+ } // ReportDefinition
+
+ public void setAsCopy(HttpServletRequest request) throws RaptorException {
+ verifySQLBasedReportAccess(request);
+
+ replaceCustomReportWithClone();
+
+ setReportID("-1");
+ setReportName("Copy: " + getReportName());
+ } // setAsCopy
+
+ public WizardSequence getWizardSequence() {
+ return wizardSequence;
+ } // getWizardSequence
+
+ public void generateWizardSequence(HttpServletRequest request) throws RaptorException {
+ boolean userIsAuthorizedToSeeLog = false;
+ String userId = null;
+ if(request!=null) {
+ userId = AppUtils.getUserID(request);
+ if (userId != null)
+ userIsAuthorizedToSeeLog = AppUtils.isAdminUser(request)
+ || AppUtils.isAdminUser(request);
+ //System.out.println("******** Report Type "+getReportType() + " userIsAuthorizedToSeeLog " + userIsAuthorizedToSeeLog);
+ }
+ if (getReportType().equals(AppConstants.RT_LINEAR)){
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ wizardSequence = new WizardSequenceSQLBasedLinear(userIsAuthorizedToSeeLog);
+ else if (getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN))
+ wizardSequence = new WizardSequenceSQLBasedLinearDatamining(userIsAuthorizedToSeeLog);
+ else
+ wizardSequence = new WizardSequenceLinear(userIsAuthorizedToSeeLog);
+ } else if (getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ wizardSequence = new WizardSequenceSQLBasedCrossTab(userIsAuthorizedToSeeLog);
+ else
+ wizardSequence = new WizardSequenceCrossTab(userIsAuthorizedToSeeLog);
+ } else if (getReportType().equals(AppConstants.RT_DASHBOARD)) {
+ wizardSequence = new WizardSequenceDashboard(userIsAuthorizedToSeeLog);
+ } else if (getReportType().equals(AppConstants.RT_HIVE)) {
+ wizardSequence = new WizardSequenceSQLBasedHive(userIsAuthorizedToSeeLog);
+ } else
+ wizardSequence = new WizardSequence();
+ } // generateWizardSequence
+
+ private boolean canPersistDashboard() {
+ //System.out.println(" getDashBoardReports().getReportsList().size() " + getDashBoardReports().getReportsList().size());
+ /* Commented for New DashBoard
+ if (getDashBoardReports()!=null && getDashBoardReports().getReportsList()!=null && getDashBoardReports().getReportsList().size() > 0) {
+ for (Iterator iter = getDashBoardReports().getReportsList().iterator(); iter.hasNext();) {
+ Reports report = (Reports)iter.next();
+ try {
+ if(Integer.parseInt(report.getReportId())>0) return true;
+ } catch (NumberFormatException ex) {}
+ } // for
+ } //if
+ */
+
+ //if( )
+ return nvl(getDashboardLayoutHTML()).length() > 0;
+ } //canPersistDashboard
+
+ private boolean canPersistLinearReport() {
+ boolean visibleColExist = false;
+
+ if (getDataSourceList().getDataSource().size() > 0) {
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.isVisible()) {
+ visibleColExist = true;
+ break;
+ }
+ } // for
+ } // if
+
+ return visibleColExist;
+ } // canPersistLinearReport
+
+ private boolean canPersistCrossTabReport() {
+ boolean rowColExist = false;
+ boolean colColExist = false;
+ boolean valColExist = false;
+
+ if (getDataSourceList().getDataSource().size() > 0) {
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW))
+ rowColExist = true;
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN))
+ colColExist = true;
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE))
+ valColExist = true;
+ } // for
+ } // if
+
+ return rowColExist && colColExist && valColExist;
+ } // canPersistCrossTabReport
+
+ private boolean canPersistReport() {
+ return getReportType().equals(AppConstants.RT_CROSSTAB) ? canPersistCrossTabReport()
+ : (getReportType().equals(AppConstants.RT_LINEAR)? canPersistLinearReport():((getReportType().equals(AppConstants.RT_HIVE)? canPersistLinearReport():canPersistDashboard())));
+ } // canPersistReport
+
+ public void persistReport(HttpServletRequest request) throws RaptorException {
+ if (!canPersistReport())
+ return;
+
+ Connection connection = null;
+ try {
+ String userID = AppUtils.getUserID(request);
+ String reportXML = marshal();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Ocurring during Schedule "));
+ if (nvl(reportID, "-1").equals("-1")) {
+ connection = DbUtils.startTransaction();
+ // Add report
+ String sql = "";
+ if (nvl(Globals.getAdhocReportSequence()).length()> 0 && nvl(Globals.getAdhocUserRoldId()).length() > 0 && AppUtils.isUserInRole(request, Globals.getAdhocUserRoldId()) && !AppUtils.isAdminUser(request)) {
+ //sql = "SELECT "+ Globals.getAdhocReportSequence() + ".nextval FROM dual";
+ sql = Globals.getPersistReportAdhoc();
+ sql = sql.replace("[Globals.getAdhocReportSequence()]", Globals.getAdhocReportSequence());
+
+ } else{
+ //sql = "SELECT seq_cr_report.nextval FROM dual";
+ sql = Globals.getNewReportData();
+ }
+ DataSet ds = DbUtils.executeQuery(connection,sql);
+ setReportID(ds.getString(0, 0));
+
+ reportSecurity.reportCreate(reportID, userID, isPublic());
+ ReportLoader.createCustomReportRec(connection, this, reportXML);
+ ReportLoader.createReportLogEntry(connection, reportID, userID,
+ AppConstants.RLA_CREATE, "", "");
+ reportUpdateLogged = true;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB insert report " + reportID + " succesfull"));
+ } else {
+ // Update report
+ verifySQLBasedReportAccess(request);
+ reportSecurity.reportUpdate(request);
+ connection = DbUtils.startTransaction();
+ ReportLoader.updateCustomReportRec(connection, this, reportXML);
+ if (!reportUpdateLogged) {
+ ReportLoader.createReportLogEntry(connection, reportID, userID,
+ AppConstants.RLA_UPDATE,"","");
+ reportUpdateLogged = true;
+ } // if
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report " + reportID + " succesfull"));
+ }
+
+ getReportSchedule().persistScheduleData(connection, request);
+
+ DbUtils.commitTransaction(connection);
+ } catch (RaptorException e) {
+ e.printStackTrace();
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // persistReport
+
+ public String getCrossTabDisplayValue(String crossTabValue) {
+ return nvl(crossTabValue).equals(AppConstants.CV_ROW) ? "Row headings" : (nvl(
+ crossTabValue).equals(AppConstants.CV_COLUMN) ? "Column headings" : (nvl(
+ crossTabValue).equals(AppConstants.CV_VALUE) ? "Report values" : "Invisible/Filter"));
+ } // getCrossTabDisplayValue
+
+ public String getCrossTabDisplayValue(DataColumnType dct) {
+ return getCrossTabDisplayValue(dct.getCrossTabValue());
+ } // getCrossTabDisplayValue
+
+ public String getColumnLabel(DataColumnType dct) throws Exception {
+ String tableName = getTableById(dct.getTableId()).getTableName();
+ Vector dbColumns = null;
+ dbColumns = DataCache.getReportTableDbColumns(tableName, cr.getDbInfo());
+ if (dbColumns != null)
+ for (int i = 0; i < dbColumns.size(); i++) {
+ DBColumnInfo dbCol = (DBColumnInfo) dbColumns.get(i);
+ if (dct.getDbColName().equals(dbCol.getColName()))
+ return dbCol.getLabel();
+ } // for
+
+ return "";
+ } // getCrossTabDisplayValue
+
+ public String getFilterLabel(ColFilterType cft) {
+ StringBuffer fLabel = new StringBuffer();
+
+ fLabel.append(cft.getExpression());
+ fLabel.append(" ");
+ if (cft.getArgType() != null)
+ if (cft.getArgType().equals(AppConstants.AT_FORMULA)) {
+ fLabel.append("[" + cft.getArgValue() + "]");
+ } else if (cft.getArgType().equals(AppConstants.AT_VALUE)) {
+ fLabel.append(cft.getArgValue());
+ } else if (cft.getArgType().equals(AppConstants.AT_LIST)) {
+ fLabel.append("(" + cft.getArgValue() + ")");
+ } else if (cft.getArgType().equals(AppConstants.AT_COLUMN)) {
+ DataColumnType dctFilter = getColumnById(cft.getArgValue());
+ fLabel.append("[" + dctFilter.getDisplayName() + "]");
+ } else if (cft.getArgType().equals(AppConstants.AT_FORM)) {
+ fLabel.append("[Form Field]");
+ }
+
+ return fLabel.toString();
+ } // getFilterLabel
+
+ public Vector getReportUsers(HttpServletRequest request) throws RaptorException {
+ return reportSecurity.getReportUsers(request);
+ } // getReportUsers
+
+ public Vector getReportRoles(HttpServletRequest request) throws RaptorException {
+ return reportSecurity.getReportRoles(request);
+ } // getReportRoles
+
+ /** ************************************************************************************************* */
+
+ public void clearAllDrillDowns() {
+ List reportCols = getAllColumns();
+ for (int i = 0; i < reportCols.size(); i++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(i);
+ dct.setDrillDownURL(null);
+ dct.setDrillDownParams(null);
+ dct.setDrillDownType(null);
+ } // for
+ } // clearAllDrillDowns
+
+ public void setOuterJoin(DataSourceType curTable, String joinType) {
+ String refDefinition = nvl(curTable.getRefDefinition());
+ int outerJoinIdx = refDefinition.indexOf(" (+)");
+ if (outerJoinIdx >= 0)
+ // Clear existing outer join
+ if (outerJoinIdx == (refDefinition.length() - 4))
+ refDefinition = refDefinition.substring(0, outerJoinIdx);
+ else
+ refDefinition = refDefinition.substring(0, outerJoinIdx)
+ + refDefinition.substring(outerJoinIdx + 4);
+
+ int equalSignIdx = refDefinition.indexOf("=");
+ if (equalSignIdx < 0)
+ // Ref. definition not present
+ return;
+
+ if (refDefinition.indexOf(curTable.getTableId()) < equalSignIdx) {
+ // Cur. table is on the left side
+ if (nvl(joinType).equals(AppConstants.OJ_CURRENT))
+ refDefinition = refDefinition.substring(0, equalSignIdx) + " (+)"
+ + refDefinition.substring(equalSignIdx);
+ else if (nvl(joinType).equals(AppConstants.OJ_JOINED))
+ refDefinition = refDefinition + " (+)";
+ } else {
+ // Joined table is on the left side
+ if (nvl(joinType).equals(AppConstants.OJ_CURRENT))
+ refDefinition = refDefinition + " (+)";
+ else if (nvl(joinType).equals(AppConstants.OJ_JOINED))
+ refDefinition = refDefinition.substring(0, equalSignIdx) + " (+)"
+ + refDefinition.substring(equalSignIdx);
+ }
+
+ curTable.setRefDefinition(refDefinition);
+ } // setOuterJoin
+
+ public void addDataSourceType(ObjectFactory objFactory, String tableId, String tableName,
+ String tablePK, String displayName, String refTableId, String refDefinition,
+ String comment) throws RaptorException {
+ DataSourceType dst = objFactory.createDataSourceType();
+
+ dst.setTableId(tableId);
+ dst.setTableName(tableName);
+ dst.setTablePK(tablePK);
+ dst.setDisplayName(displayName);
+ if (nvl(refTableId).length() > 0)
+ dst.setRefTableId(refTableId);
+ if (nvl(refDefinition).length() > 0)
+ dst.setRefDefinition(refDefinition);
+ if (nvl(comment).length() > 0)
+ dst.setComment(comment);
+
+ DataColumnList dataColumnList = objFactory.createDataColumnList();
+ dst.setDataColumnList(dataColumnList);
+
+ getDataSourceList().getDataSource().add(dst);
+
+ resetCache(true);
+ } // addDataSourceType
+
+ public void deleteDataSourceType(String tableId) {
+ super.deleteDataSourceType(tableId);
+ } // deleteDataSourceType
+
+ public String getUniqueColumnId(String colName) {
+ String colId = "";
+
+ int colIdN = getAllColumns().size() + 1;
+ do {
+ colId = colName.substring(0, 2).toLowerCase() + (colIdN++);
+ } while (getColumnById(colId) != null);
+
+ return colId;
+ } // getUniqueColumnId
+
+ public DataColumnType addDataColumnType(ObjectFactory objFactory, String colId,
+ String tableId, // Table to which the new column belongs
+ String dbColName, String crossTabValue, String colName, String displayName,
+ int displayWidth, String displayAlignment, int orderSeq, boolean visible,
+ boolean calculated, String colType, String colFormat, boolean groupBreak,
+ int orderBySeq, String orderByAscDesc, String displayTotal, String colOnChart,
+ int chartSeq, String drillDownType, String drillDownURL, String drillDownParams,
+ String semaphoreId, String comment) throws RaptorException {
+ DataColumnType dct = null;
+ dct = objFactory.createDataColumnType();
+
+ dct.setColId(colId);
+ dct.setTableId(tableId);
+ dct.setDbColName(dbColName);
+ if (nvl(crossTabValue).length() > 0)
+ dct.setCrossTabValue(crossTabValue);
+ dct.setColName(colName);
+ dct.setDisplayName(displayName);
+ if (displayWidth > 0)
+ dct.setDisplayWidth(displayWidth);
+ if (nvl(displayAlignment).length() > 0)
+ dct.setDisplayAlignment(displayAlignment);
+ if (orderSeq > 0)
+ dct.setOrderSeq(orderSeq);
+ else
+ dct.setOrderSeq(getAllColumns().size() + 1);
+ dct.setVisible(visible);
+ dct.setCalculated(calculated);
+ // dct.setColType(colType);
+ if (nvl(colFormat).length() > 0)
+ dct.setColFormat(colFormat);
+ dct.setGroupBreak(groupBreak);
+ if (orderBySeq > 0)
+ dct.setOrderBySeq(orderBySeq);
+ if (nvl(orderByAscDesc).length() > 0)
+ dct.setOrderByAscDesc(orderByAscDesc);
+ if (nvl(displayTotal).length() > 0)
+ dct.setDisplayTotal(displayTotal);
+ if (nvl(colOnChart).length() > 0)
+ dct.setColOnChart(colOnChart);
+ if (chartSeq > 0)
+ dct.setChartSeq(chartSeq);
+ if (nvl(drillDownType).length() > 0)
+ dct.setDrillDownType(drillDownType);
+ if (nvl(drillDownURL).length() > 0)
+ dct.setDrillDownURL(drillDownURL);
+ if (nvl(drillDownParams).length() > 0)
+ dct.setDrillDownParams(drillDownParams);
+ if (nvl(semaphoreId).length() > 0)
+ dct.setSemaphoreId(semaphoreId);
+ if (nvl(comment).length() > 0)
+ dct.setComment(comment);
+
+ dct.setDbColType(colType);
+ adjustColumnType(dct);
+
+ // ColFilterList colFilterList = objFactory.createColFilterList();
+ // dct.setColFilterList(colFilterList);
+
+ getTableById(tableId).getDataColumnList().getDataColumn().add(dct);
+
+ resetCache(false);
+
+ return dct;
+ } // addDataColumnType
+
+ public void deleteDataColumnType(String colId) {
+ int colOrder = getColumnById(colId).getOrderSeq();
+
+ List dcList = getColumnTableById(colId).getDataColumnList().getDataColumn();
+ for (Iterator iterC = dcList.iterator(); iterC.hasNext();) {
+ DataColumnType dct = (DataColumnType) iterC.next();
+
+ if (dct.getColId().equals(colId) && dct.getOrderSeq() == colOrder)
+ iterC.remove();
+ else if (dct.getOrderSeq() > colOrder)
+ dct.setOrderSeq(dct.getOrderSeq() - 1);
+ } // for
+
+ if (getFormFieldList() != null)
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if (nvl(fft.getColId()).equals(colId)) {
+ fft.setColId("");
+ fft.setFieldType(FormField.FFT_TEXT);
+ if (nvl(fft.getDefaultValue()).equals(AppConstants.FILTER_MAX_VALUE)
+ || nvl(fft.getDefaultValue())
+ .equals(AppConstants.FILTER_MIN_VALUE))
+ fft.setDefaultValue("");
+ } // if
+ } // for
+
+ resetCache(false);
+ resetColumnOrderValues();
+ } // deleteDataColumnType
+
+ public void shiftColumnOrderUp(String colId) {
+ List reportCols = getAllColumns();
+ for (int i = 0; i < reportCols.size(); i++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(i);
+
+ if (dct.getColId().equals(colId) && (i > 0)) {
+ DataColumnType dctUp = (DataColumnType) reportCols.get(i - 1);
+ dctUp.setOrderSeq(dctUp.getOrderSeq() + 1);
+ dct.setOrderSeq(dct.getOrderSeq() - 1);
+ break;
+ } // if
+ } // for
+
+ Collections.sort(reportCols, new OrderSeqComparator());
+ resetCache(true);
+ resetColumnOrderValues();
+ } // shiftColumnOrderUp
+
+ public void shiftColumnOrderDown(String colId) {
+ List reportCols = getAllColumns();
+ for (int i = 0; i < reportCols.size(); i++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(i);
+
+ if (dct.getColId().equals(colId) && (i < reportCols.size() - 1)) {
+ DataColumnType dctDown = (DataColumnType) reportCols.get(i + 1);
+ dctDown.setOrderSeq(dctDown.getOrderSeq() - 1);
+ dct.setOrderSeq(dct.getOrderSeq() + 1);
+ break;
+ } // if
+ } // for
+
+ Collections.sort(reportCols, new OrderSeqComparator());
+ resetCache(true);
+ resetColumnOrderValues();
+ } // shiftColumnOrderDown
+
+ public void resetColumnOrderValues() {
+ List reportCols = getAllColumns();
+
+ int colOrder = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ dct.setOrderSeq(++colOrder);
+ } // for
+
+ Collections.sort(reportCols, new OrderSeqComparator());
+ } // resetColumnOrderValues
+
+ public void addColFilterType(ObjectFactory objFactory, String colId, // Column
+ // to
+ // which
+ // the
+ // new
+ // filter
+ // belongs
+ String joinCondition, String openBrackets, String expression, String argType,
+ String argValue, String closeBrackets, String comment) throws RaptorException {
+ ColFilterType cft = objFactory.createColFilterType();
+
+ cft.setColId(colId);
+ cft.setJoinCondition(nvl(joinCondition, "AND"));
+ if (nvl(openBrackets).length() > 0)
+ cft.setOpenBrackets(openBrackets);
+ cft.setExpression(expression);
+ if (nvl(argType).length() > 0)
+ cft.setArgType(argType);
+ if (nvl(argValue).length() > 0)
+ cft.setArgValue(argValue);
+ if (nvl(closeBrackets).length() > 0)
+ cft.setCloseBrackets(closeBrackets);
+ if (nvl(comment).length() > 0)
+ cft.setComment(comment);
+
+ DataColumnType dct = getColumnById(colId);
+ if (dct != null) {
+ if (dct.getColFilterList() == null)
+ dct.setColFilterList(objFactory.createColFilterList());
+
+ cft.setFilterSeq(dct.getColFilterList().getColFilter().size());
+ dct.getColFilterList().getColFilter().add(cft);
+ } // if
+
+ resetCache(true);
+ } // addColFilterType
+
+ public void removeColumnFilter(String colId, int filterPos) {
+ DataColumnType dct = getColumnById(colId);
+
+ if (dct.getColFilterList() != null)
+ try {
+ dct.getColFilterList().getColFilter().remove(filterPos);
+ } catch (IndexOutOfBoundsException e) {
+ }
+
+ resetCache(true);
+ } // removeColumnFilter
+
+ public void addColumnSort(String colId, String ascDesc) {
+ addColumnSort(colId, ascDesc, -1);
+ } // addColumnSort
+
+ public void addColumnSort(String colId, String ascDesc, int sortOrder) {
+ if (sortOrder <= 0) {
+ sortOrder = 1;
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();)
+ if (((DataColumnType) iter.next()).getOrderBySeq() > 0)
+ sortOrder++;
+ } // if
+
+ DataColumnType dct = getColumnById(colId);
+ dct.setOrderBySeq(sortOrder);
+ dct.setOrderByAscDesc(ascDesc);
+
+ resetCache(true);
+ } // addColumnSort
+
+ public void removeColumnSort(String colId) {
+ DataColumnType dct = getColumnById(colId);
+ int sortOrder = dct.getOrderBySeq();
+
+ dct.setOrderBySeq(0);
+ dct.setOrderByAscDesc(null);
+
+ if (sortOrder > 0) {
+ List reportCols = getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct2 = (DataColumnType) iter.next();
+
+ if (dct2.getOrderBySeq() > sortOrder)
+ dct2.setOrderBySeq(dct2.getOrderBySeq() - 1);
+ } // for
+ } // if
+
+ resetCache(true);
+ } // removeColumnSort
+
+ public void shiftColumnSortUp(String colId) {
+ List reportCols = getAllColumns();
+ Collections.sort(reportCols, new OrderBySeqComparator());
+
+ for (int i = 0; i < reportCols.size(); i++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(i);
+
+ if (dct.getColId().equals(colId) && (dct.getOrderBySeq() > 0)) {
+ DataColumnType dctUp = (DataColumnType) reportCols.get(i - 1);
+ if (dctUp.getOrderBySeq() > 0)
+ dctUp.setOrderBySeq(dctUp.getOrderBySeq() + 1);
+ dct.setOrderBySeq(dct.getOrderBySeq() - 1);
+ break;
+ } // if
+ } // for
+
+ Collections.sort(reportCols, new OrderSeqComparator());
+ resetCache(true);
+ } // shiftColumnSortUp
+
+ public void shiftColumnSortDown(String colId) {
+ List reportCols = getAllColumns();
+ Collections.sort(reportCols, new OrderBySeqComparator());
+
+ for (int i = 0; i < reportCols.size(); i++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(i);
+
+ if (dct.getColId().equals(colId) && (dct.getOrderBySeq() > 0)) {
+ DataColumnType dctDown = (DataColumnType) reportCols.get(i + 1);
+ if (dctDown.getOrderBySeq() > 0)
+ dctDown.setOrderBySeq(dctDown.getOrderBySeq() - 1);
+ dct.setOrderBySeq(dct.getOrderBySeq() + 1);
+ break;
+ } // if
+ } // for
+
+ Collections.sort(reportCols, new OrderSeqComparator());
+ resetCache(true);
+ } // shiftColumnSortDown
+
+ /** ************************************************************************************************* */
+
+ public String generateNewSemaphoreId() {
+ if (getSemaphoreList() == null)
+ return "sem1";
+
+ String semaphoreId = null;
+ boolean idExists = true;
+ for (int i = 1; idExists; i++) {
+ semaphoreId = "sem" + i;
+ idExists = false;
+ for (Iterator iter = getSemaphoreList().getSemaphore().iterator(); iter.hasNext();)
+ if (semaphoreId.equals(((SemaphoreType) iter.next()).getSemaphoreId())) {
+ idExists = true;
+ break;
+ }
+ } // for
+
+ return semaphoreId;
+ } // generateNewSemaphoreId
+
+ public SemaphoreType addSemaphore(ObjectFactory objFactory, SemaphoreType semaphoreType)
+ throws RaptorException {
+ SemaphoreType sem = null;
+ try {
+ if (getSemaphoreList() == null)
+ setSemaphoreList(objFactory.createSemaphoreList());
+
+ String semaphoreName = null;
+ boolean nameExists = true;
+ for (int i = 1; nameExists; i++) {
+ semaphoreName = semaphoreType.getSemaphoreName() + ((i > 1) ? (" v" + i) : "");
+ nameExists = false;
+ for (Iterator iter2 = getSemaphoreList().getSemaphore().iterator(); iter2
+ .hasNext();)
+ if (semaphoreName.equals(((SemaphoreType) iter2.next()).getSemaphoreName())) {
+ nameExists = true;
+ break;
+ }
+ } // for
+
+ sem = cloneSemaphoreType(objFactory, semaphoreType);
+ getSemaphoreList().getSemaphore().add(sem);
+
+ sem.setSemaphoreId(generateNewSemaphoreId());
+ sem.setSemaphoreName(semaphoreName);
+ } catch (JAXBException ex) {
+ throw new RaptorException(ex.getMessage(), ex.getCause());
+ }
+
+ return sem;
+ } // addSemaphore
+
+ public SemaphoreType addSemaphoreType(ObjectFactory objFactory, String semaphoreName,
+ String semaphoreType, String comment) throws RaptorException {
+ SemaphoreType sem = null;
+ if (getSemaphoreList() == null)
+ setSemaphoreList(objFactory.createSemaphoreList());
+
+ sem = objFactory.createSemaphoreType();
+ getSemaphoreList().getSemaphore().add(sem);
+
+ sem.setSemaphoreId(generateNewSemaphoreId());
+ sem.setSemaphoreName(semaphoreName);
+ sem.setSemaphoreType(nvl(semaphoreType));
+ if (nvl(comment).length() > 0)
+ sem.setComment(comment);
+
+ FormatList formatList = objFactory.createFormatList();
+ sem.setFormatList(formatList);
+ return sem;
+ } // addSemaphoreType
+
+
+ public String getNextIdForJavaScriptElement (ObjectFactory objFactory, String fieldId) throws RaptorException {
+ String id = "";
+ JavascriptItemType jit = null;
+ int incr = 0;
+ if (getJavascriptList() == null) {
+ setJavascriptList(objFactory.createJavascriptList());
+ return fieldId + "|1";
+ } else {
+ if(getJavascriptList().getJavascriptItem().iterator().hasNext()) {
+ for (Iterator iter = getJavascriptList().getJavascriptItem().iterator(); iter.hasNext();) {
+ jit = (JavascriptItemType) iter.next();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("^^^^^JAVASCRIPTITEMTYPE " + jit.getFieldId() + " " + fieldId + " " + id));
+ if(nvl(jit.getFieldId()).length()>0 && jit.getFieldId().equals(fieldId)) {
+ ++incr;
+ }
+ } // for
+ return fieldId + "|"+incr;
+ } else {
+ return fieldId + "|1";
+ }
+
+ }
+ //return null;
+ }
+
+ public JavascriptItemType addJavascriptType(ObjectFactory objFactory, String id) throws RaptorException {
+ JavascriptItemType javascriptItemType = null;
+ int flag = 0; // checking whether id existing in the list
+ if (getJavascriptList() == null) {
+ setJavascriptList(objFactory.createJavascriptList());
+ javascriptItemType = objFactory.createJavascriptItemType();
+ getJavascriptList().getJavascriptItem().add(javascriptItemType);
+ return javascriptItemType;
+ } else {
+
+ for (Iterator iter = getJavascriptList().getJavascriptItem().iterator(); iter.hasNext();) {
+ javascriptItemType = (JavascriptItemType)iter.next();
+ if(javascriptItemType.getId().equals(id) && !id.startsWith("-1")) {
+ flag = 1;
+ break;
+ }
+ }
+ if(flag == 1) return javascriptItemType;
+ else {
+ javascriptItemType = objFactory.createJavascriptItemType();
+ getJavascriptList().getJavascriptItem().add(javascriptItemType);
+ return javascriptItemType;
+ }
+ }
+
+ } // addSemaphoreType
+
+ public boolean deleteJavascriptType(String id) throws RaptorException {
+ JavascriptItemType javascriptType = null;
+ if (getJavascriptList() == null)
+ return true;
+ for (Iterator iter = getJavascriptList().getJavascriptItem().iterator(); iter.hasNext();) {
+ javascriptType = (JavascriptItemType)iter.next();
+ if(javascriptType.getId().equals(id)) {
+ iter.remove();
+ return true;
+ }
+ }
+ return false;
+ } // addSemaphoreType
+
+ public static FormatType addEmptyFormatType(ObjectFactory objFactory,
+ SemaphoreType semaphore) throws RaptorException {
+ FormatType fmt = null;
+ fmt = objFactory.createFormatType();
+ semaphore.getFormatList().getFormat().add(fmt);
+
+ String formatId = null;
+ boolean idExists = true;
+ for (int i = 1; idExists; i++) {
+ formatId = semaphore.getSemaphoreId() + "_fmt" + i;
+ idExists = false;
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter
+ .hasNext();)
+ if (formatId.equals(((FormatType) iter.next()).getFormatId())) {
+ idExists = true;
+ break;
+ }
+ } // for
+ fmt.setFormatId(formatId);
+ return fmt;
+ } // addEmptyFormatType
+
+ public static void deleteFormatType(SemaphoreType semaphore, String formatId) {
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter.hasNext();)
+ if (formatId.equals(((FormatType) iter.next()).getFormatId())) {
+ iter.remove();
+ break;
+ } // if
+ } // deleteFormatType
+
+ public FormFieldType addFormFieldType(ObjectFactory objFactory, String fieldName,
+ String colId, String fieldType, String validationType, String mandatory,
+ String defaultValue, String fieldSQL, String comment, Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL) throws RaptorException {
+ FormFieldType fft = null;
+ fft = objFactory.createFormFieldType();
+
+ fft.setFieldName(fieldName);
+ fft.setColId(colId);
+ fft.setFieldType(fieldType);
+ fft.setValidationType(validationType);
+ fft.setMandatory(nvl(mandatory, "N"));
+ fft.setDefaultValue(nvl(defaultValue));
+ fft.setOrderBySeq((getFormFieldList() == null) ? 1 : getFormFieldList().getFormField()
+ .size() + 1);
+ fft.setFieldSQL(fieldSQL);
+ //fft.setRangeStartDate(rangeStartDate);
+ //fft.setRangeEndDate(rangeEndDate);
+
+ try {
+ fft.setRangeStartDate(DatatypeFactory.newInstance()
+ .newXMLGregorianCalendar(rangeStartDate.YEAR, rangeStartDate.MONTH, rangeStartDate.DAY_OF_WEEK, rangeStartDate.HOUR, rangeStartDate.MINUTE, rangeStartDate.SECOND, rangeStartDate.MILLISECOND, rangeStartDate.ZONE_OFFSET));
+ fft.setRangeStartDate(DatatypeFactory.newInstance()
+ .newXMLGregorianCalendar(rangeEndDate.YEAR, rangeEndDate.MONTH, rangeEndDate.DAY_OF_WEEK, rangeEndDate.HOUR, rangeEndDate.MINUTE, rangeEndDate.SECOND, rangeEndDate.MILLISECOND, rangeEndDate.ZONE_OFFSET));
+ /*currField.setRangeEndDate(DatatypeFactory.newInstance()
+ .newXMLGregorianCalendar(end));*/
+ } catch (DatatypeConfigurationException ex) {
+
+ }
+
+ fft.setRangeStartDateSQL(rangeStartDateSQL);
+ fft.setRangeEndDateSQL(rangeEndDateSQL);
+ if (nvl(comment).length() > 0)
+ fft.setComment(comment);
+
+ String fieldId = null;
+ boolean idExists = true;
+ for (int i = 1; idExists; i++) {
+ fieldId = "ff" + i;
+ idExists = false;
+ if (getFormFieldList() != null)
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter
+ .hasNext();)
+ if (fieldId.equals(((FormFieldType) iter.next()).getFieldId())) {
+ idExists = true;
+ break;
+ }
+ } // for
+ fft.setFieldId(fieldId);
+
+ if (getFormFieldList() == null) {
+ FormFieldList formFieldList = objFactory.createFormFieldList();
+ setFormFieldList(formFieldList);
+ }
+
+ getFormFieldList().getFormField().add(fft);
+ return fft;
+ } // addFormFieldType
+
+ //addCustomizedTextForParameters
+ public void addCustomizedTextForParameters(String comment) throws RaptorException {
+ getFormFieldList().setComment(comment);
+ }
+
+ public FormFieldType addFormFieldBlank(ObjectFactory objFactory) throws RaptorException {
+ FormFieldType fft = null;
+ fft = objFactory.createFormFieldType();
+
+ fft.setFieldName("BLANK");
+ fft.setColId("bk");
+ fft.setFieldType(FormField.FFT_BLANK);
+ fft.setOrderBySeq((getFormFieldList() == null) ? 1 : getFormFieldList().getFormField()
+ .size() + 1);
+ String fieldId = null;
+ boolean idExists = true;
+ for (int i = 1; idExists; i++) {
+ fieldId = "ff" + i;
+ idExists = false;
+ if (getFormFieldList() != null)
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter
+ .hasNext();)
+ if (fieldId.equals(((FormFieldType) iter.next()).getFieldId())) {
+ idExists = true;
+ break;
+ }
+ } // for
+ fft.setFieldId(fieldId);
+
+ if (getFormFieldList() == null) {
+ FormFieldList formFieldList = objFactory.createFormFieldList();
+ setFormFieldList(formFieldList);
+ }
+
+ getFormFieldList().getFormField().add(fft);
+ return fft;
+ } // addFormFieldBlank
+
+ public void replaceFormFieldReferences(String fieldName, String replaceWith) {
+ if (fieldName.equals(replaceWith))
+ return;
+
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.isCalculated() && dct.getColName().indexOf(fieldName) >= 0)
+ dct.setColName(Utils.replaceInString(dct.getColName(), fieldName, nvl(
+ replaceWith, "NULL")));
+
+ if (dct.getColFilterList() != null)
+ for (Iterator iter2 = dct.getColFilterList().getColFilter().iterator(); iter2
+ .hasNext();) {
+ ColFilterType cft = (ColFilterType) iter2.next();
+
+ if (nvl(cft.getArgType()).equals(AppConstants.AT_FORM)
+ && nvl(cft.getArgValue()).equals(fieldName))
+ cft.setArgValue(replaceWith);
+ } // for
+ } // for
+ } // replaceFormFieldReferences
+
+ public void deleteFormField(String fieldId) {
+ String fieldDisplayName = null;
+
+ int orderBySeq = Integer.MAX_VALUE;
+ if (getFormFieldList() != null)
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+
+ if (fieldId.equals(fft.getFieldId())) {
+ //orderBySeq = fft.getOrderBySeq();
+ fieldDisplayName = getFormFieldDisplayName(fft);
+ iter.remove();
+ } else if (fft.getOrderBySeq()!=null && (fft.getOrderBySeq().intValue() > orderBySeq))
+ fft.setOrderBySeq(fft.getOrderBySeq() - 1);
+ } // for
+
+ if (fieldDisplayName != null)
+ replaceFormFieldReferences(fieldDisplayName, "");
+ } // deleteFormField
+
+ public void shiftFormFieldUp(String fieldId) {
+ if (getFormFieldList() == null)
+ return;
+
+ for (int i = 0; i < getFormFieldList().getFormField().size(); i++) {
+ FormFieldType fft = (FormFieldType) getFormFieldList().getFormField().get(i);
+
+ if (fft.getFieldId().equals(fieldId) && (i > 0)) {
+ FormFieldType prevFft = (FormFieldType) getFormFieldList().getFormField().get(
+ i - 1);
+ prevFft.setOrderBySeq(prevFft.getOrderBySeq() + 1);
+ fft.setOrderBySeq((fft.getOrderBySeq() == null)?0:fft.getOrderBySeq() - 1);
+
+ getFormFieldList().getFormField().remove(i);
+ getFormFieldList().getFormField().add(i - 1, fft);
+ return;
+ } // if
+ } // for
+ } // shiftFormFieldUp
+
+ public void shiftFormFieldDown(String fieldId) {
+ if (getFormFieldList() == null)
+ return;
+
+ for (int i = 0; i < getFormFieldList().getFormField().size(); i++) {
+ FormFieldType fft = (FormFieldType) getFormFieldList().getFormField().get(i);
+
+ if (fft.getFieldId().equals(fieldId)
+ && (i < getFormFieldList().getFormField().size() - 1)) {
+ FormFieldType nextFft = (FormFieldType) getFormFieldList().getFormField().get(
+ i + 1);
+ nextFft.setOrderBySeq((nextFft.getOrderBySeq() == null)?0:nextFft.getOrderBySeq() - 1);
+ fft.setOrderBySeq((fft.getOrderBySeq() == null)?0:fft.getOrderBySeq() + 1);
+
+ getFormFieldList().getFormField().remove(i + 1);
+ getFormFieldList().getFormField().add(i, nextFft);
+ return;
+ } // if
+ } // for
+ } // shiftFormFieldDown
+
+ public static void addFormFieldPredefinedValue(ObjectFactory objFactory,
+ FormFieldType formField, String predefinedValue) throws RaptorException {
+ if (formField.getPredefinedValueList() == null) {
+ PredefinedValueList predefinedValueList = objFactory.createPredefinedValueList();
+ formField.setPredefinedValueList(predefinedValueList);
+ } // if
+
+ if (predefinedValue.length() > 0) {
+ formField.getPredefinedValueList().getPredefinedValue().add(predefinedValue);
+ Collections.sort(formField.getPredefinedValueList().getPredefinedValue());
+ } // if
+ } // addFormFieldPredefinedValue
+
+ public static void deleteFormFieldPredefinedValue(FormFieldType formField,
+ String predefinedValue) {
+ if (formField != null && formField.getPredefinedValueList() != null
+ && predefinedValue.length() > 0)
+ for (Iterator iter = formField.getPredefinedValueList().getPredefinedValue()
+ .iterator(); iter.hasNext();)
+ if (predefinedValue.equals((String) iter.next())) {
+ iter.remove();
+ break;
+ } // if
+ } // deleteFormFieldPredefinedValue
+
+ /** ************************************************************************************************* */
+
+ private int curSQLParsePos = 0;
+
+ private String getNextSQLParseToken(String sql, boolean updateParsePos) {
+ int braketCount = 0;
+ boolean isInsideQuote = false;
+ StringBuffer nextToken = new StringBuffer();
+ for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
+ char ch = sql.charAt(idxNext);
+
+ if (Character.isWhitespace(ch) || ch == ',') {
+ if (ch == ',')
+ nextToken.append(ch);
+
+ if (nextToken.length() == 0)
+ continue;
+ else if (braketCount == 0 && (!isInsideQuote)) {
+ if (updateParsePos)
+ curSQLParsePos = idxNext + ((ch == ',') ? 1 : 0);
+ break;
+ } else if (ch != ',' && nextToken.charAt(nextToken.length() - 1) != ' ')
+ nextToken.append(' ');
+ } else {
+ nextToken.append(ch);
+
+ if (ch == '(' || ch == '[')
+ braketCount++;
+ else if (ch == ')' || ch == ']')
+ braketCount--;
+ else if (ch == '\''/* ||ch=='\"' */)
+ isInsideQuote = (!isInsideQuote);
+ } // else
+ } // for
+
+ return nextToken.toString();
+ } // getNextSQLParseToken
+
+ private boolean isParseSQLColID(String token) {
+ if (nvl(token).length() == 0)
+ return false;
+
+ for (int i = 0; i < token.length(); i++) {
+ char ch = token.charAt(i);
+
+ if (i == 0 && ch == '_')
+ return false;
+
+ if (!(Character.isLetterOrDigit(ch) || ch == '_'))
+ return false;
+ } // for
+
+ return true;
+ } // isParseSQLColID
+
+ private DataColumnType getParseSQLDataColumn(String sqlExpression, String colId,
+ StringBuffer parsedSQL, Vector updatedReportCols, boolean isCYMBALScript) throws RaptorException {
+ DataColumnType dct = null;
+
+ if (colId != null) {
+ if (!isParseSQLColID(colId))
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "["
+ + colId
+ + "] must either be a valid column id consisting only of letters, numbers, and underscores, or there must be a comma in front of it.");
+
+ dct = getColumnById(colId);
+ } else {
+ // Getting unique column id
+ colId = "";
+ int colIdN = 0;
+ for (int i = 0; (i < sqlExpression.length()) && (colIdN < 2); i++)
+ if (Character.isLetter(sqlExpression.charAt(i))) {
+ colId += sqlExpression.toLowerCase().charAt(i);
+ colIdN++;
+ } // if
+
+ colIdN = getAllColumns().size() + updatedReportCols.size();
+ for (boolean idAlreadyUsed = true; idAlreadyUsed; colIdN++) {
+ String newColId = colId + colIdN;
+ idAlreadyUsed = false;
+
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();)
+ if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
+ idAlreadyUsed = true;
+ break;
+ }
+
+ if (!idAlreadyUsed)
+ for (Iterator iter = updatedReportCols.iterator(); iter.hasNext();)
+ if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
+ idAlreadyUsed = true;
+ break;
+ }
+ } // for
+
+ colId += (colIdN - 1);
+ } // else
+
+ if (dct == null) {
+ dct = (new ObjectFactory()).createDataColumnType();
+ dct.setColId(colId);
+ dct.setDisplayWidth(10);
+ dct.setDisplayAlignment("Left");
+ dct.setVisible(true);
+ dct.setGroupBreak(false); // ???
+ if(!isCYMBALScript) {
+ boolean isValidIdentifier = Character.isLetterOrDigit(sqlExpression.charAt(0));
+ for (int i = 0; i < sqlExpression.length(); i++)
+ if (!(Character.isLetterOrDigit(sqlExpression.charAt(i))
+ || (sqlExpression.charAt(i) == '_') || (sqlExpression.charAt(i) == '$'))) {
+ isValidIdentifier = false;
+ break;
+ } // if
+
+ if (isValidIdentifier) {
+ dct.setDisplayName(sqlExpression);
+ } else {
+ dct.setDisplayName(colId);
+ } // else
+ } else dct.setDisplayName(colId);
+ } // if
+ if(!isCYMBALScript)
+ sqlExpression = sqlExpression.replaceAll(", '", ",'");
+ dct.setDbColName(sqlExpression);
+ dct.setColName(sqlExpression);
+ dct.setCalculated(true);
+ dct.setColType(AppConstants.CT_CHAR);
+ dct.setDbColType(AppConstants.CT_CHAR);
+ adjustColumnType(dct); // ???
+ if(!isCYMBALScript) {
+ if (parsedSQL.toString().equals("SELECT ")
+ || parsedSQL.toString().equals("SELECT DISTINCT "))
+ parsedSQL.append("\n\t");
+ else
+ parsedSQL.append(", \n\t");
+ parsedSQL.append(sqlExpression);
+ parsedSQL.append(" ");
+ parsedSQL.append(colId);
+ }
+
+ return dct;
+ } // getParseSQLDataColumn
+
+ public void parseReportSQL(String sql) throws RaptorException {
+ StringBuffer parsedSQL = new StringBuffer();
+
+ Vector updatedReportCols = new Vector();
+
+ curSQLParsePos = 0;
+ int lastParsePos = curSQLParsePos;
+ String lastToken = null;
+ String nextToken = getNextSQLParseToken(sql, true);
+
+ String dbInfo = getDBInfo();
+ boolean isCYMBALScript = false;
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ String dbType = remDbInfo.getDBType(dbInfo);
+ if (dbType.equals("DAYTONA") && !(nextToken.toUpperCase().equals("SELECT"))) {
+ isCYMBALScript = true;
+ }
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if ( isCYMBALScript == false ) {
+ while (nextToken.length() > 0) {
+ if (parsedSQL.length() == 0) {
+ if (nextToken.toUpperCase().equals("SELECT"))
+ parsedSQL.append("SELECT ");
+ else
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "The SQL must start with the SELECT keyword.");
+ } else if (nextToken.toUpperCase().equals("DISTINCT")
+ && parsedSQL.toString().equals("SELECT ")) {
+ parsedSQL.append("DISTINCT ");
+ } else if (nextToken.equals("*")
+ && (parsedSQL.toString().equals("SELECT ") || parsedSQL.toString().equals(
+ "SELECT DISTINCT "))) {
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "You cannot use \"SELECT *\". Please specify select columns/expressions.");
+ } else if (nextToken.toUpperCase().equals("FROM")) {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, null, parsedSQL,
+ updatedReportCols, false));
+ lastToken = null;
+ }
+
+ parsedSQL.append(" \n");
+ while (lastParsePos < sql.length()
+ && Character.isWhitespace(sql.charAt(lastParsePos)))
+ lastParsePos++;
+ parsedSQL.append(sql.substring(lastParsePos));
+ break;
+ } else {
+ if (nextToken.charAt(nextToken.length() - 1) == ',') {
+ // The token ends with ,
+ nextToken = nextToken.substring(0, nextToken.length() - 1);
+
+ if (nextToken.length() == 0) {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, null,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } // else just comma => ignore it
+ } else {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } else
+ updatedReportCols.add(getParseSQLDataColumn(nextToken, null,
+ parsedSQL, updatedReportCols, false));
+ }
+ } else {
+ // The token doesn't end with ,
+ if (lastToken == null)
+ lastToken = nextToken;
+ else {
+ String token = getNextSQLParseToken(sql, false);
+ if (!token.toUpperCase().equals("FROM"))
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "|FROM keyword or a comma expected after [" + nextToken
+ + "].");
+
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } // else
+ } // else
+ } // else
+
+ lastParsePos = curSQLParsePos;
+ nextToken = getNextSQLParseToken(sql, true);
+ } // while
+ } else { // if CYMBAL Script
+ curSQLParsePos = 0;
+ Pattern re = null;
+ Matcher matcher = null;
+ String extracted = null;
+ nextToken = getNextCYMBALSQLParseToken(sql,true);
+ while (nextToken.length() > 0) {
+ if (lastToken == null) lastToken = nextToken;
+
+ if( lastToken.toUpperCase().startsWith("DO DISPLAY")) {
+ re = Pattern.compile("each(.*)\\[.(.*?)\\]"); //\\[(.*?)\\]
+ matcher = re.matcher(nextToken);
+ if (matcher.find()) {
+ extracted = matcher.group();
+ re = Pattern.compile("\\[(.*?)\\]");
+ matcher = re.matcher(nextToken);
+ if(matcher.find()) {
+ extracted = matcher.group();
+ extracted = extracted.substring(1,extracted.length()-1);
+ StringTokenizer sToken = new StringTokenizer(extracted, ",");
+ while(sToken.hasMoreTokens()) {
+ String str1 = sToken.nextToken().trim().substring(1);
+ updatedReportCols.add(getParseSQLDataColumn("", str1,
+ new StringBuffer(""), updatedReportCols, true));
+ }
+ }
+
+ }
+
+ }
+ lastToken = nextToken;
+ nextToken = getNextCYMBALSQLParseToken(sql, true);
+ }
+
+ }
+ if (updatedReportCols.size() == 0)
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "The SQL statement must have at least one column in the SELECT clause.");
+ if (getDataSourceList().getDataSource().size() == 0)
+ addDataSourceType(new ObjectFactory(), "du0", "DUAL", "", "DUAL", null, null, null);
+ DataSourceType dst = (DataSourceType) getDataSourceList().getDataSource().get(0);
+ dst.getDataColumnList().getDataColumn().clear();
+
+ for (int i = 0; i < updatedReportCols.size(); i++) {
+ DataColumnType dct = (DataColumnType) updatedReportCols.get(i);
+ dct.setTableId(dst.getTableId());
+ dct.setOrderSeq(i + 1);
+ dst.getDataColumnList().getDataColumn().add(dct);
+ } // for
+ setReportSQL(parsedSQL.toString());
+ resetCache(false);
+ } // parseReportSQL
+
+ private String getNextCYMBALSQLParseToken(String sql, boolean updateParsePos) {
+ int braketCount = 0;
+ boolean isInsideQuote = false;
+ StringBuffer nextToken = new StringBuffer();
+ for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
+ char ch = sql.charAt(idxNext);
+
+ if (ch!='\n') {
+ nextToken.append(ch);
+ if (updateParsePos)
+ curSQLParsePos = idxNext;
+ }
+ else {
+ curSQLParsePos = idxNext+1;
+ break;
+ }
+ } // for
+
+ return nextToken.toString();
+ } // getNextSQLParseToken
+
+ public void addChartAdditionalOptions(ObjectFactory objFactory) throws RaptorException {
+ ChartAdditionalOptions chartOptions = objFactory.createChartAdditionalOptions();
+ cr.setChartAdditionalOptions(chartOptions);
+ }
+
+ public void addChartDrillOptions(ObjectFactory objFactory) throws RaptorException {
+ ChartDrillOptions chartOptions = objFactory.createChartDrillOptions();
+ cr.setChartDrillOptions(chartOptions);
+}
+
+ public void addDataminingOptions(ObjectFactory objFactory) throws RaptorException {
+ DataminingOptions dataminingOptions = objFactory.createDataminingOptions();
+ cr.setDataminingOptions(dataminingOptions);
+ }
+ /*public void addChartAdditionalOptions(ObjectFactory objFactory, String chartType, String chartMultiplePieOrder, String chartMultiplePieLabelDisplay,
+ String chartOrientation, String secondaryChartRenderer, String chartDisplay, String legendPosition,
+ String labelAngle) throws RaptorException {
+ try {
+ ChartAdditionalOptions chartOptions = objFactory.createChartAdditionalOptions();
+
+ if (nvl(chartMultiplePieOrder).length() > 0)
+ chartOptions.setChartMultiplePieOrder(chartMultiplePieOrder);
+ if (nvl(chartMultiplePieLabelDisplay).length() > 0)
+ chartOptions.setChartMultiplePieLabelDisplay(chartMultiplePieLabelDisplay);
+ if (nvl(chartOrientation).length() > 0)
+ chartOptions.setChartOrientation(chartOrientation);
+ if (nvl(secondaryChartRenderer).length() > 0)
+ chartOptions.setSecondaryChartRenderer(secondaryChartRenderer);
+ if (nvl(chartDisplay).length() > 0)
+ chartOptions.setChartDisplay(chartDisplay);
+ if (nvl(legendPosition).length() > 0)
+ chartOptions.setLegendPosition(legendPosition);
+ if (nvl(labelAngle).length() > 0)
+ chartOptions.setLabelAngle(labelAngle);
+
+ cr.setChartAdditionalOptions(chartOptions);
+ } catch (JAXBException ex) {
+ throw new RaptorException(ex.getMessage(), ex.getCause());
+ }
+ } // addChartAdditionalOptions*/
+
+
+} // ReportDefinition
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportLogEntry.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportLogEntry.java
new file mode 100644
index 00000000..db69e9d8
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportLogEntry.java
@@ -0,0 +1,89 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class ReportLogEntry extends RaptorObject {
+ private String logTime = null;
+
+ private String userName = null;
+
+ private String action = null;
+
+ private String timeTaken;
+
+ private String runIcon;
+
+ public ReportLogEntry() {
+ super();
+ }
+
+ public ReportLogEntry(String logTime, String userName, String action, String timeTaken, String runIcon) {
+ this();
+
+ setLogTime(logTime);
+ setUserName(userName);
+ setAction(action);
+ setTimeTaken(timeTaken);
+ setRunIcon(runIcon);
+ } // ReportLogEntry
+
+ public String getLogTime() {
+ return logTime;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public String getAction() {
+ return action;
+ }
+
+ public void setLogTime(String logTime) {
+ this.logTime = logTime;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public void setAction(String action) {
+ this.action = action;
+ }
+
+ public String getTimeTaken() {
+ return timeTaken;
+ }
+
+ public void setTimeTaken(String timeTaken) {
+ this.timeTaken = timeTaken;
+ }
+
+ public String getRunIcon() {
+ return runIcon;
+ }
+
+ public void setRunIcon(String runIcon) {
+ this.runIcon = runIcon;
+ }
+
+} // ReportLogEntry
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportMap.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportMap.java
new file mode 100644
index 00000000..450349c7
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportMap.java
@@ -0,0 +1,82 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class ReportMap extends RaptorObject {
+ String markerColor = "";
+ String addressColumn = "";
+ String dataColumn = "";
+ String isMapAllowedYN = "";
+ String addAddressInDataYN = "";
+ List markers = new ArrayList();
+
+ public String getIsMapAllowedYN() {
+ return isMapAllowedYN;
+ }
+ public void setIsMapAllowedYN(String isMapAllowedYN) {
+ this.isMapAllowedYN = isMapAllowedYN;
+ }
+ public ReportMap(String markerColor, String addressColumn, String dataColumn, String isMapAllowed, String addAddressInDataYN){
+ this.setMarkerColor(markerColor);
+ this.setAddressColumn(addressColumn);
+ this.setDataColumn(dataColumn);
+ this.setIsMapAllowedYN(isMapAllowed);
+ this.setAddAddressInDataYN(addAddressInDataYN);
+ }
+ public String getAddressColumn() {
+ return addressColumn;
+ }
+ public void setAddressColumn(String addressColumn) {
+ this.addressColumn = addressColumn;
+ }
+ public String getDataColumn() {
+ return dataColumn;
+ }
+ public void setDataColumn(String dataColumn) {
+ this.dataColumn = dataColumn;
+ }
+ public String getMarkerColor() {
+ return markerColor;
+ }
+ public void setMarkerColor(String markerColor) {
+ this.markerColor = markerColor;
+ }
+ public List getMarkers() {
+ return markers;
+ }
+ public void setMarkers(List markers) {
+ this.markers = markers;
+ }
+ public String getAddAddressInDataYN() {
+ return addAddressInDataYN;
+ }
+ public void setAddAddressInDataYN(String addAddressInDataYN) {
+ this.addAddressInDataYN = addAddressInDataYN;
+ }
+
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportSchedule.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportSchedule.java
new file mode 100644
index 00000000..d95c91b5
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/ReportSchedule.java
@@ -0,0 +1,1407 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.io.Writer;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.error.UserDefinedException;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.base.NameComparator;
+import org.openecomp.portalsdk.analytics.model.runtime.FormField;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportParamValues;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class ReportSchedule extends RaptorObject {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportSchedule.class);
+
+
+ private String reportID = null;
+
+ private String scheduleUserID = null;
+
+ private String scheduleID = "";
+
+ private boolean infoUpdated = false;
+
+ private String schedEnabled = "Y";
+
+ private String startDate = "";
+
+ private String endDate = "";
+
+ private String runDate = "";
+
+ private String runHour = "12";
+
+ private String runMin = "00";
+
+ private String runAMPM = "AM";
+
+ private String endHour = "11";
+
+ private String endMin = "45";
+
+ private String endAMPM = "PM";
+
+ private String recurrence = "";
+
+ private String conditional = "N";
+
+ private String conditionSQL = "";
+
+ private String notify_type = "1"; //1 -- link, 2 -- pdf, 4 -- excel, 3 -- csv
+
+ private String encryptMode = "N"; //1 -- link, 2 -- pdf, 4 -- excel, 3 -- csv
+
+ private String attachment = "Y"; //1 -- link, 2 -- pdf, 4 -- excel, 3 -- csv
+
+ private String downloadLimit = "0";
+
+ private String formFields = "";
+
+ private Vector emailToUsers = new Vector();
+
+ private Vector emailToRoles = new Vector();
+
+ public ReportSchedule(String reportID, String scheduleUserID, boolean loadData, HttpServletRequest request) {
+ super();
+
+ setReportID(reportID);
+ setScheduleUserID(scheduleUserID);
+ if(loadData)
+ loadScheduleData(request);
+ else
+ newScheduleData();
+ } // ReportSchedule
+
+ public ReportSchedule(String reportID, String scheduleID, String scheduleUserID, HttpServletRequest request) {
+ super();
+
+ setReportID(reportID);
+ setScheduleID(scheduleID);
+ setScheduleUserID(scheduleUserID);
+ loadScheduleData(request);
+ } // ReportSchedule
+
+ void setReportID(String reportID) {
+ this.reportID = reportID;
+ }
+
+ public String getSchedEnabled() {
+ return schedEnabled;
+ }
+
+ public String getStartDate() {
+ return startDate;
+ }
+
+ public String getEndDate() {
+ return endDate;
+ }
+
+ public String getRunDate() {
+ return runDate;
+ }
+
+ public String getRunHour() {
+ return runHour;
+ }
+
+ public String getRunMin() {
+ return runMin;
+ }
+
+ public String getRunAMPM() {
+ return runAMPM;
+ }
+
+ public String getRecurrence() {
+ return recurrence;
+ }
+
+ public String getConditional() {
+ return conditional;
+ }
+
+ public String getConditionSQL() {
+ return conditionSQL;
+ }
+
+ public List getEmailToUsers() {
+ return emailToUsers;
+ }
+
+ public List getEmailToRoles() {
+ return emailToRoles;
+ }
+
+ /**
+ * @return the downloadLimit
+ */
+ public String getDownloadLimit() {
+ return downloadLimit;
+ }
+
+ /**
+ * @param downloadLimit the downloadLimit to set
+ */
+ public void setDownloadLimit(String downloadLimit) {
+ if(nvl(downloadLimit).equals(this.downloadLimit))
+ return;
+ this.downloadLimit = nvl(downloadLimit,"0");
+ infoUpdated = true;
+ }
+
+ /**
+ * @return the formFields
+ */
+ public String getFormFields() {
+ return formFields;
+ }
+
+ /**
+ * @param formFields the formFields to set
+ */
+ public void setFormFields(String formFields) {
+ if(nvl(formFields).equals(this.formFields))
+ return;
+ this.formFields = nvl(formFields);
+ infoUpdated = true;
+ }
+
+ public String getNotify_type() {
+ return notify_type;
+ }
+
+ /**
+ * @param notify_type the notify_type to set
+ * 1 -- link (default), 2 -- pdf, 4 -- excel
+ */
+ public void setNotify_type(String notify_type) {
+ if(nvl(notify_type).equals(this.notify_type))
+ return;
+ this.notify_type = nvl(notify_type,"1");
+ infoUpdated = true;
+ }
+
+ public void setSchedEnabled(String schedEnabled) {
+ if (nvl(schedEnabled).equals(this.schedEnabled))
+ return;
+ infoUpdated = true;
+ this.schedEnabled = nvl(schedEnabled, "N");
+ }
+
+ public void setStartDate(String startDate) {
+ if (nvl(startDate).equals(this.startDate))
+ return;
+ infoUpdated = true;
+ this.startDate = nvl(startDate);
+ }
+
+ public void setEndDate(String endDate) {
+ if (nvl(endDate).equals(this.endDate))
+ return;
+ infoUpdated = true;
+ this.endDate = nvl(endDate);
+ }
+
+ public void setRunDate(String runDate) {
+ if (nvl(runDate).equals(this.runDate))
+ return;
+ infoUpdated = true;
+ this.runDate = nvl(runDate);
+ }
+
+ public void setRunHour(String runHour) {
+ if (nvl(runHour).equals(this.runHour))
+ return;
+ infoUpdated = true;
+ this.runHour = nvl(runHour, "12");
+ }
+
+ public void setRunMin(String runMin) {
+ if (nvl(runMin).equals(this.runMin))
+ return;
+ infoUpdated = true;
+ this.runMin = nvl(runMin, "00");
+ }
+
+ public void setRunAMPM(String runAMPM) {
+ if (nvl(runAMPM).equals(this.runAMPM))
+ return;
+ infoUpdated = true;
+ this.runAMPM = nvl(runAMPM, "AM");
+ }
+
+ public void setRecurrence(String recurrence) {
+ if (nvl(recurrence).equals(this.recurrence))
+ return;
+ infoUpdated = true;
+ this.recurrence = nvl(recurrence);
+ }
+
+ public void setConditional(String conditional) {
+ if (nvl(conditional).equals(this.conditional))
+ return;
+ infoUpdated = true;
+ this.conditional = nvl(conditional, "N");
+ }
+
+ public void setConditionSQL(String conditionSQL) {
+ if (nvl(conditionSQL).equals(this.conditionSQL))
+ return;
+ infoUpdated = true;
+ this.conditionSQL = nvl(conditionSQL);
+ }
+
+ public void addEmailToUser(String userId, String userName) {
+ if (nvl(userId).length() == 0)
+ return;
+
+ for (int i = 0; i < emailToUsers.size(); i++) {
+ IdNameValue selUser = (IdNameValue) emailToUsers.get(i);
+ if (userId.equals(selUser.getId()))
+ return;
+ } // for
+
+ emailToUsers.add(new IdNameValue(userId, userName));
+ Collections.sort(emailToUsers, new NameComparator());
+ infoUpdated = true;
+ } // addEmailToUser
+
+
+ public void addEmailArrayToUser(ArrayList<IdNameValue> allSelectedUsers) {
+ if (allSelectedUsers==null || allSelectedUsers.size()<=0)
+ return;
+ emailToUsers.removeAllElements();
+ for (int i = 0; i < allSelectedUsers.size(); i++) {
+ emailToUsers.add(allSelectedUsers.get(i));
+ }
+ Collections.sort(emailToUsers, new NameComparator());
+ infoUpdated = true;
+ } // addEmailArrayToUser
+
+ public void removeEmailToUser(String userId) {
+ if (nvl(userId).length() == 0)
+ return;
+
+ for (int i = 0; i < emailToUsers.size(); i++) {
+ IdNameValue selUser = (IdNameValue) emailToUsers.get(i);
+ if (userId.equals(selUser.getId())) {
+ infoUpdated = true;
+ emailToUsers.remove(i);
+ return;
+ } // if
+ } // for
+ } // removeEmailToUser
+
+ public void addEmailToRole(String roleId, String roleName) {
+ if (nvl(roleId).length() == 0)
+ return;
+
+ for (int i = 0; i < emailToRoles.size(); i++) {
+ IdNameValue selRole = (IdNameValue) emailToRoles.get(i);
+ if (roleId.equals(selRole.getId()))
+ return;
+ } // for
+
+ emailToRoles.add(new IdNameValue(roleId, roleName));
+ Collections.sort(emailToRoles, new NameComparator());
+ infoUpdated = true;
+ } // addEmailToRole
+
+ public void addEmailArrayToRole(ArrayList<IdNameValue> allSelectedRoles) {
+ if (allSelectedRoles==null || allSelectedRoles.size()<=0)
+ return;
+ emailToRoles.removeAllElements();
+ for (int i = 0; i < allSelectedRoles.size(); i++) {
+ emailToRoles.add(allSelectedRoles.get(i));
+ }
+ Collections.sort(emailToRoles, new NameComparator());
+ infoUpdated = true;
+ } // addEmailArrayToRole
+
+ public void removeEmailToRole(String roleId) {
+ if (nvl(roleId).length() == 0)
+ return;
+
+ for (int i = 0; i < emailToRoles.size(); i++) {
+ IdNameValue selRole = (IdNameValue) emailToRoles.get(i);
+ if (roleId.equals(selRole.getId())) {
+ infoUpdated = true;
+ emailToRoles.remove(i);
+ return;
+ } // if
+ } // for
+ } // addEmailToRole
+
+ private void loadScheduleData(HttpServletRequest request) {
+ try {
+ StringBuffer query = new StringBuffer("");
+ //query.append("SELECT rs.enabled_yn, TO_CHAR(rs.start_date, 'MM/DD/YYYY') start_date, TO_CHAR(rs.end_date, 'MM/DD/YYYY') end_date, TO_CHAR(rs.run_date, 'MM/DD/YYYY') run_date, NVL(TO_CHAR(rs.run_date, 'HH'), '12') run_hour, NVL(TO_CHAR(rs.run_date, 'MI'), '00') run_min, NVL(TO_CHAR(rs.run_date, 'AM'), 'AM') run_ampm, rs.recurrence, rs.conditional_yn, rs.notify_type, rs.max_row, rs.initial_formfields, rs.schedule_id, NVL(TO_CHAR(rs.end_date, 'HH'), '11') end_hour, NVL(TO_CHAR(rs.end_date, 'MI'), '45') end_min, NVL(TO_CHAR(rs.end_date, 'AM'), 'PM') end_ampm, encrypt_yn, attachment_yn FROM cr_report_schedule rs WHERE rs.rep_id = "
+ // + reportID);
+ String q_sql = Globals.getLoadScheduleData();
+ q_sql = q_sql.replace("[reportID]", reportID);
+ query.append(q_sql);
+
+ if(!AppUtils.isAdminUser(request))
+ query.append(" and rs.sched_user_id = " + getScheduleUserID());
+ if(nvl(getScheduleID()).length()>0) {
+ query.append(" and rs.schedule_id = " + getScheduleID());
+ }
+ query.append(" order by rs.run_date desc ");
+
+ DataSet ds = DbUtils
+ .executeQuery(query.toString());
+
+ if (ds.getRowCount() > 0) {
+ schedEnabled = nvl(ds.getString(0, 0), "N");
+ startDate = nvl(ds.getString(0, 1));
+ endDate = nvl(ds.getString(0, 2));
+ runDate = nvl(ds.getString(0, 3));
+ runHour = nvl(ds.getString(0, 4), "12");
+ runMin = nvl(ds.getString(0, 5), "00");
+ runAMPM = nvl(ds.getString(0, 6), "AM");
+ recurrence = nvl(ds.getString(0, 7));
+ conditional = nvl(ds.getString(0, 8), "N");
+ //conditionSQL = nvl(ds.getString(0, 9));
+ notify_type = nvl(ds.getString(0, 9), "1");
+ downloadLimit = nvl(ds.getString(0, 10), "1000");
+ //if(nvl(ds.getString(0, 13).)
+ formFields = nvl(ds.getString(0, 11));
+ setScheduleID(ds.getString(0, 12));
+ endHour = nvl(ds.getString(0, 13), "11");
+ endMin = nvl(ds.getString(0, 14), "45");
+ endAMPM = nvl(ds.getString(0, 15), "PM");
+ encryptMode = nvl(ds.getString(0, "encrypt_yn"), "N");
+ attachment = nvl(ds.getString(0, "attachment_yn"), "Y");
+ conditionSQL = loadConditionalSQL(getScheduleID());
+ } else { // if
+ //DataSet dsSeq = DbUtils.executeQuery("select SEQ_CR_REPORT_SCHEDULE.nextval from dual" );
+ String n_sql = Globals.getNewScheduleData();
+ DataSet dsSeq = DbUtils.executeQuery(n_sql);
+ String schedule_id = dsSeq.getString(0,0);
+ setScheduleID(schedule_id);
+ }
+ if(getScheduleID().length() > 0) {
+ //ds = DbUtils
+ // .executeQuery("SELECT rsu.user_id, fuser.last_name||', '||fuser.first_name, fuser.login_id FROM cr_report_schedule_users rsu, fn_user fuser WHERE rsu.rep_id = "
+ // + reportID + " AND rsu.schedule_id = " + getScheduleID() + " and rsu.user_id IS NOT NULL and rsu.user_id = fuser.user_id");
+
+ String t_sql = Globals.getLoadScheduleGetId();
+ t_sql = t_sql.replace("[reportID]", reportID);
+ t_sql = t_sql.replace("[getScheduleID()]", getScheduleID());
+
+ ds = DbUtils.executeQuery(t_sql);
+
+ for (int i = 0; i < ds.getRowCount(); i++){
+ String nameToDisplay = ds.getString(i, 1);
+ if (Globals.getUseLoginIdInSchedYN()!= null && Globals.getUseLoginIdInSchedYN().equals("Y")) {
+ nameToDisplay = ds.getString(i, 2);
+ }
+ if(nameToDisplay!=null && nameToDisplay.length() > 0)
+ emailToUsers.add(new IdNameValue(ds.getString(i, 0), nameToDisplay));
+ else
+ emailToUsers.add(new IdNameValue(ds.getString(i, 0), ds.getString(i, 1)));
+ }
+ Collections.sort(emailToUsers, new NameComparator());
+
+ //ds = DbUtils
+ // .executeQuery("SELECT rsu.role_id FROM cr_report_schedule_users rsu WHERE rsu.rep_id = "
+ // + reportID + " AND rsu.schedule_id = " + getScheduleID() + " AND rsu.role_id IS NOT NULL");
+
+ String r_sql = Globals.getLoadScheduleUsers();
+ r_sql = r_sql.replace("[reportID]", reportID);
+ r_sql = r_sql.replace("[getScheduleID()]", getScheduleID());
+
+ ds = DbUtils.executeQuery(r_sql);
+
+ for (int i = 0; i < ds.getRowCount(); i++)
+ emailToRoles.add(new IdNameValue(ds.getString(i, 0), AppUtils.getRoleName(ds
+ .getString(i, 0))));
+ Collections.sort(emailToRoles, new NameComparator());
+
+ infoUpdated = false;
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "[ReportSchedule.loadScheduleData] Unable to load Report " + reportID
+ + " schedule. Error: " + e.getMessage());
+ }
+ } // loadScheduleData
+
+ private void newScheduleData() {
+ try {
+ //DataSet dsSeq = DbUtils.executeQuery("select SEQ_CR_REPORT_SCHEDULE.nextval from dual" );
+ String sql = Globals.getNewScheduleData();
+ DataSet dsSeq = DbUtils.executeQuery(sql);
+
+ String schedule_id = dsSeq.getString(0,0);
+ setScheduleID(schedule_id);
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "[ReportSchedule.newScheduleData] Unable to load Report " + reportID
+ + " schedule. Error: " + e.getMessage());
+ }
+ } // newScheduleData
+
+ private String parseScheduleSQL(HttpServletRequest request, String sql) throws RaptorException {
+ DataSet ds = null;
+
+ logger.debug(EELFLoggerDelegate.debugLogger, (sql));
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
+ javax.servlet.http.HttpSession session = request.getSession();
+ ReportRuntime rr = (ReportRuntime) session.getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ String userId = AppUtils.getUserID(request);
+ String dbType = "";
+ String dbInfo = rr.getDBInfo();
+ ReportParamValues paramValues = rr.getReportParamValues();
+ int fieldCount = 0;
+ // For Daytona removing all formfields which has null param value
+ Pattern re1 = null;
+ Matcher matcher = null;
+ int index = 0;
+ int posFormField = 0;
+ int posAnd = 0;
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ sql = sql + " ";
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ss][Ee][Ll][Ee][Cc][Tt]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" SELECT ");
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Rr][Ee]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" WHERE ");
+ sql = Pattern.compile("(^[\r\n]*|([\\s]))[Aa][Nn][Dd]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" AND ");
+
+ if (rr.getFormFieldList() != null) {
+ for (Iterator iter = rr.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = rr.getFormFieldDisplayName(fft);
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK)) {
+ if (paramValues.isParameterMultiValue(fieldId)) {
+ String replaceValue = rr.formatListValue(fieldDisplay, nvl(paramValues.getParamValue(fieldId)), null, false,
+ true, null, paramValues.getParamBaseSQL(fieldId));
+ if(replaceValue.length() > 0) {
+ sql = Utils.replaceInString(sql, fieldDisplay, replaceValue);
+ } else {
+ fieldCount++;
+ if(fieldCount == 1) {
+ //sql = sql + " ";
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ss][Ee][Ll][Ee][Cc][Tt]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" SELECT ");
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Rr][Ee]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" WHERE ");
+ //sql = Pattern.compile("(^[\r\n]*|([\\s]))[Aa][Nn][Dd]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" AND ");
+ }
+ //sql = getReportSQL();
+ while(sql.indexOf(fieldDisplay) > 0) {
+/* sql = Utils.replaceInString(sql, "SELECT ", "select ");
+ sql = Utils.replaceInString(sql, "WHERE", "where");
+ sql = Utils.replaceInString(sql, " AND ", " and ");
+*/
+ re1 = Pattern.compile("(^[\r\n]|[\\s])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL);
+ //re1 = Pattern.compile("(^[\r\n]|[\\s])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\]", Pattern.DOTALL);
+/* posFormField = sql.indexOf(fieldDisplay);
+ posAnd = sql.lastIndexOf("and", posFormField);
+ if(posAnd < 0) posAnd = 0;
+ else if (posAnd > 2) posAnd = posAnd - 2;
+ matcher = re1.matcher(sql);
+*/
+ posFormField = sql.indexOf(fieldDisplay);
+ int posSelectField = sql.lastIndexOf("SELECT ", posFormField);
+ int whereField = sql.indexOf(" WHERE" , posSelectField);
+ int andField = 0;
+ if(posFormField > whereField)
+ andField = sql.lastIndexOf(" AND ", posFormField);
+ if (posFormField > andField && andField > whereField)
+ posAnd = andField;
+ else
+ posAnd = 0;
+ matcher = re1.matcher(sql);
+
+
+ if (posAnd > 0 && matcher.find(posAnd-1)) {
+ //sql = Utils.replaceInString(sql, matcher.group(), " ");
+ matcher = re1.matcher(sql);
+ index = sql!=null?sql.lastIndexOf("["+fft.getFieldName()+"]"):-1;
+
+ if(andField>0)
+ index = andField;
+ else
+ index = whereField;
+ if(index >= 0 && matcher.find(index-1)) {
+ sql = sql.replace(matcher.group(), " ");
+ }
+ } else {
+
+ //sql = sql.replace
+ re1 = Pattern.compile("(^[\r\n]|[\\s])WHERE(.*?[^\r\n]*)\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL);
+ matcher = re1.matcher(sql);
+ if(matcher.find(whereField-1)) {
+ matcher = re1.matcher(sql);
+ index = sql!=null?sql.lastIndexOf("["+fft.getFieldName()+"]"):-1;
+ if(index >= 0 && matcher.find(index-30)) {
+ sql = sql.replace(matcher.group(), " WHERE 1=1 ");
+ }
+ //sql = Utils.replaceInString(sql, matcher.group(), " where 1=1 ");
+ } /*else {
+ replaceValue = formatListValue("", Utils
+ .oracleSafe(nvl(paramValues.getParamValue(fieldId))), null, false,
+ true, null, paramValues.getParamBaseSQL(fieldId));
+ sql = Utils.replaceInString(sql, fieldDisplay, replaceValue);
+ }*/
+
+ }
+ }
+ }
+
+ //sql = Utils.replaceInString(sql, " select ", " SELECT ");
+ //sql = Utils.replaceInString(sql, " where ", " WHERE ");
+ //sql = Utils.replaceInString(sql, " and ", " AND ");
+
+ } else {
+ String paramValue = "";
+ if(paramValues.isParameterTextAreaValueAndModified(fieldId)) {
+ String value = "";
+ value = nvl(paramValues
+ .getParamValue(fieldId));
+// value = Utils.oracleSafe(nvl(value));
+// if (!(dbType.equals("DAYTONA") && sql.trim().toUpperCase().startsWith("SELECT"))) {
+// value = "('" + Utils.replaceInString(value, ",", "'|'") + "')";
+// value = Utils.replaceInString(value, "|", ",");
+// paramValue = XSSFilter.filterRequestOnlyScript(value);
+// } else if (nvl(value.trim()).length()>0) {
+// value = "('" + Utils.replaceInString(value, ",", "'|'") + "')";
+// value = Utils.replaceInString(value, "|", ",");
+// paramValue = XSSFilter.filterRequestOnlyScript(value);
+// }
+ paramValue = value;
+ } else
+ paramValue = nvl(paramValues
+ .getParamValue(fieldId));
+
+ if (paramValue!=null && paramValue.length() > 0) {
+ if(paramValue.toLowerCase().trim().startsWith("select ")) {
+ paramValue = Utils.replaceInString(paramValue, "[LOGGED_USERID]", userId);
+ paramValue = Utils.replaceInString(paramValue, "[USERID]", userId);
+ paramValue = Utils.replaceInString(paramValue, "[USER_ID]", userId);
+
+ paramValue = Utils.replaceInString(paramValue, "''", "'");
+ ds = ConnectionUtils.getDataSet(paramValue, dbInfo);
+ if (ds.getRowCount() > 0) paramValue = ds.getString(0, 0);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQLSQLBASED B4^^^^^^^^^ " + sql + " " + fft.getValidationType() + " " + fft.getFieldName() + " " + fft.getFieldId()));
+ if(fft!=null && (fft.getValidationType()!=null && (fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) ||fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ||fft.getValidationType().equals(FormField.VT_DATE) ))) {
+ //System.out.println("paramValues.getParamValue(fieldId_Hr) Inside if " + fft.getValidationType() + " " + fieldDisplay);
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue) +((nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ).length()>0)?" "+addZero(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ):""));
+ }
+ else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+/* System.out.println("paramValues.getParamValue(fieldId_Hr)" + paramValues
+ .getParamValue(fieldId+"_Hr") + " " + paramValues
+ .getParamValue(fieldId+"_Min")) ;
+*/ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue) + ((nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ).length()>0)?" "+addZero(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ):"") + ((nvl(paramValues
+ .getParamValue(fieldId+"_Min") ).length()>0)?":" + addZero(nvl(paramValues
+ .getParamValue(fieldId+"_Min") ) ) : "") ) ;
+ }
+ else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue) + ((nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ).length()>0)?" "+addZero(nvl(paramValues
+ .getParamValue(fieldId+"_Hr") ) ):"") + ((nvl(paramValues
+ .getParamValue(fieldId+"_Min") ).length()>0)?":" + addZero(nvl(paramValues
+ .getParamValue(fieldId+"_Min") ) ) : "") + ((nvl(paramValues
+ .getParamValue(fieldId+"_Sec") ).length()>0)?":"+addZero(nvl(paramValues
+ .getParamValue(fieldId+"_Sec") ) ) : "" ) ) ;
+ } else {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+
+
+ } else {
+ if(paramValue!=null && paramValue.length() > 0) {
+ if(sql.indexOf("'"+fieldDisplay+"'")!=-1 || sql.indexOf("'"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"'")!=-1
+ || sql.indexOf("'%"+fieldDisplay+"%'")!=-1 || sql.indexOf("'%"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"%'")!=-1
+ || sql.indexOf("'_"+fieldDisplay+"_'")!=-1 || sql.indexOf("'_"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"_'")!=-1
+ || sql.indexOf("'%_"+fieldDisplay+"_%'")!=-1 || sql.indexOf("^"+fieldDisplay+"^")!=-1 || sql.indexOf("'%_"+fieldDisplay)!=-1 || sql.indexOf(fieldDisplay+"_%'")!=-1) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ } else {
+ if(sql.indexOf(fieldDisplay)!=-1) {
+ if(nvl(paramValue).length()>0) {
+ try {
+ double vD = Double.parseDouble(paramValue);
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+
+ } catch (NumberFormatException ex) {
+ if (/*dbType.equals("DAYTONA") &&*/ sql.trim().toUpperCase().startsWith("SELECT")) {
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ } else
+ throw new UserDefinedException("Expected number, Given String for the form field \"" + fieldDisplay+"\"");
+ }
+ /*sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));*/
+ } else
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+
+ }
+ }
+ }
+ else {
+ if (dbType.equals("DAYTONA") && sql.trim().toUpperCase().startsWith("SELECT")) {
+ sql = sql + " ";
+ re1 = Pattern.compile("(^[\r\n]|[\\s]|[^0-9a-zA-Z])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL);
+ posFormField = sql.indexOf(fieldDisplay);
+ posAnd = sql.lastIndexOf(" AND ", posFormField);
+ if(posAnd < 0) posAnd = 0;
+ else if (posAnd > 2) posAnd = posAnd - 2;
+ matcher = re1.matcher(sql);
+ if (matcher.find(posAnd)) {
+ sql = sql.replace(matcher.group(), "");
+ }
+ } else {
+ sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ sql = Utils.replaceInString(sql, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ }
+ }
+
+ }
+
+ if (dbType.equals("DAYTONA") && sql.trim().toUpperCase().startsWith("SELECT")) {
+ sql = sql + " ";
+ re1 = Pattern.compile("(^[\r\n]|[\\s]|[^0-9a-zA-Z])AND(.*?[^\r\n]*)"+ "\\["+fft.getFieldName()+ "\\](.*?)\\s", Pattern.DOTALL); //+[\'\\)|\'|\\s]
+ posFormField = sql.indexOf(fieldDisplay);
+ posAnd = sql.lastIndexOf(" AND ", posFormField);
+ if(posAnd < 0) posAnd = 0;
+ else if (posAnd > 2) posAnd = posAnd - 2;
+ matcher = re1.matcher(sql);
+ if (matcher.find(posAnd)) {
+ sql = sql.replace(matcher.group(), " ");
+ }
+ } else {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("ParamValue |" + paramValue + "| Sql |" + sql + "| Multi Value |" + paramValues.isParameterMultiValue(fieldId)));
+ sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ sql = Utils.replaceInString(sql, fieldDisplay , nvl(
+ paramValue, "NULL"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQLSQLBASED AFTER^^^^^^^^^ " + sql));
+ }
+
+ } // else
+ } // if BLANK
+ } // for
+ if(request != null ) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff")) {
+ if (nvl(request.getParameter(reqParameters[i].toUpperCase())).length() > 0)
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ }
+ else
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ if(nvl(request.getParameter(scheduleSessionParameters[i])).trim().length()>0 )
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ }
+ }
+ if(session != null ) {
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ // paramValue = Utils.replaceInString(paramValue, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
+ // else {
+ logger.debug(EELFLoggerDelegate.debugLogger, (" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i])));
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ //}
+ }
+ }
+ } else {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("BEFORE LOGGED USERID REPLACE " + sql));
+ //sql = Utils.replaceInString(sql, "'[logged_userId]'", "'"+userId+"'");
+ //debugLogger.debug("Replacing string 2 " + sql);
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USER_ID]", userId);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("AFTER LOGGED USERID REPLACE " + sql));
+ // Added for Simon's GM Project where they need to get page_id in their query
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQLSQLBASED no formfields " + sql));
+ if(request != null ) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ }
+ if(session != null ) {
+ for (int i = 0; i < sessionParameters.length; i++) {
+ logger.debug(EELFLoggerDelegate.debugLogger, (" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i])));
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ }
+ }
+ // if it is not multiple select and ParamValue is empty this is the place it can be replaced.
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USERID]", userId);
+ sql = Utils.replaceInString(sql, "[USER_ID]", userId);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQLSQLBASED no formfields after" + sql));
+ //debugLogger.debug("Replacing String 2 "+ sql);
+ //debugLogger.debug("Replaced String " + sql);
+
+ sql = Pattern.compile("([\n][\\s]*)",Pattern.DOTALL).matcher(sql).replaceAll(" ");
+ return sql;
+
+ }
+ public void persistScheduleData(Connection conn, HttpServletRequest request) throws RaptorException {
+ if (!infoUpdated)
+ return;
+ if (reportID.equals("-1"))
+ return;
+
+
+ try {
+ String sched_id = "";
+ StringBuffer query = new StringBuffer("");
+ query.append(" SELECT 1 FROM cr_report_schedule WHERE rep_id = " + reportID + " and schedule_id = " + getScheduleID());
+ if(!AppUtils.isAdminUser(request))
+ query.append(" and sched_user_id = " + getScheduleUserID());
+ DataSet ds = DbUtils.executeQuery(conn, query.toString());
+ if (ds.getRowCount() > 0) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("UPDATE cr_report_schedule SET enabled_yn = '");
+ sb.append(getSchedEnabled());
+ sb.append("', start_date = ");
+ if (getStartDate().length() > 0) {
+ sb.append("TO_DATE('");
+ sb.append(getStartDate());
+ sb.append("', 'MM/DD/YYYY')");
+ } else
+ sb.append("NULL");
+ sb.append(", end_date = ");
+ if (getEndDate().length() > 0) {
+ sb.append("TO_DATE('");
+ sb.append(getEndDate());
+ sb.append(" ");
+ sb.append(getEndHour());
+ sb.append(":");
+ sb.append(getEndMin());
+ sb.append(" ");
+ sb.append(getEndAMPM());
+ sb.append("', 'MM/DD/YYYY HH:MI AM')");
+ } else
+ sb.append("NULL");
+ sb.append(", run_date = ");
+ if (getRunDate().length() > 0) {
+ sb.append("TO_DATE('");
+ sb.append(getRunDate());
+ sb.append(" ");
+ sb.append(getRunHour());
+ sb.append(":");
+ sb.append(getRunMin());
+ sb.append(" ");
+ sb.append(getRunAMPM());
+ sb.append("', 'MM/DD/YYYY HH:MI AM')");
+ } else
+ sb.append("NULL");
+ sb.append(", recurrence = ");
+ if (getRecurrence().length() > 0) {
+ sb.append("'");
+ sb.append(getRecurrence());
+ sb.append("'");
+ } else
+ sb.append("NULL");
+ sb.append(", conditional_yn = '");
+ sb.append(getConditional());
+ //sb.append("', condition_sql = ");
+ sb.append("'");
+/* if (getConditionSQL().length() > 0) {
+ sb.append("'");
+ sb.append(parseScheduleSQL(request, Utils.oracleSafe(getConditionSQL())));
+ sb.append("'");
+ } else
+ sb.append("NULL");
+*/
+ sb.append(", notify_type = ");
+ sb.append(getNotify_type());
+ sb.append(", encrypt_yn = '");
+ sb.append(getEncryptMode()+"'");
+ sb.append(", attachment_yn = '");
+ sb.append(getAttachmentMode()+"'");
+ sb.append(", max_row = ");
+ sb.append(getDownloadLimit());
+ sb.append(", initial_formFields = '");
+ sb.append(getFormFields()+"'");
+ sb.append(", processed_formfields = ''");
+ sb.append(" WHERE rep_id = ");
+ sb.append(reportID + " and sched_user_id = ");
+ sb.append(getScheduleUserID());
+ sb.append(" and schedule_id = ");
+ sb.append(getScheduleID());
+
+ DbUtils.executeUpdate(conn, sb.toString());
+ } else {
+ //DataSet dsSeq = DbUtils.executeQuery("select seq_cr_report_schedule.nextval from dual " );
+ String w_sql = Globals.getNewScheduleData();
+ DataSet dsSeq = DbUtils.executeQuery(w_sql);
+ String schedule_id = dsSeq.getString(0,0);
+ setScheduleID(schedule_id);
+ StringBuffer sb = new StringBuffer();
+ sb.append("INSERT INTO cr_report_schedule (schedule_id, sched_user_id, rep_id, enabled_yn, start_date, end_date, run_date, recurrence, conditional_yn, notify_type, max_row, initial_formfields, encrypt_yn, attachment_yn) VALUES(");
+ sb.append(getScheduleID() + ", ");
+ sb.append(getScheduleUserID() + ", ");
+ sb.append(reportID);
+ sb.append(", '");
+ sb.append(getSchedEnabled());
+ sb.append("', ");
+ if (getStartDate().length() > 0) {
+ sb.append("TO_DATE('");
+ sb.append(getStartDate());
+ sb.append("', 'MM/DD/YYYY')");
+ } else
+ sb.append("NULL");
+ sb.append(", ");
+ if (getEndDate().length() > 0) {
+ sb.append("TO_DATE('");
+ sb.append(getEndDate());
+ sb.append(" ");
+ sb.append(getEndHour());
+ sb.append(":");
+ sb.append(getEndMin());
+ sb.append(" ");
+ sb.append(getEndAMPM());
+ sb.append("', 'MM/DD/YYYY HH:MI AM')");
+ } else
+ sb.append("NULL");
+ sb.append(", ");
+ if (getRunDate().length() > 0) {
+ sb.append("TO_DATE('");
+ sb.append(getRunDate());
+ sb.append(" ");
+ sb.append(getRunHour());
+ sb.append(":");
+ sb.append(getRunMin());
+ sb.append(" ");
+ sb.append(getRunAMPM());
+ sb.append("', 'MM/DD/YYYY HH:MI AM')");
+ } else
+ sb.append("NULL");
+ sb.append(", ");
+ if (getRecurrence().length() > 0) {
+ sb.append("'");
+ sb.append(getRecurrence());
+ sb.append("'");
+ } else
+ sb.append("NULL");
+ sb.append(", '");
+ sb.append(getConditional());
+ sb.append("', ");
+/* if (getConditionSQL().length() > 0) {
+ sb.append("'");
+ sb.append(parseScheduleSQL(request, Utils.oracleSafe(getConditionSQL())));
+ sb.append("'");
+ } else
+ sb.append("NULL");
+ sb.append(", ");
+*/
+ sb.append(getNotify_type());
+ sb.append(", ");
+ sb.append(getDownloadLimit());
+ sb.append(", '");
+ sb.append(getFormFields()+"'");
+ sb.append(",'");
+ sb.append(getEncryptMode()+"'");
+ sb.append(",'");
+ sb.append(getAttachmentMode()+"'");
+ sb.append(")");
+ DbUtils.executeUpdate(conn, sb.toString());
+
+ } // else
+
+
+ //DbUtils.executeUpdate(conn,
+ // "DELETE cr_report_schedule_users WHERE rep_id = " + reportID+ " and schedule_id = " + getScheduleID());
+
+ String d_sql = Globals.getExecuteUpdate();
+ d_sql = d_sql.replace("[reportID]", reportID);
+ d_sql = d_sql.replace("[getScheduleID()]", getScheduleID());
+
+ DbUtils.executeUpdate(conn, d_sql);
+
+ for (int i = 0; i < emailToUsers.size(); i++){
+ //DbUtils.executeUpdate(conn,
+ // "INSERT INTO cr_report_schedule_users (schedule_id, rep_id, user_id, role_id, order_no) VALUES("
+ // + getScheduleID() + ", "
+ // + reportID + ", "
+ // + ((IdNameValue) emailToUsers.get(i)).getId() + ", NULL, "
+ // + (i + 1) + ")");
+
+ String sql = Globals.getExecuteUpdateUsers();
+ sql = sql.replace("[getScheduleID()]", getScheduleID());
+ sql = sql.replace("[reportID]", reportID);
+ sql = sql.replace("[emailToUsers.get(i)).getId()]", ((IdNameValue) emailToUsers.get(i)).getId());
+ sql = sql.replace("[(i + 1)]", String.valueOf(i + 1));
+ DbUtils.executeUpdate(conn, sql);
+
+ }
+ for (int i = 0; i < emailToRoles.size(); i++){
+ //DbUtils.executeUpdate(conn,
+ // "INSERT INTO cr_report_schedule_users (schedule_id, rep_id, user_id, role_id, order_no) VALUES("
+ // + getScheduleID() +", "
+ // + reportID + ", NULL, "
+ // + ((IdNameValue) emailToRoles.get(i)).getId() + ", "
+ // + (emailToUsers.size() + i + 1) + ")");
+
+ String sql = Globals.getExecuteUpdateRoles();
+ sql = sql.replace("[getScheduleID()]", getScheduleID());
+ sql = sql.replace("[reportID]", reportID);
+ sql = sql.replace("[emailToRoles.get(i)).getId()]", ((IdNameValue) emailToRoles.get(i)).getId());
+ sql = sql.replace("[((emailToUsers.size() + i + 1)]", String.valueOf(emailToUsers.size() + i + 1));
+
+ DbUtils.executeUpdate(conn, sql);
+ }
+ //if (conn == null)
+ DbUtils.commitTransaction(conn);
+
+ persistConditionSql(conn, getScheduleID(), parseScheduleSQL(request, getConditionSQL()));
+
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report " + reportID + " - schedule data updated"));
+ //DbUtils.executeUpdate(conn,
+ // "INSERT into cr_schedule_activity_log (schedule_id, notes, run_time) values ("+getScheduleID()+",'Submitted:Schedule',TO_DATE('"+ getRunDate()+" "+ getRunHour()+":"+getRunMin()+" "+getRunAMPM()+"', 'MM/DD/YYYY HH:MI AM'))");
+ String e_sql = Globals.getExecuteUpdateActivity();
+ e_sql = e_sql.replace("[getScheduleID()]", getScheduleID());
+ e_sql = e_sql.replace("[getRunDate()]", getRunDate());
+ e_sql = e_sql.replace("[getRunHour()]", getRunHour());
+ e_sql = e_sql.replace("[getRunMin()]", getRunMin());
+ e_sql = e_sql.replace("[getRunAMPM()]", getRunAMPM());
+
+ DbUtils.executeUpdate(conn, e_sql);
+
+ infoUpdated = false;
+
+ } catch (RaptorException e) {
+ if (conn != null)
+ DbUtils.rollbackTransaction(conn);
+ throw e;
+ } // catch
+
+ } // persistScheduleData
+
+ //deleting the schedule - Start
+ public void deleteScheduleData(Connection conn) throws RaptorException {
+ if (reportID.equals("-1"))
+ return;
+
+ Connection connection = (conn != null) ? conn : DbUtils.startTransaction();
+ String sched_id = "";
+ try {
+ //DataSet ds = DbUtils.executeQuery(connection,
+ // "SELECT 1 FROM cr_report_schedule WHERE rep_id = " + reportID +" and sched_user_id = " + getScheduleUserID() + " and schedule_id = " + getScheduleID());
+ String a_sql = Globals.getDeleteScheduleData();
+ a_sql = a_sql.replace("[reportID]", reportID);
+ a_sql = a_sql.replace("[getScheduleUserID()]", getScheduleUserID());
+ a_sql = a_sql.replace("[getScheduleID()]", getScheduleID());
+ DataSet ds = DbUtils.executeQuery(connection, a_sql);
+
+ if (ds.getRowCount() > 0) {
+ //DbUtils.executeUpdate(connection,
+ // "DELETE cr_report_schedule_users WHERE rep_id = " + reportID+ " and schedule_id = " + getScheduleID());
+ String b_sql = Globals.getDeleteScheduleDataUsers();
+ b_sql = b_sql.replace("[reportID]", reportID);
+ b_sql = b_sql.replace("[getScheduleID()]", getScheduleID());
+
+ DbUtils.executeUpdate(connection, b_sql);
+
+ StringBuffer sb = new StringBuffer();
+ String c_sql = Globals.getDeleteScheduleDataId();
+ c_sql = c_sql.replace("[reportID]", reportID);
+ c_sql = c_sql.replace("[getScheduleUserID()]", getScheduleUserID());
+ c_sql = c_sql.replace("[getScheduleID()]", getScheduleID());
+
+ sb.append(c_sql);
+ //sb.append("DELETE FROM cr_report_schedule where rep_id = " + reportID +" and sched_user_id = " + getScheduleUserID() + " and schedule_id = " + getScheduleID());
+
+ DbUtils.executeUpdate(connection, sb.toString());
+ }
+ if (conn == null)
+ DbUtils.commitTransaction(connection);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report " + reportID + " - schedule data deleted"));
+ } catch (RaptorException e) {
+ if (conn == null)
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } // catch
+ finally {
+ if (conn == null)
+ DbUtils.clearConnection(connection);
+ }
+ } //deleteScheduleData
+
+ public String getScheduleUserID() {
+ return scheduleUserID;
+ }
+
+ public void setScheduleUserID(String scheduleUserID) {
+ this.scheduleUserID = scheduleUserID;
+ }
+
+ public String getScheduleID() {
+ return nvl(scheduleID);
+ }
+
+ public void setScheduleID(String scheduleID) {
+ this.scheduleID = scheduleID;
+ }
+
+ public String getEndAMPM() {
+ return endAMPM;
+ }
+
+ public void setEndAMPM(String endAMPM) {
+ if (nvl(endAMPM).equals(this.endAMPM))
+ return;
+ infoUpdated = true;
+ this.endAMPM = nvl(endAMPM, "PM");
+ }
+
+ public String getEndHour() {
+ return endHour;
+ }
+
+ public void setEndHour(String endHour) {
+ if (nvl(endHour).equals(this.endHour))
+ return;
+ infoUpdated = true;
+ this.endHour = nvl(endHour, "11");
+ }
+
+ public String getEndMin() {
+ return endMin;
+ }
+
+ public void setEndMin(String endMin) {
+ if (nvl(endMin).equals(this.endMin))
+ return;
+ infoUpdated = true;
+ this.endMin = nvl(endMin, "45");
+ }
+
+ public static boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+ public String addZero(String num) {
+ int numInt = 0;
+ try {
+ numInt = Integer.parseInt(num);
+ }catch(NumberFormatException ex){
+ numInt = 0;
+ }
+ if(numInt < 10) return "0"+numInt;
+ else return ""+numInt;
+ }
+
+ public static String loadConditionalSQL(String scheduleId)
+ throws RaptorException {
+ StringBuffer sb = new StringBuffer();
+
+ PreparedStatement stmt = null;
+
+ ResultSet rs = null;
+ String condition_sql = "";
+ Connection connection = null;
+
+ try {
+ connection = DbUtils.getConnection();
+
+ //String sql = "SELECT condition_large_sql FROM cr_report_schedule WHERE schedule_id=?";
+ String sql = Globals.getLoadCondSql();
+ stmt = connection.prepareStatement(sql);
+ stmt.setString(1,scheduleId);
+ rs = stmt.executeQuery();
+ if(Globals.isWeblogicServer()) {
+ java.sql.Clob clob= null;
+ Object obj = null;
+ if (rs.next()) {
+ clob = rs.getClob(1);
+ }
+ else
+ throw new RuntimeException("Schedule ID " + scheduleId + " not found in the database");
+
+ int len = 0;
+ char[] buffer = new char[512];
+ Reader in = null;
+ in = new InputStreamReader(clob.getAsciiStream());
+ // if(obj instanceof oracle.sql.CLOB) {
+ // in = ((oracle.sql.CLOB) obj).getCharacterStream();
+ // } else if (obj instanceof weblogic.jdbc.wrapper.Clob) {
+ // in = ((weblogic.jdbc.base.BaseClob) obj).getCharacterStream();
+ // }
+ while ((len = in.read(buffer)) != -1)
+ sb.append(buffer, 0, len);
+ in.close();
+ } else if (Globals.isPostgreSQL() || Globals.isMySQL()) {
+ String clob= null;
+ Object obj = null;
+ if (rs.next()) {
+ sb.append(rs.getString(1));
+ }
+ else
+ throw new RaptorException("Schedule ID " + scheduleId + " not found in the database");
+ } else {
+ /*oracle.sql.CLOB clob = null;
+ if (rs.next())
+ clob = (oracle.sql.CLOB) rs.getObject(1);
+ else
+ throw new RuntimeException("Schedule ID " + scheduleId + " not found in the database");
+ int len = 0;
+ char[] buffer = new char[512];
+ Reader in = null;
+ if(clob!=null) {
+ in = clob.getCharacterStream();
+ while ((len = in.read(buffer)) != -1)
+ sb.append(buffer, 0, len);
+ in.close();
+ }*/
+ throw new RaptorException("only maria db support for this ");
+
+ }
+ } catch (SQLException ex) {
+ try {
+ StringBuffer query = new StringBuffer("");
+
+ query.append(" SELECT condition_sql FROM cr_report_schedule WHERE schedule_id = " + scheduleId);
+ DataSet ds = DbUtils.executeQuery(query.toString());
+ if(ds.getRowCount()>0) {
+ condition_sql = ds.getString(0,0);
+ }
+ return condition_sql;
+ //throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } catch (RaptorException e) {
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } // catch
+
+ finally {
+ DbUtils.clearConnection(connection);
+ }
+
+ } catch (IOException ex) {
+ throw new RaptorRuntimeException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ if (connection != null)
+ DbUtils.clearConnection(connection);
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ return sb.toString();
+ } // loadConditionalSQL
+
+ private static void persistConditionSql(Connection connection, String scheduleId, String conditional_sql) throws RaptorException {
+ PreparedStatement stmt = null;
+ ResultSet rs = null;
+
+ try {
+ //String sql = "update cr_report_schedule set condition_large_sql = EMPTY_CLOB() where schedule_id = " + scheduleId;
+ String sql = Globals.getPersistCondSqlUpdate();
+ sql = sql.replace("[scheduleId]", scheduleId);
+
+ DbUtils.executeUpdate(sql);
+ //sql = "SELECT condition_large_sql FROM cr_report_schedule cr WHERE schedule_id=? FOR UPDATE";
+ sql = Globals.getPersistCondSqlLarge();
+ stmt = connection.prepareStatement(sql);
+ stmt.setString(1,scheduleId);
+ rs = stmt.executeQuery();
+ Writer out = null;
+ /*if(Globals.isWeblogicServer()) {
+ java.sql.Clob clob = null;
+ if (rs.next())
+ clob = rs.getClob(1);
+ else
+ throw new RuntimeException("Schedule ID " + scheduleId + " not found in the database");
+
+ if (clob.length() > conditional_sql.length())
+ clob.truncate(0);
+ //clob.trim(reportXML.length());
+ out = ((weblogic.jdbc.vendor.oracle.OracleThinClob)clob).getCharacterOutputStream();
+ } else*/
+ if (Globals.isPostgreSQL() || Globals.isMySQL()) {
+ if (rs.next()) {
+ rs.updateString(1,conditional_sql);
+ rs.updateRow();
+ //sb.append(rs.getString(1));
+ }
+ else
+ throw new RaptorException("Schedule ID " + scheduleId + " not found in the database");
+ } else {/*
+ oracle.sql.CLOB clob = null;
+ if (rs.next())
+ clob = (oracle.sql.CLOB) rs.getObject(1);
+ else
+ throw new RuntimeException("Schedule ID " + scheduleId + " not found in the database");
+
+ if (clob.length() > conditional_sql.length())
+ clob.trim(conditional_sql.length());
+ out = clob.getCharacterOutputStream();*/
+ throw new RaptorException("only maria db support for this ");
+
+ }
+ out.write(conditional_sql);
+ out.flush();
+ out.close();
+ } catch (RaptorException ex) {
+ if(ex.getMessage().indexOf("invalid identifier")!= -1) {
+ try {
+ //String sql = "update cr_report_schedule set condition_sql = ? where schedule_id = " + scheduleId;
+ String sql = Globals.getPersistCondSqlSet();
+ sql = sql.replace("[scheduleId]", scheduleId);
+ stmt = connection.prepareStatement(sql);
+ stmt.setString(1,conditional_sql);
+ stmt.executeUpdate();
+ connection.commit();
+ } catch (SQLException ex1) {
+ try {
+ connection.rollback();
+ } catch (SQLException ex2) {}
+
+ }
+ } else {
+ try {
+ connection.rollback();
+ } catch (SQLException ex2) {
+ throw new ReportSQLException (ex2.getMessage(), ex2.getCause());
+ }
+ }
+ } catch (SQLException ex) {
+ try {
+ connection.rollback();
+ } catch (SQLException ex2) {
+ throw new ReportSQLException (ex2.getMessage(), ex2.getCause());
+ }
+ } catch (IOException ex) {
+ throw new RaptorRuntimeException (ex.getMessage(), ex.getCause());
+ } finally {
+ try {
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ }
+ }
+ } // persistConditionSql
+
+ /**
+ * Used to get encryption mode
+ * @return the encryptMode
+ */
+ public String getEncryptMode() {
+ return encryptMode;
+ }
+
+ /**
+ * Used to set encryption mode
+ * @param encryptMode the encryptMode to set
+ */
+ public void setEncryptMode(String encryptMode) {
+ this.encryptMode = encryptMode;
+ infoUpdated = true;
+ }
+
+
+ /**
+ * Used to get Attachment mode
+ * @return the attachment
+ */
+ public String getAttachmentMode() {
+ return attachment;
+ }
+
+ public boolean isAttachmentMode() {
+ return nvl(attachment).toUpperCase().startsWith("Y");
+ }
+
+ /**
+ * Used to set Attachment mode
+ * @param attachment to set
+ */
+ public void setAttachmentMode(String attachment) {
+ this.attachment = attachment;
+ infoUpdated = true;
+ }
+} // ReportSchedule
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/SecurityEntry.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/SecurityEntry.java
new file mode 100644
index 00000000..4feddd6e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/SecurityEntry.java
@@ -0,0 +1,44 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+
+public class SecurityEntry extends IdNameValue {
+ private boolean readOnly = true;
+
+ public SecurityEntry() {
+ super();
+ }
+
+ public SecurityEntry(String id, String name, boolean readOnly) {
+ super(id, name);
+ setReadOnly(readOnly);
+ } // SecurityEntry
+
+ public boolean isReadOnly() {
+ return readOnly;
+ }
+
+ public void setReadOnly(boolean readOnly) {
+ this.readOnly = readOnly;
+ }
+
+} // SecurityEntry
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableJoin.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableJoin.java
new file mode 100644
index 00000000..6022d5a1
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableJoin.java
@@ -0,0 +1,67 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class TableJoin extends RaptorObject {
+ private String srcTableName = null;
+
+ private String destTableName = null;
+
+ private String joinExpr = null;
+
+ public TableJoin() {
+ super();
+ }
+
+ public TableJoin(String srcTableName, String destTableName, String joinExpr) {
+ this();
+
+ setSrcTableName(srcTableName);
+ setDestTableName(destTableName);
+ setJoinExpr(joinExpr);
+ } // TableJoin
+
+ public String getSrcTableName() {
+ return srcTableName;
+ }
+
+ public String getDestTableName() {
+ return destTableName;
+ }
+
+ public String getJoinExpr() {
+ return joinExpr;
+ }
+
+ public void setSrcTableName(String srcTableName) {
+ this.srcTableName = srcTableName;
+ }
+
+ public void setDestTableName(String destTableName) {
+ this.destTableName = destTableName;
+ }
+
+ public void setJoinExpr(String joinExpr) {
+ this.joinExpr = joinExpr;
+ }
+
+} // TableJoin
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableSource.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableSource.java
new file mode 100644
index 00000000..dc5b385a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/definition/TableSource.java
@@ -0,0 +1,101 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.definition;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class TableSource extends RaptorObject {
+ private String tableName = null;
+
+ private String displayName = null;
+
+ private String pkFields = null;
+
+ private String viewAction = null;
+
+ private String isLargeData = null;
+
+ private String filterSql = null;
+
+ public TableSource() {
+ super();
+ }
+
+ public TableSource(String tableName, String displayName, String pkFields,
+ String viewAction, String isLargeData, String filterSql) {
+ this();
+
+ setTableName(tableName);
+ setDisplayName(displayName);
+ setPkFields(pkFields);
+ setViewAction(viewAction);
+ setIsLargeData(isLargeData);
+ setFilterSql(filterSql);
+ } // TableSource
+
+ public String getTableName() {
+ return tableName;
+ }
+
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ public String getPkFields() {
+ return pkFields;
+ }
+
+ public String getViewAction() {
+ return viewAction;
+ }
+
+ public String getIsLargeData() {
+ return isLargeData;
+ }
+
+ public String getFilterSql() {
+ return filterSql;
+ }
+
+ public void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+
+ public void setPkFields(String pkFields) {
+ this.pkFields = pkFields;
+ }
+
+ public void setViewAction(String viewAction) {
+ this.viewAction = viewAction;
+ }
+
+ public void setIsLargeData(String isLargeData) {
+ this.isLargeData = isLargeData;
+ }
+
+ public void setFilterSql(String filterSql) {
+ this.filterSql = filterSql;
+ }
+
+} // TableSource
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PageEvent.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PageEvent.java
new file mode 100644
index 00000000..34e38062
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PageEvent.java
@@ -0,0 +1,256 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.pdf;
+
+import java.awt.Color;
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+import com.lowagie.text.BadElementException;
+import com.lowagie.text.Cell;
+import com.lowagie.text.Document;
+import com.lowagie.text.ExceptionConverter;
+import com.lowagie.text.Font;
+import com.lowagie.text.FontFactory;
+import com.lowagie.text.Image;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.pdf.PdfContentByte;
+import com.lowagie.text.pdf.PdfDestination;
+import com.lowagie.text.pdf.PdfOutline;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfPageEventHelper;
+import com.lowagie.text.pdf.PdfWriter;
+
+class PageEvent extends PdfPageEventHelper {
+ private PdfBean pb;
+ private int pageNo = 0;
+ private int omit_page_count = 0;
+ private int DEFAULT_LOGO_SIZE = 100;
+
+ public PageEvent(PdfBean pb) {
+ this.pb = pb;
+ }
+
+ private int getWidthEntries(int howManyLogos){
+ int widthEntries = 0;
+
+ if(howManyLogos == 2)
+ widthEntries = 3;
+ else
+ if(howManyLogos == 1)
+ widthEntries = 2;
+ else
+ widthEntries = 0;
+
+ return widthEntries;
+ }
+
+ private int getHowManyLogos(){
+ int howManyLogos = 0;
+
+ if(AppUtils.isNotEmpty(pb.getLogo1Url()) && !pb.getLogo1Url().equalsIgnoreCase("<no logo>"))
+ howManyLogos ++;
+
+ if(AppUtils.isNotEmpty(pb.getLogo2Url()) && !pb.getLogo2Url().equalsIgnoreCase("<no logo>"))
+ howManyLogos ++;
+
+ return howManyLogos;
+ }
+
+ private float[] fillWidthsArray(int howManyLogos){
+ float[] widthsArray = new float[howManyLogos + 1];
+
+ //If one logo, we will need two columns in the header[left log, spacer]
+ if(howManyLogos == 1){
+ widthsArray = new float[2];
+ widthsArray[0] = 0.1f;
+ widthsArray[1] = 0.1f;
+ }
+ //If two logs, we will need three columns in the header [left log, spacer, right log]
+ else
+ if(howManyLogos == 2){
+ widthsArray = new float[3];
+ widthsArray[0] = 0.1f;
+ widthsArray[1] = 0.5f;
+ widthsArray[2] = 0.1f;
+ }
+
+ return widthsArray;
+ }
+ public void onStartPage(PdfWriter writer, Document document) {
+
+ Font font = FontFactory.getFont(Globals.getFooterFontFamily(), Globals.getFooterFontSize(), Font.NORMAL, Color.BLACK);
+ int howManyLogos = getHowManyLogos();
+
+ //No need to draw anything in the header if no logo was set in the report.
+ if(howManyLogos == 0)
+ return;
+
+ float[] widths = fillWidthsArray(howManyLogos);
+
+ PdfPTable foot = new PdfPTable(widths);
+
+ if(AppUtils.isNotEmpty(pb.getLogo1Url()) && !pb.getLogo1Url().equalsIgnoreCase("<no logo>"))
+ addLogo(foot, font, pb.getLogo1Url().substring(pb.getLogo1Url().indexOf("|") + 1).trim(), Cell.ALIGN_LEFT, pb.getLogo1Size() == null ? DEFAULT_LOGO_SIZE : pb.getLogo1Size());
+
+ PdfPCell spacingCell = new PdfPCell();
+ spacingCell.setBorderColor(Color.WHITE);
+ foot.addCell(spacingCell);
+
+ //Using logo1 size for now - use logo2 size if it is required to deal it separately.
+ if(AppUtils.isNotEmpty(pb.getLogo2Url()) && !pb.getLogo2Url().equalsIgnoreCase("<no logo>"))
+ addLogo(foot, font, pb.getLogo2Url().substring(pb.getLogo2Url().indexOf("|") + 1).trim(), Cell.ALIGN_RIGHT, pb.getLogo2Size() == null ? DEFAULT_LOGO_SIZE : pb.getLogo2Size());
+
+ foot.setTotalWidth(getPageWidth(document));
+ foot.writeSelectedRows(0, -1, 36, 600, writer.getDirectContent());
+ }
+
+ public void onEndPage(PdfWriter writer, Document document) {
+
+ Font font = FontFactory.getFont(Globals.getFooterFontFamily(), Globals.getFooterFontSize(), Font.NORMAL, Color.BLACK);
+
+ try {
+
+ // footer
+ float[] f = { 1f, 0.4f, 1f };
+ PdfPTable foot = new PdfPTable(f);
+ foot.getDefaultCell().setBorderWidth(0);
+ foot.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ foot.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
+
+ foot.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_LEFT);
+ addLeftFooter(foot, font);
+
+ foot.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ addPageNumber(foot, font, pb.isPageNumberAtFooter(), document.getPageNumber());
+
+ foot.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_RIGHT);
+ foot.getDefaultCell().setNoWrap(true);
+
+ foot.addCell(new Paragraph(" " + PdfReportHandler.currentTime(pb.getTimestampPattern()), font));
+
+ foot.setTotalWidth(getPageWidth(document));
+ foot.writeSelectedRows(0, -1, document.leftMargin(), document.bottomMargin(), writer.getDirectContent());
+
+ // bookmark
+ pageNo++;
+ PdfContentByte cb = writer.getDirectContent();
+ PdfDestination destination = new PdfDestination(PdfDestination.FITH);
+ String bookmark = "Data Page " + (pageNo - omit_page_count);
+ if (pageNo == 1) {
+ if (pb.isCoverPageIncluded()) {
+ bookmark = "Cover Page";
+ omit_page_count++;
+ } else if (pb.isDisplayChart()) {
+ bookmark = "Chart";
+ omit_page_count++;
+ }
+ }
+ if (pageNo == 2 && pb.isCoverPageIncluded() && pb.isDisplayChart()) {
+ bookmark = "Chart";
+ omit_page_count++;
+ }
+
+ PdfOutline outline = new PdfOutline(cb.getRootOutline(), destination, bookmark);
+
+ } catch (Exception e) {
+ throw new ExceptionConverter(e);
+ }
+ }
+
+ private void addPageNumber(PdfPTable table, Font font, boolean isAdd, int pageNum) {
+ if (isAdd)
+ table.addCell(new Paragraph(Globals.getWordBeforePageNumber() + " " + pageNum + " " + Globals.getWordAfterPageNumber(), font));
+ else
+ table.addCell("");
+ }
+
+ private void addLeftFooter(PdfPTable table, Font font) {
+ Font font1 = new Font(font);
+ font1.setSize(Globals.getAttProprieraryFontSize());
+
+ if (isEmpty(pb.getLeftFooter()))
+ table.addCell(new Paragraph(" " + Globals.getAttProprietary(), font1));
+ else
+ table.addCell(new Paragraph(pb.getLeftFooter(), font));
+ }
+
+ private void addHeaderDummy(PdfPTable table, Font font) {
+ Font font1 = new Font(font);
+ font1.setSize(Globals.getAttProprieraryFontSize());
+
+ table.addCell(new Paragraph("Header row", font1));
+ }
+
+ private void addLogo(PdfPTable table, Font font, String imgSrc, int alignment, int absoluteSize) {
+
+ Image img = null;
+ try {
+ img = Image.getInstance(pb.getFullWebContextPath() + AppUtils.getImgFolderURL() + File.separator + imgSrc);
+ } catch (BadElementException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ img = null;
+ } catch (MalformedURLException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ img = null;
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+
+ }
+ if(img == null){
+ //log that the input file couldnt be loaded -
+ }
+ else{
+ //img.scaleAbsolute(absoluteSize, absoluteSize);
+ img.scalePercent(absoluteSize, absoluteSize);
+ PdfPCell cell = new PdfPCell(img);
+ cell.setBorderColor(Color.WHITE);
+ cell.setHorizontalAlignment(alignment);
+ table.addCell(cell);
+ }
+
+ }
+
+ public static float getPageWidth(Document doc) {
+ return doc.getPageSize().width() - doc.leftMargin() - doc.rightMargin();
+ }
+
+ public static float getPageHeight(Document doc) {
+ return doc.getPageSize().height() - doc.topMargin() - doc.bottomMargin();
+ }
+
+ private float getHeadTopMargin(Document doc, PdfPTable table) {
+ return doc.getPageSize().height() - doc.topMargin() + table.getTotalHeight();
+ }
+
+ private boolean isEmpty(String str) {
+ return str == null || str.trim().length() == 0;
+ }
+
+} // PageEvent
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfBean.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfBean.java
new file mode 100644
index 00000000..31b26435
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfBean.java
@@ -0,0 +1,242 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.pdf;
+
+
+public class PdfBean {
+
+ public static final int NUMBER_IN_HEADER = 0;
+ public static final int NUMBER_IN_FOOTER = 1;
+ public static final int NUMBER_IN_BOTH = 2;
+
+ private boolean alternateColor;
+ private boolean isPortrait;
+ private boolean isCoverPageIncluded;
+ private boolean isDisplayChart;
+ private int currentPage;
+ private int whereToShowPageNumber;
+ private String userId;
+ private String timestampPattern;
+ private String title;
+ private String leftFooter;
+ private String pagesize;
+ private boolean isAttachmentOfEmail;
+ private String logo1Url;
+ private Integer logo1Size;
+ private String logo2Url;
+ private Integer logo2Size;
+ private String fullWebContextPath;
+
+ /**
+ * @return the leftFooter
+ */
+ public String getLeftFooter() {
+ return leftFooter;
+ }
+ /**
+ * @param leftFooter the leftFooter to set
+ */
+ public void setLeftFooter(String leftFooter) {
+ this.leftFooter = leftFooter;
+ }
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+ /**
+ * @param title the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+ /**
+ * @return the alternateColor
+ */
+ public boolean isAlternateColor() {
+ return alternateColor;
+ }
+ /**
+ * @param alternateColor the alternateColor to set
+ */
+ public void setAlternateColor(boolean alternateColor) {
+ this.alternateColor = alternateColor;
+ }
+ /**
+ * @return the currentPage
+ */
+ public int getCurrentPage() {
+ return currentPage;
+ }
+ /**
+ * @param currentPage the currentPage to set
+ */
+ public void setCurrentPage(int currentPage) {
+ this.currentPage = currentPage;
+ }
+ /**
+ * @return the isPortrait
+ */
+ public boolean isPortrait() {
+ return isPortrait;
+ }
+ /**
+ * @param isPortrait the isPortrait to set
+ */
+ public void setPortrait(boolean isPortrait) {
+ this.isPortrait = isPortrait;
+ }
+ /**
+ * @return the timestampPattern
+ */
+ public String getTimestampPattern() {
+ return timestampPattern;
+ }
+ /**
+ * @param timestampPattern the timestampPattern to set
+ */
+ public void setTimestampPattern(String timestampPattern) {
+ this.timestampPattern = timestampPattern;
+ }
+ /**
+ * @return the userId
+ */
+ public String getUserId() {
+ return userId;
+ }
+ /**
+ * @param userId the userId to set
+ */
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+ /**
+ * @return the whereToShowPageNummber
+ */
+ public int getWhereToShowPageNumber() {
+ return whereToShowPageNumber;
+ }
+ /**
+ * @param whereToShowPageNumber the whereToShowPageNumber to set
+ */
+ public void setWhereToShowPageNumber(int whereToShowPageNumber) {
+ this.whereToShowPageNumber = whereToShowPageNumber;
+ }
+
+ public boolean isPageNumberAtHeader() {
+ return getWhereToShowPageNumber()==NUMBER_IN_BOTH ||
+ getWhereToShowPageNumber()==NUMBER_IN_HEADER;
+ }
+
+ public boolean isPageNumberAtFooter() {
+ return getWhereToShowPageNumber()==NUMBER_IN_FOOTER ||
+ getWhereToShowPageNumber()==NUMBER_IN_BOTH;
+ }
+
+ /**
+ * @return the isCoverPageIncluded
+ */
+ public boolean isCoverPageIncluded() {
+ return isCoverPageIncluded;
+ }
+ /**
+ * @param isCoverPageIncluded the isCoverPageIncluded to set
+ */
+ public void setCoverPageIncluded(boolean isCoverPageIncluded) {
+ this.isCoverPageIncluded = isCoverPageIncluded;
+ }
+
+ public String toString() {
+ return getTitle()+ " " +
+ getCurrentPage() + " " +
+ getTimestampPattern() + " " +
+ getUserId()+ " " +
+ getWhereToShowPageNumber()+ " " +
+ isPortrait() + " " + isAlternateColor();
+ }
+ /**
+ * @return the isDisplayChart
+ */
+ public boolean isDisplayChart() {
+ return isDisplayChart;
+ }
+ /**
+ * @param isDisplayChart the isDisplayChart to set
+ */
+ public void setDisplayChart(boolean isDisplayChart) {
+ this.isDisplayChart = isDisplayChart;
+ }
+ /**
+ * @return the pagesize
+ */
+ public String getPagesize() {
+ return pagesize;
+ }
+ /**
+ * @param pagesize the pagesize to set
+ */
+ public void setPagesize(String pagesize) {
+ this.pagesize = pagesize;
+ }
+
+ public String getLogo1Url() {
+ return logo1Url;
+ }
+ public void setLogo1Url(String logo1Url) {
+ this.logo1Url = logo1Url;
+ }
+
+ public String getLogo2Url() {
+ return logo2Url;
+ }
+ public void setLogo2Url(String logo2Url) {
+ this.logo2Url = logo2Url;
+ }
+
+ public void setAttachmentOfEmail(boolean isAttachmentOfEmail) {
+ this.isAttachmentOfEmail = isAttachmentOfEmail;
+ }
+
+ public boolean isAttachmentOfEmail() {
+
+ return isAttachmentOfEmail;
+ }
+ public Integer getLogo1Size() {
+ return logo1Size;
+ }
+ public void setLogo1Size(Integer logo1Size) {
+ this.logo1Size = logo1Size;
+ }
+ public Integer getLogo2Size() {
+ return logo2Size;
+ }
+ public void setLogo2Size(Integer logo2Size) {
+ this.logo2Size = logo2Size;
+ }
+ public String getFullWebContextPath() {
+ return fullWebContextPath;
+ }
+ public void setFullWebContextPath(String fullWebContextPath) {
+ this.fullWebContextPath = fullWebContextPath;
+ }
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfReportHandler.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfReportHandler.java
new file mode 100644
index 00000000..deac806d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/pdf/PdfReportHandler.java
@@ -0,0 +1,1890 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+/* ===========================================================================================
+
+ * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
+ * Raptor : This tool is used to generate different kinds of reports with lot of utilities
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * PdfReportHandler.java - This class is used to generate reports in PDF using iText
+ * -------------------------------------------------------------------------------------------
+ *
+ *
+ * Changes
+ * -------
+ * 14-Jul-2009 : Version 8.4 (Sundar); <UL>
+ * <LI> Dashboard reports can be downloaded with each report occupying separate page including its charts. </LI>
+ * </UL>
+ *
+ */
+package org.openecomp.portalsdk.analytics.model.pdf;
+
+import java.awt.Color;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.OutputStream;
+import java.io.StringReader;
+import java.net.MalformedURLException;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TimeZone;
+import java.util.TreeMap;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.model.ReportLoader;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.HtmlStripper;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.view.ColumnHeader;
+import org.openecomp.portalsdk.analytics.view.ColumnHeaderRow;
+import org.openecomp.portalsdk.analytics.view.DataRow;
+import org.openecomp.portalsdk.analytics.view.DataValue;
+import org.openecomp.portalsdk.analytics.view.HtmlFormatter;
+import org.openecomp.portalsdk.analytics.view.ReportData;
+import org.openecomp.portalsdk.analytics.view.RowHeader;
+import org.openecomp.portalsdk.analytics.view.RowHeaderCol;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.lowagie.text.BadElementException;
+import com.lowagie.text.Chunk;
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.Element;
+import com.lowagie.text.ElementTags;
+import com.lowagie.text.Font;
+import com.lowagie.text.FontFactory;
+import com.lowagie.text.Image;
+import com.lowagie.text.PageSize;
+import com.lowagie.text.Paragraph;
+import com.lowagie.text.Phrase;
+import com.lowagie.text.Rectangle;
+import com.lowagie.text.html.simpleparser.HTMLWorker;
+import com.lowagie.text.html.simpleparser.StyleSheet;
+import com.lowagie.text.pdf.PdfPCell;
+import com.lowagie.text.pdf.PdfPTable;
+import com.lowagie.text.pdf.PdfWriter;
+
+
+public class PdfReportHandler extends org.openecomp.portalsdk.analytics.RaptorObject{
+
+ /**
+ *
+ */
+ private PdfBean pb;
+ private HtmlStripper strip = new HtmlStripper();
+ private static final int RetryCreateNewImage = 3;
+ private int retryCreateNewImageCount=0;
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(PdfReportHandler.class);
+
+ private String FONT_FAMILY = "Arial";
+ private int FONT_SIZE = 9;
+
+ public PdfReportHandler() { }
+
+ public void createPdfFileContent(HttpServletRequest request, HttpServletResponse response, int type) throws IOException, RaptorException {
+
+ Document document = new Document();
+ ReportHandler rh = new ReportHandler();
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ String pdfFName = "";
+ String user_id = AppUtils.getUserID(request);
+ response.reset();
+ response.setContentType("application/pdf");
+ OutputStream outStream = response.getOutputStream();
+
+ String formattedReportName = "";
+ PdfWriter writer = null;
+ ReportRuntime firstReportRuntimeObj = null;
+ int returnValue = 0;
+
+ ReportRuntime rr = null;
+ if(rr==null) rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+
+ boolean isDashboard = false;
+ if ((request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null) && ( ((String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)).equals(rr.getReportID())) ) {
+ isDashboard = true;
+ }
+ if(isDashboard) {
+ try {
+ String reportID = (String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID);
+ ReportRuntime rrDash = rh.loadReportRuntime(request, reportID, true, 1);
+ pb = preparePdfBean(request,rrDash);
+
+ // Setting pb Values
+ document.setPageSize(PageSize.getRectangle(pb.getPagesize()));
+ if(!pb.isPortrait()) // get this from properties file
+ document.setPageSize(document.getPageSize().rotate());
+
+ //
+ writer = PdfWriter.getInstance(document, response.getOutputStream());
+ writer.setPageEvent(new PageEvent(pb));//header,footer,bookmark
+ document.open();
+
+ formattedReportName = new HtmlStripper().stripSpecialCharacters(rrDash.getReportName());
+ if(pb.isAttachmentOfEmail())
+ response.setHeader("Content-disposition", "inline");
+ else
+ response.setHeader("Content-disposition", "attachment;filename="+ formattedReportName+formattedDate+user_id+".pdf");
+
+ pdfFName = "dashboard"+formattedReportName+formattedDate+user_id+".pdf";
+ Map reportRuntimeMap = null;
+ Map reportDataMap = null;
+ Map reportDisplayTypeMap = null;
+
+ reportRuntimeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ reportDataMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+ reportDisplayTypeMap = (TreeMap) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
+
+ if(reportRuntimeMap!=null) {
+ //ServletOutputStream sos = response.getOutputStream();
+ Set setReportRuntime = reportRuntimeMap.entrySet();
+ Set setReportDataMap = reportDataMap.entrySet();
+ Set setReportDisplayTypeMap = reportDisplayTypeMap.entrySet();
+
+ Iterator iter2 = setReportDataMap.iterator();
+ Iterator iter3 = setReportDisplayTypeMap.iterator();
+ int count = 0;
+ for(Iterator iter = setReportRuntime.iterator(); iter.hasNext(); ) {
+ count++;
+ Map.Entry entryData = (Entry) iter2.next();
+ Map.Entry entry = (Entry) iter.next();
+ Map.Entry entryCheckChart = (Entry) iter3.next();
+ //String rep_id = (String) entry.getKey();
+ ReportRuntime rrDashRep = (ReportRuntime) entry.getValue();
+
+ if(count == 1) {
+ firstReportRuntimeObj = (ReportRuntime) entry.getValue();
+ if(pb.isCoverPageIncluded()) {
+ document = paintDashboardCoverPage(document, rrDash, firstReportRuntimeObj, request);
+ }
+ }
+ ReportData rdDashRep = (ReportData) entryData.getValue();
+ int col = 0;
+ //pb.setDisplayChart(nvl(rr.getChartType()).trim().length()>0 && rr.getDisplayChart());
+ if( ((rrDashRep.getChartType()).trim().length()>0 && rrDashRep.getDisplayChart()) && entryCheckChart.getValue().toString().equals("c")) {
+ document.newPage();
+ pb.setTitle(nvl(rrDashRep.getReportTitle()).length()>0?rrDashRep.getReportTitle():rrDashRep.getReportName());
+ paintPdfImage(request, document,AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rrDashRep.getReportID()+".png", rrDashRep);
+ } else {
+ document.newPage();
+ pb.setTitle(nvl(rrDashRep.getReportTitle()).length()>0?rrDashRep.getReportTitle():rrDashRep.getReportName());
+ paintPdfData(request, document,rdDashRep,rrDashRep, "");
+ }
+ }
+
+ }
+ } catch (DocumentException dex) {dex.printStackTrace();}
+ catch (RaptorException rex) {rex.printStackTrace();}
+ } else {
+
+ //ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ //ReportData rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
+ rr = null;
+ ReportData rd = null;
+ String parent = "";
+ int parentFlag = 0;
+ if(!nvl(request.getParameter("parent"), "").equals("N")) parent = nvl(request.getParameter("parent"), "");
+ if(parent.startsWith("parent_")) parentFlag = 1;
+ if(parentFlag == 1) {
+ rr = (ReportRuntime) request.getSession().getAttribute(parent+"_rr");
+ rd = (ReportData) request.getSession().getAttribute(parent+"_rd");
+ }
+ if(rr==null) rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ if(rd==null) rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
+
+ pb = preparePdfBean(request,rr);
+ FONT_FAMILY = rr.getPDFFont();
+ FONT_SIZE = rr.getPDFFontSize();
+ //System.out.println(pb);
+
+ formattedReportName = new HtmlStripper().stripSpecialCharacters(rr.getReportName());
+
+
+
+ response.setContentType("application/pdf");
+ if(pb.isAttachmentOfEmail())
+ response.setHeader("Content-disposition", "inline");
+ else
+ response.setHeader("Content-disposition", "attachment;filename="+ formattedReportName+formattedDate+user_id+".pdf");
+
+ document.setPageSize(PageSize.getRectangle(pb.getPagesize()));
+
+ if(!pb.isPortrait()) // get this from properties file
+ document.setPageSize(document.getPageSize().rotate());
+
+ try {
+
+ writer = PdfWriter.getInstance(document, outStream);
+ writer.setPageEvent(new PageEvent(pb));//header,footer,bookmark
+ document.open();
+
+ //System.out.println("Document 1 " + document);
+ if(pb.isCoverPageIncluded()) {
+ document = paintCoverPage(document, rr, request);
+ }
+
+ //boolean isImageRotate = false;
+ //System.out.println("Document 2 " + document);
+
+ if(pb.isDisplayChart()) {
+ paintPdfImage(request, document,AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+".png", rr);
+ }
+ //System.out.println("Document 4" + document);
+
+ document.newPage();
+ if(type == 3 && rr.getSemaphoreList()==null && !(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) ) { //type = 3 is whole
+ String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
+ returnValue = paintPdfData(request, document, rd, rr, sql_whole);
+ } else if(type == 2) {
+ returnValue = paintPdfData(request, document, rd, rr, "");
+ } else {
+ //String sql_whole = (String) request.getAttribute(AppConstants.RI_REPORT_SQL_WHOLE);
+ int downloadLimit = (rr.getMaxRowsInExcelDownload()>0)?rr.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ String action = request.getParameter(AppConstants.RI_ACTION);
+
+ if(!(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) && !action.endsWith("session"))
+ rd = rr.loadReportData(-1, AppUtils.getUserID(request), downloadLimit,request, false /*download*/);
+ if(rr.getSemaphoreList()!=null) {
+ rd = rr.loadReportData(-1, AppUtils.getUserID(request), downloadLimit,request, true);
+ returnValue = paintPdfData(request, document, rd, rr, "");
+ } else {
+ returnValue = paintPdfData(request, document, rd, rr, rr.getWholeSQL());
+ }
+
+
+ }
+
+
+ //paintPdfData(document,rd,rr);
+
+
+ } catch (DocumentException de) {
+ de.printStackTrace();
+ //System.err.println("document: " + de.getMessage());
+ }
+
+ }
+ document.close();
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("##### Heap utilization statistics [MB] #####"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Used Memory:"
+ + (runtime.maxMemory() - runtime.freeMemory()) / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Free Memory:"
+ + runtime.freeMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Total Memory:" + runtime.totalMemory() / mb));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Max Memory:" + runtime.maxMemory() / mb));
+
+ }
+
+ private Document paintCoverPage(Document doc, ReportRuntime rr, HttpServletRequest request) throws IOException, DocumentException {
+
+ //System.out.println("PDFREPORTHANDLER STARTED ... " );
+ if(nvl(rr.getPdfImg()).length()>0) {
+ Image image1 = Image.getInstance(AppUtils.getExcelTemplatePath()+"../../"+AppUtils.getImgFolderURL()+rr.getPdfImg());
+ image1.scalePercent(20f, 20f);
+ doc.add(image1);
+ }
+ float firstColumnSize = Globals.getCoverPageFirstColumnSize();
+ float[] relativeWidths = {firstColumnSize,1f-firstColumnSize};
+ PdfPTable table = new PdfPTable(relativeWidths);
+ table.getDefaultCell().setBorderWidth(0);
+ addEmptyRows(table,6);
+ HTMLWorker worker = new HTMLWorker(doc);
+ StyleSheet style = new StyleSheet();
+ style.loadTagStyle("body", "leading", "16,0");
+ StringBuffer reportDescrBuf = new StringBuffer("");
+ ArrayList descr = HTMLWorker.parseToList(new StringReader(nvl(rr.getReportDescr())), style);
+ ArrayList paraList = null;
+ if(nvl(rr.getReportTitle()).length()>0) {
+ add2Cells(table,"Report Title : ",nvl(rr.getReportTitle()));
+ } else {
+ add2Cells(table,"Report Name : ",nvl(rr.getReportName()));
+ }
+ if((descr!=null && descr.size()>0)) {
+ paraList = (com.lowagie.text.Paragraph)descr.get(0);
+ for (int i=0 ; i<paraList.size(); i++) {
+ reportDescrBuf.append(paraList.get(i));
+ }
+
+ }
+ add2Cells(table,"Description : ",reportDescrBuf.toString());
+ if(Globals.getSessionInfoForTheCoverPage().length()>0) {
+ String nameValue[] = Globals.getSessionInfoForTheCoverPage().split(",");
+ String name=nameValue[0];
+ String value=nameValue[1];
+ add2Cells(table,name+" : ",(AppUtils.getRequestNvlValue(request, value).length()>0?AppUtils.getRequestNvlValue(request, value):nvl((String)request.getSession().getAttribute(value))));
+ }
+
+ if(Globals.isCreatedOwnerInfoNeeded()) {
+ add2Cells(table,"Created By : ",nvl(AppUtils.getUserName(rr.getCreateID())));
+ add2Cells(table,"Owner : ",nvl(AppUtils.getUserName(rr.getOwnerID())));
+ }
+ if(Globals.displayLoginIdForDownloadedBy())
+ add2Cells(table,"Downloaded by : ",nvl(AppUtils.getUserBackdoorLoginId(request)));
+ else
+ add2Cells(table,"Downloaded by : ",nvl(AppUtils.getUserName(AppUtils.getUserID(request))));
+
+ addEmptyRows(table,1);
+
+ boolean isFirstRow = true;
+ ArrayList al = rr.getParamNameValuePairsforPDFExcel(request, 1);
+ if(al.size()<=0) {
+ al = (ArrayList) request.getSession().getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+ }
+
+ Iterator it = al.iterator();
+ addEmptyRows(table,1);
+ //if(!Globals.customizeFormFieldInfo()) {
+ if(rr.getFormFieldComments(request).length()<=0) {
+ while(it.hasNext()) {
+
+ if(isFirstRow) {
+ add2Cells(table, "Run-time Criteria : ", " ");
+ isFirstRow = false;
+ }
+
+ IdNameValue value = (IdNameValue)it.next();
+ if(!value.getId().trim().equals("BLANK"))
+ //System.out.println("PDFREPORTHANDLER " + value.getId()+" : "+value.getName());
+ add2Cells(table, value.getId()+" : ",value.getName().replaceAll("~",","));
+ //add2Cells(table, rr.getFormFieldComments(request), " ");
+ }
+ addEmptyRows(table,1);
+ doc.add(table);
+
+ } else {
+ it = al.iterator();
+ if(it.hasNext()) {
+ //add2Cells(table, "Run-time Criteria : ", " ");
+ addEmptyRows(table,1);
+ doc.add(table);
+ //com.lowagie.text.html.HtmlParser.parse(doc, new StringReader(rr.getFormFieldComments(request)));
+ ArrayList p = HTMLWorker.parseToList(new StringReader(rr.getFormFieldComments(request).replaceAll("~",",")), style);
+
+ for (int k = 0; k < p.size(); ++k){
+ doc.add((com.lowagie.text.Element)p.get(k));
+ }
+ }
+ }
+
+ return doc;
+ }
+
+
+ private Document paintDashboardCoverPage(Document doc, ReportRuntime rrDashRep, ReportRuntime firstReportRuntimeObj, HttpServletRequest request) throws IOException, DocumentException {
+
+ //System.out.println("PDFREPORTHANDLER STARTED ... " );
+ float firstColumnSize = Globals.getCoverPageFirstColumnSize();
+ float[] relativeWidths = {firstColumnSize,1f-firstColumnSize};
+ PdfPTable table = new PdfPTable(relativeWidths);
+ table.getDefaultCell().setBorderWidth(0);
+ addEmptyRows(table,6);
+
+ add2Cells(table,"Report Name : ",rrDashRep.getReportName());
+ add2Cells(table,"Description : ",rrDashRep.getReportDescr());
+ if(Globals.getSessionInfoForTheCoverPage().length()>0) {
+ String nameValue[] = Globals.getSessionInfoForTheCoverPage().split(",");
+ String name=nameValue[0];
+ String value=nameValue[1];
+ add2Cells(table,name+" : ",(AppUtils.getRequestNvlValue(request, value).length()>0?AppUtils.getRequestNvlValue(request, value):nvl((String)request.getSession().getAttribute(value))));
+ }
+
+ if(Globals.isCreatedOwnerInfoNeeded()) {
+ add2Cells(table,"Created By : ",AppUtils.getUserName(rrDashRep.getCreateID()));
+ add2Cells(table,"Owner : ",AppUtils.getUserName(rrDashRep.getOwnerID()));
+ }
+ if(Globals.displayLoginIdForDownloadedBy())
+ add2Cells(table,"Downloaded by : ",AppUtils.getUserBackdoorLoginId(request));
+ else
+ add2Cells(table,"Downloaded by : ",AppUtils.getUserName(request));
+
+ addEmptyRows(table,1);
+
+ boolean isFirstRow = true;
+ ArrayList al = firstReportRuntimeObj.getParamNameValuePairsforPDFExcel(request, 2);
+ Iterator it = al.iterator();
+ addEmptyRows(table,1);
+ //if(!Globals.customizeFormFieldInfo()) {
+ if(firstReportRuntimeObj.getFormFieldComments(request).length()<=0) {
+ while(it.hasNext()) {
+
+ if(isFirstRow) {
+ add2Cells(table, "Run-time Criteria : ", " ");
+ isFirstRow = false;
+ }
+
+ IdNameValue value = (IdNameValue)it.next();
+ if(!value.getId().trim().equals("BLANK"))
+ //System.out.println("PDFREPORTHANDLER " + value.getId()+" : "+value.getName());
+ add2Cells(table, value.getId()+" : ",value.getName());
+ //add2Cells(table, rr.getFormFieldComments(request), " ");
+ }
+ addEmptyRows(table,1);
+ doc.add(table);
+
+ } else {
+ it = al.iterator();
+ if(it.hasNext()) {
+ //add2Cells(table, "Run-time Criteria : ", " ");
+ addEmptyRows(table,1);
+ doc.add(table);
+ //com.lowagie.text.html.HtmlParser.parse(doc, new StringReader(rr.getFormFieldComments(request)));
+ HTMLWorker worker = new HTMLWorker(doc);
+ StyleSheet style = new StyleSheet();
+ style.loadTagStyle("body", "leading", "16,0");
+ ArrayList p = HTMLWorker.parseToList(new StringReader(firstReportRuntimeObj.getFormFieldComments(request)), style);
+
+ for (int k = 0; k < p.size(); ++k){
+ doc.add((com.lowagie.text.Element)p.get(k));
+ }
+ }
+ }
+
+ return doc;
+ }
+
+
+ public static void addEmptyRows(PdfPTable table, int rows) throws DocumentException {
+ for (int i=0; i<rows; i++)
+ for(int j=0;j<table.getAbsoluteWidths().length;j++)
+ table.addCell(new Paragraph(" "));
+
+ }
+
+ private void add2Cells(PdfPTable table, String key, String value) {
+
+ PdfPCell cell;
+ cell = new PdfPCell(new Paragraph(key));
+ cell.setHorizontalAlignment(Rectangle.ALIGN_RIGHT);
+ cell.setBorderWidth(0f);
+ table.addCell(cell);
+
+ cell = new PdfPCell(new Paragraph(value));
+ cell.setHorizontalAlignment(Rectangle.ALIGN_LEFT);
+ cell.setBorderWidth(0f);
+ table.addCell(cell);
+ }
+
+ private void paintPdfImage(HttpServletRequest request, Document document, String fileName, ReportRuntime rr)
+ throws DocumentException
+ {
+
+ ArrayList images = getImage(request, fileName,pb.isAttachmentOfEmail()?true:false, rr);
+ //Image image = getImage(request, fileName,pb.isAttachmentOfEmail()?true:false);
+ PdfPTable table = null;
+ PdfPCell cellValue = null;
+ if(images!=null) {
+
+ for (int i = 0; i < images.size(); i++) {
+ table = new PdfPTable(1);
+ cellValue = new PdfPCell();
+ cellValue.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ Image image = (Image) images.get(i);
+ image.setAlignment(Image.ALIGN_CENTER);
+ //System.out.println("Document 3 " + document + " i-" + i);
+ if(i%2 ==0)
+ document.newPage();
+ //System.out.println("Document 31 " + document);
+ cellValue.setImage(image);
+ //table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ table.addCell(cellValue);
+ //System.out.println("Document 32 " + document + "table " + table);
+ document.add(table);
+ //System.out.println("Document 33 " + document);
+ }
+ }
+ }
+
+ private ArrayList getImage(HttpServletRequest request, String fileName, boolean isGenerateNewImage, ReportRuntime rr) {
+ ArrayList images = new ArrayList();
+ if(!isGenerateNewImage) {
+ try {
+ Image image = Image.getInstance(fileName);
+ images.add(image);
+ return images;
+ }
+ catch (MalformedURLException e) {
+ isGenerateNewImage = true;
+ //e.printStackTrace();
+ }
+ catch (BadElementException e) {
+ isGenerateNewImage = true;
+ //e.printStackTrace();
+
+ } catch (FileNotFoundException e) {
+ isGenerateNewImage = true;
+ //e.printStackTrace();
+ } catch (IOException e) {
+ isGenerateNewImage = true;
+ //e.printStackTrace();
+ }
+ }
+
+ if(isGenerateNewImage && retryCreateNewImageCount<RetryCreateNewImage){
+ retryCreateNewImageCount++;
+ return generateNewImage(request, rr);
+ //return getImage(request,fileName, false);
+ }
+
+ return null;
+
+ }
+
+ private ArrayList generateNewImage(HttpServletRequest request, ReportRuntime rr) {
+ ArrayList images = new ArrayList();
+ try {
+ //ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ DataSet ds = null;
+ if(request.getSession().getAttribute(AppConstants.RI_CHART_DATA)!=null) {
+ ds = (DataSet) request.getSession().getAttribute(AppConstants.RI_CHART_DATA);
+ } else {
+ ds = rr.loadChartData(pb.getUserId(),request);
+ }
+ String downloadFileName = "";
+ HashMap additionalChartOptionsMap = new HashMap();
+ String chartType = nvl(rr.getChartType());
+ if(chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
+ additionalChartOptionsMap.put("multiplePieOrderRow", new Boolean((AppUtils.getRequestNvlValue(request, "multiplePieOrder").length()>0?AppUtils.getRequestNvlValue(request, "multiplePieOrder").equals("row"):rr.isMultiplePieOrderByRow())) );
+ additionalChartOptionsMap.put("multiplePieLabelDisplay", AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplay").length()>0? AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplay"):rr.getMultiplePieLabelDisplay());
+ additionalChartOptionsMap.put("chartDisplay", new Boolean(AppUtils.getRequestNvlValue(request, "chartDisplay").length()>0? AppUtils.getRequestNvlValue(request, "chartDisplay").equals("3D"):rr.isChartDisplayIn3D()));
+ } else if (chartType.equals(AppConstants.GT_BAR_3D)) {
+ additionalChartOptionsMap.put("chartOrientation", new Boolean((AppUtils.getRequestNvlValue(request, "chartOrientation").length()>0?AppUtils.getRequestNvlValue(request, "chartOrientation").equals("vertical"):rr.isVerticalOrientation())) );
+ additionalChartOptionsMap.put("secondaryChartRenderer", AppUtils.getRequestNvlValue(request, "secondaryChartRenderer").length()>0? AppUtils.getRequestNvlValue(request, "secondaryChartRenderer"):rr.getSecondaryChartRenderer());
+ additionalChartOptionsMap.put("chartDisplay", new Boolean(AppUtils.getRequestNvlValue(request, "chartDisplay").length()>0? AppUtils.getRequestNvlValue(request, "chartDisplay").equals("3D"):rr.isChartDisplayIn3D()));
+ additionalChartOptionsMap.put("lastSeriesALineChart", new Boolean(rr.isLastSeriesALineChart()));
+ } else if (chartType.equals(AppConstants.GT_LINE)) {
+ additionalChartOptionsMap.put("chartOrientation", new Boolean((AppUtils.getRequestNvlValue(request, "chartOrientation").length()>0?AppUtils.getRequestNvlValue(request, "chartOrientation").equals("vertical"):rr.isVerticalOrientation())) );
+ //additionalChartOptionsMap.put("secondaryChartRenderer", AppUtils.getRequestNvlValue(request, "secondaryChartRenderer").length()>0? AppUtils.getRequestNvlValue(request, "secondaryChartRenderer"):rr.getSecondaryChartRenderer());
+ additionalChartOptionsMap.put("chartDisplay", new Boolean(AppUtils.getRequestNvlValue(request, "chartDisplay").length()>0? AppUtils.getRequestNvlValue(request, "chartDisplay").equals("3D"):rr.isChartDisplayIn3D()));
+ additionalChartOptionsMap.put("lastSeriesABarChart", new Boolean(rr.isLastSeriesABarChart()));
+ } else if (chartType.equals(AppConstants.GT_TIME_DIFFERENCE_CHART)) {
+ additionalChartOptionsMap.put("intervalFromDate",AppUtils.getRequestNvlValue(request, "intervalFromDate").length()>0?AppUtils.getRequestNvlValue(request, "intervalFromDate"):rr.getIntervalFromdate());
+ additionalChartOptionsMap.put("intervalToDate", AppUtils.getRequestNvlValue(request, "intervalToDate").length()>0? AppUtils.getRequestNvlValue(request, "intervalToDate"):rr.getIntervalTodate());
+ additionalChartOptionsMap.put("intervalLabel", AppUtils.getRequestNvlValue(request, "intervalLabel").length()>0? AppUtils.getRequestNvlValue(request, "intervalLabel"):rr.getIntervalLabel());
+ } else if (chartType.equals(AppConstants.GT_REGRESSION)) {
+ additionalChartOptionsMap.put("regressionType",AppUtils.getRequestNvlValue(request, "regressionType").length()>0?AppUtils.getRequestNvlValue(request, "regressionType"):rr.getLinearRegression());
+ additionalChartOptionsMap.put("linearRegressionColor",nvl(rr.getLinearRegressionColor()));
+ additionalChartOptionsMap.put("expRegressionColor",nvl(rr.getExponentialRegressionColor()));
+ additionalChartOptionsMap.put("maxRegression",nvl(rr.getCustomizedRegressionPoint()));
+ } else if (chartType.equals(AppConstants.GT_STACK_BAR) ||chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR) || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR_LINES)
+ || chartType.equals(AppConstants.GT_STACKED_VERT_BAR) || chartType.equals(AppConstants.GT_STACKED_VERT_BAR_LINES)
+ ) {
+ additionalChartOptionsMap.put("overlayItemValue",new Boolean(nvl(rr.getOverlayItemValueOnStackBar()).equals("Y")));
+ }
+ additionalChartOptionsMap.put("legendPosition", nvl(rr.getLegendPosition()));
+ additionalChartOptionsMap.put("hideToolTips", new Boolean(rr.hideChartToolTips()));
+ additionalChartOptionsMap.put("hideLegend", new Boolean(AppUtils.getRequestNvlValue(request, "hideLegend").length()>0? AppUtils.getRequestNvlValue(request, "hideLegend").equals("Y"):rr.hideChartLegend()));
+ additionalChartOptionsMap.put("labelAngle", nvl(rr.getLegendLabelAngle()));
+ additionalChartOptionsMap.put("maxLabelsInDomainAxis", nvl(rr.getMaxLabelsInDomainAxis()));
+ additionalChartOptionsMap.put("rangeAxisLowerLimit", nvl(rr.getRangeAxisLowerLimit()));
+ additionalChartOptionsMap.put("rangeAxisUpperLimit", nvl(rr.getRangeAxisUpperLimit()));
+
+
+ boolean totalOnChart = false;
+ totalOnChart = AppUtils.getRequestNvlValue(request, "totalOnChart").equals("Y");
+ String filename = null;
+ ArrayList graphURL = new ArrayList();
+ ArrayList chartNames = new ArrayList();
+ ArrayList fileNames = new ArrayList();
+ List l = rr.getAllColumns();
+ List lGroups = rr.getAllChartGroups();
+ HashMap mapYAxis = rr.getAllChartYAxis(rr.getReportParamValues());
+ String chartLeftAxisLabel = rr.getFormFieldFilled(nvl(rr.getChartLeftAxisLabel()));
+ String chartRightAxisLabel = rr.getFormFieldFilled(nvl(rr.getChartRightAxisLabel()));
+ int displayTotalOnChart = 0;
+ HashMap formValues = Globals.getRequestParamtersMap(request, false);
+
+ for (Iterator iterC = l.iterator(); iterC.hasNext();) {
+ DataColumnType dc = (DataColumnType) iterC.next();
+ if(nvl(dc.getColName()).equals(AppConstants.RI_CHART_TOTAL_COL)) {
+ displayTotalOnChart = 1;
+ }
+ }
+
+ String legendColumnName = (rr.getChartLegendColumn()!=null)?rr.getChartLegendColumn().getDisplayName():"Legend Column";
+
+
+
+ if(ds!=null)
+ {
+ if(rr.hasSeriesColumn() && chartType.equals(AppConstants.GT_TIME_SERIES) && (lGroups==null || lGroups.size() <= 0)) { /** Check whether Report has only category columns if so then all the columns will open in seperate chart - sundar**/
+ for (int i=0; i<rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues).size();i++) {
+ String chartTitle = Globals.getDisplayChartTitle()? rr.getReportName():"";
+ chartTitle = rr.getFormFieldFilled(chartTitle);
+ downloadFileName = AppUtils.getTempFolderPath()+"cr_"+pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_"+i+".png";
+ filename = null;/*(String) ChartGen.generateChart( chartType,
+ request.getSession(),
+ ds,
+ legendColumnName,
+ chartLeftAxisLabel,
+ chartRightAxisLabel,
+ rr.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i, i+1),
+ rr.getChartColumnColorsList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i, i+1),
+ rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i, i+1),
+ "",
+ chartTitle,
+ null,
+ rr.getChartWidthAsInt(),
+ rr.getChartHeightAsInt(),
+ rr.getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, formValues).subList(i,i+1),
+ rr.hasSeriesColumn(),
+ //rr.isChartMultiSeries(),
+ rr.isMultiSeries(),
+ rr.getAllColumns(),
+ downloadFileName,
+ totalOnChart,
+ AppConstants.WEB_VERSION deviceType,
+ additionalChartOptionsMap,
+ true
+ );*/
+ try {
+ Image image = Image.getInstance(downloadFileName);
+ images.add(image);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ catch (BadElementException e) {
+ e.printStackTrace();
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ } else { /** first check the columns to be opened in new charts and loop around in ChartGen generate chart function - sundar**/
+ String tempChartGroupPrev = "";
+ String tempChartGroupCurrent = "";
+ for (int i=0; i<lGroups.size();i++) {
+ String chartGroupOrg = (String) lGroups.get(i);
+ String chartYAxis = (String) mapYAxis.get(chartGroupOrg);
+ //System.out.println("chartGroupOrg " + chartGroupOrg);
+ if(nvl(chartGroupOrg).length()>0)
+ tempChartGroupCurrent = chartGroupOrg.substring(0,chartGroupOrg.lastIndexOf("|"));
+ if(i>0) tempChartGroupPrev = ((String) lGroups.get(i-1)).substring(0,((String) lGroups.get(i-1)).lastIndexOf("|"));
+ //System.out.println("TEMPCHARTGROUP " + tempChartGroupCurrent + " " + tempChartGroupPrev);
+ if(tempChartGroupCurrent.equals(tempChartGroupPrev)) continue;
+ //System.out.println("CHARTGROUPORG " + chartGroupOrg + " " + lGroups) ;
+ //String chartGroup = chartGroupOrg.substring(0,chartGroupOrg.lastIndexOf("|"));
+ String chartGroup = chartGroupOrg;
+
+ //System.out.println("$$$$CHARTGROUP in JSP " +chartGroup+ " "+ chartGroupOrg );
+ //System.out.println(" rr.getChartGroupDisplayNamesList(chartGroup) " + rr.getChartGroupDisplayNamesList(chartGroup));
+ //System.out.println(" rr.getChartGroupColumnColorsList(chartGroup) " + rr.getChartGroupColumnColorsList(chartGroup));
+ //System.out.println(" rr.getChartGroupColumnAxisList(chartGroup) " + rr.getChartGroupColumnAxisList(chartGroup));
+ //System.out.println(" rr.getChartGroupValueColumnAxisList(chartGroupOrg) " + rr.getChartGroupValueColumnAxisList(chartGroupOrg));
+
+ downloadFileName = AppUtils.getTempFolderPath()+"cr_"+pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_"+i+".png";
+ String chartTitle = (Globals.getDisplayChartTitle()? (chartGroup!=null && chartGroup.indexOf("|") > 0 ?chartGroup.substring(0,chartGroup.lastIndexOf("|")):rr.getReportName()):"");
+ chartTitle = rr.getFormFieldFilled(chartTitle);
+ String leftAxisLabel = "";
+ //if(!rr.isChartMultiSeries()) {
+ if(!rr.isMultiSeries()) {
+ leftAxisLabel = ((chartYAxis!=null && chartYAxis.indexOf("|") > 0) ? chartYAxis.substring(0,chartYAxis.lastIndexOf("|")): chartLeftAxisLabel );
+ } else {
+ leftAxisLabel = chartLeftAxisLabel;
+ }
+
+ filename = null;/*(String) ChartGen.generateChart( chartType,
+ request.getSession(),
+ ds,
+ legendColumnName,
+ leftAxisLabel,
+ chartRightAxisLabel,
+ ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE) || chartType.equals(AppConstants.GT_BAR_3D))?rr.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartGroupDisplayNamesList(chartGroup, formValues)),
+ ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE) || chartType.equals(AppConstants.GT_BAR_3D))?rr.getChartColumnColorsList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartGroupColumnColorsList(chartGroup, formValues)),
+ ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE) || chartType.equals(AppConstants.GT_BAR_3D))?rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartGroupValueColumnAxisList(chartGroupOrg, formValues)),
+ "",
+ chartTitle,
+ null,
+ rr.getChartWidthAsInt(),
+ rr.getChartHeightAsInt(),
+ ((chartType.indexOf("Stacked")>0 || chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues):rr.getChartGroupValueColumnAxisList(chartGroupOrg, formValues)),
+ rr.hasSeriesColumn(),
+ //rr.isChartMultiSeries(),
+ rr.isMultiSeries(),
+ rr.getAllColumns(),
+ downloadFileName,
+ totalOnChart,
+ AppConstants.WEB_VERSION deviceType,
+ additionalChartOptionsMap,
+ true
+ );*/
+ try {
+ Image image = Image.getInstance(downloadFileName);
+ images.add(image);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ catch (BadElementException e) {
+ e.printStackTrace();
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if(!chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
+ for (int i=0; i<rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).size();i++) {
+ //System.out.println(" rr.getChartDisplayNamesList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1) " + rr.getChartDisplayNamesList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1));
+ //System.out.println(" rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1) " + rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i, i+1));
+ //System.out.println(" rr.getChartValueColumnsList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i,i+1) " + rr.getChartValueColumnsList(AppConstants.CHART_NEWCHART_COLUMNS).subList(i,i+1));
+
+ downloadFileName = AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_"+i+".png";
+ String chartTitle = Globals.getDisplayChartTitle()? rr.getReportName():"";
+ chartTitle = rr.getFormFieldFilled(chartTitle);
+
+ filename = null;/* (String) ChartGen.generateChart( chartType,
+ request.getSession(),
+ ds,
+ legendColumnName,
+ chartLeftAxisLabel,
+ chartRightAxisLabel,
+ (chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartDisplayNamesList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i, i+1),
+ (chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartColumnColorsList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartColumnColorsList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i, i+1),
+ (chartType.equals(AppConstants.GT_PIE_MULTIPLE))?rr.getChartValueColumnAxisList(AppConstants.CHART_ALL_COLUMNS, formValues):rr.getChartValueColumnAxisList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i, i+1),
+ "",
+ chartTitle,
+ null,
+ rr.getChartWidthAsInt(),
+ rr.getChartHeightAsInt(),
+ rr.getChartValueColumnsList(AppConstants.CHART_NEWCHART_COLUMNS, formValues).subList(i,i+1),
+ rr.hasSeriesColumn(),
+ //rr.isChartMultiSeries(),
+ rr.isMultiSeries(),
+ rr.getAllColumns(),
+ downloadFileName,
+ totalOnChart,
+ AppConstants.WEB_VERSION,
+ additionalChartOptionsMap,
+ true
+ );
+*/ try {
+ Image image = Image.getInstance(downloadFileName);
+ images.add(image);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ catch (BadElementException e) {
+ e.printStackTrace();
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ /** second rest of the columns are merged to one single chart - sundar**/
+ // System.out.println(" rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS) " + rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS));
+ // System.out.println(" rr.getChartValueColumnAxisList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS) " + rr.getChartValueColumnAxisList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS));
+ // System.out.println(" rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS) " + rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS));
+
+ if((!(lGroups!=null && lGroups.size() > 0))) {
+
+ if(/*chartType.equals(AppConstants.GT_TIME_SERIES) && */rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues)!=null && rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues).size()>0) {
+ downloadFileName = AppUtils.getTempFolderPath()+"cr_"+ pb.getUserId()+"_"+request.getSession().getId()+"_"+rr.getReportID()+"_All.png";
+ String chartTitle = Globals.getDisplayChartTitle()? rr.getReportName():"";
+ chartTitle = rr.getFormFieldFilled(chartTitle);
+
+ filename = null;/*(String) ChartGen.generateChart( chartType,
+ request.getSession(),
+ ds,
+ legendColumnName,
+ chartLeftAxisLabel,
+ chartRightAxisLabel,
+ rr.getChartDisplayNamesList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
+ rr.getChartColumnColorsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
+ rr.getChartValueColumnAxisList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
+ "",
+ chartTitle,
+ null,
+ rr.getChartWidthAsInt(),
+ rr.getChartHeightAsInt(),
+ rr.getChartValueColumnsList(AppConstants.CHART_WITHOUT_NEWCHART_COLUMNS, formValues),
+ rr.hasSeriesColumn(),
+ //rr.isChartMultiSeries(),
+ rr.isMultiSeries(),
+ rr.getAllColumns(),
+ downloadFileName,
+ totalOnChart,
+ AppConstants.WEB_VERSION,
+ additionalChartOptionsMap,
+ true
+ );
+*/ try {
+ Image image = Image.getInstance(downloadFileName);
+ images.add(image);
+ } catch (MalformedURLException e) {
+ e.printStackTrace();
+ }
+ catch (BadElementException e) {
+ e.printStackTrace();
+
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ } // Stacked Chart Check
+ } // else no Series Column
+
+ }// if(ds!=null)
+
+ }catch (Exception e) {
+ e.printStackTrace();
+ }
+// System.out.println("Total Images " + images.size());
+ return images.size()>0?images:null;
+
+ }
+
+/*
+ private boolean isImageRotate(Document doc, Image image) {
+
+ System.out.println("image size="+image.getWidthPercentage()+ " "+ image.scaledWidth()+
+ " "+image.scaledHeight()+" "+image.getXYRatio());
+ System.out.println("page size = "+ doc.getPageSize().width() + " " +doc.getPageSize().height() +" "+
+ doc.topMargin() + " " +doc.bottomMargin() + " " + doc.leftMargin() + " " +
+ doc.rightMargin());
+ System.out.println(image.scaledWidth()/image.scaledHeight());
+ System.out.println((PageEvent.getPageWidth(doc)/PageEvent.getPageHeight(doc)));
+// System.out.println(doc.getPageSize().getRotation());
+
+ float image_w = image.scaledWidth();
+ float image_h = image.scaledHeight();
+ float image_ratio = image_w/image_h;
+
+ float page_w = PageEvent.getPageWidth(doc);
+ float page_h = PageEvent.getPageHeight(doc);
+ float page_ratio = page_w/page_h;
+
+ return (image_w > page_w && image_ratio > page_ratio) ||
+ (image_h > page_h && image_ratio < page_ratio);
+
+ }
+
+*/
+ private final int DEFAULT_PDF_DISPLAY_WIDTH = 10;
+ private int paintPdfData(HttpServletRequest request, Document document, ReportData rd, ReportRuntime rr, String sql_whole) throws DocumentException, RaptorException, IOException {
+
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+ int returnValue = 0;
+ sql_whole = rr.getWholeSQL();
+ if(rd.getDataRowCount() >= rr.getReportDataSize()) {
+ sql_whole="";
+ }
+ float f[] = getRelativeWidths(rd, rr.getReportType().equals(AppConstants.RT_CROSSTAB));
+ PdfPTable table = new PdfPTable(f);
+ table.setWidthPercentage(100f);
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ table.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
+
+ ReportDefinition rdef = (new ReportHandler()).loadReportDefinition(request, rr.getReportID());
+
+ List allColumns = rdef.getAllColumns();
+
+ float[] repotWidths = new float[rdef.getVisibleColumnCount()];
+ int columnIdx = 0;
+ float pdfDisplayWidth = 0;
+ for(Iterator iter = allColumns.iterator(); iter.hasNext();){
+ DataColumnType dct = (DataColumnType) iter.next();
+ if(dct.isVisible()) {
+
+ if(dct.getPdfDisplayWidthInPxls() == null || dct.getPdfDisplayWidthInPxls().equals("") || dct.getPdfDisplayWidthInPxls().startsWith("null"))
+ pdfDisplayWidth = DEFAULT_PDF_DISPLAY_WIDTH;
+ else
+ pdfDisplayWidth = Float.parseFloat(dct.getPdfDisplayWidthInPxls());
+
+ repotWidths [columnIdx++] = pdfDisplayWidth;
+ }
+ }
+
+ table.setWidths(repotWidths);
+
+ //table.setH
+
+ //TODO: check title and subtitle
+ HttpSession session = request.getSession();
+ String drilldown_index = (String) session.getAttribute("drilldown_index");
+ int index = 0;
+ try {
+ index = Integer.parseInt(drilldown_index);
+ } catch (NumberFormatException ex) {
+ index = 0;
+ }
+ String titleRep = (String) session.getAttribute("TITLE_"+index);
+ String subtitle = (String) session.getAttribute("SUBTITLE_"+index);
+
+ if(nvl(titleRep).length()>0 && nvl(subtitle).length()>0)
+ table.setHeaderRows(3);
+ else if (nvl(titleRep).length()>0)
+ table.setHeaderRows(2);
+ else
+ table.setHeaderRows(1);
+ table = paintPdfReportHeader(request, document, table, rr, f);
+ paintPdfTableHeader(document, rd, table);
+
+ int idx = 0;
+ int fragmentsize = 30; //for memory management
+
+ ResultSet rs = null;
+ Connection conn = null;
+ Statement st = null;
+ ResultSetMetaData rsmd = null;
+ rd.reportDataRows.resetNext();
+ DataRow dr = rd.reportDataRows.getNext();
+
+ //addRowHeader(table,dr,idx,rd);
+
+ //addRowColumns(table,dr,idx);
+ if(nvl(sql_whole).length() >0 && rr.getReportType().equals(AppConstants.RT_LINEAR)) {
+ try {
+ conn = ConnectionUtils.getConnection(rr.getDbInfo());
+ st = conn.createStatement();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("************* Map Whole SQL *************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, (sql_whole));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("*****************************************"));
+ rs = st.executeQuery(sql_whole);
+ rsmd = rs.getMetaData();
+ int numberOfColumns = rsmd.getColumnCount();
+ HashMap colHash = new HashMap();
+ dr = null;
+ int j = 0;
+ int rowCount = 0;
+ String title = "";
+ while(rs.next()) {
+
+/* if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
+ returnValue = 1;
+ String cellValue = Globals.getUserDefinedMessageForMemoryLimitReached() + " "+ rowCount +" records out of " + rr.getReportDataSize() + " were downloaded to PDF.";
+ Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
+ Globals.getDataFontSize(),
+ Font.NORMAL, Color.BLACK);
+ PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+ table.addCell(cell);
+ document.add(table);
+ return returnValue;
+ }
+*/ rowCount++;
+ colHash = new HashMap();
+ for (int i = 1; i <= numberOfColumns; i++) {
+ colHash.put(rsmd.getColumnName(i), rs.getString(i));
+ }
+ rd.reportDataRows.resetNext();
+
+ dr = rd.reportDataRows.getNext();
+
+ j = 0;
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+
+ HtmlFormatter rfmt = dr.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
+ Globals.getDataFontSize(),
+ Font.NORMAL, Color.BLACK);
+ if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+
+ String cellValue = new Integer(rowCount).toString();
+ PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+
+ //row background color can be overwritten by cell background color
+ cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ if(rfmt != null) {
+ formatterCell(rfmt,cell);
+ }
+ table.addCell(cell);
+ }*/
+
+ for (dr.resetNext(); dr.hasNext();j++) {
+ DataValue dv = dr.getNext();
+ /*if(j == 0) {
+ HtmlFormatter cfmt = dv.getCellFormatter();
+ HtmlFormatter rfmt = dv.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
+ Globals.getDataFontSize(),
+ Font.NORMAL, Color.BLACK);
+ if(cfmt!= null) {
+ cellFormatterFont(cfmt,cellFont);
+ }
+ else if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+ else {
+ if(dv.isBold()) {
+ cellFont.setStyle(Font.BOLD);
+ }
+ }
+
+ //String cellValue = strip.stripHtml(value.trim());
+ PdfPCell cell = new PdfPCell(new Paragraph(rowCount+"",cellFont));
+
+ //row background color can be overwritten by cell background color
+ cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ if(nvl(dv.getAlignment()).trim().length()>0)
+ cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
+ else
+ cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ if(cfmt!= null) {
+ formatterCell(cfmt,cell);
+ }
+ else if(rfmt != null) {
+ formatterCell(rfmt,cell);
+ }
+ table.addCell(cell);
+ }*/
+
+ //for (chr.resetNext(); chr.hasNext();) {
+ //ColumnHeader ch = chr.getNext();
+ String value = nvl((String)colHash.get(dv.getColId().toUpperCase()));
+ if(dv.isVisible()) {
+
+ HtmlFormatter cfmt = dv.getCellFormatter();
+ HtmlFormatter rfmt = dv.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ if(cfmt!= null) {
+ cellFormatterFont(cfmt,cellFont);
+ }
+ else if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+ else {
+ if(dv.isBold()) {
+ cellFont.setStyle(Font.BOLD);
+ }
+ }
+
+ String cellValue = strip.stripHtml(value.trim());
+ PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+
+ //row background color can be overwritten by cell background color
+ cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ if(nvl(dv.getAlignment()).trim().length()>0)
+ cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
+ else
+ cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ if(cfmt!= null) {
+ formatterCell(cfmt,cell);
+ }
+ else if(rfmt != null) {
+ formatterCell(rfmt,cell);
+ }
+
+
+
+ table.addCell(cell);
+
+ }//if isVisible()
+
+
+ }
+
+ }
+ if(rd.reportDataTotalRow!=null) {
+ for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();idx++) {
+ dr = rd.reportDataTotalRow.getNext();
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ Font rowHeaderFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ rowHeaderFont.setStyle(Font.BOLD);
+ rowHeaderFont.setSize(FONT_SIZE+1f);
+ table.getDefaultCell().setBackgroundColor(getRowBackgroundColor(dr, idx));
+ table.addCell(new Paragraph("Total",rowHeaderFont));
+
+
+ addTotalRowColumns(table,dr,idx);
+ if (idx % fragmentsize == fragmentsize - 1) {
+ document.add(table);
+ table.deleteBodyRows();
+ table.setSkipFirstHeader(true);
+ }
+
+ }
+ }
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ } catch (ReportSQLException ex) {
+ throw new RaptorException(ex);
+ } catch (Exception ex) {
+ if(!(ex.getCause() instanceof java.net.SocketException) )
+ throw new RaptorException (ex);
+ } finally {
+ try {
+ if(conn!=null)
+ conn.close();
+ if(st!=null)
+ st.close();
+ if(rs!=null)
+ rs.close();
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+
+// if (idx % fragmentsize == fragmentsize - 1) {
+// document.add(table);
+// table.deleteBodyRows();
+// table.setSkipFirstHeader(true);
+// }
+
+ //document.add(table);
+ } else {
+ if(rr.getReportType().equals(AppConstants.RT_LINEAR)) {
+ int rowCount = 0;
+ for(rd.reportDataRows.resetNext();rd.reportDataRows.hasNext();idx++)
+ {
+ rowCount++;
+
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ HtmlFormatter rfmt = dr.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(Globals.getDataFontFamily(),
+ Globals.getDataFontSize(),
+ Font.NORMAL, Color.BLACK);
+ if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+
+ //String cellValue = new Integer(rowCount).toString();
+ //PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+
+ //row background color can be overwritten by cell background color
+ //cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ //cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ //if(rfmt != null) {
+ //formatterCell(rfmt,cell);
+ //}
+ //table.addCell(cell);
+ }*/
+
+
+
+ if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
+ returnValue = 1;
+ }
+
+ dr = rd.reportDataRows.getNext();
+
+ addRowHeader(table,dr,idx,rd);
+
+ addRowColumns(table,dr,idx);
+
+ if (idx % fragmentsize == fragmentsize - 1) {
+ document.add(table);
+ table.deleteBodyRows();
+ table.setSkipFirstHeader(true);
+ }
+ }
+
+ if(rd.reportDataTotalRow!=null) {
+ for (rd.reportDataTotalRow.resetNext(); rd.reportDataTotalRow.hasNext();idx++) {
+ dr = rd.reportDataTotalRow.getNext();
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ Font rowHeaderFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ rowHeaderFont.setStyle(Font.BOLD);
+ rowHeaderFont.setSize(FONT_SIZE+1f);
+ table.getDefaultCell().setBackgroundColor(getRowBackgroundColor(dr, idx));
+ table.addCell(new Paragraph("Total",rowHeaderFont));
+
+
+ addTotalRowColumns(table,dr,idx);
+ if (idx % fragmentsize == fragmentsize - 1) {
+ document.add(table);
+ table.deleteBodyRows();
+ table.setSkipFirstHeader(true);
+ }
+
+ }
+ }
+
+ } else if (rr.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ int rowCount = 0;
+ List l = rd.getReportDataList();
+ boolean first = true;
+ for (int dataRow = 0; dataRow < l.size(); dataRow++) {
+ first = true;
+ rowCount++;
+ dr = (DataRow) l.get(dataRow);
+ Vector<DataValue> rowNames = dr.getRowValues();
+ for(dr.resetNext(); dr.hasNext(); ) {
+
+ if(first) {
+ HtmlFormatter rfmt = dr.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+ String cellValue = "";
+ PdfPCell cell = null;
+ //String cellValue = new Integer(rowCount).toString();
+ //PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+ //row background color can be overwritten by cell background color
+ //cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ //cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ //if(rfmt != null) {
+ //formatterCell(rfmt,cell);
+ // }
+ //table.addCell(cell);
+ if(rowNames!=null) {
+ for(int i=0; i<rowNames.size(); i++) {
+ DataValue dv = rowNames.get(i);
+ rfmt = dr.getRowFormatter();
+
+ cellFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+ cellValue = dv.getDisplayValue();
+ if(cellValue.indexOf("|#")!=-1)
+ cellValue = cellValue.substring(0,cellValue.indexOf("|"));
+
+ cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+ //row background color can be overwritten by cell background color
+ cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ if(rfmt != null) {
+ formatterCell(rfmt,cell);
+ }
+ table.addCell(cell);
+ }
+ }
+ }
+ first = false;
+
+ if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*Globals.getMemoryThreshold()/100) ) {
+ returnValue = 1;
+ }
+
+ //addRowHeader(table,dr,idx,rd);
+
+ addRowColumns(table,dr,idx);
+
+ if (idx % fragmentsize == fragmentsize - 1) {
+ document.add(table);
+ table.deleteBodyRows();
+ table.setSkipFirstHeader(true);
+ }
+ }
+
+ }
+ }
+
+ //document.add(table);
+
+ }
+
+ document.add(table);
+ paintPdfReportFooter(request, document, rr, f);
+
+ return returnValue;
+ }
+
+ private void addRowHeader(PdfPTable table, DataRow dr, int idx, ReportData rd) {
+
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ for(rd.reportRowHeaderCols.resetNext();rd.reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ if(idx==0)
+ rhc.resetNext();
+ RowHeader rh = rhc.getNext();
+ //System.out.println(" =============== RowHeader\n "+rh);
+
+ Font rowHeaderFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ if(rh.isBold()) {
+ rowHeaderFont.setStyle(Font.BOLD);
+ rowHeaderFont.setSize(FONT_SIZE+1f);
+ }
+
+ if(rh.getColSpan()>0) {
+ table.getDefaultCell().setColspan(rh.getColSpan());
+ table.getDefaultCell().setBackgroundColor(getRowBackgroundColor(dr, idx));
+ table.addCell(new Paragraph(strip.stripHtml(rh.getRowTitle()),rowHeaderFont));
+ }
+ }
+ }
+
+ private void addRowColumns(PdfPTable table, DataRow dr, int idx) {
+
+ table.getDefaultCell().setColspan(1);
+
+ for(dr.resetNext();dr.hasNext();)
+ {
+ DataValue dv = dr.getNext();
+ //System.out.println(columnCount +" --> "+dv);
+ if(dv.isVisible()) {
+ HtmlFormatter cfmt = dv.getCellFormatter();
+ HtmlFormatter rfmt = dv.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ if(cfmt!= null) {
+ cellFormatterFont(cfmt,cellFont);
+ }
+ else if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+ else {
+ if(dv.isBold()) {
+ cellFont.setStyle(Font.BOLD);
+ }
+ }
+
+ String cellValue = strip.stripHtml(dv.getDisplayValue().trim());
+ PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+
+ //row background color can be overwritten by cell background color
+ cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ if(nvl(dv.getAlignment()).trim().length()>0)
+ cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
+ else
+ cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ if(cfmt!= null) {
+ formatterCell(cfmt,cell);
+ }
+ else if(rfmt != null) {
+ formatterCell(rfmt,cell);
+ }
+
+ table.addCell(cell);
+
+ }//if isVisible()
+ }
+ }
+
+
+ private void addTotalRowColumns(PdfPTable table, DataRow dr, int idx) {
+
+ table.getDefaultCell().setColspan(1);
+ dr.resetNext();
+ dr.getNext();
+ for(;dr.hasNext();)
+ {
+ DataValue dv = dr.getNext();
+ //System.out.println(columnCount +" --> "+dv);
+ if(dv.isVisible()) {
+ HtmlFormatter cfmt = dv.getCellFormatter();
+ HtmlFormatter rfmt = dv.getRowFormatter();
+
+ Font cellFont = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE,
+ Font.NORMAL, Color.BLACK);
+ if(cfmt!= null) {
+ cellFormatterFont(cfmt,cellFont);
+ }
+ else if(rfmt != null) {
+ cellFormatterFont(rfmt,cellFont);
+ }
+ else {
+ if(dv.isBold()) {
+ cellFont.setStyle(Font.BOLD);
+ }
+ }
+
+ String cellValue = strip.stripHtml(dv.getDisplayValue().trim());
+ PdfPCell cell = new PdfPCell(new Paragraph(cellValue,cellFont));
+
+ //row background color can be overwritten by cell background color
+ cell.setBackgroundColor(getRowBackgroundColor(dr, idx));
+
+ if(nvl(dv.getAlignment()).trim().length()>0)
+ cell.setHorizontalAlignment(ElementTags.alignmentValue(dv.getAlignment()));
+ else
+ cell.setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+
+ if(cfmt!= null) {
+ formatterCell(cfmt,cell);
+ }
+ else if(rfmt != null) {
+ formatterCell(rfmt,cell);
+ }
+
+ table.addCell(cell);
+
+ }//if isVisible()
+ }
+ }
+
+
+ private void formatterCell(HtmlFormatter fmt, PdfPCell cell) {
+
+ if(nvl(fmt.getBgColor()).trim().length()>0)
+ cell.setBackgroundColor(Color.decode(fmt.getBgColor()));
+ if(nvl(fmt.getAlignment()).trim().length()>0)
+ cell.setHorizontalAlignment(ElementTags.alignmentValue(fmt.getAlignment()));
+ }
+
+ private void cellFormatterFont(HtmlFormatter fmt, Font font) {
+
+ if(fmt.isBold())
+ font.setStyle(Font.BOLD);
+ if(fmt.isItalic())
+ font.setStyle(Font.ITALIC);
+ if(fmt.isUnderline())
+ font.setStyle(Font.UNDERLINE);
+ if(fmt.getFontColor().trim().length()>0)
+ font.setColor(Color.decode(fmt.getFontColor()));
+ if(fmt.getFontSize().trim().length()>0)
+ font.setSize(Float.parseFloat(fmt.getFontSize())-Globals.getDataFontSizeOffset());
+// if(fmt.getFontFace().trim().length()>0)
+// cellFont.setFamily()
+
+ }
+
+ private Color getRowBackgroundColor(DataRow dr, int idx) {
+
+ Color color = Color.decode(Globals.getDataDefaultBackgroundHexCode());
+
+ HtmlFormatter rhf = dr.getRowFormatter();
+ if(rhf!=null && nvl(rhf.getBgColor()).trim().length()>0)
+
+ color = Color.decode(rhf.getBgColor());
+
+ else if(pb.isAlternateColor() && idx%2==0)
+
+ color = Color.decode(Globals.getDataBackgroundAlternateHexCode());
+
+ return color;
+
+ }
+
+ private int getTotalVisbleColumns(ReportData rd) {
+
+ int totalVisbleColumn = rd.getTotalColumnCount();
+ for(rd.reportDataRows.resetNext();rd.reportDataRows.hasNext();)
+ {
+ DataRow dr = rd.reportDataRows.getNext();
+ for(dr.resetNext();dr.hasNext();) {
+ DataValue dv = dr.getNext();
+ if(!dv.isVisible()) totalVisbleColumn--;
+ }
+
+ break;
+ }
+
+ return totalVisbleColumn;
+ }
+
+ /*
+ private int getFirstRowIndex(ReportRuntime rr) {
+ return (pb.getCurrentPage()>0)?pb.getCurrentPage()*rr.getPageSize()+1 : 1;
+ }
+ */
+ private float[] getRelativeWidths(ReportData rd, boolean crosstab){
+
+ int totalColumns = getTotalVisbleColumns(rd);
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ totalColumns += 1;
+ }*/
+ if(crosstab) {
+ totalColumns += 1;
+ }
+
+ if(totalColumns == 0 )
+ totalColumns=1;
+
+ float[] relativeWidths = new float[totalColumns];
+ //initial widths are even
+ for(int i=0; i<relativeWidths.length; i++)
+ relativeWidths[i] = 10f;
+
+ int index=0;
+ boolean firstPass = true;
+
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();)
+ {
+ if(firstPass) {
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ String columnWidth = "5";
+
+ if(columnWidth != null && columnWidth.trim().endsWith("%"))
+ relativeWidths[index] = Float.parseFloat(removeLastCharacter(columnWidth));
+
+ index++;
+ }*/
+
+ for(rd.reportRowHeaderCols.resetNext();rd.reportRowHeaderCols.hasNext();) {
+ String columnWidth = rd.reportRowHeaderCols.getNext().getColumnWidth();
+
+ if(columnWidth != null && columnWidth.trim().endsWith("%"))
+ relativeWidths[index] = Float.parseFloat(removeLastCharacter(columnWidth));
+
+ index++;
+ }
+ firstPass = false;
+ }
+
+ ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
+ for (chr.resetNext(); chr.hasNext();) {
+
+ ColumnHeader ch = chr.getNext();
+
+ if(ch.isVisible()) {
+
+ String columnWidth = ch.getColumnWidth();
+
+ if(ch.getColSpan() <= 1){
+ if(columnWidth != null && columnWidth.trim().endsWith("%"))
+ relativeWidths[index] = Float.parseFloat(removeLastCharacter(columnWidth));
+ }
+ else {
+ for(int i=0; i<ch.getColSpan(); i++) {
+ index += i;
+ if(columnWidth != null && columnWidth.trim().endsWith("%"))
+ relativeWidths[index] =
+ (Float.parseFloat(removeLastCharacter(columnWidth)))/ch.getColSpan();
+ }
+ }
+
+ index++;
+ }
+ }
+ }
+
+ return relativeWidths;
+ }
+
+ public static String removeLastCharacter(String str) {
+ return str.substring(0, str.length()-1);
+ }
+
+ private PdfPTable paintPdfReportHeader(HttpServletRequest request, Document document, PdfPTable table, ReportRuntime rr, float[] f)
+ throws DocumentException, IOException {
+
+ HttpSession session = request.getSession();
+ String drilldown_index = (String) session.getAttribute("drilldown_index");
+ int index = 0;
+ try {
+ index = Integer.parseInt(drilldown_index);
+ } catch (NumberFormatException ex) {
+ index = 0;
+ }
+ String title = (String) session.getAttribute("TITLE_"+index);
+ String subtitle = (String) session.getAttribute("SUBTITLE_"+index);
+ if(nvl(title).length()>0) {
+ //PdfPTable table = new PdfPTable(1);
+ table.setWidthPercentage(100f);
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ table.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
+
+
+ Font font = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE-2f,
+ Font.BOLD,
+ Color.BLACK);
+
+ //addEmptyRows(table,1);
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ //table.getDefaultCell().setBackgroundColor(Color.decode(Globals.getDataTableHeaderBackgroundFontColor()));
+ title = Utils.replaceInString(title, "<BR/>", " ");
+ title = Utils.replaceInString(title, "<br/>", " ");
+ title = Utils.replaceInString(title, "<br>", " ");
+ title = strip.stripHtml(nvl(title).trim());
+ //subtitle = Utils.replaceInString(subtitle, "<BR/>", " ");
+ //subtitle = Utils.replaceInString(subtitle, "<br/>", " ");
+ //subtitle = Utils.replaceInString(subtitle, "<br>", " ");
+ //subtitle = strip.stripHtml(nvl(subtitle).trim());
+ StyleSheet styles = new StyleSheet();
+
+ HTMLWorker htmlWorker = new HTMLWorker(document);
+ ArrayList cc = new ArrayList();
+ cc = htmlWorker.parseToList(new StringReader(subtitle), styles);
+
+ Phrase p1 = new Phrase();
+ for (int i = 0; i < cc.size(); i++){
+ Element elem = (Element)cc.get(i);
+ ArrayList al = elem.getChunks();
+ for (int j = 0; j < al.size(); j++) {
+ Chunk chunk = (Chunk) al.get(j);
+ chunk.font().setSize(6.0f);
+ }
+ p1.add(elem);
+ }
+ //cell = new PdfPCell(p1);
+ StyleSheet style = new StyleSheet();
+ style.loadTagStyle("font", "font-size", "3");
+ style.loadTagStyle("font", "size", "3");
+ styles.loadStyle("pdfFont1", "size", "11px");
+ styles.loadStyle("pdfFont1", "font-size", "11px");
+ /*ArrayList p = HTMLWorker.parseToList(new StringReader(nvl(title)), style);
+ for (int k = 0; k < p.size(); ++k){
+ document.add((com.lowagie.text.Element)p.get(k));
+ }*/
+ //p1.font().setSize(3.0f);
+ PdfPCell titleCell = new PdfPCell(new Phrase(title, font));
+ titleCell.setColspan(rr.getVisibleColumnCount());
+ PdfPCell subtitleCell = new PdfPCell(p1);
+ subtitleCell.setColspan(rr.getVisibleColumnCount());
+ titleCell.setHorizontalAlignment(1);
+ subtitleCell.setHorizontalAlignment(1);
+ table.addCell(titleCell);
+ table.addCell(subtitleCell);
+ //document.add(table);
+ }
+ return table;
+ }
+
+
+ private void paintPdfReportFooter(HttpServletRequest request, Document document, ReportRuntime rr, float[] f)
+ throws DocumentException, IOException {
+
+ HttpSession session = request.getSession();
+ String drilldown_index = (String) session.getAttribute("drilldown_index");
+ int index = 0;
+ try {
+ index = Integer.parseInt(drilldown_index);
+ } catch (NumberFormatException ex) {
+ index = 0;
+ }
+
+ String title = (String) session.getAttribute("FOOTER_"+index);
+ if(nvl(title).length()>0) {
+ PdfPTable table = new PdfPTable(1);
+ table.setWidthPercentage(100f);
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ table.getDefaultCell().setVerticalAlignment(Rectangle.ALIGN_BOTTOM);
+
+ Font font = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE-3f,
+ Font.BOLD,
+ Color.BLACK);
+
+
+ //addEmptyRows(table,1);
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ //table.getDefaultCell().setBackgroundColor(Color.decode(Globals.getDataTableHeaderBackgroundFontColor()));
+ /*title = Utils.replaceInString(title, "<BR/>", " ");
+ title = Utils.replaceInString(title, "<br/>", " ");
+ title = Utils.replaceInString(title, "<br>", " ");
+ title = strip.stripHtml(nvl(title).trim());*/
+ StyleSheet style = new StyleSheet();
+
+ HTMLWorker htmlWorker = new HTMLWorker(document);
+ ArrayList cc = new ArrayList();
+ cc = htmlWorker.parseToList(new StringReader(title), style);
+
+ Phrase p1 = new Phrase();
+ for (int i = 0; i < cc.size(); i++){
+ Element elem = (Element)cc.get(i);
+ ArrayList al = elem.getChunks();
+ for (int j = 0; j < al.size(); j++) {
+ Chunk chunk = (Chunk) al.get(j);
+ chunk.font().setSize(6.0f);
+ }
+ p1.add(elem);
+ }
+
+/*
+ HTMLWorker.parseToList(new StringReader(nvl(title)), style);*/
+ PdfPCell titleCell = new PdfPCell(p1);
+ titleCell.setHorizontalAlignment(Element.ALIGN_LEFT);
+ table.addCell(titleCell);
+ //table.
+ document.add(table);
+ }
+ //return table;
+ }
+
+
+ private void paintPdfTableHeader(Document document, ReportData rd, PdfPTable table)
+ throws DocumentException {
+
+ Font font = FontFactory.getFont(FONT_FAMILY,
+ FONT_SIZE+1f,
+ Font.BOLD,
+ Color.decode(Globals.getDataTableHeaderFontColor()));
+ //table.setHeaderRows(1);
+ table.getDefaultCell().setHorizontalAlignment(Rectangle.ALIGN_CENTER);
+ table.getDefaultCell().setBackgroundColor(Color.decode(Globals.getDataTableHeaderBackgroundFontColor()));
+ String title = "";
+
+ boolean firstPass = true;
+
+ /*if(rd.reportTotalRowHeaderCols!=null) {
+ if(firstPass) {
+ table.addCell(new Paragraph("No.", font));
+ firstPass = false;
+ }
+ }*/
+ for (rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext();)
+ {
+ if(firstPass) {
+ for(rd.reportRowHeaderCols.resetNext();rd.reportRowHeaderCols.hasNext();) {
+ /*if(firstPass) {
+ table.addCell(new Paragraph("No.", font));
+ firstPass = false;
+ } else {*/
+ RowHeaderCol rhc = rd.reportRowHeaderCols.getNext();
+ title = rhc.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+ table.addCell(new Paragraph(title,font));
+ //}
+ }
+ }
+
+ ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ //System.out.println(ch);
+ if(ch.isVisible()) {
+ title = ch.getColumnTitle();
+ title = Utils.replaceInString(title,"_nl_", " \n");
+ table.addCell(new Paragraph(title,font));
+ }
+ }
+ }
+ }
+
+ public static String currentTime(String pattern) {
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+ return dtimestamp.format(sysdate)+" "+Globals.getTimeZone();
+ //paramList.add(new IdNameValue("DATE", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
+ } catch(Exception ex) {}
+
+ SimpleDateFormat s = new SimpleDateFormat(pattern);
+ s.setTimeZone(TimeZone.getTimeZone(Globals.getTimeZone()));
+ //System.out.println("^^^^^^^^^^^^^^^^^^^^ " + Calendar.getInstance().getTime());
+ //System.out.println("^^^^^^^^^^^^^^^^^^^^ " + s.format(Calendar.getInstance().getTime()));
+ return s.format(Calendar.getInstance().getTime());
+ }
+
+ private PdfBean preparePdfBean(HttpServletRequest request,ReportRuntime rr) {
+ PdfBean pb = new PdfBean();
+
+ pb.setUserId(AppUtils.getUserID(request));
+
+ pb.setWhereToShowPageNumber(Globals.getPageNumberPosition());
+ pb.setAlternateColor(Globals.isDataAlternateColor());
+ pb.setTimestampPattern(Globals.getDatePattern());
+
+ int temp = -1;
+ try {
+ temp = Integer.parseInt(request.getParameter(AppConstants.RI_NEXT_PAGE));
+ } catch (NumberFormatException e) {}
+ pb.setCurrentPage(temp);
+
+ //pb.setPortrait( trueORfalse(request.getParameter("isPortrait"),true));
+ pb.setPortrait(trueORfalse(rr.getPDFOrientation() == "portait"?"true":"false", true));
+ //pb.setCoverPageIncluded( trueORfalse(request.getParameter("isCoverPageIncluded"), true));
+ //if(Globals.isCoverPageNeeded()) {
+ pb.setCoverPageIncluded(Globals.isCoverPageNeeded()?rr.isPDFCoverPage():false);
+ //}
+ pb.setTitle(nvl(request.getParameter("title")));
+ pb.setPagesize(nvls(request.getParameter("pagesize"),"LETTER"));
+
+ pb.setLogo1Url(rr.getPDFLogo1());
+ pb.setLogo2Url(rr.getPDFLogo2());
+ pb.setLogo1Size(rr.getPDFLogo1Size());
+ pb.setLogo2Size(rr.getPDFLogo2Size());
+ pb.setFullWebContextPath(request.getSession().getServletContext().getRealPath(File.separator));
+
+
+ pb.setDisplayChart(nvl(rr.getChartType()).trim().length()>0 && rr.getDisplayChart());
+
+ String id = nvl(request.getParameter("pdfAttachmentKey")).trim();
+ String log_id = nvl(request.getParameter("log_id")).trim();
+ if(id.length()>0 && log_id.length()>0)
+ pb.setAttachmentOfEmail(true);
+
+ return pb;
+ }
+
+ private boolean trueORfalse(String str) {
+ return (str != null) && (str.equalsIgnoreCase("true"));
+ }
+
+ private boolean trueORfalse(String str,boolean b_default) {
+ return str==null ? b_default : (str.equalsIgnoreCase("true"));
+ }
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/BarChartOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/BarChartOptions.java
new file mode 100644
index 00000000..7e99dc6e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/BarChartOptions.java
@@ -0,0 +1,75 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class BarChartOptions {
+ private boolean verticalOrientation;
+ private boolean stackedChart;
+ private boolean displayBarControls;
+ private boolean xAxisDateType;
+ private boolean minimizeXAxisTickers;
+ private boolean timeAxis;
+ private boolean yAxisLogScale;
+
+ public boolean isVerticalOrientation() {
+ return verticalOrientation;
+ }
+ public void setVerticalOrientation(boolean verticalOrientation) {
+ this.verticalOrientation = verticalOrientation;
+ }
+ public boolean isStackedChart() {
+ return stackedChart;
+ }
+ public void setStackedChart(boolean stackedChart) {
+ this.stackedChart = stackedChart;
+ }
+ public boolean isDisplayBarControls() {
+ return displayBarControls;
+ }
+ public void setDisplayBarControls(boolean displayBarControls) {
+ this.displayBarControls = displayBarControls;
+ }
+ public boolean isxAxisDateType() {
+ return xAxisDateType;
+ }
+ public void setxAxisDateType(boolean xAxisDateType) {
+ this.xAxisDateType = xAxisDateType;
+ }
+ public boolean isMinimizeXAxisTickers() {
+ return minimizeXAxisTickers;
+ }
+ public void setMinimizeXAxisTickers(boolean minimizeXAxisTickers) {
+ this.minimizeXAxisTickers = minimizeXAxisTickers;
+ }
+ public boolean isTimeAxis() {
+ return timeAxis;
+ }
+ public void setTimeAxis(boolean timeAxis) {
+ this.timeAxis = timeAxis;
+ }
+ public boolean isyAxisLogScale() {
+ return yAxisLogScale;
+ }
+ public void setyAxisLogScale(boolean yAxisLogScale) {
+ this.yAxisLogScale = yAxisLogScale;
+ }
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CategoryAxisJSON.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CategoryAxisJSON.java
new file mode 100644
index 00000000..93fab6e9
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CategoryAxisJSON.java
@@ -0,0 +1,24 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class CategoryAxisJSON extends IndexValueJSON {
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java
new file mode 100644
index 00000000..c46f48ac
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java
@@ -0,0 +1,4064 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.io.BufferedWriter;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.SortedSet;
+import java.util.TreeSet;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.apache.commons.lang.time.DateUtils;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.model.base.ChartSeqComparator;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.HtmlStripper;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.view.ReportData;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.web.support.UserUtils;
+
+public class ChartD3Helper {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ChartD3Helper.class);
+
+
+ private ReportRuntime reportRuntime;
+ private String chartType;
+
+ public static final long HOUR = 3600*1000;
+ public static final long DAY = 3600*1000*24;
+ public static final long MONTH = 3600*1000*24*31;
+ public static final long YEAR = 3600*1000*24*365;
+
+
+ public ChartD3Helper() {
+
+ }
+
+ /**
+ * @return the chartType
+ */
+ public String getChartType() {
+ return chartType;
+ }
+
+ /**
+ * @param chartType the chartType to set
+ */
+ public void setChartType(String chartType) {
+ this.chartType = chartType;
+ }
+
+ public ChartD3Helper(ReportRuntime rr) {
+ this.reportRuntime = rr;
+ }
+
+ public String createVisualization(String reportID, HttpServletRequest request) throws RaptorException {
+ //From annotations chart
+ clearReportRuntimeBackup(request);
+
+ //HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
+ final Long user_id = new Long((long) UserUtils.getUserId(request));
+ //String action = request.getParameter(AppConstants.RI_ACTION);
+ //String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+
+ ReportHandler rh = new ReportHandler();
+ ReportData reportData = null;
+ HashMap<String, String> chartOptionsMap = new HashMap<String, String>();
+ try {
+ if(reportID !=null) {
+ reportRuntime = rh.loadReportRuntime(request, reportID, true, 1);
+ setChartType(reportRuntime.getChartType());
+ reportData = reportRuntime.loadReportData(0, user_id.toString(), 10000,request, false);
+ }
+
+
+
+ String rotateLabelsStr = "";
+ rotateLabelsStr = AppUtils.nvl(reportRuntime.getLegendLabelAngle());
+ if(rotateLabelsStr.toLowerCase().equals("standard")) {
+ rotateLabelsStr = "0";
+ } else if (rotateLabelsStr.toLowerCase().equals("up45")) {
+ rotateLabelsStr = "45";
+ } else if (rotateLabelsStr.toLowerCase().equals("down45")) {
+ rotateLabelsStr = "-45";
+ } else if (rotateLabelsStr.toLowerCase().equals("up90")) {
+ rotateLabelsStr = "90";
+ } else if (rotateLabelsStr.toLowerCase().equals("down90")) {
+ rotateLabelsStr = "-90";
+ } else
+ rotateLabelsStr = "0";
+
+ String width = (AppUtils.getRequestNvlValue(request, "width").length()>0?AppUtils.getRequestNvlValue(request, "width"):(AppUtils.nvl(reportRuntime.getChartWidth()).length()>0?reportRuntime.getChartWidth():"700"));
+ String height = (AppUtils.getRequestNvlValue(request, "height").length()>0?AppUtils.getRequestNvlValue(request, "height"):(AppUtils.nvl(reportRuntime.getChartHeight()).length()>0?reportRuntime.getChartHeight():"300"));
+ String animationStr = (AppUtils.getRequestNvlValue(request, "animation").length()>0?AppUtils.getRequestNvlValue(request, "animation"):new Boolean(reportRuntime.isAnimateAnimatedChart()).toString());
+
+ String rotateLabels = (AppUtils.getRequestNvlValue(request, "rotateLabels").length()>0?AppUtils.getRequestNvlValue(request, "rotateLabels"):(rotateLabelsStr.length()>0?rotateLabelsStr:"0"));
+ String staggerLabelsStr = (AppUtils.getRequestNvlValue(request, "staggerLabels").length()>0?AppUtils.getRequestNvlValue(request, "staggerLabels"):"false");
+ String showMaxMinStr = (AppUtils.getRequestNvlValue(request, "showMaxMin").length()>0?AppUtils.getRequestNvlValue(request, "showMaxMin"):"false");
+ String showControlsStr = (AppUtils.getRequestNvlValue(request, "showControls").length()>0?AppUtils.getRequestNvlValue(request, "showControls"):new Boolean(reportRuntime.displayBarControls()).toString());
+ String showLegendStr = (AppUtils.getRequestNvlValue(request, "showLegend").length()>0?AppUtils.getRequestNvlValue(request, "showLegend"):new Boolean(!new Boolean(reportRuntime.hideChartLegend())).toString());
+ String topMarginStr = AppUtils.getRequestNvlValue(request, "topMargin");
+ String topMargin = (AppUtils.nvl(topMarginStr).length()<=0)?(reportRuntime.getTopMargin()!=null?reportRuntime.getTopMargin().toString():"30"):topMarginStr;
+ String bottomMarginStr = AppUtils.getRequestNvlValue(request, "bottomMargin");
+ String bottomMargin = (AppUtils.nvl(bottomMarginStr).length()<=0)?(reportRuntime.getBottomMargin()!=null?reportRuntime.getBottomMargin().toString():"50"):bottomMarginStr;
+ String leftMarginStr = AppUtils.getRequestNvlValue(request, "leftMargin");
+ String leftMargin = (AppUtils.nvl(leftMarginStr).length()<=0)?(reportRuntime.getLeftMargin()!=null?reportRuntime.getLeftMargin().toString():"100"):leftMarginStr;
+ String rightMarginStr = AppUtils.getRequestNvlValue(request, "rightMargin");
+ String rightMargin = (AppUtils.nvl(rightMarginStr).length()<=0)?(reportRuntime.getRightMargin()!=null?reportRuntime.getRightMargin().toString():"160"):rightMarginStr;
+ String showTitleStr = (AppUtils.getRequestNvlValue(request, "showTitle").length()>0?AppUtils.getRequestNvlValue(request, "showTitle"):new Boolean(reportRuntime.displayChartTitle()).toString());
+ String subType = AppUtils.getRequestNvlValue(request, "subType").length()>0?AppUtils.getRequestNvlValue(request, "subType"):(AppUtils.nvl(reportRuntime.getTimeSeriesRender()).equals("area")?reportRuntime.getTimeSeriesRender():"");
+ String stackedStr = AppUtils.getRequestNvlValue(request, "stacked").length()>0?AppUtils.getRequestNvlValue(request, "stacked"):new Boolean(reportRuntime.isChartStacked()).toString();
+ String horizontalBar = AppUtils.getRequestNvlValue(request, "horizontalBar").length()>0?AppUtils.getRequestNvlValue(request, "horizontalBar"):new Boolean(reportRuntime.isHorizontalOrientation()).toString();
+ String barRealTimeAxis = AppUtils.getRequestNvlValue(request, "barRealTimeAxis");
+ String barReduceXAxisLabels = AppUtils.getRequestNvlValue(request, "barReduceXAxisLabels").length()>0?AppUtils.getRequestNvlValue(request, "barReduceXAxisLabels"):new Boolean(reportRuntime.isLessXaxisTickers()).toString();;
+ String timeAxis = AppUtils.getRequestNvlValue(request, "timeAxis").length()>0?AppUtils.getRequestNvlValue(request, "timeAxis"):new Boolean(reportRuntime.isTimeAxis()).toString();
+ String logScale = AppUtils.getRequestNvlValue(request, "logScale").length()>0?AppUtils.getRequestNvlValue(request, "logScale"):new Boolean(reportRuntime.isLogScale()).toString();
+ String precision = AppUtils.getRequestNvlValue(request, "precision").length()>0?AppUtils.getRequestNvlValue(request, "precision"):"2";
+
+
+ chartOptionsMap.put("width", width);
+ chartOptionsMap.put("height", height);
+ chartOptionsMap.put("animation", animationStr);
+ chartOptionsMap.put("rotateLabels", rotateLabels);
+ chartOptionsMap.put("staggerLabels", staggerLabelsStr);
+ chartOptionsMap.put("showMaxMin", showMaxMinStr);
+ chartOptionsMap.put("showControls", showControlsStr);
+ chartOptionsMap.put("showLegend", showLegendStr);
+ chartOptionsMap.put("topMargin", topMargin);
+ chartOptionsMap.put("bottomMargin", bottomMargin);
+ chartOptionsMap.put("leftMargin", leftMargin);
+ chartOptionsMap.put("rightMargin", rightMargin);
+ chartOptionsMap.put("showTitle", showTitleStr);
+ chartOptionsMap.put("subType", subType);
+ chartOptionsMap.put("stacked", stackedStr);
+ chartOptionsMap.put("horizontalBar", horizontalBar);
+ chartOptionsMap.put("timeAxis", timeAxis);
+ chartOptionsMap.put("barRealTimeAxis", barRealTimeAxis);
+ chartOptionsMap.put("barReduceXAxisLabels", barReduceXAxisLabels);
+
+ chartOptionsMap.put("logScale", logScale);
+ chartOptionsMap.put("precision", precision);
+
+
+ } catch (RaptorException ex) {
+ ex.printStackTrace();
+ }
+ return createVisualization(reportRuntime, chartOptionsMap, request);
+ }
+
+ public String createVisualization(ReportRuntime reportRuntime, HttpServletRequest request) throws RaptorException {
+
+ String rotateLabelsStr = "";
+ rotateLabelsStr = AppUtils.nvl(reportRuntime.getLegendLabelAngle());
+ if(rotateLabelsStr.toLowerCase().equals("standard")) {
+ rotateLabelsStr = "0";
+ } else if (rotateLabelsStr.toLowerCase().equals("up45")) {
+ rotateLabelsStr = "45";
+ } else if (rotateLabelsStr.toLowerCase().equals("down45")) {
+ rotateLabelsStr = "-45";
+ } else if (rotateLabelsStr.toLowerCase().equals("up90")) {
+ rotateLabelsStr = "90";
+ } else if (rotateLabelsStr.toLowerCase().equals("down90")) {
+ rotateLabelsStr = "-90";
+ } else
+ rotateLabelsStr = "0";
+
+ HashMap<String,String> chartOptionsMap = new HashMap<String, String>();
+ chartOptionsMap.put("width", reportRuntime.getChartWidth());
+ chartOptionsMap.put("height", reportRuntime.getChartHeight());
+ chartOptionsMap.put("animation", new Boolean(reportRuntime.isAnimateAnimatedChart()).toString());
+ chartOptionsMap.put("rotateLabels", rotateLabelsStr);
+ chartOptionsMap.put("staggerLabels", "false");
+ chartOptionsMap.put("showMaxMin", "false");
+ chartOptionsMap.put("showControls", new Boolean(reportRuntime.displayBarControls()).toString());
+ chartOptionsMap.put("showLegend", new Boolean(!reportRuntime.hideChartLegend()).toString());
+ chartOptionsMap.put("topMargin", reportRuntime.getTopMargin()!=null?reportRuntime.getTopMargin().toString():"30");
+ chartOptionsMap.put("bottomMargin", reportRuntime.getBottomMargin()!=null?reportRuntime.getBottomMargin().toString():"50");
+ chartOptionsMap.put("leftMargin", reportRuntime.getLeftMargin()!=null?reportRuntime.getLeftMargin().toString():"100");
+ chartOptionsMap.put("rightMargin", reportRuntime.getRightMargin()!=null?reportRuntime.getRightMargin().toString():"160");
+ chartOptionsMap.put("showTitle", new Boolean(reportRuntime.displayChartTitle()).toString());
+ chartOptionsMap.put("subType", (AppUtils.nvl(reportRuntime.getTimeSeriesRender()).equals("area")?reportRuntime.getTimeSeriesRender():""));
+ chartOptionsMap.put("stacked", new Boolean(reportRuntime.isChartStacked()).toString());
+ chartOptionsMap.put("horizontalBar", new Boolean(reportRuntime.isHorizontalOrientation()).toString());
+ chartOptionsMap.put("timeAxis", new Boolean(reportRuntime.isTimeAxis()).toString());
+ chartOptionsMap.put("barReduceXAxisLabels", new Boolean(reportRuntime.isLessXaxisTickers()).toString());
+
+ chartOptionsMap.put("logScale", new Boolean(reportRuntime.isLogScale()).toString());
+ chartOptionsMap.put("precision", "2");
+
+
+
+ return createVisualization(reportRuntime, chartOptionsMap, request);
+ }
+
+ public String createVisualization(ReportRuntime reportRuntime, HashMap<String,String> chartOptionsMap, HttpServletRequest request) throws RaptorException {
+
+ //String width, String height, boolean animation, String rotateLabels, boolean staggerLabels, boolean showMaxMin, boolean showLegend, boolean showControls, String topMargin, String bottomMargin, boolean showTitle, String subType
+
+ String width = chartOptionsMap.get("width");
+ String height = chartOptionsMap.get("height");
+ boolean animation = getBooleanValue(chartOptionsMap.get("animation"), true);
+ String rotateLabels = chartOptionsMap.get("rotateLabels");
+ boolean staggerLabels = getBooleanValue(chartOptionsMap.get("staggerLabels"));
+ boolean showMaxMin = getBooleanValue(chartOptionsMap.get("showMaxMin"), false);
+ boolean showLegend = getBooleanValue(chartOptionsMap.get("showLegend"), true);
+ boolean showControls = getBooleanValue(chartOptionsMap.get("showControls"), true);
+ String topMargin = chartOptionsMap.get("topMargin");
+ String bottomMargin = chartOptionsMap.get("bottomMargin");
+ String leftMargin = chartOptionsMap.get("leftMargin");
+ String rightMargin = chartOptionsMap.get("rightMargin");
+ boolean showTitle = getBooleanValue(chartOptionsMap.get("showTitle"), true);
+ String subType = chartOptionsMap.get("subType");
+ boolean stacked = getBooleanValue(chartOptionsMap.get("stacked"), false);
+ boolean horizontalBar = getBooleanValue(chartOptionsMap.get("horizontalBar"), false);
+ boolean barRealTimeAxis = getBooleanValue(chartOptionsMap.get("barRealTimeAxis"), true);
+ boolean barReduceXAxisLabels= getBooleanValue(chartOptionsMap.get("barReduceXAxisLabels"), false);
+ boolean timeAxis = getBooleanValue(chartOptionsMap.get("timeAxis"), true);
+
+
+ boolean logScale = getBooleanValue(chartOptionsMap.get("logScale"), false);
+
+ int precision = 2;
+
+ try {
+ precision = Integer.parseInt(chartOptionsMap.get("precision"));
+ } catch (NumberFormatException ex) {
+
+ }
+
+ final Long user_id = new Long((long) UserUtils.getUserId(request));
+
+ HttpSession session = null;
+ session = request.getSession();
+
+ String chartType = reportRuntime.getChartType();
+ List l = reportRuntime.getAllColumns();
+ List lGroups = reportRuntime.getAllChartGroups();
+ HashMap mapYAxis = reportRuntime.getAllChartYAxis(reportRuntime.getReportParamValues());
+ //ReportParamValues reportParamValues = reportRuntime.getReportParamValues();
+ String chartLeftAxisLabel = reportRuntime.getFormFieldFilled(nvl(reportRuntime.getChartLeftAxisLabel()));
+ String chartRightAxisLabel = reportRuntime.getFormFieldFilled(nvl(reportRuntime.getChartRightAxisLabel()));
+
+ boolean multipleSeries = reportRuntime.isMultiSeries();
+
+ java.util.HashMap formValues = null;
+ formValues = getRequestParametersMap(reportRuntime, request);
+
+
+ String legendColumnName = (reportRuntime.getChartLegendColumn()!=null)?reportRuntime.getChartLegendColumn().getDisplayName():"Legend Column";
+ boolean displayChart = (nvl(chartType).length()>0)&&reportRuntime.getDisplayChart();
+ HashMap additionalChartOptionsMap = new HashMap();
+
+ StringBuffer wholeScript = new StringBuffer("");
+
+ String title = reportRuntime.getReportTitle();
+
+ title = parseTitle(title, formValues);
+
+ if(displayChart) {
+ DataSet ds = null;
+ try {
+ if (!(chartType.equals(AppConstants.GT_HIERARCHICAL) || chartType.equals(AppConstants.GT_HIERARCHICAL_SUNBURST) || chartType.equals(AppConstants.GT_ANNOTATION_CHART))) {
+ ds = (DataSet) loadChartData(new Long(user_id).toString(), request);
+ } else if(chartType.equals(AppConstants.GT_ANNOTATION_CHART)) {
+ String reportSQL = reportRuntime.getWholeSQL();
+ String dbInfo = reportRuntime.getDBInfo();
+ ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+ if(ds.getRowCount()<=0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, (chartType.toUpperCase()+" - " + "Report ID : " + reportRuntime.getReportID() + " DATA IS EMPTY"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("QUERY - " + reportSQL));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ }
+ } else if(chartType.equals(AppConstants.GT_HIERARCHICAL)||chartType.equals(AppConstants.GT_HIERARCHICAL_SUNBURST)) {
+ String reportSQL = reportRuntime.getWholeSQL();
+ String dbInfo = reportRuntime.getDBInfo();
+ ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+ }
+ } catch (RaptorException ex) {
+ //throw new RaptorException("Error while loading chart data", ex);
+ logger.error(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ logger.error(EELFLoggerDelegate.debugLogger, (chartType.toUpperCase()+" - " + "Report ID : " + reportRuntime.getReportID() + " ERROR THROWN FOR GIVEN QUERY "));
+ logger.error(EELFLoggerDelegate.debugLogger, ("QUERY - " + reportRuntime.getWholeSQL()));
+ logger.error(EELFLoggerDelegate.debugLogger, ("ERROR STACK TRACE" + ex.getMessage()));
+ logger.error(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+
+ }
+ if(ds==null) {
+ //displayChart = false;
+ if(chartType.equals(AppConstants.GT_ANNOTATION_CHART))
+ ds = new DataSet();
+ else
+ displayChart = false;
+ }
+ if(displayChart) {
+
+ if (chartType.equals(AppConstants.GT_BAR_3D)) {
+
+ // get category if not give the column name for the data column use this to develop series.
+ boolean hasCategoryAxis = reportRuntime.hasSeriesColumn();
+
+ boolean hasCustomizedChartColor = false;
+ int flag = 0;
+ flag = hasCategoryAxis?1:0;
+ Object uniqueElements [] = null;
+ ArrayList uniqueElementsList = new ArrayList();
+ Object uniqueXAxisElements[] = null;
+ ArrayList ts = new ArrayList();
+ //Set<String> ts1 = new HashSet();
+ ArrayList<String> ts1 = new ArrayList();
+ HashMap<String, String> columnMap = new HashMap();
+ String uniqueXAxisStr = "";
+ if(!timeAxis){
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ uniqueXAxisStr = ds.getString(i, 0);
+ ts1.add(uniqueXAxisStr);
+ }
+ }
+ uniqueElementsList.addAll(ts1);
+ uniqueXAxisElements = ts1.toArray();
+
+ if(flag == 1) {
+ StringBuffer catStr = new StringBuffer("");
+ String color="";
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ catStr = new StringBuffer("");
+ catStr.append(ds.getString(i, 2));
+ try {
+ if(ds.getString(i, "chart_color")!=null) {
+ color = ds.getString(i, "chart_color");
+ hasCustomizedChartColor = true;
+ catStr.append("|"+color);
+ }
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ //System.out.println("No Chart Color");
+ }
+
+ if(catStr.length()>0) {
+ //duplicates are avoided
+ if(!ts.contains(catStr.toString()))
+ ts.add(catStr.toString());
+
+ }
+ /* Get Chart LeftAxis Label even from Range Axis definition. */
+ DataColumnType dct = null;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ if(!(nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(nvl(chartLeftAxisLabel).length()<=0) {
+ chartLeftAxisLabel = nvl(dct.getYAxis());
+ chartLeftAxisLabel = (chartLeftAxisLabel.indexOf("|")!=-1)?chartLeftAxisLabel.substring(0,chartLeftAxisLabel.indexOf("|")):"";
+ }
+ }
+ }
+
+ }
+ //Object uniqueElements [] = ts.toArray();
+ //SortedSet s = Collections.synchronizedSortedSet(ts);
+ uniqueElements = ts.toArray();
+ } else {
+ DataColumnType dct = null;
+ List yTextSeries = reportRuntime.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues);
+ //if(columnValuesList.size() == 1) {
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+
+ if(!(nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if((dct.isChartSeries()!=null && dct.isChartSeries().booleanValue()) || (dct.getChartSeq()!=null && dct.getChartSeq()>0) ) {
+
+ if(nvl(dct.getChartColor()).length()>0) hasCustomizedChartColor = true;
+ if(hasCustomizedChartColor) {
+ //duplicates are avoided
+ if(!ts.contains(dct.getDisplayName()+"|"+nvl(dct.getChartColor())))
+ ts.add(dct.getDisplayName()+"|"+nvl(dct.getChartColor()));
+ } else {
+ //duplicates are avoided
+ if(!ts.contains(dct.getDisplayName()))
+ ts.add(dct.getDisplayName());
+ }
+ if(nvl(chartLeftAxisLabel).length()<=0) {
+ chartLeftAxisLabel = nvl(dct.getYAxis());
+ chartLeftAxisLabel = (chartLeftAxisLabel.indexOf("|")!=-1)?chartLeftAxisLabel.substring(0,chartLeftAxisLabel.indexOf("|")):"";
+ }
+ columnMap.put(dct.getDisplayName(), dct.getColId());
+ /*
+ ts.add(dct.getDisplayName());
+ if(nvl(chartLeftAxisLabel).length()<=0) {
+ chartLeftAxisLabel = nvl(dct.getYAxis());
+ chartLeftAxisLabel = (chartLeftAxisLabel.indexOf("|")!=-1)?chartLeftAxisLabel.substring(0,chartLeftAxisLabel.indexOf("|")):"";
+ }
+ columnMap.put(dct.getDisplayName(), dct.getColId());
+ */
+ }
+ }
+
+ }
+ //SortedSet s = Collections.synchronizedSortedSet(ts);
+ uniqueElements = ts.toArray();
+
+ }
+
+ wholeScript.append("<!DOCTYPE html>\n");
+ wholeScript.append("<html>\n");
+ wholeScript.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF8\">\n");
+ wholeScript.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n");
+ wholeScript.append("<link href=\""+ AppUtils.getBaseFolderURL() +"d3/css/nv.d3.css\" rel=\"stylesheet\" type=\"text/css\">\n");
+ //wholeScript.append("")
+ wholeScript.append("<style>\n " +
+ " body { \n" +
+ " overflow-y:scroll; \n" +
+ " } \n" +
+ " text { \n" +
+ " font: 12px sans-serif; \n" +
+ " } \n" +
+ " svg { \n" +
+ " display: block;\n" +
+ " } \n" +
+ " #chart"+reportRuntime.getReportID()+" svg { \n" +
+ " height: "+ (nvl(height).length()>0?(height.endsWith("px")?height:height+"px"):"420px") + "; \n" +
+ " width: "+ (nvl(width).length()>0?(width.endsWith("px")?width:width+"px"):"700px") + "; \n" +
+ " min-width: 100px; \n" +
+ " min-height: 100px; \n" +
+ " } \n" +
+ " tr.z-row-over > td.z-row-inner, tr.z-row-over > .z-cell {" +
+ " background-color: rgb(255, 255, 255); "+
+ "} \n");
+
+ wholeScript.append(".nodatadiv {\n");
+ wholeScript.append(" display: table-cell;\n");
+ wholeScript.append(" width: 700px;\n");
+ wholeScript.append(" height:370px;\n");
+ wholeScript.append(" text-align:center;\n");
+ wholeScript.append(" vertical-align: middle;\n");
+ wholeScript.append("}\n");
+ wholeScript.append(".nodatainner {\n");
+ wholeScript.append(" padding: 10px;\n");
+ wholeScript.append("}\n");
+
+ wholeScript.append(" </style> \n" );
+ wholeScript.append("<body> \n");
+ if(showTitle)
+ wholeScript.append("<div align=\"center\"><H3>" + title +"</H3></div>");
+
+ wholeScript.append("<div id=\"chart"+reportRuntime.getReportID()+"\"> <svg></svg> </div> \n");
+ //js files
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/d3.v3.min.js\"></script>");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/nv.d3.min.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/tooltip.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/utils.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/axis.min.js\"></script> \n");
+ //wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/discreteBar.js\"></script> \n");
+ //wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/discreteBarChart.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/multiChart.js\"></script> \n");
+ //json
+ wholeScript.append("<script> \n");
+ wholeScript.append("historicalBarChart = [ \n");
+ //wholeScript.append("{ \n");
+ // data
+ ArrayList dataSeries = new ArrayList();
+
+ String uniqueElement = "";
+ for (int i = 0; i < uniqueElements.length; i++) {
+ uniqueElement = (String)uniqueElements[i];
+ if(multipleSeries && (nvl(chartRightAxisLabel).length() > 0))
+ dataSeries.add(new StringBuffer(" { \"type\":\"bar\", \"key\": \""+ (hasCustomizedChartColor?(uniqueElement.indexOf("|")!=-1?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement):uniqueElement) +"\", \"yAxis\": \""+(i+1)+"\", "+ (hasCustomizedChartColor?("\"color\": \""+uniqueElement.substring(uniqueElement.indexOf("|")+1) + "\","):"")+"\"values\": ["));
+ else
+ dataSeries.add(new StringBuffer(" { \"type\":\"bar\", \"key\": \""+ (hasCustomizedChartColor?(uniqueElement.indexOf("|")!=-1?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement):uniqueElement) +"\", \"yAxis\": \""+(1)+"\", "+ (hasCustomizedChartColor?("\"color\": \""+uniqueElement.substring(uniqueElement.indexOf("|")+1) + "\","):"")+"\"values\": ["));
+ }
+
+ // added to load all date elements
+ HashMap<String, HashMap<String, String>> dataSeriesMap = new HashMap<String, HashMap<String, String>>();
+
+ for (int i = 0; i < uniqueElements.length; i++) {
+ if(multipleSeries && (nvl(chartRightAxisLabel).length() > 0))
+ dataSeriesMap.put((String) uniqueElements[i], new HashMap<String, String>());
+ //dataSeries.add(new StringBuffer(" { \"type\":\"bar\", \"key\": \""+ uniqueElements[i] +"\", \"yAxis\": \""+(i+1)+"\", \"values\": ["));
+ else
+ dataSeriesMap.put((String) uniqueElements[i], new HashMap<String, String>());
+
+ //dataSeries.add(new StringBuffer(" { \"type\":\"bar\", \"key\": \""+ uniqueElements[i] +"\", \"yAxis\": \""+(1)+"\", \"values\": ["));
+ }
+
+ String dateStr = null;
+ java.util.Date date = null;
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+
+ int flagNoDate = 0;
+
+ int MAXNUM = 0;
+ int YAXISNUM = 0;
+ int flagNull = 0;
+
+ double YAXISDOUBLENUM = 0.0;
+ double MAXDOUBLENUM = 0.0;
+ int MAXNUMDECIMALPLACES = 0;
+
+ int formatFlag = 0;
+
+ TreeSet<String> dateStrList = new TreeSet<String>();
+ // added to store all date elements
+ SortedSet<String> sortSet = new TreeSet<String>();
+ int count = 0;
+ if(flag!= 1) {
+ HashMap dataSeriesStrMap = new HashMap();
+ HashMap dataSeriesOverAllMap = new HashMap();
+ String valueDataSeries = "";
+
+ for (int j = 0; j < uniqueElements.length; j++) {
+ dataSeriesStrMap = new HashMap();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ flagNoDate = 0;
+ YAXISNUM = 0;
+ YAXISDOUBLENUM = 0.0;
+ flagNull= 0;
+ dateStr = ds.getString(i, 1);
+ if(timeAxis) {
+ date = getDateFromDateStr(dateStr);
+ formatFlag = getFlagFromDateStr(dateStr);
+ }
+ uniqueElement = (String)uniqueElements[j];
+ if(date==null) {
+ //continue;
+ flagNoDate = 1;
+ int pos = 0;
+ //if(!((String)uniqueElementsList.get(i)).equals(dateStr)) {
+ for (int f=0 ; f< uniqueXAxisElements.length; f++) {
+ if(uniqueXAxisElements[f].equals(dateStr)){
+ pos = f ;
+ break;
+ }
+ }
+ /*for(int f=0; f<uniqueElementsList.size() && f < pos; f++)
+ {
+ StringBuffer strBuf = ((StringBuffer)dataSeries.get(j));
+ if(strBuf.indexOf((String)uniqueElementsList.get(f)) < 0 ) {
+ dataSeriesStrMap.put((String)uniqueElementsList.get(f), value);
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + (String)uniqueElementsList.get(f) + "\" , \"y\": null },");
+ }
+ }*/
+ //}
+
+ dateStrList.add("'"+dateStr+"'");
+ //uniqueElement = (String)uniqueElements[j];
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i, columnMap.get((hasCustomizedChartColor?(uniqueElement.indexOf("|")!=-1?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement):uniqueElement))));
+ //if(MAXNUM < YAXISNUM) MAXNUM = YAXISNUM;
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i, columnMap.get((hasCustomizedChartColor?(uniqueElement.indexOf("|")!=-1?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement):uniqueElement))));
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ } catch (NumberFormatException ex1) {
+ flagNull = 1;
+ }
+ //flagNull = 1;
+ }
+ /* For Non-date type value enclose with double quotes */
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull==0?(YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+ if(logScale) {
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull==0?(YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():(YAXISNUM>0?new Double(Math.log10(new Integer(YAXISNUM).doubleValue())).toString():null)):null) +"}, ");
+ valueDataSeries = "{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():new Double(Math.log10(new Double(YAXISNUM>0?YAXISNUM:1).doubleValue())).toString()): null) +"}, ";
+ dataSeriesStrMap.put(dateStr, valueDataSeries);
+ } else {
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull==0?(YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+ valueDataSeries = "{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ";
+ dataSeriesStrMap.put(dateStr, valueDataSeries);
+
+ }
+
+ dataSeriesOverAllMap.put(uniqueElements[j], dataSeriesStrMap);
+
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":\"" + ds.getString(i, columnMap.get((String)uniqueElements[j])) +"\"}, ");
+ } else {
+
+ if(!barRealTimeAxis) { // true - non-time
+ if(!dateStrList.contains(new Long(date.getTime()).toString())) {
+ dateStrList.add(new Long(date.getTime()).toString());
+ for (int k = 0; k < uniqueElements.length; k++) {
+ //((StringBuffer) dataSeries.get(k)).append ("{ \"x\":" + date.getTime() + " , \"y\":null}, ");
+ HashMap<String, String> dataMap = dataSeriesMap.get((String) uniqueElements[k]);
+ dataMap.put(date.getTime()+"", "null");
+
+ }
+ }
+ }
+ //if(ds.getString(i, 2).equals(uniqueElements[j])) {
+ /*if(!dateStrList.contains(new Long(date.getTime()).toString())) {
+ for (int k = 0; k < uniqueElements.length; k++) {
+ ((StringBuffer) dataSeries.get(k)).append ("{ \"x\":" + date.getTime() + " , \"y\":null}, ");
+ }
+ }*/
+ //dateStrList.add(new Long(date.getTime()).toString());
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i, columnMap.get(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))));
+ dateStrList.add(new Long(date.getTime()).toString());
+ //if(MAXNUM < YAXISNUM) MAXNUM = YAXISNUM;
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i, columnMap.get(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))));
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ } catch (NumberFormatException ex1) {
+ flagNull = 1;
+ }
+
+ //flagNull = 1;
+ }
+ HashMap<String, String> dataMap = dataSeriesMap.get((String) uniqueElements[j]);
+ if(logScale) {
+ dataMap.put(date.getTime()+"", (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():(YAXISNUM>0?new Double(Math.log10(new Integer(YAXISNUM).doubleValue())).toString():null)): "null"));
+ } else {
+ dataMap.put(date.getTime()+"", (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(YAXISDOUBLENUM).toString():new Integer(YAXISNUM).toString()): "null"));
+ }
+
+
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + (flagNull==0?(YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + ds.getString(i, columnMap.get((String)uniqueElements[j])) +"}, ");
+ }
+ //}
+ }
+ }
+ for(int kI = 0; kI < uniqueElements.length; kI++) {
+ HashMap dataSeriesStrMap1 = (HashMap) dataSeriesOverAllMap.get(uniqueElements[kI]);
+ for (int kL = 0; kL < uniqueXAxisElements.length; kL++) {
+ if(dataSeriesStrMap1.containsKey(uniqueXAxisElements[kL])) {
+ ((StringBuffer) dataSeries.get(kI)).append ((String)dataSeriesStrMap1.get(uniqueXAxisElements[kL]));
+ } else {
+ ((StringBuffer) dataSeries.get(kI)).append ("{ \"x\":\"" + uniqueXAxisElements[kL] + "\" , \"y\": null }, ");
+ }
+ }
+ }
+
+ } else {
+ HashMap dataSeriesStrMap = new HashMap();
+ HashMap dataSeriesOverAllMap = new HashMap();
+ String valueDataSeries = "";
+ for (int j = 0; j < uniqueElements.length; j++) {
+ dataSeriesStrMap = new HashMap();
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ flagNoDate = 0;
+ YAXISNUM = 0;
+ YAXISDOUBLENUM = 0.0;
+ flagNull= 0;
+ //flagSecondNull = 0;
+ dateStr = ds.getString(i, 1);
+ if(timeAxis) {
+ date = getDateFromDateStr(dateStr);
+ formatFlag = getFlagFromDateStr(dateStr);
+ }
+ uniqueElement = (String)uniqueElements[j];
+ if(date==null) {
+ //continue;
+ flagNoDate = 1;
+ int pos = 0;
+ //if(!((String)uniqueElementsList.get(i)).equals(dateStr)) {
+ for (int f=0 ; f< uniqueXAxisElements.length; f++) {
+ if(uniqueXAxisElements[f].equals(dateStr)){
+ pos = f ;
+ break;
+ }
+ }
+ /*for(int f=0; f<uniqueElementsList.size() && f < pos; f++)
+ {
+ StringBuffer strBuf = ((StringBuffer)dataSeries.get(j));
+ if(strBuf.indexOf((String)uniqueElementsList.get(f)) < 0 ) {
+ dataSeriesStrMap.put((String)uniqueElementsList.get(f), value);
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + (String)uniqueElementsList.get(f) + "\" , \"y\": null },");
+ }
+ }*/
+ //}
+
+ if(ds.getString(i, 2).equals(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))) {
+ dateStrList.add("'"+dateStr+"'");
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i, 3));
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i, 3));
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ } catch (NumberFormatException ex1) {
+ flagNull = 1;
+ }
+
+ //flagNull = 1;
+ }
+
+ if(logScale) {
+ if(timeAxis) {
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + dateStr + " , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():new Double(Math.log10(new Double(YAXISNUM>0?YAXISNUM:1).doubleValue())).toString()): null) +"}, ");
+ valueDataSeries = "{ \"x\":" + dateStr + " , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():new Double(Math.log10(new Double(YAXISNUM>0?YAXISNUM:1).doubleValue())).toString()): null) +"}, ";
+ dataSeriesStrMap.put(dateStr, valueDataSeries);
+ } else {
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():new Double(Math.log10(new Double(YAXISNUM>0?YAXISNUM:1).doubleValue())).toString()): null) +"}, ");
+ valueDataSeries = "{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():new Double(Math.log10(new Double(YAXISNUM>0?YAXISNUM:1).doubleValue())).toString()): null) +"}, ";
+ dataSeriesStrMap.put(dateStr, valueDataSeries);
+ }
+ } else {
+ if(timeAxis) {
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + dateStr + " , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ");
+ valueDataSeries = "{ \"x\":" + dateStr + " , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ";
+ dataSeriesStrMap.put(dateStr, valueDataSeries);
+
+ } else {
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ");
+ valueDataSeries = "{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ";
+ dataSeriesStrMap.put(dateStr, valueDataSeries);
+
+ }
+ }
+
+ /*if(ds.getString(i, 2).equals(uniqueElements[j])) {
+ dateStrList.add("'"+dateStr+"'");
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":\"" + ds.getString(i, 3) +"\"}, ");
+ */
+ }
+ dataSeriesOverAllMap.put(uniqueElements[j], dataSeriesStrMap);
+ } else {
+ //date = MMDDYYYYFormat.parse(ds.getString(i, 1), new ParsePosition(0));
+ if(!barRealTimeAxis) { // true - non-time
+ if(!dateStrList.contains(new Long(date.getTime()).toString())) {
+ dateStrList.add(new Long(date.getTime()).toString());
+ for (int k = 0; k < uniqueElements.length; k++) {
+ //((StringBuffer) dataSeries.get(k)).append ("{ \"x\":" + date.getTime() + " , \"y\":null}, ");
+ HashMap<String, String> dataMap = dataSeriesMap.get((String) uniqueElements[k]);
+ dataMap.put(date.getTime()+"", "null");
+
+ }
+ }
+ }
+ if(ds.getString(i, 2).equals(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))) {
+ dateStrList.add(new Long(date.getTime()).toString());
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i, 3));
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i, 3));
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ } catch (NumberFormatException ex1) {
+ flagNull = 1;
+ }
+
+ //flagNull = 1;
+ }
+
+ //if(ds.getString(i, 2).equals(uniqueElements[j])) {
+ // dateStrList.add("'"+dateStr+"'");
+ HashMap<String, String> dataMap = dataSeriesMap.get((String) uniqueElements[j]);
+ if(logScale) {
+ dataMap.put(date.getTime()+"", (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(Math.log10(YAXISDOUBLENUM)).toString():new Double(Math.log10(new Double(YAXISNUM>0?YAXISNUM:1).doubleValue())).toString()): "null"));
+ } else {
+ if(dataMap.containsKey(new String(""+date.getTime())) && dataMap.get(new String(""+date.getTime())).equals("null")) {
+ dataMap.remove(date.getTime());
+ }
+ dataMap.put(date.getTime()+"", (flagNull == 0 ? (YAXISDOUBLENUM>0?new Double(YAXISDOUBLENUM).toString():new Integer(YAXISNUM).toString()): "null"));
+ //System.out
+ // .println(dataMap + " " + dataSeriesMap);
+ //}
+ }
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ");
+
+
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + ds.getString(i, 3) +"}, ");
+ } else if (AppUtils.nvl(ds.getString(i, 2)).length()<=0) {
+ dateStrList.add(new Long(date.getTime()).toString());
+ HashMap<String, String> dataMap1 = null;
+ String uniqueElement1 = "";
+ for (int j1 = 0; j1 < uniqueElements.length; j1++) {
+ uniqueElement1 = (String)uniqueElements[j];
+ if(ds.getString(i, 2).equals(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement1.lastIndexOf("|") != -1) ?uniqueElement1.substring(0, uniqueElement1.lastIndexOf("|")):uniqueElement1))) {
+ dataMap1 = dataSeriesMap.get((String) uniqueElements[j1]);
+ if(!dataMap1.containsKey(new String(""+date.getTime())))
+ dataMap1.put(date.getTime()+"", "null");
+ }
+ }
+ }
+ }
+ // dataSeriesOverAllMap.put(uniqueElements[j], dataSeriesMap);
+ }
+
+ }
+ for(int kI = 0; kI < uniqueElements.length; kI++) {
+ HashMap dataSeriesStrMap1 = (HashMap) dataSeriesOverAllMap.get(uniqueElements[kI]);
+ for (int kL = 0; kL < uniqueXAxisElements.length; kL++) {
+ if(dataSeriesStrMap1.containsKey(uniqueXAxisElements[kL])) {
+ ((StringBuffer) dataSeries.get(kI)).append ((String)dataSeriesStrMap1.get(uniqueXAxisElements[kL]));
+ } else {
+ ((StringBuffer) dataSeries.get(kI)).append ("{ \"x\":\"" + uniqueXAxisElements[kL] + "\" , \"y\": null }, ");
+ }
+ }
+ }
+ }
+
+ StringBuffer dateStrBuf = new StringBuffer("");
+ /*if(count == 1) {
+ Long initialDate = Long.parseLong((String)ds.getString(0, 0));
+ Long endDate = Long.parseLong((String) ds.getString(ds.getRowCount(), 0));
+ java.util.Date date1 = null;
+
+ while ( initialDate <= endDate) {
+ //System.out.println("********** " + df.format(initialDate));
+ date1 = new java.util.Date(initialDate.longValue() * 1000);
+ initialDate = initialDate + HOUR;
+
+ dateStrBuf.append(initialDate+",");
+ sortSet.add(""+initialDate);
+ //DateUtils.addHours(date1, 1);
+ }
+ }*/
+
+ if(dateStrList.size()>0) {
+ SortedSet<String> s = Collections.synchronizedSortedSet(dateStrList);
+ Object[] dateElements = (Object[]) s.toArray();
+
+ String element = "";
+ /* if not date value */
+ if(!timeAxis) {
+ for (int i = 0; i < dateElements.length; i++) {
+ dateStrBuf.append(dateElements[i]+",");
+ }
+ } else {
+ if(!barRealTimeAxis || (flagNoDate == 1)) { // non-time
+ for (int i = 0; i < dateElements.length; i++) {
+ dateStrBuf.append(dateElements[i]+",");
+ }
+ } else {
+ Long initialDate = Long.parseLong((String)dateElements[0]);
+ Long endDate = Long.parseLong((String) dateElements[dateElements.length-1]);
+ java.util.Date date1 = null;
+ //first value
+ date1 = new java.util.Date(initialDate.longValue());
+ /* DateFormat formatter = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss Z");
+ System.out.println(formatter.format(new java.util.Date(initialDate.longValue())));
+ */ //initialDate = initialDate + HOUR;
+
+ dateStrBuf.append(initialDate+",");
+ sortSet.add(""+initialDate);
+
+ // DateUtils.
+
+ while ( initialDate <= endDate) {
+ //System.out.println("********** " + df.format(initialDate));
+ //date1 = new java.util.Date(initialDate.longValue() * 1000);
+ date1 = new java.util.Date(initialDate.longValue());
+ if(formatFlag==HOURFLAG)
+ date1 = DateUtils.addHours(date1, 1);
+ else if (formatFlag == DAYFLAG)
+ date1 = DateUtils.addDays(date1, 1);
+ else if (formatFlag == MONTHFLAG)
+ date1 = DateUtils.addMonths(date1, 1);
+ else if (formatFlag == YEARFLAG)
+ date1 = DateUtils.addMonths(date1, 1);
+ initialDate = date1.getTime();
+
+ if(initialDate <= endDate) {
+ dateStrBuf.append(initialDate+",");
+ sortSet.add(""+initialDate);
+ }
+ //DateUtils.addHours(date1, 1);
+ }
+ //DateFormat df = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
+ //df.setTimeZone(TimeZone.getTimeZone("UTC"));
+ //java.util.Date date1 = new java.util.Date(initialDate.longValue() * 1000);
+ //java.util.Date d = df.
+ //for ()
+ }
+ }
+ dateStrBuf.deleteCharAt(dateStrBuf.length()-1);
+ }
+
+ if(timeAxis) {
+ //if(!barRealTimeAxis) { // false - non-time
+ Object[] dateAllElements = (Object[]) sortSet.toArray();
+
+ for (int i = 0; i < uniqueElements.length; i++) {
+ HashMap<String, String> dataMap = dataSeriesMap.get((String)uniqueElements[i]);
+ for (int j=0; j<dateAllElements.length;j++) {
+ //if(strBuf.toString().indexOf((String) dateAllElements[j]) == -1) {
+ if(!dataMap.containsKey((String) dateAllElements[j])) {
+ dataMap.put((String) dateAllElements[j], "null");
+ //((StringBuffer) dataSeries.get(i)).append ("{ \"x\":" + dateAllElements[j] + " , \"y\":null}, ");
+ }
+ }
+ }
+ //}
+ }
+ String valueStr = "";
+ for (int i = 0; i < uniqueElements.length; i++) {
+ HashMap<String, String> dataMap = dataSeriesMap.get((String)uniqueElements[i]);
+ Set<String> keySet = dataMap.keySet();
+ ArrayList<String> keySortedList = new ArrayList<String>(new TreeSet<String>(keySet));
+
+ for (int k=0; k < keySortedList.size(); k++) {
+ valueStr = dataSeriesMap.get((String)uniqueElements[i]).get(keySortedList.get(k));
+ if(valueStr.equals("null"))
+ valueStr = null;
+ else {
+ //if(logScale)
+ //valueStr = new Double(Math.log10(new Double(valueStr).doubleValue())).toString();
+ }
+ ((StringBuffer) dataSeries.get(i)).append ("{ \"x\":" + keySortedList.get(k) + " , \"y\":" + valueStr +"}, ");
+ // ((StringBuffer) dataSeries.get(i)).append ("{ \"x\":" + keySortedList.get(k) + " , \"y\":" + valueStr +"}, ");
+ }
+
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + (flagNull == 0 ? (YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM): null) +"}, ");
+ }
+
+ for (int i = 0; i < uniqueElements.length; i++) {
+ StringBuffer strBuf = ((StringBuffer) dataSeries.get(i));
+ ((StringBuffer) dataSeries.get(i)).deleteCharAt(((StringBuffer) dataSeries.get(i)).lastIndexOf(","));
+ if(i < (uniqueElements.length -1) ) {
+ ((StringBuffer) dataSeries.get(i)).append("] } , \n");
+ }
+ else {
+ ((StringBuffer) dataSeries.get(i)).append("] } \n");
+ }
+ }
+ if(ds.getRowCount() > 0) {
+ for (int i = 0; i < uniqueElements.length; i++) {
+ wholeScript.append((StringBuffer)dataSeries.get(i));
+ }
+ }
+
+
+ wholeScript.append("]; \n");
+
+ //add global variable
+ wholeScript.append("var chart; \n");
+ //javascript to create Bar Chart
+ wholeScript.append("nv.addGraph(function() { \n");
+ if(horizontalBar /*&& flagNoDate == 1*/)
+ wholeScript.append(" chart = nv.models.multiBarHorizontalChart() \n");
+ else /*if (flagNoDate == 1)*/
+ wholeScript.append(" chart = nv.models.multiBarChart() \n");
+ /*else
+ wholeScript.append(" var chart = nv.models.multiBarTimeSeriesChart() \n");*/
+
+ wholeScript.append(" .margin({top: "+ topMargin +", right: "+ rightMargin +", bottom: "+ bottomMargin +", left: " + leftMargin +"}) \n");
+ if(showLegend) {
+ wholeScript.append(" .showLegend(true) \n ");
+ } else {
+ wholeScript.append(" .showLegend(false) \n ");
+ }
+ if(!horizontalBar && barReduceXAxisLabels)
+ wholeScript.append(" .reduceXTicks(true) \n ");
+ else if (!horizontalBar) {
+ wholeScript.append(" .reduceXTicks(false) \n ");
+ //wholeScript.append(" chart.lines1.forceY(["+(nvl(reportRuntime.getRangeAxisLowerLimit()).length()<=0?"0":reportRuntime.getRangeAxisLowerLimit()) +", "+ (nvl(reportRuntime.getRangeAxisUpperLimit()).length()<=0?UPPER_RANGE:reportRuntime.getRangeAxisUpperLimit()) + "]); \n" +
+ double UPPER_RANGE = 0;
+ if(Math.ceil((MAXDOUBLENUM+(MAXDOUBLENUM*25/100))/100) * 100 >= 1) {
+ UPPER_RANGE = Math.ceil(MAXDOUBLENUM+(MAXDOUBLENUM*25/100));
+ } else UPPER_RANGE = 1;
+ wholeScript.append(" .forceY(["+(nvl(reportRuntime.getRangeAxisLowerLimit()).length()<=0?"0":reportRuntime.getRangeAxisLowerLimit()) +", "+ (nvl(reportRuntime.getRangeAxisUpperLimit()).length()<=0?UPPER_RANGE:reportRuntime.getRangeAxisUpperLimit()) + "])\n");
+ }
+ if(!animation) {
+ wholeScript.append(" .delay(0) \n ");
+ }
+ if(showControls) {
+ wholeScript.append(" .showControls(true) \n ");
+ } else if (!showControls){
+ wholeScript.append(" .showControls(false) \n ");
+ }
+ if(stacked && !logScale)
+ wholeScript.append(" .stacked(true)\n ");
+ else if(!stacked || logScale)
+ wholeScript.append(" .stacked(false)\n ");
+ if(logScale) {
+ wholeScript.append(" .logScale(true)\n ");
+ } else {
+ wholeScript.append(" .logScale(false)\n ");
+ }
+
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>=0 && reportRuntime.getLegendPosition().equals("right")) {
+ wholeScript.append(" .legendPos('right')\n" );
+ } else {
+ wholeScript.append(" .legendPos('top')\n" );
+ }
+ if(uniqueElements.length <= 10) {
+ wholeScript.append(" .color(d3.scale.category10().range()); \n" +
+ " chart.xAxis\n");
+ } else if (uniqueElements.length <= 20) {
+ wholeScript.append(" .color(d3.scale.category50().range()); \n" +
+ " chart.xAxis\n");
+ } else {
+ wholeScript.append(" .color(d3.scale.category50().range()); \n" +
+ " chart.xAxis\n");
+
+ }
+
+ if(flagNoDate == 0)
+ wholeScript.append(" .tickValues(["+ dateStrBuf.toString() + "])\n ");
+ else {
+ wholeScript.append(" .tickValues(["+ dateStrBuf.toString() + "])\n ");
+ }
+ if(staggerLabels) {
+ wholeScript.append(" .staggerLabels(true) \n");
+ } else {
+ wholeScript.append(" .staggerLabels(false) \n");
+ }
+ if(!horizontalBar) {
+ if(showMaxMin) {
+ wholeScript.append(" .showMaxMin(true) \n ");
+ } else {
+ wholeScript.append(" .showMaxMin(false) \n ");
+ }
+ }
+ if(nvl(rotateLabels).length()>0) {
+ wholeScript.append(" .rotateLabels("+ rotateLabels+ ") \n ");
+ } else {
+ wholeScript.append(" .rotateLabels(\"0\") \n ");
+ }
+ //wholeScript.append(" .axisLabel('" + legendColumnName + "')");
+ if(flagNoDate == 1 || !timeAxis) {
+ wholeScript.append(";\n");
+ } else {
+ wholeScript.append("\n .tickFormat(function(d) { \n");
+ if(timeAxis) {
+ if(formatFlag==HOURFLAG)
+ wholeScript.append(" return d3.time.format('%x %H')(new Date(d)) }); \n");
+ else if(formatFlag==MINFLAG)
+ wholeScript.append(" return d3.time.format('%x %H:%M')(new Date(d)) }); \n");
+ else if(formatFlag==SECFLAG)
+ wholeScript.append(" return d3.time.format('%X')(new Date(d)) }); \n");
+ else if(formatFlag==MONTHFLAG)
+ wholeScript.append(" return d3.time.format('%b %y')(new Date(d)) }); \n");
+ else
+ wholeScript.append(" return d3.time.format('%x')(new Date(d)) }); \n");
+
+ } else {
+ wholeScript.append(" return d; }); \n");
+ }
+ }
+
+ if(nvl(chartRightAxisLabel).length() > 0) {
+ //if(flagNoDate == 1)
+ wholeScript.append(" chart.yAxis\n");
+ //else
+ // wholeScript.append(" chart.yAxis1\n");
+ if(logScale) {
+ wholeScript.append(" .logScale(true)\n ");
+ } else {
+ wholeScript.append(" .logScale(false)\n ");
+ }
+
+ wholeScript.append(" .axisLabel('" + chartLeftAxisLabel + "') \n" +
+ " .tickFormat(d3.format(',.0f')); \n");
+ /*" chart.yAxis2\n " +
+ " .axisLabel('" + chartRightAxisLabel + "') \n" +
+ " .tickFormat(d3.format(',.0f')); \n");*/
+
+
+ } else {
+ //if(flagNoDate == 1)
+ wholeScript.append(" chart.yAxis\n");
+ //else
+ // wholeScript.append(" chart.yAxis1\n");
+ if(logScale) {
+ wholeScript.append(" .logScale(true)\n ");
+ } else {
+ wholeScript.append(" .logScale(false)\n ");
+ }
+ wholeScript.append(" .axisLabel('" + chartLeftAxisLabel + "') \n");
+
+ if(MAXDOUBLENUM <=5 && MAXNUMDECIMALPLACES == 0 ) MAXNUMDECIMALPLACES = 2;
+ if( MAXNUMDECIMALPLACES >=3 ) MAXNUMDECIMALPLACES = 2;
+ if(!logScale)
+ wholeScript.append(" .tickFormat(d3.format(',."+MAXNUMDECIMALPLACES+"f')); \n");
+ else
+ wholeScript.append(" .tickFormat(d3.format(',." + precision + "f')); \n");
+ //" .tickFormat(d3.format(',.0f')); \n");
+ }
+ wholeScript.append(" d3.select('#chart"+reportRuntime.getReportID()+" svg') \n" +
+ " .datum(historicalBarChart) \n" );
+ if(animation)
+ wholeScript.append(" .transition().duration(1000) \n" );
+ else
+ wholeScript.append(" .transition().duration(0) \n" );
+ wholeScript.append(" .call(chart); \n" +
+ "nv.utils.windowResize(chart.update); \n" +
+ "return chart; \n" +
+ "}); \n");
+ wholeScript.append("function redraw() { \n");
+ //wholeScript.append(" nv.utils.windowResize(chart.update); \n");
+ wholeScript.append(" d3.select('#chart"+reportRuntime.getReportID()+" svg') \n") ;
+ wholeScript.append(" .datum(historicalBarChart) \n");
+ wholeScript.append(" .transition().duration(500) \n");
+ wholeScript.append(" .call(chart); \n");
+ wholeScript.append("} \n");
+ wholeScript.append("\n");
+ wholeScript.append(" setInterval(function () { \n");
+ wholeScript.append(" redraw(); \n");
+ wholeScript.append(" }, 1500) \n");
+
+ wholeScript.append("if(historicalBarChart.length <= 0 ) {\n");
+ wholeScript.append(" document.getElementById(\"chart"+reportRuntime.getReportID()+"\").innerHTML = \"<div id='noData'><b>No Data Available</b></div>\";\n");
+ wholeScript.append(" document.getElementById(\"chart"+reportRuntime.getReportID()+"\").className=\"nodatadiv\";\n");
+ wholeScript.append(" document.getElementById(\"nodata\").className=\"nodatainner\";\n");
+ wholeScript.append("}\n");
+ wholeScript.append("</script> </body></html> \n");
+
+ } else if (chartType.equals(AppConstants.GT_TIME_SERIES)) {
+
+ // get category if not give the column name for the data column use this to develop series.
+ boolean hasCategoryAxis = reportRuntime.hasSeriesColumn();
+
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+
+ int flag = 0;
+ flag = hasCategoryAxis?1:0;
+ String uniqueElements [] = null;
+ //TreeSet ts = new TreeSet();
+ ArrayList ts = new ArrayList<String>();
+ HashMap<String, String> columnMap = new HashMap();
+ //check timeAxis
+ String dateStr = null;
+ java.util.Date date = null;
+ if( ds.getRowCount() > 0) {
+ dateStr = ds.getString(0, 1);
+ if(!timeAxis) {
+ date = getDateFromDateStr(dateStr);
+ if(date!=null) {
+ reportRuntime.setTimeAxis(true);
+ timeAxis = reportRuntime.isTimeAxis();
+
+
+ }
+ }
+ }
+
+ ArrayList<String> ts1 = new ArrayList();
+ ArrayList uniqueElementsList = new ArrayList();
+ Object uniqueXAxisElements[] = null;
+ String uniqueXAxisStr = "";
+ if(!timeAxis){
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ uniqueXAxisStr = ds.getString(i, 0);
+ ts1.add(uniqueXAxisStr);
+ }
+ }
+ uniqueElementsList.addAll(ts1);
+ uniqueXAxisElements = ts1.toArray();
+ //test start
+ /* int TOTAL = 0;
+ int VALUE = 0;
+ int flagNull = 0;
+ String KEY = "";
+ String COLOR = "";
+ TreeSet<String> colorList = new TreeSet<String>();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ VALUE = 0;
+ try {
+ VALUE = Integer.parseInt(ds.getString(i, 2));
+ TOTAL = TOTAL+VALUE;
+ } catch (NumberFormatException ex) {
+ flagNull = 1;
+ }
+ KEY = ds.getString(i, 0);
+ try {
+ if(ds.getString(i, "chart_color")!=null) {
+ colorList.add(KEY+"|"+ds.getString(i, "chart_color"));
+ }
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ System.out.println("No Chart Color");
+ }
+ wholeScript.append("{ \""+ "key" +"\":\""+ KEY+"\", \""+ "y" +"\":"+VALUE+"}, \n");
+
+ }
+ StringBuffer color = new StringBuffer("");
+ if(colorList.size()>0) {
+ SortedSet<String> s = Collections.synchronizedSortedSet(colorList);
+ Object[] colorElements = (Object[]) s.toArray();
+
+ String element = "";
+
+ for (int i = 0; i < colorElements.length; i++) {
+ element = ((String)colorElements[i]);
+ color.append("'"+element.substring(element.indexOf("|")+1)+"',");
+ }
+ color.deleteCharAt(color.length()-1);
+ }*/
+
+ //test end
+ boolean hasCustomizedChartColor = false;
+ if(flag == 1) {
+ StringBuffer catStr = new StringBuffer("");
+ String color="";
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ catStr = new StringBuffer("");
+ catStr.append(ds.getString(i, 2));
+ try {
+ if(ds.getString(i, "chart_color")!=null) {
+ color = ds.getString(i, "chart_color");
+ hasCustomizedChartColor = true;
+ catStr.append("|"+color);
+ }
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ //System.out.println("No Chart Color");
+ }
+
+ if(catStr.length()>0) {
+ //duplicates are avoided
+ if(!ts.contains(catStr.toString()))
+ ts.add(catStr.toString());
+
+ }
+ }
+ //Object uniqueElements [] = ts.toArray();
+ //SortedSet s = Collections.synchronizedSortedSet(ts);
+ //uniqueElements = (String[]) ts.toArray();
+ DataColumnType dct = null;
+ List yTextSeries = reportRuntime.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues);
+ if(yTextSeries.size()==1) {
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ //System.out.println(dct.getDisplayName() + " " + yText);
+ if(!(nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(nvl(chartLeftAxisLabel).length()<=0) {
+ chartLeftAxisLabel = nvl(dct.getYAxis());
+ chartLeftAxisLabel = (chartLeftAxisLabel.indexOf("|")!=-1)?chartLeftAxisLabel.substring(0,chartLeftAxisLabel.indexOf("|")):"";
+ }
+ }
+ }
+ }
+ Object tempArray[] = ts.toArray();
+ uniqueElements = Arrays.copyOf(tempArray, tempArray.length, String[].class);
+
+ } else {
+ DataColumnType dct = null;
+
+ List yTextSeries = reportRuntime.getChartDisplayNamesList(AppConstants.CHART_ALL_COLUMNS, formValues);
+ //if(columnValuesList.size() == 1) {
+ int dctIndex = 0;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ //System.out.println(dct.getDisplayName() + " " + yText);
+ if(!(nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(yTextSeries.contains((String)dct.getDisplayName())) {
+ if(nvl(dct.getChartColor()).length()>0) hasCustomizedChartColor = true;
+ if(hasCustomizedChartColor) {
+ //duplicates are avoided
+ if(!ts.contains(dct.getDisplayName()+"|"+nvl(dct.getChartColor())))
+ ts.add(dct.getDisplayName()+"|"+nvl(dct.getChartColor()));
+ } else {
+ //duplicates are avoided
+ if(!ts.contains(dct.getDisplayName()))
+ ts.add(dct.getDisplayName());
+ }
+ if(nvl(chartLeftAxisLabel).length()<=0) {
+ chartLeftAxisLabel = nvl(dct.getYAxis());
+ chartLeftAxisLabel = (chartLeftAxisLabel.indexOf("|")!=-1)?chartLeftAxisLabel.substring(0,chartLeftAxisLabel.indexOf("|")):"";
+ }
+ if(nvl(chartRightAxisLabel).length()>0) {
+ String dctYAxis = nvl(dct.getYAxis());
+ String yAxis = (dctYAxis.indexOf("|")!=-1)?dctYAxis.substring(0,dctYAxis.indexOf("|")):dctYAxis;
+ if(chartRightAxisLabel.equals(yAxis)) {
+ if(ts.contains(dct.getDisplayName())) {
+ if(hasCustomizedChartColor) {
+ ts.set(dctIndex, dct.getDisplayName()+"|R|"+nvl(dct.getChartColor()));
+ } else {
+ ts.set(dctIndex, dct.getDisplayName()+"|R");
+ }
+ }
+ }
+ }
+ columnMap.put(dct.getDisplayName(), dct.getColId());
+ }
+ dctIndex++;
+ }
+
+ }
+
+ //SortedSet s = Collections.synchronizedSortedSet(ts);
+ Object tempArray[] = ts.toArray();
+ uniqueElements = Arrays.copyOf(tempArray, tempArray.length, String[].class);
+ //uniqueElements = (String[]) ts.toArray();
+
+ }
+
+ wholeScript.append("<!DOCTYPE html>\n");
+ wholeScript.append("<html>\n");
+ wholeScript.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF8\">\n");
+ wholeScript.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n");
+ wholeScript.append("<link href=\""+ AppUtils.getBaseFolderURL() +"d3/css/nv.d3.css\" rel=\"stylesheet\" type=\"text/css\">\n");
+ wholeScript.append("<style>\n " +
+ " body { \n" +
+ " overflow-y:scroll; \n" +
+ " } \n" +
+ " text { \n" +
+ " font: 12px sans-serif; \n" +
+ " } \n" +
+ " svg { \n" +
+ " display: block;\n" +
+ " } \n" +
+ " #chart"+reportRuntime.getReportID()+" svg { \n" +
+ " height: "+ (nvl(height).length()>0?(height.endsWith("px")?height:height+"px"):"420px") + "; \n" +
+ " width: "+ (nvl(width).length()>0?(width.endsWith("px")?width:width+"px"):"700px") + "; \n" +
+ " min-width: 100px; \n" +
+ " min-height: 100px; \n" +
+ " } \n" +
+ " tr.z-row-over > td.z-row-inner, tr.z-row-over > .z-cell {" +
+ " background-color: rgb(255, 255, 255); "+
+ "}\n");
+ wholeScript.append(".nodatadiv {\n");
+ wholeScript.append(" display: table-cell;\n");
+ wholeScript.append(" width: 700px;\n");
+ wholeScript.append(" height:370px;\n");
+ wholeScript.append(" text-align:center;\n");
+ wholeScript.append(" vertical-align: middle;\n");
+ wholeScript.append("}\n");
+ wholeScript.append(".nodatainner {\n");
+ wholeScript.append(" padding: 10px;\n");
+ wholeScript.append("}\n");
+
+ wholeScript.append(" </style> \n" );
+
+ wholeScript.append("<body> \n");
+
+ if(showTitle)
+ wholeScript.append("<div align=\"center\"><H3>" + title +"</H3></div>");
+
+
+ wholeScript.append("<div id=\"chart"+reportRuntime.getReportID()+"\"> <svg></svg> </div> \n");
+ //js files
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/d3.v3.min.js\"></script>\n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/nv.d3.min.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/axis.min.js\"></script> \n");
+ //wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/cumulativeLineChart.js\"></script> \n");
+ //if(multipleSeries)
+ //wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/multiChart.js\"></script> \n");
+
+ //json
+ wholeScript.append("<script> \n");
+
+ wholeScript.append("historicalBarChart = [ \n");
+ //wholeScript.append("{ \n");
+ ArrayList dataSeries = new ArrayList();
+ String uniqueElement = "";
+
+ String [] uniqueRevElements = null;
+ //Added to make sure order appears same as legend
+ /*if(nvl(subType).length() > 0 && subType.equals("area")) {
+ uniqueRevElements = reverse((String[])uniqueElements);
+ } else {*/
+ uniqueRevElements = (String[])uniqueElements;
+ //}
+
+ int RIGHTAXISSERIES = 0;
+ for (int i = 0; i < uniqueRevElements.length; i++) {
+ //element.substring(element.indexOf("|")+1)
+ uniqueElement = (String)uniqueRevElements[i];
+ if(multipleSeries && (nvl(chartRightAxisLabel).length() > 0)) {
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+ if(nvl(uniqueElement).indexOf("|R") !=-1)
+ dataSeries.add(new StringBuffer(" { \"type\":\"line\", \"key\": \""+ ((uniqueElement.indexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement) +"\", \"yAxis\": \""+(2)+"\", "+ (hasCustomizedChartColor && (uniqueElement.lastIndexOf("|") != -1) ?("\"color\": \""+uniqueElement.substring(uniqueElement.lastIndexOf("|")+1) + "\","):"")+" \"values\": ["));
+ else
+ dataSeries.add(new StringBuffer(" { \"type\":\"line\", \"key\": \""+ ((uniqueElement.indexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement) +"\", \"yAxis\": \""+(1)+"\", "+ (hasCustomizedChartColor && (uniqueElement.lastIndexOf("|") != -1) ?("\"color\": \""+uniqueElement.substring(uniqueElement.lastIndexOf("|")+1) + "\","):"")+" \"values\": ["));
+ } else {
+ if(nvl(uniqueElement).indexOf("|R") !=-1)
+ dataSeries.add(new StringBuffer(" { \"type\":\"line\", \"key\": \""+ ((uniqueElement.indexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement) +"\", \"yAxis\": \""+(2)+"\","+ (hasCustomizedChartColor && (uniqueElement.lastIndexOf("|") != -1) ?("\"color\": \""+uniqueElement.substring(uniqueElement.lastIndexOf("|")+1) + "\","):"")+" \"values\": ["));
+ else
+ dataSeries.add(new StringBuffer(" { \"type\":\"line\", \"key\": \""+ ((uniqueElement.indexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement) +"\", \"yAxis\": \""+(1)+"\","+ (hasCustomizedChartColor && (uniqueElement.lastIndexOf("|") != -1) ?("\"color\": \""+uniqueElement.substring(uniqueElement.lastIndexOf("|")+1) + "\","):"")+" \"values\": ["));
+ }
+ RIGHTAXISSERIES = dataSeries.size()-1;
+ //dataSeries.add(new StringBuffer(" { \"type\":\"line\", \"key\": \""+ ((DataColumnType)columnMap.get(i)).getDisplayName() +"\", \"yAxis\": \""+(i+1)+"\", \"values\": ["));
+ }
+ else {
+ dataSeries.add(new StringBuffer(" { \"type\":\"line\", \"key\": \""+ ((uniqueElement.indexOf("|")!= -1)?uniqueElement.substring(0, uniqueElement.indexOf("|")):uniqueElement) +"\", \"yAxis\": \""+(1)+"\","+ (hasCustomizedChartColor && (uniqueElement.lastIndexOf("|") != -1)?("\"color\": \""+uniqueElement.substring(uniqueElement.lastIndexOf("|")+1) + "\","):"")+"\"values\": ["));
+ }
+
+ }
+ /*StringBuffer dataSeries1 = new StringBuffer("");
+ dataSeries1.append(" { key: \"Series1\",values: [");
+ StringBuffer dataSeries2 = new StringBuffer("");
+ dataSeries2.append(" { key: \"Series2\", values: [");
+ StringBuffer dataSeries3 = new StringBuffer("");
+ dataSeries3.append(" { key: \"Series3\", values: [");
+ */
+
+
+ //long minTime = 1000000000000000L;
+ int MAXNUM = 0;
+ double MAXDOUBLENUM = 0.0;
+ int YAXISNUM = 0;
+ double YAXISDOUBLENUM = 0.0;
+ int MAXNUMDECIMALPLACES = 0;
+ int flagNull = 0;
+ int flagSecondNull = 0;
+ TreeSet dateList = new TreeSet();
+ int formatFlag = 0;
+ if(flag!= 1) {
+ for (int j = 0; j < uniqueRevElements.length; j++) {
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ flagNull = 0;
+ flagSecondNull=0;
+ YAXISNUM = 0;
+ YAXISDOUBLENUM = 0.0;
+ dateStr = "";
+ date = null;
+ dateStr = ds.getString(i, 1);
+ if(timeAxis) {
+ date = getDateFromDateStr(dateStr);
+ formatFlag = getFlagFromDateStr(dateStr);
+ }
+ if(date==null && timeAxis) continue;
+
+
+ //if(ds.getString(i, 2).equals(uniqueElements[j])) {
+ //if(minTime > date.getTime())
+ // minTime = date.getTime();
+ uniqueElement = (String)uniqueRevElements[j];
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i, columnMap.get(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))));
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i, columnMap.get(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))));
+ if(RIGHTAXISSERIES!=j) {
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ }
+ } catch (NumberFormatException ex1) {
+ flagNull = 1;
+ }
+ }
+
+ if(date==null) {
+ dateList.add(dateStr);
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + (flagNull==0?(YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+ } else {
+ dateList.add(new Long(date.getTime()).toString());
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + (flagNull==0?(YAXISDOUBLENUM>0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+ }
+
+
+
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+
+ if(flagNull!=1) {
+ if(i<ds.getRowCount()-1) {
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i+1, columnMap.get(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1)?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))));
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i+1, columnMap.get(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))));
+ if(RIGHTAXISSERIES!=j) {
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ }
+ } catch (NumberFormatException ex1) {
+ flagSecondNull = 1;
+ }
+ }
+
+ if(flagSecondNull==1 && date == null) {
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + null +"}, ");
+ } else if( flagSecondNull == 1){
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + null +"}, ");
+ }
+ }
+ } else {
+ if(i<ds.getRowCount()-1) {
+ dateStr = ds.getString(i+1, 1);
+
+ if(!timeAxis) {
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":\"" + dateStr + "\" , \"y\":" + null +"}, ");
+ } else {
+ date = getDateFromDateStr(dateStr);
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + null +"}, ");
+ }
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + null +"}, ");
+ }
+ }
+
+ }
+
+
+ //}
+ }
+ //((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + minTime + " , \"y\":" + 0 +"}, ");
+ }
+
+ } else {
+ for (int j = 0; j < uniqueRevElements.length; j++) {
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ YAXISNUM = 0;
+ YAXISDOUBLENUM = 0.0;
+ flagNull= 0;
+ flagSecondNull = 0;
+ dateStr = ds.getString(i, 1);
+ if(timeAxis) {
+ date = getDateFromDateStr(dateStr);
+ formatFlag = getFlagFromDateStr(dateStr);
+ }
+
+ if(date==null && timeAxis) continue;
+
+ uniqueElement = (String)uniqueRevElements[j];
+ //date = MMDDYYYYFormat.parse(ds.getString(i, 1), new ParsePosition(0));
+ if(ds.getString(i, 2).equals(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))) {
+ //if(minTime > date.getTime())
+ // minTime = date.getTime();
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(i, 3));
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(i, 3));
+ if(RIGHTAXISSERIES!=j) {
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+
+ }
+ } catch (NumberFormatException ex1) {
+ flagNull = 1;
+ }
+ }
+
+ if(date==null) {
+ dateList.add(dateStr);
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + dateStr + " , \"y\":" + (flagNull==0?(YAXISDOUBLENUM!=0.0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+ } else {
+ dateList.add(new Long(date.getTime()).toString());
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + (flagNull==0?(YAXISDOUBLENUM!=0.0?YAXISDOUBLENUM:YAXISNUM):null) +"}, ");
+ }
+
+
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+
+ if(flagNull!=1) {
+ if(i<ds.getRowCount()-1) {
+ for (int k = i+1; k < ds.getRowCount(); k++) {
+ if (ds.getString(k, 2).equals(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))) {
+ try {
+ YAXISNUM = Integer.parseInt(ds.getString(k, 3));
+ if(MAXDOUBLENUM < YAXISNUM) MAXDOUBLENUM = YAXISNUM;
+ } catch (NumberFormatException ex) {
+ try {
+ YAXISDOUBLENUM = Double.parseDouble(ds.getString(k, 3));
+ if(RIGHTAXISSERIES!=j) {
+ MAXNUMDECIMALPLACES = getNumberOfDecimalPlaces(YAXISDOUBLENUM);
+ if(MAXDOUBLENUM < YAXISDOUBLENUM) MAXDOUBLENUM = YAXISDOUBLENUM;
+ }
+ } catch (NumberFormatException ex1) {
+ flagSecondNull = 1;
+ }
+ }
+ break;
+ }
+ }
+
+ if(date==null && flagSecondNull==1){
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + dateStr + " , \"y\":" + null +"}, ");
+ } else if(flagSecondNull == 1){
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + null +"}, ");
+ }
+ //}
+ }
+ } else {
+ if(i<ds.getRowCount()-1) {
+ for (int k = i+1; k < ds.getRowCount(); k++) {
+ if (ds.getString(k, 2).equals(((hasCustomizedChartColor||nvl(chartRightAxisLabel).length()>0) && (uniqueElement.lastIndexOf("|") != -1) ?uniqueElement.substring(0, uniqueElement.lastIndexOf("|")):uniqueElement))) {
+ dateStr = ds.getString(k, 1);
+ if(!timeAxis) {
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + null +"}, ");
+ break;
+ } else {
+ date = getDateFromDateStr(dateStr);
+ ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + date.getTime() + " , \"y\":" + null +"}, ");
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ }
+ }
+ // ((StringBuffer) dataSeries.get(j)).append ("{ \"x\":" + minTime + " , \"y\":" + 0 +"}, ");
+
+ }
+/* if(ds.getString(i, 2).equals("Series1")) {
+ dataSeries1.append("[ " + date.getTime() + " , " + ds.getString(i, 3) +"], ");
+ } else if (ds.getString(i, 2).equals("Series2")) {
+ dataSeries2.append("[ " + date.getTime() + " , " + ds.getString(i, 3) +"], ");
+ } else if (ds.getString(i, 2).equals("Series3")) {
+ dataSeries3.append("[ " + date.getTime() + " , " + ds.getString(i, 3) +"], ");
+ }
+*/ }
+
+ for (int i = 0; i < uniqueRevElements.length; i++) {
+ StringBuffer strBuf = ((StringBuffer) dataSeries.get(i));
+ ((StringBuffer) dataSeries.get(i)).deleteCharAt(((StringBuffer) dataSeries.get(i)).lastIndexOf(","));
+ if(i < (uniqueRevElements.length -1) ) {
+ ((StringBuffer) dataSeries.get(i)).append("] } , \n");
+ }
+ else {
+ ((StringBuffer) dataSeries.get(i)).append("] } \n");
+ }
+ }
+
+ for (int i = 0; i < uniqueRevElements.length; i++) {
+ wholeScript.append((StringBuffer)dataSeries.get(i));
+ }
+/* wholeScript.append(dataSeries1);
+ wholeScript.append(dataSeries2);
+ wholeScript.append(dataSeries3);
+*/ wholeScript.append("];\n");
+
+ /* Sorting is commented out.*/
+ StringBuffer dateStrBuf = new StringBuffer("");
+ if(dateList.size()>0) {
+ //SortedSet<String> s = Collections.synchronizedSortedSet(dateList);
+ Object[] dateElements = (Object[]) dateList.toArray();
+
+ String element = "";
+
+ for (int i = 0; i < dateElements.length; i++) {
+ dateStrBuf.append(dateElements[i]+",");
+ }
+ dateStrBuf.deleteCharAt(dateStrBuf.length()-1);
+ }
+
+ wholeScript.append(" var chart;\n");
+ wholeScript.append("nv.addGraph(function() { \n");
+ //" var chart = nv.models.cumulativeLineChart() \n" + nv.models.lineWithFocusChart()
+// " chart = nv.models.lineChart() \n" +
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+ wholeScript.append(" chart = nv.models.stackedAreaChart() \n");
+ if(showControls) {
+ wholeScript.append(" .showControls(true) \n ");
+ } else {
+ wholeScript.append(" .showControls(false) \n ");
+ }
+ } else {
+ wholeScript.append(" chart = nv.models.multiChart() \n");
+ if(nvl(chartRightAxisLabel).length() > 0) {
+ wholeScript.append(" .dualaxis(true) \n ");
+ } else {
+ wholeScript.append(" .dualaxis(false) \n ");
+ }
+
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>=0 && reportRuntime.getLegendPosition().equals("right")) {
+ wholeScript.append(" .legendPos('right')\n" );
+ } else {
+ wholeScript.append(" .legendPos('top')\n" );
+ }
+
+
+ }
+
+ wholeScript.append(" .margin({top: "+ topMargin +", right: "+ rightMargin +", bottom: "+ bottomMargin +", left: " + leftMargin +"}) \n");
+ if(showLegend) {
+ wholeScript.append(" .showLegend(true) \n ");
+ } else {
+ wholeScript.append(" .showLegend(false) \n ");
+ }
+
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+ if( MAXNUMDECIMALPLACES >=3 ) {
+ wholeScript.append(" .yAxisTooltipFormat(d3.format(',.3f')) \n");
+ } else {
+ wholeScript.append(" .yAxisTooltipFormat(d3.format(',."+MAXNUMDECIMALPLACES+ "f')) \n");
+ }
+
+ wholeScript.append(".x (function(d) {return d.x;}) \n" +
+ ".y (function(d) {return d.y;}) \n");
+ }
+
+ //" .x(function(d) { return d[0] }) \n" +
+ //" .y(function(d) { return d[1] }) \n" +
+ //" .forceY("+(nvl(reportRuntime.getRangeAxisLowerLimit()).length()<=0?"0":reportRuntime.getRangeAxisLowerLimit()) +", "+ Math.ceil((MAXNUM+(MAXNUM*25/100))/100) * 100 + ") \n" + // reportRuntime.getRangeAxisUpperLimit()+") \n" +
+ wholeScript.append(" .color(d3.scale.category10().range()); \n");
+ if(!(nvl(subType).length() > 0 && subType.equals("area"))) {
+ double UPPER_RANGE = 0;
+ if(Math.ceil((MAXDOUBLENUM+(MAXDOUBLENUM*25/100))/100) * 100 >= 1) {
+ UPPER_RANGE = Math.ceil(MAXDOUBLENUM+(MAXDOUBLENUM*25/100));
+ } else UPPER_RANGE = 1;
+
+ wholeScript.append(" chart.lines1.forceY(["+(nvl(reportRuntime.getRangeAxisLowerLimit()).length()<=0?"0":reportRuntime.getRangeAxisLowerLimit()) +", "+ (nvl(reportRuntime.getRangeAxisUpperLimit()).length()<=0?UPPER_RANGE:reportRuntime.getRangeAxisUpperLimit()) + "]); \n" +
+ " chart.lines2.forceY([0,1]); \n");
+ }
+ wholeScript.append(" chart.xAxis\n");
+ if(reportRuntime.isShowXaxisLabel()) {
+ // X axis label is commented for time-being. This should be derived from request parameter.
+ //" .axisLabel('" + legendColumnName + "') \n" +
+ wholeScript.append(" .axisLabel('" + legendColumnName + "') \n");
+ } else {
+ wholeScript.append(" .axisLabel('') \n");
+ }
+ if(reportRuntime.isAddXAxisTickers()) {
+ wholeScript.append(" .tickValues(["+ dateStrBuf.toString()+ "])\n ");
+ } else {
+ //wholeScript.append(" .tickValues([])\n ");
+ }
+ if(staggerLabels) {
+ wholeScript.append(" .staggerLabels(true) \n");
+ } else {
+ wholeScript.append(" .staggerLabels(false) \n");
+ }
+ if(showMaxMin) {
+ wholeScript.append(" .showMaxMin(true) \n ");
+ } else {
+ wholeScript.append(" .showMaxMin(false) \n ");
+ }
+
+ if(nvl(rotateLabels).length()>0) {
+ wholeScript.append(" .rotateLabels("+ rotateLabels+ ") \n ");
+ } else {
+ wholeScript.append(" .rotateLabels(\"0\") \n ");
+ }
+
+ wholeScript.append(" .tickFormat(function(d) { \n");
+ if(formatFlag==HOURFLAG)
+ wholeScript.append(" return d3.time.format('%x %H')(new Date(d)) }); \n");
+ else if(formatFlag==MINFLAG)
+ wholeScript.append(" return d3.time.format('%x %H:%M')(new Date(d)) }); \n");
+ else if(formatFlag==SECFLAG)
+ wholeScript.append(" return d3.time.format('%x %X')(new Date(d)) }); \n");
+ else if(formatFlag==MONTHFLAG)
+ wholeScript.append(" return d3.time.format('%b %y')(new Date(d)) }); \n");
+
+ else if(timeAxis)
+ wholeScript.append(" return d3.time.format('%x')(new Date(d)) }); \n");
+ else
+ wholeScript.append(" return d; }); \n");
+ if(nvl(chartRightAxisLabel).length() > 0) {
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+ wholeScript.append(" chart.yAxis\n");
+ } else {
+ wholeScript.append(" chart.yAxis1\n");
+ }
+ wholeScript.append(" .axisLabel('" + chartLeftAxisLabel + "') \n");
+ //if(nvl(subType).length() > 0 && subType.equals("area")) {
+ if(MAXDOUBLENUM <=5 && MAXNUMDECIMALPLACES == 0 ) MAXNUMDECIMALPLACES = 2;
+ if( MAXNUMDECIMALPLACES >=3 ) MAXNUMDECIMALPLACES = 2;
+ wholeScript.append(" .tickFormat(d3.format(',."+MAXNUMDECIMALPLACES+"f')); \n");
+ /*} else {
+ wholeScript.append(" .tickFormat(d3.format(',.2f')); \n");
+ }*/
+ // " .tickFormat(function (d) {return d;} ); \n");
+ //" .tickFormat(function(d) {if (d >= 1000) return Math.round(d/1000)+\"K\"; else return d;}); \n");
+ if(!(nvl(subType).length() > 0 && subType.equals("area"))) {
+ wholeScript.append(" chart.yAxis2\n " +
+ " .axisLabel('" + chartRightAxisLabel + "') \n" +
+ " .tickFormat(d3.format(',.02f')); \n");
+ //" .tickFormat(function(d) {if (d >= 1000) return Math.round(d/1000)+\"K\"; else return d;}); \n");
+ //" .tickFormat(function(d) {if( d <= 1) return Math.round(d*100)+\"%\"; else return d;}); \n");
+ // " .tickFormat(function(d) { return d;}); \n");
+ }
+
+
+ } else {
+ if(nvl(subType).length() > 0 && subType.equals("area")) {
+ wholeScript.append(" chart.yAxis\n");
+ } else {
+ wholeScript.append(" chart.yAxis1\n");
+ }
+ wholeScript.append(" .axisLabel('" + chartLeftAxisLabel + "') \n");
+ //if(nvl(subType).length() > 0 && subType.equals("area")) {
+ if(MAXDOUBLENUM <=5 && MAXNUMDECIMALPLACES == 0 ) MAXNUMDECIMALPLACES = 2;
+ if( MAXNUMDECIMALPLACES >=3 ) {
+ MAXNUMDECIMALPLACES = 2;
+ }
+ wholeScript.append(" .tickFormat(d3.format(',."+MAXNUMDECIMALPLACES+"f')); \n");
+ /*} else {
+ wholeScript.append(" .tickFormat(d3.format(',.2f')); \n");
+ }*/
+ //" .tickFormat(function(d) {if (d >= 1000) return Math.round(d/1000)+\"K\"; else return d;}); \n");
+ }
+ wholeScript.append(" d3.select('#chart"+reportRuntime.getReportID()+" svg') \n" +
+ " .datum(historicalBarChart) \n" );
+ if(animation)
+ wholeScript.append(" .transition().duration(1000) \n" );
+ wholeScript.append(" .call(chart); \n" +
+ "nv.utils.windowResize(chart.update); \n" +
+ "return chart; \n" +
+ "}); \n");
+
+ wholeScript.append("function redraw() { \n");
+ //wholeScript.append(" nv.utils.windowResize(chart.update); \n");
+ wholeScript.append(" d3.select('#chart"+reportRuntime.getReportID()+" svg') \n") ;
+ wholeScript.append(" .datum(historicalBarChart) \n");
+ wholeScript.append(" .transition().duration(500) \n");
+ wholeScript.append(" .call(chart); \n");
+ wholeScript.append("} \n");
+ wholeScript.append("\n");
+ wholeScript.append(" setInterval(function () { \n");
+ wholeScript.append(" redraw(); \n");
+ wholeScript.append(" }, 1500) \n");
+
+ wholeScript.append("if(historicalBarChart.length <= 0 ) {\n");
+ wholeScript.append(" document.getElementById(\"chart"+reportRuntime.getReportID()+"\").innerHTML = \"<div id='noData'><b>No Data Available</b></div>\";\n");
+ wholeScript.append(" document.getElementById(\"chart"+reportRuntime.getReportID()+"\").className=\"nodatadiv\";\n");
+ wholeScript.append(" document.getElementById(\"nodata\").className=\"nodatainner\";\n");
+ wholeScript.append("}\n");
+
+ wholeScript.append("</script> </body> </html> \n");
+
+ } else if (chartType.equals(AppConstants.GT_PIE) || chartType.equals(AppConstants.GT_PIE_3D)) {
+ wholeScript.append("<!DOCTYPE html>\n");
+ wholeScript.append("<html>\n");
+ wholeScript.append("<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF8\">\n");
+ wholeScript.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n");
+ wholeScript.append("<link href=\""+ AppUtils.getBaseFolderURL() +"d3/css/nv.d3.css\" rel=\"stylesheet\" type=\"text/css\">\n");
+ wholeScript.append("<style>\n " +
+ " body { \n" +
+ " overflow-y:scroll; \n" +
+ " } \n" +
+ " text { \n" +
+ " font: 12px sans-serif; \n" +
+ " } \n" +
+ " tr.z-row-over > td.z-row-inner, tr.z-row-over > .z-cell {" +
+ " background-color: rgb(255, 255, 255); "+
+ "} "+
+ " svg { display: block; } " +
+ " #chart"+reportRuntime.getReportID()+" svg { \n" +
+ " height: "+ (nvl(height).length()>0?(height.endsWith("px")?height:height+"px"):"420px") + "; \n" +
+ " width: "+ (nvl(width).length()>0?(width.endsWith("px")?width:width+"px"):"700px") + "; \n" +
+ " min-width: 100px; \n" +
+ " min-height: 100px; \n" +
+ " } \n" +
+ " </style> \n" );
+ wholeScript.append("<body> \n");
+
+ if(showTitle)
+ wholeScript.append("<div align=\"center\"><H3>" + title +"</H3></div>");
+
+ wholeScript.append("<div id=\"chart"+reportRuntime.getReportID()+"\"><svg></svg></div>");
+ //"<svg id=\"test2\"></svg>\n");
+ //js files
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/d3.v3.min.js\"></script>\n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/nv.d3.min.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/legend.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/pie.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/pieChart.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/utils.js\"></script> \n");
+ wholeScript.append("<script> \n");
+
+ wholeScript.append("historicalBarChart = [ \n");
+ double TOTAL = 0;
+ double VALUE = 0;
+ int flagNull = 0;
+ String KEY = "";
+ String COLOR = "";
+ TreeSet<String> colorList = new TreeSet<String>();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ VALUE = 0;
+ try {
+ VALUE = Double.parseDouble(ds.getString(i, 2));
+ TOTAL = TOTAL+VALUE;
+ } catch (NumberFormatException ex) {
+ flagNull = 1;
+ }
+ KEY = ds.getString(i, 0);
+ try {
+ if(ds.getString(i, "chart_color")!=null) {
+ colorList.add(KEY+"|"+ds.getString(i, "chart_color"));
+ }
+ } catch (ArrayIndexOutOfBoundsException ex) {
+ //System.out.println("No Chart Color");
+ }
+ wholeScript.append("{ \""+ "key" +"\":\""+ KEY+"\", \""+ "y" +"\":"+VALUE+"}, \n");
+
+ }
+ StringBuffer color = new StringBuffer("");
+ if(colorList.size()>0) {
+ SortedSet<String> s = Collections.synchronizedSortedSet(colorList);
+ Object[] colorElements = (Object[]) s.toArray();
+
+ String element = "";
+
+ for (int i = 0; i < colorElements.length; i++) {
+ element = ((String)colorElements[i]);
+ color.append("'"+element.substring(element.lastIndexOf("|")+1)+"',");
+ }
+ color.deleteCharAt(color.length()-1);
+ }
+
+ wholeScript.append("];\n");
+
+
+ wholeScript.append("var chart; \n");
+ wholeScript.append("nv.addGraph(function() { \n" +
+ " var width1= 700, height1=720; \n" +
+ " chart = nv.models.pieChart() \n" +
+ " .margin({top: "+ topMargin +", right: "+ rightMargin +", bottom: "+ bottomMargin +", left: " + leftMargin +"}) \n" +
+
+ //" .x(function(d) { return d.key +\" \"+ Math.round(d.y/"+TOTAL+" *100) + \"%\" }) \n" +
+ " .x(function(d) { return d.key }) \n" +
+ " .y(function(d) { return d.y }) \n");
+ if(colorList.size()>0) {
+ wholeScript.append(" .color(["+ color.toString() + "] ) \n");
+ }
+ //wholeScript.append(" .values(function(d) { return d }) \n");
+ //" .color(d3.scale.category10().range()); \n" +
+ if(showLegend) {
+ wholeScript.append(" chart.showLegend(true);\n ");
+ } else {
+ wholeScript.append(" chart.showLegend(false);\n ");
+ }
+
+ //wholeScript.append("chart.showLegend(false);\n" +
+ //" .width(width1) \n" +
+ //" .height(height1); \n" +
+ wholeScript.append(" d3.select('#chart"+reportRuntime.getReportID()+" svg') \n" +
+ " .datum(historicalBarChart) \n");
+ if(animation)
+ wholeScript.append(" .transition().duration(1200) \n" );
+/* " .attr(\"width\", width1) \n" +
+ " .attr(\"height\", height1) \n" +
+*/ wholeScript.append(" .call(chart); \n" +
+ " nv.utils.windowResize(chart.update);\n"+
+ "return chart; \n" +
+ "}); \n");
+
+ wholeScript.append("function redraw() { \n");
+ //wholeScript.append(" nv.utils.windowResize(chart.update); \n");
+ wholeScript.append(" d3.select('#chart"+reportRuntime.getReportID()+" svg') \n") ;
+ wholeScript.append(" .datum(historicalBarChart) \n");
+ wholeScript.append(" .transition().duration(500) \n");
+ wholeScript.append(" .call(chart); \n");
+ wholeScript.append("} \n");
+ wholeScript.append("\n");
+ wholeScript.append(" setInterval(function () { \n");
+ wholeScript.append(" redraw(); \n");
+ wholeScript.append(" }, 1500) \n");
+
+
+
+ wholeScript.append("if(historicalBarChart.length <= 0 ) {\n");
+ wholeScript.append(" document.getElementById(\"chart"+reportRuntime.getReportID()+"\").innerHTML = \"<div id='noData'><b>No Data Available</b></div>\";\n");
+ wholeScript.append(" document.getElementById(\"chart"+reportRuntime.getReportID()+"\").className=\"nodatadiv\";\n");
+ wholeScript.append(" document.getElementById(\"nodata\").className=\"nodatainner\";\n");
+ wholeScript.append("}\n");
+
+ wholeScript.append("</script> </body> </html> \n");
+
+ } else if (chartType.equals(AppConstants.GT_ANNOTATION_CHART) || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
+
+ boolean timeCharts = chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS);
+
+ String dateStr = null;
+ java.util.Date date = null;
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+
+ int flagNoDate = 0;
+
+ int MAXNUM = 0;
+ int YAXISNUM = 0;
+ int flagNull = 0;
+
+ double YAXISDOUBLENUM = 0.0;
+ double MAXDOUBLENUM = 0.0;
+ int MAXNUMDECIMALPLACES = 0;
+
+ int formatFlag = 0;
+
+ TreeSet<String> dateStrList = new TreeSet<String>();
+ // added to store all date elements
+ SortedSet<String> sortSet = new TreeSet<String>();
+ int count = 0;
+
+ int flag = 0;
+ boolean hasCategoryAxis = reportRuntime.hasSeriesColumn();
+ flag = hasCategoryAxis?1:0;
+
+
+ String anomalyText = "";
+
+ StringBuffer dataStrBuf = new StringBuffer("");
+ StringBuffer annotationsStrBuf = new StringBuffer("");
+
+ String xAxisLabel = (reportRuntime.getChartLegendColumn()!=null)?reportRuntime.getChartLegendColumn().getDisplayName():"";
+
+ //finding actual string
+ String actualText = "";
+ DataColumnType dct = null;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ if((dct.getChartSeq()!=null && dct.getChartSeq() >=0) && !AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
+ //if(AppUtils.nvl(dct.getDisplayName()).toLowerCase().contains("actual")) {
+ actualText = dct.getDisplayName();
+ break;
+ //}
+ }
+ }
+
+ int anomalyRec = 0;
+ int columnIndex = 1;
+ ArrayList columnNames = new ArrayList();
+ ArrayList columnValues = new ArrayList();
+ Set set = null;
+ String columnName = "";
+ String columnValue = "";
+ long minDate = 0L;
+ long maxDate = 0L;
+ StringBuffer seriesBuffer = new StringBuffer("");
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ columnNames = new ArrayList();
+ columnValues = new ArrayList();
+ columnName = "";
+ columnValue = "";
+ columnIndex = 1;
+ anomalyText = "";
+ dateStr = ds.getString(i, 0);
+ date = getDateFromDateStr(dateStr);
+ if(date.getTime() > maxDate )
+ maxDate = date.getTime();
+
+ formatFlag = getFlagFromDateStr(dateStr);
+
+
+ for (;columnIndex<ds.getColumnCount();columnIndex++) {
+ columnName = ds.getColumnName(columnIndex);
+ if(!timeCharts && !columnName.toLowerCase().equals("anomaly_text")) {
+ columnNames.add(columnName);
+ columnValues.add(AppUtils.nvls(ds.getString(i, columnIndex), "null"));
+ } else if (timeCharts) {
+ columnNames.add(columnName);
+ columnValues.add(AppUtils.nvls(ds.getString(i, columnIndex), "null"));
+ }
+ }
+/* actual = ds.getString(i, "actual");
+ //forecast = ds.getString(i, "forecast");
+ upperBound = ds.getString(i, "upperBound");
+ lowerBound = ds.getString(i, "lowerBound");
+
+*/ if(!timeCharts)
+ anomalyText = ds.getString(i, "anomaly_text");
+ //dataStrBuf.append(" [new Date(moment(\""+dateStr+"\")),"+ actual /*+","+ forecast*/+","+ lowerBound +","+ upperBound +"],\n");
+ dataStrBuf.append(" [new Date(moment(\""+dateStr+"\"))");
+ for(int c=0; c< columnNames.size(); c++ ) {
+ columnName = (String) columnNames.get(c);
+ columnValue = (String) columnValues.get(c);
+ for (Iterator iter1 = l.iterator(); iter1.hasNext();) {
+ dct = (DataColumnType) iter1.next();
+ if((dct.getChartSeq()!=null && dct.getChartSeq() >=0) && !AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
+ if((!timeCharts && !AppUtils.nvl(dct.getColId()).toLowerCase().equals("anomaly_text")) && AppUtils.nvl(dct.getColId()).toLowerCase().equals(columnName.toLowerCase())) {
+ dataStrBuf.append(","+columnValue);
+ break;
+ } else if(timeCharts && AppUtils.nvl(dct.getColId()).toLowerCase().equals(columnName.toLowerCase())){
+ dataStrBuf.append(","+columnValue);
+ //break;
+ }
+ }
+ }
+ }
+
+ dataStrBuf.append("],\n");
+ if(!timeCharts) {
+ if(AppUtils.nvl(anomalyText).length()>0) {
+ ++anomalyRec;
+ annotationsStrBuf.append("anns.push( {\n");
+ annotationsStrBuf.append(" series: '"+actualText+"',\n");
+ annotationsStrBuf.append(" x: moment(\""+dateStr+"\"),\n");
+ annotationsStrBuf.append(" shortText: '"+ IntToLetter(anomalyRec).toUpperCase() +"',\n");
+ annotationsStrBuf.append(" text: '"+ anomalyText + "'\n");
+ annotationsStrBuf.append("});\n");
+ //anomalyRec++;
+ }
+
+ }
+ }
+
+ //if(!timeCharts)
+ //anomalyRec = anomalyRec - 1;
+
+ minDate = maxDate - (new Long(reportRuntime.getZoomIn()).longValue()*60*60*1000);
+ System.out.println(new java.util.Date(maxDate) + " " + new java.util.Date(minDate) + " " + reportRuntime.getZoomIn());
+ if(dataStrBuf.lastIndexOf(",")!= -1)
+ dataStrBuf.deleteCharAt(dataStrBuf.lastIndexOf(","));
+
+ wholeScript = new StringBuffer("");
+ wholeScript.append("<!DOCTYPE html>\n");
+ wholeScript.append("<html>\n");
+ wholeScript.append(" <head>\n");
+ //wholeScript.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=EmulateIE7; IE=EmulateIE9\">\n");
+ wholeScript.append("<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />\n");
+ wholeScript.append("<script type=\"text/javascript\" src=\""+ AppUtils.getBaseFolderURL() +"dy3/js/dygraph-combined.js\"></script>\n");
+ wholeScript.append("<script type=\"text/javascript\" src=\""+ AppUtils.getBaseFolderURL() +"dy3/js/moment.min.js\"></script>\n");
+ wholeScript.append("<script type=\"text/javascript\" src=\""+ AppUtils.getBaseFolderURL() +"dy3/js/interaction.min.js\"></script>\n");
+
+ wholeScript.append("<script type=\"text/javascript\">\n");
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("30min")) {
+ wholeScript.append("var click=2;\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly")) {
+ wholeScript.append("var click=3;\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("daily")) {
+ wholeScript.append("var click=3;\n");
+ } else
+ wholeScript.append("var click=3;\n");
+ //wholeScript.append(" var click=0;\n");
+ wholeScript.append(" function downV3(event, g, context) { \n");
+ wholeScript.append(" context.initializeMouseDown(event, g, context); \n");
+ wholeScript.append(" if (event.altKey || event.shiftKey) { \n");
+ wholeScript.append(" var minDate = g.xAxisRange()[0]; \n");
+ wholeScript.append(" var maxDate = g.xAxisRange()[1]; \n");
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("daily")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60*24)) > 6) \n");
+ wholeScript.append(" Dygraph.startZoom(event, g, context); \n");
+ } else if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60)) > 6) \n");
+ wholeScript.append(" Dygraph.startZoom(event, g, context); \n");
+ } else if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("30min")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60*2)) > 6) \n");
+ wholeScript.append(" Dygraph.startZoom(event, g, context); \n");
+
+ } else {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60)) > 6) \n");
+ wholeScript.append(" Dygraph.startZoom(event, g, context); \n");
+ }
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("30min")) {
+ wholeScript.append(" click=2;\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly")) {
+ wholeScript.append(" click=3;\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("daily")) {
+ wholeScript.append(" click=3;\n");
+ } else
+ wholeScript.append(" click=3;\n");
+ wholeScript.append(" } else if (event.ctrlKey) {\n");
+
+
+ wholeScript.append(" click++;\n");
+ wholeScript.append(" if(click == 1)\n");
+ wholeScript.append(" zoom_custom(3600);\n");
+ wholeScript.append(" else if(click == 2)\n");
+ wholeScript.append(" zoom_custom(12*3600);\n");
+ wholeScript.append(" else if(click == 3)\n");
+ wholeScript.append(" zoom_custom(86400);\n");
+ wholeScript.append(" else if (click == 4)\n");
+ wholeScript.append(" zoom_custom(7*86400);\n");
+ wholeScript.append(" else if (click == 5)\n");
+ wholeScript.append(" zoom_custom(30*86400);\n");
+ wholeScript.append(" else if (click == 6)\n");
+ wholeScript.append(" zoom_custom(90*86400);\n");
+ wholeScript.append(" else if (click == 7)\n");
+ wholeScript.append(" zoom_custom(180*86400);\n");
+ wholeScript.append(" else if (click == 8)\n");
+ wholeScript.append(" zoom_custom(365*86400);\n");
+ wholeScript.append(" else if (click == 10)\n");
+ wholeScript.append(" zoom_custom(5*365*86400);\n");
+ wholeScript.append(" else { \n");
+ wholeScript.append(" reset();\n");
+ wholeScript.append(" }\n");
+ //wholeScript.append(" \n");
+ wholeScript.append(" } else {\n");
+ wholeScript.append(" Dygraph.startPan(event, g, context); \n");
+ wholeScript.append(" } \n");
+ wholeScript.append(" } \n");
+ wholeScript.append("</script>\n ");
+ wholeScript.append("<style type=\"text/css\">\n");
+ wholeScript.append(".annotation {\n");
+ wholeScript.append("}");
+ wholeScript.append(".dygraph-title {\n");
+ wholeScript.append("color: black;\n");
+ wholeScript.append("font-weight:bold; \n");
+ wholeScript.append("}\n");
+ wholeScript.append(".dygraph-axis-label-x { ");
+ wholeScript.append("-webkit-transform:rotate(-0deg);");
+ wholeScript.append("display:block;");
+ /*position:absolute;
+ right:-5px;
+ top:15px;*/
+ wholeScript.append("}\n");
+
+ int widthInt = 0;
+ if(nvl(width).length() > 0) {
+ try {
+ widthInt = new Integer(width).intValue();
+ } catch(Exception ex) {
+ if(width.endsWith("px")) {
+ try {
+ widthInt = new Integer(width.substring(0, width.indexOf("px")));
+ } catch (Exception ex1) {
+ widthInt = 700;
+ }
+ } else {
+ widthInt = 700;
+ }
+ }
+ } else widthInt = 700;
+
+ wholeScript.append(".dygraph-legend {\n");
+ wholeScript.append(" left: "+(widthInt-200)+"px !important;\n");
+ wholeScript.append(" top: 5px !important;\n");
+ wholeScript.append("}\n");
+
+ wholeScript.append(".nodatadiv {\n");
+ wholeScript.append(" display: table-cell;\n");
+ wholeScript.append(" width: 700px;\n");
+ wholeScript.append(" height:370px;\n");
+ wholeScript.append(" text-align:center;\n");
+ wholeScript.append(" vertical-align: middle;\n");
+ wholeScript.append("}\n");
+ wholeScript.append(".nodatainner {\n");
+ wholeScript.append(" padding: 10px;\n");
+ wholeScript.append("}\n");
+
+ wholeScript.append("canvas {\n");
+ wholeScript.append(" -webkit-touch-callout: none; \n");
+ wholeScript.append(" -webkit-user-select: none;\n");
+ wholeScript.append(" -khtml-user-select: none;\n");
+ wholeScript.append(" -moz-user-select: none;\n");
+ wholeScript.append(" user-select: none;\n");
+ wholeScript.append(" user-select: none;\n");
+ wholeScript.append(" outline: none;\n");
+ wholeScript.append(" -webkit-tap-highlight-color: rgba(255, 255, 255, 0); /* mobile webkit */\n");
+ wholeScript.append("}\n");
+ wholeScript.append("</style>\n");
+ wholeScript.append("</head>\n");
+ wholeScript.append("<body> \n");
+
+/* if(showTitle)
+ wholeScript.append(" <p align=\"center\"><b> " + (AppUtils.nvl(reportRuntime.getReportTitle()).length()>0?reportRuntime.getReportTitle():reportRuntime.getReportName()) + "</b></p>\n");
+*/
+ wholeScript.append(" <table>\n");
+ if(showTitle) {
+ wholeScript.append(" <tr> \n ");
+ wholeScript.append(" <td> \n ");
+ wholeScript.append(" <div class=\"dygraph-label dygraph-title\" align=\"center\">"+title+"</div> \n");
+ wholeScript.append(" </td> \n ");
+ }
+
+ wholeScript.append(" </tr> \n ");
+
+ wholeScript.append(" <tr> \n ");
+ wholeScript.append(" <td> \n ");
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()<=0 || reportRuntime.getLegendPosition().equals("top")) {
+ wholeScript.append(" <div id=\"labelDiv"+reportRuntime.getReportID()+"\"></div>\n");
+ }
+ wholeScript.append(" <div id=\"message"+reportRuntime.getReportID()+"\"></div> \n");
+ wholeScript.append(" </td> \n ");
+
+ wholeScript.append(" </tr> \n ");
+ wholeScript.append(" <tr>\n");
+ wholeScript.append(" <td>\n");
+
+ int heightInt = 0;
+ if(nvl(height).length() > 0) {
+ try {
+ heightInt = new Integer(height).intValue();
+ heightInt -= 50;
+ } catch(Exception ex) {
+ if(height.endsWith("px")) {
+ try {
+ heightInt = new Integer(height.substring(0, height.indexOf("px")));
+ heightInt -= 50;
+ } catch (Exception ex1) {
+ heightInt = 420;
+ }
+ } else {
+ heightInt = 420;
+ }
+ }
+ } else heightInt = 420;
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>=0 && reportRuntime.getLegendPosition().equals("right")) {
+ wholeScript.append(" <div id=\"div_g"+reportRuntime.getReportID()+"\" style=\"width:"+ (widthInt-250)+ "px; \n" );
+ } else {
+ wholeScript.append(" <div id=\"div_g"+reportRuntime.getReportID()+"\" style=\"width:"+ (widthInt)+ "px; \n" );
+ }
+ wholeScript.append(" height:"+ heightInt +"px;\"></div> \n");
+ wholeScript.append(" </td>\n");
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>=0 && reportRuntime.getLegendPosition().equals("right")) {
+ wholeScript.append(" <td valign=\"top\">\n");
+ wholeScript.append(" <div id=\"labelDiv3716\" valign=\"top\" style=\"width:250px;height:"+ heightInt +"px;\"></div>\n");
+ wholeScript.append(" </td>\n");
+ }
+ wholeScript.append(" </tr>\n");
+ if(anomalyRec > 0) {
+ wholeScript.append(" <tr>\n");
+ wholeScript.append(" <td>\n");
+ wholeScript.append(" <table>\n");
+ wholeScript.append(" <tr>\n");
+ wholeScript.append(" <td align=\"center\"><font size=\"2px\"><B><align=\"center\">Anomaly Description</align></B></font></td>\n");
+ wholeScript.append(" </tr>\n");
+ wholeScript.append(" <tr>\n");
+ wholeScript.append(" <td><div id=\"list"+reportRuntime.getReportID()+"\" style=\"width:" + widthInt + "px; height:50px;\"></div></td>\n" );
+ wholeScript.append(" </tr>\n");
+ wholeScript.append(" </table>\n");
+ wholeScript.append(" </td>\n");
+ wholeScript.append(" </tr>\n");
+ }
+ wholeScript.append(" </table>\n");
+
+ wholeScript.append(" <script type=\"text/javascript\">\n");
+ wholeScript.append(" Dygraph.addEvent(document, \"mousewheel\", function() { lastClickedGraph = null; });\n");
+ wholeScript.append(" Dygraph.addEvent(document, \"click\", function() { lastClickedGraph = null; });\n");
+ wholeScript.append(" var data = []; \n");
+ wholeScript.append(" data = [\n ");
+ wholeScript.append( dataStrBuf.toString());
+ wholeScript.append(" ];\n");
+ wholeScript.append(" if(data.length > 0 ) { \n");
+ wholeScript.append(" var orig_range = [ data[0][0].valueOf(), data[data.length - 1][0].valueOf() ];\n");
+ if(!timeCharts) {
+ wholeScript.append(" function nameAnnotation(ann) { \n");
+ wholeScript.append(" return ann.shortText; \n");
+ //wholeScript.append(" var m = moment(ann.x);\n");
+ //wholeScript.append(" return \"(\" + ann.series + \", \" + m.format(\"YYYY-MM-DD HH\"); + \")\"; \n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" anns = [];\n");
+ }
+ wholeScript.append(" var graph_initialized = false;\n");
+ wholeScript.append(" if(navigator.platform == 'iPad') { ");
+ wholeScript.append(" g = new Dygraph(\n");
+ wholeScript.append(" document.getElementById(\"div_g"+reportRuntime.getReportID()+"\"),\n");
+ //data here
+ /*wholeScript.append(" [\n");
+ wholeScript.append(dataStrBuf.toString());
+ wholeScript.append(" ],\n");*/
+ wholeScript.append(" data , \n");
+ wholeScript.append(" {\n");
+
+ //Labels here
+
+ dct = null;
+ StringBuffer labelStrBuf = new StringBuffer("");
+ StringBuffer colorsStrBuf = new StringBuffer("");
+ StringBuffer visibilityStrBuf = new StringBuffer("");
+ int countChartValues = 0;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ if((dct.getChartSeq()!=null && dct.getChartSeq() >=0) || AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
+ if(!AppUtils.nvl(dct.getDisplayName()).toLowerCase().equals("anomaly_text")) {
+ countChartValues++;
+ labelStrBuf.append("'"+ dct.getDisplayName()+"',");
+ if(!AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ colorsStrBuf.append("'"+ AppUtils.nvl(dct.getChartColor())+"',");
+ visibilityStrBuf.append("true,");
+ }
+ }
+ }
+ if(labelStrBuf.indexOf(",")!=-1) {
+ labelStrBuf.deleteCharAt(labelStrBuf.lastIndexOf(","));
+ visibilityStrBuf.deleteCharAt(visibilityStrBuf.lastIndexOf(","));
+ }
+ if(colorsStrBuf.indexOf(",")!=-1)
+ colorsStrBuf.deleteCharAt(colorsStrBuf.lastIndexOf(","));
+ //if(showTitle)
+ //wholeScript.append("title: '" + (AppUtils.nvl(reportRuntime.getReportTitle()).length()>0?reportRuntime.getReportTitle():reportRuntime.getReportName()) + "',\n");
+ wholeScript.append("maxNumberWidth:6,\n");
+ wholeScript.append("xAxisHeight: 70,\n");
+ wholeScript.append("yAxisLabelWidth: 70,\n");
+ wholeScript.append("xAxisLabelWidth: 45,\n");
+ wholeScript.append("axes: {\n");
+ wholeScript.append("x: {\n");
+ wholeScript.append(" axisLabelFormatter: function(d, gran) {\n");
+ wholeScript.append(" var month = d.getMonth()+1;\n");
+ wholeScript.append(" var day = d.getDate();\n");
+ wholeScript.append(" var year = d.getFullYear();\n");
+ wholeScript.append(" var hour = d.getHours();\n");
+ wholeScript.append(" var minutes = d.getMinutes();\n");
+ wholeScript.append(" var seconds = d.getSeconds();\n");
+ wholeScript.append(" var wholeString = Dygraph.zeropad(month)+'/'+Dygraph.zeropad(day);\n");
+ // wholeScript.append(" if(hour >= 0 && minutes > 0 && seconds > 0) {\n");
+ //wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour) + ':'+Dygraph.zeropad(minutes)+':'+Dygraph.zeropad(seconds);\n");
+ //wholeScript.append(" } else if (hour >= 0 && minutes > 0 && seconds == 0) {\n");
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).length()==0 || AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly"))
+ wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour) + ':'+Dygraph.zeropad(minutes);\n");
+ //wholeScript.append(" } else if (hour >= 0 && (minutes >= 0 && seconds > 0)) {\n");
+ //wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour) + ':'+Dygraph.zeropad(minutes)+':'+Dygraph.zeropad(seconds);\n");
+ //wholeScript.append(" } else if (hour >= 0) { \n");
+ //wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour); \n");
+ //wholeScript.append(" } \n");
+ wholeScript.append(" return wholeString; \n");
+ wholeScript.append(" },\n");
+ wholeScript.append(" ticker: function (a, b, pixels, opts, dygraph, vals) { \n ");
+ wholeScript.append(" if(((b-a)/(1000*60*60)) <= 6) { \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.THIRTY_MINUTELY, opts, dygraph); \n");
+ wholeScript.append(" } else if(((b-a)/(1000*60*60)) <= 12) { \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.HOURLY, opts, dygraph); \n");
+ wholeScript.append(" } else if (((b-a)/(1000*60*60)) <= 25) \n ");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.TWO_HOURLY, opts, dygraph); \n ");
+ wholeScript.append(" else if(((b-a)/(1000*60*60)) <= 78) \n ");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.SIX_HOURLY, opts, dygraph); \n ");
+ wholeScript.append(" else if(((b-a)/(1000*60*60*24)) <= 12)\n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.DAILY, opts, dygraph); \n");
+ wholeScript.append(" else if(((b-a)/(1000*60*60*24)) <= 90) \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.WEEKLY, opts, dygraph); \n");
+ wholeScript.append(" else \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.MONTHLY, opts, dygraph); \n");
+ wholeScript.append(" }, \n");
+ wholeScript.append(" valueFormatter: function(ms) { \n");
+ wholeScript.append(" return new Date(ms).strftime(\"%m/%d/%Y %H:%M\"); \n");
+ wholeScript.append( " }\n" );
+ wholeScript.append(" }\n");
+ wholeScript.append("},\n");
+ wholeScript.append(" interactionModel : { \n");
+ wholeScript.append(" 'mousedown' : downV4,\n");
+ wholeScript.append(" touchstart : newDygraphTouchstart,\n");
+ wholeScript.append(" touchend : Dygraph.defaultInteractionModel.touchend,\n");
+ wholeScript.append(" touchmove : Dygraph.defaultInteractionModel.touchmove\n");
+ //wholeScript.append(" 'dblclick' : dblClickV3,\n");
+ //wholeScript.append(" 'mousewheel' : scrollV3\n");
+
+ /*wholeScript.append(" 'mousedown' : downV3,\n");
+ wholeScript.append(" 'mousemove' : moveV3,\n");
+ wholeScript.append(" 'mouseup' : upV3,\n");
+ wholeScript.append(" 'click' : clickV3,\n");
+ wholeScript.append(" 'dblclick' : dblClickV3,\n");
+ wholeScript.append(" 'mousewheel' : scrollV3\n");*/
+ wholeScript.append("},\n");
+ /*wholeScript.append(" zoomCallback: function(minDate, maxDate, yRanges) { \n");
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("daily")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60*24)) < 6) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(6*24*60);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60)) <= 6) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(360);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("30min")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60)) <= 3) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(180);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("weekly")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60*24)) < 7) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(7*24*60);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ }
+ wholeScript.append(" } else {\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel : {\n");
+ wholeScript.append(" 'mousedown' : downV3,\n");
+ wholeScript.append(" 'mousemove' : moveV3,\n");
+ wholeScript.append(" 'mouseup' : upV3,\n");
+ wholeScript.append(" 'click' : clickV3,\n");
+ wholeScript.append(" 'dblclick' : dblClickV3,\n");
+ wholeScript.append(" 'mousewheel' : scrollV3\n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" });\n");
+ wholeScript.append(" } \n");
+ wholeScript.append(" } ,\n");*/
+ wholeScript.append("dateWindow: ["+minDate+", "+maxDate+"],\n");
+ wholeScript.append("labels: ["+ labelStrBuf +"],\n");
+ wholeScript.append("labelsDiv: \"labelDiv"+reportRuntime.getReportID()+"\",\n");
+ wholeScript.append("labelsShowZeroValues: true,\n");
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>=0 && reportRuntime.getLegendPosition().equals("right")) {
+ wholeScript.append("labelsSeparateLines: true,\n");
+ }
+ wholeScript.append("labelsDivWidth: 200,\n");
+
+ wholeScript.append("animatedZooms: true,\n");
+ wholeScript.append("strokeWidth: 3.0,\n");
+ wholeScript.append("strokeBorderWidth: 2.0,\n");
+ /*wholeScript.append(" labelsDivStyles: { \n");
+ wholeScript.append(" 'backgroundColor': 'rgba(200, 200, 255, 0.75)',\n");
+ wholeScript.append(" 'padding': '4px',\n");
+ wholeScript.append(" 'border': '1px solid black',\n");
+ wholeScript.append(" 'borderRadius': '10px',\n");
+ wholeScript.append(" 'boxShadow': '4px 4px 4px #888',\n");
+ wholeScript.append(" 'width': '50px'\n");
+ wholeScript.append("}, \n");
+ */
+ wholeScript.append("visibility: ["+ visibilityStrBuf +"],\n");
+ if(colorsStrBuf.length() > 0 && colorsStrBuf.length()>=(countChartValues*3+5))
+ wholeScript.append("colors: ["+ colorsStrBuf +"],\n");
+
+ wholeScript.append(" legend: 'always', \n");
+ //Yaxis label here
+ wholeScript.append(" ylabel: '"+ chartLeftAxisLabel +"' , \n");
+
+ //Xaxis label here
+ wholeScript.append(" xlabel: '"+ xAxisLabel +"' , \n");
+
+ //draw points
+ wholeScript.append(" drawPoints: true, \n");
+
+ //stacked graph
+ wholeScript.append(" stackedGraph: false, \n");
+
+ dct = null;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ if(!(nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(!AppUtils.nvl(dct.getDisplayName()).toLowerCase().equals("anomaly_text")) {
+ if(dct.getChartSeq()!=null && dct.getChartSeq() >=0) {
+ wholeScript.append(" '"+ dct.getDisplayName() + "': {\n");
+ if(AppUtils.nvl(dct.getChartLineType()).length()>0)
+ wholeScript.append(" strokePattern: Dygraph.DASHED_LINE,\n");
+ if(dct.isIsRangeAxisFilled()!=null && dct.isIsRangeAxisFilled().booleanValue()) {
+ wholeScript.append(" fillGraph: true\n");
+ }
+ wholeScript.append(" },\n");
+ }
+ }
+ }
+ }
+
+/* //each labels
+ wholeScript.append(" 'Forecast': {\n");
+
+ //if dashed line
+ wholeScript.append(" strokePattern: Dygraph.DASHED_LINE,\n");
+
+ //if fillable
+ wholeScript.append(" fillGraph: true\n");
+
+ // close each labels
+ wholeScript.append(" }\n");
+*/
+ // callback method
+ if(anomalyRec > 0) {
+ wholeScript.append(" drawCallback: function(g, is_initial) { \n");
+ wholeScript.append(" if (is_initial) { \n");
+ wholeScript.append(" graph_initialized = true; \n");
+ wholeScript.append(" if (anns.length > 0) { \n");
+ wholeScript.append(" g.setAnnotations(anns); \n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" }\n");
+
+ wholeScript.append(" var anns1 = g.annotations();\n");
+ //wholeScript.append(" var html = \"\";\n");
+ wholeScript.append(" var html = \"<select id='x' size='1' style='width: "+ widthInt +"px; font-family : courier; font-size:8pt; font-weight:bold;'>\";\n");
+ wholeScript.append(" for (var i = anns1.length-1; i >= 0 ; i--) {\n");
+ wholeScript.append(" var name = nameAnnotation(anns1[i]);\n");
+ //wholeScript.append(" html += \"<span id='\" + name + \"'>\"\n");
+ wholeScript.append(" if(i==anns1.length-1)\n");
+ wholeScript.append(" html += \"<option value='\" + name + \"' selected ><font size=1>\" \n");
+ wholeScript.append(" else \n");
+ wholeScript.append(" html += \"<option value='\" + name + \"'><font size=1>\" \n");
+ wholeScript.append(" html += name \n");
+ //wholeScript.append(" html += name + \": \" + (anns1[i].shortText || '(icon)')\n");
+ //wholeScript.append(" html += \" -> \" + anns1[i].text + \"</span><br/>\";\n");
+ wholeScript.append(" html += \"&nbsp;:&nbsp;\" + anns1[i].text + \"</font></option>\";\n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" html += \"</select>\" \n");
+ wholeScript.append(" document.getElementById(\"list"+reportRuntime.getReportID()+"\").innerHTML = html;\n");
+ wholeScript.append(" }\n");
+
+
+ wholeScript.append(" }\n");
+ wholeScript.append(" )\n");
+
+ //push annotations
+ wholeScript.append(annotationsStrBuf.toString());
+
+ wholeScript.append(" if (graph_initialized) {\n");
+ wholeScript.append(" g.setAnnotations(anns);\n");
+ wholeScript.append(" } \n");
+ //upate handler script
+
+ wholeScript.append(" var saveBg = '';\n");
+ wholeScript.append(" var num = 0;\n");
+ wholeScript.append(" g.updateOptions( {\n");
+ wholeScript.append(" annotationMouseOverHandler: function(ann) { \n");
+ //wholeScript.append(" document.getElementById(nameAnnotation(ann)).style.fontWeight = 'bold';\n");
+ //wholeScript.append(" saveBg = ann.div.style.backgroundColor;\n");
+ //wholeScript.append(" ann.div.style.backgroundColor = '#ddd';\n");
+ wholeScript.append(" var selectobject = document.getElementById(\"x\");\n");
+ wholeScript.append(" for(var i=0; i<selectobject.length;i++) {\n ");
+ wholeScript.append(" if(selectobject.options[i].value == nameAnnotation(ann)) {\n ");
+ wholeScript.append(" selectobject.options[i].selected = true; \n ");
+ wholeScript.append(" } ");
+ wholeScript.append(" } ");
+
+ wholeScript.append(" },\n");
+ wholeScript.append(" annotationMouseOutHandler: function(ann) {\n");
+ wholeScript.append(" document.getElementById(nameAnnotation(ann)).style.fontWeight = 'normal';\n");
+ wholeScript.append(" ann.div.style.backgroundColor = saveBg;\n");
+ //wholeScript.append(" var selectobject = document.getElementById(\"x\");\n");
+ //wholeScript.append(" for(var i=0; i<selectobject.length;i++) {\n ");
+ //wholeScript.append(" if(selectobject.options[i].value == nameAnnotation(ann)) {\n ");
+ //wholeScript.append(" selectobject.options[i].selected = false; \n ");
+ //wholeScript.append(" } ");
+ //wholeScript.append(" } ");
+
+ wholeScript.append(" }\n");
+ }
+ wholeScript.append(" });\n");
+
+ //Other devices
+ wholeScript.append("} else { \n");
+
+ wholeScript.append(" g = new Dygraph(\n");
+ wholeScript.append(" document.getElementById(\"div_g"+reportRuntime.getReportID()+"\"),\n");
+ //data here
+ /*wholeScript.append(" [\n");
+ wholeScript.append(dataStrBuf.toString());
+ wholeScript.append(" ],\n");*/
+ wholeScript.append(" data , \n");
+ wholeScript.append(" {\n");
+
+ //Labels here
+
+ dct = null;
+ labelStrBuf = new StringBuffer("");
+ colorsStrBuf = new StringBuffer("");
+ visibilityStrBuf = new StringBuffer("");
+ countChartValues = 0;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ if((dct.getChartSeq()!=null && dct.getChartSeq() >=0) || AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
+ if(!AppUtils.nvl(dct.getDisplayName()).toLowerCase().equals("anomaly_text")) {
+ countChartValues++;
+ labelStrBuf.append("'"+ dct.getDisplayName()+"',");
+ if(!AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ colorsStrBuf.append("'"+ AppUtils.nvl(dct.getChartColor())+"',");
+ visibilityStrBuf.append("true,");
+ }
+ }
+ }
+ if(labelStrBuf.indexOf(",")!=-1) {
+ labelStrBuf.deleteCharAt(labelStrBuf.lastIndexOf(","));
+ visibilityStrBuf.deleteCharAt(visibilityStrBuf.lastIndexOf(","));
+ }
+ if(colorsStrBuf.indexOf(",")!=-1)
+ colorsStrBuf.deleteCharAt(colorsStrBuf.lastIndexOf(","));
+ //if(showTitle)
+ //wholeScript.append("title: '" + (AppUtils.nvl(reportRuntime.getReportTitle()).length()>0?reportRuntime.getReportTitle():reportRuntime.getReportName()) + "',\n");
+ wholeScript.append("maxNumberWidth:6,\n");
+ wholeScript.append("xAxisHeight: 70,\n");
+ wholeScript.append("yAxisLabelWidth: 70,\n");
+ wholeScript.append("xAxisLabelWidth: 45,\n");
+ wholeScript.append("axes: {\n");
+ wholeScript.append("x: {\n");
+ wholeScript.append(" axisLabelFormatter: function(d, gran) {\n");
+ wholeScript.append(" var month = d.getMonth()+1;\n");
+ wholeScript.append(" var day = d.getDate();\n");
+ wholeScript.append(" var year = d.getFullYear();\n");
+ wholeScript.append(" var hour = d.getHours();\n");
+ wholeScript.append(" var minutes = d.getMinutes();\n");
+ wholeScript.append(" var seconds = d.getSeconds();\n");
+ wholeScript.append(" var wholeString = Dygraph.zeropad(month)+'/'+Dygraph.zeropad(day);\n");
+ // wholeScript.append(" if(hour >= 0 && minutes > 0 && seconds > 0) {\n");
+ //wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour) + ':'+Dygraph.zeropad(minutes)+':'+Dygraph.zeropad(seconds);\n");
+ //wholeScript.append(" } else if (hour >= 0 && minutes > 0 && seconds == 0) {\n");
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).length()==0 || AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly"))
+ wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour) + ':'+Dygraph.zeropad(minutes);\n");
+ //wholeScript.append(" } else if (hour >= 0 && (minutes >= 0 && seconds > 0)) {\n");
+ //wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour) + ':'+Dygraph.zeropad(minutes)+':'+Dygraph.zeropad(seconds);\n");
+ //wholeScript.append(" } else if (hour >= 0) { \n");
+ //wholeScript.append(" wholeString += ' ' + Dygraph.zeropad(hour); \n");
+ //wholeScript.append(" } \n");
+ wholeScript.append(" return wholeString; \n");
+ wholeScript.append(" },\n");
+ wholeScript.append(" ticker: function (a, b, pixels, opts, dygraph, vals) { \n ");
+ wholeScript.append(" if(((b-a)/(1000*60*60)) <= 6) { \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.THIRTY_MINUTELY, opts, dygraph); \n");
+ wholeScript.append(" } else if(((b-a)/(1000*60*60)) <= 12) { \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.HOURLY, opts, dygraph); \n");
+ wholeScript.append(" } else if (((b-a)/(1000*60*60)) <= 25) \n ");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.TWO_HOURLY, opts, dygraph); \n ");
+ wholeScript.append(" else if(((b-a)/(1000*60*60)) <= 78) \n ");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.SIX_HOURLY, opts, dygraph); \n ");
+ wholeScript.append(" else if(((b-a)/(1000*60*60*24)) <= 12)\n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.DAILY, opts, dygraph); \n");
+ wholeScript.append(" else if(((b-a)/(1000*60*60*24)) <= 90) \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.WEEKLY, opts, dygraph); \n");
+ wholeScript.append(" else \n");
+ wholeScript.append(" return Dygraph.getDateAxis(a, b, Dygraph.MONTHLY, opts, dygraph); \n");
+ wholeScript.append(" }, \n");
+ wholeScript.append(" valueFormatter: function(ms) { \n");
+ wholeScript.append(" return new Date(ms).strftime(\"%m/%d/%Y %H:%M\"); \n");
+ wholeScript.append( " }\n" );
+ wholeScript.append(" }\n");
+ wholeScript.append("},\n");
+ wholeScript.append(" interactionModel : { \n");
+
+ wholeScript.append(" 'mousedown' : downV3,\n");
+ wholeScript.append(" 'mousemove' : moveV3,\n");
+ wholeScript.append(" 'mouseup' : upV3,\n");
+ wholeScript.append(" 'click' : clickV3,\n");
+ wholeScript.append(" 'dblclick' : dblClickV3,\n");
+ wholeScript.append(" 'mousewheel' : scrollV3\n");
+ wholeScript.append("},\n");
+ wholeScript.append(" zoomCallback: function(minDate, maxDate, yRanges) { \n");
+ if(AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("daily")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60*24)) < 6) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(6*24*60);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("hourly")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60)) <= 6) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(360);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("30min")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60)) <= 3) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(180);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ } else if (AppUtils.nvl(reportRuntime.getTimeAxisType()).equals("weekly")) {
+ wholeScript.append(" if(((maxDate-minDate)/(1000*60*60*24)) < 7) { \n");
+ wholeScript.append(" maxDate = new Date(minDate).setMinutes(7*24*60);\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel: {},\n");
+ wholeScript.append(" dateWindow: [minDate, maxDate]\n");
+ wholeScript.append(" });\n");
+ }
+ wholeScript.append(" } else {\n");
+ wholeScript.append(" g.updateOptions({\n");
+ wholeScript.append(" interactionModel : {\n");
+ wholeScript.append(" 'mousedown' : downV3,\n");
+ wholeScript.append(" 'mousemove' : moveV3,\n");
+ wholeScript.append(" 'mouseup' : upV3,\n");
+ wholeScript.append(" 'click' : clickV3,\n");
+ wholeScript.append(" 'dblclick' : dblClickV3,\n");
+ wholeScript.append(" 'mousewheel' : scrollV3\n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" });\n");
+ wholeScript.append(" } \n");
+ wholeScript.append(" } ,\n");
+ wholeScript.append("dateWindow: ["+minDate+", "+maxDate+"],\n");
+ wholeScript.append("labels: ["+ labelStrBuf +"],\n");
+ wholeScript.append("labelsDiv: \"labelDiv"+reportRuntime.getReportID()+"\",\n");
+ wholeScript.append("labelsShowZeroValues: true,\n");
+ if(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>=0 && reportRuntime.getLegendPosition().equals("right")) {
+ wholeScript.append("labelsSeparateLines: true,\n");
+ }
+ wholeScript.append("labelsDivWidth: 200,\n");
+
+
+ wholeScript.append("animatedZooms: true,\n");
+ wholeScript.append("strokeWidth: 3.0,\n");
+ wholeScript.append("strokeBorderWidth: 2.0,\n");
+
+ /*wholeScript.append(" labelsDivStyles: { \n");
+ wholeScript.append(" 'backgroundColor': 'rgba(200, 200, 255, 0.75)',\n");
+ wholeScript.append(" 'padding': '4px',\n");
+ wholeScript.append(" 'border': '1px solid black',\n");
+ wholeScript.append(" 'borderRadius': '10px',\n");
+ wholeScript.append(" 'boxShadow': '4px 4px 4px #888',\n");
+ wholeScript.append(" 'width': '50px'\n");
+ wholeScript.append("}, \n");
+ */
+ wholeScript.append("visibility: ["+ visibilityStrBuf +"],\n");
+ if(colorsStrBuf.length() > 0 && colorsStrBuf.length()>=(countChartValues*3+5))
+ wholeScript.append("colors: ["+ colorsStrBuf +"],\n");
+
+ wholeScript.append(" legend: 'always', \n");
+ //Yaxis label here
+ wholeScript.append(" ylabel: '"+ chartLeftAxisLabel +"' , \n");
+
+ //Xaxis label here
+ wholeScript.append(" xlabel: '"+ xAxisLabel +"' , \n");
+
+
+ //draw points
+ wholeScript.append(" drawPoints: true, \n");
+
+ //stacked graph
+ wholeScript.append(" stackedGraph: false, \n");
+
+ dct = null;
+ for (Iterator iter = l.iterator(); iter.hasNext();) {
+ dct = (DataColumnType) iter.next();
+ if(!(nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(!AppUtils.nvl(dct.getDisplayName()).toLowerCase().equals("anomaly_text")) {
+ if(dct.getChartSeq()!=null && dct.getChartSeq() >=0) {
+ wholeScript.append(" '"+ dct.getDisplayName() + "': {\n");
+ if(AppUtils.nvl(dct.getChartLineType()).length()>0)
+ wholeScript.append(" strokePattern: Dygraph.DASHED_LINE,\n");
+ if(dct.isIsRangeAxisFilled()!=null && dct.isIsRangeAxisFilled().booleanValue()) {
+ wholeScript.append(" fillGraph: true\n");
+ }
+ wholeScript.append(" },\n");
+ }
+ }
+ }
+ }
+
+/* //each labels
+ wholeScript.append(" 'Forecast': {\n");
+
+ //if dashed line
+ wholeScript.append(" strokePattern: Dygraph.DASHED_LINE,\n");
+
+ //if fillable
+ wholeScript.append(" fillGraph: true\n");
+
+ // close each labels
+ wholeScript.append(" }\n");
+*/
+ // callback method
+ if(anomalyRec > 0) {
+ wholeScript.append(" drawCallback: function(g, is_initial) { \n");
+ wholeScript.append(" if (is_initial) { \n");
+ wholeScript.append(" graph_initialized = true; \n");
+ wholeScript.append(" if (anns.length > 0) { \n");
+ wholeScript.append(" g.setAnnotations(anns); \n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" }\n");
+
+ wholeScript.append(" var anns1 = g.annotations();\n");
+ //wholeScript.append(" var html = \"\";\n");
+ wholeScript.append(" var html = \"<select id='x' size='1' style='width: "+ widthInt +"px; font-family : courier; font-size:8pt; font-weight:bold;'>\";\n");
+ wholeScript.append(" for (var i = anns1.length-1; i >= 0 ; i--) {\n");
+ wholeScript.append(" var name = nameAnnotation(anns1[i]);\n");
+ //wholeScript.append(" html += \"<span id='\" + name + \"'>\"\n");
+ wholeScript.append(" if(i==anns1.length-1)\n");
+ wholeScript.append(" html += \"<option value='\" + name + \"' selected ><font size=1>\" \n");
+ wholeScript.append(" else \n");
+ wholeScript.append(" html += \"<option value='\" + name + \"'><font size=1>\" \n");
+ wholeScript.append(" html += name \n");
+ //wholeScript.append(" html += name + \": \" + (anns1[i].shortText || '(icon)')\n");
+ //wholeScript.append(" html += \" -> \" + anns1[i].text + \"</span><br/>\";\n");
+ wholeScript.append(" html += \"&nbsp;:&nbsp;\" + anns1[i].text + \"</font></option>\";\n");
+ wholeScript.append(" }\n");
+ wholeScript.append(" html += \"</select>\" \n");
+ wholeScript.append(" document.getElementById(\"list"+reportRuntime.getReportID()+"\").innerHTML = html;\n");
+ wholeScript.append(" }\n");
+
+
+ wholeScript.append(" }\n");
+ wholeScript.append(" )\n");
+
+ //push annotations
+ wholeScript.append(annotationsStrBuf.toString());
+
+ wholeScript.append(" if (graph_initialized) {\n");
+ wholeScript.append(" g.setAnnotations(anns);\n");
+ wholeScript.append(" } \n");
+ //upate handler script
+
+ wholeScript.append(" var saveBg = '';\n");
+ wholeScript.append(" var num = 0;\n");
+ wholeScript.append(" g.updateOptions( {\n");
+ wholeScript.append(" annotationMouseOverHandler: function(ann) { \n");
+ //wholeScript.append(" document.getElementById(nameAnnotation(ann)).style.fontWeight = 'bold';\n");
+ //wholeScript.append(" saveBg = ann.div.style.backgroundColor;\n");
+ //wholeScript.append(" ann.div.style.backgroundColor = '#ddd';\n");
+ wholeScript.append(" var selectobject = document.getElementById(\"x\");\n");
+ wholeScript.append(" for(var i=0; i<selectobject.length;i++) {\n ");
+ wholeScript.append(" if(selectobject.options[i].value == nameAnnotation(ann)) {\n ");
+ wholeScript.append(" selectobject.options[i].selected = true; \n ");
+ wholeScript.append(" } ");
+ wholeScript.append(" } ");
+
+ wholeScript.append(" },\n");
+ wholeScript.append(" annotationMouseOutHandler: function(ann) {\n");
+ //wholeScript.append(" document.getElementById(nameAnnotation(ann)).style.fontWeight = 'normal';\n");
+ wholeScript.append(" ann.div.style.backgroundColor = saveBg;\n");
+ //wholeScript.append(" var selectobject = document.getElementById(\"x\");\n");
+ //wholeScript.append(" for(var i=0; i<selectobject.length;i++) {\n ");
+ //wholeScript.append(" if(selectobject.options[i].value == nameAnnotation(ann)) {\n ");
+ //wholeScript.append(" selectobject.options[i].selected = false; \n ");
+ //wholeScript.append(" } ");
+ //wholeScript.append(" } ");
+
+ wholeScript.append(" }\n");
+ }
+ wholeScript.append(" });\n");
+
+
+ wholeScript.append("} \n");
+ //}
+ wholeScript.append("} else {\n");
+ wholeScript.append("document.getElementById(\"message"+ reportRuntime.getReportID()+"\").display = \"none\";\n");
+ wholeScript.append("document.getElementById(\"labelDiv"+ reportRuntime.getReportID()+"\").display=\"none\";\n");
+ wholeScript.append("document.getElementById(\"div_g"+reportRuntime.getReportID()+"\").display=\"none\";\n");
+
+ wholeScript.append("document.getElementById(\"div_g"+reportRuntime.getReportID()+"\").innerHTML = \"<div id='noData'><b>No Data Available</b></div>\";\n");
+ wholeScript.append("document.getElementById(\"div_g"+reportRuntime.getReportID()+"\").className=\"nodatadiv\";\n");
+ wholeScript.append("document.getElementById(\"nodata\").className=\"nodatainner\";\n");
+ if(!timeCharts)
+ wholeScript.append("document.getElementById(\"list"+reportRuntime.getReportID()+"\").display=\"none\";\n");
+ wholeScript.append("}\n");
+ wholeScript.append(" </script>\n");
+ wholeScript.append(" </body>\n");
+ wholeScript.append("</html>");
+
+
+ } else if (chartType.equals(AppConstants.GT_SCATTER)) {
+
+ wholeScript.append("<link href=\""+ AppUtils.getBaseFolderURL() +"d3/css/nv.d3.css\" rel=\"stylesheet\" type=\"text/css\">\n");
+ wholeScript.append("<style>\n " +
+ " body { \n" +
+ " overflow-y:scroll; \n" +
+ " } \n" +
+ " text { \n" +
+ " font: 12px sans-serif; \n" +
+ " } \n" +
+ " tr.z-row-over > td.z-row-inner, tr.z-row-over > .z-cell {" +
+ " background-color: rgb(255, 255, 255); "+
+ "} "+
+ " svg { display: block; } " +
+ " #chart1 svg { \n" +
+ " height: 420px; \n" +
+ " width: 800px; \n" +
+ " min-width: 100px; \n" +
+ " min-height: 100px; \n" +
+ " } \n" +
+
+ " </style> \n" );
+ wholeScript.append("<body> \n");
+ wholeScript.append("<div id=\"chart1\"><svg></svg></div>");
+ //js files
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/d3.v2.js\"></script>\n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/nv.d3.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/tooltip.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/utils.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/legend.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/axis.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/distribution.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/scatter.js\"></script> \n");
+ wholeScript.append("<script src=\""+ AppUtils.getBaseFolderURL() +"d3/js/models/scatterChart.js\"></script> \n");
+ wholeScript.append("<script> \n");
+ wholeScript.append("nv.addGraph(function() { \n" +
+ " var width1=900, height1=220; \n" +
+ " var chart = nv.models.scatterChart() \n" +
+ " .showDistX(true) \n" +
+ " .showDistY(true) \n" +
+ " .useVoronoi(true) \n" +
+ " .color(d3.scale.category10().range()); \n" +
+/* " .width(width1) \n" +
+ " .height(height1); \n" +
+*/ " chart.xAxis\n" +
+ " .axisLabel('" +legendColumnName + "')\n" +
+ " .tickFormat(d3.format('.02f'));\n" +
+ " chart.yAxis\n" +
+ " .axisLabel('" + chartLeftAxisLabel + "')\n" +
+ " .tickFormat(d3.format('.02f'));\n" +
+ " d3.select('#chart1 svg') \n" +
+ " .datum(getData()) \n" );
+ if(animation)
+ wholeScript.append(" .transition().duration(1200) \n" );
+/* " .attr(\"width\", width1) \n" +
+ " .attr(\"height\", height1) \n" +
+*/ wholeScript.append(" .call(chart); \n" +
+ " nv.utils.windowResize(chart.update);\n"+
+ "return chart; \n" +
+ "}); \n");
+
+ String dateStr = "";
+ Object uniqueElements [] = null;
+ TreeSet ts = new TreeSet();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ dateStr = ds.getString(i, 2);
+ if(dateStr.length()>0)
+ ts.add(dateStr);
+ }
+ SortedSet s = Collections.synchronizedSortedSet(ts);
+ uniqueElements = s.toArray();
+
+ wholeScript.append(" function getData() { \n " +
+ " var data = [];\n ");
+ for (int i = 0; i < uniqueElements.length; i++) {
+ wholeScript.append(" data.push( {key:'"+ uniqueElements[i]+ "', values:[]})\n");
+ }
+
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ for (int k = 0; k < uniqueElements.length; k++) {
+ if(ds.getString(i, 2).equals(uniqueElements[k])) {
+ wholeScript.append("data["+k+"].values.push({x:"+ ds.getString(i, 1) +",y:"+ds.getString(i, 3) + ", size: Math.random() });\n");
+ }
+ }
+ }
+
+ wholeScript.append("return data; } </script></body>\n");
+ } else if (chartType.equals(AppConstants.GT_HIERARCHICAL_SUNBURST)) {
+
+ StringBuffer dataStr = new StringBuffer("");
+ StringBuffer groupBuffer = new StringBuffer("");
+ StringBuffer s = new StringBuffer("");
+ dataStr.append("{");
+ dataStr.append(" \"ss4262\":{\n");
+ String mid = "";
+ String mid_old = "";
+ String level = "-1";
+ String level_old = "-1";
+ String eid = "";
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ mid = ds.getString(i, "mid");
+ level = ds.getString(i, "level1");
+ eid = ds.getString(i, "eid");
+ if(mid.equals(mid_old)) {
+ dataStr.append("\""+ eid +"\": 9956,\n");
+ } else {
+ if(dataStr.lastIndexOf(",")!= -1)
+ dataStr.deleteCharAt(dataStr.lastIndexOf(","));
+ //if(Integer.parseInt(level_old)==Integer.parseInt(level))
+ //dataStr.append("},\n");
+ if (Integer.parseInt(level_old)<Integer.parseInt(level))
+ dataStr.append("},\n");
+ dataStr.append("\""+ mid +"\": { \n");
+ }
+
+ mid_old = mid;
+ level_old = level;
+ }
+ if(dataStr.toString().endsWith(","))
+ dataStr.deleteCharAt(dataStr.lastIndexOf(","));
+ dataStr.append("}\n");
+ dataStr.append("}\n");
+ try {
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(reportRuntime.getReportName());
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new java.util.Date());
+ String filename=formattedReportName+formattedDate+user_id+".json";
+ String filenamepath = AppUtils.getExcelTemplatePath()+"../../json/"+filename;
+ System.out.println("filenamepath " + filenamepath);
+ BufferedWriter out = new BufferedWriter(new FileWriter(filenamepath));
+ out.write(dataStr.toString());
+ out.close();
+ request.getSession().setAttribute("jsonFileName", filename);
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Exception ");
+ }
+ } else if (chartType.equals(AppConstants.GT_HIERARCHICAL)) {
+
+ StringBuffer dataStr = new StringBuffer("");
+ StringBuffer groupBuffer = new StringBuffer("");
+ StringBuffer s = new StringBuffer("");
+ dataStr.append("{");
+ dataStr.append(" \"groups\":[");
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ if(ds.getString(i,"group_ind").equals("Y")) {
+ groupBuffer.append(" { \"name\": \""+ ds.getString(i,"ei1") +"\" },\n");
+ }
+
+ }
+ groupBuffer.deleteCharAt(groupBuffer.lastIndexOf(","));
+ dataStr.append(groupBuffer.toString());
+ dataStr.append("],");
+ dataStr.append("\"nodes\":[");
+ int rowCount = ds.getRowCount();
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ s.append("{ \"name\": \""+ ds.getString(i,"ei1") +"\" , \"group\":"+ ds.getString(i,"groups") +", \"level\":2 }");
+ if (i < (rowCount-1)) s.append(",");
+ dataStr.append(s);
+ s = new StringBuffer("");
+ }
+
+ dataStr.append("],");
+ dataStr.append("\"links\":[");
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ s.append("{ \"source\": "+ ds.getString(i,"source") +" , \"target\":"+ ds.getString(i,"target") +", \"value\":2 }");
+ if (i < (rowCount-1)) s.append(",");
+ dataStr.append(s);
+ s = new StringBuffer("");
+ }
+ dataStr.append("]}");
+ try {
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(reportRuntime.getReportName());
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new java.util.Date());
+ String filename=formattedReportName+formattedDate+user_id+".json";
+ String filenamepath = AppUtils.getExcelTemplatePath()+"../../json/"+filename;
+ System.out.println("filenamepath " + filenamepath);
+ BufferedWriter out = new BufferedWriter(new FileWriter(filenamepath));
+ out.write(dataStr.toString());
+ out.close();
+ request.getSession().setAttribute("jsonFileName", filename);
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Exception ");
+ }
+ }
+
+ }
+ }
+ try {
+ BufferedWriter out = new BufferedWriter(new FileWriter("test.txt"));
+ out.write(wholeScript.toString());
+ out.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ System.out.println("Exception ");
+ }
+ return wholeScript.toString();
+ }
+
+ public String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ public static String nvls(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public static String nvls(String s, String sDefault) {
+ return nvls(s).equals("") ? sDefault : s;
+ }
+
+ public boolean getFlagInBoolean(String s) {
+ return nvl(s).toUpperCase().startsWith("Y") || nvl(s).toLowerCase().equals("true");
+ }
+
+ public DataSet loadChartData(String userId, HttpServletRequest request) throws RaptorException {
+ if (nvl(getChartType()).length() == 0)
+ return null;
+ //TODO: display chart function to be added.
+ //if (!getDisplayChart())
+ // return null;
+
+ String sql = null;
+ sql = generateChartSQL(userId, request);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL generated " + sql));
+ String dbInfo = reportRuntime.getDBInfo();
+ DataSet ds = ConnectionUtils.getDataSet(sql, dbInfo);
+ if(ds.getRowCount()<=0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, (getChartType().toUpperCase()+" - " + "Report ID : " + reportRuntime.getReportID() + " DATA IS EMPTY" ));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("QUERY - " + sql));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ }
+
+ return ds;
+ } // loadChartData
+
+ public String generateChartSQL(String userId, HttpServletRequest request ) throws RaptorException {
+ List reportCols = reportRuntime.getAllColumns();
+ List chartValueCols = getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, null); // parameter is 0 has this requires all columns.
+ String reportSQL = reportRuntime.getWholeSQL();
+
+ //Add order by clause
+ Pattern re1 = Pattern.compile("(^[\r\n]*|([\\s]))[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]",Pattern.DOTALL);
+ //Pattern re1 = Pattern.compile("order(.*?[^\r\n]*)by", Pattern.DOTALL);
+ Matcher matcher = re1.matcher(reportSQL);
+ //Pattern re1 = Pattern.compile("(^[\r\n]*|([\\s]))[Oo][Rr][Dd][Ee][Rr][Tt](.*?[^\r\n]*)[Bb][Yy]",Pattern.DOTALL);
+ //int startPoint = sql.length()-30;
+
+ reportSQL = reportSQL + " ";
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ss][Ee][Ll][Ee][Cc][Tt]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" SELECT ");
+ //reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ff][Rr][Oo][Mm]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" FROM ");
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Rr][Ee]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" WHERE ");
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Nn]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" WHEN ");
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Aa][Nn][Dd]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" AND ");
+
+ if(!reportRuntime.getReportType().equals(AppConstants.RT_HIVE)) {
+ int startPoint = reportSQL.lastIndexOf(" FROM ");
+ if(startPoint <= 0) {
+ startPoint = reportSQL.lastIndexOf(" from ");
+ }
+ if(startPoint <= 0) {
+ startPoint = reportSQL.lastIndexOf("from ");
+ }
+ if(startPoint <= 0) {
+ startPoint = reportSQL.lastIndexOf("FROM ");
+ }
+
+ if (!matcher.find(startPoint)) {
+ reportSQL = reportSQL + " ORDER BY 1" ;
+ }
+ }
+ reportRuntime.setWholeSQL(reportSQL);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, (" *************************************************************************************** "));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("WHOLE_SQL" + reportSQL));
+ logger.debug(EELFLoggerDelegate.debugLogger, (" *************************************************************************************** "));
+
+ if (reportRuntime.getFormFieldList() != null) {
+ for (Iterator iter = reportRuntime.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = reportRuntime.getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ formfield_value = AppUtils.getRequestNvlValue(request, fieldId);
+ String paramValue = nvl(formfield_value);
+ if(paramValue.length()>0) {
+ /*sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));*/
+ reportSQL = Utils.replaceInString(reportSQL, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ /*sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));*/
+ reportSQL = Utils.replaceInString(reportSQL, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ reportSQL = Utils.replaceInString(reportSQL, fieldDisplay , nvl(
+ paramValue, "NULL"));
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL " + reportSQL));
+ String legendCol = "1 a";
+ // String valueCol = "1";
+ StringBuffer groupCol = new StringBuffer();
+ StringBuffer seriesCol = new StringBuffer();
+ StringBuffer valueCols = new StringBuffer();
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, request);
+ if (nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ legendCol = getSelectExpr(dc, colName)+" " + dc.getColId();
+ // if(dc.getChartSeq()>0)
+ // valueCol = "NVL("+colName+", 0) "+dc.getColId();
+ if ((!nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ && (dc.getChartSeq()!=null && dc.getChartSeq().intValue() <= 0) && dc.isGroupBreak()) {
+ groupCol.append(", ");
+ groupCol.append(colName + " " + dc.getColId());
+ }
+ } // for
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(dc.isChartSeries()!=null && dc.isChartSeries().booleanValue()) {
+ //System.out.println("*****************, "+ " " +getColumnSelectStr(dc, paramValues)+ " "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues)));
+ seriesCol.append(", "+ getSelectExpr(dc,getColumnSelectStr(dc, request))+ " " + dc.getColId());
+ }
+ }
+
+ /*for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(!dc.isChartSeries() && !(nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ //System.out.println("*****************, "+ " " +getColumnSelectStr(dc, paramValues)+ " "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues)));
+ seriesCol.append(", "+ formatChartColumn(getSelectExpr(dc,getColumnSelectStr(dc, paramValues)))+ " " + dc.getColId());
+ }
+ }*/
+
+ for (Iterator iter = chartValueCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, request);
+ String paramValue = "";
+ if(AppUtils.nvl(colName).startsWith("[")) {
+ if (reportRuntime.getFormFieldList() != null) {
+ for (Iterator iterC = reportRuntime.getFormFieldList().getFormField().iterator(); iterC.hasNext();) {
+ FormFieldType fft = (FormFieldType) iterC.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = reportRuntime.getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ if(AppUtils.nvl(fieldDisplay).equals(colName)) {
+ formfield_value = AppUtils.getRequestNvlValue(request, fieldId);
+ paramValue = nvl(formfield_value);
+ }
+ }
+
+ }
+
+ seriesCol.append("," + (AppUtils.nvl(paramValue).length()>0? paramValue:"null") + " " + dc.getColId());
+ } else {
+ //valueCols.append(", NVL(" + formatChartColumn(colName) + ",0) " + dc.getColId());
+ seriesCol.append("," + (AppUtils.nvl(paramValue).length()>0? paramValue:formatChartColumn(colName)) + " " + dc.getColId());
+ }
+ } // for
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = dc.getDisplayName();
+ String colValue = getColumnSelectStr(dc, request);
+ //String colName = getColumnSelectStr(dc, formGrid);
+ if(colName.equals(AppConstants.RI_CHART_TOTAL_COL))
+ seriesCol.append(", " + AppConstants.RI_CHART_TOTAL_COL + " " + AppConstants.RI_CHART_TOTAL_COL );
+ if (colName.equals(AppConstants.RI_CHART_COLOR))
+ seriesCol.append(", " + colValue + " " + AppConstants.RI_CHART_COLOR );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_START))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_START + " " + AppConstants.RI_CHART_MARKER_START );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_END))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_END + " " + AppConstants.RI_CHART_MARKER_END );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_TEXT_LEFT))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_TEXT_LEFT + " " + AppConstants.RI_CHART_MARKER_TEXT_LEFT );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_TEXT_RIGHT))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_TEXT_RIGHT + " " + AppConstants.RI_CHART_MARKER_TEXT_RIGHT );
+ //if(colName.equals(AppConstants.RI_ANOMALY_TEXT))
+ //seriesCol.append(", " + AppConstants.RI_ANOMALY_TEXT + " " + AppConstants.RI_ANOMALY_TEXT );
+ }
+
+ //debugLogger.debug("ReportSQL Chart " + reportSQL );
+ /*for (Iterator iter = chartValueCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //valueCols.append(", NVL(" + formatChartColumn(colName) + ",0) " + dc.getColId());
+ valueCols.append("," + formatChartColumn(colName) + " " + dc.getColId());
+ } // for
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //if(colName.equals(AppConstants.RI_CHART_TOTAL_COL) || colName.equals(AppConstants.RI_CHART_COLOR)) {
+ if(colName.equals(AppConstants.RI_CHART_TOTAL_COL))
+ valueCols.append(", " + AppConstants.RI_CHART_TOTAL_COL + " " + AppConstants.RI_CHART_TOTAL_COL );
+ if (colName.equals(AppConstants.RI_CHART_COLOR))
+ valueCols.append(", " + AppConstants.RI_CHART_COLOR + " " + AppConstants.RI_CHART_COLOR );
+ if (colName.equals(AppConstants.RI_CHART_INCLUDE))
+ valueCols.append(", " + AppConstants.RI_CHART_INCLUDE + " " + AppConstants.RI_CHART_INCLUDE );
+ //}
+ }*/
+ String final_sql = "";
+ reportSQL = Utils.replaceInString(reportSQL, " from ", " FROM ");
+ reportSQL = Utils.replaceInString(reportSQL, " From ", " FROM ");
+ reportSQL = Utils.replaceInString(reportSQL, " select ", " SELECT ");
+ reportSQL = Utils.replaceInString(reportSQL, " union ", " UNION ");
+ //reportSQL = reportSQL.replaceAll("[\\s]*\\(", "(");
+// if(reportSQL.indexOf("UNION") != -1) {
+// if(reportSQL.indexOf("FROM(")!=-1)
+// final_sql += " "+reportSQL.substring(reportSQL.indexOf("FROM(") );
+// else if (reportSQL.indexOf("FROM (")!=-1)
+// final_sql += " "+reportSQL.substring(reportSQL.indexOf("FROM (") );
+// //TODO ELSE THROW ERROR
+// }
+// else {
+// final_sql += " "+reportSQL.substring(reportSQL.toUpperCase().indexOf(" FROM "));
+// }
+ int pos = 0;
+ int pos_first_select = 0;
+ int pos_dup_select = 0;
+ int pos_prev_select = 0;
+ int pos_last_select = 0;
+ if (reportSQL.indexOf("FROM", pos)!=-1) {
+ pos = reportSQL.indexOf("FROM", pos);
+ pos_dup_select = reportSQL.lastIndexOf("SELECT",pos);
+ pos_first_select = reportSQL.indexOf("SELECT");//,pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_select " + pos_first_select + " " + pos_dup_select));
+ if(pos_dup_select > pos_first_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********pos_dup_select ********" + pos_dup_select));
+ //pos_dup_select1 = pos_dup_select;
+ pos_prev_select = pos_first_select;
+ pos_last_select = pos_dup_select;
+ while (pos_last_select > pos_prev_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_last , pos_prev " + pos_last_select + " " + pos_prev_select));
+ pos = reportSQL.indexOf("FROM", pos+2);
+ pos_prev_select = pos_last_select;
+ pos_last_select = reportSQL.lastIndexOf("SELECT",pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("in WHILE LOOP LAST " + pos_last_select));
+ }
+ }
+
+ }
+ final_sql += " "+reportSQL.substring(pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Final SQL " + final_sql));
+ String sql = "SELECT " + legendCol + ", " + legendCol+"_1" + seriesCol.toString()+ nvl(valueCols.toString(), ", 1")
+ + groupCol.toString()
+ + final_sql;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Final sql in generateChartSQL " +sql));
+
+ return sql;
+ } // generateChartSQL
+
+ private String getColumnSelectStr(DataColumnType dc, HttpServletRequest request) {
+ //String colName = dc.isCalculated() ? dc.getColName()
+ // : ((nvl(dc.getTableId()).length() > 0) ? (dc.getTableId() + "." + dc
+ // .getColName()) : dc.getColName());
+ String colName = dc.getColName();
+ String paramValue = null;
+ //if (dc.isCalculated()) {
+ if (reportRuntime.getFormFieldList() != null) {
+ for (Iterator iter = reportRuntime.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = reportRuntime.getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ formfield_value = AppUtils.getRequestNvlValue(request, fieldId);
+ paramValue = nvl(formfield_value);
+ if(paramValue.length()>0) {
+ /*sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));*/
+ colName = Utils.replaceInString(colName, "'" + fieldDisplay + "'", "'"+nvl(
+ paramValue, "NULL")+"'");
+ colName = Utils.replaceInString(colName, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ }
+ return colName;
+ }
+ //}
+ return colName;
+ } // getColumnSelectStr
+
+
+
+ public String getSelectExpr(DataColumnType dct) {
+ // String colName =
+ // dct.isCalculated()?dct.getColName():((nvl(dct.getTableId()).length()>0)?(dct.getTableId()+"."+dct.getColName()):dct.getColName());
+ return getSelectExpr(dct, dct.getColName() /* colName */);
+ } // getSelectExpr
+
+ private String getSelectExpr(DataColumnType dct, String colName) {
+ String colType = dct.getColType();
+ if (colType.equals(AppConstants.CT_CHAR)
+ || ((nvl(dct.getColFormat()).length() == 0) && (!colType
+ .equals(AppConstants.CT_DATE))))
+ return colName;
+ else
+ return "DATE_FORMAT(" + colName + ", '"
+ + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT) + "')";
+ } // getSelectExpr
+
+ private String formatChartColumn(String colName) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Format Chart Column Input colName " + colName));
+ colName = colName.trim();
+ colName = Utils.replaceInString(colName, "TO_CHAR", "to_char");
+ colName = Utils.replaceInString(colName, "to_number", "TO_NUMBER");
+ //reportSQL = reportSQL.replaceAll("[\\s]*\\(", "(");
+ colName = colName.replaceAll(",[\\s]*\\(", ",(");
+ StringBuffer colNameBuf = new StringBuffer(colName);
+ int pos = 0, posFormatStart = 0, posFormatEnd = 0;
+ String format = "";
+
+ if(colNameBuf.indexOf("999")==-1 && colNameBuf.indexOf("990")==-1) {
+ logger.debug(EELFLoggerDelegate.debugLogger, (" return colName " + colNameBuf.toString()));
+ return colNameBuf.toString();
+ }
+
+ while (colNameBuf.indexOf("to_char")!=-1) {
+ if(colNameBuf.indexOf("999")!=-1 || colNameBuf.indexOf("990")!=-1) {
+ pos = colNameBuf.indexOf("to_char");
+ colNameBuf.insert(pos, " TO_NUMBER ( CR_RAPTOR.SAFE_TO_NUMBER (");
+ pos = colNameBuf.indexOf("to_char");
+ colNameBuf.replace(pos, pos+7, "TO_CHAR");
+ //colName = Utils.replaceInString(colNameBuf.toString(), "to_char", " TO_NUMBER ( CR_RAPTOR.SAFE_TO_NUMBER ( TO_CHAR ");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("After adding to_number " + colNameBuf.toString()));
+ //posFormatStart = colNameBuf.lastIndexOf(",'")+1;
+ posFormatStart = colNameBuf.indexOf(",'", pos)+1;
+ posFormatEnd = colNameBuf.indexOf(")",posFormatStart);
+ logger.debug(EELFLoggerDelegate.debugLogger, (posFormatStart + " " + posFormatEnd + " "+ pos));
+ format = colNameBuf.substring(posFormatStart, posFormatEnd);
+ //posFormatEnd = colNameBuf.indexOf(")",posFormatEnd);
+ colNameBuf.insert(posFormatEnd+1, " ," + format + ") , "+ format + ")");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("colNameBuf " + colNameBuf.toString()));
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, (" return colName " + colNameBuf.toString()));
+ return colNameBuf.toString();
+ }
+
+ public List getChartValueColumnsList( int filter, HashMap formValues) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = reportRuntime.getAllColumns();
+
+ ArrayList chartValueCols = new ArrayList();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = reportRuntime.getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0 && !(nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ }
+ else if(filter == 0) chartValueCols.add(dc);
+ } else chartValueCols.add(dc);
+ }
+// } else
+// chartValueCols.add(dc);
+ } // for
+ Collections.sort(chartValueCols, new ChartSeqComparator());
+ return chartValueCols;
+ } // getChartValueColumnsList
+
+ public String parseTitle(String title, HashMap formValues) {
+ Set set = formValues.entrySet();
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry<String,String>) iter.next();
+ if(title.indexOf("["+ entry.getKey() + "]")!= -1) {
+ title = Utils.replaceInString(title, "["+entry.getKey()+"]", nvl(
+ (String) entry.getValue(), ""));
+ }
+ }
+ return title;
+ }
+
+ public java.util.Date getDateFromDateStr(String dateStr) {
+ SimpleDateFormat MMDDYYYYFormat = new SimpleDateFormat("MM/dd/yyyy");
+ SimpleDateFormat EEEMMDDYYYYFormat = new SimpleDateFormat("EEE, MM/dd/yyyy"); //2012-11-01 00:00:00
+ SimpleDateFormat YYYYMMDDFormat = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat MONYYYYFormat = new SimpleDateFormat("MMM yyyy");
+ SimpleDateFormat MMYYYYFormat = new SimpleDateFormat("MM/yyyy");
+ SimpleDateFormat MMMMMDDYYYYFormat = new SimpleDateFormat("MMMMM dd, yyyy");
+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat timestampHrFormat = new SimpleDateFormat("yyyy-MM-dd HH");
+ SimpleDateFormat timestampDayFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat DDMONYYYYFormat = new SimpleDateFormat("dd-MMM-yyyy");
+ SimpleDateFormat MONTHYYYYFormat = new SimpleDateFormat("MMMMM, yyyy");
+ SimpleDateFormat MMDDYYYYHHFormat = new SimpleDateFormat("MM/dd/yyyy HH");
+ SimpleDateFormat MMDDYYYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
+ SimpleDateFormat YYYYMMDDHHMMSSFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ SimpleDateFormat YYYYMMDDHHMMFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+ SimpleDateFormat DDMONYYYYHHMMSSFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+ SimpleDateFormat DDMONYYYYHHMMFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
+ SimpleDateFormat MMDDYYFormat = new SimpleDateFormat("MM/dd/yy");
+ SimpleDateFormat MMDDYYHHMMFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
+ SimpleDateFormat MMDDYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
+ SimpleDateFormat timestampFormat1 = new SimpleDateFormat("yyyy-M-d.HH.mm. s. S");
+ SimpleDateFormat timestamp_W_dash = new SimpleDateFormat("yyyyMMddHHmmss");
+ SimpleDateFormat MMDDYYYYHHMMZFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
+ SimpleDateFormat YYYYFormat = new SimpleDateFormat("yyyy");
+ java.util.Date date = null;
+
+ int formatFlag = 0;
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+ /*int yearFlag = 1;
+ int monthFlag = 2;
+ int dayFlag = 3;
+ int hourFlag = 4;
+ int minFlag = 5;
+ int secFlag = 6;
+ int milliSecFlag = 7;
+ int dayoftheweekFlag = 8;
+ int flagDate = 10;
+ */
+
+ date = MMDDYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ if(date==null) {
+ date = EEEMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYOFTHEWEEKFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+ if(date==null) {
+ //MMDDYYYYHHFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ date = MMDDYYYYHHFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = YYYYMMDDFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = timestampFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+ if(date==null) {
+ date = timestampHrFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = timestampDayFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = MONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMMMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = MONTHYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = timestampFormat1.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYYYHHMMZFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYFormat.parse(dateStr, new ParsePosition(0));
+ /* Some random numbers should not satisfy this year format. */
+ if(dateStr.length()>4) date = null;
+ if(date!=null) formatFlag = YEARFLAG;
+ }
+ if(date==null) {
+ date = timestamp_W_dash.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+ if(date==null)
+ date = null;
+ return date;
+ }
+
+ public int getFlagFromDateStr(String dateStr) {
+ SimpleDateFormat MMDDYYYYFormat = new SimpleDateFormat("MM/dd/yyyy");
+ SimpleDateFormat EEEMMDDYYYYFormat = new SimpleDateFormat("EEE, MM/dd/yyyy"); //2012-11-01 00:00:00
+ SimpleDateFormat YYYYMMDDFormat = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat MONYYYYFormat = new SimpleDateFormat("MMM yyyy");
+ SimpleDateFormat MMYYYYFormat = new SimpleDateFormat("MM/yyyy");
+ SimpleDateFormat MMMMMDDYYYYFormat = new SimpleDateFormat("MMMMM dd, yyyy");
+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat timestampHrFormat = new SimpleDateFormat("yyyy-MM-dd HH");
+ SimpleDateFormat timestampDayFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat DDMONYYYYFormat = new SimpleDateFormat("dd-MMM-yyyy");
+ SimpleDateFormat MONTHYYYYFormat = new SimpleDateFormat("MMMMM, yyyy");
+ SimpleDateFormat MMDDYYYYHHFormat = new SimpleDateFormat("MM/dd/yyyy HH");
+ SimpleDateFormat MMDDYYYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
+ SimpleDateFormat YYYYMMDDHHMMSSFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ SimpleDateFormat YYYYMMDDHHMMFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+ SimpleDateFormat DDMONYYYYHHMMSSFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+ SimpleDateFormat DDMONYYYYHHMMFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
+ SimpleDateFormat MMDDYYFormat = new SimpleDateFormat("MM/dd/yy");
+ SimpleDateFormat MMDDYYHHMMFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
+ SimpleDateFormat MMDDYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
+ SimpleDateFormat timestampFormat1 = new SimpleDateFormat("yyyy-M-d.HH.mm. s. S");
+ SimpleDateFormat timestamp_W_dash = new SimpleDateFormat("yyyyMMddHHmmss");
+ SimpleDateFormat MMDDYYYYHHMMZFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
+ SimpleDateFormat YYYYFormat = new SimpleDateFormat("yyyy");
+ java.util.Date date = null;
+
+ int formatFlag = 0;
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+ /*int yearFlag = 1;
+ int monthFlag = 2;
+ int dayFlag = 3;
+ int hourFlag = 4;
+ int minFlag = 5;
+ int secFlag = 6;
+ int milliSecFlag = 7;
+ int dayoftheweekFlag = 8;
+ int flagDate = 10;
+ */
+
+ date = MMDDYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ if(date==null) {
+ date = EEEMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYOFTHEWEEKFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+ if(date==null) {
+ //MMDDYYYYHHFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ date = MMDDYYYYHHFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = YYYYMMDDFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = timestampFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+ if(date==null) {
+ date = timestampHrFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = timestampDayFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = MONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMMMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = MONTHYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = timestampFormat1.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYYYHHMMZFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYFormat.parse(dateStr, new ParsePosition(0));
+ /* Some random numbers should not satisfy this year format. */
+ if(dateStr.length()>4) date = null;
+ if(date!=null) formatFlag = YEARFLAG;
+ }
+ if(date==null) {
+ date = timestamp_W_dash.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+ if(date==null)
+ date = null;
+ return formatFlag;
+ }
+
+ public static String[] reverse(String[] arr) {
+ List<String> list = Arrays.asList(arr);
+ Collections.reverse(list);
+ return (String[])list.toArray();
+ }
+
+ public int getNumberOfDecimalPlaces(double num) {
+ Double d = num;
+ String[] splitter = d.toString().split("\\.");
+ splitter[0].length(); // Before Decimal Count
+ splitter[1].length(); // After Decimal Count
+ return splitter[1].length();
+ }
+
+ public boolean getBooleanValue(String s) {
+ return getBooleanValue(s,null);
+ }
+
+ public boolean getBooleanValue(String s, Boolean defaultValue) {
+ s = nvl(s);
+ if(s.length()<=0 && defaultValue!=null) return defaultValue.booleanValue();
+ else if(s.length()<=0) return false;
+ else {
+ if(s.toUpperCase().startsWith("Y") || s.toLowerCase().equals("true"))
+ return true;
+ else
+ return false;
+ }
+ }
+
+
+ public String IntToLetter(int Int) {
+ if (Int<27){
+ return Character.toString((char)(Int+96));
+ } else {
+ if (Int%26==0) {
+ return IntToLetter((Int/26)-1)+IntToLetter((Int%26)+1);
+ } else {
+ return IntToLetter(Int/26)+IntToLetter(Int%26);
+ }
+ }
+ }
+
+
+
+
+ private void clearReportRuntimeBackup(HttpServletRequest request) {
+ //Session sess = Sessions.getCurrent(true)getCurrent();
+ //HttpSession session = (HttpSession)sess.getNativeSession();
+ HttpSession session = request.getSession();
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ request.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ request.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ Enumeration<String> enum1 = session.getAttributeNames();
+ String attributeName = "";
+ while(enum1.hasMoreElements()) {
+ attributeName = enum1.nextElement();
+ if(attributeName.startsWith("parent_")) {
+ session.removeAttribute(attributeName);
+ }
+ }
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
+ session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
+ session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP);
+ session.removeAttribute(AppConstants.SI_MAP);
+ session.removeAttribute(AppConstants.SI_MAP_OBJECT);
+ session.removeAttribute(AppConstants.SI_REPORT_DEFINITION);
+ session.removeAttribute(AppConstants.SI_REPORT_RUNTIME);
+ session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
+ session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
+ session.removeAttribute(AppConstants.RI_REPORT_DATA);
+ session.removeAttribute(AppConstants.RI_CHART_DATA);
+ session.removeAttribute(AppConstants.SI_FORMFIELD_INFO);
+ session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+
+ } // clearReportRuntimeBackup
+
+
+ public static synchronized java.util.HashMap getRequestParametersMap(ReportRuntime rr, HttpServletRequest request)
+ {
+ HashMap valuesMap = new HashMap();
+
+ ReportFormFields rff = rr.getReportFormFields();
+
+ int idx = 0;
+ FormField ff = null;
+
+ Map fieldNameMap = new HashMap();
+ int countOfFields = 0 ;
+
+
+ for(rff.resetNext(); rff.hasNext(); idx++) {
+ ff = rff.getNext();
+ fieldNameMap.put(ff.getFieldName(), ff.getFieldDisplayName());
+ countOfFields++;
+ }
+
+ List formParameter = new ArrayList();
+ String formField = "";
+ for(int i = 0 ; i < rff.size(); i++) {
+ ff = ((FormField)rff.getFormField(i));
+ formField = ff.getFieldName();
+ boolean isMultiValue = false;
+ isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
+ boolean isTextArea = (ff.getFieldType().equals(FormField.FFT_TEXTAREA) && rr.getReportDefType()
+ .equals(AppConstants.RD_SQL_BASED));
+
+ if(request.getParameterValues(formField) != null && isMultiValue ) {
+ String[] vals = request.getParameterValues(formField);
+ StringBuffer value = new StringBuffer("");
+ if(!AppUtils.getRequestFlag(request, AppConstants.RI_RESET_ACTION)) {
+
+ if ( isMultiValue ) {
+ value.append("(");
+ }
+ for(int j = 0 ; j < vals.length; j++) {
+ if(isMultiValue) value.append("'");
+ try {
+ if(vals[j] !=null && vals[j].length() > 0) {
+ vals[j] = Utils.oracleSafe(vals[j]);
+ value.append(java.net.URLDecoder.decode(vals[j], "UTF-8"));// + ",";
+ }
+ else
+ value.append(vals[j]);
+ } catch (UnsupportedEncodingException ex) {value.append(vals[j]);}
+ catch (IllegalArgumentException ex1){value.append(vals[j]);}
+ catch (Exception ex2){
+ value.append(vals[j]);
+ }
+
+
+ if(isMultiValue) value.append("'");
+
+ if(j != vals.length -1) {
+ value.append(",");
+ }
+ }
+ if(vals.length > 0) {
+ value.append(")");
+ }
+ }
+
+ //value = value.substring(0 , value.length());
+
+ valuesMap.put(fieldNameMap.get(formField), value.toString());
+ value = new StringBuffer("");
+ } else if(request.getParameter(formField) != null) {
+ if(isTextArea) {
+ String value = "";
+ value = request.getParameter(formField);
+
+ value = Utils.oracleSafe(value);
+ value = "('" + Utils.replaceInString(value, ",", "'|'") + "')";
+ value = Utils.replaceInString(value, "|", ",");
+ valuesMap.put(fieldNameMap.get(formField), value);
+ value = "";
+ } else {
+ String value = "";
+ if(!AppUtils.getRequestFlag(request, AppConstants.RI_RESET_ACTION))
+ value = request.getParameter(formField);
+ valuesMap.put(fieldNameMap.get(formField), Utils.oracleSafe(value));
+ }
+
+ } else {
+ valuesMap.put(fieldNameMap.get(formField), "" );
+ }
+
+ }
+
+ return valuesMap;
+
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartGen.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartGen.java
new file mode 100644
index 00000000..c395000e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartGen.java
@@ -0,0 +1,73 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.io.PrintWriter;
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.List;
+
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Log;
+
+public class ChartGen extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ public static String generateChart(String chartType, HttpSession session, DataSet ds,
+ String xText, String yLabelLeftAxis, String yLabelRightAxis, List yTextSeries,
+ List yTextColor, List yTextSeriesAxis, String groupText, String chartTitle,
+ PrintWriter pw,List columnValuesList, boolean hasCategoryAxis, boolean isMultiSeries,
+ List allColumnsList, String downloadFileName, boolean totalOnlyChart, int deviceType, HashMap additionalChartOptionsMap) {
+ return generateChart(chartType, session, ds, xText, yLabelLeftAxis, yLabelRightAxis,
+ yTextSeries, yTextColor, yTextSeriesAxis, groupText, chartTitle, pw, Globals
+ .getDefaultChartWidth(), Globals.getDefaultChartHeight(), columnValuesList, hasCategoryAxis, isMultiSeries, allColumnsList, downloadFileName,totalOnlyChart, deviceType, additionalChartOptionsMap);
+ } // generateChart
+
+ public static String generateChart(String chartType, HttpSession session, DataSet ds,
+ String xText, String yLabelLeftAxis, String yLabelRightAxis, List yTextSeries,
+ List yTextColor, List yTextSeriesAxis, String groupText, String chartTitle,
+ PrintWriter pw, int width, int height, List columnValuesList, boolean hasCategoryAxis, boolean isMultiSeries,
+ List allColumnsList, String downloadFileName,boolean totalOnlyChart, int deviceType, HashMap additionalChartOptionsMap) {
+ try {
+ Class chartGenClass = null;
+
+
+ Class[] argumentTypes = { String.class, HttpSession.class, DataSet.class,
+ String.class, String.class, String.class, List.class, List.class,
+ List.class, String.class, String.class, PrintWriter.class, int.class,
+ int.class, List.class, boolean.class, boolean.class, List.class,
+ String.class, boolean.class, int.class, HashMap.class };
+
+ Method method = chartGenClass.getMethod("generateChart", argumentTypes);
+ Object[] arguments = { chartType, session, ds, xText, yLabelLeftAxis,
+ yLabelRightAxis, yTextSeries, yTextColor, yTextSeriesAxis, groupText,
+ chartTitle, pw, new Integer(width), new Integer(height), columnValuesList, new Boolean(hasCategoryAxis), new Boolean(isMultiSeries), allColumnsList, downloadFileName, new Boolean(totalOnlyChart), new Integer(deviceType), additionalChartOptionsMap };
+
+ return (String) method.invoke(chartGenClass, arguments);
+ } catch (Exception e) {
+ e.printStackTrace();
+ Log.write("ERROR [ChartGen.generateChart] " + e.getMessage());
+ return null;
+ }
+ } // generateChart
+
+} // ChartGen
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java
new file mode 100644
index 00000000..85f8dc8a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java
@@ -0,0 +1,448 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.ArrayList;
+
+class Row {
+ private String displayValue;
+ private String dataType;
+ private String colId;
+ //private boolean visible;
+
+
+ /*public boolean isVisible() {
+ return visible;
+ }
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }*/
+ public String getDisplayValue() {
+ return displayValue;
+ }
+ public void setDisplayValue(String displayValue) {
+ this.displayValue = displayValue;
+ }
+ public String getDataType() {
+ return dataType;
+ }
+ public void setDataType(String dataType) {
+ this.dataType = dataType;
+ }
+ public String getColId() {
+ return colId;
+ }
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+
+}
+class IndexValueJSON {
+ private int index;
+ private String value;
+ private String title;
+ public int getIndex() {
+ return index;
+ }
+ public void setIndex(int index) {
+ this.index = index;
+ }
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+ public String getTitle() {
+ return title;
+ }
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+}
+
+class DomainAxisJSON extends IndexValueJSON {}
+
+class ChartColumnJSON extends IndexValueJSON {}
+
+class ChartTypeJSON extends IndexValueJSON {}
+
+class PieChartOptions {
+
+}
+
+public class ChartJSON {
+
+ private String reportID;
+ private String reportName;
+ private String reportDescr;
+ private String reportTitle;
+ private String reportSubTitle;
+ private ArrayList <FormFieldJSON> formFieldList;
+ private ArrayList <ChartColumnJSON> chartColumnJSONList;
+ private String formfield_comments;
+ private int totalRows;
+ private String chartSqlWhole;
+ private boolean chartAvailable;
+ private ChartTypeJSON chartTypeJSON;
+ private BarChartOptions barChartOptions;
+ private PieChartOptions pieChartOptions;
+ private TimeSeriesChartOptions timeSeriesChartOptions;
+ private FlexTimeSeriesChartOptions flexTimeSeriesChartOptions;
+ private CommonChartOptions commonChartOptions;
+ private String width;
+ private String height;
+ private boolean animation;
+ private String rotateLabels;
+ private boolean staggerLabels;
+ private boolean showTitle;
+ private DomainAxisJSON domainAxisJSON;
+ private CategoryAxisJSON categoryAxisJSON;
+ private boolean hasCategoryAxis;
+
+
+ public boolean isHasCategoryAxis() {
+ return hasCategoryAxis;
+ }
+ public void setHasCategoryAxis(boolean hasCategoryAxis) {
+ this.hasCategoryAxis = hasCategoryAxis;
+ }
+ private ArrayList <RangeAxisJSON> rangeAxisList;
+ private ArrayList <ArrayList<Row>> wholeList;
+
+ private String primaryAxisLabel;
+ private String secondaryAxisLabel;
+ private String minRange;
+ private String maxRange;
+ //private int topMargin;
+ //private int bottomMargin;
+ //private int leftMargin;
+ //private int rightMargin;
+
+ /*private boolean showMaxMin;
+ private boolean showLegend;
+ private boolean showControls;
+ private String topMargin;
+ private String bottomMargin;
+ private String leftMargin;
+ private String rightMargin;
+ private String subType;
+ private boolean stacked;
+ private boolean horizontalBar;
+ private boolean barRealTimeAxis;
+ private boolean barReduceXAxisLabels;
+ private boolean timeAxis;*/
+
+ public String getReportID() {
+ return reportID;
+ }
+ public void setReportID(String reportID) {
+ this.reportID = reportID;
+ }
+ public String getReportName() {
+ return reportName;
+ }
+ public void setReportName(String reportName) {
+ this.reportName = reportName;
+ }
+ public String getReportDescr() {
+ return reportDescr;
+ }
+ public void setReportDescr(String reportDescr) {
+ this.reportDescr = reportDescr;
+ }
+ public String getReportTitle() {
+ return reportTitle;
+ }
+ public void setReportTitle(String reportTitle) {
+ this.reportTitle = reportTitle;
+ }
+ public String getReportSubTitle() {
+ return reportSubTitle;
+ }
+ public void setReportSubTitle(String reportSubTitle) {
+ this.reportSubTitle = reportSubTitle;
+ }
+ public ArrayList<FormFieldJSON> getFormFieldList() {
+ return formFieldList;
+ }
+ public void setFormFieldList(ArrayList<FormFieldJSON> formFieldList) {
+ this.formFieldList = formFieldList;
+ }
+ public String getFormfield_comments() {
+ return formfield_comments;
+ }
+ public void setFormfield_comments(String formfield_comments) {
+ this.formfield_comments = formfield_comments;
+ }
+ public int getTotalRows() {
+ return totalRows;
+ }
+ public void setTotalRows(int totalRows) {
+ this.totalRows = totalRows;
+ }
+ public String getChartSqlWhole() {
+ return chartSqlWhole;
+ }
+ public void setChartSqlWhole(String chartSqlWhole) {
+ this.chartSqlWhole = chartSqlWhole;
+ }
+ public boolean isChartAvailable() {
+ return chartAvailable;
+ }
+ public void setChartAvailable(boolean chartAvailable) {
+ this.chartAvailable = chartAvailable;
+ }
+ public String getWidth() {
+ return width;
+ }
+ public void setWidth(String width) {
+ this.width = width;
+ }
+ public String getHeight() {
+ return height;
+ }
+ public void setHeight(String height) {
+ this.height = height;
+ }
+ public boolean isAnimation() {
+ return animation;
+ }
+ public void setAnimation(boolean animation) {
+ this.animation = animation;
+ }
+ public String getRotateLabels() {
+ return rotateLabels;
+ }
+ public void setRotateLabels(String rotateLabels) {
+ this.rotateLabels = rotateLabels;
+ }
+ public boolean isStaggerLabels() {
+ return staggerLabels;
+ }
+ public void setStaggerLabels(boolean staggerLabels) {
+ this.staggerLabels = staggerLabels;
+ }
+ public boolean isShowTitle() {
+ return showTitle;
+ }
+ public void setShowTitle(boolean showTitle) {
+ this.showTitle = showTitle;
+ }
+ /*public boolean isShowMaxMin() {
+ return showMaxMin;
+ }
+ public void setShowMaxMin(boolean showMaxMin) {
+ this.showMaxMin = showMaxMin;
+ }
+ public boolean isShowLegend() {
+ return showLegend;
+ }
+ public void setShowLegend(boolean showLegend) {
+ this.showLegend = showLegend;
+ }
+ public boolean isShowControls() {
+ return showControls;
+ }
+ public void setShowControls(boolean showControls) {
+ this.showControls = showControls;
+ }
+ public String getTopMargin() {
+ return topMargin;
+ }
+ public void setTopMargin(String topMargin) {
+ this.topMargin = topMargin;
+ }
+ public String getBottomMargin() {
+ return bottomMargin;
+ }
+ public void setBottomMargin(String bottomMargin) {
+ this.bottomMargin = bottomMargin;
+ }
+ public String getLeftMargin() {
+ return leftMargin;
+ }
+ public void setLeftMargin(String leftMargin) {
+ this.leftMargin = leftMargin;
+ }
+ public String getRightMargin() {
+ return rightMargin;
+ }
+ public void setRightMargin(String rightMargin) {
+ this.rightMargin = rightMargin;
+ }
+
+ public String getSubType() {
+ return subType;
+ }
+ public void setSubType(String subType) {
+ this.subType = subType;
+ }
+ public boolean isStacked() {
+ return stacked;
+ }
+ public void setStacked(boolean stacked) {
+ this.stacked = stacked;
+ }
+ public boolean isHorizontalBar() {
+ return horizontalBar;
+ }
+ public void setHorizontalBar(boolean horizontalBar) {
+ this.horizontalBar = horizontalBar;
+ }
+ public boolean isBarRealTimeAxis() {
+ return barRealTimeAxis;
+ }
+ public void setBarRealTimeAxis(boolean barRealTimeAxis) {
+ this.barRealTimeAxis = barRealTimeAxis;
+ }
+ public boolean isBarReduceXAxisLabels() {
+ return barReduceXAxisLabels;
+ }
+ public void setBarReduceXAxisLabels(boolean barReduceXAxisLabels) {
+ this.barReduceXAxisLabels = barReduceXAxisLabels;
+ }
+ public boolean isTimeAxis() {
+ return timeAxis;
+ }
+ public void setTimeAxis(boolean timeAxis) {
+ this.timeAxis = timeAxis;
+ }*/
+ public ChartTypeJSON getChartTypeJSON() {
+ return chartTypeJSON;
+ }
+ public void setChartTypeJSON(ChartTypeJSON chartTypeJSON) {
+ this.chartTypeJSON = chartTypeJSON;
+ }
+ public String getChartType() {
+ return chartTypeJSON.getValue();
+ }
+ public DomainAxisJSON getDomainAxisJSON() {
+ return domainAxisJSON;
+ }
+ public void setDomainAxisJSON(DomainAxisJSON domainAxisJSON) {
+ this.domainAxisJSON = domainAxisJSON;
+ }
+ public CategoryAxisJSON getCategoryAxisJSON() {
+ return categoryAxisJSON;
+ }
+ public void setCategoryAxisJSON(CategoryAxisJSON categoryAxisJSON) {
+ this.categoryAxisJSON = categoryAxisJSON;
+ }
+ public ArrayList<RangeAxisJSON> getRangeAxisList() {
+ return rangeAxisList;
+ }
+ public void setRangeAxisList(ArrayList<RangeAxisJSON> rangeAxisList) {
+ this.rangeAxisList = rangeAxisList;
+ }
+ public String getPrimaryAxisLabel() {
+ return primaryAxisLabel;
+ }
+ public void setPrimaryAxisLabel(String primaryAxisLabel) {
+ this.primaryAxisLabel = primaryAxisLabel;
+ }
+ public String getSecondaryAxisLabel() {
+ return secondaryAxisLabel;
+ }
+ public void setSecondaryAxisLabel(String secondaryAxisLabel) {
+ this.secondaryAxisLabel = secondaryAxisLabel;
+ }
+ public String getMinRange() {
+ return minRange;
+ }
+ public void setMinRange(String minRange) {
+ this.minRange = minRange;
+ }
+ public String getMaxRange() {
+ return maxRange;
+ }
+ public void setMaxRange(String maxRange) {
+ this.maxRange = maxRange;
+ }
+ /*public ArrayList<Row> getRowList() {
+ return rowList;
+ }
+ public void setRowList(ArrayList<Row> rowList) {
+ this.rowList = rowList;
+ }*/
+
+ public ArrayList<ArrayList<Row>> getWholeList() {
+ return wholeList;
+ }
+ public void setWholeList(ArrayList<ArrayList<Row>> wholeList) {
+ this.wholeList = wholeList;
+ }
+ //private ArrayList<ColumnHeader> reportDataColumns;
+ //private ArrayList<Map<String,Object>> reportDataRows;
+ public ArrayList<ChartColumnJSON> getChartColumnJSONList() {
+ return chartColumnJSONList;
+ }
+ public void setChartColumnJSONList(ArrayList<ChartColumnJSON> chartColumnJSONList) {
+ this.chartColumnJSONList = chartColumnJSONList;
+ }
+
+ public BarChartOptions getBarChartOptions() {
+ return barChartOptions;
+ }
+ public void setBarChartOptions(BarChartOptions barChartOptions) {
+ this.barChartOptions = barChartOptions;
+ }
+ public PieChartOptions getPieChartOptions() {
+ return pieChartOptions;
+ }
+ public void setPieChartOptions(PieChartOptions pieChartOptions) {
+ this.pieChartOptions = pieChartOptions;
+ }
+ public TimeSeriesChartOptions getTimeSeriesChartOptions() {
+ return timeSeriesChartOptions;
+ }
+ public void setTimeSeriesChartOptions(TimeSeriesChartOptions timeSeriesChartOptions) {
+ this.timeSeriesChartOptions = timeSeriesChartOptions;
+ }
+ public FlexTimeSeriesChartOptions getFlexTimeSeriesChartOptions() {
+ return flexTimeSeriesChartOptions;
+ }
+ public void setFlexTimeSeriesChartOptions(FlexTimeSeriesChartOptions flexTimeSeriesChartOptions) {
+ this.flexTimeSeriesChartOptions = flexTimeSeriesChartOptions;
+ }
+ public CommonChartOptions getCommonChartOptions() {
+ return commonChartOptions;
+ }
+ public void setCommonChartOptions(CommonChartOptions commonChartOptions) {
+ this.commonChartOptions = commonChartOptions;
+ }
+
+ public String getDomainAxis() {
+ if(getDomainAxisJSON() !=null)
+ return getDomainAxisJSON().getValue();
+ else
+ return "";
+ }
+
+ public String getCategoryAxis() {
+ if(getCategoryAxisJSON()!=null)
+ return getCategoryAxisJSON().getValue();
+ else
+ return "";
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSONHelper.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSONHelper.java
new file mode 100644
index 00000000..d08626c1
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSONHelper.java
@@ -0,0 +1,1550 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.io.UnsupportedEncodingException;
+import java.text.ParsePosition;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.model.base.ChartSeqComparator;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.web.support.UserUtils;
+
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+
+
+public class ChartJSONHelper {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ChartJSONHelper.class);
+
+ private ReportRuntime reportRuntime;
+ private String chartType;
+
+ public static final long HOUR = 3600*1000;
+ public static final long DAY = 3600*1000*24;
+ public static final long MONTH = 3600*1000*24*31;
+ public static final long YEAR = 3600*1000*24*365;
+
+
+ public ChartJSONHelper() {
+
+ }
+
+ /**
+ * @return the chartType
+ */
+ public String getChartType() {
+ return chartType;
+ }
+
+ /**
+ * @param chartType the chartType to set
+ */
+ public void setChartType(String chartType) {
+ this.chartType = chartType;
+ }
+
+ public ChartJSONHelper(ReportRuntime rr) {
+ this.reportRuntime = rr;
+ }
+
+ public String generateJSON(String reportID, HttpServletRequest request, boolean showData) throws RaptorException {
+ //From annotations chart
+ clearReportRuntimeBackup(request);
+
+ //HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.currentRequestAttributes()).getRequest();
+ final Long user_id = new Long((long) UserUtils.getUserId(request));
+ //String action = request.getParameter(AppConstants.RI_ACTION);
+ //String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+
+ ReportHandler rh = new ReportHandler();
+ //ReportData reportData = null;
+ HashMap<String, String> chartOptionsMap = new HashMap<String, String>();
+ try {
+ if(reportID !=null) {
+ reportRuntime = rh.loadReportRuntime(request, reportID, true, 1);
+ setChartType(reportRuntime.getChartType());
+ //reportData = reportRuntime.loadReportData(0, user_id.toString(), 10000,request, false);
+ }
+
+
+
+ String rotateLabelsStr = "";
+ rotateLabelsStr = AppUtils.nvl(reportRuntime.getLegendLabelAngle());
+ if(rotateLabelsStr.toLowerCase().equals("standard")) {
+ rotateLabelsStr = "0";
+ } else if (rotateLabelsStr.toLowerCase().equals("up45")) {
+ rotateLabelsStr = "45";
+ } else if (rotateLabelsStr.toLowerCase().equals("down45")) {
+ rotateLabelsStr = "-45";
+ } else if (rotateLabelsStr.toLowerCase().equals("up90")) {
+ rotateLabelsStr = "90";
+ } else if (rotateLabelsStr.toLowerCase().equals("down90")) {
+ rotateLabelsStr = "-90";
+ } else
+ rotateLabelsStr = "0";
+
+ String width = (AppUtils.getRequestNvlValue(request, "width").length()>0?AppUtils.getRequestNvlValue(request, "width"):(AppUtils.nvl(reportRuntime.getChartWidth()).length()>0?reportRuntime.getChartWidth():"700"));
+ String height = (AppUtils.getRequestNvlValue(request, "height").length()>0?AppUtils.getRequestNvlValue(request, "height"):(AppUtils.nvl(reportRuntime.getChartHeight()).length()>0?reportRuntime.getChartHeight():"300"));
+ String animationStr = (AppUtils.getRequestNvlValue(request, "animation").length()>0?AppUtils.getRequestNvlValue(request, "animation"):new Boolean(reportRuntime.isAnimateAnimatedChart()).toString());
+
+ String rotateLabels = (AppUtils.getRequestNvlValue(request, "rotateLabels").length()>0?AppUtils.getRequestNvlValue(request, "rotateLabels"):(rotateLabelsStr.length()>0?rotateLabelsStr:"0"));
+ String staggerLabelsStr = (AppUtils.getRequestNvlValue(request, "staggerLabels").length()>0?AppUtils.getRequestNvlValue(request, "staggerLabels"):"false");
+ String showMaxMinStr = (AppUtils.getRequestNvlValue(request, "showMaxMin").length()>0?AppUtils.getRequestNvlValue(request, "showMaxMin"):"false");
+ String showControlsStr = (AppUtils.getRequestNvlValue(request, "showControls").length()>0?AppUtils.getRequestNvlValue(request, "showControls"):new Boolean(reportRuntime.displayBarControls()).toString());
+ String showLegendStr = (AppUtils.getRequestNvlValue(request, "showLegend").length()>0?AppUtils.getRequestNvlValue(request, "showLegend"):new Boolean(!new Boolean(reportRuntime.hideChartLegend())).toString());
+ String topMarginStr = AppUtils.getRequestNvlValue(request, "topMargin");
+ String topMargin = (AppUtils.nvl(topMarginStr).length()<=0)?(reportRuntime.getTopMargin()!=null?reportRuntime.getTopMargin().toString():"30"):topMarginStr;
+ String bottomMarginStr = AppUtils.getRequestNvlValue(request, "bottomMargin");
+ String bottomMargin = (AppUtils.nvl(bottomMarginStr).length()<=0)?(reportRuntime.getBottomMargin()!=null?reportRuntime.getBottomMargin().toString():"50"):bottomMarginStr;
+ String leftMarginStr = AppUtils.getRequestNvlValue(request, "leftMargin");
+ String leftMargin = (AppUtils.nvl(leftMarginStr).length()<=0)?(reportRuntime.getLeftMargin()!=null?reportRuntime.getLeftMargin().toString():"100"):leftMarginStr;
+ String rightMarginStr = AppUtils.getRequestNvlValue(request, "rightMargin");
+ String rightMargin = (AppUtils.nvl(rightMarginStr).length()<=0)?(reportRuntime.getRightMargin()!=null?reportRuntime.getRightMargin().toString():"160"):rightMarginStr;
+ String showTitleStr = (AppUtils.getRequestNvlValue(request, "showTitle").length()>0?AppUtils.getRequestNvlValue(request, "showTitle"):new Boolean(reportRuntime.displayChartTitle()).toString());
+ String subType = AppUtils.getRequestNvlValue(request, "subType").length()>0?AppUtils.getRequestNvlValue(request, "subType"):(AppUtils.nvl(reportRuntime.getTimeSeriesRender()).equals("area")?reportRuntime.getTimeSeriesRender():"");
+ String stackedStr = AppUtils.getRequestNvlValue(request, "stacked").length()>0?AppUtils.getRequestNvlValue(request, "stacked"):new Boolean(reportRuntime.isChartStacked()).toString();
+ String horizontalBar = AppUtils.getRequestNvlValue(request, "horizontalBar").length()>0?AppUtils.getRequestNvlValue(request, "horizontalBar"):new Boolean(reportRuntime.isHorizontalOrientation()).toString();
+ String barRealTimeAxis = AppUtils.getRequestNvlValue(request, "barRealTimeAxis");
+ String barReduceXAxisLabels = AppUtils.getRequestNvlValue(request, "barReduceXAxisLabels").length()>0?AppUtils.getRequestNvlValue(request, "barReduceXAxisLabels"):new Boolean(reportRuntime.isLessXaxisTickers()).toString();;
+ String timeAxis = AppUtils.getRequestNvlValue(request, "timeAxis").length()>0?AppUtils.getRequestNvlValue(request, "timeAxis"):new Boolean(reportRuntime.isTimeAxis()).toString();
+ String logScale = AppUtils.getRequestNvlValue(request, "logScale").length()>0?AppUtils.getRequestNvlValue(request, "logScale"):new Boolean(reportRuntime.isLogScale()).toString();
+ String precision = AppUtils.getRequestNvlValue(request, "precision").length()>0?AppUtils.getRequestNvlValue(request, "precision"):"2";
+
+
+ chartOptionsMap.put("width", width);
+ chartOptionsMap.put("height", height);
+ chartOptionsMap.put("animation", animationStr);
+ chartOptionsMap.put("rotateLabels", rotateLabels);
+ chartOptionsMap.put("staggerLabels", staggerLabelsStr);
+ chartOptionsMap.put("showMaxMin", showMaxMinStr);
+ chartOptionsMap.put("showControls", showControlsStr);
+ chartOptionsMap.put("showLegend", showLegendStr);
+ chartOptionsMap.put("topMargin", topMargin);
+ chartOptionsMap.put("bottomMargin", bottomMargin);
+ chartOptionsMap.put("leftMargin", leftMargin);
+ chartOptionsMap.put("rightMargin", rightMargin);
+ chartOptionsMap.put("showTitle", showTitleStr);
+ chartOptionsMap.put("subType", subType);
+ chartOptionsMap.put("stacked", stackedStr);
+ chartOptionsMap.put("horizontalBar", horizontalBar);
+ chartOptionsMap.put("timeAxis", timeAxis);
+ chartOptionsMap.put("barRealTimeAxis", barRealTimeAxis);
+ chartOptionsMap.put("barReduceXAxisLabels", barReduceXAxisLabels);
+
+ chartOptionsMap.put("logScale", logScale);
+ chartOptionsMap.put("precision", precision);
+
+
+ } catch (RaptorException ex) {
+ ex.printStackTrace();
+ }
+ return generateJSON(reportRuntime, chartOptionsMap, request, showData);
+ }
+
+ public String generateJSON(ReportRuntime reportRuntime, HttpServletRequest request, boolean showData) throws RaptorException {
+
+ String rotateLabelsStr = "";
+ rotateLabelsStr = AppUtils.nvl(reportRuntime.getLegendLabelAngle());
+ if(rotateLabelsStr.toLowerCase().equals("standard")) {
+ rotateLabelsStr = "0";
+ } else if (rotateLabelsStr.toLowerCase().equals("up45")) {
+ rotateLabelsStr = "45";
+ } else if (rotateLabelsStr.toLowerCase().equals("down45")) {
+ rotateLabelsStr = "-45";
+ } else if (rotateLabelsStr.toLowerCase().equals("up90")) {
+ rotateLabelsStr = "90";
+ } else if (rotateLabelsStr.toLowerCase().equals("down90")) {
+ rotateLabelsStr = "-90";
+ } else
+ rotateLabelsStr = "0";
+
+ HashMap<String,String> chartOptionsMap = new HashMap<String, String>();
+ chartOptionsMap.put("width", reportRuntime.getChartWidth());
+ chartOptionsMap.put("height", reportRuntime.getChartHeight());
+ chartOptionsMap.put("animation", new Boolean(reportRuntime.isAnimateAnimatedChart()).toString());
+ chartOptionsMap.put("rotateLabels", rotateLabelsStr);
+ chartOptionsMap.put("staggerLabels", "false");
+ chartOptionsMap.put("showMaxMin", "false");
+ chartOptionsMap.put("showControls", new Boolean(reportRuntime.displayBarControls()).toString());
+ chartOptionsMap.put("showLegend", new Boolean(!reportRuntime.hideChartLegend()).toString());
+ chartOptionsMap.put("topMargin", reportRuntime.getTopMargin()!=null?reportRuntime.getTopMargin().toString():"30");
+ chartOptionsMap.put("bottomMargin", reportRuntime.getBottomMargin()!=null?reportRuntime.getBottomMargin().toString():"50");
+ chartOptionsMap.put("leftMargin", reportRuntime.getLeftMargin()!=null?reportRuntime.getLeftMargin().toString():"100");
+ chartOptionsMap.put("rightMargin", reportRuntime.getRightMargin()!=null?reportRuntime.getRightMargin().toString():"160");
+ chartOptionsMap.put("showTitle", new Boolean(reportRuntime.displayChartTitle()).toString());
+ chartOptionsMap.put("subType", (AppUtils.nvl(reportRuntime.getTimeSeriesRender()).equals("area")?reportRuntime.getTimeSeriesRender():""));
+ chartOptionsMap.put("stacked", new Boolean(reportRuntime.isChartStacked()).toString());
+ chartOptionsMap.put("horizontalBar", new Boolean(reportRuntime.isHorizontalOrientation()).toString());
+ chartOptionsMap.put("timeAxis", new Boolean(reportRuntime.isTimeAxis()).toString());
+ chartOptionsMap.put("barReduceXAxisLabels", new Boolean(reportRuntime.isLessXaxisTickers()).toString());
+
+ chartOptionsMap.put("logScale", new Boolean(reportRuntime.isLogScale()).toString());
+ chartOptionsMap.put("precision", "2");
+
+
+
+ return generateJSON(reportRuntime, chartOptionsMap, request, showData);
+ }
+
+ public String generateJSON(ReportRuntime reportRuntime, HashMap<String,String> chartOptionsMap, HttpServletRequest request, boolean showData) throws RaptorException {
+
+ //String width, String height, boolean animation, String rotateLabels, boolean staggerLabels, boolean showMaxMin, boolean showLegend, boolean showControls, String topMargin, String bottomMargin, boolean showTitle, String subType
+ String userId = AppUtils.getUserID(request);
+ String width = chartOptionsMap.get("width");
+ String height = chartOptionsMap.get("height");
+ boolean animation = getBooleanValue(chartOptionsMap.get("animation"), true);
+ String rotateLabels = chartOptionsMap.get("rotateLabels");
+ boolean staggerLabels = getBooleanValue(chartOptionsMap.get("staggerLabels"));
+ boolean showMaxMin = getBooleanValue(chartOptionsMap.get("showMaxMin"), false);
+ boolean showLegend = getBooleanValue(chartOptionsMap.get("showLegend"), true);
+ boolean showControls = getBooleanValue(chartOptionsMap.get("showControls"), true);
+ String topMargin = chartOptionsMap.get("topMargin");
+ String bottomMargin = chartOptionsMap.get("bottomMargin");
+ String leftMargin = chartOptionsMap.get("leftMargin");
+ String rightMargin = chartOptionsMap.get("rightMargin");
+ boolean showTitle = getBooleanValue(chartOptionsMap.get("showTitle"), true);
+ String subType = chartOptionsMap.get("subType");
+ boolean stacked = getBooleanValue(chartOptionsMap.get("stacked"), false);
+ boolean horizontalBar = getBooleanValue(chartOptionsMap.get("horizontalBar"), false);
+ boolean barRealTimeAxis = getBooleanValue(chartOptionsMap.get("barRealTimeAxis"), true);
+ boolean barReduceXAxisLabels= getBooleanValue(chartOptionsMap.get("barReduceXAxisLabels"), false);
+ boolean timeAxis = getBooleanValue(chartOptionsMap.get("timeAxis"), true);
+
+
+ boolean logScale = getBooleanValue(chartOptionsMap.get("logScale"), false);
+
+ int precision = 2;
+
+ try {
+ precision = Integer.parseInt(chartOptionsMap.get("precision"));
+ } catch (NumberFormatException ex) {
+
+ }
+
+ final Long user_id = new Long((long) UserUtils.getUserId(request));
+
+ HttpSession session = null;
+ session = request.getSession();
+ String chartType = reportRuntime.getChartType();
+ List l = reportRuntime.getAllColumns();
+ List lGroups = reportRuntime.getAllChartGroups();
+ HashMap mapYAxis = reportRuntime.getAllChartYAxis(reportRuntime.getReportParamValues());
+ //ReportParamValues reportParamValues = reportRuntime.getReportParamValues();
+ String chartLeftAxisLabel = reportRuntime.getFormFieldFilled(nvl(reportRuntime.getChartLeftAxisLabel()));
+ String chartRightAxisLabel = reportRuntime.getFormFieldFilled(nvl(reportRuntime.getChartRightAxisLabel()));
+
+ boolean multipleSeries = reportRuntime.isMultiSeries();
+
+ java.util.HashMap formValues = null;
+ formValues = getRequestParametersMap(reportRuntime, request);
+
+
+ String legendColumnName = (reportRuntime.getChartLegendColumn()!=null)?reportRuntime.getChartLegendColumn().getDisplayName():"Legend Column";
+ boolean displayChart = reportRuntime.getDisplayChart();
+ HashMap additionalChartOptionsMap = new HashMap();
+
+ StringBuffer wholeScript = new StringBuffer("");
+
+ String title = reportRuntime.getReportTitle();
+
+ title = parseTitle(title, formValues);
+ ObjectMapper mapper = new ObjectMapper();
+ ChartJSON chartJSON = new ChartJSON();
+ String sql = "";
+ if(displayChart) {
+ DataSet ds = null;
+ if(showData) {
+
+ try {
+ if (!(chartType.equals(AppConstants.GT_HIERARCHICAL) || chartType.equals(AppConstants.GT_HIERARCHICAL_SUNBURST) || chartType.equals(AppConstants.GT_ANNOTATION_CHART))) {
+ sql = generateChartSQL(userId, request );
+ ds = (DataSet) loadChartData(new Long(user_id).toString(), request);
+ } else if(chartType.equals(AppConstants.GT_ANNOTATION_CHART)) {
+ sql = reportRuntime.getWholeSQL();
+ String reportSQL = reportRuntime.getWholeSQL();
+ String dbInfo = reportRuntime.getDBInfo();
+ ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+ if(ds.getRowCount()<=0) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ logger.info(EELFLoggerDelegate.debugLogger, (chartType.toUpperCase()+" - " + "Report ID : " + reportRuntime.getReportID() + " DATA IS EMPTY" ));
+ logger.info(EELFLoggerDelegate.debugLogger, ("QUERY - " + reportSQL));
+ logger.info(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ }
+ } else if(chartType.equals(AppConstants.GT_HIERARCHICAL)||chartType.equals(AppConstants.GT_HIERARCHICAL_SUNBURST)) {
+ sql = reportRuntime.getWholeSQL();
+ String reportSQL = reportRuntime.getWholeSQL();
+ String dbInfo = reportRuntime.getDBInfo();
+ ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+ }
+ } catch (RaptorException ex) {
+ //throw new RaptorException("Error while loading chart data", ex);
+ logger.error(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ logger.error(EELFLoggerDelegate.debugLogger, (chartType.toUpperCase()+" - " + "Report ID : " + reportRuntime.getReportID() + " ERROR THROWN FOR GIVEN QUERY "));
+ logger.error(EELFLoggerDelegate.debugLogger, ("QUERY - " + reportRuntime.getWholeSQL()));
+ logger.error(EELFLoggerDelegate.debugLogger, ("ERROR STACK TRACE" + ex.getMessage()));
+ logger.error(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+
+ }
+ if(ds==null) {
+ //displayChart = false;
+ if(chartType.equals(AppConstants.GT_ANNOTATION_CHART))
+ ds = new DataSet();
+ else
+ displayChart = false;
+ }
+ }
+ if(displayChart) {
+
+ chartJSON.setReportID(reportRuntime.getReportID());
+ chartJSON.setReportName(reportRuntime.getReportName());
+ chartJSON.setReportDescr(reportRuntime.getReportDescr());
+ chartJSON.setReportTitle(reportRuntime.getReportTitle());
+ chartJSON.setReportSubTitle(reportRuntime.getReportSubTitle());
+
+ List<DataColumnType> dcList = reportRuntime.getOnlyVisibleColumns();
+ int countIndex = 0;
+ ArrayList<ChartColumnJSON> chartColumnJSONList = new ArrayList<ChartColumnJSON>();
+ for(Iterator iter = dcList.iterator(); iter.hasNext(); ) {
+ ChartColumnJSON ccJSON = new ChartColumnJSON();
+ DataColumnType dc = (DataColumnType) iter.next();
+ ccJSON.setIndex(countIndex);
+ ccJSON.setValue(dc.getColId());
+ ccJSON.setTitle(dc.getDisplayName());
+ countIndex++;
+ chartColumnJSONList.add(ccJSON);
+ }
+ chartJSON.setChartColumnJSONList(chartColumnJSONList);
+ /* setting formfields show only showForm got triggered*/
+ /*ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ if(reportRuntime.getReportFormFields()!=null) {
+ formFieldJSONList = new ArrayList<FormFieldJSON>(reportRuntime.getReportFormFields().size());
+ for (Iterator iter = reportRuntime.getReportFormFields().iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ ff.setDbInfo(reportRuntime.getDbInfo());
+ FormFieldJSON ffJSON = new FormFieldJSON();
+ ffJSON.setFieldId(ff.getFieldName());
+ ffJSON.setFieldType(ff.getFieldType());
+ ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
+ ffJSON.setHelpText(ff.getHelpText());
+ ffJSON.setValidationType(ff.getValidationType());
+ //ffJSON.setTriggerOtherFormFields(ff.getDependsOn());
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ reportRuntime.setTriggerFormFieldCheck( reportRuntime.getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ SQL = reportRuntime.parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = reportRuntime.parseAndFillWithCurrentValues(request, SQL, ff);
+ String defaultSQL = lu.getDefaultSQL();
+ defaultSQL = reportRuntime.parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ defaultSQL = reportRuntime.parseAndFillWithCurrentValues(request, SQL, ff);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+
+ if(lookup != null && lookup.size() > 0) {
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ if(requestValue != null && Arrays.asList(requestValue).contains(value.getId())) {
+ //if(value.getId().equals(requestValue))
+ value.setDefaultValue(true);
+ }
+ if(!(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) && value.isDefaultValue())
+ formFieldValues.add(value);
+ else if(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) {
+ formFieldValues.add(value);
+ }
+ //break;
+ }
+ } else {
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ }
+ }
+
+ } else {
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ }
+ }
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+
+
+ ffJSON.setFormFieldValues(formFieldValues);
+ formFieldJSONList.add(ffJSON);
+ } // for
+ }
+ chartJSON.setFormFieldList(formFieldJSONList);
+ chartJSON.setChartSqlWhole(sql);*/
+ chartJSON.setChartAvailable(displayChart);
+
+ ChartTypeJSON chartTypeJSON = new ChartTypeJSON();
+ chartTypeJSON.setIndex(0);
+ chartTypeJSON.setTitle("");
+ chartTypeJSON.setValue(chartType);
+ chartJSON.setChartTypeJSON(chartTypeJSON);
+ chartJSON.setWidth(width);
+ chartJSON.setHeight(height);
+ chartJSON.setAnimation(animation);
+ chartJSON.setRotateLabels(rotateLabels);
+ chartJSON.setStaggerLabels(staggerLabels);
+ chartJSON.setShowTitle(showTitle);
+ DomainAxisJSON domainAxisJSON = new DomainAxisJSON();
+ domainAxisJSON.setIndex(0);
+ if(reportRuntime.getChartLegendColumn()!=null)
+ domainAxisJSON.setTitle(reportRuntime.getChartLegendColumn().getDisplayName());
+ else
+ domainAxisJSON.setTitle("");
+ if(reportRuntime.getChartLegendColumn()!=null)
+ domainAxisJSON.setValue(reportRuntime.getChartLegendColumn().getColId());
+ else
+ domainAxisJSON.setValue("");
+ chartJSON.setDomainAxisJSON(domainAxisJSON);
+
+
+ List<DataColumnType> reportCols = reportRuntime.getAllColumns();
+ boolean hasSeriesColumn = false;
+ //ArrayList<Item>
+ for (Iterator<DataColumnType> iter = reportCols.iterator(); iter
+ .hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if(dct.isChartSeries()!=null && dct.isChartSeries().booleanValue()) {
+ chartJSON.setHasCategoryAxis(true);
+ CategoryAxisJSON categoryAxisJSON = new CategoryAxisJSON();
+ categoryAxisJSON.setIndex(0);
+ categoryAxisJSON.setTitle(dct.getDisplayName());
+ categoryAxisJSON.setValue(dct.getColId());
+ chartJSON.setCategoryAxisJSON(categoryAxisJSON);
+ }
+ //allColumns
+ //.add(new Item(dct.getColId(), dct.getDisplayName()));
+ }
+ //chartJSON.setCategoryAxis(categoryAxis);
+ //chartJSON.set
+
+ List<DataColumnType> chartValueCols = reportRuntime.getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, null);
+ DataColumnType dct_RangeAxis = null;
+ //int noChart = 0;
+ //if(chartValueCols.size()<=0) {
+ //chartValueCols.addAll(reportCols);
+ //noChart = 1;
+ //}
+ if(chartValueCols.size() <= 0) {
+ chartValueCols = reportCols;
+ }
+ ArrayList<RangeAxisJSON> rangeAxisJSONList = new ArrayList<RangeAxisJSON>();
+ for (int k = 0; k < chartValueCols.size(); k++) {
+ dct_RangeAxis = chartValueCols.get(k);
+ RangeAxisJSON rangeAxisJSON = new RangeAxisJSON();
+
+ RangeAxisLabelJSON rangeAxisLabelJSON = new RangeAxisLabelJSON();
+ rangeAxisLabelJSON.setIndex(0);
+ rangeAxisLabelJSON.setTitle(dct_RangeAxis.getDisplayName());
+ rangeAxisLabelJSON.setValue(dct_RangeAxis.getColId());
+ rangeAxisJSON.setRangeAxisLabelJSON(rangeAxisLabelJSON);
+ RangeLineTypeJSON rangeLineTypeJSON = new RangeLineTypeJSON();
+ rangeLineTypeJSON.setIndex(0);
+ rangeLineTypeJSON.setTitle("");
+ rangeLineTypeJSON.setValue(dct_RangeAxis.getChartLineType());
+ rangeAxisJSON.setRangeLineTypeJSON(rangeLineTypeJSON);
+
+ RangeColorJSON rangeColorJSON = new RangeColorJSON();
+ rangeColorJSON.setIndex(0);
+ rangeColorJSON.setTitle("");
+ rangeColorJSON.setValue(dct_RangeAxis.getChartColor());
+ rangeAxisJSON.setRangeColorJSON(rangeColorJSON);
+ String chartGroup = "";
+ chartGroup = AppUtils.nvl(dct_RangeAxis.getChartGroup());
+ if(chartGroup.indexOf("|")!=-1)
+ chartGroup = chartGroup.substring(0, chartGroup.indexOf("|"));
+
+
+ rangeAxisJSON.setRangeChartGroup(chartGroup);
+ String yAxis = "";
+ yAxis = AppUtils.nvl(dct_RangeAxis.getYAxis());
+ if(yAxis.indexOf("|")!=-1)
+ yAxis = yAxis.substring(0, yAxis.indexOf("|"));
+
+ rangeAxisJSON.setRangeYAxis(yAxis);
+ rangeAxisJSON.setShowAsArea((dct_RangeAxis.isIsRangeAxisFilled()!=null && dct_RangeAxis.isIsRangeAxisFilled().booleanValue())?true:false);
+ rangeAxisJSONList.add(rangeAxisJSON);
+ }
+ CommonChartOptions commonChartOptions = new CommonChartOptions();
+ commonChartOptions.setLegendPosition(AppUtils.nvl(reportRuntime.getLegendPosition()).length()>0?reportRuntime.getLegendPosition().toLowerCase():"top");
+ String legendLabelAngle = "";
+ legendLabelAngle = reportRuntime.getLegendLabelAngle().toLowerCase();
+ commonChartOptions.setLegendLabelAngle(AppUtils.nvl(legendLabelAngle).length()>0?legendLabelAngle:"up45");
+ commonChartOptions.setHideLegend(reportRuntime.hideChartLegend());
+ commonChartOptions.setAnimateAnimatedChart(reportRuntime.isAnimateAnimatedChart());
+ commonChartOptions.setTopMargin(reportRuntime.getTopMargin()!=null?reportRuntime.getTopMargin():new Integer("30"));
+ commonChartOptions.setBottomMargin(reportRuntime.getBottomMargin()!=null?reportRuntime.getBottomMargin():new Integer("50"));
+ commonChartOptions.setLeftMargin(reportRuntime.getLeftMargin()!=null?reportRuntime.getLeftMargin():new Integer("100"));
+ commonChartOptions.setRightMargin(reportRuntime.getRightMargin()!=null?reportRuntime.getRightMargin():new Integer("60"));
+ chartJSON.setCommonChartOptions(commonChartOptions);
+
+ if(chartType.equals(AppConstants.GT_BAR_3D)) {
+ BarChartOptions barChartOptions = new BarChartOptions();
+ barChartOptions.setDisplayBarControls(reportRuntime.displayBarControls()?true:false);
+ barChartOptions.setMinimizeXAxisTickers(reportRuntime.isLessXaxisTickers()?true:false);
+ barChartOptions.setStackedChart(reportRuntime.isChartStacked()?true:false);
+ barChartOptions.setTimeAxis(reportRuntime.isTimeAxis()?true:false);
+ barChartOptions.setVerticalOrientation(reportRuntime.isVerticalOrientation()?true:false);
+ barChartOptions.setxAxisDateType(reportRuntime.isXAxisDateType()?true:false);
+ barChartOptions.setyAxisLogScale(reportRuntime.isLogScale()?true:false);
+ chartJSON.setBarChartOptions(barChartOptions);
+ chartJSON.setTimeSeriesChartOptions(null);
+ chartJSON.setPieChartOptions(null);
+ chartJSON.setFlexTimeSeriesChartOptions(null);
+
+ } else if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
+ TimeSeriesChartOptions timeSeriesChartOptions = new TimeSeriesChartOptions();
+ timeSeriesChartOptions.setAddXAxisTicker(reportRuntime.isAddXAxisTickers());
+ timeSeriesChartOptions.setLineChartRenderer(AppUtils.nvl(reportRuntime.getTimeSeriesRender()).length()>0?reportRuntime.getTimeSeriesRender():"line");
+ timeSeriesChartOptions.setMultiSeries(reportRuntime.isMultiSeries());
+ timeSeriesChartOptions.setNonTimeAxis(reportRuntime.isTimeAxis());
+ timeSeriesChartOptions.setShowXAxisLabel(reportRuntime.isShowXaxisLabel());
+ chartJSON.setBarChartOptions(null);
+ chartJSON.setTimeSeriesChartOptions(timeSeriesChartOptions);
+ chartJSON.setPieChartOptions(null);
+ chartJSON.setFlexTimeSeriesChartOptions(null);
+ } else if(chartType.equals(AppConstants.GT_ANNOTATION_CHART) || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
+ FlexTimeSeriesChartOptions flexTimeSeriesChartOptions = new FlexTimeSeriesChartOptions();
+ flexTimeSeriesChartOptions.setZoomIn(reportRuntime.getZoomIn()!=null?reportRuntime.getZoomIn():new Integer("25"));
+ String timeAxisTypeStr = "";
+ timeAxisTypeStr = reportRuntime.getTimeAxisType().toLowerCase();
+ flexTimeSeriesChartOptions.setTimeAxisType(timeAxisTypeStr);
+ chartJSON.setBarChartOptions(null);
+ chartJSON.setTimeSeriesChartOptions(null);
+ chartJSON.setPieChartOptions(null);
+ chartJSON.setFlexTimeSeriesChartOptions(flexTimeSeriesChartOptions);
+ }
+ chartJSON.setRangeAxisList(rangeAxisJSONList);
+ chartJSON.setPrimaryAxisLabel(reportRuntime.getChartLeftAxisLabel());
+ chartJSON.setSecondaryAxisLabel(reportRuntime.getChartRightAxisLabel());
+ chartJSON.setMinRange(reportRuntime.getRangeAxisLowerLimit());
+ chartJSON.setMaxRange(reportRuntime.getRangeAxisUpperLimit());
+
+ if(showData) {
+ ArrayList<ArrayList<Row>> wholeList = new ArrayList<ArrayList<Row>>();
+
+ ArrayList<Row> rowList = new ArrayList<Row>();
+ if(showData) {
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ rowList = new ArrayList<Row>();
+ for (int j = 0; j<ds.getColumnCount(); j++) {
+ Row row = new Row();
+ row.setColId(ds.getColumnName(j));
+ row.setDisplayValue(ds.getString(i, j));
+ row.setDataType(ds.getColumnType(j));
+ rowList.add(row);
+ }
+ wholeList.add(rowList);
+
+ }
+
+ chartJSON.setWholeList(wholeList);
+ }
+ }
+
+
+
+
+
+ }
+ } else {
+ // chart is not visible
+ chartJSON.setReportID(reportRuntime.getReportID());
+ chartJSON.setReportName(reportRuntime.getReportName());
+ chartJSON.setReportDescr(reportRuntime.getReportDescr());
+ chartJSON.setReportTitle(reportRuntime.getReportTitle());
+ chartJSON.setReportSubTitle(reportRuntime.getReportSubTitle());
+ chartJSON.setChartAvailable(displayChart);
+ ChartTypeJSON chartTypeJSON = new ChartTypeJSON();
+ chartTypeJSON.setIndex(0);
+ chartTypeJSON.setTitle("");
+ chartTypeJSON.setValue(chartType);
+ chartJSON.setChartTypeJSON(chartTypeJSON);
+ }
+ //mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
+ //mapper.setVisibilityChecker(mapper.getVisibilityChecker().with(JsonAutoDetect.Visibility.NONE));
+ mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ String jsonInString = "";
+ try {
+ jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(chartJSON);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+
+ return jsonInString;
+ }
+
+ public String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ public static String nvls(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public static String nvls(String s, String sDefault) {
+ return nvls(s).equals("") ? sDefault : s;
+ }
+
+ public boolean getFlagInBoolean(String s) {
+ return nvl(s).toUpperCase().startsWith("Y") || nvl(s).toLowerCase().equals("true");
+ }
+
+ public DataSet loadChartData(String userId, HttpServletRequest request) throws RaptorException {
+ if (nvl(getChartType()).length() == 0)
+ return null;
+ //TODO: display chart function to be added.
+ //if (!getDisplayChart())
+ // return null;
+
+ String sql = null;
+ sql = generateChartSQL(userId, request);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL generated " + sql));
+ String dbInfo = reportRuntime.getDBInfo();
+ DataSet ds = ConnectionUtils.getDataSet(sql, dbInfo);
+ if(ds.getRowCount()<=0) {
+ logger.info(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ logger.info(EELFLoggerDelegate.debugLogger, (getChartType().toUpperCase()+" - " + "Report ID : " + reportRuntime.getReportID() + " DATA IS EMPTY"));
+ logger.info(EELFLoggerDelegate.debugLogger, ("QUERY - " + sql));
+ logger.info(EELFLoggerDelegate.debugLogger, ("********************************************************************************"));
+ }
+
+ return ds;
+ } // loadChartData
+
+ public String generateChartSQL(String userId, HttpServletRequest request ) throws RaptorException {
+ List reportCols = reportRuntime.getAllColumns();
+ List chartValueCols = getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, null); // parameter is 0 has this requires all columns.
+ String reportSQL = reportRuntime.getWholeSQL();
+
+ //Add order by clause
+ Pattern re1 = Pattern.compile("(^[\r\n]*|([\\s]))[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]",Pattern.DOTALL);
+ //Pattern re1 = Pattern.compile("order(.*?[^\r\n]*)by", Pattern.DOTALL);
+ Matcher matcher = re1.matcher(reportSQL);
+ //Pattern re1 = Pattern.compile("(^[\r\n]*|([\\s]))[Oo][Rr][Dd][Ee][Rr][Tt](.*?[^\r\n]*)[Bb][Yy]",Pattern.DOTALL);
+ //int startPoint = sql.length()-30;
+
+ reportSQL = reportSQL + " ";
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ss][Ee][Ll][Ee][Cc][Tt]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" SELECT ");
+ //reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ff][Rr][Oo][Mm]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" FROM ");
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Rr][Ee]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" WHERE ");
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Ww][Hh][Ee][Nn]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" WHEN ");
+ reportSQL = Pattern.compile("(^[\r\n]*|([\\s]))[Aa][Nn][Dd]([\r\n]*|[\\s]*)",Pattern.DOTALL).matcher(reportSQL).replaceAll(" AND ");
+
+ if(!reportRuntime.getReportType().equals(AppConstants.RT_HIVE)) {
+ int startPoint = reportSQL.lastIndexOf(" FROM ");
+ if(startPoint <= 0) {
+ startPoint = reportSQL.lastIndexOf(" from ");
+ }
+ if(startPoint <= 0) {
+ startPoint = reportSQL.lastIndexOf("from ");
+ }
+ if(startPoint <= 0) {
+ startPoint = reportSQL.lastIndexOf("FROM ");
+ }
+
+ if (!matcher.find(startPoint)) {
+ reportSQL = reportSQL + " ORDER BY 1" ;
+ }
+ }
+ reportRuntime.setWholeSQL(reportSQL);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, (" *************************************************************************************** "));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("WHOLE_SQL" + reportSQL));
+ logger.debug(EELFLoggerDelegate.debugLogger, (" *************************************************************************************** "));
+
+ if (reportRuntime.getFormFieldList() != null) {
+ for (Iterator iter = reportRuntime.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = reportRuntime.getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ formfield_value = AppUtils.getRequestNvlValue(request, fieldId);
+ String paramValue = nvl(formfield_value);
+ if(paramValue.length()>0) {
+ /*sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));*/
+ reportSQL = Utils.replaceInString(reportSQL, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ /*sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));*/
+ reportSQL = Utils.replaceInString(reportSQL, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));
+ reportSQL = Utils.replaceInString(reportSQL, fieldDisplay , nvl(
+ paramValue, "NULL"));
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL " + reportSQL));
+ String legendCol = "1 a";
+ // String valueCol = "1";
+ StringBuffer groupCol = new StringBuffer();
+ StringBuffer seriesCol = new StringBuffer();
+ StringBuffer valueCols = new StringBuffer();
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, request);
+ if (nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ legendCol = getSelectExpr(dc, colName)+" " + dc.getColId();
+ // if(dc.getChartSeq()>0)
+ // valueCol = "NVL("+colName+", 0) "+dc.getColId();
+ if ((!nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))
+ && (dc.getChartSeq()!=null && dc.getChartSeq().intValue() <= 0) && dc.isGroupBreak()) {
+ groupCol.append(", ");
+ groupCol.append(colName + " " + dc.getColId());
+ }
+ } // for
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(dc.isChartSeries()!=null && dc.isChartSeries().booleanValue()) {
+ //System.out.println("*****************, "+ " " +getColumnSelectStr(dc, paramValues)+ " "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues)));
+ seriesCol.append(", "+ getSelectExpr(dc,getColumnSelectStr(dc, request))+ " " + dc.getColId());
+ }
+ }
+
+ /*for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ if(!dc.isChartSeries() && !(nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ //System.out.println("*****************, "+ " " +getColumnSelectStr(dc, paramValues)+ " "+ getSelectExpr(dc,getColumnSelectStr(dc, paramValues)));
+ seriesCol.append(", "+ formatChartColumn(getSelectExpr(dc,getColumnSelectStr(dc, paramValues)))+ " " + dc.getColId());
+ }
+ }*/
+
+ for (Iterator iter = chartValueCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, request);
+ String paramValue = "";
+ if(AppUtils.nvl(colName).startsWith("[")) {
+ if (reportRuntime.getFormFieldList() != null) {
+ for (Iterator iterC = reportRuntime.getFormFieldList().getFormField().iterator(); iterC.hasNext();) {
+ FormFieldType fft = (FormFieldType) iterC.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = reportRuntime.getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ if(AppUtils.nvl(fieldDisplay).equals(colName)) {
+ formfield_value = AppUtils.getRequestNvlValue(request, fieldId);
+ paramValue = nvl(formfield_value);
+ }
+ }
+
+ }
+
+ seriesCol.append("," + (AppUtils.nvl(paramValue).length()>0? paramValue:"null") + " " + dc.getColId());
+ } else {
+ //valueCols.append(", NVL(" + formatChartColumn(colName) + ",0) " + dc.getColId());
+ seriesCol.append("," + (AppUtils.nvl(paramValue).length()>0? paramValue:formatChartColumn(colName)) + " " + dc.getColId());
+ }
+ } // for
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = dc.getDisplayName();
+ String colValue = getColumnSelectStr(dc, request);
+ //String colName = getColumnSelectStr(dc, formGrid);
+ if(colName.equals(AppConstants.RI_CHART_TOTAL_COL))
+ seriesCol.append(", " + AppConstants.RI_CHART_TOTAL_COL + " " + AppConstants.RI_CHART_TOTAL_COL );
+ if (colName.equals(AppConstants.RI_CHART_COLOR))
+ seriesCol.append(", " + colValue + " " + AppConstants.RI_CHART_COLOR );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_START))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_START + " " + AppConstants.RI_CHART_MARKER_START );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_END))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_END + " " + AppConstants.RI_CHART_MARKER_END );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_TEXT_LEFT))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_TEXT_LEFT + " " + AppConstants.RI_CHART_MARKER_TEXT_LEFT );
+ if(colName.equals(AppConstants.RI_CHART_MARKER_TEXT_RIGHT))
+ seriesCol.append(", " + AppConstants.RI_CHART_MARKER_TEXT_RIGHT + " " + AppConstants.RI_CHART_MARKER_TEXT_RIGHT );
+ //if(colName.equals(AppConstants.RI_ANOMALY_TEXT))
+ //seriesCol.append(", " + AppConstants.RI_ANOMALY_TEXT + " " + AppConstants.RI_ANOMALY_TEXT );
+ }
+
+ //debugLogger.debug("ReportSQL Chart " + reportSQL );
+ /*for (Iterator iter = chartValueCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //valueCols.append(", NVL(" + formatChartColumn(colName) + ",0) " + dc.getColId());
+ valueCols.append("," + formatChartColumn(colName) + " " + dc.getColId());
+ } // for
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ String colName = getColumnSelectStr(dc, paramValues);
+ //if(colName.equals(AppConstants.RI_CHART_TOTAL_COL) || colName.equals(AppConstants.RI_CHART_COLOR)) {
+ if(colName.equals(AppConstants.RI_CHART_TOTAL_COL))
+ valueCols.append(", " + AppConstants.RI_CHART_TOTAL_COL + " " + AppConstants.RI_CHART_TOTAL_COL );
+ if (colName.equals(AppConstants.RI_CHART_COLOR))
+ valueCols.append(", " + AppConstants.RI_CHART_COLOR + " " + AppConstants.RI_CHART_COLOR );
+ if (colName.equals(AppConstants.RI_CHART_INCLUDE))
+ valueCols.append(", " + AppConstants.RI_CHART_INCLUDE + " " + AppConstants.RI_CHART_INCLUDE );
+ //}
+ }*/
+ String final_sql = "";
+ reportSQL = Utils.replaceInString(reportSQL, " from ", " FROM ");
+ reportSQL = Utils.replaceInString(reportSQL, " From ", " FROM ");
+ reportSQL = Utils.replaceInString(reportSQL, " select ", " SELECT ");
+ reportSQL = Utils.replaceInString(reportSQL, " union ", " UNION ");
+ //reportSQL = reportSQL.replaceAll("[\\s]*\\(", "(");
+// if(reportSQL.indexOf("UNION") != -1) {
+// if(reportSQL.indexOf("FROM(")!=-1)
+// final_sql += " "+reportSQL.substring(reportSQL.indexOf("FROM(") );
+// else if (reportSQL.indexOf("FROM (")!=-1)
+// final_sql += " "+reportSQL.substring(reportSQL.indexOf("FROM (") );
+// //TODO ELSE THROW ERROR
+// }
+// else {
+// final_sql += " "+reportSQL.substring(reportSQL.toUpperCase().indexOf(" FROM "));
+// }
+ int pos = 0;
+ int pos_first_select = 0;
+ int pos_dup_select = 0;
+ int pos_prev_select = 0;
+ int pos_last_select = 0;
+ if (reportSQL.indexOf("FROM", pos)!=-1) {
+ pos = reportSQL.indexOf("FROM", pos);
+ pos_dup_select = reportSQL.lastIndexOf("SELECT",pos);
+ pos_first_select = reportSQL.indexOf("SELECT");//,pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_select " + pos_first_select + " " + pos_dup_select));
+ if(pos_dup_select > pos_first_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("********pos_dup_select ********" + pos_dup_select));
+ //pos_dup_select1 = pos_dup_select;
+ pos_prev_select = pos_first_select;
+ pos_last_select = pos_dup_select;
+ while (pos_last_select > pos_prev_select) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("pos_last , pos_prev " + pos_last_select + " " + pos_prev_select));
+ pos = reportSQL.indexOf("FROM", pos+2);
+ pos_prev_select = pos_last_select;
+ pos_last_select = reportSQL.lastIndexOf("SELECT",pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("in WHILE LOOP LAST " + pos_last_select));
+ }
+ }
+
+ }
+ final_sql += " "+reportSQL.substring(pos);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Final SQL " + final_sql));
+ String sql = "SELECT " + legendCol + ", " + legendCol+"_1" + seriesCol.toString()+ nvl(valueCols.toString(), ", 1")
+ + groupCol.toString()
+ + final_sql;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Final sql in generateChartSQL " +sql));
+
+ return sql;
+ } // generateChartSQL
+
+ private String getColumnSelectStr(DataColumnType dc, HttpServletRequest request) {
+ //String colName = dc.isCalculated() ? dc.getColName()
+ // : ((nvl(dc.getTableId()).length() > 0) ? (dc.getTableId() + "." + dc
+ // .getColName()) : dc.getColName());
+ String colName = dc.getColName();
+ String paramValue = null;
+ //if (dc.isCalculated()) {
+ if (reportRuntime.getFormFieldList() != null) {
+ for (Iterator iter = reportRuntime.getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = reportRuntime.getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ formfield_value = AppUtils.getRequestNvlValue(request, fieldId);
+ paramValue = nvl(formfield_value);
+ if(paramValue.length()>0) {
+ /*sql = Utils.replaceInString(sql, "'" + fieldDisplay + "'", nvl(
+ paramValue, "NULL"));*/
+ colName = Utils.replaceInString(colName, "'" + fieldDisplay + "'", "'"+nvl(
+ paramValue, "NULL")+"'");
+ colName = Utils.replaceInString(colName, fieldDisplay, nvl(
+ paramValue, "NULL"));
+ }
+ }
+ return colName;
+ }
+ //}
+ return colName;
+ } // getColumnSelectStr
+
+
+
+ public String getSelectExpr(DataColumnType dct) {
+ // String colName =
+ // dct.isCalculated()?dct.getColName():((nvl(dct.getTableId()).length()>0)?(dct.getTableId()+"."+dct.getColName()):dct.getColName());
+ return getSelectExpr(dct, dct.getColName() /* colName */);
+ } // getSelectExpr
+
+ private String getSelectExpr(DataColumnType dct, String colName) {
+ String colType = dct.getColType();
+ if (colType.equals(AppConstants.CT_CHAR)
+ || ((nvl(dct.getColFormat()).length() == 0) && (!colType
+ .equals(AppConstants.CT_DATE))))
+ return colName;
+ else
+ return "TO_CHAR(" + colName + ", '"
+ + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT) + "')";
+ } // getSelectExpr
+
+ private String formatChartColumn(String colName) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Format Chart Column Input colName " + colName));
+ colName = colName.trim();
+ colName = Utils.replaceInString(colName, "TO_CHAR", "to_char");
+ colName = Utils.replaceInString(colName, "to_number", "TO_NUMBER");
+ //reportSQL = reportSQL.replaceAll("[\\s]*\\(", "(");
+ colName = colName.replaceAll(",[\\s]*\\(", ",(");
+ StringBuffer colNameBuf = new StringBuffer(colName);
+ int pos = 0, posFormatStart = 0, posFormatEnd = 0;
+ String format = "";
+
+ if(colNameBuf.indexOf("999")==-1 && colNameBuf.indexOf("990")==-1) {
+ logger.debug(EELFLoggerDelegate.debugLogger, (" return colName " + colNameBuf.toString()));
+ return colNameBuf.toString();
+ }
+
+ while (colNameBuf.indexOf("to_char")!=-1) {
+ if(colNameBuf.indexOf("999")!=-1 || colNameBuf.indexOf("990")!=-1) {
+ pos = colNameBuf.indexOf("to_char");
+ colNameBuf.insert(pos, " TO_NUMBER ( CR_RAPTOR.SAFE_TO_NUMBER (");
+ pos = colNameBuf.indexOf("to_char");
+ colNameBuf.replace(pos, pos+7, "TO_CHAR");
+ //colName = Utils.replaceInString(colNameBuf.toString(), "to_char", " TO_NUMBER ( CR_RAPTOR.SAFE_TO_NUMBER ( TO_CHAR ");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("After adding to_number " + colNameBuf.toString()));
+ //posFormatStart = colNameBuf.lastIndexOf(",'")+1;
+ posFormatStart = colNameBuf.indexOf(",'", pos)+1;
+ posFormatEnd = colNameBuf.indexOf(")",posFormatStart);
+ logger.debug(EELFLoggerDelegate.debugLogger, (posFormatStart + " " + posFormatEnd + " "+ pos));
+ format = colNameBuf.substring(posFormatStart, posFormatEnd);
+ //posFormatEnd = colNameBuf.indexOf(")",posFormatEnd);
+ colNameBuf.insert(posFormatEnd+1, " ," + format + ") , "+ format + ")");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("colNameBuf " + colNameBuf.toString()));
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, (" return colName " + colNameBuf.toString()));
+ return colNameBuf.toString();
+ }
+
+ public List getChartValueColumnsList( int filter, HashMap formValues) { /*filter; all=0;create without new chart =1; createNewChart=2 */
+ List reportCols = reportRuntime.getAllColumns();
+
+ ArrayList chartValueCols = new ArrayList();
+ int flag = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ flag = 0;
+ DataColumnType dc = (DataColumnType) iter.next();
+// if(filter == 2 || filter == 1) {
+ flag = reportRuntime.getDependsOnFormFieldFlag(dc, formValues);
+
+ if( (dc.getChartSeq()!=null && dc.getChartSeq()> 0) && flag == 0 && !(nvl(dc.getColOnChart()).equals(AppConstants.GC_LEGEND))) {
+ if(nvl(dc.getChartGroup()).length()<=0) {
+ if( filter == 2 && (dc.isCreateInNewChart()!=null && dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ } else if (filter == 1 && (dc.isCreateInNewChart()==null || !dc.isCreateInNewChart().booleanValue())) {
+ chartValueCols.add(dc);
+ }
+ else if(filter == 0) chartValueCols.add(dc);
+ } else chartValueCols.add(dc);
+ }
+// } else
+// chartValueCols.add(dc);
+ } // for
+ Collections.sort(chartValueCols, new ChartSeqComparator());
+ return chartValueCols;
+ } // getChartValueColumnsList
+
+ public String parseTitle(String title, HashMap formValues) {
+ Set set = formValues.entrySet();
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry<String,String>) iter.next();
+ if(title.indexOf("["+ entry.getKey() + "]")!= -1) {
+ title = Utils.replaceInString(title, "["+entry.getKey()+"]", nvl(
+ (String) entry.getValue(), ""));
+ }
+ }
+ return title;
+ }
+
+ public java.util.Date getDateFromDateStr(String dateStr) {
+ SimpleDateFormat MMDDYYYYFormat = new SimpleDateFormat("MM/dd/yyyy");
+ SimpleDateFormat EEEMMDDYYYYFormat = new SimpleDateFormat("EEE, MM/dd/yyyy"); //2012-11-01 00:00:00
+ SimpleDateFormat YYYYMMDDFormat = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat MONYYYYFormat = new SimpleDateFormat("MMM yyyy");
+ SimpleDateFormat MMYYYYFormat = new SimpleDateFormat("MM/yyyy");
+ SimpleDateFormat MMMMMDDYYYYFormat = new SimpleDateFormat("MMMMM dd, yyyy");
+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat timestampHrFormat = new SimpleDateFormat("yyyy-MM-dd HH");
+ SimpleDateFormat timestampDayFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat DDMONYYYYFormat = new SimpleDateFormat("dd-MMM-yyyy");
+ SimpleDateFormat MONTHYYYYFormat = new SimpleDateFormat("MMMMM, yyyy");
+ SimpleDateFormat MMDDYYYYHHFormat = new SimpleDateFormat("MM/dd/yyyy HH");
+ SimpleDateFormat MMDDYYYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
+ SimpleDateFormat YYYYMMDDHHMMSSFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ SimpleDateFormat YYYYMMDDHHMMFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+ SimpleDateFormat DDMONYYYYHHMMSSFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+ SimpleDateFormat DDMONYYYYHHMMFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
+ SimpleDateFormat MMDDYYFormat = new SimpleDateFormat("MM/dd/yy");
+ SimpleDateFormat MMDDYYHHMMFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
+ SimpleDateFormat MMDDYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
+ SimpleDateFormat timestampFormat1 = new SimpleDateFormat("yyyy-M-d.HH.mm. s. S");
+ SimpleDateFormat MMDDYYYYHHMMZFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
+ SimpleDateFormat YYYYFormat = new SimpleDateFormat("yyyy");
+ java.util.Date date = null;
+
+ int formatFlag = 0;
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+ /*int yearFlag = 1;
+ int monthFlag = 2;
+ int dayFlag = 3;
+ int hourFlag = 4;
+ int minFlag = 5;
+ int secFlag = 6;
+ int milliSecFlag = 7;
+ int dayoftheweekFlag = 8;
+ int flagDate = 10;
+ */
+
+ date = MMDDYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ if(date==null) {
+ date = EEEMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYOFTHEWEEKFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+ if(date==null) {
+ //MMDDYYYYHHFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ date = MMDDYYYYHHFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = YYYYMMDDFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = timestampFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+ if(date==null) {
+ date = timestampHrFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = timestampDayFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = MONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMMMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = MONTHYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = timestampFormat1.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYYYHHMMZFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYFormat.parse(dateStr, new ParsePosition(0));
+ /* Some random numbers should not satisfy this year format. */
+ if(dateStr.length()>4) date = null;
+ if(date!=null) formatFlag = YEARFLAG;
+ }
+ if(date==null)
+ date = null;
+ return date;
+ }
+
+ public int getFlagFromDateStr(String dateStr) {
+ SimpleDateFormat MMDDYYYYFormat = new SimpleDateFormat("MM/dd/yyyy");
+ SimpleDateFormat EEEMMDDYYYYFormat = new SimpleDateFormat("EEE, MM/dd/yyyy"); //2012-11-01 00:00:00
+ SimpleDateFormat YYYYMMDDFormat = new SimpleDateFormat("yyyy/MM/dd");
+ SimpleDateFormat MONYYYYFormat = new SimpleDateFormat("MMM yyyy");
+ SimpleDateFormat MMYYYYFormat = new SimpleDateFormat("MM/yyyy");
+ SimpleDateFormat MMMMMDDYYYYFormat = new SimpleDateFormat("MMMMM dd, yyyy");
+ SimpleDateFormat timestampFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ SimpleDateFormat timestampHrFormat = new SimpleDateFormat("yyyy-MM-dd HH");
+ SimpleDateFormat timestampDayFormat = new SimpleDateFormat("yyyy-MM-dd");
+ SimpleDateFormat DDMONYYYYFormat = new SimpleDateFormat("dd-MMM-yyyy");
+ SimpleDateFormat MONTHYYYYFormat = new SimpleDateFormat("MMMMM, yyyy");
+ SimpleDateFormat MMDDYYYYHHFormat = new SimpleDateFormat("MM/dd/yyyy HH");
+ SimpleDateFormat MMDDYYYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
+ SimpleDateFormat MMDDYYYYHHMMFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm");
+ SimpleDateFormat YYYYMMDDHHMMSSFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
+ SimpleDateFormat YYYYMMDDHHMMFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm");
+ SimpleDateFormat DDMONYYYYHHMMSSFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm:ss");
+ SimpleDateFormat DDMONYYYYHHMMFormat = new SimpleDateFormat("dd-MMM-yyyy HH:mm");
+ SimpleDateFormat MMDDYYFormat = new SimpleDateFormat("MM/dd/yy");
+ SimpleDateFormat MMDDYYHHMMFormat = new SimpleDateFormat("MM/dd/yy HH:mm");
+ SimpleDateFormat MMDDYYHHMMSSFormat = new SimpleDateFormat("MM/dd/yy HH:mm:ss");
+ SimpleDateFormat timestampFormat1 = new SimpleDateFormat("yyyy-M-d.HH.mm. s. S");
+ SimpleDateFormat MMDDYYYYHHMMZFormat = new SimpleDateFormat("MM/dd/yyyy HH:mm z");
+ SimpleDateFormat YYYYFormat = new SimpleDateFormat("yyyy");
+ java.util.Date date = null;
+
+ int formatFlag = 0;
+
+ final int YEARFLAG = 1;
+ final int MONTHFLAG = 2;
+ final int DAYFLAG = 3;
+ final int HOURFLAG = 4;
+ final int MINFLAG = 5;
+ final int SECFLAG = 6;
+ final int MILLISECFLAG = 7;
+ final int DAYOFTHEWEEKFLAG = 8;
+ final int FLAGDATE = 9;
+ /*int yearFlag = 1;
+ int monthFlag = 2;
+ int dayFlag = 3;
+ int hourFlag = 4;
+ int minFlag = 5;
+ int secFlag = 6;
+ int milliSecFlag = 7;
+ int dayoftheweekFlag = 8;
+ int flagDate = 10;
+ */
+
+ date = MMDDYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ if(date==null) {
+ date = EEEMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYOFTHEWEEKFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+ if(date==null) {
+ //MMDDYYYYHHFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
+ date = MMDDYYYYHHFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = MMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = YYYYMMDDFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = timestampFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+ if(date==null) {
+ date = timestampHrFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = HOURFLAG;
+ }
+ if(date==null) {
+ date = timestampDayFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = MONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+ if(date==null) {
+ date = MMMMMDDYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+ if(date==null) {
+ date = MONTHYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MONTHFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYMMDDHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = DDMONYYYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMSSFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYHHMMFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = DAYFLAG;
+ }
+
+ if(date==null) {
+ date = timestampFormat1.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = SECFLAG;
+ }
+
+ if(date==null) {
+ date = MMDDYYYYHHMMZFormat.parse(dateStr, new ParsePosition(0));
+ if(date!=null) formatFlag = MINFLAG;
+ }
+
+ if(date==null) {
+ date = YYYYFormat.parse(dateStr, new ParsePosition(0));
+ /* Some random numbers should not satisfy this year format. */
+ if(dateStr.length()>4) date = null;
+ if(date!=null) formatFlag = YEARFLAG;
+ }
+ if(date==null)
+ date = null;
+ return formatFlag;
+ }
+
+ public static String[] reverse(String[] arr) {
+ List<String> list = Arrays.asList(arr);
+ Collections.reverse(list);
+ return (String[])list.toArray();
+ }
+
+ public int getNumberOfDecimalPlaces(double num) {
+ Double d = num;
+ String[] splitter = d.toString().split("\\.");
+ splitter[0].length(); // Before Decimal Count
+ splitter[1].length(); // After Decimal Count
+ return splitter[1].length();
+ }
+
+ public boolean getBooleanValue(String s) {
+ return getBooleanValue(s,null);
+ }
+
+ public boolean getBooleanValue(String s, Boolean defaultValue) {
+ s = nvl(s);
+ if(s.length()<=0 && defaultValue!=null) return defaultValue.booleanValue();
+ else if(s.length()<=0) return false;
+ else {
+ if(s.toUpperCase().startsWith("Y") || s.toLowerCase().equals("true"))
+ return true;
+ else
+ return false;
+ }
+ }
+
+
+ public String IntToLetter(int Int) {
+ if (Int<27){
+ return Character.toString((char)(Int+96));
+ } else {
+ if (Int%26==0) {
+ return IntToLetter((Int/26)-1)+IntToLetter((Int%26)+1);
+ } else {
+ return IntToLetter(Int/26)+IntToLetter(Int%26);
+ }
+ }
+ }
+
+
+
+
+ private void clearReportRuntimeBackup(HttpServletRequest request) {
+ //Session sess = Sessions.getCurrent(true)getCurrent();
+ //HttpSession session = (HttpSession)sess.getNativeSession();
+ HttpSession session = request.getSession();
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ request.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ request.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ Enumeration<String> enum1 = session.getAttributeNames();
+ String attributeName = "";
+ while(enum1.hasMoreElements()) {
+ attributeName = enum1.nextElement();
+ if(attributeName.startsWith("parent_")) {
+ session.removeAttribute(attributeName);
+ }
+ }
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
+ session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
+ session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP);
+ session.removeAttribute(AppConstants.SI_MAP);
+ session.removeAttribute(AppConstants.SI_MAP_OBJECT);
+ session.removeAttribute(AppConstants.SI_REPORT_DEFINITION);
+ session.removeAttribute(AppConstants.SI_REPORT_RUNTIME);
+ session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
+ session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
+ session.removeAttribute(AppConstants.RI_REPORT_DATA);
+ session.removeAttribute(AppConstants.RI_CHART_DATA);
+ session.removeAttribute(AppConstants.SI_FORMFIELD_INFO);
+ session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+
+ } // clearReportRuntimeBackup
+
+
+ public static synchronized java.util.HashMap getRequestParametersMap(ReportRuntime rr, HttpServletRequest request)
+ {
+ HashMap valuesMap = new HashMap();
+
+ ReportFormFields rff = rr.getReportFormFields();
+
+ int idx = 0;
+ FormField ff = null;
+
+ Map fieldNameMap = new HashMap();
+ int countOfFields = 0 ;
+
+
+ for(rff.resetNext(); rff.hasNext(); idx++) {
+ ff = rff.getNext();
+ fieldNameMap.put(ff.getFieldName(), ff.getFieldDisplayName());
+ countOfFields++;
+ }
+
+ List formParameter = new ArrayList();
+ String formField = "";
+ for(int i = 0 ; i < rff.size(); i++) {
+ ff = ((FormField)rff.getFormField(i));
+ formField = ff.getFieldName();
+ boolean isMultiValue = false;
+ isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
+ boolean isTextArea = (ff.getFieldType().equals(FormField.FFT_TEXTAREA) && rr.getReportDefType()
+ .equals(AppConstants.RD_SQL_BASED));
+
+ if(request.getParameterValues(formField) != null && isMultiValue ) {
+ String[] vals = request.getParameterValues(formField);
+ StringBuffer value = new StringBuffer("");
+ if(!AppUtils.getRequestFlag(request, AppConstants.RI_RESET_ACTION)) {
+
+ if ( isMultiValue ) {
+ value.append("(");
+ }
+ for(int j = 0 ; j < vals.length; j++) {
+ if(isMultiValue) value.append("'");
+ try {
+ if(vals[j] !=null && vals[j].length() > 0) {
+ vals[j] = Utils.oracleSafe(vals[j]);
+ value.append(java.net.URLDecoder.decode(vals[j], "UTF-8"));// + ",";
+ }
+ else
+ value.append(vals[j]);
+ } catch (UnsupportedEncodingException ex) {value.append(vals[j]);}
+ catch (IllegalArgumentException ex1){value.append(vals[j]);}
+ catch (Exception ex2){
+ value.append(vals[j]);
+ }
+
+
+ if(isMultiValue) value.append("'");
+
+ if(j != vals.length -1) {
+ value.append(",");
+ }
+ }
+ if(vals.length > 0) {
+ value.append(")");
+ }
+ }
+
+ //value = value.substring(0 , value.length());
+
+ valuesMap.put(fieldNameMap.get(formField), value.toString());
+ value = new StringBuffer("");
+ } else if(request.getParameter(formField) != null) {
+ if(isTextArea) {
+ String value = "";
+ value = request.getParameter(formField);
+
+ value = Utils.oracleSafe(value);
+ value = "('" + Utils.replaceInString(value, ",", "'|'") + "')";
+ value = Utils.replaceInString(value, "|", ",");
+ valuesMap.put(fieldNameMap.get(formField), value);
+ value = "";
+ } else {
+ String value = "";
+ if(!AppUtils.getRequestFlag(request, AppConstants.RI_RESET_ACTION))
+ value = request.getParameter(formField);
+ valuesMap.put(fieldNameMap.get(formField), Utils.oracleSafe(value));
+ }
+
+ } else {
+ valuesMap.put(fieldNameMap.get(formField), "" );
+ }
+
+ }
+
+ return valuesMap;
+
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java
new file mode 100644
index 00000000..3fb24402
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java
@@ -0,0 +1,420 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+
+
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.view.ReportData;
+import org.openecomp.portalsdk.core.web.support.UserUtils;
+
+
+public class ChartWebRuntime implements Serializable {
+
+
+ // Not used - planned to use if Hibernate used as data access layer
+ private String runningDataQuery = "";
+ private String runningCountQuery = "";
+ //CONSTANTS FOR QUERY
+ public final String QRY_COUNT_REPORT = "";
+ public final String QRY_DATA_REPORT = "";
+
+ // Not used planning to use when filter is used
+ private StringBuffer whereClause = new StringBuffer("");
+ // request used to grab request parameters
+ private HttpServletRequest request;
+
+
+ public ReportRuntime reportRuntime;
+ public ReportData reportData;
+
+ //Used to pass user information
+ private final Map<String, Object> params = new HashMap<String, Object>();
+
+ //from chart generator retrieves list of charts to render
+ public ArrayList chartList;
+ public ArrayList infoList;
+
+ private String totalSql;
+
+
+ //
+ private String drilldown_index = "0";
+
+ public List getRolesCommaSeperated(HttpServletRequest request) {
+ HashMap roles = UserUtils.getRoles(request);
+ List roleList = null;
+ StringBuffer roleBuf = new StringBuffer("");
+ int count = 0;
+ if( roles != null ) {
+ roleList = Arrays.asList(roles.keySet().toArray());
+ }
+
+ return roleList;
+ }
+
+
+ public String getUserId(HttpServletRequest request) {
+ return AppUtils.getUserID(request);
+ }
+
+ public String generateChart(HttpServletRequest request) {
+ return generateChart(request, true);
+ }
+
+
+ public String generateChart(HttpServletRequest request, boolean showData) {
+ //wire variables
+ //processRecursive(this, this);
+ long currentTime = System.currentTimeMillis();
+ HttpSession session = request.getSession();
+ String action = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
+ boolean genReportData = (!action.equals("chart.json") || action.equals("chart.data.json"));
+
+
+
+ final Long user_id = new Long((long) UserUtils.getUserId(request));
+
+
+ boolean adminUser = false;
+ try {
+ adminUser = AppUtils.isAdminUser(request) || AppUtils.isSuperUser(request);
+ } catch (RaptorException ex) {
+ ex.printStackTrace();
+ }
+ List roleList = getRolesCommaSeperated(request);
+ //final Map<String, Object> params = new HashMap<String, Object>();
+ params.put("user_id", user_id);
+ params.put("role_list", roleList);
+ //params.put("public_yn", "Y");
+
+ //String action = request.getParameter(AppConstants.RI_ACTION);
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+
+ ReportHandler rh = new ReportHandler();
+ ReportRuntime rr = null;
+ try {
+ if(reportID !=null)
+ rr = rh.loadReportRuntime(request, reportID, true, 1);
+ if(rr.getReportType().equals(AppConstants.RT_HIVE)) {
+ String sql = rr.getReportSQL();
+ rr.setWholeSQL(sql);
+ //if(genReportData)
+ //reportData = rr.loadHiveLinearReportData(rr.getWholeSQL(),user_id.toString(), 10000,request);
+ } else {
+ //if(genReportData)
+ //reportData = rr.loadReportData(0, user_id.toString(), 10000,request, false /*download*/);
+ }
+ } catch (RaptorException ex) {
+ ex.printStackTrace();
+ }
+ setReportRuntime(rr);
+ setReportData( reportData);
+
+ reportRuntime = getReportRuntime();
+ reportData = getReportData();
+
+
+ HashMap<String, String> chartOptionsMap = new HashMap<String, String>();
+
+ String rotateLabelsStr = "";
+ rotateLabelsStr = AppUtils.nvl(reportRuntime.getLegendLabelAngle());
+ if(rotateLabelsStr.toLowerCase().equals("standard")) {
+ rotateLabelsStr = "0";
+ } else if (rotateLabelsStr.toLowerCase().equals("up45")) {
+ rotateLabelsStr = "45";
+ } else if (rotateLabelsStr.toLowerCase().equals("down45")) {
+ rotateLabelsStr = "-45";
+ } else if (rotateLabelsStr.toLowerCase().equals("up90")) {
+ rotateLabelsStr = "90";
+ } else if (rotateLabelsStr.toLowerCase().equals("down90")) {
+ rotateLabelsStr = "-90";
+ } else
+ rotateLabelsStr = "0";
+
+ String width = (AppUtils.getRequestNvlValue(request, "width").length()>0?AppUtils.getRequestNvlValue(request, "width"):(AppUtils.nvl(reportRuntime.getChartWidth()).length()>0?reportRuntime.getChartWidth():"700"));
+ String height = (AppUtils.getRequestNvlValue(request, "height").length()>0?AppUtils.getRequestNvlValue(request, "height"):(AppUtils.nvl(reportRuntime.getChartHeight()).length()>0?reportRuntime.getChartHeight():"300"));
+ String animationStr = (AppUtils.getRequestNvlValue(request, "animation").length()>0?AppUtils.getRequestNvlValue(request, "animation"):new Boolean(reportRuntime.isAnimateAnimatedChart()).toString());
+
+ String rotateLabels = (AppUtils.getRequestNvlValue(request, "rotateLabels").length()>0?AppUtils.getRequestNvlValue(request, "rotateLabels"):(rotateLabelsStr.length()>0?rotateLabelsStr:"0"));
+ String staggerLabelsStr = (AppUtils.getRequestNvlValue(request, "staggerLabels").length()>0?AppUtils.getRequestNvlValue(request, "staggerLabels"):"false");
+ String showMaxMinStr = (AppUtils.getRequestNvlValue(request, "showMaxMin").length()>0?AppUtils.getRequestNvlValue(request, "showMaxMin"):"false");
+ String showControlsStr = (AppUtils.getRequestNvlValue(request, "showControls").length()>0?AppUtils.getRequestNvlValue(request, "showControls"):new Boolean(reportRuntime.displayBarControls()).toString());
+ String showLegendStr = (AppUtils.getRequestNvlValue(request, "showLegend").length()>0?AppUtils.getRequestNvlValue(request, "showLegend"):new Boolean(!new Boolean(reportRuntime.hideChartLegend())).toString());
+ String topMarginStr = AppUtils.getRequestNvlValue(request, "topMargin");
+ String topMargin = (AppUtils.nvl(topMarginStr).length()<=0)?(reportRuntime.getTopMargin()!=null?reportRuntime.getTopMargin().toString():"30"):topMarginStr;
+ String bottomMarginStr = AppUtils.getRequestNvlValue(request, "bottomMargin");
+ String bottomMargin = (AppUtils.nvl(bottomMarginStr).length()<=0)?(reportRuntime.getBottomMargin()!=null?reportRuntime.getBottomMargin().toString():"50"):bottomMarginStr;
+ String leftMarginStr = AppUtils.getRequestNvlValue(request, "leftMargin");
+ String leftMargin = (AppUtils.nvl(leftMarginStr).length()<=0)?(reportRuntime.getLeftMargin()!=null?reportRuntime.getLeftMargin().toString():"100"):leftMarginStr;
+ String rightMarginStr = AppUtils.getRequestNvlValue(request, "rightMargin");
+ String rightMargin = (AppUtils.nvl(rightMarginStr).length()<=0)?(reportRuntime.getRightMargin()!=null?reportRuntime.getRightMargin().toString():"160"):rightMarginStr;
+ String showTitleStr = (AppUtils.getRequestNvlValue(request, "showTitle").length()>0?AppUtils.getRequestNvlValue(request, "showTitle"):new Boolean(reportRuntime.displayChartTitle()).toString());
+ String subType = AppUtils.getRequestNvlValue(request, "subType").length()>0?AppUtils.getRequestNvlValue(request, "subType"):(AppUtils.nvl(reportRuntime.getTimeSeriesRender()).equals("area")?reportRuntime.getTimeSeriesRender():"");
+ String stackedStr = AppUtils.getRequestNvlValue(request, "stacked").length()>0?AppUtils.getRequestNvlValue(request, "stacked"):new Boolean(reportRuntime.isChartStacked()).toString();
+ String horizontalBar = AppUtils.getRequestNvlValue(request, "horizontalBar").length()>0?AppUtils.getRequestNvlValue(request, "horizontalBar"):new Boolean(reportRuntime.isHorizontalOrientation()).toString();
+ String barRealTimeAxis = AppUtils.getRequestNvlValue(request, "barRealTimeAxis");
+ String barReduceXAxisLabels = AppUtils.getRequestNvlValue(request, "barReduceXAxisLabels").length()>0?AppUtils.getRequestNvlValue(request, "barReduceXAxisLabels"):new Boolean(reportRuntime.isLessXaxisTickers()).toString();;
+ String timeAxis = AppUtils.getRequestNvlValue(request, "timeAxis").length()>0?AppUtils.getRequestNvlValue(request, "timeAxis"):new Boolean(reportRuntime.isTimeAxis()).toString();
+ String logScale = AppUtils.getRequestNvlValue(request, "logScale").length()>0?AppUtils.getRequestNvlValue(request, "logScale"):new Boolean(reportRuntime.isLogScale()).toString();
+ String precision = AppUtils.getRequestNvlValue(request, "precision").length()>0?AppUtils.getRequestNvlValue(request, "precision"):"2";
+
+ /* boolean animation = AppUtils.getRequestFlag(request, "animation");
+ boolean staggerLabels = AppUtils.getRequestFlag(request, "staggerLabels");
+ boolean showMaxMin = (showMaxMinStr.length()<=0)?false:Boolean.parseBoolean(showMaxMinStr);
+ boolean showControls = (showControlsStr.length()<=0)?true:Boolean.parseBoolean(showControlsStr);
+ boolean showLegend = (showLegendStr.length()<=0)?true:Boolean.parseBoolean(showLegendStr);
+ boolean showTitle = (showTitleStr.length()<=0)?true:Boolean.parseBoolean(showTitleStr);
+ boolean stacked = (stackedStr.length()<=0)?true:Boolean.parseBoolean(stackedStr);
+ */
+ // Add all options to Map
+ chartOptionsMap.put("width", width);
+ chartOptionsMap.put("height", height);
+ chartOptionsMap.put("animation", animationStr);
+ chartOptionsMap.put("rotateLabels", rotateLabels);
+ chartOptionsMap.put("staggerLabels", staggerLabelsStr);
+ chartOptionsMap.put("showMaxMin", showMaxMinStr);
+ chartOptionsMap.put("showControls", showControlsStr);
+ chartOptionsMap.put("showLegend", showLegendStr);
+ chartOptionsMap.put("topMargin", topMargin);
+ chartOptionsMap.put("bottomMargin", bottomMargin);
+ chartOptionsMap.put("leftMargin", leftMargin);
+ chartOptionsMap.put("rightMargin", rightMargin);
+ chartOptionsMap.put("showTitle", showTitleStr);
+ chartOptionsMap.put("subType", subType);
+ chartOptionsMap.put("stacked", stackedStr);
+ chartOptionsMap.put("horizontalBar", horizontalBar);
+ chartOptionsMap.put("timeAxis", timeAxis);
+ chartOptionsMap.put("barRealTimeAxis", barRealTimeAxis);
+ chartOptionsMap.put("barReduceXAxisLabels", barReduceXAxisLabels);
+
+ chartOptionsMap.put("logScale", logScale);
+ chartOptionsMap.put("precision", precision);
+
+
+
+ if(reportRuntime!=null) {
+ StringBuffer title = new StringBuffer("");
+ title.append(reportRuntime.getReportName());
+ }
+
+ if(! (action.equals("chart.json") || action.equals("chart.data.json"))) {
+
+
+ //Chart
+ String chartType = reportRuntime.getChartType();
+ return drawD3Charts(chartOptionsMap, request);
+ //drawD3Charts();
+ } else /*if (action.equals("chart.json"))*/ {
+ String chartType = reportRuntime.getChartType();
+ return returnChartJSON(chartOptionsMap, request, showData);
+
+
+ } /*else {
+
+ return ("Internal Error Occurred.");
+ }*/
+
+ }
+
+
+ public String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ /**
+ * @return the reportRuntime
+ */
+ public ReportRuntime getReportRuntime() {
+ return reportRuntime;
+ }
+
+ /**
+ * @param reportRuntime the reportRuntime to set
+ */
+ public void setReportRuntime(ReportRuntime reportRuntime) {
+ this.reportRuntime = reportRuntime;
+ }
+
+ /**
+ * @return the reportData
+ */
+ public ReportData getReportData() {
+ return reportData;
+ }
+
+ /**
+ * @param reportData the reportData to set
+ */
+ public void setReportData(ReportData reportData) {
+ this.reportData = reportData;
+ }
+
+ public boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+
+ protected String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ protected static String nvls(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ protected static String nvls(String s, String sDefault) {
+ return nvls(s).equals("") ? sDefault : s;
+ }
+
+ protected boolean getFlagInBoolean(String s) {
+ return nvl(s).toUpperCase().startsWith("Y") || nvl(s).toLowerCase().equals("true");
+ }
+
+
+ /**
+ * @return the chartList
+ */
+ public ArrayList getChartList() {
+ return chartList;
+ }
+
+ /**
+ * @param chartList the chartList to set
+ */
+ public void setChartList(ArrayList chartList) {
+ this.chartList = chartList;
+ }
+
+ /**
+ * @return the infoList
+ */
+ public ArrayList getInfoList() {
+ return infoList;
+ }
+
+ /**
+ * @param infoList the infoList to set
+ */
+ public void setInfoList(ArrayList infoList) {
+ this.infoList = infoList;
+ }
+
+
+
+ private void clearReportRuntimeBackup(HttpSession session, HttpServletRequest request) {
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ request.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ request.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ Enumeration<String> enum1 = session.getAttributeNames();
+ String attributeName = "";
+ while(enum1.hasMoreElements()) {
+ attributeName = enum1.nextElement();
+ if(attributeName.startsWith("parent_")) {
+ session.removeAttribute(attributeName);
+ }
+ }
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ session.removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
+ session.removeAttribute(AppConstants.SI_COLUMN_LOOKUP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
+ session.removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
+ session.removeAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP);
+ session.removeAttribute(AppConstants.SI_MAP);
+ session.removeAttribute(AppConstants.SI_MAP_OBJECT);
+ session.removeAttribute(AppConstants.SI_REPORT_DEFINITION);
+ session.removeAttribute(AppConstants.SI_REPORT_RUNTIME);
+ session.removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
+ session.removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
+ session.removeAttribute(AppConstants.RI_REPORT_DATA);
+ session.removeAttribute(AppConstants.RI_CHART_DATA);
+ session.removeAttribute(AppConstants.SI_FORMFIELD_INFO);
+ session.removeAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+ } // clearReportRuntimeBackup
+
+
+ public String getTotalSql() {
+ return totalSql;
+ }
+
+ public void setTotalSql(String totalSql) {
+ this.totalSql = totalSql;
+ }
+
+
+
+ /* public void drawD3Charts(HashMap<String,String> chartOptionsMap) {
+ drawD3Charts(chartOptionsMap);
+
+ }
+ */
+
+ public String drawD3Charts(HashMap<String,String> chartOptionsMap, HttpServletRequest request) {
+
+ ChartD3Helper chartHelper = new ChartD3Helper(reportRuntime);
+ chartHelper.setChartType(reportRuntime.getChartType());
+ try {
+ return chartHelper.createVisualization(reportRuntime, chartOptionsMap, request);
+ } catch(RaptorException ex) {
+ ex.printStackTrace();
+ }
+ return "";
+
+ }
+
+ public String returnChartJSON(HashMap<String,String> chartOptionsMap, HttpServletRequest request, boolean showData) {
+
+ ChartJSONHelper chartJSONHelper = new ChartJSONHelper(reportRuntime);
+ chartJSONHelper.setChartType(reportRuntime.getChartType());
+ try {
+ return chartJSONHelper.generateJSON(reportRuntime, chartOptionsMap, request, showData);
+ } catch(RaptorException ex) {
+ ex.printStackTrace();
+ }
+ return "";
+
+ }
+
+ }
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CommonChartOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CommonChartOptions.java
new file mode 100644
index 00000000..e8ba2ee5
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CommonChartOptions.java
@@ -0,0 +1,81 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class CommonChartOptions {
+
+ private String legendPosition = "top";
+ private String legendLabelAngle = "up45";
+ private boolean hideLegend = false;
+ private boolean animateAnimatedChart = true;
+ private int topMargin = 30;
+ private int bottomMargin = 50;
+ private int leftMargin = 100;
+ private int rightMargin = 60;
+
+ public String getLegendPosition() {
+ return legendPosition;
+ }
+ public void setLegendPosition(String legendPosition) {
+ this.legendPosition = legendPosition;
+ }
+ public String getLegendLabelAngle() {
+ return legendLabelAngle;
+ }
+ public void setLegendLabelAngle(String legendLabelAngle) {
+ this.legendLabelAngle = legendLabelAngle;
+ }
+ public boolean isHideLegend() {
+ return hideLegend;
+ }
+ public void setHideLegend(boolean hideLegend) {
+ this.hideLegend = hideLegend;
+ }
+ public boolean isAnimateAnimatedChart() {
+ return animateAnimatedChart;
+ }
+ public void setAnimateAnimatedChart(boolean animateAnimatedChart) {
+ this.animateAnimatedChart = animateAnimatedChart;
+ }
+ public int getTopMargin() {
+ return topMargin;
+ }
+ public void setTopMargin(int topMargin) {
+ this.topMargin = topMargin;
+ }
+ public int getBottomMargin() {
+ return bottomMargin;
+ }
+ public void setBottomMargin(int bottomMargin) {
+ this.bottomMargin = bottomMargin;
+ }
+ public int getLeftMargin() {
+ return leftMargin;
+ }
+ public void setLeftMargin(int leftMargin) {
+ this.leftMargin = leftMargin;
+ }
+ public int getRightMargin() {
+ return rightMargin;
+ }
+ public void setRightMargin(int rightMargin) {
+ this.rightMargin = rightMargin;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java
new file mode 100644
index 00000000..d619c4e0
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java
@@ -0,0 +1,43 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class ErrorJSONRuntime {
+
+ private String errormessage;
+ private String stacktrace;
+
+ public String getErrormessage() {
+ return errormessage;
+ }
+ public void setErrormessage(String errormessage) {
+ this.errormessage = errormessage;
+ }
+ public String getStacktrace() {
+ return stacktrace;
+ }
+ public void setStacktrace(String stacktrace) {
+ this.stacktrace = stacktrace;
+ }
+
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FlexTimeSeriesChartOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FlexTimeSeriesChartOptions.java
new file mode 100644
index 00000000..3b3060bb
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FlexTimeSeriesChartOptions.java
@@ -0,0 +1,38 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class FlexTimeSeriesChartOptions {
+ private int zoomIn = 25;
+ private String timeAxisType = "";
+ public int getZoomIn() {
+ return zoomIn;
+ }
+ public void setZoomIn(int zoomIn) {
+ this.zoomIn = zoomIn;
+ }
+ public String getTimeAxisType() {
+ return timeAxisType;
+ }
+ public void setTimeAxisType(String timeAxisType) {
+ this.timeAxisType = timeAxisType;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java
new file mode 100644
index 00000000..ea215679
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java
@@ -0,0 +1,2111 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+/* ===========================================================================================
+ * This class is part of <I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I>
+ * Raptor : This tool is used to generate different kinds of reports with lot of utilities
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * FormField.java - This class is used to generate all types of form field.
+ * -------------------------------------------------------------------------------------------
+ *
+ * Created By : Stan Pishamanov
+ * Modified & Maintained By : Sundar Ramalingam
+ *
+ * Changes
+ * -------
+ * 18-Aug-2009 : Version 8.5 (Sundar); Populating predefined formfields bug has been resolved.
+ * 13-Aug-2009 : Version 8.5 (RS); Form field chaining is supported even for hidden variables.
+ * 13-Aug-2009 : Version 8.5 (RS); Nothing changed just comment.
+ * 10-Aug-2009 : Version 9.0 (RS); required logic is added for Multiple Dropdown.
+ * 06-Aug-2009 : Version 9.0 (RS); B getAjaxHtml is added for converting form field chain from Iframe to AJAX.
+ * 08-Jun-2009 : Version 8.3 (RS); Hidden formfields now is displayed even when the sql is not provided.
+ *
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.error.UserDefinedException;
+import org.openecomp.portalsdk.analytics.model.base.IdNameList;
+import org.openecomp.portalsdk.analytics.model.base.IdNameLookup;
+import org.openecomp.portalsdk.analytics.model.base.IdNameSql;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.xmlobj.JavascriptItemType;
+
+public class FormField extends org.openecomp.portalsdk.analytics.RaptorObject implements Serializable {
+ private static final String HTML_FORM = "formd";
+
+ private String fieldName = null;
+
+ private String fieldDisplayName = null;
+
+ private String fieldType = FFT_TEXT_W_POPUP;
+
+ private String validationType = VT_NONE;
+
+ private boolean required = false;
+
+ public boolean hasPredefinedList = false;
+
+ private String defaultValue = null;
+
+ private Calendar rangeStartDate = null;
+
+ private Calendar rangeEndDate = null;
+
+ private String rangeStartDateSQL = null;
+
+ private String rangeEndDateSQL = null;
+
+ private String fieldDefaultSQL = null;
+
+ private String multiSelectListSize = null;
+
+ private String helpText = null;
+
+ private IdNameList lookupList = null;
+
+ private String dbInfo = null;
+
+ private String userId = null;
+
+ private boolean visible = true;
+
+ private String dependsOn = null;
+
+ private boolean triggerOtherFormFields = false;
+
+ private boolean triggerThisFormfield = false;
+
+ // Form field types
+ public static final String FFT_TEXT_W_POPUP = "TEXT_WITH_POPUP";
+
+ public static final String FFT_TEXT = "TEXT";
+
+ public static final String FFT_TEXTAREA = "TEXTAREA";
+
+ public static final String FFT_COMBO_BOX = "COMBO_BOX";
+
+ public static final String FFT_LIST_BOX = "LIST_BOX";
+
+ public static final String FFT_RADIO_BTN = "RADIO_BTN";
+
+ public static final String FFT_CHECK_BOX = "CHECK_BOX";
+
+ public static final String FFT_LIST_MULTI = "LIST_MULTI_SELECT";
+
+ public static final String FFT_HIDDEN = "HIDDEN";
+
+ public static final String FFT_BLANK = "BLANK";
+
+ // Validation types
+ public static final String VT_NONE = "NONE";
+
+ public static final String VT_DATE = "DATE";
+
+ public static final String VT_TIMESTAMP_HR = "TIMESTAMP_HR";
+
+ public static final String VT_TIMESTAMP_MIN = "TIMESTAMP_MIN";
+
+ public static final String VT_TIMESTAMP_SEC = "TIMESTAMP_SEC";
+
+ public static final String VT_INT = "INTEGER";
+
+ public static final String VT_INT_POSITIVE = "POSITIVE_INTEGER";
+
+ public static final String VT_INT_NON_NEGATIVE = "NON_NEGATIVE_INTEGER";
+
+ public static final String VT_FLOAT = "FLOAT";
+
+ public static final String VT_FLOAT_POSITIVE = "POSITIVE_FLOAT";
+
+ public static final String VT_FLOAT_NON_NEGATIVE = "NON_NEGATIVE_FLOAT";
+
+ private FormField(String fieldName, String fieldDisplayName, String fieldType,
+ String validationType, boolean required, String defaultValue, String helpText, boolean visible, String dependsOn, Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL, String multiSelectListSize ) {
+ //super();
+ this (fieldName,fieldDisplayName,fieldType,validationType,required,defaultValue,helpText, dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize);
+ setVisible(visible);
+ } // FormField
+
+ private FormField(String fieldName, String fieldDisplayName, String fieldType,
+ String validationType, boolean required, String defaultValue, String helpText, String dependsOn, Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL, String multiSelectListSize ) {
+ super();
+ setFieldName(fieldName);
+ setFieldDisplayName(fieldDisplayName);
+ setFieldType(nvl(fieldType, FFT_TEXT));
+ setValidationType(validationType);
+ setRequired(required);
+ setDefaultValue(defaultValue);
+ setHelpText(helpText);
+ setDependsOn(dependsOn);
+ setRangeStartDate(rangeStartDate);
+ setRangeEndDate(rangeEndDate);
+ setRangeStartDateSQL(rangeStartDateSQL);
+ setRangeEndDateSQL(rangeEndDateSQL);
+ setMultiSelectListSize(multiSelectListSize);
+ }
+ public FormField(String fieldName, String fieldDisplayName, String fieldType,
+ String validationType, boolean required, String defaultValue, String helpText,
+ List predefinedValues, boolean visible, String dependsOn, Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL, String multiSelectListSize) {
+ this(fieldName, fieldDisplayName, fieldType, validationType, required, defaultValue,
+ helpText,visible, dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize);
+ if (predefinedValues != null)
+ setPredefinedListLookup(predefinedValues);
+ } // FormField
+
+ public FormField(String fieldName, String fieldDisplayName, String fieldType,
+ String validationType, boolean required, String defaultValue, String helpText,
+ String lookupSql, boolean visible, String dependsOn, Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL, String multiSelectListSize ) {
+ this(fieldName, fieldDisplayName, fieldType, validationType, required, defaultValue,
+ helpText,visible, dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize);
+ if (defaultValue!=null && defaultValue.length()>10 && defaultValue.substring(0,10).trim().toLowerCase().startsWith("select")) {
+ setFieldDefaultSQL(defaultValue);
+ setDefaultValue("");
+ }
+ setLookupList(new IdNameSql(lookupSql,defaultValue));
+ } // FormField
+
+ public FormField(String fieldName, String fieldDisplayName, String fieldType,
+ String validationType, boolean required, String defaultValue, String helpText,
+ String dbTableName, String dbIdField, String dbNameField, String dbSortByField, boolean visible, String dependsOn, Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL, String multiSelectListSize) {
+ this(fieldName, fieldDisplayName, fieldType, validationType, required, defaultValue,
+ helpText,dbTableName,dbIdField,dbNameField,dbSortByField, dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize);
+ setVisible(visible);
+ }
+
+ public FormField(String fieldName, String fieldDisplayName, String fieldType,
+ String validationType, boolean required, String defaultValue, String helpText,
+ String dbTableName, String dbIdField, String dbNameField, String dbSortByField, String dependsOn,
+ Calendar rangeStartDate, Calendar rangeEndDate,
+ String rangeStartDateSQL, String rangeEndDateSQL, String multiSelectListSize ) {
+ this(fieldName, fieldDisplayName, fieldType, validationType, required, defaultValue,
+ helpText,dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize);
+ //if(dependsOn !=null){ this.dependsOn = dependsOn; }else { this.dependsOn = ""
+ if (defaultValue!=null && defaultValue.length()>10 && defaultValue.substring(0,10).trim().toLowerCase().startsWith("select")) {
+ setFieldDefaultSQL(defaultValue);
+ setDefaultValue("");
+ if(fieldType.equals(FFT_TEXT))
+ setLookupList(new IdNameLookup(dbTableName, dbIdField, dbNameField, dbSortByField,defaultValue,true));
+ else
+ setLookupList(new IdNameLookup(dbTableName, dbIdField, dbNameField, dbSortByField,defaultValue,false));
+ }
+ else {
+ if(fieldType.equals(FFT_TEXT))
+ setLookupList(new IdNameLookup(dbTableName, dbIdField, dbNameField, dbSortByField, true));
+ else
+ setLookupList(new IdNameLookup(dbTableName, dbIdField, dbNameField, dbSortByField, false));
+ }
+
+ this.setRangeStartDate(rangeStartDate);
+ this.setRangeEndDate(rangeEndDate);
+ this.setRangeStartDateSQL(rangeStartDateSQL);
+ this.setRangeEndDateSQL(rangeEndDateSQL);
+
+ } // FormField
+
+
+ private void setPredefinedListLookup(List predefinedValues) {
+ IdNameList lookup = new IdNameList();
+ for (Iterator iter = predefinedValues.iterator(); iter.hasNext();) {
+ String value = (String) iter.next();
+ lookup.addValue(value, value);
+ } // for
+ setHasPredefinedList(true);
+ setLookupList(lookup);
+ } // setPredefinedListLookup
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public String getFieldDisplayName() {
+ return fieldDisplayName;
+ }
+
+ public String getFieldType() {
+ return fieldType;
+ }
+
+ public String getValidationType() {
+ return validationType;
+ }
+
+ public boolean isRequired() {
+ return required;
+ }
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ public String getHelpText() {
+ return helpText;
+ }
+
+ public IdNameList getLookupList() {
+ return lookupList;
+ }
+
+ public void setFieldName(String fieldName) {
+ this.fieldName = fieldName;
+ }
+
+ public void setFieldDisplayName(String fieldDisplayName) {
+ this.fieldDisplayName = fieldDisplayName;
+ }
+
+ public void setFieldType(String fieldType) {
+ this.fieldType = fieldType;
+ }
+
+ public void setValidationType(String validationType) {
+ this.validationType = nvl(validationType, VT_NONE);
+ }
+
+ public void setRequired(boolean required) {
+ this.required = required;
+ }
+
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ public void setHelpText(String helpText) {
+ this.helpText = helpText;
+ }
+
+ public void setLookupList(IdNameList lookupList) {
+ this.lookupList = lookupList;
+ }
+
+ public void setDefaultList(IdNameList lookupList) {
+ this.lookupList = lookupList;
+ }
+
+ public String getBaseSQL() {
+ return (lookupList == null) ? null : lookupList.getBaseSQL();
+ } // getBaseSQL
+
+ public String getBaseWholeSQL() {
+ return (lookupList == null) ? null : lookupList.getBaseWholeSQL();
+ } // getBaseWholeSQL
+
+ public String getBaseWholeReadonlySQL() {
+ return (lookupList == null) ? null : lookupList.getBaseWholeReadonlySQL();
+ } // getBaseWholeReadonlySQL
+
+ public String getBaseSQLForPDFExcel() {
+ return (lookupList == null) ? null : lookupList.getBaseSQLForPDFExcel(getFieldType().equals(FFT_LIST_MULTI)||getFieldType().equals(FFT_CHECK_BOX)?true:false);
+ } // getBaseSQLForPDFExcel
+
+ public String getDisplayNameHtml() {
+ if (nvl(helpText).length() > 0)
+ return "<a title=\"" + helpText + "\">" + fieldDisplayName + "</a>";
+ else
+ return fieldDisplayName;
+ } // getDisplayNameHtml
+
+ /*public String getHtml() throws RaptorRuntimeException {
+ return getHtml("" , null, null, false);
+ } // getHtml*/
+
+ public String getHtml(String fieldValue, HashMap formValues, ReportRuntime rr)throws RaptorRuntimeException {
+ return getHtml(fieldValue,formValues, rr, false);
+ }
+
+ public String getHelpLink(String fieldName) {
+ //return "<a href=\"#\" onclick=\"javascript:ShowContent('" + fieldName + "_div')\"><img src=\""+AppUtils.getBaseFolderURL()+"images/quickhelp_dk.gif\" width=\"12\" height=\"12\" alt=\"\" border=\"0\" class=\"qh-element\" /></a>";
+ return ((getHelpText()!=null && getHelpText().length()>0)? "tooltipText=\""+ getHelpText()+"\">": ">");
+ //return ((getHelpText()!=null && getHelpText().length()>0)? "<img src=\"static/fusion/raptor/images/quickhelp_lt.gif\" tooltipText=\""+ getHelpText() + "\"/>": "");
+ }
+
+
+ public String getCallableAfterChainingJavascript(String fieldName, ReportRuntime rr) {
+ JavascriptItemType javascriptItemType = null;
+ StringBuffer callJavascriptText = new StringBuffer("");
+ if(rr.getJavascriptList()!=null) {
+ for (Iterator iter = rr.getJavascriptList().getJavascriptItem().iterator(); iter.hasNext();) {
+ javascriptItemType = (JavascriptItemType)iter.next();
+ if(javascriptItemType.getFieldId().equals(fieldName)) {
+ if(nvl(javascriptItemType.getCallText()).toLowerCase().startsWith("afterchaining"))
+ callJavascriptText.append(" "+javascriptItemType.getCallText());
+ }
+ }
+ }
+ return callJavascriptText.toString()+" ";
+ }
+ public String getCallableJavascript(String fieldName, ReportRuntime rr) {
+ JavascriptItemType javascriptItemType = null;
+ StringBuffer callJavascriptText = new StringBuffer("");
+ if(rr.getJavascriptList()!=null) {
+ for (Iterator iter = rr.getJavascriptList().getJavascriptItem().iterator(); iter.hasNext();) {
+ javascriptItemType = (JavascriptItemType)iter.next();
+ if(javascriptItemType.getFieldId().equals(fieldName)) {
+ if(!nvl(javascriptItemType.getCallText()).toLowerCase().startsWith("afterchaining"))
+ callJavascriptText.append(" "+javascriptItemType.getCallText());
+ }
+ }
+ }
+ return callJavascriptText.toString()+" ";
+ }
+
+ public String getCallableOnChangeJavascript(String fieldName, ReportRuntime rr) {
+ String callText = getCallableJavascript(fieldName, rr);
+ if(callText != null && callText.trim().toLowerCase().indexOf("onchange")>=0) {
+ Pattern re1 = Pattern.compile("\\=(.*?)\\)");
+ Matcher matcher = re1.matcher(callText);
+ while (matcher.find()) {
+ callText = matcher.group();
+ if(callText!=null && callText.startsWith("=\"")) {
+ callText = callText.substring(2);
+ } else if (callText!=null)
+ callText = callText.substring(1);
+ }
+ callText = callText.replaceAll("this", "documentForm."+fieldName);
+ } else callText = null;
+ return callText;
+ }
+
+ public String getAjaxHtml(String fieldValue, HashMap formValues, ReportRuntime rr, boolean inSchedule) throws RaptorRuntimeException {
+ fieldValue = nvl(fieldValue, defaultValue);
+ String readOnly = "ff_readonly";
+ try {
+ if(fieldValue !=null && fieldValue.length() > 0)
+ fieldValue = java.net.URLDecoder.decode(fieldValue, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {}
+ catch (IllegalArgumentException ex1){}
+ catch (Exception ex2){}
+ if (fieldType.equals(FFT_COMBO_BOX)) {
+ StringBuffer sb = new StringBuffer();
+ //System.out.println("COMBO BOX " + fieldName);
+ String oldSQL = "";
+ if (!required)
+ sb.append("obj.options[obj.options.length] = new Option('-->select value<--','');");
+
+ IdNameList lookup = getLookupList();
+ try {
+ if(!hasPredefinedList) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = "";
+ SQL = lu.getSql();
+ /*if(nvl(fieldValue,"").length()<=0)
+ SQL = lu.getSql();
+ else
+ SQL = lu.getBaseSQLForPDFExcel(false);
+ */
+ //System.out.println("FORMFIELD 6666667 First" + ((IdNameSql)lookup).getSql());
+ oldSQL = lu.getSql();
+ //SQL = Utils.replaceInString(SQL, "[VALUE]", fieldValue);
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ if(inSchedule) {
+ try {
+ value = java.net.URLDecoder.decode(Utils.oracleSafe(value), "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+
+ }
+ }
+ if (value!=null && (value.length() <=0 || value.equals("NULL"))) {
+ value = "NULL";
+ SQL = Utils.replaceInString(SQL, "'["+entry.getKey()+"]'", value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ } else {
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+ }
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //}
+ lookupList = lookup;
+
+ //}
+ try {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String selectedValue = "";
+ int count = 0;
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ if(value != null && value.getId() != null && value.getName() != null ) {
+ /*if (count == 0 && required) {
+ selectedValue = value.getId();
+ count++;
+ } else if (nvl(fieldValue).length()>0){
+ if (fieldValue != null && fieldValue.equals(value.getId())){
+ selectedValue = value.getId();
+ }
+ count++;
+ } else {
+ count++;
+ } */
+ if (count == 0) {
+ if(required){
+ selectedValue = value.getId();
+ }
+ count++;
+ }
+ sb.append("obj.options[obj.options.length] = new Option('" + Utils.singleQuoteEncode(value.getName())+"','"+Utils.singleQuoteEncode(value.getId())+"');");
+ if ((fieldValue != null && fieldValue.equals(value.getId()))){
+ sb.append("obj.options[obj.options.length-1].selected=true;");
+ selectedValue = value.getId();
+ }
+ if(value.isReadOnly())
+ sb.append("obj.disabled=true;");
+ else
+ sb.append("obj.disabled=false;");
+
+ }
+ } // for
+ if (formValues.containsKey(fieldDisplayName)){
+ formValues.remove(fieldDisplayName);
+ }
+ formValues.put(fieldDisplayName, selectedValue);
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+ //System.out.println("FORMFIELD 6666667 " + ((IdNameSql)lookup).getSql());
+ if( isVisible())
+ return sb.toString();
+ else return "";
+ } else if (fieldType.equals(FFT_LIST_MULTI)) {
+ StringBuffer sb = new StringBuffer();
+ String oldSQL = "";
+
+ fieldValue = '|' + fieldValue + '|';
+ IdNameList lookup = getLookupList();
+ try {
+ if(!hasPredefinedList) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = "";
+ SQL = lu.getSql();
+ /*if(nvl(fieldValue,"").length()<=0)
+ SQL = lu.getSql();
+ else
+ SQL = lu.getBaseSQLForPDFExcel(false);
+ SQL = Utils.replaceInString(SQL, "[VALUE]", fieldValue);
+ */
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ if(inSchedule) { //('1347')
+ try {
+ value = java.net.URLDecoder.decode(value, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+
+ }
+ }
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //}
+ lookupList = lookup;
+ //}
+
+ lookup.loadUserData(0, "", getDbInfo(),getUserId());
+ }
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ sb.append("obj.options[obj.options.length] = new Option('" + Utils.singleQuoteEncode(value.getName()) +"','"+Utils.singleQuoteEncode(value.getId())+"');");
+ if (fieldValue.indexOf('|' + value.getId() + '|') >= 0)
+ sb.append("obj.options[obj.options.length-1].selected=true;");
+ if(value.isReadOnly())
+ sb.append("obj.disabled=true;");
+ else
+ sb.append("obj.disabled=false;");
+
+ } // for
+
+ // lookup.clearData();
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+ if(isVisible())
+ return sb.toString();
+ else
+ return "";
+ } else if (fieldType.equals(FFT_TEXT_W_POPUP)) {
+ //System.out.println("TEXT POPUP " + fieldName);
+ String oldSQL = "";
+ IdNameValue idNamevalue = null;
+ String fieldDefValue="";
+ String fieldDefDisplay="";
+ try {
+ IdNameList lookup = getLookupList();
+ if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = getBaseWholeSQL();
+ if(SQL.toLowerCase().indexOf(readOnly) != -1) {
+ SQL = getBaseWholeReadonlySQL();
+ }
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ if(inSchedule) {
+ try {
+ value = java.net.URLDecoder.decode(Utils.oracleSafe(value), "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+
+ }
+ }
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+// if(SQL.indexOf("'"+"["+entry.getKey()+"]"+"'")!=-1) {
+ if(SQL.indexOf("'"+"["+entry.getKey()+"]"+"'")!=-1 || SQL.indexOf("'"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"'")!=-1
+ || SQL.indexOf("'%"+"["+entry.getKey()+"]"+"%'")!=-1 || SQL.indexOf("'%"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"%'")!=-1
+ || SQL.indexOf("'_"+"["+entry.getKey()+"]"+"_'")!=-1 || SQL.indexOf("'_"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"_'")!=-1
+ || SQL.indexOf("'%_"+"["+entry.getKey()+"]"+"_%'")!=-1 || SQL.indexOf("'%_"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"_%'")!=-1) {
+
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", nvl(
+ value, "NULL"));
+ } else {
+ // Added to prevent SQL Injection
+ if(SQL.indexOf("["+entry.getKey()+"]")!=-1) {
+ try {
+ double vD = Double.parseDouble(value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", nvl(
+ value, "NULL"));
+ } catch (NumberFormatException ex) {
+ throw new UserDefinedException("Expected number, Given String for the form field \"" + "["+entry.getKey()+"]"+"\"");
+ }
+ }
+ }
+ }
+ if(getFieldDefaultSQL()!=null && (fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.trim().length()<=0))
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ else
+ lookup = new IdNameSql(-1,SQL,null);
+ }
+ }
+ //lookupList = lookup;
+
+ if(getFieldDefaultSQL()!=null && (fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.trim().length()<=0)) {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ for (lookup.resetNext(); lookup.hasNext();) {
+ idNamevalue = lookup.getNext();
+ break;
+
+ }
+ fieldDefValue = nvl(idNamevalue.getId());
+ fieldDefDisplay = nvl(idNamevalue.getName());
+ } else {
+ try {
+ // -2 indicates to run the whole sql for matching value
+ lookup.loadUserData(-2, "", getDbInfo(), getUserId());
+ lookup.trimToSize();
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ if(value != null && value.getId() != null && value.getName() != null ) {
+ fieldDefValue = nvl(value.getId());
+ if (fieldValue != null && fieldValue.equals(value.getId())) {
+ fieldDefDisplay = nvl(value.getName());
+ break;
+ }
+ else {
+ fieldDefValue = "";
+ fieldDefDisplay = "";
+ }
+ }
+ }
+ if (fieldDefDisplay == null || fieldDefDisplay.length()<=0) {
+ fieldDefDisplay = nvl(fieldDefValue);
+ }
+
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+
+
+ //----- END ---//
+
+
+ if(getFieldDefaultSQL()!=null && (fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.length()<=0)) {
+ fieldDefValue = nvl((idNamevalue!=null)?idNamevalue.getId():"");
+ fieldDefDisplay = nvl((idNamevalue!=null)?idNamevalue.getName():"");
+ } else {
+ if(fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.length()<=0) fieldValue="";
+ fieldDefValue = nvl(fieldDefValue);
+ fieldDefDisplay = nvl(fieldDefDisplay);
+ }
+
+ }
+ }catch(Exception e) { //throw new RaptorRuntimeException(e);
+ }
+ if(isVisible()) {
+ /* return "<input type=text class=\"text\" size=30 maxlength=50 id=\"" + fieldName +"\" name=\"" + fieldName + "\" value=\""
+ + nvl(fieldDefValue) + "\">\n" + "<a href=\"javascript:showArgPopupNew('"
+ + fieldName + "', 'document.formd." + fieldName
+ + "')\"><img border=0 src=\"" + AppUtils.getImgFolderURL()
+ + "shareicon.gif\" " + getHelpLink(fieldName);
+ */
+ return "obj.value=\""+Utils.singleQuoteEncode(nvl(fieldDefValue))+"\";";
+
+ } else
+ return "";
+ } else if (fieldType.equals(FFT_HIDDEN) || fieldType.equals(FFT_TEXT) || fieldType.equals(FFT_TEXTAREA) ) {
+ StringBuffer sb = new StringBuffer();
+ String oldSQL = "";
+ try {
+ IdNameList lookup = getLookupList();
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ //System.out.println("SQL HIDDEN 1 " + SQL);
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ if(value == null || value.trim().length()<=0) {
+ value = "NULL";
+ }
+ if(inSchedule) {
+ try {
+ value = java.net.URLDecoder.decode(value, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+
+ }
+ }
+ //System.out.println("HIDDEN " + "["+entry.getKey()+"]" + "-" + value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //System.out.println("SQL HIDDEN 2 " + SQL);
+ //}
+ lookupList = lookup;
+ //}
+ if(nvl(fieldValue).length()>0 && (dependsOn == null || dependsOn.length()<=0)) {
+ sb.append((fieldValue!=null)?"obj.value=\""+nvl(fieldValue)+"\";":"");
+ } else if (lookup != null) {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ int iCnt = 0;
+ for (lookup.resetNext(); lookup.hasNext(); iCnt++) {
+ IdNameValue value = lookup.getNext();
+ //System.out.println("HIDDEN " + value.getId() + " " + value.getName());
+ sb.append((value!=null)?"obj.value=\""+nvl(value.getId())+"\";":"");
+ if(value.isReadOnly())
+ sb.append("obj.disabled=true;");
+ else
+ sb.append("obj.disabled=false;");
+ break;
+ } // for
+ if(lookup.size()<=0) {
+ sb.append("obj.value=\"\"");
+
+ }
+ } else {
+ sb.append((fieldValue!=null)?"obj.value=\""+Utils.singleQuoteEncode(nvl(fieldValue))+"\";":"");
+ }
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ // lookup.clearData();
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+ //if(isVisible())
+ return sb.toString() ;
+ } else if (fieldType.equals(FFT_LIST_BOX)) {
+ StringBuffer sb = new StringBuffer();
+ //System.out.println("COMBO BOX " + fieldName);
+ String oldSQL = "";
+ if (!required)
+ sb.append("obj.options[obj.options.length] = new Option('-->select value<--','');");
+
+ IdNameList lookup = getLookupList();
+ try {
+ if(!hasPredefinedList) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = "";
+ SQL = lu.getSql();
+ /*if(nvl(fieldValue,"").length()<=0)
+ SQL = lu.getSql();
+ else
+ SQL = lu.getBaseSQLForPDFExcel(false);
+ */
+ //System.out.println("FORMFIELD 6666667 First" + ((IdNameSql)lookup).getSql());
+ oldSQL = lu.getSql();
+ //SQL = Utils.replaceInString(SQL, "[VALUE]", fieldValue);
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ if(inSchedule) {
+ try {
+ value = java.net.URLDecoder.decode(Utils.oracleSafe(value), "UTF-8");
+ } catch (UnsupportedEncodingException ex) {
+
+ }
+ }
+ if (value!=null && (value.length() <=0 || value.equals("NULL"))) {
+ value = "NULL";
+ SQL = Utils.replaceInString(SQL, "'["+entry.getKey()+"]'", value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ } else {
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+ }
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //}
+ lookupList = lookup;
+
+ //}
+ try {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String selectedValue = "";
+ int count = 0;
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ if(value != null && value.getId() != null && value.getName() != null ) {
+ /*if (count == 0 && required) {
+ selectedValue = value.getId();
+ count++;
+ } else if (nvl(fieldValue).length()>0){
+ if (fieldValue != null && fieldValue.equals(value.getId())){
+ selectedValue = value.getId();
+ }
+ count++;
+ } else {
+ count++;
+ } */
+ if (count == 0) {
+ if(required){
+ selectedValue = value.getId();
+ }
+ count++;
+ }
+ sb.append("obj.options[obj.options.length] = new Option('" + Utils.singleQuoteEncode(value.getName())+"','"+Utils.singleQuoteEncode(value.getId())+"');");
+ if ((fieldValue != null && fieldValue.equals(value.getId()))){
+ sb.append("obj.options[obj.options.length-1].selected=true;");
+ selectedValue = value.getId();
+ }
+ if(value.isReadOnly())
+ sb.append("obj.disabled=true;");
+ else
+ sb.append("obj.disabled=false;");
+
+ }
+ } // for
+ if (formValues.containsKey(fieldDisplayName)){
+ formValues.remove(fieldDisplayName);
+ }
+ formValues.put(fieldDisplayName, selectedValue);
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+ //System.out.println("FORMFIELD 6666667 " + ((IdNameSql)lookup).getSql());
+ if( isVisible())
+ return sb.toString();
+ else return "";
+ }
+
+ return "";
+ }
+
+ public String getHtml(String fieldValue, HashMap formValues, ReportRuntime rr, boolean inSchedule) throws RaptorRuntimeException {
+ fieldValue = nvl(fieldValue, defaultValue);
+ int MILLIS_IN_DAY = 1000 * 60 * 60 * 24;
+ String readOnlyInSql = "ff_readonly";
+ boolean readOnly = false;
+ try {
+ if(fieldValue !=null && fieldValue.length() > 0)
+ fieldValue = java.net.URLDecoder.decode(fieldValue, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {}
+ catch (IllegalArgumentException ex1){}
+ catch (Exception ex2){}
+ //System.out.println(fieldName + " " + fieldType + " " + fieldValue);
+ if (fieldType.equals(FFT_TEXT_W_POPUP)) {
+ //System.out.println("TEXT POPUP " + fieldName);
+ String oldSQL = "";
+ IdNameValue idNamevalue = null;
+ String fieldDefValue="";
+ String fieldDefDisplay="";
+ IdNameList lookup = null;
+ try {
+ lookup = getLookupList();
+ if(!hasPredefinedList) {
+ if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = getBaseWholeSQL();
+ if(SQL.toLowerCase().indexOf(readOnlyInSql) != -1) {
+ SQL = getBaseWholeReadonlySQL();
+ }
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+// if(SQL.indexOf("'"+"["+entry.getKey()+"]"+"'")!=-1) {
+ if(SQL.indexOf("'"+"["+entry.getKey()+"]"+"'")!=-1 || SQL.indexOf("'"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"'")!=-1
+ || SQL.indexOf("'%"+"["+entry.getKey()+"]"+"%'")!=-1 || SQL.indexOf("'%"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"%'")!=-1
+ || SQL.indexOf("'_"+"["+entry.getKey()+"]"+"_'")!=-1 || SQL.indexOf("'_"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"_'")!=-1
+ || SQL.indexOf("'%_"+"["+entry.getKey()+"]"+"_%'")!=-1 || SQL.indexOf("'%_"+"["+entry.getKey())!=-1 || SQL.indexOf(entry.getKey()+"]"+"_%'")!=-1) {
+
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", nvl(
+ value, "NULL"));
+ } else {
+ // Added to prevent SQL Injection
+ if(SQL.indexOf("["+entry.getKey()+"]")!=-1) {
+ try {
+ double vD = Double.parseDouble(value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", nvl(
+ value, "NULL"));
+ } catch (NumberFormatException ex) {
+ throw new UserDefinedException("Expected number, Given String for the form field \"" + "["+entry.getKey()+"]"+"\"");
+ }
+ }
+ }
+ }
+ if(getFieldDefaultSQL()!=null && (fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.trim().length()<=0))
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ else
+ lookup = new IdNameSql(-1,SQL,null);
+ }
+ }
+ //lookupList = lookup;
+
+ if(getFieldDefaultSQL()!=null && (fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.trim().length()<=0)) {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ for (lookup.resetNext(); lookup.hasNext();) {
+ idNamevalue = lookup.getNext();
+ break;
+
+ }
+ fieldDefValue = nvl(idNamevalue.getId());
+ fieldDefDisplay = nvl(idNamevalue.getName());
+ } else {
+ try {
+ // -2 indicates to run the whole sql for matching value
+ lookup.loadUserData(-2, "", getDbInfo(), getUserId());
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+
+ lookup.trimToSize();
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ if(value != null && value.getId() != null && value.getName() != null ) {
+ fieldDefValue = nvl(value.getId());
+ if (fieldValue != null && fieldValue.equals(value.getId())) {
+ fieldDefDisplay = nvl(value.getName());
+ break;
+ }
+ else {
+ fieldDefValue = "";
+ fieldDefDisplay = "";
+ }
+ }
+ }
+ if (fieldDefDisplay == null || fieldDefDisplay.length()<=0) {
+ fieldDefDisplay = nvl(fieldDefValue);
+ }
+
+
+
+ //----- END ---//
+
+
+ if(getFieldDefaultSQL()!=null && (fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.length()<=0)) {
+ fieldDefValue = nvl((idNamevalue!=null)?idNamevalue.getId():"");
+ fieldDefDisplay = nvl((idNamevalue!=null)?idNamevalue.getName():"");
+ } else {
+ if(fieldValue == null || fieldValue.trim().equalsIgnoreCase("null")|| fieldValue.length()<=0) fieldValue="";
+ fieldDefValue = nvl(fieldDefValue);
+ fieldDefDisplay = nvl(fieldDefDisplay);
+ }
+
+ }
+ } else {
+ lookup.trimToSize();
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ if(value != null && value.getId() != null && value.getName() != null ) {
+ fieldDefValue = nvl(value.getId());
+ if (fieldValue != null && fieldValue.equals(value.getId())) {
+ fieldDefDisplay = nvl(value.getName());
+ break;
+ }
+ else {
+ fieldDefValue = "";
+ fieldDefDisplay = "";
+ }
+ }
+ }
+ if (fieldDefDisplay == null || fieldDefDisplay.length()<=0) {
+ fieldDefDisplay = nvl(fieldDefValue);
+ }
+ }
+ }catch(Exception e) { //throw new RaptorRuntimeException(e);
+ }
+
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+ if(isVisible()) {
+ /* return "<input type=text class=\"text\" size=30 maxlength=50 id=\"" + fieldName +"\" name=\"" + fieldName + "\" value=\""
+ + nvl(fieldDefValue) + "\">\n" + "<a href=\"javascript:showArgPopupNew('"
+ + fieldName + "', 'document.formd." + fieldName
+ + "')\"><img border=0 src=\"" + AppUtils.getImgFolderURL()
+ + "shareicon.gif\" " + getHelpLink(fieldName);
+ */
+ String progress = "<div id=\""+fieldName+"_content\" style=\"display:none;width:100%;height:100%;align:center;\"> <img src=\""+AppUtils.getImgFolderURL()+"progress.gif\" border=\"0\" alt=\"Loading, please wait...\" /></div> ";
+
+ return progress+"<input type=\"text\" class=\"text\" name=\""+getFieldName()+"_display\" readonly=true value=\""+ fieldDefDisplay +"\""+ getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName) + " \n "
+ +"<input type=\"hidden\" name=\""+getFieldName()+"\" value=\""+nvl(fieldDefValue)+"\"/> \n &nbsp;\n"
+ + "<a href=\"javascript:showArgPopupNew('"
+ + fieldName + "', 'document.formd." + fieldName
+ + "')\"><img border=0 src=\"" + AppUtils.getImgFolderURL()
+ + "shareicon.gif\" " + getHelpLink(fieldName);
+
+ } else
+ return "";
+ } else if (fieldType.equals(FFT_TEXT)) {
+ IdNameValue value = null;
+ String strValue = "";
+ boolean avail_ReadOnly = false;
+ try {
+ IdNameList lookup = getLookupList();
+ IdNameSql lu = null;
+ String valueSQL = "";
+ String oldSQL = "";
+ if(lookup instanceof IdNameSql) {
+ lu = (IdNameSql) lookup;
+ if(lu.getSql().length() > 0) {
+ valueSQL = lu.getSql();
+ avail_ReadOnly = (valueSQL.toLowerCase().indexOf(readOnlyInSql)!=-1);
+ //System.out.println("OLD SQL TEXT" + valueSQL);
+ //oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value1 = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value1 = (String) entry.getValue();
+ if (value1.length() <=0) {
+ value1 = "NULL";
+ valueSQL = Utils.replaceInString(valueSQL, "'["+entry.getKey()+"]'", value1);
+ valueSQL = Utils.replaceInString(valueSQL, "["+entry.getKey()+"]", value1);
+ } else {
+ valueSQL = Utils.replaceInString(valueSQL, "["+entry.getKey()+"]", value1);
+ }
+ }
+ // should be value one.
+ //lookup = new IdNameSql(-1,valueSQL,lu.getDefaultSQL());
+ }
+ }
+ //lookupList = lookup;
+ //System.out.println("8888888 88 " + valueSQL);
+ }
+ if(valueSQL!=null && valueSQL.length()>0) {
+ DataSet ds = ConnectionUtils.getDataSet(valueSQL.toString(), dbInfo);
+ strValue = ds.getString(0,1);
+ if(avail_ReadOnly) readOnly = ds.getString(0, 2).toUpperCase().startsWith("Y")||ds.getString(0, 2).toUpperCase().startsWith("T");;
+ }
+ }catch(Exception e) { //throw new RaptorRuntimeException(e);
+ }
+ String returnString = "";
+ String timestamp ="", timestamphr = "", timestampmin = "", timestampsec = "";
+
+ returnString = "<input type=text class=\"text\" size="+(validationType.equals(VT_DATE)?"10":"30") +" maxlength=50 id=\"" + fieldName +"\" name=\""
+ + fieldName + "\" id='"+ fieldName + "' "
+ + (((validationType.equals(VT_DATE)||validationType.equals(VT_TIMESTAMP_HR) ||validationType.equals(VT_TIMESTAMP_MIN) ||validationType.equals(VT_TIMESTAMP_SEC))&& !inSchedule) ? "" : "")
+ + getCallableJavascript(getFieldName(), rr) + " " + (readOnly?" readonly ":" ") + " value=\"";
+
+
+ /*if(getFieldDefaultSQL()!=null)
+ returnString += nvl(value.getId());
+ else
+ returnString += fieldValue;
+ */
+ if(fieldValue!=null && fieldValue.length()>0 && (!(fieldValue.toUpperCase().indexOf("SELECT ")!= -1 && fieldValue.toUpperCase().indexOf("FROM")!= -1)) ) {
+ if(validationType.startsWith("TIMESTAMP")) {
+ returnString += nvl((fieldValue!=null)?fieldValue.split(" ")[0]:"");
+ if(fieldValue!=null && fieldValue.length()>0) {
+ timestamp = (fieldValue.split(" ").length > 1)?fieldValue.split(" ")[1]:"";
+ String timestampArr[] = timestamp.split(":");
+ if((timestampArr.length == 1) || (timestampArr.length == 2) || (timestampArr.length == 3))
+ timestamphr = timestampArr[0];
+ if((timestampArr.length == 2) || (timestampArr.length == 3))
+ timestampmin = timestampArr[1];
+ if(timestampArr.length == 3)
+ timestampsec = timestampArr[2];
+ }
+
+ } else returnString += fieldValue;
+
+ } else if(getFieldDefaultSQL()!=null) {
+
+ if(validationType.startsWith("TIMESTAMP")) {
+ returnString += nvl((strValue.length()>0)?strValue.split(" ")[0]:"");
+ if(strValue.length()>0) {
+ timestamp = (strValue.split(" ").length > 1)?strValue.split(" ")[1]:"";
+ String timestampArr[] = timestamp.split(":");
+ if((timestampArr.length == 1) || (timestampArr.length == 2) || (timestampArr.length == 3))
+ timestamphr = timestampArr[0];
+ if((timestampArr.length == 2) || (timestampArr.length == 3))
+ timestampmin = timestampArr[1];
+ if(timestampArr.length == 3)
+ timestampsec = timestampArr[2];
+ }
+
+ } else if (nvl(strValue).length()>0) {
+ returnString += strValue;
+ } else
+ returnString += nvl((value!=null)?value.getId():"");
+ } else if (nvl(strValue).length()>0) {
+ returnString += strValue;
+ } else
+ returnString += nvl((value!=null)?value.getId():"");
+
+
+ /*returnString += "\">"
+ + (validationType.equals(VT_DATE) ? "\n\t\t\t<a href=\"#\" onClick=\"window.dateField=document."
+ + HTML_FORM
+ + "."
+ + fieldName
+ + ";calendar=window.open('"
+ + AppUtils.getRaptorActionURL()
+ + "popup.calendar','cal','WIDTH=200,HEIGHT=250');return false;\">"
+ + "\n\t\t\t\t<img src=\""
+ + AppUtils.getImgFolderURL()
+ + "calender_icon.gif\" align=absmiddle border=0 width=20 height=20></a>"
+ : ""); */
+
+ SimpleDateFormat dtf = new SimpleDateFormat("MM/dd/yyyy");
+ String stRangeText = this.getRangeStartDate() == null ? null : dtf.format(this.getRangeStartDate().getTime());
+ String endRangeText = this.getRangeEndDate() == null ? null : dtf.format(this.getRangeEndDate().getTime());
+ /////////////////////////
+
+ //get the date sqls
+
+ //System.out.println("////////////start range date before Start" + this.getRangeStartDateSQL());
+
+ if (this.getRangeStartDateSQL() != null && this.getRangeStartDateSQL().trim().toLowerCase().startsWith("select")){
+ //System.out.println("////////////start range date Starting");
+ String SQL = this.getRangeStartDateSQL();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String v = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ v = (String) entry.getValue();
+ //System.out.println("///////// key is " + entry.getKey() + " = " + v);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", v);
+ }
+
+ }
+ //System.out.println("////////////start range date sql created" + SQL);
+ try{
+ DataSet ds = ConnectionUtils.getDataSet(SQL.toString(), dbInfo);
+ //System.out.println("////////////start range date is : " + ds.get(0));
+ dtf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar tStart = Calendar.getInstance();
+ tStart.setTime(dtf.parse(ds.getString(0,0)));
+ dtf = new SimpleDateFormat("MM/dd/yyyy");
+ stRangeText = dtf.format(tStart.getTime().getTime()-MILLIS_IN_DAY);
+
+ }catch(Exception e){
+ System.out.println("Exception////////// : start range date is : " + e);
+ }
+ }
+
+ if (this.getRangeEndDateSQL() != null && this.getRangeEndDateSQL().trim().toLowerCase().startsWith("select")){
+ //System.out.println("////////////end range date Starting");
+ String SQL = this.getRangeEndDateSQL();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String v = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ v = (String) entry.getValue();
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", v);
+ }
+
+ }
+ try{
+ DataSet ds = ConnectionUtils.getDataSet(SQL.toString(), dbInfo);
+ //System.out.println("////////////end range date is : " + ds.get(0));
+ dtf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Calendar tStart = Calendar.getInstance();
+ tStart.setTime(dtf.parse(ds.getString(0,0)));
+ dtf = new SimpleDateFormat("MM/dd/yyyy");
+ //endRangeText = dtf.format(tStart.getTime());
+ endRangeText = dtf.format(tStart.getTime().getTime()+MILLIS_IN_DAY);
+ }catch(Exception e){
+ System.out.println("Exception////////// : end range date is : " + e);
+ }
+ }
+
+
+ //////////////////////
+ String calendarOnClickMethodCall = "";
+ String timeStampStr = "";
+ if (stRangeText == null || endRangeText == null)
+ calendarOnClickMethodCall = "'oCalendar.select(document." + HTML_FORM + "." + fieldName + ", event,\""+ Globals.getCalendarOutputDateFormat() +"\"); return false;'";
+ else
+ calendarOnClickMethodCall = "'oCalendar=new CalendarPopup(\"calendarDiv\", \"calendarFrame\");oCalendar.setCssPrefix(\"raptor\");oCalendar.addDisabledDates(null, \"" + stRangeText + "\"); oCalendar.addDisabledDates(\"" + endRangeText + "\", null); oCalendar.select(document." + HTML_FORM + "." + fieldName + ", event,\""+ Globals.getCalendarOutputDateFormat() +"\"); return false;'";
+ returnString += "\" " + getHelpLink(fieldName)
+ + (validationType.equals(VT_DATE) || validationType.equals(VT_TIMESTAMP_HR) || validationType.equals(VT_TIMESTAMP_MIN) || validationType.equals(VT_TIMESTAMP_SEC)
+ ? "\n\t\t\t<img src='" + AppUtils.getImgFolderURL()+ "calender_icon.gif' align=absmiddle border=0 width='20' height='20' onClick=" + calendarOnClickMethodCall + " style='cursor:hand'>"
+ : "");
+ if(validationType.equals(VT_TIMESTAMP_HR) || validationType.equals(VT_TIMESTAMP_MIN) || validationType.equals(VT_TIMESTAMP_SEC) ) {
+ //Add Hours/Minutes and Seconds.
+ timeStampStr = " <font class=rtabletext>Hour&nbsp;</font><select id = \""+ fieldName+ "_Hr\" name=\""+ fieldName+ "_Hr\" "+ (readOnly?"disabled":"")+" >";
+ int hour = 0;
+ int t_hr = 0;
+ try {
+ hour = Integer.parseInt(nvl(rr.getParamValue(fieldName+"_Hr"),"0"));
+ if(hour == 0) {
+ if(inSchedule) hour = Integer.parseInt(nvl(((String)formValues.get(fieldName+"_Hr")),"0"));
+ }
+// System.out.println("Hour =" + hour);
+ } catch (NumberFormatException ex) { hour = 0; }
+ try {
+ t_hr = Integer.parseInt(timestamphr);
+// System.out.println("THR =" + t_hr);
+ } catch (NumberFormatException ex) { t_hr = 0;}
+
+ if(hour <= 0) hour = t_hr;
+ // System.out.println("Form Values 887 " + formValues);
+ /*if (formValues.containsKey(fieldDisplayName+"_Hr")){
+ formValues.remove(fieldDisplayName+"_Hr");
+ formValues.put(fieldDisplayName+"_Hr", hour);
+ } else
+ formValues.put(fieldDisplayName+"_Hr", hour);
+ System.out.println("Form Values 887 " + formValues);
+ */
+
+ //int t_min = Integer.parseInt(timestampmin);
+ //int t_sec = Integer.parseInt(timestampsec);
+ for (int i = 0; i < 24; i++) {
+ if(i==0) timeStampStr += "<option value=\"" + i + "\""+ ((hour==i)?" selected":"") +">00</option>";
+ else if(i<10) timeStampStr += "<option value=\"" + i + "\""+ ((hour==i)?" selected":"") +">" + "0"+i + "</option>";
+ else timeStampStr += "<option value=\"" + i + "\""+ ((hour==i)?" selected":"") +">" + i + "</option>";
+
+ }
+ timeStampStr += "</select>";
+ }
+ //Minutes
+ if( validationType.equals(VT_TIMESTAMP_MIN) || validationType.equals(VT_TIMESTAMP_SEC) ) {
+ int minutes = 0;
+ int t_min = 0;
+ try {
+ minutes = Integer.parseInt(nvl(rr.getParamValue(fieldName+"_Min"),"0"));
+ if(minutes == 0) {
+ if(inSchedule) minutes = Integer.parseInt(nvl(((String)formValues.get(fieldName+"_Min")),"0"));
+ }
+ } catch (NumberFormatException ex) {minutes = 0;}
+ try {
+ t_min = Integer.parseInt(timestampmin);
+ } catch (NumberFormatException ex) { t_min = 0;}
+
+ if(minutes <= 0) minutes = t_min;
+ /*if (formValues.containsKey(fieldDisplayName+"_Min")){
+ formValues.remove(fieldDisplayName+"_Min");
+ formValues.put(fieldDisplayName+"_Min", minutes);
+ } else
+ formValues.put(fieldDisplayName+"_Min", minutes);
+ */
+ timeStampStr += " <font class=rtabletext>Min&nbsp;</font><select id = \""+ fieldName+ "_Min\" name=\""+ fieldName+ "_Min\" "+ (readOnly?"disabled":"")+" >";
+ for (int i = 0; i < 60; i++) {
+ if(i==0) timeStampStr += "<option value=\"" + i + "\""+ ((minutes==i)?" selected":"") +">00</option>";
+ else if(i<10) timeStampStr += "<option value=\"" + i + "\""+ ((minutes==i)?" selected":"") +">" + "0"+i + "</option>";
+ else timeStampStr += "<option value=\"" + i + "\""+ ((minutes==i)?" selected":"") +">" + i + "</option>";
+ }
+ timeStampStr += "</select>";
+ }
+ //Seconds
+ if( validationType.equals(VT_TIMESTAMP_SEC) ) {
+ int seconds = 0;
+ int t_sec = 0;
+ try {
+ seconds = Integer.parseInt(nvl(rr.getParamValue(fieldName+"_Sec"),"0"));
+ if(seconds == 0) {
+ if(inSchedule) seconds = Integer.parseInt(nvl(((String)formValues.get(fieldName+"_Sec")),"0"));
+ }
+ } catch (NumberFormatException ex) {seconds = 0;}
+ try {
+ t_sec = Integer.parseInt(timestampsec);
+ } catch (NumberFormatException ex) { t_sec = 0;}
+
+ if(seconds <= 0) seconds = t_sec;
+ /*if (formValues.containsKey(fieldDisplayName+"_Sec")){
+ formValues.remove(fieldDisplayName+"_Sec");
+ formValues.put(fieldDisplayName+"_Sec", seconds);
+ } else
+ formValues.put(fieldDisplayName+"_Sec", seconds);
+ */
+ timeStampStr += " <font class=rtabletext>Sec&nbsp;</font><select id = \""+ fieldName+ "_Sec\" name=\""+ fieldName+ "_Sec\" "+ (readOnly?"disabled":"")+" >";
+ for (int i = 0; i < 60; i++) {
+ if(i==0) timeStampStr += "<option value=\"" + i + "\""+ ((seconds==i)?" selected":"") +">00</option>";
+ else if(i<10) timeStampStr += "<option value=\"" + i + "\""+ ((seconds==i)?" selected":"") +">" + "0"+i + "</option>";
+ else timeStampStr += "<option value=\"" + i + "\""+ ((seconds==i)?" selected":"") +">" + i + "</option>";
+ }
+ timeStampStr += "</select>";
+ }
+
+ returnString += timeStampStr;
+ String checkboxStr = "";
+ if(inSchedule && (validationType.equals(VT_DATE) || validationType.equals(VT_TIMESTAMP_HR) || validationType.equals(VT_TIMESTAMP_MIN) || validationType.equals(VT_TIMESTAMP_SEC)) ) {
+ if(!Globals.isScheduleDateParamAutoIncr()) {
+ checkboxStr = /*checkboxStr +" "+ */ "<input type=\"checkbox\" name=\""+getFieldName()+"_auto\" value=\"_auto\" checked/>";
+ } else {
+ checkboxStr = /*checkboxStr +" "+ */"<input type=\"hidden\" name=\""+getFieldName()+"_auto\" value=\"_auto\"/>";
+ }
+ /*if(validationType.equals(VT_TIMESTAMP_HR) || validationType.equals(VT_TIMESTAMP_MIN) || validationType.equals(VT_TIMESTAMP_SEC)) {
+ checkboxStr = checkboxStr +" "+ "<input type=\"hidden\" name=\""+getFieldName()+"_Hr_auto\" value=\"_auto\"/>";
+ }
+ if(validationType.equals(VT_TIMESTAMP_MIN) || validationType.equals(VT_TIMESTAMP_SEC)) {
+ checkboxStr = checkboxStr +" "+ "<input type=\"hidden\" name=\""+getFieldName()+"_Min_auto\" value=\"_auto\"/>";
+ }
+ if(validationType.equals(VT_TIMESTAMP_SEC)) {
+ checkboxStr = checkboxStr +" "+ "<input type=\"hidden\" name=\""+getFieldName()+"_Sec_auto\" value=\"_auto\"/>";
+ }*/
+ }
+ if(isVisible())
+ return returnString+checkboxStr;
+ else return "";
+ } else if (fieldType.equals(FFT_TEXTAREA)) {
+
+ if(nvl(fieldValue).length()>0) {
+ fieldValue = Pattern.compile("(^[\r\n])|\\([\\']", Pattern.DOTALL).matcher(fieldValue).replaceAll("");
+ fieldValue = Pattern.compile("[\\']\\)", Pattern.DOTALL).matcher(fieldValue).replaceAll("");
+ fieldValue = fieldValue.replaceAll("','",","); // changed from "|"
+ fieldValue = fieldValue.replaceAll("' , '","\r\n");
+ }
+
+ if(isVisible())
+ return "<textarea rows=4 cols=30 id=\"" + fieldName +"\" name=\"" + fieldName + "\""+ getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName) + nvl(fieldValue)
+ + "</textarea>";
+ else
+ return "";
+ } else if (fieldType.equals(FFT_COMBO_BOX)) {
+ StringBuffer sb = new StringBuffer();
+ //System.out.println("COMBO BOX " + fieldName);
+ String oldSQL = "";
+
+ IdNameList lookup = getLookupList();
+ try {
+ if(!hasPredefinedList) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ //System.out.println("FORMFIELD 6666667 First" + ((IdNameSql)lookup).getSql());
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ if (value!=null && (value.length() <=0 || value.equals("NULL"))) {
+ value = "NULL";
+ SQL = Utils.replaceInString(SQL, "'["+entry.getKey()+"]'", value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ } else {
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+ }
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //}
+ lookupList = lookup;
+
+
+ //}
+ try {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ break;
+ }
+
+ String selectedValue = "";
+ int count = 0;
+ sb.append("<div id=\""+fieldName+"_content\" style=\"display:none;width:100%;height:100%;align:center;\"> <img src=\""+AppUtils.getImgFolderURL()+"progress.gif\" border=\"0\" alt=\"Loading, please wait...\" /></div>");
+ sb.append("<select id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" "+ (readOnly?"disabled":"")+" size=1 " + getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName));
+ if (!required)
+ sb.append("<option value=\"\">-->select value<--");
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ if(value != null && value.getId() != null && value.getName() != null ) {
+ /*if (count == 0 && required) {
+ selectedValue = value.getId();
+ count++;
+ } else if (nvl(fieldValue).length()>0){
+ if (fieldValue != null && fieldValue.equals(value.getId())){
+ selectedValue = value.getId();
+ }
+ count++;
+ } else {
+ count++;
+ } */
+ if (count == 0) {
+ if(required){
+ selectedValue = value.getId();
+ }
+ count++;
+ }
+ sb.append("<option value=\"");
+ sb.append(value.getId());
+
+ if (nvl(fieldValue).length()>0) {
+ if (fieldValue.equals(value.getId())) { // || (value.isDefaultValue()))
+ sb.append("\" selected>");
+ selectedValue = value.getId();
+ }
+ else
+ sb.append("\">");
+ } else {
+ if(value!=null && value.isDefaultValue()) {
+ sb.append("\" selected>");
+ selectedValue = value.getId();
+ } else {
+ sb.append("\">");
+ }
+ }
+
+ sb.append(value.getName());
+ sb.append("</option>\n");
+ }
+ } // for
+ if (formValues.containsKey(fieldDisplayName)){
+ formValues.remove(fieldDisplayName);
+ }
+ formValues.put(fieldDisplayName, selectedValue);
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+ //System.out.println("FORMFIELD 6666667 " + ((IdNameSql)lookup).getSql());
+ if(sb.length()<=0) {
+ sb.append("<div id=\""+fieldName+"_content\" style=\"display:none;width:100%;height:100%;align:center;\"> <img src=\""+AppUtils.getImgFolderURL()+"progress.gif\" border=\"0\" alt=\"Loading, please wait...\" /></div>");
+ sb.append("<select id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" "+ (readOnly?"disabled":"")+" size=1 " + getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName));
+ }
+
+ sb.append("</select>");
+ if( isVisible())
+ return sb.toString();
+ else return "";
+ } else if (fieldType.equals(FFT_LIST_BOX)) {
+ StringBuffer sb = new StringBuffer();
+ String oldSQL = "";
+ IdNameList lookup = null;
+
+ lookup = getLookupList();
+ String selectedValue = "";
+ try {
+ if(!hasPredefinedList) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //}
+ lookupList = lookup;
+ //}
+ try {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ break;
+ }
+
+ int iCnt = 0;
+ sb.append("<select id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" "+ (readOnly?"disabled":"")+" size=4 " + getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName));
+ if (!required)
+ sb.append("<option value=\"\">-->select value<--");
+
+ for (lookup.resetNext(); lookup.hasNext(); iCnt++) {
+ IdNameValue value = lookup.getNext();
+ sb.append("<option value=\"");
+ sb.append((value!=null)?value.getId():"");
+ if (nvl(fieldValue).length()>0) {
+ if (fieldValue.equals((value!=null)?value.getId():"") || (fieldValue.equals("") && required && iCnt == 0)) {
+ sb.append("\" selected>");
+ selectedValue = value.getId();
+ } else {
+ sb.append("\">");
+ }
+ } else {
+ if(value!=null && value.isDefaultValue()) {
+ sb.append("\" selected>");
+ selectedValue = value.getId();
+ } else {
+ sb.append("\">");
+ }
+ }
+ if (formValues.containsKey(fieldDisplayName)){
+ formValues.remove(fieldDisplayName);
+ }
+ formValues.put(fieldDisplayName, selectedValue);
+
+ sb.append((value!=null)?value.getName():"");
+ sb.append("</option>\n");
+ } // for
+
+ // lookup.clearData();
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+
+ if(sb.length()<=0) {
+ sb.append("<select id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" "+ (readOnly?"disabled":"")+" size=4 " + getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName));
+ }
+
+ sb.append("</select>");
+
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+ if(isVisible())
+ return sb.toString();
+ else
+ return "";
+ } else if (fieldType.equals(FFT_HIDDEN)) {
+ StringBuffer sb = new StringBuffer();
+ String oldSQL = "";
+ String progress = "<div id=\""+fieldName+"_content\" style=\"display:none;width:100%;height:100%;align:center;\"> <img src=\""+AppUtils.getImgFolderURL()+"progress.gif\" border=\"0\" alt=\"Loading, please wait...\" /></div> ";
+ sb.append(progress);
+ sb.append("<input id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" type=\"hidden\"");
+ IdNameList lookup = null;
+
+ try {
+ lookup = getLookupList();
+ if(lookup != null) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ //System.out.println("SQL HIDDEN 1 " + SQL);
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ //System.out.println("HIDDEN " + "["+entry.getKey()+"]" + "-" + value);
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //System.out.println("SQL HIDDEN 2 " + SQL);
+ //}
+ lookupList = lookup;
+ //}
+ if(nvl(fieldValue).length()>0 && (dependsOn == null || dependsOn.length()<=0)) {
+ sb.append(" value=\"");
+ sb.append((fieldValue!=null)?fieldValue:"");
+ sb.append("\">");
+ } else if (lookup != null) {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+ int iCnt = 0;
+ for (lookup.resetNext(); lookup.hasNext(); iCnt++) {
+ IdNameValue value = lookup.getNext();
+ //System.out.println("HIDDEN " + value.getId() + " " + value.getName());
+ sb.append(" value=\"");
+ sb.append((value!=null)?value.getId():"");
+ sb.append("\">");
+ break;
+ } // for
+ if(lookup.size()<=0) {
+ sb.append(" value=\"");
+ sb.append("\">");
+
+ }
+ } else {
+ sb.append(" value=\"");
+ sb.append((fieldValue!=null)?fieldValue:"");
+ sb.append("\"/>");
+ }
+ } else {
+ sb.append(" value=\"");
+ sb.append((fieldValue!=null)?fieldValue:"");
+ sb.append("\"/>");
+ }
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ // lookup.clearData();
+ } catch (Exception e) {
+ sb.append(" value=\"\"/>");
+ //throw new RaptorRuntimeException(e);
+ }
+
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+ //if(isVisible())
+ return sb.toString() ;
+ } else if (fieldType.equals(FFT_RADIO_BTN)) {
+ StringBuffer sb = new StringBuffer();
+ if (!required) {
+ sb.append("<input id=\"" + fieldName +"\" type=radio name=\"");
+ sb.append(fieldName);
+ sb.append("\" value=\"\"");
+ if (fieldValue.length() == 0)
+ sb.append(" checked");
+ //sb.append( getCallableJavascript(getFieldName(), rr) );
+ sb.append(getHelpLink(fieldName)+ " Any<br>\n");
+ }
+
+ try {
+ IdNameList lookup = getLookupList();
+ lookup.loadUserData(0, "", getDbInfo(),getUserId());
+ String selectedValue = "";
+
+ int iCnt = 0;
+ for (lookup.resetNext(); lookup.hasNext(); iCnt++) {
+ IdNameValue value = lookup.getNext();
+ sb.append("<input id=\"" + fieldName +"\" type=radio name=\"");
+ sb.append(fieldName);
+ sb.append("\" value=\"");
+ sb.append((value!=null)?value.getId():"");
+ if (nvl(fieldValue).length()>0) {
+ if (fieldValue.equals((value!=null)?value.getId():"") || (fieldValue.equals("") && required && iCnt == 0)) {
+ sb.append("\" checked>");
+ selectedValue = value.getId();
+ } else {
+ sb.append("\">");
+ }
+ } else {
+ if(value!=null && value.isDefaultValue()) {
+ sb.append("\" checked>");
+ selectedValue = value.getId();
+ } else {
+ sb.append("\">");
+ }
+ }
+ sb.append((value!=null)?value.getName():"");
+ sb.append("<br>\n");
+ } // for
+ if (formValues.containsKey(fieldDisplayName)){
+ formValues.remove(fieldDisplayName);
+ }
+ formValues.put(fieldDisplayName, selectedValue);
+
+ // lookup.clearData();
+ } catch (Exception e) {
+ throw new RaptorRuntimeException(e);
+ }
+ if(isVisible())
+ return sb.toString() ;
+ else
+ return "";
+ } else if (fieldType.equals(FFT_CHECK_BOX)) {
+ StringBuffer sb = new StringBuffer();
+
+ fieldValue = '|' + fieldValue + '|';
+ int count = 0 ;
+ try {
+ String selectedValue = "";
+ IdNameList lookup = getLookupList();
+ if(lookup != null) {
+ lookup.loadUserData(0, "", getDbInfo(), getUserId());
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ count++;
+ IdNameValue value = lookup.getNext();
+ sb.append("<input id=\"" + fieldName +"\" type=checkbox name=\"");
+ sb.append(fieldName);
+ sb.append("\" value=\"");
+ sb.append((value!=null)?value.getId():"");
+
+ if (!fieldValue.equals("||")) {
+ if (fieldValue.indexOf('|' + ((value!=null)?value.getId():"") + '|') >= 0) { // || (value.isDefaultValue()))
+ sb.append("\" checked " + getHelpLink(fieldName));
+ selectedValue = value.getId();
+ }
+ else
+ sb.append("\"" + getHelpLink(fieldName));
+ } else {
+ if(value!=null && value.isDefaultValue()) {
+ sb.append("\" checked " + getHelpLink(fieldName));
+ selectedValue = value.getId();
+ } else {
+ sb.append("\"" + getHelpLink(fieldName));
+ }
+ }
+
+ if(!(/*(value.getName().equals("Y")||value.getName().equals("N")) && */(!lookup.hasNext()) && count == 1))
+ sb.append((value!=null)?value.getName():"");
+ sb.append("<br>\n");
+ } // for
+
+ if (formValues.containsKey(fieldDisplayName)){
+ formValues.remove(fieldDisplayName);
+ }
+ formValues.put(fieldDisplayName, selectedValue);
+ }
+
+ // lookup.clearData();
+ } catch (Exception e) {
+ throw new RaptorRuntimeException(e);
+ }
+ if(isVisible())
+ return sb.toString();
+ else
+ return "";
+ } else if (fieldType.equals(FFT_LIST_MULTI)) {
+ StringBuffer sb = new StringBuffer();
+ String oldSQL = "";
+
+ fieldValue = '|' + fieldValue + '|';
+ IdNameList lookup = getLookupList();
+ try {
+ if(!hasPredefinedList) {
+ //if(dependsOn != null && dependsOn != "") {
+ //if(dependsOn != null && dependsOn != "" ) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ if(formValues != null) {
+ Set set = formValues.entrySet();
+ String value = "";
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ value = (String) entry.getValue();
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", value);
+ }
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ }
+ //}
+ lookupList = lookup;
+ //}
+
+ lookup.loadUserData(0, "", getDbInfo(),getUserId());
+ }
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ break;
+ }
+
+ sb.append("<div id=\""+fieldName+"_content\" style=\"display:none;width:100%;height:100%;align:center;\"> <img src=\""+AppUtils.getImgFolderURL()+"progress.gif\" border=\"0\" alt=\"Loading, please wait...\" /></div>");
+ sb.append("<select id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" "+ (readOnly?"disabled":"")+" size=\""+ multiSelectListSize +"\" multiple " + getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName));
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ sb.append("<option value=\"");
+ sb.append((value!=null)?value.getId():"");
+ if (!fieldValue.equals("||")) {
+ if (fieldValue.indexOf('|' + ((value!=null)?value.getId():"") + '|') >= 0) // || (value.isDefaultValue()))
+ sb.append("\" selected>");
+ else
+ sb.append("\">");
+ } else {
+ if(value!=null && value.isDefaultValue()) {
+ sb.append("\" selected>");
+ } else {
+ sb.append("\">");
+ }
+ }
+ sb.append((value!=null)?value.getName():"");
+ sb.append("</option>\n");
+ } // for
+
+ // lookup.clearData();
+ } catch (Exception e) {
+ //throw new RaptorRuntimeException(e);
+ }
+ if(!hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+ if(sb.length()<=0) {
+ sb.append("<div id=\""+fieldName+"_content\" style=\"display:none;width:100%;height:100%;align:center;\"> <img src=\""+AppUtils.getImgFolderURL()+"progress.gif\" border=\"0\" alt=\"Loading, please wait...\" /></div>");
+ sb.append("<select id=\"" + fieldName +"\" name=\"");
+ sb.append(fieldName);
+ sb.append("\" "+ (readOnly?"disabled":"")+" size=\""+ multiSelectListSize +"\" multiple " + getCallableJavascript(getFieldName(), rr) + getHelpLink(fieldName));
+ }
+ sb.append("</select>");
+ if(isVisible())
+ return sb.toString();
+ else
+ return "";
+ } else if (fieldType.equals(FFT_BLANK)) {
+ StringBuffer sb = new StringBuffer();
+ sb.append("&nbsp;");
+ return sb.toString();
+ } else
+ throw new org.openecomp.portalsdk.analytics.error.RaptorRuntimeException("FormField.getHtml: Unsupported form field type");
+ } // getHtml
+
+ public String getValidateJavaScript() {
+ StringBuffer javaScript = new StringBuffer();
+
+ if (fieldType.equals(FFT_TEXT_W_POPUP) || fieldType.equals(FFT_TEXT)
+ || fieldType.equals(FFT_TEXTAREA)) {
+ if (required) {
+ javaScript.append("\n\tif(document.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".value==\"\") {\n\t\talert(\"Please enter value for ");
+ javaScript.append(fieldDisplayName);
+ javaScript.append("\");\n\t\tdocument.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".focus();\n\t\tdocument.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".select();\n\t\treturn false;\n\t}\n");
+ } // if
+
+ if (!validationType.equals(VT_NONE)) {
+ javaScript.append("\n\tif(! ");
+ if (validationType.equals(VT_DATE)||validationType.equals(VT_TIMESTAMP_HR)||validationType.equals(VT_TIMESTAMP_MIN)||validationType.equals(VT_TIMESTAMP_SEC))
+ javaScript.append("checkDate(");
+ else if (validationType.equals(VT_INT))
+ javaScript.append("checkInteger(");
+ else if (validationType.equals(VT_INT_POSITIVE))
+ javaScript.append("checkPositiveInteger(");
+ else if (validationType.equals(VT_INT_NON_NEGATIVE))
+ javaScript.append("checkNonNegativeInteger(");
+ else if (validationType.equals(VT_FLOAT))
+ javaScript.append("checkFloat(");
+ else if (validationType.equals(VT_FLOAT_POSITIVE))
+ javaScript.append("checkPositiveFloat(");
+ else if (validationType.equals(VT_FLOAT_NON_NEGATIVE))
+ javaScript.append("checkNonNegativeFloat(");
+ javaScript.append("document.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".value");
+ if (validationType.equals(VT_DATE)||validationType.equals(VT_TIMESTAMP_HR)||validationType.equals(VT_TIMESTAMP_MIN)||validationType.equals(VT_TIMESTAMP_SEC))
+ javaScript.append(", true");
+ javaScript.append(")) {\n\t\talert(\"");
+ javaScript.append(fieldDisplayName);
+ javaScript.append(" is not a valid ");
+ if (validationType.equals(VT_DATE)||validationType.equals(VT_TIMESTAMP_HR)||validationType.equals(VT_TIMESTAMP_MIN)||validationType.equals(VT_TIMESTAMP_SEC))
+ javaScript.append("date formatted "+ Globals.getCalendarOutputDateFormat());
+ else if (validationType.equals(VT_INT))
+ javaScript.append("integer");
+ else if (validationType.equals(VT_INT_POSITIVE))
+ javaScript.append("integer greater than zero");
+ else if (validationType.equals(VT_INT_NON_NEGATIVE))
+ javaScript.append("integer greater than or equal to zero");
+ else if (validationType.equals(VT_FLOAT))
+ javaScript.append("number");
+ else if (validationType.equals(VT_FLOAT_POSITIVE))
+ javaScript.append("number greater than zero");
+ else if (validationType.equals(VT_FLOAT_NON_NEGATIVE))
+ javaScript.append("number greater than or equal to zero");
+ javaScript.append(".\\nPlease enter a valid value.\");\n\t\tdocument.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".focus();\n\t\tdocument.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".select();\n\t\treturn false;\n\t}\n");
+ } // if
+ } // if
+ else if (fieldType.equals(FFT_CHECK_BOX)) {
+ if (required) {
+ javaScript.append("\n\tvar isChecked = false;");
+ javaScript.append("\n\tfor (var i=0; i < document.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".length; i++) { ");
+ javaScript.append("\n\t\tif(document.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append("[i].checked) {");
+ javaScript.append("\n\t\t\tisChecked = true;");
+ javaScript.append("\n\t\t\tbreak;");
+ javaScript.append("\n\t\t}");
+ javaScript.append("\n\t}");
+ javaScript.append("\n\tif(!isChecked) {");
+ javaScript.append("\n\t\talert(\"Please select at least one ");
+ javaScript.append(fieldDisplayName);
+ javaScript.append("\");\n\t\treturn false;");
+ javaScript.append("\n\t}");
+ } // if
+ } // else if FFT_CHECK_BOX
+ else if (fieldType.equals(FFT_LIST_MULTI)) {
+ if (required) {
+ javaScript.append("\n\tif(document.");
+ javaScript.append(HTML_FORM);
+ javaScript.append(".");
+ javaScript.append(fieldName);
+ javaScript.append(".selectedIndex == -1) {");
+ javaScript.append("\n\t\talert(\"Please select at least one ");
+ javaScript.append(fieldDisplayName);
+ javaScript.append("\");\n\t\treturn false;");
+ javaScript.append("\n\t}");
+ } // if
+ } // else if
+
+ return javaScript.toString();
+ } // getValidateJavaScript
+
+ public void setDbInfo(String dbInfo) {
+ this.dbInfo = dbInfo;
+ }
+
+ public String getDbInfo() {
+ return dbInfo;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+
+ public String getFieldDefaultSQL() {
+
+ return fieldDefaultSQL;
+ }
+
+
+ public void setFieldDefaultSQL(String fieldDefaultSQL) {
+
+ this.fieldDefaultSQL = fieldDefaultSQL;
+ }
+
+
+ public boolean isVisible() {
+
+ return visible;
+ }
+
+
+ public void setVisible(boolean visible) {
+
+ this.visible = visible;
+ }
+
+ public String getDependsOn() {
+ return dependsOn;
+ }
+
+ public void setDependsOn(String dependsOn) {
+ this.dependsOn = dependsOn;
+ }
+
+ public Calendar getRangeEndDate() {
+ if(rangeEndDate != null)
+ rangeEndDate.add(Calendar.DATE, 1);
+ return rangeEndDate;
+ }
+
+ public void setRangeEndDate(Calendar rangeEndDate) {
+ this.rangeEndDate = rangeEndDate;
+ }
+
+ public Calendar getRangeStartDate() {
+ if(rangeStartDate != null)
+ rangeStartDate.add(Calendar.DATE, -1);
+ return rangeStartDate;
+ }
+
+ public void setRangeStartDate(Calendar rangeStartDate) {
+ this.rangeStartDate = rangeStartDate;
+ }
+
+ public String getRangeEndDateSQL() {
+ return rangeEndDateSQL;
+ }
+
+ public void setRangeEndDateSQL(String rangeEndDateSQL) {
+ this.rangeEndDateSQL = rangeEndDateSQL;
+ }
+
+ public void setMultiSelectListSize(String multiSelectListSize) {
+ this.multiSelectListSize = multiSelectListSize;
+ }
+
+ public String getRangeStartDateSQL() {
+ return rangeStartDateSQL;
+ }
+
+ public void setRangeStartDateSQL(String rangeStartDateSQL) {
+ this.rangeStartDateSQL = rangeStartDateSQL;
+ }
+
+ public boolean isHasPredefinedList() {
+ return hasPredefinedList;
+ }
+
+ public void setHasPredefinedList(boolean hasPredefinedList) {
+ this.hasPredefinedList = hasPredefinedList;
+ }
+
+ public boolean isTriggerOtherFormFields() {
+ return triggerOtherFormFields;
+ }
+
+ public void setTriggerOtherFormFields(boolean triggerOtherFormFields) {
+ this.triggerOtherFormFields = triggerOtherFormFields;
+ }
+
+ public boolean isTriggerThisFormfield() {
+ return triggerThisFormfield;
+ }
+
+ public void setTriggerThisFormfield(boolean triggerThisFormfield) {
+ this.triggerThisFormfield = triggerThisFormfield;
+ }
+
+
+} // FormField
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.java
new file mode 100644
index 00000000..57fec736
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.java
@@ -0,0 +1,375 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.HashMap;
+import java.util.Iterator;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.view.DataRow;
+import org.openecomp.portalsdk.analytics.view.DataValue;
+import org.openecomp.portalsdk.analytics.view.HtmlFormatter;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatType;
+import org.openecomp.portalsdk.analytics.xmlobj.SemaphoreType;
+
+public class FormatProcessor extends RaptorObject {
+
+
+ private SemaphoreType semaphore = null;
+
+ private String colType = null;
+
+ private String dateFormat = null;
+
+ private HtmlFormatter defaultFormatter = null;
+
+ private HashMap formatters = null;
+
+ private HashMap convertedValues = null;
+
+ private boolean attemptNumericConversion = false;
+
+ public FormatProcessor(SemaphoreType sem, String colType, String dateFormat,
+ boolean attemptNumericConversion) {
+
+ super();
+
+ if (sem == null)
+ return;
+
+ this.semaphore = sem;
+ this.colType = colType;
+ this.dateFormat = dateFormat;
+
+ this.attemptNumericConversion = attemptNumericConversion;
+ if (attemptNumericConversion)
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter
+ .hasNext();) {
+ FormatType fmt = (FormatType) iter.next();
+ if (!isNumber(fmt.getLessThanValue())) {
+ this.attemptNumericConversion = false;
+ break;
+ } // if
+ } // for
+
+ formatters = new HashMap(semaphore.getFormatList().getFormat().size() * 4 / 3);
+ convertedValues = new HashMap(semaphore.getFormatList().getFormat().size() * 4 / 3);
+
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter.hasNext();) {
+ FormatType fmt = (FormatType) iter.next();
+ if ((fmt.getFormatId() == null) || (fmt.getFormatId().length() <= 0)) {
+ defaultFormatter = new HtmlFormatter(fmt.isBold(), fmt.isItalic(), fmt
+ .isUnderline(), fmt.getBgColor(), fmt.getFontColor(), fmt
+ .getFontFace(), fmt.getFontSize(), fmt.getAlignment());
+ } else {
+ formatters.put(fmt.getFormatId(), new HtmlFormatter(fmt.isBold(), fmt
+ .isItalic(), fmt.isUnderline(), fmt.getBgColor(), fmt.getFontColor(),
+ fmt.getFontFace(), fmt.getFontSize(), fmt.getAlignment()));
+ convertedValues.put(fmt.getFormatId(), convertValue(fmt.getLessThanValue()));
+ }
+ } // for
+ } // FormatProcessor
+
+ private String convertValue(String origValue) {
+
+ if (colType.equals(AppConstants.CT_DATE))
+ return convertDateValue(origValue);
+ else if (colType.equals(AppConstants.CT_NUMBER))
+ return convertNumericValue(origValue);
+ else if (attemptNumericConversion)
+ return convertUnknownValue(origValue);
+ else
+ return origValue;
+ } // convertValue
+
+ private String convertDateValue(String origValue) {
+
+ // Converts to YYYY-MM-DD if possible
+ if (nvl(dateFormat).length() == 0 || nvl(origValue).length() == 0)
+ return origValue;
+
+ if (dateFormat.equals("MM/DD/YYYY") && origValue.length() == 10)
+ // Special processing for the default date format - for saving DB
+ // calls
+ return origValue.substring(6, 10) + "-" + origValue.substring(0, 2) + "-"
+ + origValue.substring(3, 5);
+
+ try {
+ // DataSet ds = DbUtils.executeQuery("SELECT TO_CHAR(TO_DATE('" + origValue + "', '"
+ // + dateFormat + "'), 'YYYY-MM-DD') val FROM DUAL");
+
+ String sql = Globals.getGenerateSqlVisualDual();
+ DataSet ds = DbUtils.executeQuery("SELECT TO_CHAR(TO_DATE('" + origValue + "', '"
+ + dateFormat + "'), 'YYYY-MM-DD') val"+sql);
+
+ if (ds.getRowCount() > 0)
+ return ds.getString(0, 0);
+ } catch (Exception e) {
+ }
+
+ return origValue;
+ } // convertDateValue
+
+ private String convertNumericValue(String origValue) {
+
+ // Converts to [20 pos.5 pos] if possible
+ if (nvl(origValue).length() == 0)
+ return origValue;
+ boolean isNegative = false;
+
+ StringBuffer integerValue = new StringBuffer();
+ StringBuffer fractionValue = new StringBuffer();
+
+ boolean beforeDecimalPoint = true;
+ for (int i = 0; i < origValue.length(); i++) {
+ char c = origValue.charAt(i);
+ if (c == '.')
+ beforeDecimalPoint = false;
+ else if (c == '-' && integerValue.length() == 0)
+ isNegative = true;
+ // else
+ // if(c=='0'||c=='1'||c=='2'||c=='3'||c=='4'||c=='5'||c=='6'||c=='7'||c=='8'||c=='9')
+ else if (Character.isDigit(c))
+ if (beforeDecimalPoint)
+ integerValue.append(c);
+ else
+ fractionValue.append(c);
+ } // for
+
+ while (integerValue.length() < 20)
+ integerValue.insert(0, '0');
+
+ while (fractionValue.length() < 5)
+ fractionValue.append('0');
+
+ integerValue.append('.');
+ integerValue.append(fractionValue);
+ integerValue.insert(0, (isNegative ? '-' : '+'));
+
+ return integerValue.toString();
+ } // convertNumericValue
+
+ private boolean isNumber(String value) { // As per Raptor def, like
+
+ // -$3,270.56
+ value = value.trim();
+ for (int i = 0; i < value.length(); i++) {
+ char c = value.charAt(i);
+ if (!(Character.isDigit(c) || c == '.' || c == '-' || c == '+' || c == ','
+ || c == '$' || c == '%'))
+ return false;
+ } // for
+
+ return true;
+ } // isNumber
+
+ private String convertUnknownValue(String origValue) {
+
+ return isNumber(origValue) ? convertNumericValue(origValue) : origValue;
+ } // convertUnknownValue
+
+ private boolean isEqual(String value1, String value2) {
+
+ return value1.trim().equals(value2.trim());
+ } // isEqual
+
+ private boolean isLessThan(String value1, String value2) {
+
+ boolean compareAsNumbers = colType.equals(AppConstants.CT_NUMBER);
+ if ((!compareAsNumbers) && attemptNumericConversion)
+ compareAsNumbers = isNumber(value1) && isNumber(value2);
+ if (compareAsNumbers && value1.length()>0 && value2.length()>0) {
+ boolean value1IsNegative = (value1.charAt(0) == '-');
+ boolean value2IsNegative = (value2.charAt(0) == '-');
+ if (value1IsNegative && (!value2IsNegative)) {
+ return true;
+ }
+ else if ((!value1IsNegative) && value2IsNegative) {
+ return false;
+ }
+ return Double.parseDouble(value1)<Double.parseDouble(value2);
+ } // if
+
+ return (value1.compareTo(value2) < 0);
+ } // isEqual
+
+ public void setHtmlFormatters(DataValue dv, DataRow dr, boolean formatModified) {
+
+ if (semaphore == null)
+ return;
+
+ HtmlFormatter formatter = defaultFormatter;
+ HtmlFormatter anyFormatter = null;
+ String sValue = convertValue(dv.getDisplayValue());
+
+ String compareColId = semaphore.getComment(); // When Column Id compare is different from formatting.
+
+ String targetColId = null;
+ if(semaphore.getTarget()!=null)
+ targetColId = semaphore.getTarget();
+
+ DataValue targetDataValue = null;
+ /* compare the column id which is in comment and assign to sValue */
+ if(nvl(compareColId).length()>0) {
+ for (dr.resetNext(); dr.hasNext();) {
+ DataValue dv1 = dr.getNext();
+ //add null check
+ if(dv1.getColId()!=null) {
+ if(dv1.getColId().equals(compareColId))
+ sValue = convertValue(dv1.getDisplayValue());
+ if(targetColId!=null) {
+ if(dv1.getColId().equals(targetColId))
+ targetDataValue = dv1;
+ }
+ }
+ }
+ }
+
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter
+ .hasNext();) {
+ FormatType fmt = (FormatType) iter.next();
+ if(fmt.getLessThanValue().length() <= 0) {
+ anyFormatter = (HtmlFormatter) formatters.get(fmt.getFormatId());
+ anyFormatter.setFormatId(fmt.getFormatId());
+ break;
+ }
+ }
+
+ if( anyFormatter == null ) anyFormatter = formatter;
+ // String sValue = convertValue(dv.getDisplayValue());
+ //if (sValue.length() > 0) {
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter
+ .hasNext();) {
+ FormatType fmt = (FormatType) iter.next();
+ // For Excel Download
+
+ if ((fmt.getFormatId() == null) || (fmt.getFormatId().length() <= 0)) {
+ // Default formatter
+ continue;
+ }
+
+ String formatterValue = nvl((String) convertedValues.get(fmt.getFormatId()));
+ boolean valueMatched = false;
+ if (fmt.getExpression().equals("=")) {
+ valueMatched = isEqual(sValue, formatterValue);
+ }
+
+ else if (fmt.getExpression().equals("<>"))
+ valueMatched = (!isEqual(sValue, formatterValue));
+ else if (fmt.getExpression().equals(">")) {
+ valueMatched = (!(isEqual(sValue, formatterValue) || isLessThan(sValue,
+ formatterValue)));
+ }
+ else if (fmt.getExpression().equals(">=")) {
+ valueMatched = /* isEqual(sValue, formatterValue)|| */(!isLessThan(
+ sValue, formatterValue));
+ }
+ else if (fmt.getExpression().equals("<")) {
+ valueMatched = isLessThan(sValue, formatterValue);
+ }
+ else if (fmt.getExpression().equals("<=")) {
+ valueMatched = isEqual(sValue, formatterValue)
+ || isLessThan(sValue, formatterValue);
+ }
+ //s_logger.debug("SYSOUT " + " " +sValue +" " +fmt.getBgColor() + " " + fmt.getLessThanValue()+ " " +valueMatched);
+ if (fmt.getLessThanValue().length() > 0 && valueMatched) {
+ formatter = (HtmlFormatter) formatters.get(fmt.getFormatId());
+ formatter.setFormatId(fmt.getFormatId());
+ formatModified = true;
+ //dv.setFormatId(fmt.getFormatId());
+ //dr.setFormatId(fmt.getFormatId());
+ //break;
+ } else { // if
+ if(!formatModified) formatter = anyFormatter;
+ //if(!((formatter!=null && formatter!=anyFormatter) || (defaultFormatter!=null && formatter!=defaultFormatter)))
+ // formatter = anyFormatter;
+ //formatter.setFormatId(anyFormatter.getFormatId());
+ }
+ /*else if ((fmt.getLessThanValue().length() <= 0)
+ && (fmt.getFormatId().length() > 0)) {
+ formatter = (HtmlFormatter) formatters.get(fmt.getFormatId());
+ System.out.println("---------------lesser "+ fmt.getFormatId()+ " " + fmt.getBgColor());
+ dv.setFormatId(fmt.getFormatId());
+ dr.setFormatId(fmt.getFormatId());
+ // break;
+ } // else if*/
+ } // for
+ /*} else {
+ for (Iterator iter = semaphore.getFormatList().getFormat().iterator(); iter
+ .hasNext();) {
+ FormatType fmt = (FormatType) iter.next();
+ if(fmt.getLessThanValue().length()<=0 && fmt.getExpression().length()<=0 && !fmt.isBold() && !fmt.isItalic() && !fmt.isUnderline() && fmt.getFontSize().equals("11")) {
+ formatter = defaultFormatter;
+ } else
+ formatter = anyFormatter;
+ }
+
+ //formatter.setFormatId(anyFormatter.getFormatId());
+ } */
+ if(formatter != null) {
+ if (semaphore.getSemaphoreType().equals(AppConstants.ST_ROW)) {
+
+ if (dr.getRowFormatter() == null || formatter != defaultFormatter) {
+ // Making sure the default formatter doesn't overwrite
+ // valid row formatter set from another column
+ dr.setRowFormatter(formatter);
+ dr.setFormatId(formatter.getFormatId());
+ // This is added for excel download
+ //if (!formatter.equals(defaultFormatter)) {
+ dr.setRowFormat(true);
+ //}
+
+ }
+ } else {
+ if(nvl(targetColId).length()>0) {
+ if(targetDataValue!=null) {
+ targetDataValue.setCellFormatter(formatter);
+ targetDataValue.setFormatId(formatter.getFormatId());
+ //if (!formatter.equals(defaultFormatter)) {
+ targetDataValue.setCellFormat(true);
+ int count = 0;
+ for (dr.resetNext(); dr.hasNext();) {
+ DataValue dv1 = dr.getNext();
+ //add null check
+ if(targetColId!=null) {
+ if(dv1.getColId().equals(targetColId))
+ dr.setDataValue(count, targetDataValue);
+ }
+ count++;
+ }
+ }
+ //}
+
+ } else {
+ dv.setCellFormatter(formatter);
+ dv.setFormatId(formatter.getFormatId());
+ //if (!formatter.equals(defaultFormatter)) {
+ dv.setCellFormat(true);
+ //}
+ }
+ }// else
+ }
+ } // setHtmlFormatters
+
+} // FormatProcessor
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/Item.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/Item.java
new file mode 100644
index 00000000..1bc3bbba
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/Item.java
@@ -0,0 +1,54 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class Item {
+ private String _id;
+ private String _name;
+
+ public Item() {
+ }
+
+ public Item(String id, String name) {
+ this._id = id;
+ this._name = name;
+ }
+
+ public String getId() {
+ return _id;
+ }
+
+ public void setId(String id) {
+ this._id = id;
+ }
+
+ public String getName() {
+ return _name;
+ }
+
+ public void setName(String name) {
+ this._name = name;
+ }
+
+ public String toString() {
+ return _name;
+ }
+}
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/LookupDBInfo.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/LookupDBInfo.java
new file mode 100644
index 00000000..118356a7
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/LookupDBInfo.java
@@ -0,0 +1,89 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class LookupDBInfo extends RaptorObject {
+ private String tableName = null;
+
+ private String fieldName = null;
+
+ private String lookupTable = null;
+
+ private String lookupIdField = null;
+
+ private String lookupNameField = null;
+
+ public LookupDBInfo() {
+ }
+
+ public LookupDBInfo(String tableName, String fieldName, String lookupTable,
+ String lookupIdField, String lookupNameField) {
+ this();
+
+ setTableName(tableName);
+ setFieldName(fieldName);
+ setLookupTable(lookupTable);
+ setLookupIdField(lookupIdField);
+ setLookupNameField(lookupNameField);
+ } // LookupDBInfo
+
+ public String getTableName() {
+ return tableName;
+ }
+
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ public String getLookupTable() {
+ return lookupTable;
+ }
+
+ public String getLookupIdField() {
+ return lookupIdField;
+ }
+
+ public String getLookupNameField() {
+ return lookupNameField;
+ }
+
+ public void setTableName(String tableName) {
+ this.tableName = tableName;
+ }
+
+ public void setFieldName(String fieldName) {
+ this.fieldName = fieldName;
+ }
+
+ public void setLookupTable(String lookupTable) {
+ this.lookupTable = lookupTable;
+ }
+
+ public void setLookupIdField(String lookupIdField) {
+ this.lookupIdField = lookupIdField;
+ }
+
+ public void setLookupNameField(String lookupNameField) {
+ this.lookupNameField = lookupNameField;
+ }
+
+} // LookupDBInfo
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/RangeAxisJSON.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/RangeAxisJSON.java
new file mode 100644
index 00000000..d9e93f55
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/RangeAxisJSON.java
@@ -0,0 +1,93 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+class RangeColorJSON extends IndexValueJSON {}
+class RangeAxisLabelJSON extends IndexValueJSON {}
+class RangeLineTypeJSON extends IndexValueJSON {}
+
+public class RangeAxisJSON {
+
+ private RangeAxisLabelJSON rangeAxisLabelJSON;
+ private RangeColorJSON rangeColorJSON;
+ private RangeLineTypeJSON rangeLineTypeJSON;
+ private String rangeChartGroup;
+ private String rangeYAxis;
+ private boolean showAsArea;
+
+ public RangeAxisLabelJSON getRangeAxisLabelJSON() {
+ return rangeAxisLabelJSON;
+ }
+ public void setRangeAxisLabelJSON(RangeAxisLabelJSON rangeAxisLabelJSON) {
+ this.rangeAxisLabelJSON = rangeAxisLabelJSON;
+ }
+ public RangeColorJSON getRangeColorJSON() {
+ return rangeColorJSON;
+ }
+ public void setRangeColorJSON(RangeColorJSON rangeColorJSON) {
+ this.rangeColorJSON = rangeColorJSON;
+ }
+ public RangeLineTypeJSON getRangeLineTypeJSON() {
+ return rangeLineTypeJSON;
+ }
+ public void setRangeLineTypeJSON(RangeLineTypeJSON rangeLineTypeJSON) {
+ this.rangeLineTypeJSON = rangeLineTypeJSON;
+ }
+ public String getRangeChartGroup() {
+ return rangeChartGroup;
+ }
+ public void setRangeChartGroup(String rangeChartGroup) {
+ this.rangeChartGroup = rangeChartGroup;
+ }
+ public String getRangeYAxis() {
+ return rangeYAxis;
+ }
+ public void setRangeYAxis(String rangeYAxis) {
+ this.rangeYAxis = rangeYAxis;
+ }
+ public boolean isShowAsArea() {
+ return showAsArea;
+ }
+ public void setShowAsArea(boolean showAsArea) {
+ this.showAsArea = showAsArea;
+ }
+
+ public String getRangeAxis() {
+ if(getRangeAxisLabelJSON()!=null)
+ return getRangeAxisLabelJSON().getValue();
+ else
+ return "";
+ }
+
+ public String getRangeColor(){
+ if(getRangeColorJSON()!=null)
+ return getRangeColorJSON().getValue();
+ else
+ return "";
+ }
+
+ public String getRangeLineType(){
+ if(getRangeLineTypeJSON()!=null)
+ return getRangeLineTypeJSON().getValue();
+ else
+ return "";
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java
new file mode 100644
index 00000000..7e185618
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java
@@ -0,0 +1,366 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.DataCache;
+import org.openecomp.portalsdk.analytics.model.base.ReportWrapper;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.xmlobj.ColFilterType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+
+public class ReportFormFields extends Vector {
+ private int nextElemIdx = 0;
+
+ public ReportFormFields(ReportWrapper rw, HttpServletRequest request) throws RaptorException {
+ super();
+
+ if (rw.getFormFieldList() != null)
+ for (Iterator iter = rw.getFormFieldList().getFormField().iterator(); iter
+ .hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+
+ String fieldName = fft.getFieldId();
+ String fieldDisplayName = fft.getFieldName();
+ String fieldType = fft.getFieldType();
+ String validationType = fft.getValidationType();
+ String mandatory = nvl(fft.getMandatory(), "N");
+ String defaultValue = fft.getDefaultValue();
+ String fieldSQL = fft.getFieldSQL();
+ String fieldDefaultSQL = fft.getFieldDefaultSQL();
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
+ javax.servlet.http.HttpSession session = request.getSession();
+ String visible = nvl(fft.getVisible(),"Y");
+ String dependsOn = nvl(fft.getDependsOn(), "");
+ Calendar rangeStartDate = (fft.getRangeStartDate()==null)?null:fft.getRangeStartDate().toGregorianCalendar();
+ Calendar rangeEndDate = (fft.getRangeEndDate()==null)?null:fft.getRangeEndDate().toGregorianCalendar();
+ //Calendar rangeEndDate = fft.getRangeEndDate().toGregorianCalendar();
+ String rangeStartDateSQL = fft.getRangeStartDateSQL();
+ String rangeEndDateSQL = fft.getRangeEndDateSQL();
+ String user_id = AppUtils.getUserID(request);
+ String multiSelectListSize = fft.getMultiSelectListSize();
+
+ //s_logger.debug("ranges are : " + fft.getRangeStartDate() + fft.getRangeEndDate());
+ //s_logger.debug("fieldSQL B4" + fieldSQL);
+ if(fieldSQL!=null) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
+ fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
+ fieldSQL = Utils.replaceInString(fieldSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ //s_logger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
+ if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
+ fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
+ fieldSQL = Utils.replaceInString(fieldSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
+
+ }
+
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ //fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
+ //else {
+ if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {
+ //s_logger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
+ fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ // }
+ }
+ fieldSQL = Utils.replaceInString(fieldSQL, "[USERID]", user_id);
+ fieldSQL = Utils.replaceInString(fieldSQL, "[USER_ID]", user_id);
+ fieldSQL = Utils.replaceInString(fieldSQL, "[LOGGED_USERID]", user_id);
+
+ }
+
+ if(fieldDefaultSQL!=null) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ //s_logger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
+ if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
+
+ }
+
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ //fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
+ //else
+ if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USERID]", user_id);
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[USER_ID]", user_id);
+ fieldDefaultSQL = Utils.replaceInString(fieldDefaultSQL, "[LOGGED_USERID]", user_id);
+ }
+ //s_logger.debug("fieldSQL After" + fieldSQL);
+ if(rangeStartDateSQL!=null) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
+ rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
+ rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ for (int i = 0; i < sessionParameters.length; i++) {
+ if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
+ rangeStartDateSQL = Utils.replaceInString(rangeStartDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ }
+ if(rangeEndDateSQL!=null) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff")&& (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
+ rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
+ rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ for (int i = 0; i < sessionParameters.length; i++) {
+ if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0)
+ rangeEndDateSQL = Utils.replaceInString(rangeEndDateSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ }
+ String helpText = fft.getComment();
+
+ List predefinedValues = null;
+ if (fft.getPredefinedValueList() != null) {
+ predefinedValues = fft.getPredefinedValueList().getPredefinedValue();
+ if (predefinedValues.size() == 0)
+ predefinedValues = null;
+ } // if
+
+ DataColumnType dct = rw.getColumnById(nvl(fft.getColId()));
+
+ boolean basedOnColumn = false;
+ if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ basedOnColumn = (nvl(fft.getColId()).indexOf('.') > 0);
+ else
+ basedOnColumn = (dct != null);
+
+ if (((!basedOnColumn) && (nvl(fieldSQL).length() == 0))
+ || predefinedValues != null) {
+ if (predefinedValues != null)
+ if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE))
+ defaultValue = (String) Collections.max(predefinedValues);
+ else if (nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
+ defaultValue = (String) Collections.min(predefinedValues);
+ add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
+ mandatory.equals("Y"), defaultValue, helpText, predefinedValues,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
+ } else if (nvl(fieldSQL).length() > 0) {
+ add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
+ mandatory.equals("Y"), fieldDefaultSQL, helpText, fieldSQL,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
+ } else {
+ String lTableName = null;
+ String lColumnName = null;
+ String lColumnType = null;
+ String lColFormat = null;
+ if (rw.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ String colId = nvl(fft.getColId());
+ lTableName = ReportWrapper.getSQLBasedFFTColTableName(colId); // colId.substring(0,
+ // colId.indexOf('.'));
+ lColumnName = ReportWrapper.getSQLBasedFFTColColumnName(colId); // colId.substring(colId.lastIndexOf('.')+1);
+ lColumnType = AppConstants.CT_CHAR;
+ try {
+ lColumnType = nvl(DataCache.getReportTableDbColumnType(lTableName,
+ lColumnName, rw.getDBInfo()), AppConstants.CT_CHAR);
+ } catch (Exception e) {
+ }
+ lColFormat = lColumnType.equals(AppConstants.CT_DATE) ? nvl(
+ ReportWrapper.getSQLBasedFFTColDisplayFormat(colId),
+ AppConstants.DEFAULT_DATE_FORMAT) : "";
+ } else {
+ lTableName = rw.getColumnTableById(dct.getColId()).getTableName(); // should
+ // be
+ // same
+ // as
+ // rw.getTableById(dct.getTableId()).getTableName()
+ lColumnName = dct.getColName();
+ lColumnType = dct.getColType();
+ lColFormat = nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT);
+ } // else
+
+ if (nvl(defaultValue).equals(AppConstants.FILTER_MAX_VALUE)
+ || nvl(defaultValue).equals(AppConstants.FILTER_MIN_VALUE))
+ try {
+ String selectVal = (defaultValue
+ .equals(AppConstants.FILTER_MAX_VALUE) ? "MAX" : "MIN")
+ + "(" + lColumnName + ")";
+ if (lColumnType.equals(AppConstants.CT_DATE))
+ selectVal = "TO_CHAR(" + selectVal + ", '"
+ + AppConstants.DEFAULT_DATE_FORMAT + "')";
+ // DataSet ds = DbUtils.executeQuery("SELECT
+ // "+selectVal+" FROM "+lTableName);
+ DataSet ds = ConnectionUtils.getDataSet("SELECT " + selectVal
+ + " FROM " + lTableName, rw.getDBInfo());
+ if (ds.getRowCount() > 0)
+ defaultValue = ds.getString(0, 0);
+ } catch (Exception e) {
+ }
+
+ LookupDBInfo lookupDBInfo = DataCache.getLookupTable(lTableName,
+ lColumnName);
+ String lookupTable = lookupDBInfo.getLookupTable();
+ String lookupIdField = lookupDBInfo.getLookupIdField();
+ String lookupNameField = lookupDBInfo.getLookupNameField();
+ String lookupSortByField = lookupDBInfo.getLookupNameField();
+ if (lColumnType.equals(AppConstants.CT_DATE)) {
+ // Expects lookup on DATE fields will have both Id and
+ // Name fields with DATE format; if not the case will
+ // generate an error
+ lookupIdField = "TO_CHAR(" + lookupIdField + ", '"
+ + AppConstants.DEFAULT_DATE_FORMAT + "')";
+ lookupSortByField = " TO_DATE(TO_CHAR("+ lookupNameField +", '" + AppConstants.DEFAULT_DATE_FORMAT+ "'),'" + AppConstants.DEFAULT_DATE_FORMAT+ "') ";
+ lookupNameField = "TO_CHAR(" + lookupNameField + ", '" + lColFormat
+ + "')";
+ lookupSortByField += " DESC";
+ } // if
+ if (fieldDefaultSQL!=null && fieldDefaultSQL.length()>0 && (fieldDefaultSQL.trim().length()>10) && fieldDefaultSQL.substring(0,10).toLowerCase().startsWith("select")) {
+ add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
+ mandatory.equals("Y"), fieldDefaultSQL, helpText, lookupTable,
+ lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"),dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
+
+ } else {
+ add(new FormField(fieldName, fieldDisplayName, fieldType, validationType,
+ mandatory.equals("Y"), defaultValue, helpText, lookupTable,
+ lookupIdField, lookupNameField, lookupSortByField,visible.equals("Y"), dependsOn, rangeStartDate, rangeEndDate, rangeStartDateSQL, rangeEndDateSQL, multiSelectListSize));
+ }
+ } // else
+ } // for
+
+ List reportCols = rw.getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.getColFilterList() != null) {
+ int fNo = 0;
+ List fList = dct.getColFilterList().getColFilter();
+ for (Iterator iterF = fList.iterator(); iterF.hasNext(); fNo++) {
+ ColFilterType cft = (ColFilterType) iterF.next();
+
+ if (nvl(cft.getArgType()).equals(AppConstants.AT_FORM)
+ && rw.getFormFieldByDisplayValue(cft.getArgValue()) == null) {
+ String fieldName = rw.getFormFieldName(cft);
+ String fieldDisplayName = rw.getFormFieldDisplayName(dct, cft);
+
+ LookupDBInfo lookupDBInfo = DataCache.getLookupTable(rw
+ .getColumnTableById(dct.getColId()).getTableName(), dct
+ .getColName());
+ String lookupTable = lookupDBInfo.getLookupTable();
+ String lookupIdField = lookupDBInfo.getLookupIdField();
+ String lookupNameField = lookupDBInfo.getLookupNameField();
+ String lookupSortByField = lookupDBInfo.getLookupNameField();
+ Calendar lookupRangeStartDate = rw.getFormFieldRangeStart(cft);
+ Calendar lookupRangeEndDate = rw.getFormFieldRangeEnd(cft);
+ String lookupRangeStartDateSQL = rw.getFormFieldRangeStartSQL(cft);
+ String lookupRangeEndDateSQL = rw.getFormFieldRangeEndSQL(cft);
+ if (dct.getColType().equals(AppConstants.CT_DATE)) {
+ // Expects lookup on DATE fields will have both Id
+ // and Name fields with DATE format; if not the case
+ // will generate an error
+ lookupIdField = "TO_CHAR("
+ + lookupIdField
+ + ", '"
+ + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
+ + "')";
+ lookupNameField = "TO_CHAR("
+ + lookupNameField
+ + ", '"
+ + nvl(dct.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
+ + "')";
+ lookupSortByField += " DESC";
+ } // if
+ add(new FormField(fieldName, fieldDisplayName,
+ FormField.FFT_TEXT_W_POPUP, null, false, null, null,
+ lookupTable, lookupIdField, lookupNameField, lookupSortByField,null, lookupRangeStartDate, lookupRangeEndDate, lookupRangeStartDateSQL, lookupRangeEndDateSQL, "0"));
+ } // if
+ } // for
+ } // if
+ } // for
+ } // ReportFormFields
+
+ public int getFieldCount() {
+ return size();
+ } // getFieldCount
+
+ public FormField getFormField(int fieldIdx) {
+ return (FormField) get(fieldIdx);
+ } // getFormField
+
+ public FormField getFormField(String fieldName) {
+ for (int i = 0; i < getFieldCount(); i++) {
+ FormField ff = (FormField) get(i);
+ if (ff.getFieldName().equals(fieldName))
+ return ff;
+ } // for
+
+ return null;
+ } // getFormField
+
+ public void resetNext() {
+ resetNext(0);
+ } // resetNext
+
+ public void resetNext(int toPos) {
+ nextElemIdx = toPos;
+ } // resetNext
+
+ public boolean hasNext() {
+ return (nextElemIdx < size());
+ } // hasNext
+
+ public FormField getNext() {
+ return hasNext() ? getFormField(nextElemIdx++) : null;
+ } // getNext
+
+ /** ************************************************************************************************* */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+} // ReportFormFields
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java
new file mode 100644
index 00000000..7556a310
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java
@@ -0,0 +1,694 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Map;
+
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.view.ColumnHeader;
+
+/*class MetaColumn {
+ private String tableId;
+ private String dbColName;
+ private String crossTabValue;
+ private String colName;
+ private String displayName;
+ private Integer displayWidth;
+ private String displayWidthInPxls;
+ private String pdfDisplayWidthInPxls;
+ private String displayAlignment;
+ private String displayHeaderAlignment;
+ private int orderSeq;
+ private boolean visible;
+ private boolean calculated;
+ private String colType;
+ private String hyperlinkURL;
+ private String hyperlinkType;
+ private String actionImg;
+ private Integer groupByPos;
+ private String subTotalCustomText;
+ private Boolean hideRepeatedKey;
+ private String colFormat;
+ private boolean groupBreak;
+ private Integer orderBySeq;
+ private String orderByAscDesc;
+ private String displayTotal;
+ private String colOnChart;
+ private Integer chartSeq;
+ private String chartColor;
+ private String chartLineType;
+ private Boolean chartSeries;
+ private Boolean isRangeAxisFilled;
+ private Boolean createInNewChart;
+ private String drillDownType;
+ private Boolean drillinPoPUp;
+ private String drillDownURL;
+ private String drillDownParams;
+ private String comment;
+ private ColFilterList colFilterList;
+ private String semaphoreId;
+ private String dbColType;
+ private String chartGroup;
+ private String yAxis;
+ private String dependsOnFormField;
+ private String nowrap;
+ private Integer indentation;
+ private Boolean enhancedPagination;
+ private Integer level;
+ private Integer start;
+ private Integer colspan;
+ private String dataMiningCol;
+ private String colId;
+
+ public String getTableId() {
+ return tableId;
+ }
+ public void setTableId(String tableId) {
+ this.tableId = tableId;
+ }
+ public String getDbColName() {
+ return dbColName;
+ }
+ public void setDbColName(String dbColName) {
+ this.dbColName = dbColName;
+ }
+ public String getCrossTabValue() {
+ return crossTabValue;
+ }
+ public void setCrossTabValue(String crossTabValue) {
+ this.crossTabValue = crossTabValue;
+ }
+ public String getColName() {
+ return colName;
+ }
+ public void setColName(String colName) {
+ this.colName = colName;
+ }
+ public String getDisplayName() {
+ return displayName;
+ }
+ public void setDisplayName(String displayName) {
+ this.displayName = displayName;
+ }
+ public Integer getDisplayWidth() {
+ return displayWidth;
+ }
+ public void setDisplayWidth(Integer displayWidth) {
+ this.displayWidth = displayWidth;
+ }
+ public String getDisplayWidthInPxls() {
+ return displayWidthInPxls;
+ }
+ public void setDisplayWidthInPxls(String displayWidthInPxls) {
+ this.displayWidthInPxls = displayWidthInPxls;
+ }
+ public String getPdfDisplayWidthInPxls() {
+ return pdfDisplayWidthInPxls;
+ }
+ public void setPdfDisplayWidthInPxls(String pdfDisplayWidthInPxls) {
+ this.pdfDisplayWidthInPxls = pdfDisplayWidthInPxls;
+ }
+ public String getDisplayAlignment() {
+ return displayAlignment;
+ }
+ public void setDisplayAlignment(String displayAlignment) {
+ this.displayAlignment = displayAlignment;
+ }
+ public String getDisplayHeaderAlignment() {
+ return displayHeaderAlignment;
+ }
+ public void setDisplayHeaderAlignment(String displayHeaderAlignment) {
+ this.displayHeaderAlignment = displayHeaderAlignment;
+ }
+ public int getOrderSeq() {
+ return orderSeq;
+ }
+ public void setOrderSeq(int orderSeq) {
+ this.orderSeq = orderSeq;
+ }
+ public boolean isVisible() {
+ return visible;
+ }
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+ public boolean isCalculated() {
+ return calculated;
+ }
+ public void setCalculated(boolean calculated) {
+ this.calculated = calculated;
+ }
+ public String getColType() {
+ return colType;
+ }
+ public void setColType(String colType) {
+ this.colType = colType;
+ }
+ public String getHyperlinkURL() {
+ return hyperlinkURL;
+ }
+ public void setHyperlinkURL(String hyperlinkURL) {
+ this.hyperlinkURL = hyperlinkURL;
+ }
+ public String getHyperlinkType() {
+ return hyperlinkType;
+ }
+ public void setHyperlinkType(String hyperlinkType) {
+ this.hyperlinkType = hyperlinkType;
+ }
+ public String getActionImg() {
+ return actionImg;
+ }
+ public void setActionImg(String actionImg) {
+ this.actionImg = actionImg;
+ }
+ public Integer getGroupByPos() {
+ return groupByPos;
+ }
+ public void setGroupByPos(Integer groupByPos) {
+ this.groupByPos = groupByPos;
+ }
+ public String getSubTotalCustomText() {
+ return subTotalCustomText;
+ }
+ public void setSubTotalCustomText(String subTotalCustomText) {
+ this.subTotalCustomText = subTotalCustomText;
+ }
+ public Boolean getHideRepeatedKey() {
+ return hideRepeatedKey;
+ }
+ public void setHideRepeatedKey(Boolean hideRepeatedKey) {
+ this.hideRepeatedKey = hideRepeatedKey;
+ }
+ public String getColFormat() {
+ return colFormat;
+ }
+ public void setColFormat(String colFormat) {
+ this.colFormat = colFormat;
+ }
+ public boolean isGroupBreak() {
+ return groupBreak;
+ }
+ public void setGroupBreak(boolean groupBreak) {
+ this.groupBreak = groupBreak;
+ }
+ public Integer getOrderBySeq() {
+ return orderBySeq;
+ }
+ public void setOrderBySeq(Integer orderBySeq) {
+ this.orderBySeq = orderBySeq;
+ }
+ public String getOrderByAscDesc() {
+ return orderByAscDesc;
+ }
+ public void setOrderByAscDesc(String orderByAscDesc) {
+ this.orderByAscDesc = orderByAscDesc;
+ }
+ public String getDisplayTotal() {
+ return displayTotal;
+ }
+ public void setDisplayTotal(String displayTotal) {
+ this.displayTotal = displayTotal;
+ }
+ public String getColOnChart() {
+ return colOnChart;
+ }
+ public void setColOnChart(String colOnChart) {
+ this.colOnChart = colOnChart;
+ }
+ public Integer getChartSeq() {
+ return chartSeq;
+ }
+ public void setChartSeq(Integer chartSeq) {
+ this.chartSeq = chartSeq;
+ }
+ public String getChartColor() {
+ return chartColor;
+ }
+ public void setChartColor(String chartColor) {
+ this.chartColor = chartColor;
+ }
+ public String getChartLineType() {
+ return chartLineType;
+ }
+ public void setChartLineType(String chartLineType) {
+ this.chartLineType = chartLineType;
+ }
+ public Boolean getChartSeries() {
+ return chartSeries;
+ }
+ public void setChartSeries(Boolean chartSeries) {
+ this.chartSeries = chartSeries;
+ }
+ public Boolean getIsRangeAxisFilled() {
+ return isRangeAxisFilled;
+ }
+ public void setIsRangeAxisFilled(Boolean isRangeAxisFilled) {
+ this.isRangeAxisFilled = isRangeAxisFilled;
+ }
+ public Boolean getCreateInNewChart() {
+ return createInNewChart;
+ }
+ public void setCreateInNewChart(Boolean createInNewChart) {
+ this.createInNewChart = createInNewChart;
+ }
+ public String getDrillDownType() {
+ return drillDownType;
+ }
+ public void setDrillDownType(String drillDownType) {
+ this.drillDownType = drillDownType;
+ }
+ public Boolean getDrillinPoPUp() {
+ return drillinPoPUp;
+ }
+ public void setDrillinPoPUp(Boolean drillinPoPUp) {
+ this.drillinPoPUp = drillinPoPUp;
+ }
+ public String getDrillDownURL() {
+ return drillDownURL;
+ }
+ public void setDrillDownURL(String drillDownURL) {
+ this.drillDownURL = drillDownURL;
+ }
+ public String getDrillDownParams() {
+ return drillDownParams;
+ }
+ public void setDrillDownParams(String drillDownParams) {
+ this.drillDownParams = drillDownParams;
+ }
+ public String getComment() {
+ return comment;
+ }
+ public void setComment(String comment) {
+ this.comment = comment;
+ }
+ public ColFilterList getColFilterList() {
+ return colFilterList;
+ }
+ public void setColFilterList(ColFilterList colFilterList) {
+ this.colFilterList = colFilterList;
+ }
+ public String getSemaphoreId() {
+ return semaphoreId;
+ }
+ public void setSemaphoreId(String semaphoreId) {
+ this.semaphoreId = semaphoreId;
+ }
+ public String getDbColType() {
+ return dbColType;
+ }
+ public void setDbColType(String dbColType) {
+ this.dbColType = dbColType;
+ }
+ public String getChartGroup() {
+ return chartGroup;
+ }
+ public void setChartGroup(String chartGroup) {
+ this.chartGroup = chartGroup;
+ }
+ public String getyAxis() {
+ return yAxis;
+ }
+ public void setyAxis(String yAxis) {
+ this.yAxis = yAxis;
+ }
+ public String getDependsOnFormField() {
+ return dependsOnFormField;
+ }
+ public void setDependsOnFormField(String dependsOnFormField) {
+ this.dependsOnFormField = dependsOnFormField;
+ }
+ public String getNowrap() {
+ return nowrap;
+ }
+ public void setNowrap(String nowrap) {
+ this.nowrap = nowrap;
+ }
+ public Integer getIndentation() {
+ return indentation;
+ }
+ public void setIndentation(Integer indentation) {
+ this.indentation = indentation;
+ }
+ public Boolean getEnhancedPagination() {
+ return enhancedPagination;
+ }
+ public void setEnhancedPagination(Boolean enhancedPagination) {
+ this.enhancedPagination = enhancedPagination;
+ }
+ public Integer getLevel() {
+ return level;
+ }
+ public void setLevel(Integer level) {
+ this.level = level;
+ }
+ public Integer getStart() {
+ return start;
+ }
+ public void setStart(Integer start) {
+ this.start = start;
+ }
+ public Integer getColspan() {
+ return colspan;
+ }
+ public void setColspan(Integer colspan) {
+ this.colspan = colspan;
+ }
+ public String getDataMiningCol() {
+ return dataMiningCol;
+ }
+ public void setDataMiningCol(String dataMiningCol) {
+ this.dataMiningCol = dataMiningCol;
+ }
+ public String getColId() {
+ return colId;
+ }
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+}*/
+
+/*class Row {
+ private String displayValue;
+ private String dataType;
+ private String colId;
+ private boolean visible;
+
+
+ public boolean isVisible() {
+ return visible;
+ }
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+ public String getDisplayValue() {
+ return displayValue;
+ }
+ public void setDisplayValue(String displayValue) {
+ this.displayValue = displayValue;
+ }
+ public String getDataType() {
+ return dataType;
+ }
+ public void setDataType(String dataType) {
+ this.dataType = dataType;
+ }
+ public String getColId() {
+ return colId;
+ }
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+
+}*/
+class FormFieldJSON {
+ private String fieldId;
+ private String fieldDisplayName;
+ private String fieldType;
+ private String validationType;
+ private boolean required;
+ //private String defaultValue;
+
+ private Calendar rangeStartDate;
+ private Calendar rangeEndDate;
+ private String multiSelectListSize;
+ private String helpText;
+ private boolean visible;
+ private boolean triggerOtherFormFields;
+ private ArrayList<IdNameValue> formFieldValues;
+
+ public String getFieldId() {
+ return fieldId;
+ }
+ public void setFieldId(String fieldId) {
+ this.fieldId = fieldId;
+ }
+ public String getFieldDisplayName() {
+ return fieldDisplayName;
+ }
+ public void setFieldDisplayName(String fieldDisplayName) {
+ this.fieldDisplayName = fieldDisplayName;
+ }
+ public String getFieldType() {
+ return fieldType;
+ }
+ public void setFieldType(String fieldType) {
+ this.fieldType = fieldType;
+ }
+ public String getValidationType() {
+ return validationType;
+ }
+ public void setValidationType(String validationType) {
+ this.validationType = validationType;
+ }
+ public boolean isRequired() {
+ return required;
+ }
+ public void setRequired(boolean required) {
+ this.required = required;
+ }
+ public Calendar getRangeStartDate() {
+ return rangeStartDate;
+ }
+ public void setRangeStartDate(Calendar rangeStartDate) {
+ this.rangeStartDate = rangeStartDate;
+ }
+ public Calendar getRangeEndDate() {
+ return rangeEndDate;
+ }
+ public void setRangeEndDate(Calendar rangeEndDate) {
+ this.rangeEndDate = rangeEndDate;
+ }
+ public String getMultiSelectListSize() {
+ return multiSelectListSize;
+ }
+ public void setMultiSelectListSize(String multiSelectListSize) {
+ this.multiSelectListSize = multiSelectListSize;
+ }
+ public String getHelpText() {
+ return helpText;
+ }
+ public void setHelpText(String helpText) {
+ this.helpText = helpText;
+ }
+ public boolean isVisible() {
+ return visible;
+ }
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+ public boolean isTriggerOtherFormFields() {
+ return triggerOtherFormFields;
+ }
+ public void setTriggerOtherFormFields(boolean triggerOtherFormFields) {
+ this.triggerOtherFormFields = triggerOtherFormFields;
+ }
+ public ArrayList<IdNameValue> getFormFieldValues() {
+ return formFieldValues;
+ }
+ public void setFormFieldValues(ArrayList<IdNameValue> formFieldValues) {
+ this.formFieldValues = formFieldValues;
+ }
+
+
+}
+public class ReportJSONRuntime {
+
+ private String reportID;
+ private String reportName;
+ private String reportDescr;
+ private String reportTitle;
+ private String reportSubTitle;
+ private boolean allowSchedule;
+ private boolean allowEdit;
+ private ArrayList <FormFieldJSON> formFieldList;
+ private String formfield_comments;
+ private ArrayList<ColumnHeader> reportDataColumns;
+ private ArrayList<Map<String,Object>> reportDataRows;
+ private int totalRows;
+ private int pageSize;
+ private String sqlWhole;
+ private boolean chartAvailable;
+ private boolean chartWizardAvailable;
+ private boolean displayData;
+ private boolean displayForm;
+ private boolean displayExcel;
+ private boolean displayPDF;
+ private String backBtnURL;
+ private String colIdxTobeFreezed;
+ private int numFormCols;
+ private String message;
+
+
+ public boolean isChartAvailable() {
+ return chartAvailable;
+ }
+ public void setChartAvailable(boolean chartAvailable) {
+ this.chartAvailable = chartAvailable;
+ }
+ public ArrayList<Map<String,Object>> getReportDataRows() {
+ return reportDataRows;
+ }
+ public void setReportDataRows(ArrayList<Map<String,Object>> reportDataRows) {
+ this.reportDataRows = reportDataRows;
+ }
+ public String getReportID() {
+ return reportID;
+ }
+ public void setReportID(String reportID) {
+ this.reportID = reportID;
+ }
+ public String getReportName() {
+ return reportName;
+ }
+ public void setReportName(String reportName) {
+ this.reportName = reportName;
+ }
+ public String getReportDescr() {
+ return reportDescr;
+ }
+ public void setReportDescr(String reportDescr) {
+ this.reportDescr = reportDescr;
+ }
+ public String getReportTitle() {
+ return reportTitle;
+ }
+ public void setReportTitle(String reportTitle) {
+ this.reportTitle = reportTitle;
+ }
+ public String getReportSubTitle() {
+ return reportSubTitle;
+ }
+ public void setReportSubTitle(String reportSubTitle) {
+ this.reportSubTitle = reportSubTitle;
+ }
+ public boolean isAllowSchedule() {
+ return allowSchedule;
+ }
+ public void setAllowSchedule(boolean allowSchedule) {
+ this.allowSchedule = allowSchedule;
+ }
+ public ArrayList getFormFieldList() {
+ return formFieldList;
+ }
+ public void setFormFieldList(ArrayList formFieldList) {
+ this.formFieldList = formFieldList;
+ }
+ public String getFormfield_comments() {
+ return formfield_comments;
+ }
+ public void setFormfield_comments(String formfield_comments) {
+ this.formfield_comments = formfield_comments;
+ }
+ public ArrayList<ColumnHeader> getReportDataColumns() {
+ return reportDataColumns;
+ }
+ public void setReportDataColumns(ArrayList<ColumnHeader> reportDataColumns) {
+ this.reportDataColumns = reportDataColumns;
+ }
+
+ public int getTotalRows() {
+ return totalRows;
+ }
+ public void setTotalRows(int totalRows) {
+ this.totalRows = totalRows;
+ }
+ public int getPageSize() {
+ return pageSize;
+ }
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+ public String getSqlWhole() {
+ return sqlWhole;
+ }
+ public void setSqlWhole(String sqlWhole) {
+ this.sqlWhole = sqlWhole;
+ }
+
+ public boolean isAllowEdit() {
+ return allowEdit;
+ }
+ public void setAllowEdit(boolean allowEdit) {
+ this.allowEdit = allowEdit;
+ }
+ public String getBackBtnURL() {
+ return backBtnURL;
+ }
+ public void setBackBtnURL(String backBtnURL) {
+ this.backBtnURL = backBtnURL;
+ }
+ public String getColIdxTobeFreezed() {
+ return colIdxTobeFreezed;
+ }
+ public void setColIdxTobeFreezed(String colIdxTobeFreezed) {
+ this.colIdxTobeFreezed = colIdxTobeFreezed;
+ }
+ public int getNumFormCols() {
+ return numFormCols;
+ }
+ public void setNumFormCols(int numFormCols) {
+ this.numFormCols = numFormCols;
+ }
+ public boolean isDisplayData() {
+ return displayData;
+ }
+ public void setDisplayData(boolean displayData) {
+ this.displayData = displayData;
+ }
+ public boolean isDisplayForm() {
+ return displayForm;
+ }
+ public void setDisplayForm(boolean displayForm) {
+ this.displayForm = displayForm;
+ }
+ public boolean isDisplayExcel() {
+ return displayExcel;
+ }
+ public void setDisplayExcel(boolean displayExcel) {
+ this.displayExcel = displayExcel;
+ }
+ public boolean isDisplayPDF() {
+ return displayPDF;
+ }
+ public void setDisplayPDF(boolean displayPDF) {
+ this.displayPDF = displayPDF;
+ }
+ public String getMessage() {
+ return message;
+ }
+ public void setMessage(String message) {
+ this.message = message;
+ }
+ public boolean isChartWizardAvailable() {
+ return chartWizardAvailable;
+ }
+ public void setChartWizardAvailable(boolean chartWizardAvilable) {
+ this.chartWizardAvailable = chartWizardAvilable;
+ }
+
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.java
new file mode 100644
index 00000000..e3bbe4d0
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.java
@@ -0,0 +1,194 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.GregorianCalendar;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.Utils;
+
+public class ReportParamDateValueParser {
+
+ /*public static final SimpleDateFormat[] dateFormats;
+
+ static {
+ dateFormats = new SimpleDateFormat[5];
+ (dateFormats[0] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MONTHYYYY))
+ .setLenient(true);
+ (dateFormats[1] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MONTHDDYYYY))
+ .setLenient(true);
+ (dateFormats[2] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMDDYYYY))
+ .setLenient(true);
+ (dateFormats[3] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMYYYY))
+ .setLenient(true);
+ (dateFormats[4] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_DDMONYYYY))
+ .setLenient(true);
+ }*/
+
+ public static boolean isDateHrParam(String param) {
+ SimpleDateFormat[] dateFormats = new SimpleDateFormat[2];
+ (dateFormats[0] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMDDYYYY_HR))
+ .setLenient(true);
+ (dateFormats[1] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_DDMONYYYY_HR))
+ .setLenient(true);
+ for (int i = 0; i < dateFormats.length; i++) {
+ try {
+ if (dateFormats[i].parse(param) != null) {
+ return true;
+ }
+ } catch (ParseException pe) {
+ // do nothing, continue to check param against other dates
+ }
+ catch (NumberFormatException pe) {
+ // do nothing, continue to check param against other dates
+ }
+ }
+ return false;
+ }
+ public static boolean isDateParam(String param) {
+ SimpleDateFormat[] dateFormats = new SimpleDateFormat[5];
+ (dateFormats[0] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MONTHYYYY))
+ .setLenient(true);
+ (dateFormats[1] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MONTHDDYYYY))
+ .setLenient(true);
+ (dateFormats[2] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMDDYYYY))
+ .setLenient(true);
+ (dateFormats[3] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMYYYY))
+ .setLenient(true);
+ (dateFormats[4] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_DDMONYYYY))
+ .setLenient(true);
+
+ for (int i = 0; i < dateFormats.length; i++) {
+ try {
+ if (dateFormats[i].parse(param) != null) {
+ return true;
+ }
+ } catch (ParseException pe) {
+ // do nothing, continue to check param against other dates
+ }
+ catch (NumberFormatException pe) {
+ // do nothing, continue to check param against other dates
+ }
+ }
+ return false;
+ }
+
+ public static String formatDateParamValue(String param) {
+ return ReportParamDateValueParser.formatDateParamValue(param, null);
+ }
+
+ public static String formatDateHrParamValue(String param) {
+ return ReportParamDateValueParser.formatDateHrParamValue(param, null);
+ }
+
+ public static String formatDateHrParamValue(String param, String dateHrFormatPattern) {
+ String formattedDate = null;
+ Date parsedDate = null;
+
+ dateHrFormatPattern = (dateHrFormatPattern != null) ? dateHrFormatPattern
+ : "HH";
+
+ SimpleDateFormat[] dateFormats = new SimpleDateFormat[2];
+ (dateFormats[0] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMDDYYYY_HR))
+ .setLenient(true);
+ (dateFormats[1] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_DDMONYYYY_HR))
+ .setLenient(true);
+
+ for (int i = 0; i < dateFormats.length; i++) {
+ try {
+ if (dateFormats[i].parse(param) != null) {
+ SimpleDateFormat newDateFormat = new SimpleDateFormat(dateHrFormatPattern);
+ parsedDate = dateFormats[i].parse(param);
+ formattedDate = newDateFormat.format(parsedDate);
+
+
+ return formattedDate;
+ }
+ } catch (ParseException pe) {
+ // do nothing, continue to check param against other dates and
+ // format accordingly
+ }
+ catch (NumberFormatException pe) {
+ // do nothing, continue to check param against other dates
+ }
+ }
+ return param;
+ }
+
+
+ public static String formatDateParamValue(String param, String dateFormatPattern) {
+ String formattedDate = null;
+ Date parsedDate = null;
+
+ dateFormatPattern = (dateFormatPattern != null) ? dateFormatPattern
+ : AppConstants.JAVA_DATE_FORMAT_MMDDYYYY;
+
+ SimpleDateFormat[] dateFormats = new SimpleDateFormat[5];
+ (dateFormats[0] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MONTHYYYY))
+ .setLenient(true);
+ (dateFormats[1] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MONTHDDYYYY))
+ .setLenient(true);
+ (dateFormats[2] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMDDYYYY))
+ .setLenient(true);
+ (dateFormats[3] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_MMYYYY))
+ .setLenient(true);
+ (dateFormats[4] = new SimpleDateFormat(AppConstants.JAVA_DATE_FORMAT_DDMONYYYY))
+ .setLenient(true);
+
+ for (int i = 0; i < dateFormats.length; i++) {
+ try {
+ if (dateFormats[i].parse(param) != null) {
+ SimpleDateFormat newDateFormat = new SimpleDateFormat(dateFormatPattern);
+ parsedDate = dateFormats[i].parse(param);
+ formattedDate = newDateFormat.format(parsedDate);
+
+ if (Globals.getMonthFormatUseLastDay()
+ && (dateFormats[i].toPattern().equals(
+ AppConstants.JAVA_DATE_FORMAT_MMYYYY) || dateFormats[i]
+ .toPattern().equals(
+ AppConstants.JAVA_DATE_FORMAT_MONTHYYYY))) {
+
+ GregorianCalendar gc = new GregorianCalendar();
+ gc.setTime(parsedDate);
+ int day = gc.getActualMaximum(GregorianCalendar.DAY_OF_MONTH);
+ formattedDate = Utils.replaceInString(formattedDate, "/01/", "/"
+ + String.valueOf(day) + "/");
+
+ }
+
+ return formattedDate;
+ }
+ } catch (ParseException pe) {
+ // do nothing, continue to check param against other dates and
+ // format accordingly
+ }
+ catch (NumberFormatException pe) {
+ // do nothing, continue to check param against other dates
+ }
+ }
+ return param;
+ }
+
+} // ReportParamValues
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.java
new file mode 100644
index 00000000..66b5f517
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.java
@@ -0,0 +1,370 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.util.XSSFilter;
+import org.openecomp.portalsdk.core.controller.FavoritesController;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class ReportParamValues extends Hashtable {
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FavoritesController.class);
+
+ private Hashtable paramIsMultiValue = null;
+ private Hashtable paramIsTextAreaValue = null;
+ private Hashtable paramIsTextAreaDrilldownValue = null;
+ private Hashtable paramIsTextAreaValueModified = null;
+ private ReportFormFields rff = null;
+
+ private Hashtable multiValueBaseSQL = null;
+ private Hashtable textAreaValueBaseSQL = null;
+
+ public ReportParamValues() {
+ super();
+ paramIsMultiValue = new Hashtable();
+ multiValueBaseSQL = new Hashtable();
+ paramIsTextAreaValue = new Hashtable();
+ paramIsTextAreaDrilldownValue = new Hashtable();
+ paramIsTextAreaValueModified = new Hashtable();
+ } // ReportParamValues
+
+ public ReportParamValues(ReportFormFields rff, String reportDefType) {
+ this();
+ this.rff = rff;
+ for (Iterator iter = rff.iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ put(ff.getFieldName(), nvl(ff.getDefaultValue()));
+ put(ff.getFieldName()+"_Hr", nvl(ff.getDefaultValue()));
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ put(ff.getFieldName()+"_Min", nvl(ff.getDefaultValue()));
+ }
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ put(ff.getFieldName()+"_Sec", nvl(ff.getDefaultValue()));
+ }
+ } else
+ put(ff.getFieldName(), nvl(ff.getDefaultValue()));
+
+ boolean isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
+ boolean isTextAreaValue = ff.getFieldType().equals(FormField.FFT_TEXTAREA) && reportDefType
+ .equals(AppConstants.RD_SQL_BASED);
+
+ paramIsMultiValue.put(ff.getFieldName(), new Boolean(isMultiValue));
+ paramIsTextAreaValue.put(ff.getFieldName(), new Boolean(isTextAreaValue));
+
+ if ((isMultiValue || isTextAreaValue) && ff.getBaseSQL() != null)
+ multiValueBaseSQL.put(ff.getFieldName(), ff.getBaseSQL());
+
+
+ } // for
+ } // ReportParamValues
+
+ /*
+ * public ReportParamValues(ReportFormFields rff, HttpServletRequest
+ * request) { this(rff);
+ *
+ * setParamValues(request); } // ReportParamValues
+ */
+ public boolean isParameterMultiValue(String fieldName) {
+ Boolean b = (Boolean) paramIsMultiValue.get(fieldName);
+ return (b != null) ? b.booleanValue() : false;
+ } // isParameterMultiValue
+
+ public boolean isParameterTextAreaValue(String fieldName) {
+ Boolean b = (Boolean) paramIsTextAreaValue.get(fieldName);
+ return (b != null) ? b.booleanValue() : false;
+ } // isParameterMultiValue
+
+ public boolean isParameterTextAreaValueAndModified(String fieldName) {
+ Boolean b = (Boolean) paramIsTextAreaValueModified.get(fieldName);
+ return (b != null) ? b.booleanValue() : false;
+ } // isParameterMultiValue
+
+ public boolean setParamValues(HttpServletRequest request, boolean refresh) {
+ long currentTime = System.currentTimeMillis();
+ //System.out.println("ReportParamValues setParamValues called " + refresh);
+ boolean paramUpdated = false;
+ if(refresh) clearValues();
+ for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
+ String key = (String) enKeys.nextElement();
+ String oldValue = XSSFilter.filterRequestOnlyScript(getParamValue(key));
+ String newValue = null;
+ if (isParameterMultiValue(key)) {
+ String[] values = request.getParameterValues(key);
+
+ if (values != null) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < values.length; i++) {
+ if (sb.length() > 0)
+ sb.append('|');
+ sb.append(values[i]);
+ } // for
+
+ newValue = XSSFilter.filterRequestOnlyScript(sb.toString());
+ } // if
+ } else if (isParameterTextAreaValue(key)) {
+/* String[] values = request.getParameterValues(key);
+
+ if (values != null) {
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < values.length; i++) {
+ if (sb.length() > 0)
+ sb.append('|');
+ sb.append(values[i]);
+ } // for
+*/
+ String value = "";
+ value = request.getParameter(key);
+ value = Utils.oracleSafe(nvl(value));
+ paramIsTextAreaDrilldownValue.put(key, value);
+ value = value.replaceAll(",", "|");
+ value = "('" + Utils.replaceInString(value, "|", "','") + "')";
+ //value = Utils.replaceInString(value, "|", ",");
+ newValue = XSSFilter.filterRequestOnlyScript(value);
+ paramIsTextAreaValueModified.put(key, new Boolean(true));
+ //} // if
+
+ } else
+ // newValue = nvl(request.getParameter(key));
+ newValue = XSSFilter.filterRequestOnlyScript(request.getParameter(key));
+ //debugLogger.debug("IN REPORTPARAM ^NEW VALUE " + newValue + " OLD VALUE " + oldValue + " KEY " + key + " isParameterMultiValue(key) " + isParameterMultiValue(key));
+ if(!isParameterMultiValue(key) && !isParameterTextAreaValue(key)) {
+ if(refresh && nvl(newValue).length()<=0) {
+ put(key, oldValue);
+ } else if ( ((newValue != null && newValue.trim().length()>0) && (oldValue!=null && oldValue.trim().length()>0) && !newValue.equals(oldValue)) ||
+ ((newValue != null && newValue.trim().length()>0) && (oldValue == null || oldValue.trim().length() <= 0)) ) {
+ paramUpdated = true;
+ //System.out.println("paramupdated1 " +paramUpdated+ " " + newValue + " " + oldValue);
+ // if(newValue.startsWith("[") && newValue.endsWith("]")) {
+ // newValue = getDateAsString(newValue);
+ // }
+ put(key, newValue);
+ } else if (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0)) {
+ paramUpdated = true;
+ put(key, newValue);
+ } else if (nvl(newValue).equals(nvl(oldValue)) ) {
+ put(key, newValue);
+ } else {
+ put(key, "");
+ }
+ } else {
+ if (((newValue != null && newValue.trim().length()>0) && (oldValue!=null && oldValue.trim().length()>0) && !newValue.equals(oldValue)) ||
+ ((newValue != null && newValue.trim().length()>0) && (oldValue == null || oldValue.trim().length() <= 0)) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
+ if(isParameterTextAreaValue(key)) {
+ newValue = getParamValueforTextAreaDrilldown(key);
+ if(newValue.length() > 0 && !newValue.equals(oldValue)) {
+ paramUpdated = true;
+ put (key, newValue);
+ }
+ } else {
+ paramUpdated = true;
+ put (key, newValue);
+ }
+
+ } else if (((newValue == null || newValue.trim().length()<=0)) && (oldValue!=null && oldValue.trim().length()>0) && (isParameterMultiValue(key)||isParameterTextAreaValue(key))) {
+ paramUpdated = true;
+ //System.out.println("paramupdated3 " +paramUpdated+ " N" + newValue + " O" + oldValue);
+ put(key, "");
+ }
+ }
+ } // for
+ //printValues();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for Adding/Clearing Param Values for Search Field Display " + (System.currentTimeMillis() - currentTime)));
+ return paramUpdated;
+ } // setParamValues
+
+ public String getParamValueforTextAreaDrilldown(String key) {
+ return (String) paramIsTextAreaDrilldownValue.get(key);
+ }
+
+ public String getParamValue(String key) {
+ //This logic below is added to avoid BLANK formfield to pass through logic - Sundar
+ if (key!=null) {
+ if(isParameterTextAreaValueAndModified(key)) {
+ String value = "";
+ value = (String) get(key);
+ value = Utils.oracleSafe(nvl(value));
+ value = value.replaceAll(",","|");
+ if(nvl(value).length()>0) {
+ if(value.indexOf("|")!= -1) { // Need option to support "|"
+ value = Utils.replaceInString(value,"\r\n","~");
+ }
+ value = Utils.replaceInString(value, "~", "' , '");
+ value = "('" + Utils.replaceInString(value, "|", "','") + "')"; // changed from "|"
+ //value = Utils.replaceInString(value, "|", ",");
+ value = XSSFilter.filterRequestOnlyScript(value);
+ return value;
+ } else return "";
+
+// if(nvl(value).length()>0) {
+// value = Utils.replaceInString(value, ",", "|");
+// value = value.indexOf("('")!=-1? value.substring(2, value.length()-2):value;
+// value = Utils.replaceInString(value, "'|'", ",");
+// }
+// return value;
+
+ } else
+ return (String) get(key);
+ }
+ else
+ return "";
+ } // getParamValue
+
+ public String getParamDisplayValue(String key) {
+ String value = getParamValue(key);
+ if (isParameterMultiValue(key))
+ value = "(" + Utils.replaceInString(value, "|", ",") + ")";
+ return value;
+ } // getParamValue
+
+ public String getParamBaseSQL(String key) {
+ return (String) multiValueBaseSQL.get(key);
+ } // getParamBaseSQL
+
+ /** ************************************************************************************************* */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ private boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+ private void clearValues() {
+ FormField ff = null;
+ String defaultValue = "";
+ String defaultSQL = "";
+ String defaultQuery = "";
+ DataSet dsDefault = null;
+ if (rff!= null) {
+ for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
+ String key = (String) enKeys.nextElement();
+ for(rff.resetNext(); rff.hasNext(); ) {
+ ff = rff.getNext();
+ if(ff.getFieldName().equals(key)) {
+ // Add default Value
+ defaultValue = ff.getDefaultValue();
+ defaultSQL = ff.getFieldDefaultSQL();
+ if(nvl(defaultValue).length()>0) {
+ put(key,ff.getDefaultValue());
+ } else if(nvl(defaultSQL).length() > 0) {
+ //defaultSQL = Utils.replaceInString(defaultSQL, "[LOGGED_USERID]", userId);
+ if(!(isParameterMultiValue(key) || isParameterTextAreaValue(key))) {
+ defaultQuery = "SELECT id, name FROM (SELECT rownum r, id, name FROM (" + defaultSQL
+ + ") x "
+ + ") xx ";
+ try {
+ dsDefault = ConnectionUtils.getDataSet(defaultQuery, ff.getDbInfo());
+ if(dsDefault!=null && dsDefault.getRowCount()>0) {
+ for (int i = 0; i < dsDefault.getRowCount(); i++) {
+ put(key, dsDefault.getString(i, 0));
+ }
+ }
+ } catch (RaptorException ex) {}
+ } else put(key, "");
+
+ } else put(key,"");
+ break;
+ }
+ }
+ }
+ }
+
+/* for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
+ String key = (String) enKeys.nextElement();
+ put(key,"");
+ }
+*/
+ }
+
+
+ public void printValues() {
+ for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
+ String key = (String) enKeys.nextElement();
+ String value = (String) get(key);
+ System.out.println("ReportParamValues " + key + " "+ value);
+ }
+ }
+
+ private String getDateAsString (String keyword) {
+ String sql = "";
+ if (keyword.equals("[PROCESSING_DATE]")) {
+ //sql = "select to_char(trunc(sysdate,'dd'), 'mm/dd/yyyy') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate,'dd'), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[PROCESSING_NEXT_DATE]")) {
+ //sql = "select to_char(trunc(sysdate+1,'dd'), 'mm/dd/yyyy') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate+1,'dd'), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[PROCESSING_DAY_BEFORE_DATE]")) {
+ //sql = "select to_char(trunc(sysdate-1,'dd'), 'mm/dd/yyyy') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate-1,'dd'), 'mm/dd/yyyy') as dateStr"+ Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[PROCESSING_MONTH_START_DATE]")) {
+ //sql = "select to_char(trunc(sysdate,'MM'), 'mm/dd/yyyy') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate,'MM'), 'mm/dd/yyyy') as dateStr"+ Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[PROCESSING_MONTH_END_DATE]")) {
+ //sql = "select to_char(last_day(sysdate), 'mm/dd/yyyy') as dateStr from dual";
+ sql = "select to_char(last_day(sysdate), 'mm/dd/yyyy') as dateStr" + Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[CURRENT_HOUR]")) {
+ //sql = "select to_char(trunc(sysdate,'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate,'HH24'),'mm/dd/yyyy HH24') as dateStr"+ Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[PREVIOUS_HOUR]")) {
+ //sql = "select to_char(trunc(sysdate-1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate-1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr" + Globals.getGenerateSqlVisualDual();
+ } else if (keyword.equals("[NEXT_HOUR]")) {
+ //sql = "select to_char(trunc(sysdate+1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr from dual";
+ sql = "select to_char(trunc(sysdate+1/24, 'HH24'),'mm/dd/yyyy HH24') as dateStr" + Globals.getGenerateSqlVisualDual();
+ }
+ DataSet ds = null;
+
+ try {
+ if(sql.length()>0) {
+ ds = DbUtils.executeQuery(sql);
+ return ds.getString(0,0);
+ }
+ else
+ return "";
+ } catch (RaptorException ex) {
+ ex.printStackTrace();
+ //throw ex;
+ }
+ return "";
+ }
+} // ReportParamValues
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValuesForPDFExcel.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValuesForPDFExcel.java
new file mode 100644
index 00000000..f4bb9800
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValuesForPDFExcel.java
@@ -0,0 +1,419 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.Enumeration;
+import java.util.Hashtable;
+import java.util.Iterator;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class ReportParamValuesForPDFExcel extends Hashtable {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportParamValuesForPDFExcel.class);
+
+ private Hashtable paramIsMultiValue = null;
+ private Hashtable paramIsTextAreaValue = null;
+ private ReportFormFields rff = null;
+
+ private Hashtable multiValueBaseSQL = null;
+
+ public ReportParamValuesForPDFExcel() {
+ super();
+ paramIsMultiValue = new Hashtable();
+ paramIsTextAreaValue = new Hashtable();
+ multiValueBaseSQL = new Hashtable();
+ } // ReportParamValues
+
+ public ReportParamValuesForPDFExcel(ReportFormFields rff, String reportDefType) {
+ this();
+ this.rff = rff;
+ for (Iterator iter = rff.iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+
+ put(ff.getFieldName(), nvl(ff.getDefaultValue()));
+
+ boolean isMultiValue = ff.getFieldType().equals(FormField.FFT_CHECK_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI);
+ boolean isTextAreaValue = ff.getFieldType().equals(FormField.FFT_TEXTAREA) && reportDefType
+ .equals(AppConstants.RD_SQL_BASED);
+ paramIsMultiValue.put(ff.getFieldName(), new Boolean(isMultiValue));
+ paramIsTextAreaValue.put(ff.getFieldName(), new Boolean(isTextAreaValue));
+ if (isMultiValue && ff.getBaseSQL() != null)
+ multiValueBaseSQL.put(ff.getFieldName(), ff.getBaseSQL());
+ } // for
+ } // ReportParamValues
+
+ /*
+ * public ReportParamValues(ReportFormFields rff, HttpServletRequest
+ * request) { this(rff);
+ *
+ * setParamValues(request); } // ReportParamValues
+ */
+ public boolean isParameterMultiValue(String fieldName) {
+ Boolean b = (Boolean) paramIsMultiValue.get(fieldName);
+ return (b != null) ? b.booleanValue() : false;
+ } // isParameterMultiValue
+
+ public boolean isParameterTextAreaValue(String fieldName) {
+ Boolean b = (Boolean) paramIsTextAreaValue.get(fieldName);
+ return (b != null) ? b.booleanValue() : false;
+ } // isParameterMultiValue
+
+ public boolean setParamValues(HttpServletRequest request, boolean refresh) {
+ //debugLogger.debug("ReportParamValues for PDF Excel setParamValues called " + refresh);
+ long currentTime = System.currentTimeMillis();
+ boolean paramUpdated = false;
+ if(refresh) clearValues();
+ String name = null;
+ String value = null;
+ String value1 = "";
+ String sql = "";
+ FormField ff = null;
+ String dbInfo = null;
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ if(rr!=null && rr.getReportType().equals(AppConstants.RT_DASHBOARD)) {
+ rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
+ if(rr!=null)
+ rff = rr.getReportFormFields();
+ } else if (rr == null) {
+ rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
+ if(rr!=null)
+ rff = rr.getReportFormFields();
+ } else {
+ rff = rr.getReportFormFields();
+ }
+
+ if(rr!=null) {
+ dbInfo = rr.getDBInfo();
+ if (Utils.isNull(dbInfo)) {
+ dbInfo = (String) request.getSession().getAttribute("remoteDB");
+ }
+ if(!Utils.isNull(dbInfo)){
+ for (Iterator iter = rff.iterator(); iter.hasNext();) {
+ name=""; //just added
+ ff = (FormField) iter.next();
+ //debugLogger.debug("ff.getFieldName " + ff.getFieldName() + " " + ff.getFieldDisplayName() + " " + ff.getFieldType()+ " " +ff.getBaseSQLForPDFExcel()+ " "+ rr.getParamValue(ff.getFieldName()));
+ if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
+ sql = ff.getBaseSQLForPDFExcel();
+ if(sql!=null && sql.trim().length()>0)
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", AppUtils.getUserID(request));
+ 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)) {
+ for (Enumeration enum1 = rr.getParamKeys(); enum1.hasMoreElements();) {
+ name = (String) enum1.nextElement();
+ value = rr.getParamValue(name);
+ value = getParamValueForSQL(name, value);
+ if(name.startsWith("ff")) {
+ for (Iterator iter1 = rff.iterator(); iter1.hasNext();) {
+ FormField ff1 = (FormField) iter1.next();
+
+ if(sql!=null && sql.trim().length()>0){
+ if(name.equals(ff.getFieldName())){
+ sql = Utils.replaceInString(sql, "[VALUE]", value);
+ }
+ if(name.equals(ff1.getFieldName())){
+ sql = Utils.replaceInString(sql, "["+ff1.getFieldDisplayName()+"]", value);
+
+ } else continue;
+ }
+ }
+ }
+ }
+ } else if (ff.getFieldType().equals(ff.FFT_LIST_MULTI)||ff.getFieldType().equals(ff.FFT_CHECK_BOX)) {
+ for (Enumeration enum1 = rr.getParamKeys(); enum1.hasMoreElements();) {
+ name = (String) enum1.nextElement();
+ value = rr.getParamValue(name);
+ value = getParamValueForSQL(name, value);
+ if(name.startsWith("ff")) {
+ for (Iterator iter1 = rff.iterator(); iter1.hasNext();) {
+ FormField ff1 = (FormField) iter1.next();
+
+ if(sql!=null && sql.trim().length()>0){
+ if(name.equals(ff.getFieldName())){
+ sql = Utils.replaceInString(sql, "[VALUE]", value);
+ }
+ if(name.equals(ff1.getFieldName())){
+ sql = Utils.replaceInString(sql, "["+ff1.getFieldDisplayName()+"]", value);
+
+ } else continue;
+ }
+ }
+ }
+ }
+ } else {
+ if(nvl(ff.getFieldDefaultSQL()).length()<=0)
+ sql = "";
+ }
+ if(sql!=null && sql.trim().length()>0){
+ name = "";
+ if(name.length()<=0) name = ff.getFieldName();
+ value = rr.getParamValue(name);
+ //debugLogger.debug("Name "+ name+ " value:" + value);
+ String paramValue = getParamValueForSQL(name, value);
+ //debugLogger.debug("PDFEXCEL " + name+ " " + ff.getFieldName()+ " " + value + " " + sql +" "+ paramValue);
+ if(name!=null && name.equals(ff.getFieldName()))
+ sql = Utils.replaceInString(sql, "[VALUE]", paramValue);
+ if(paramValue == null) {
+ if(sql.lastIndexOf("where id = ''")>0)
+ sql = sql.substring(0, sql.lastIndexOf("where id = ''"));
+ }
+ //debugLogger.debug("SQL Modified " + sql);
+ FormField ff2 = null;
+ for (Iterator iter1 = rff.iterator(); iter1.hasNext();) {
+ ff2 = (FormField)iter1.next();
+ sql = Utils.replaceInString(sql, "[" + ff2.getFieldDisplayName() +"]", getParamValue(ff2.getFieldName()));
+ }
+ //debugLogger.debug("SQL Modified after replacing formfield" + sql);
+ try {
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
+ javax.servlet.http.HttpSession session = request.getSession();
+ //debugLogger.debug("B4 Session " + sql);
+ if(session != null ) {
+ for (int i = 0; i < sessionParameters.length; i++) {
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ }
+ //debugLogger.debug("B4 request " + sql);
+ if(request != null ) {
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ }
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff")) {
+ if (request.getParameter(reqParameters[i])!=null) {
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i]+"]", request.getParameter(reqParameters[i]) );
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ else {
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i]+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ }
+ }
+ else
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ }
+ //debugLogger.debug("After request " + sql);
+ DataSet ds = null;
+ try {
+ ds = ConnectionUtils.getDataSet(sql, dbInfo);
+ } catch (ReportSQLException ex) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("sql not complete" + sql));
+ }
+ if(ff.getFieldType().equals(FormField.FFT_LIST_MULTI) || ff.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ StringBuffer multiValue = new StringBuffer("");
+ if(ds!=null) {
+ for(int i = 0; i < ds.getRowCount(); i++) {
+ //if(i==0) multiValue.append("(");
+ multiValue.append(ds.getString(i,1));
+ if(i<ds.getRowCount()-1)
+ multiValue.append("|");
+ //else multiValue.append(")");
+
+ }
+ }
+ put(ff.getFieldName(), nvl(multiValue.toString()));
+ } else {
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
+ value1 = nvl(rr.getParamValue(ff.getFieldName())) + " "+addZero(Utils.oracleSafe(nvl(rr
+ .getParamValue(ff.getFieldName()+"_Hr"))));
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
+ value1 = value1 + (nvl(rr
+ .getParamValue(ff.getFieldName()+"_Min")).length() > 0 ? ":" + addZero(Utils.oracleSafe(nvl(rr
+ .getParamValue(ff.getFieldName()+"_Min")))) : "");
+ }
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
+ value1 = value1 + (nvl(rr
+ .getParamValue(ff.getFieldName()+"_Sec")).length() > 0 ? ":"+ addZero(Utils.oracleSafe(nvl(rr
+ .getParamValue(ff.getFieldName()+"_Sec")))) : "");
+ }
+ //debugLogger.debug("77777777777777 " + value1);
+ put(ff.getFieldName(), nvl(value1));
+ } else {
+
+ if(ds!=null && ds.getRowCount()>0) put(ff.getFieldName(), nvl(ds.getString(0,1)));
+ else put(ff.getFieldName(), nvl(value));
+ }
+ }
+
+ paramUpdated = true;
+ } catch (ReportSQLException ex) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("sql not complete" + sql));
+ }
+ catch (Exception ex) {}
+
+ //debugLogger.debug("66666666666666666 " + ff.getValidationType());
+
+ //Added for TimeStamp validation
+
+ } else {
+ if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
+ //Added for TimeStamp validation
+ //debugLogger.debug("666666666666 " + ff.getValidationType());
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
+ value1 = nvl(rr.getParamValue(ff.getFieldName())) + " "+addZero(Utils.oracleSafe(nvl(rr
+ .getParamValue(ff.getFieldName()+"_Hr"))));
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
+ value1 = value1 + (nvl(rr
+ .getParamValue(ff.getFieldName()+"_Min")).length() > 0 ? ":" + addZero(Utils.oracleSafe(nvl(rr
+ .getParamValue(ff.getFieldName()+"_Min")))) : "");
+ }
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC) ) {
+ value1 = value1 + (nvl(rr
+ .getParamValue(ff.getFieldName()+"_Sec")).length() > 0 ? ":"+ addZero(Utils.oracleSafe(nvl(rr
+ .getParamValue(ff.getFieldName()+"_Sec")))) : "");
+ }
+ //debugLogger.debug("77777777777777 " + value1);
+ } else
+ value1 = nvl(rr.getParamValue(ff.getFieldName()));
+ if(value1.length()<=0) value1 = nvl(ff.getDefaultValue());
+ put(ff.getFieldName(), nvl(value1));
+
+ }
+ paramUpdated = true;
+ }
+
+ } // BLANK
+ } // for
+ } // dbInfo
+ } // !=null
+
+ //printValues();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for Adding/Clearing Param Values for FormField Info Bar " + (System.currentTimeMillis() - currentTime)));
+ return paramUpdated;
+ } // setParamValues
+
+ public String getParamValue(String key) {
+ if (key!=null)
+ return (String) get(key);
+ else
+ return "NULL";
+ } // getParamValue
+
+ public String getParamValueForSQL(String key, String value) {
+ value = Utils.oracleSafe(value);
+ if (isParameterMultiValue(key))
+ value = "('" + Utils.replaceInString(value, "|", "','") + "')";
+ return value;
+ } // getParamValue
+
+ public String getParamDisplayValue(String key) {
+ //debugLogger.debug("Key is " + key +" Value is " + getParamValue(key));
+ String value = getParamValue(key);
+ if (isParameterMultiValue(key))
+ value = "(" + Utils.replaceInString(value, "|", ",") + ")";
+ return value;
+ } // getParamValue
+
+ public String getParamBaseSQL(String key) {
+ return (String) multiValueBaseSQL.get(key);
+ } // getParamBaseSQL
+
+ /** ************************************************************************************************* */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ private boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+ private void clearValues() {
+ FormField ff = null;
+ String defaultValue = "";
+ String defaultSQL = "";
+ String defaultQuery = "";
+ DataSet dsDefault = null;
+ if (rff!= null) {
+ for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
+ String key = (String) enKeys.nextElement();
+ for(rff.resetNext(); rff.hasNext(); ) {
+ ff = rff.getNext();
+ if(ff.getFieldName().equals(key)) {
+ // Add default Value
+ defaultValue = ff.getDefaultValue();
+ defaultSQL = ff.getFieldDefaultSQL();
+ if(nvl(defaultValue).length()>0) {
+ put(key,ff.getDefaultValue());
+ } else if(nvl(defaultSQL).length() > 0) {
+ //defaultSQL = Utils.replaceInString(defaultSQL, "[LOGGED_USERID]", userId);
+ if(!(isParameterMultiValue(key) || isParameterTextAreaValue(key))) {
+ defaultQuery = "SELECT id, name FROM (SELECT rownum r, id, name FROM (" + defaultSQL
+ + ") x "
+ + ") xx ";
+ try {
+ dsDefault = ConnectionUtils.getDataSet(defaultQuery, ff.getDbInfo());
+ if(dsDefault!=null && dsDefault.getRowCount()>0) {
+ for (int i = 0; i < dsDefault.getRowCount(); i++) {
+ put(key, dsDefault.getString(i, 1));
+ }
+ }
+ } catch (RaptorException ex) {}
+ } else put(key, "");
+
+ } else put(key,"");
+ break;
+ }
+ }
+ }
+ }
+
+ }
+
+ public void printValues() {
+ for (Enumeration enKeys = keys(); enKeys.hasMoreElements();) {
+ String key = (String) enKeys.nextElement();
+ String value = (String) get(key);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("ReportParamValuesForPDFEXCEL " + key + " "+ value));
+ }
+ }
+ public String addZero(String num) {
+ int numInt = 0;
+ try {
+ numInt = Integer.parseInt(num);
+ }catch(NumberFormatException ex){
+ numInt = 0;
+ }
+ if(numInt < 10) return "0"+numInt;
+ else return ""+numInt;
+ }
+
+} // ReportParamValues
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java
new file mode 100644
index 00000000..fd8fadcb
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java
@@ -0,0 +1,3618 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.io.Serializable;
+import java.sql.Connection;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.StringTokenizer;
+import java.util.Vector;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.DataCache;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.model.ReportLoader;
+import org.openecomp.portalsdk.analytics.model.base.IdNameList;
+import org.openecomp.portalsdk.analytics.model.base.IdNameSql;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.model.base.ReportWrapper;
+import org.openecomp.portalsdk.analytics.model.definition.Marker;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.analytics.view.ColumnHeader;
+import org.openecomp.portalsdk.analytics.view.ColumnHeaderRow;
+import org.openecomp.portalsdk.analytics.view.CrossTabOrderManager;
+import org.openecomp.portalsdk.analytics.view.CrossTabTotalValue;
+import org.openecomp.portalsdk.analytics.view.DataRow;
+import org.openecomp.portalsdk.analytics.view.DataValue;
+import org.openecomp.portalsdk.analytics.view.ReportData;
+import org.openecomp.portalsdk.analytics.view.RowHeaderCol;
+import org.openecomp.portalsdk.analytics.xmlobj.CustomReportType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+
+/**<HR/>
+ * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
+ * <HR/>
+ *
+ * --------------------------------------------------------------------------------------------------<BR/>
+ * <B>ReportRuntime.java</B> - This class involves in running, downloading RAPTOR reports.
+ * --------------------------------------------------------------------------------------------------<BR/>
+ *
+ *
+ * <U>Change Log</U><BR/><BR/>
+ *
+ * 27-Aug-2009 : Version 8.5 (Sundar); <UL><LI>Order by logic is restored for DAYTONA.</LI></UL>
+ * 13-Aug-2009 : Version 8.5 (Sundar); <UL><LI>Removing order by logic is rollbacked.</LI></UL>
+ * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI>Bug while parsing SQL for text download is fixed.</LI></UL>
+ *
+ */
+
+public class ReportRuntime extends ReportWrapper implements Cloneable, Serializable {
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportRuntime.class);
+
+
+ //TODO DELETE IF PARSE SQL is not working
+ private int curSQLParsePos = 0;
+
+ private String xmlFileURL = null;
+
+ private String xmlFileName = null;
+
+ private String flatFileName = null;
+
+ private String excelPageFileName = null;
+
+ private int reportDataSize = -1;
+
+ private boolean displayChart = true;
+
+ private boolean displayForm = true;
+
+ private boolean displayContent = true;
+
+ private boolean reportRunLogged = false; // Used to avoid multiple
+ // entries in the report log
+ // when executing with different
+ // params or going to next page
+
+ private DataSet chartDataCache = null;
+
+ private ReportData pageDataCache = null;
+
+ private int cachedPageNo = -1;
+
+ private String cachedSQL = null; // For display purposes only
+
+ private String wholeSQL = null; // For display purposes only
+
+ private String totalSql = null; // For display purposes only
+
+ private ReportParamValues reportParamValues = null;
+
+ private ReportParamValuesForPDFExcel reportParamValuesFPE = null;
+
+ private ReportFormFields reportFormFields = null;
+
+ private VisualManager visualManager = null;
+
+ private CrossTabOrderManager crossTabOrderManager = null;
+
+ private boolean displayColTotals = false;
+
+ private boolean displayRowTotals = false;
+
+ private DataRow colDataTotalsLinear = null;
+
+ private Vector colDataTotalsCrosstab = null;
+
+ private Vector rowDataTotalsCrosstab = null;
+
+ private String grandTotalCrosstab = null;
+
+ public static int DISPLAY_DATA_ONLY = 1;
+ public static int DISPLAY_CHART_ONLY = 2;
+ public static int DISPLAY_CHART_AND_DATA = 3;
+
+ public static final int DATE_OPTION_MONTHLY = 1;
+ public static final int DATE_OPTION_YEARLY = 2;
+ public static final int DATE_OPTION_DAILY = 3;
+
+
+ private int DISPLAY_MODE = 0;
+
+ private int DATE_OPTION = -1;
+
+ /*
+ * private ReportRuntime(CustomReport cr, String reportID,
+ * HttpServletRequest request) { super(cr, reportID);
+ *
+ * reportParamValues = new ReportParamValues(this); reportFormFields = new
+ * ReportFormFields(this);
+ *
+ * if(request!=null) setParamValues(request); } // ReportRuntime
+ */
+ private ReportRuntime(CustomReportType crType, String reportID, HttpServletRequest request,
+ String ownerID, String createID, String createDate, String updateID,
+ String updateDate, String menuID, boolean menuApproved) throws RaptorException {
+ super(crType, reportID, ownerID, createID, createDate, updateID, updateDate, menuID,
+ menuApproved);
+ initializeReportRuntime(request);
+ } // ReportRuntime
+
+ public ReportRuntime(ReportWrapper rw) throws RaptorException {
+ this(rw, null);
+ } // ReportRuntime
+
+ public ReportRuntime(ReportWrapper rw, HttpServletRequest request)throws RaptorException {
+ super(rw);
+ initializeReportRuntime(request);
+ } // ReportRuntime
+
+ private void initializeReportRuntime(HttpServletRequest request) throws RaptorException {
+ reportFormFields = new ReportFormFields(this, request);
+ setParamValues(request, true, true);
+
+ visualManager = new VisualManager();
+ } // initializeReportRuntime
+
+// public void setReportFormFields(HttpServletRequest request) {
+// reportFormFields = new ReportFormFields(this, request);
+// setParamValues(request, true, true);
+// }
+
+ public static ReportRuntime unmarshal(String reportXML, String reportID)
+ throws RaptorException {
+ return unmarshal(reportXML, reportID, null);
+ } // unmarshal
+
+ public static ReportRuntime unmarshal(String reportXML, String reportID,
+ HttpServletRequest request) throws RaptorException {
+ CustomReportType crType = ReportWrapper.unmarshalCR(reportXML);
+ ObjectFactory objFactory = new ObjectFactory();
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report [" + reportID + "]: XML unmarshalled"));
+
+ return new ReportRuntime(crType, reportID, request, null, null, null, null, null, null,
+ false);
+
+ } // unmarshal
+
+ public String getXmlFileURL() {
+ return xmlFileURL;
+ }
+
+ public String getXmlFileName() {
+ return xmlFileName;
+ }
+
+ public String getFlatFileName() {
+ return flatFileName;
+ }
+
+ public String getExcelPageFileName() {
+ return excelPageFileName;
+ }
+
+ public int getReportDataSize() {
+ return reportDataSize;
+ }
+
+ public boolean getDisplayChart() {
+ return displayChart;
+ }
+
+ public boolean getDisplayForm() {
+ return displayForm;
+ }
+
+ public boolean getDisplayContent() {
+ return displayContent;
+ }
+
+ public int getCachedPageNo() {
+ return cachedPageNo;
+ }
+
+ public String getCachedSQL() {
+ return cachedSQL;
+ }
+
+ public boolean isDashboardType() throws RaptorException {
+ return ReportLoader.isDashboardType(getReportID());
+ }
+
+
+ public void setXmlFileURL(String xmlFileURL) {
+ this.xmlFileURL = xmlFileURL;
+ }
+
+ public void setXmlFileName(String xmlFileName) {
+ this.xmlFileName = xmlFileName;
+ }
+
+ public void setFlatFileName(String flatFileName) {
+ this.flatFileName = flatFileName;
+ }
+
+ public void setExcelPageFileName(String excelPageFileName) {
+ this.excelPageFileName = excelPageFileName;
+ }
+
+ /*private*/ public void setReportDataSize(int reportDataSize) {
+ this.reportDataSize = reportDataSize;
+ }
+
+ private void setDisplayForm(boolean displayForm) {
+ this.displayForm = displayForm;
+ }
+
+ private void setDisplayContent(boolean displayContent) {
+ this.displayContent = displayContent;
+ }
+
+ public void setDisplayFlags(boolean isFirstAccess, boolean forceDisplayContent) {
+ if (isFirstAccess) {
+ setDisplayForm(true);
+
+ if (forceDisplayContent)
+ setDisplayContent(true);
+ else if (Globals.getDisplayFormBeforeRun())
+ if (needFormInput())
+ setDisplayContent(false);
+ else
+ setDisplayContent(true);
+ else
+ setDisplayContent(true);
+ } else {
+ setDisplayContent(true);
+
+ if (Globals.getIncludeFormWithData())
+ setDisplayForm(true);
+ else if (Globals.getDisplayFormBeforeRun())
+ setDisplayForm(false);
+ else
+ setDisplayForm(true);
+ } // else
+ } // setDisplayFlags
+
+ public void logReportRun(String userID, String executionTime, String formFields) throws RaptorException {
+ if (reportRunLogged)
+ return;
+
+ ReportLoader.createReportLogEntry(null, reportID, userID, AppConstants.RLA_RUN,executionTime,formFields );
+ reportRunLogged = true;
+ } // logReportRun
+
+ public void logReportExecutionTime(String userId, String executionTime, String action, String formFields) throws RaptorException {
+ ReportLoader.createReportLogEntryForExecutionTime(null, reportID, userId,executionTime , action, formFields);
+ }
+
+ public void logReportExecutionTimeFromLogList (String userId, String executionTime, String formFields) throws RaptorException {
+ ReportLoader.createReportLogEntryForExecutionTime(null, reportID, userId,executionTime , AppConstants.RLA_FROM_LOG, formFields);
+ }
+
+ public void resetVisualSettings() {
+ boolean haveToResetCachedData = (visualManager.getSortByColId().length() > 0);
+ visualManager = new VisualManager();
+
+ if (haveToResetCachedData)
+ pageDataCache = null;
+
+ if (pageDataCache != null)
+ pageDataCache.resetVisualSettings();
+ } // resetVisualSettings
+
+ /** ************** ReportParamValues processing *************** */
+
+ public boolean setParamValues(HttpServletRequest request, boolean resetParams, boolean refresh) throws RaptorException {
+ boolean paramsUpdated = false;
+ if (resetParams) {
+ reportFormFields = new ReportFormFields(this, request);
+ reportParamValues = new ReportParamValues(reportFormFields, getReportDefType());
+ // This is called even in the wizard page. Hence this condition.
+ if((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null)
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ paramsUpdated = true;
+
+ reportRunLogged = false;
+ } else if (request != null) {
+ paramsUpdated = reportParamValues.setParamValues(request,refresh);
+ }
+ // This is called even in the wizard page. Hence this condition.
+ if((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null) {
+ if(reportParamValuesFPE!=null) reportParamValuesFPE.setParamValues(request,refresh);
+ else {
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ reportParamValuesFPE.setParamValues(request,refresh);
+ }
+ } else {
+ reportFormFields = new ReportFormFields(this, request);
+ //added below two lines for dashboard default value
+ reportParamValues = new ReportParamValues(reportFormFields, getReportDefType());
+ reportParamValues.setParamValues(request,refresh);
+ //End
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ reportParamValuesFPE.setParamValues(request,refresh);
+
+ }
+// }
+ if (paramsUpdated) {
+ setReportDataSize(-1);
+ chartDataCache = null;
+ pageDataCache = null;
+ cachedPageNo = -1;
+
+ crossTabOrderManager = null;
+
+ colDataTotalsLinear = null;
+ colDataTotalsCrosstab = null;
+ rowDataTotalsCrosstab = null;
+ grandTotalCrosstab = null;
+ if(!refresh)
+ resetVisualSettings();
+ } // if
+
+ displayChart = (request.getParameter(AppConstants.RI_DISPLAY_CHART) == null) ? !isDisplayOptionHideChart() : request.getParameter("display_chart")
+ .equals("Y");
+
+ return paramsUpdated;
+ } // setParamValues
+
+ public String getParamValue(String key) {
+ //reportParamValues.printValues();
+ return reportParamValues.getParamValue(key);
+ } // getParamValue
+
+ public String getParamDisplayValue(String key) {
+ //reportParamValues.printValues();
+ return reportParamValues.getParamDisplayValue(key);
+ } // getParamValue
+
+ public Enumeration getParamKeys() {
+ return reportParamValues.keys();
+ } // getParamKeys
+
+ public Enumeration getParamKeysForPDFExcel() {
+ return reportParamValuesFPE.keys();
+ } // getParamKeys
+
+ public String getParamValueForPDFExcel(String key) {
+ return reportParamValuesFPE.getParamValue(key);
+ } // getParamValue
+
+ public ArrayList getParamNameValuePairs() {
+ ArrayList paramList = new ArrayList(getReportFormFields().size());
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ paramList.add(new IdNameValue(ff.getFieldDisplayName(), reportParamValues
+ .getParamDisplayValue(ff.getFieldName())));
+ } // for
+ return paramList;
+ } // getParamNameValuePairs
+
+ public ArrayList getParamNameValuePairsforPDFExcel(HttpServletRequest request, int type /*excel =1; pdf=2*/) {
+ javax.servlet.http.HttpSession session = request.getSession();
+ ArrayList paramList = new ArrayList(getReportFormFields().size());
+ if(session.getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO)!=null) {
+ paramList = (ArrayList) session.getAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO);
+ if(paramList!=null && paramList.size()>0)
+ return paramList;
+ }
+ //System.out.println(" getParamNamePairs type " + type + " " + Globals.customizeFormFieldInfo());
+ if ( reportParamValuesFPE == null) {
+ reportParamValuesFPE = new ReportParamValuesForPDFExcel(reportFormFields, getReportDefType());
+ reportParamValuesFPE.setParamValues(request,true);
+ }
+
+ String valueString = "";
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(ff.isVisible() && /*!ff.getFieldType().equals(FormField.FFT_HIDDEN) &&*/ type == 1){
+ valueString = reportParamValuesFPE.getParamDisplayValue(ff.getFieldName());
+ } else if(ff.isVisible() && type != 1) {
+ valueString = reportParamValuesFPE.getParamDisplayValue(ff.getFieldName());
+ }
+ if(valueString.equalsIgnoreCase("NULL"))
+ valueString="";
+ paramList.add(new IdNameValue(ff.getFieldDisplayName(), valueString));
+// }
+ } // for
+
+ String pdfAttachmentKey = AppUtils.getRequestValue(request, "pdfAttachmentKey");
+ boolean isSchedule = false;
+ if(pdfAttachmentKey != null)
+ isSchedule = true;
+ if(Globals.customizeFormFieldInfo() && type == 2) {
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+
+ if(session != null && !isSchedule ) {
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ for (int i = 0; i < sessionParameters.length; i++) {
+ if(session.getAttribute(sessionParameters[i])!=null)
+ paramList.add(new IdNameValue(sessionParameters[i].toUpperCase(), (String)session.getAttribute(sessionParameters[i])));
+ }
+ }
+
+ if(isSchedule) {
+ //debugLogger.debug("Globals " + Globals.getSessionParamsForScheduling());
+ String[] scheduleSessionParam = Globals.getSessionParamsForScheduling().split(",");
+ for (int i = 0; i < scheduleSessionParam.length; i++) {
+ //debugLogger.debug(" scheduleSessionParam[i] " + scheduleSessionParam[i] + " " + request.getParameter(scheduleSessionParam[i]) );
+ if(request.getParameter(scheduleSessionParam[i])!=null)
+ paramList.add(new IdNameValue(scheduleSessionParam[i].toUpperCase(), request.getParameter(scheduleSessionParam[i])));
+ }
+ }
+
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+ paramList.add(new IdNameValue("DATE", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
+ } catch(Exception ex) {}
+
+ } else {
+ //System.out.println(" In Else getParamNamePairs type " + type);
+ String[] sessionDisplayParameters = Globals.getDisplaySessionParamInPDFEXCEL().split(",");
+ if(session != null && !isSchedule ) {
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ for (int i = 0; i < sessionDisplayParameters.length; i++) {
+ String sessionDispParam = sessionDisplayParameters[i];
+ if(nvl(sessionDispParam).length()>0) {
+ String sessionDispParamArr[] = sessionDispParam.split(";");
+ //System.out.println("Session " + sessionDispParamArr[1] + " " + (String)session.getAttribute(sessionDispParamArr[0]));
+ paramList.add(new IdNameValue(sessionDispParamArr[1], nvl((String)session.getAttribute(sessionDispParamArr[0]),"")));
+ }
+ }
+ }
+ if(isSchedule) {
+ String[] scheduleSessionParam = Globals.getDisplayScheduleSessionParamInPDFEXCEL().split(",");
+ for (int i = 0; i < scheduleSessionParam.length; i++) {
+ String scheduleSessionDispParam = scheduleSessionParam[i];
+ if(nvl(scheduleSessionDispParam).length()>0) {
+ String scheduleSessionDispParamArr[] = scheduleSessionDispParam.split(";");
+ paramList.add(new IdNameValue(scheduleSessionDispParamArr[1], nvl(request.getParameter(scheduleSessionDispParamArr[0]),"")));
+ }
+ }
+ }
+ try {
+ SimpleDateFormat oracleDateFormat = new SimpleDateFormat("MM/dd/yyyy kk:mm:ss");
+ Date sysdate = oracleDateFormat.parse(ReportLoader.getSystemDateTime());
+ SimpleDateFormat dtimestamp = new SimpleDateFormat(Globals.getScheduleDatePattern());
+ paramList.add(new IdNameValue("Report Date/Time", dtimestamp.format(sysdate)+" "+Globals.getTimeZone()));
+ } catch(Exception ex) {}
+
+ }
+
+ for (int i = 0; i < paramList.size(); i++) {
+ IdNameValue value = (IdNameValue) paramList.get(i);
+ String name = value.getName().replaceAll(",","~");
+ value.setName(name);
+ }
+ //request.getSession().setAttribute(AppConstants.SI_FORMFIELD_DOWNLOAD_INFO, paramList);
+ return paramList;
+ } // getParamNameValuePairs
+
+ /** ************** ReportFormFields processing *************** */
+
+ public String getFormFieldComments(HttpServletRequest request) {
+ String comment = "";
+ StringBuffer st = new StringBuffer("");
+ if(getFormFieldList()!=null){
+ comment = nvl(getFormFieldList().getComment());
+ ArrayList al = null;
+ if(comment.length()>0) {
+ al = getParamNameValuePairsforPDFExcel(request, 2);
+ if(al!=null) {
+ //st = new StringBuffer(comment);
+ for (int i=0; i < al.size(); i++) {
+ IdNameValue idNameValue = (IdNameValue)al.get(i);
+ if(nvl(idNameValue.getId()).equals("DATE"))
+ st.append("<b>Date/Time Report Run:</b>"+ idNameValue.getName() +"<br></br>");
+ }
+
+ for (int i=0; i < al.size(); i++) {
+ IdNameValue idNameValue = (IdNameValue)al.get(i);
+ comment = Utils.replaceInString(comment, "["+ idNameValue.getId()+"]", idNameValue.getName());
+ }
+ st.append(comment);
+
+ }
+ }
+ }
+ return st.toString();
+ }
+
+ public boolean needFormInput() {
+ return reportFormFields.getFieldCount() > 0;
+ } // needFormInput
+
+ public FormField getFormField(String fieldName) {
+ return reportFormFields.getFormField(fieldName);
+ } // getFormField
+
+ public ReportFormFields getReportFormFields() {
+ return reportFormFields;
+ } // getReportFormFields
+
+ /** ************** Report Data processing *************** */
+ public DataSet loadChartData(String userId, HttpServletRequest request) throws RaptorException {
+ if (nvl(getChartType()).length() == 0)
+ return null;
+ if (!getDisplayChart())
+ return null;
+
+ DataSet ds = chartDataCache;
+ String sql = null;
+ if (ds == null) {
+ sql = generateChartSQL(reportParamValues, userId, request);
+ String dbInfo = getDBInfo();
+ ds = ConnectionUtils.getDataSet(sql, dbInfo);
+ if (Globals.getCacheChartData())
+ chartDataCache = ds;
+ } // if
+
+ return ds;
+ } // loadChartData
+
+ public String getReportDataSQL(String userId, int downloadLimit, HttpServletRequest request) throws RaptorException {
+ //String reportSQL = generateSQL(reportParamValues, userId, request);
+ String reportSQL = "";
+ if(doesReportContainsGroupFormField()) {
+ reportSQL = generateSubsetSQL(0, downloadLimit,userId, request, true, reportParamValues);
+ } else
+ reportSQL = generateSubsetSQL(0, downloadLimit,userId, request, false, reportParamValues);
+ return reportSQL;
+ }
+
+ public ReportData loadReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
+ ReportData rd = null;
+ boolean isGoBackAction = AppUtils.getRequestFlag(request, AppConstants.RI_GO_BACK);
+ if (pageNo >= 0)
+ if (pageNo == cachedPageNo && pageDataCache != null)
+ rd = pageDataCache;
+
+ if(isGoBackAction && rd!=null) return rd;
+ if (rd == null) { // Commented So that Data is refreshed from DB again
+ if (getReportDataSize() < 0)
+ //if (pageNo > 0)
+ //pageNo = 0;
+
+ if (getReportType().equals(AppConstants.RT_CROSSTAB))
+ rd = loadCrossTabReportData(pageNo, userId, downloadLimit, request, download);
+ else if (getReportType().equals(AppConstants.RT_LINEAR))
+ rd = loadLinearReportData(pageNo, userId, downloadLimit, request, download);
+ else
+ throw new RuntimeException(
+ "[ReportRuntime.loadReportData] Invalid report type");
+
+ if (pageNo >= 0)
+ if (Globals.getCacheCurPageData()) {
+ pageDataCache = rd;
+ cachedPageNo = pageNo;
+ }
+ } // if // Commented So that Data is refreshed from DB again
+
+ return rd;
+ } // loadReportData
+
+ private ReportData loadCrossTabReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
+ String reportSQL = generateSQL(reportParamValues, userId, request);
+ setWholeSQL(reportSQL);
+ //if(getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ // reportSQL = new SQLCorrector().fixCrosstabSQL(new StringBuffer(reportSQL));
+ cachedSQL = reportSQL;
+ wholeSQL = reportSQL;
+ //if (crossTabOrderManager == null
+ ///*&& (!getReportDefType().equals(AppConstants.RD_SQL_BASED))*/)
+ //crossTabOrderManager = new CrossTabOrderManager(this, userId,request);
+/* boolean isGoBackAction = AppUtils.getRequestFlag(request, AppConstants.RI_GO_BACK);
+ if(isGoBackAction) {
+ crossTabOrderManager = null;
+ crossTabOrderManager = new CrossTabOrderManager(this, userId,request);
+ }
+*/
+ List reportCols = getAllColumns();
+ // replace the request parameter specified in the drill down
+ DataColumnType dataColumnRequest = getCrossTabValueColumn();
+ reportSQL = parseReportSQLForDrillDownParams(reportSQL, dataColumnRequest, request);
+
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = getDBInfo();
+ StringBuffer colNames = new StringBuffer();
+ StringBuffer colExtraIdNames = new StringBuffer();
+ StringBuffer colExtraDateNames = new StringBuffer();
+
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dc = (DataColumnType) iter.next();
+ //TODO: commented if (dc.isVisible()) {
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ //TODO uncomment if it's not working} // if
+
+ // Checking for extra fields necessary for drill-down
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ System.out.println("Drilldown URL " + dc.getDrillDownURL());
+
+ }
+ } // for
+
+ if (reportSQL.toUpperCase().indexOf("GROUP BY ") < 0)
+ colNames.append(colExtraIdNames.toString());
+ colNames.append(colExtraDateNames.toString());
+ //reportSQL = " SELECT ROWNUM rnum, "
+ // + colNames.toString() + " FROM (" + reportSQL + ") ";
+
+ String rSQL = Globals.getLoadCrosstabReportData();
+ rSQL = rSQL.replace("[colNames.toString()]", colNames.toString());
+ rSQL = rSQL.replace("[reportSQL]", reportSQL);
+ reportSQL = rSQL;
+ setWholeSQL(reportSQL);
+ if (crossTabOrderManager == null)
+ crossTabOrderManager = new CrossTabOrderManager(this, userId,request);
+ ds = ConnectionUtils.getDataSet(reportSQL, dbInfo);
+ // if ( (remDbInfo!=null) && (!remDbInfo.equals(AppConstants.DB_LOCAL)))
+ // ds = RemDbUtils.executeQuery(reportSQL);
+ // else
+ // ds = DbUtils.executeQuery(reportSQL);
+ /*
+ * } catch(SQLException e) { throw new
+ * ReportSQLException("[ReportRuntime.loadCrossTabReportData]
+ * "+e.getMessage(), reportSQL); }
+ */
+
+ ReportData rd = new ReportData(pageNo, false);
+ ReportFormFields childReportFormFields = null;
+ if(doesReportContainsGroupFormField()) {
+ List reportCols1 = getAllColumns();
+ reportCols = new Vector();
+ outer:
+ for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ for (int k=0; k<ds.getColumnCount(); k++) {
+ if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
+ reportCols.add(dct);
+ continue outer;
+ }
+ }
+ }
+
+ if (getFormFieldList() != null) {
+ String paramValue = "";
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ paramValue = Utils.oracleSafe(nvl(reportParamValues
+ .getParamValue(fft.getFieldId())));
+ outer:
+ for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter1.next();
+ if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
+ dct.setDisplayName(paramValue);
+ continue outer;
+ }
+ }
+
+
+ }
+ }
+ }
+ }
+
+ int dataColumnIdx = (rd.reportRowHeaderCols.size() + rd.reportColumnHeaderRows.size())-1;
+ DataColumnType dataColumn = getCrossTabValueColumn();
+
+ String columnValue = "";
+
+
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+ childReportFormFields = getChildReportFormFields(request,dct.getDrillDownURL());
+ }
+
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW)) {
+ RowHeaderCol rhc = new RowHeaderCol();
+ rhc.setColumnTitle(dct.getDisplayName());
+ // rhc.setColumnWidth("10%");
+ //rhc.setColumnWidth(dct.getDisplayWidth() + "%");
+ if(nvl(dct.getDisplayWidthInPxls()).length()<=0) {
+ dct.setDisplayWidthInPxls("100px");
+ }
+ if(dct.getDisplayWidthInPxls().endsWith("px"))
+ rhc.setColumnWidth(dct.getDisplayWidthInPxls());
+ else
+ rhc.setColumnWidth(dct.getDisplayWidthInPxls()+"px");
+
+ rhc.setAlignment(dct.getDisplayAlignment());
+ rhc.setDisplayHeaderAlignment(dct.getDisplayHeaderAlignment());
+ rhc.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
+ rd.reportRowHeaderCols.addRowHeaderCol(rhc);
+ } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ ColumnHeaderRow chr = new ColumnHeaderRow();
+ chr.setAlignment(dct.getDisplayHeaderAlignment());
+ chr.setRowHeight("15");
+ if(nvl(dct.getDisplayWidthInPxls()).length()<=0) {
+ dct.setDisplayWidthInPxls("80px");
+ }
+ if(dct.getDisplayWidthInPxls().endsWith("px"))
+ chr.setDisplayWidth(dct.getDisplayWidthInPxls());
+ else
+ chr.setDisplayWidth(dct.getDisplayWidthInPxls()+"px");
+
+ rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
+ } else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE)) {
+ columnValue = dct.getColId();
+ } else {
+ if(!dct.getColId().toLowerCase().endsWith("_sort")) {
+ RowHeaderCol rhc = new RowHeaderCol();
+ rhc.setVisible(false);
+ rd.reportRowHeaderCols.addRowHeaderCol(rhc);
+ }
+ }
+ } // for
+
+ //int dataColumnIdx = getCrossTabValueColumnIndex();
+ FormatProcessor formatProcessor = new FormatProcessor(getSemaphoreById(dataColumn
+ .getSemaphoreId()),
+ getReportDefType().equals(AppConstants.RD_SQL_BASED) ? AppConstants.CT_NUMBER
+ : dataColumn.getColType(), dataColumn.getColFormat(), false);
+ List dataList = new ArrayList();
+ /* //fillup all rows based on rowheaders
+ Vector rowHeaders = crossTabOrderManager.getRowHeaderValues();
+ CrossTabColumnValues crossTabRowValues;
+ int size = 0;
+ for (int i = 0; i < rowHeaders.size(); i++) {
+ if((i+1)==rowHeaders.size()) {
+ crossTabRowValues = (CrossTabColumnValues) rowHeaders.get(i);
+ size = crossTabRowValues.getValuesCount();
+ }
+ }
+
+ for (int i = 0; i < size; i++) {
+ dataList.add(new DataRow());
+ }*/
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ Vector rValues = new Vector();
+ Vector cValues = new Vector();
+ Vector cValuesSort = new Vector();
+
+ int colIdx = 0;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ try {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW))
+ rValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
+ if (nvl(dct.getCrossTabValue()).trim().length()<=0 && !dct.getColId().toLowerCase().endsWith("_sort"))
+ rValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ cValues.add(addDataValue(dct, ds.getString(i, dct.getColId())));
+ if(getColumnById(dct.getColId().toLowerCase()+"_sort")!=null)
+ cValuesSort.add(addDataValue(dct, new Integer(ds.getString(i, dct.getColId()+"_sort")).toString()));
+ }
+ if (dct.isVisible())
+ colIdx++;
+ } catch (ArrayIndexOutOfBoundsException ex ) {continue;}
+ catch (NumberFormatException ex1) {
+ ex1.printStackTrace();
+ continue;
+ }
+ } // for
+
+ DataValue dv = new DataValue();
+ dv.setDisplayValue(ds.getString(i, columnValue));
+ if (nvl(dataColumn.getCrossTabValue()).trim().length()<=0)
+ dv.setVisible(false);
+ dv.setAlignment(dataColumn.getDisplayAlignment());
+ dv.setDisplayTotal(dataColumn.getDisplayTotal());
+ dv.setColName(dataColumn.getColName());
+ dv.setDisplayName(dataColumn.getDisplayName());
+ dv.setColId(dataColumn.getColId());
+ dv.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
+ /*StringBuffer indentation = new StringBuffer("");
+ if(dataColumn.getIndentation()!=null && dataColumn.getIndentation().intValue()>0) {
+ for (int indent=0; indent < dataColumn.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());*/
+
+ if (nvl(dataColumn.getDrillDownURL()).length() > 0) {
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(parseDrillDownURL(i, /* dataColumnIdx, */ds, dataColumn,request, childReportFormFields));
+ dv.setDrillDowninPoPUp(dataColumn.isDrillinPoPUp()!=null?dataColumn.isDrillinPoPUp():false);
+ }
+ if (dv.getDisplayValue().length() == 0) {
+ //dv.setDisplayValue("[NULL]");
+ dv.setDisplayValue("");
+ }
+ } // if
+
+ rd.setDataValue(rValues, cValues, cValuesSort.size()==0?null:cValuesSort, dv, formatProcessor, crossTabOrderManager, dataList);
+ } // for
+ rd.setReportDataList(dataList);
+ /*if (getReportDataSize() < 0)
+ setReportDataSize(rd.getDataRowCount());*/
+
+ /*if (pageNo >= 0)
+ rd.truncateData(pageNo * getPageSize(), (pageNo + 1) * getPageSize() - 1);
+ else {
+ if( downloadLimit != -1)
+ rd.truncateData(0, downloadLimit - 1);
+ else
+ rd.truncateData(0, -1);
+ }*/
+
+ if (colDataTotalsCrosstab == null)
+ colDataTotalsCrosstab = generateDataTotalsCrossTab(AppConstants.CV_COLUMN, userId,request);
+ if (displayColTotals && colDataTotalsCrosstab != null)
+ rd.setColumnDataTotalsCrossTab(colDataTotalsCrosstab, dataColumn
+ .getDisplayAlignment(), getCrossTabDisplayTotal(AppConstants.CV_COLUMN),
+ crossTabOrderManager, dataList);
+
+ if (rowDataTotalsCrosstab == null)
+ rowDataTotalsCrosstab = generateDataTotalsCrossTab(AppConstants.CV_ROW, userId, request);
+ if (displayRowTotals && rowDataTotalsCrosstab != null)
+ rd.setRowDataTotalsCrossTab(rowDataTotalsCrosstab, dataColumn
+ .getDisplayAlignment(), getCrossTabDisplayTotal(AppConstants.CV_ROW),
+ crossTabOrderManager, dataList);
+
+ if (displayColTotals
+ && displayRowTotals
+ && getCrossTabDisplayTotal(AppConstants.CV_COLUMN).equals(
+ getCrossTabDisplayTotal(AppConstants.CV_ROW))) {
+ // Display grand total
+ if (grandTotalCrosstab == null)
+ grandTotalCrosstab = ((CrossTabTotalValue) generateDataTotalsCrossTab("",
+ userId,request).get(0)).getTotalValue();
+ if (grandTotalCrosstab != null)
+ rd.setGrandTotalCrossTab(Utils.truncateTotalDecimals(grandTotalCrosstab),
+ dataColumn.getDisplayAlignment(),
+ getCrossTabDisplayTotal(AppConstants.CV_COLUMN), dataList);
+ } // if
+
+ rd.consolidateColumnHeaders(visualManager);
+ //if (Globals.getMergeCrosstabRowHeadings())
+ // rd.consolidateRowHeaders();
+ //rd.addRowNumbers(pageNo, dataList);
+
+ if (displayColTotals && colDataTotalsCrosstab != null) {
+ String totalLabel = "Total";
+ String colDisplayTotal = getCrossTabDisplayTotal(AppConstants.CV_COLUMN);
+ if (colDisplayTotal.length() > 0
+ && (!colDisplayTotal.equals(AppConstants.TOTAL_SUM_ID)))
+ totalLabel = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(colDisplayTotal));
+ if (getReportDataSize() > getPageSize())
+ totalLabel += "_nl_(for all pages)";
+
+ //rd.setCrossTabColumnTotalLabel(totalLabel);
+ } // if
+
+ //rd.applyVisibility();
+ //Collections.sort((List)dataList, new DataRowComparable());
+ DataRow drInFor1 = null;
+ Vector<DataValue> v1= null, v2 = null;
+ ArrayList<String> temp = new ArrayList<String>();
+ if (Globals.getMergeCrosstabRowHeadings()) {
+ for (int i = 0; i < dataList.size(); i++) {
+ drInFor1 = (DataRow)dataList.get(i);
+ drInFor1.setRowNum(i+1);
+ v1 = drInFor1.getRowValues();
+ if(i<dataList.size()-1) {
+ v2 = ((DataRow)dataList.get(i+1)).getRowValues();
+ } /*else {
+ v2 = ((DataRow)dataList.get(i-1)).getRowValues();
+ }*/
+ for (int j = 0; j < v1.size(); j++) {
+ if(j==0) {
+ if(v1.get(j).getDisplayValue().length()>0) { // another ArrayList
+ temp = new ArrayList();
+ temp.add(v1.get(j).getDisplayValue());
+ }
+ if(v2!=null && temp.get(j).equals(v2.get(j).getDisplayValue())) {
+ v2.get(j).setDisplayValue("");
+ }
+ }
+ }
+ }
+ }
+ rd.setReportDataList(dataList);
+ if (getReportDataSize() < 0) {
+ //setReportDataSize(rd.getDataRowCount());
+ setReportDataSize(rd.getReportDataList().size());
+ }
+
+ return rd;
+ } // loadCrossTabReportData
+
+
+ public DataValue addDataValue(DataColumnType dataColumn, String columnValue) {
+ DataValue dv = new DataValue();
+ dv.setDisplayValue(columnValue);
+ if (nvl(dataColumn.getCrossTabValue()).trim().length()<=0)
+ dv.setVisible(false);
+ dv.setAlignment(dataColumn.getDisplayAlignment());
+ dv.setDisplayTotal(dataColumn.getDisplayTotal());
+ dv.setColName(dataColumn.getColName());
+ dv.setDisplayName(dataColumn.getDisplayName());
+ dv.setColId(dataColumn.getColId());
+ dv.setNowrap(nvl(dataColumn.getNowrap(),"null").equals("false")?"null":nvl(dataColumn.getNowrap(),"null"));
+ return dv;
+
+ }
+
+ /*private*/ public boolean doesReportContainsGroupFormField() {
+ int flag = 0;
+ if(getFormFieldList()!=null) {
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ flag = 1;
+ break;
+ }
+ }
+ }
+ return (flag ==1);
+ }
+
+ private ReportData loadLinearReportData(int pageNo, String userId, int downloadLimit, HttpServletRequest request, boolean download) throws RaptorException {
+ String action = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));;
+
+ String reportSQL = "";
+
+ if(action.endsWith("session")) {
+ reportSQL = getWholeSQL();
+ wholeSQL = reportSQL;
+ } else {
+ reportSQL = generateSQL(reportParamValues, visualManager.getSortByColId(),
+ visualManager.getSortByAscDesc(), userId, request);
+ wholeSQL = reportSQL;
+ setWholeSQL(wholeSQL);
+ }
+ DataSet ds = null;
+ String dbInfo = getDBInfo();
+ ds = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
+ setReportDataSize(ds.getRowCount());
+ //wholeSQL = reportSQL;
+ HttpSession session = request.getSession();
+ //debugLogger.debug(" ******** Download Limit ********* " + downloadLimit + " %%%%%%%%%%PAGE " + pageNo );
+ List reportCols = null;
+ StringBuffer colNames = new StringBuffer();
+
+ if(download && action.endsWith("session")) {
+ reportCols = getAllColumns();
+ colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+
+ }
+ else {
+ String pagedSQL = null; // reportSQL;
+ if (pageNo >= 0)
+ pagedSQL = generatePagedSQL(pageNo, userId, request, false, null);
+ else
+ pagedSQL = generateSubsetSQL(0, downloadLimit, userId, request, false, null);
+ // replace the request parameter specified in the drill down
+ reportCols = getAllColumns();
+ colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ if (dc.isVisible()) {
+ reportSQL = parseReportSQLForDrillDownParams(reportSQL, dc, request);
+ pagedSQL = parseReportSQLForDrillDownParams(pagedSQL, dc, request);
+ }
+ }
+
+ cachedSQL = pagedSQL;
+
+
+ // try {
+ if(doesReportContainsGroupFormField()) {
+ if (pageNo >= 0)
+ pagedSQL = generatePagedSQL(pageNo, userId, request, true, reportParamValues);
+ else
+ pagedSQL = generateSubsetSQL(0, downloadLimit, userId, request, true, reportParamValues);
+ }
+ //check for Group formfield
+ //if groupformfield get columns from sql
+
+ ds = ConnectionUtils.getDataSet(pagedSQL, dbInfo);
+
+ if(doesReportContainsGroupFormField()) {
+ List reportCols1 = getAllColumns();
+ reportCols = new Vector();
+ outer:
+ for (Iterator iter = reportCols1.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ for (int k=0; k<ds.getColumnCount(); k++) {
+ if(dct.getColId().toUpperCase().trim().equals(ds.getColumnName(k).trim())) {
+ reportCols.add(dct);
+ continue outer;
+ }
+ }
+ }
+
+ if (getFormFieldList() != null) {
+ String paramValue = "";
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ if(fft.isGroupFormField()!=null && fft.isGroupFormField().booleanValue()) {
+ paramValue = Utils.oracleSafe(nvl(reportParamValues
+ .getParamValue(fft.getFieldId())));
+ outer:
+ for (Iterator iter1 = reportCols1.iterator(); iter1.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter1.next();
+ if(("["+fft.getFieldName()+ "]").equals(dct.getColName().trim())) {
+ dct.setDisplayName(paramValue);
+ continue outer;
+ }
+ }
+
+
+ }
+ }
+ }
+ }
+
+
+ // if ( (remDbInfo!=null) && (!remDbInfo.equals(AppConstants.DB_LOCAL)))
+ // {
+ // Globals.getRDbUtils().setDBPrefix(remDbInfo);
+ // ds = RemDbUtils.executeQuery(pagedSQL);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(pagedSQL);
+ /*
+ * } catch(SQLException e) { throw new
+ * ReportSQLException("[ReportRuntime.loadLinearReportData]
+ * "+e.getMessage(), pagedSQL); }
+ */
+
+ if (getReportDataSize() < 0)
+ if (pageNo < 0)
+ setReportDataSize(ds.getRowCount());
+ else if (ds.getRowCount() <= getPageSize())
+ setReportDataSize(ds.getRowCount());
+ else {
+
+ /*Pattern re1 = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]", Pattern.DOTALL);
+ Pattern re2 = Pattern.compile("[Oo][Rr][Dd][Ee][Rr](.*?[^\r\n]*)[Bb][Yy]((.*?[^\r\n]*)|[\\s]|[^0-9a-zA-Z])\\)", Pattern.DOTALL);
+ Matcher matcher = re1.matcher(reportSQL);
+ Matcher matcher2 = null;
+ int startPoint = reportSQL.length()-30;
+ String startReportSQL = "";
+ String endReportSQL = "";
+ while(reportSQL.indexOf("xid", startPoint)!=-1)startPoint++;
+ if (matcher.find(startPoint)) {
+ startReportSQL = reportSQL.substring(0, reportSQL.indexOf(matcher.group()));
+ endReportSQL = reportSQL.substring(reportSQL.indexOf(matcher.group()));
+ matcher2 = re2.matcher(endReportSQL);
+ if(matcher2.find())
+ endReportSQL = endReportSQL.substring(matcher.group().length()-1);
+ else
+ endReportSQL = "";
+ reportSQL = startReportSQL + endReportSQL;
+ }*/
+ String countSQL = "SELECT count(*) FROM (" + reportSQL + ")"+ (Globals.isPostgreSQL() || Globals.isMySQL()?" AS ":"") +" x ";
+ String dbType = "";
+
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ if (dbType.equals("DAYTONA") && reportSQL.trim().toUpperCase().startsWith("SELECT")) {
+ Pattern re1 = Pattern.compile("order(.*?[^\r\n]*)by", Pattern.DOTALL);
+ Matcher matcher = re1.matcher(reportSQL);
+ int startPoint = reportSQL.length()-30;
+ while(reportSQL.indexOf("xid", startPoint)!=-1)startPoint++;
+ if (matcher.find(startPoint)) {
+ reportSQL = reportSQL.substring(0, reportSQL.indexOf(matcher.group()));
+ }
+ countSQL = "SELECT count(*) FROM (" + reportSQL + ")"+ (Globals.isPostgreSQL() || Globals.isMySQL()?" AS ":"") +" x";
+ countSQL = countSQL + " ("+ colNames+ ")";
+ } else if (dbType.equals("DAYTONA")) {
+ setReportDataSize(50);
+ }
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+
+ DataSet ds2 = null;
+ // try {
+ if(reportSQL.trim().toUpperCase().startsWith("SELECT")) {
+ ds2 = ConnectionUtils.getDataSet(countSQL, dbInfo);
+ if (ds2.getRowCount() > 0)
+ setReportDataSize(ds2.getInt(0, 0));
+ else
+ throw new RuntimeException(
+ "[ReportRuntime.loadLinearReportData] Unable to load report data size");
+ } else
+ setReportDataSize(50);
+ // if ( (remDbInfo!=null) &&
+ // (!remDbInfo.equals(AppConstants.DB_LOCAL))){
+ // Globals.getRDbUtils().setDBPrefix(remDbInfo);
+ // ds2 = RemDbUtils.executeQuery(countSQL);
+ // }
+ // else
+ // ds2 = DbUtils.executeQuery(countSQL);
+ /*
+ * } catch(SQLException e) { throw new
+ * ReportSQLException("[ReportRuntime.loadLinearReportData size]
+ * "+e.getMessage(), countSQL); }
+ */
+
+
+ } // else
+ }
+ ReportData rd = new ReportData(pageNo, true);
+
+ // Already defined changed for modifying request parameters
+ //List reportCols = getAllColumns();
+ Vector visibleCols = new Vector(reportCols.size());
+ Vector formatProcessors = new Vector(reportCols.size());
+
+ // ColumnHeaderRow chr = new ColumnHeaderRow();
+ // rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
+ // chr.setRowHeight("30");
+ int count =0 ;
+
+ /* ADDED */
+ ReportFormFields rff = getReportFormFields();
+ ReportFormFields childReportFormFields = null;
+ String fieldDisplayName = "";
+ String fieldValue = "";
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if(nvl(dct.getDependsOnFormField()).length()>0 && nvl(dct.getDependsOnFormField()).indexOf("[")!=-1) {
+ for(int i = 0 ; i < rff.size(); i++) {
+ fieldDisplayName = "["+((FormField)rff.getFormField(i)).getFieldDisplayName()+"]";
+ fieldValue = "";
+ //if(dct.getOriginalDisplayName()==null) dct.setOriginalDisplayName(dct.getDisplayName());
+ if (dct.getDependsOnFormField().equals(fieldDisplayName)) {
+ fieldValue = nvl(request.getParameter(((FormField)rff.getFormField(i)).getFieldName()));
+
+ if (fieldValue.length()>0) {
+ if(!fieldValue.toUpperCase().equals("Y"))
+ dct.setDisplayName(fieldValue);
+ if(!dct.isVisible())
+ dct.setVisible(true);
+ } else {
+ dct.setVisible(false);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* ADDED */
+ String displayName = "";
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+
+ formatProcessors.add(count,new FormatProcessor(
+ getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
+ .getColFormat(), getReportDefType().equals(
+ AppConstants.RD_SQL_BASED)));
+
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ childReportFormFields = getChildReportFormFields(request,AppUtils.getDrillActionURL()+""+dc.getDrillDownURL());
+ }
+ if (dc.isVisible()) {
+ visibleCols.add(count,dc);
+ //if(dc.getColId().startsWith("group")) {
+ for (int d = 0; d < reportCols.size(); d++) {
+ if(reportCols.get(d)!=null) {
+ DataColumnType dct1 = (DataColumnType) reportCols.get(d);
+ if(dct1.getColId().equals(dc.getColId()+"_name") && ds.getRowCount()>0) {
+ displayName = ds.getString(0,dct1.getColId());
+ dc.setDisplayName(displayName);
+ }
+ }
+ }
+ //}
+
+ String widthInPxls = dc.getDisplayWidthInPxls();
+
+ if(nvl(widthInPxls).endsWith("px"))
+ dc.setDisplayWidthInPxls(widthInPxls);
+ else {
+ widthInPxls = widthInPxls+"px";
+ dc.setDisplayWidthInPxls(widthInPxls+"px");
+ }
+
+ rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ visualManager.isColumnVisible(dc.getColId()), visualManager
+ .getSortByColId().equals(dc.getColId()) ? visualManager
+ .getSortByAscDesc() : null, isRuntimeColSortDisabled(), dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+ // chr.addColumnHeader(new ColumnHeader(dc.getDisplayName(),
+ // (dc.getDisplayWidth()>100)?"10%":(""+dc.getDisplayWidth()+"%")));
+ } // if
+ else {
+ visibleCols.add(count,null);
+ rd.createColumn(dc.getColId(), AppConstants.HIDDEN, dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ false, null,false, dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+// formatProcessors.add(count,null);
+ }
+ count++;
+ } // for
+
+ if(getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN) && pageNo ==0) {
+ /*Vector v = null;
+ try {
+ v = addForecastData(reportSQL);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ throw new RaptorException (ex);
+ }
+ session.setAttribute("FORECASTED_DATA", v);
+ DataSet dsWhole = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
+ dsWhole.addAll(v);
+ session.setAttribute(AppConstants.RI_CHART_FORECAST_DATA, dsWhole);
+ }
+
+ if(getReportDefType().equals(AppConstants.RD_SQL_BASED_DATAMIN) && session.getAttribute("FORECASTED_DATA")!=null) {
+ Vector vForecastedData = (Vector)session.getAttribute("FORECASTED_DATA");
+ if(vForecastedData.size() > 0)
+ ds.addAll(vForecastedData);*/
+ }
+
+
+ // Utils._assert(chr.size()==ds.getColumnCount(),
+ // "[ReportRuntime.loadLinearReportData] The number of visible columns
+ // does not match the number of data columns");
+ //TODO: This should be optimized to accept -1 for flat file download
+ for (int r = 0; r < Math.min(ds.getRowCount(), ((pageNo < 0) ? (downloadLimit == -1?Globals.getFlatFileUpperLimit():Globals.getDownloadLimit() ) : getPageSize())); r++) {
+ DataRow dr = new DataRow();
+ rd.reportDataRows.addDataRow(dr);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ DataValue dv = new DataValue();
+ dr.addDataValue(dv);
+ dv.setDisplayValue(ds.getString(r, c));
+ dv.setColName(dct.getColName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ if(dct.isVisible()) {
+
+ dv.setVisible(true);
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setDisplayName(dct.getDisplayName());
+
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
+ dv.setDrillDowninPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
+ }
+
+ if (dv.getDisplayValue().length() == 0) {
+ //dv.setDisplayValue("[NULL]");
+ dv.setDisplayValue("");
+ }
+ } // if
+
+ } else {
+ dv.setVisible(false);
+ dv.setHidden(true);
+ }
+ //System.out.println("in Linear report b4" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+
+ if(dr.getFormatId()!=null)
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
+ else
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
+
+ //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+ } // if reportCols
+ } // for
+ } // for
+
+ //Only if rownumber options is needed
+ //rd.addRowNumbers(pageNo, getPageSize());
+
+ if (colDataTotalsLinear == null) {
+ if(!download && !action.endsWith("session"))
+ colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
+ getDbInfo(),request);
+ if(download && action.endsWith("session"))
+ colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
+ getDbInfo(), getTotalSql());
+ }
+ if (displayColTotals && colDataTotalsLinear != null) {
+ String totalLabel = "Total";
+ if (getReportDataSize() > getPageSize())
+ totalLabel += "<br><font size=1>(for all pages)</font>";
+
+ rd.setColumnDataTotalsLinear(colDataTotalsLinear, totalLabel);
+ } // if
+ // Please note the below function doesn't set the visibility for dv since this is set in this function. - Sundar
+ rd.applyVisibility();
+
+ return rd;
+ } // loadLinearReportData
+
+
+
+ public DataRow generateColumnDataTotalsLinear(ArrayList reportCols, String userId,
+ String dbInfo, String reportSQL) throws RaptorException {
+ DataRow dr = null;
+
+ boolean displayColTotals = false;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dct = (DataColumnType) iter.next();
+ if( dct != null ) {
+ if (nvl(dct.getDisplayTotal()).length() > 0) {
+ displayColTotals = true;
+ break;
+ } // if
+ } // if checking dct
+ } // for
+
+ DataSet ds = null;
+ if (displayColTotals) {
+ dr = new DataRow();
+ // ds =
+ // DbUtils.executeQuery(generateTotalSQLLinear(reportParamValues,
+ // userId));
+ ds = ConnectionUtils.getDataSet(reportSQL,
+ dbInfo);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if ( dct != null ) {
+ DataValue dv = new DataValue();
+
+ String totalValue = "";
+ if (ds != null)
+ totalValue = ds.getString(0, c);
+ if (nvl(dct.getDisplayTotal()).length() > 0
+ && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
+ totalValue = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(dct
+ .getDisplayTotal()))
+ + ": " + totalValue;
+ dv.setDisplayValue(Utils.truncateTotalDecimals(totalValue));
+
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setColName(dct.getColName());
+ dv.setDisplayName(dct.getDisplayName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setBold(true);
+ dv.setVisible(dct.isVisible());
+ if(dv.isVisible())
+ dr.addDataValue(dv);
+ } // dct check
+ } // for
+ }
+
+ return dr;
+ } // generateColumnDataTotalsLinear
+
+
+ public ReportData loadHiveLinearReportData(String reportSQL, String userId, int downloadLimit, HttpServletRequest request) throws RaptorException {
+ wholeSQL = reportSQL;
+ int countRows = getHiveReportCount(wholeSQL);
+ setReportDataSize(countRows);
+ if(countRows < 1001)
+ wholeSQL += " limit "+ countRows;
+ else
+ wholeSQL += " limit "+ downloadLimit;
+ HttpSession session = request.getSession();
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = getDBInfo();
+
+ List reportCols = getAllColumns();
+ StringBuffer colNames = new StringBuffer();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+ if (colNames.length() > 0)
+ colNames.append(", ");
+ colNames.append(dc.getColId());
+ }
+
+ ds = ConnectionUtils.getDataSet(wholeSQL, dbInfo);
+
+ ReportData rd = new ReportData(0, true);
+
+ // Already defined changed for modifying request parameters
+ //List reportCols = getAllColumns();
+ Vector visibleCols = new Vector(reportCols.size());
+ Vector formatProcessors = new Vector(reportCols.size());
+
+ // ColumnHeaderRow chr = new ColumnHeaderRow();
+ // rd.reportColumnHeaderRows.addColumnHeaderRow(chr);
+ // chr.setRowHeight("30");
+ int count =0 ;
+
+ /* ADDED */
+ ReportFormFields rff = getReportFormFields();
+ ReportFormFields childReportFormFields = null;
+ String fieldDisplayName = "";
+ String fieldValue = "";
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if(nvl(dct.getDependsOnFormField()).length()>0 && nvl(dct.getDependsOnFormField()).indexOf("[")!=-1) {
+ for(int i = 0 ; i < rff.size(); i++) {
+ fieldDisplayName = "["+((FormField)rff.getFormField(i)).getFieldDisplayName()+"]";
+ fieldValue = "";
+ //if(dct.getOriginalDisplayName()==null) dct.setOriginalDisplayName(dct.getDisplayName());
+ if (dct.getDependsOnFormField().equals(fieldDisplayName)) {
+ fieldValue = nvl(request.getParameter(((FormField)rff.getFormField(i)).getFieldName()));
+
+ if (fieldValue.length()>0) {
+ if(!fieldValue.toUpperCase().equals("Y"))
+ dct.setDisplayName(fieldValue);
+ if(!dct.isVisible())
+ dct.setVisible(true);
+ } else {
+ dct.setVisible(false);
+ }
+ }
+ }
+ }
+ }
+ }
+
+ /* ADDED */
+ String displayName = "";
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dc = (DataColumnType) iter.next();
+
+ formatProcessors.add(count,new FormatProcessor(
+ getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
+ .getColFormat(), getReportDefType().equals(
+ AppConstants.RD_SQL_BASED)));
+
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ childReportFormFields = getChildReportFormFields(request,dc.getDrillDownURL());
+ }
+ if (dc.isVisible()) {
+ visibleCols.add(count,dc);
+ //if(dc.getColId().startsWith("group")) {
+ for (int d = 0; d < reportCols.size(); d++) {
+ if(reportCols.get(d)!=null) {
+ DataColumnType dct1 = (DataColumnType) reportCols.get(d);
+ if(dct1.getColId().equals(dc.getColId()+"_name") && ds.getRowCount()>0) {
+ displayName = ds.getString(0,dct1.getColId());
+ dc.setDisplayName(displayName);
+ }
+ }
+ }
+ //}
+
+ String widthInPxls = dc.getDisplayWidthInPxls();
+
+ if(nvl(widthInPxls).endsWith("px"))
+ dc.setDisplayWidthInPxls(widthInPxls);
+ else {
+ widthInPxls = widthInPxls+"px";
+ dc.setDisplayWidthInPxls(widthInPxls+"px");
+ }
+
+ rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ visualManager.isColumnVisible(dc.getColId()), visualManager
+ .getSortByColId().equals(dc.getColId()) ? visualManager
+ .getSortByAscDesc() : null, isRuntimeColSortDisabled(), dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+ // chr.addColumnHeader(new ColumnHeader(dc.getDisplayName(),
+ // (dc.getDisplayWidth()>100)?"10%":(""+dc.getDisplayWidth()+"%")));
+ } // if
+ else {
+ visibleCols.add(count,null);
+ rd.createColumn(dc.getColId(), AppConstants.HIDDEN, dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(),
+ false, null,false, dc.getLevel()!=null?dc.getLevel():0, dc.getStart()!=null?dc.getStart():0, dc.getColspan()!=null?dc.getColspan():0, dc.isIsSortable()!=null?dc.isIsSortable():false);
+// formatProcessors.add(count,null);
+ }
+ count++;
+ } // for
+
+ ArrayList reportDataList = new ArrayList();
+ for (int r = 0; r < ds.getRowCount(); r++) {
+ DataRow dr = new DataRow();
+ rd.reportDataRows.addDataRow(dr);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ if(reportCols.get(c)!=null) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ DataValue dv = new DataValue();
+ dr.addDataValue(dv);
+ dv.setDisplayValue(ds.getString(r, c));
+ dv.setColName(dct.getColName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ if(dct.isVisible()) {
+
+ dv.setVisible(true);
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setDisplayName(dct.getDisplayName());
+
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
+ dv.setDrillDowninPoPUp(dct.isDrillinPoPUp()!=null?dct.isDrillinPoPUp():false);
+ }
+
+ if (dv.getDisplayValue().length() == 0) {
+ //dv.setDisplayValue("[NULL]");
+ dv.setDisplayValue("");
+ }
+ } // if
+
+ } else {
+ dv.setVisible(false);
+ dv.setHidden(true);
+ }
+ //System.out.println("in Linear report b4" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+
+ if(dr.getFormatId()!=null)
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
+ else
+ ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
+
+ //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+ } // if reportCols
+ } // for
+ reportDataList.add(dr);
+ } // for
+ rd.setReportDataList(reportDataList);
+ //Only if rownumber options is needed
+ //rd.addRowNumbers(pageNo, getPageSize());
+
+ if (colDataTotalsLinear == null)
+ colDataTotalsLinear = generateColumnDataTotalsLinear(new ArrayList(reportCols), userId,
+ getDbInfo(),request);
+ if (displayColTotals && colDataTotalsLinear != null) {
+ String totalLabel = "Total";
+ if (getReportDataSize() > getPageSize())
+ totalLabel += "<br><font size=1>(for all pages)</font>";
+
+ rd.setColumnDataTotalsLinear(colDataTotalsLinear, totalLabel);
+ } // if
+ // Please note the below function doesn't set the visibility for dv since this is set in this function. - Sundar
+ rd.applyVisibility();
+
+ return rd;
+ } // loadHiveLinearReportData
+
+ //For Hive reports
+ public int getHiveReportCount(String sql) throws RaptorException {
+ //select t from (select count(*) t from (select * from program)x)x1;
+ int count = 0;
+ String countSql = "select t from (select count(*) t from ("+ sql + ")" + (Globals.isPostgreSQL() || Globals.isMySQL() ?" AS ":"") + " x) AS x1";
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = getDBInfo();
+ System.out.println("SQL getReportCount()- " + countSql);
+ try {
+ ds = ConnectionUtils.getDataSet(countSql, dbInfo);
+ int totalRows = 0;
+ String dbType = "";
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ dbType = remDbInfo.getDBType(dbInfo);
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if( ds.getRowCount()>0) {
+ count = Integer.parseInt(ds.getString(0,0));
+ }
+ } catch (NumberFormatException ex) {}
+ return count;
+
+ } // getReportCount
+
+
+ /*private*/ public ReportFormFields getChildReportFormFields( HttpServletRequest request, String URL ) throws RaptorException {
+ String childReportID = getReportID(URL);
+
+ ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, childReportID,
+ false, 1);
+
+ ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
+ return ddReportFormFields;
+ }
+
+ private String getReportID(String URL) {
+ URL = nvl(URL);
+ int pos = URL.toLowerCase().indexOf("c_master=")+9;
+ String reportID = "";
+ if(URL.toLowerCase().indexOf("&", pos)!=-1)
+ reportID = URL.substring(pos, URL.toLowerCase().indexOf("&", pos));
+ else
+ reportID = URL.substring(pos);
+ return reportID;
+
+ }
+ /*private*/ public String parseDrillDownURL(int rowIdx, /* int colIdx, */DataSet ds, DataColumnType dct, HttpServletRequest request, ReportFormFields ddReportFormFields)
+ throws RaptorException {
+ Vector viewActions = DataCache.getDataViewActions();
+ javax.servlet.http.HttpSession session = request.getSession();
+
+ StringBuffer dUrl = new StringBuffer();
+
+ //String childReportID = getReportID(dct.getDrillDownURL());
+
+ //ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, childReportID,
+ // false, 1);
+
+ //ReportFormFields ddReportFormFields = ddRr.getReportFormFields();
+
+ boolean isViewAction = false;
+ int flag = 0;
+ String requestParam ="";
+ for (int k = 0; k < viewActions.size(); k++)
+ if (dct.getDrillDownURL().equals(
+ AppUtils.getBaseActionURL() + ((String) viewActions.get(k))))
+ isViewAction = true;
+ if (isViewAction) {
+ // Drill-down to record details
+ String param = nvl(dct.getDrillDownParams()); // i.e.
+ // "c_master=[bo1.RECID$]"
+ param = param.substring(AppUtils.getBaseActionParam().length() + 1,
+ param.length() - 1); // i.e. "bo1.RECID$"
+ param = param.replace('.', '_'); // i.e. "bo1.RECID$"
+
+ dUrl.append(AppUtils.getBaseActionParam());
+ dUrl.append(java.net.URLEncoder.encode(ds.getString(rowIdx, param.toLowerCase())));
+ } else {
+ // Drill-down to another report
+ // Replacing col ids with values
+ String param = nvl(dct.getDrillDownParams());
+ while (param.indexOf('[') >= 0) {
+ int startIdx = param.indexOf('[');
+ int endIdx = param.indexOf(']');
+ StringBuffer sb = new StringBuffer();
+ if(startIdx>endIdx) {
+ if (endIdx < param.length() - 1)
+ sb.append(param.substring(endIdx + 1));
+ param = sb.toString();
+ continue;
+ }
+ if (startIdx > 0)
+ sb.append(param.substring(0, startIdx));
+
+ if (param.charAt(startIdx + 1) == '!') {
+ // Parameter is a form field value
+ String fieldId = param.substring(startIdx + 2, endIdx);
+ String fieldValue = (String) reportParamValues.get(fieldId);
+
+ sb.append(java.net.URLEncoder.encode(nvl(fieldValue)));
+ //TODO Add a else if condition to check whether the param is from request Param
+ //TODO make a unique symbol like #
+ }else if (param.charAt(startIdx + 1) == '#') {
+ flag = 1;
+ String fieldId = param.substring(startIdx + 2, endIdx);
+ String fieldValue = request.getParameter(fieldId);
+ sb.append(java.net.URLEncoder.encode(nvl(fieldValue)));
+
+ }else {
+ // Parameter is a column value
+ String fieldValue = "";
+ String colValue = null;
+ String colId = null;
+ if (param.indexOf('!') < 0 || param.indexOf('!') > endIdx)
+ colId = param.substring(startIdx + 1, endIdx);
+ else {
+ // Need to use NVL(column, form field)
+ colId = param.substring(startIdx + 1, param.indexOf('!'));
+
+ String fieldId = param.substring(param.indexOf('!') + 1, endIdx);
+ FormField ff = getFormField(fieldId);
+ if (ff.getFieldType().equals(FormField.FFT_TEXTAREA)) {
+ fieldValue = reportParamValues.getParamValueforTextAreaDrilldown(fieldId);
+ } else
+ fieldValue = (String) reportParamValues.get(fieldId);
+ } // else
+
+ DataColumnType column = getColumnById(colId);
+ String columnName = "";
+ int groupColumn = 0;
+ int groupMatch = 0;
+ if(column.getColName().startsWith("[")) {
+ groupColumn = 1;
+ columnName = column.getDisplayName();
+ for(ddReportFormFields.resetNext(); ddReportFormFields.hasNext(); ) {
+ FormField ff = ddReportFormFields.getNext();
+ if(ff.getFieldDisplayName().toLowerCase().equals(columnName.toLowerCase())) {
+ groupMatch = 1;
+ sb.delete(sb.lastIndexOf("&")+1, sb.length());
+ sb.append(ff.getFieldName()+"=");
+ }
+ }
+ }
+ if (groupColumn == 0 || (groupColumn == 1 && groupMatch == 1)) {
+ String dependsOn = column.getDependsOnFormField();
+ if(nvl(dependsOn).length()>0)
+ System.out.println("DependsOn " + dependsOn);
+ if (column != null) {
+ // if (column.getColType().equals(AppConstants.CT_DATE))
+ //if (!nvl(column.getColFormat(), AppConstants.DEFAULT_DATE_FORMAT)
+ // .equals(AppConstants.DEFAULT_DATE_FORMAT))
+ // Use extra column instead
+ //commented out below line usually for Visual
+ //colId += AppConstants.DD_COL_EXTENSION;
+ colValue = ds.getString(rowIdx, colId.toLowerCase());
+ // if SQL-Based and drill-down param is a date, decode
+ // it to the expected Oracle format **/
+ if (getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ if (!getColumnNoParseDateFlag(column))
+ if (ReportParamDateValueParser.isDateParam(colValue))
+ colValue = ReportParamDateValueParser
+ .formatDateParamValue(colValue);
+ } // if
+
+ String suppressValues = "|" + nvl(dct.getDrillDownType()) + "|";
+ if (suppressValues.length() > 2
+ && suppressValues.indexOf("|" + colValue + "|") >= 0)
+ // Parameter value is suppressed and not passed to the
+ // drill-down report
+ colValue = null;
+
+ sb.append(java.net.URLEncoder.encode(nvl(colValue, fieldValue)));
+ } else {
+ sb.delete(sb.lastIndexOf("&")+1, sb.length());
+ }
+ } // else
+
+ if (endIdx < param.length() - 1)
+ sb.append(param.substring(endIdx + 1));
+ param = sb.toString();
+ } // while
+ if(Globals.getPassRequestParamInDrilldown()) {
+ if(param.indexOf('#') < 0) {
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(request.getParameter(reqParameters[i])!=null) {
+ if(!reqParameters[i].toUpperCase().startsWith("FF")){
+ if(param.length()>0) {
+ param += "&" + reqParameters[i]+"="
+ + request.getParameter(reqParameters[i]);
+ } else {
+ param += "&" + reqParameters[i]+"="
+ + request.getParameter(reqParameters[i]);
+
+ }
+ }
+ }
+ }
+ for (int i = 0; i < sessionParameters.length; i++) {
+ if(session.getAttribute(sessionParameters[i].toUpperCase())!=null) {
+ if(!sessionParameters[i].toUpperCase().startsWith("FF")){
+ if(param.length()>0) {
+ param += "&" + sessionParameters[i].toUpperCase()+"="
+ + (String)session.getAttribute(sessionParameters[i].toUpperCase());
+ } else {
+ param += "&" + sessionParameters[i].toUpperCase()+"="
+ + (String)session.getAttribute(sessionParameters[i].toUpperCase());
+
+ }
+ }
+ } else {
+ param += "&" + sessionParameters[i].toUpperCase()+"="
+ + (String)session.getAttribute(sessionParameters[i]);
+
+ }
+ }
+
+ }
+ }
+
+ dUrl.append(param.toString());
+ dUrl.append("&");
+ dUrl.append(AppConstants.RI_DISPLAY_CONTENT);
+ dUrl.append("=Y");
+ dUrl.append("&");
+ if(dct.isDrillinPoPUp()==null || (!dct.isDrillinPoPUp().booleanValue())) {
+ dUrl.append(AppConstants.RI_SHOW_BACK_BTN);
+ dUrl.append("=Y");
+ dUrl.append("&");
+ }
+ dUrl.append(AppConstants.DRILLDOWN_INDEX);
+ int index = Integer.parseInt(nvl(AppUtils.getRequestValue(request, AppConstants.DRILLDOWN_INDEX), "0"));
+ /*
+ int form_index = Integer.parseInt(nvl(AppUtils.getRequestValue(request, AppConstants.FORM_DRILLDOWN_INDEX), "0"));
+ index = index>0 ? --index : 0;
+ form_index = form_index>0 ? --form_index : 0;*/
+ request.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
+ /*session.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
+ request.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));
+ session.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));*/
+
+ dUrl.append("=" + AppUtils.getRequestNvlValue(request, AppConstants.DRILLDOWN_INDEX));
+
+ //TODO Add a if condition to check whether the param is request Param
+ } // if
+
+ if (dUrl.length() > 0)
+ dUrl.insert(0, ((dct.getDrillDownURL()).indexOf('&') > 0) ? '&' : '&');
+ dUrl.insert(0, AppUtils.getDrillActionURL()+dct.getDrillDownURL());
+
+ //debugLogger.debug(" [[[[[[[[[[[[[[[[ " + dUrl);
+
+ return dUrl.toString();
+ } // parseDrillDownURL
+
+ /** *********************************************************************************** */
+
+ public DataRow generateColumnDataTotalsLinear(ArrayList reportCols, String userId,
+ String dbInfo, HttpServletRequest request) throws RaptorException {
+ DataRow dr = null;
+
+ displayColTotals = false;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+
+ DataColumnType dct = (DataColumnType) iter.next();
+ if( dct != null ) {
+ if (nvl(dct.getDisplayTotal()).length() > 0) {
+ displayColTotals = true;
+ break;
+ } // if
+ } // if checking dct
+ } // for
+
+ DataSet ds = null;
+ if (displayColTotals) {
+ dr = new DataRow();
+ // ds =
+ // DbUtils.executeQuery(generateTotalSQLLinear(reportParamValues,
+ // userId));
+ ds = ConnectionUtils.getDataSet(generateTotalSQLLinear(reportParamValues, userId,request),
+ dbInfo);
+
+ for (int c = 0; c < reportCols.size(); c++) {
+ DataColumnType dct = (DataColumnType) reportCols.get(c);
+ if ( dct != null ) {
+ DataValue dv = new DataValue();
+ if(dv.isVisible())
+ dr.addDataValue(dv);
+
+ String totalValue = "";
+ if (ds != null)
+ totalValue = ds.getString(0, c);
+ if (nvl(dct.getDisplayTotal()).length() > 0
+ && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
+ totalValue = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(dct
+ .getDisplayTotal()))
+ + ": " + totalValue;
+ dv.setDisplayValue(Utils.truncateTotalDecimals(totalValue));
+
+ dv.setAlignment(dct.getDisplayAlignment());
+ dv.setColName(dct.getColName());
+ dv.setDisplayName(dct.getDisplayName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+ StringBuffer indentation = new StringBuffer("");
+ if(dct.getIndentation()!=null && dct.getIndentation()>0) {
+ for (int indent=0; indent< dct.getIndentation(); indent++) {
+ indentation.append("\t");
+ }
+ dv.setNowrap("true");
+ }
+ dv.setIndentation(indentation.toString());
+ dv.setDisplayTotal(dct.getDisplayTotal());
+ dv.setBold(true);
+ } // dct check
+ } // for
+ }
+
+ return dr;
+ } // generateColumnDataTotalsLinear
+
+ private Vector generateDataTotalsCrossTab(String rowColPos, String userId, HttpServletRequest request)
+ throws RaptorException {
+ String sql = getWholeSQL();
+ Vector dataTotals = new Vector();
+
+ boolean displayTotals = ((rowColPos.length() == 0) || (getCrossTabDisplayTotal(
+ rowColPos).length() > 0));
+ if (rowColPos.equals(AppConstants.CV_COLUMN))
+ displayColTotals = displayTotals;
+ else if (rowColPos.equals(AppConstants.CV_ROW))
+ displayRowTotals = displayTotals;
+
+ if (displayTotals) {
+ // DataSet ds =
+ // DbUtils.executeQuery(generateTotalSQLCrossTab(reportParamValues,
+ // rowColPos, userId));
+ String executeSql = generateTotalSQLCrossTab(
+ sql, rowColPos, userId, request, reportParamValues);
+ DataSet ds = ConnectionUtils.getDataSet(executeSql, getDbInfo());
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ Vector headerValues = new Vector();
+ String totalValue = null;
+
+ int cPos = 0;
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (rowColPos.length() > 0
+ && nvl(dct.getCrossTabValue()).equals(rowColPos)) {
+ DataValue dataValue = new DataValue();
+ dataValue.setBold(true);
+ dataValue.setAlignment("center");
+ dataValue.setDisplayValue(ds.getString(i, cPos++));
+ headerValues.add(dataValue);
+
+ //headerValues.add(ds.getString(i, cPos++));
+ }
+ else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_VALUE))
+ totalValue = ds.getString(i, cPos++);
+ } // for
+
+ dataTotals.add(new CrossTabTotalValue(headerValues, Utils
+ .truncateTotalDecimals(totalValue)));
+ } // for
+ } // if
+
+ return dataTotals;
+ } // generateDataTotalsCrossTab
+
+ /** *********************************************************************************** */
+
+ public void hideColVisual(String colId) {
+ visualManager.hideColumn(colId);
+ if (pageDataCache != null)
+ pageDataCache.columnVisualShowHide(colId, false);
+ } // hideColVisual
+
+ public void showColVisual(String colId) {
+ visualManager.showColumn(colId);
+ if (pageDataCache != null)
+ pageDataCache.columnVisualShowHide(colId, true);
+ } // showColVisual
+
+ public void sortColVisual(String colId) {
+ visualManager.setSortByColumn(colId);
+ resetCache(true);
+
+ pageDataCache = null;
+ cachedPageNo = -1;
+ } // sortColVisual
+
+ /** *********************************************************************************** */
+
+ public String generateDistinctValuesSQL(DataColumnType dct, String userId, HttpServletRequest request) throws RaptorException {
+ return super.generateDistinctValuesSQL(reportParamValues, dct, userId, request);
+ } // generateDistinctValuesSQL
+
+ public String getDbInfo() {
+ return this.cr.getDbInfo();
+ }
+
+ private String fixSQL(StringBuffer sql) {
+ int pos = 0;
+ int pos_f_format = 0;
+ int pos_t_format = 0;
+ int pos_alias = 0;
+ String format = "";
+ String alias = null;
+ if(sql.indexOf("SELECT", 7)!= -1) {
+ pos = sql.indexOf("SELECT", 7);
+ if(sql.indexOf("TO_CHAR", pos)!= -1){
+ pos = sql.indexOf("TO_CHAR", pos);
+ if(sql.indexOf("999",pos)!= -1) {
+ pos = sql.indexOf("999",pos);
+ pos_f_format = sql.lastIndexOf(", '", pos);
+ if(pos_f_format == -1 || (pos - pos_f_format > 10)) {
+ pos_f_format = sql.lastIndexOf(",'", pos);
+ pos_f_format -= 1;
+ }
+ pos = pos_f_format;
+ if(sql.indexOf("')", pos)!= -1) {
+ pos_t_format = sql.indexOf("')", pos);
+ //debugLogger.debug("pos_t - " + pos_t_format + " " + pos);
+ if(pos_t_format == -1 || (pos_t_format - pos > 20)) {
+ pos_t_format = sql.indexOf("' )", pos);
+ pos_t_format += 3;
+ }
+ else if (pos_t_format != -1)
+ pos_t_format += 2;
+ format = sql.substring(pos_f_format+3, pos_t_format);
+ //alias = sql.substring(pos_t_format+3, pos_t_format+6);
+ pos_alias = sql.indexOf(" ", pos_t_format);
+ alias = sql.substring(pos_alias+1, pos_alias+4);
+ }
+ }
+ }
+
+ if(sql.indexOf(alias)!=-1) {
+ pos = sql.indexOf(alias);
+ //debugLogger.debug(pos + " " + alias.length()+1 + "\n" + sql);
+ sql.delete(pos,pos+4);
+ sql.insert(pos, "TO_NUMBER("+alias+", '"+format+"')),'"+ format + "')");
+ pos = sql.lastIndexOf("SUM", pos);
+ if(pos==-1)
+ pos = sql.lastIndexOf("AVG", pos);
+ else if (pos==-1)
+ pos = sql.lastIndexOf("COUNT", pos);
+ else if (pos == -1)
+ pos = sql.lastIndexOf("STDDEV", pos);
+ else if (pos == -1)
+ pos = sql.lastIndexOf("VARIANCE", pos);
+ sql.insert(pos, "TO_CHAR (");
+ }
+
+ }
+
+ //debugLogger.debug("Alias|" + alias + "| Format " + format);
+ //debugLogger.debug(sql.toString());
+ return sql.toString();
+ } // FixSQL
+
+ public String parseReportSQL(String sql) throws RaptorException {
+ StringBuffer parsedSQL = new StringBuffer();
+
+ Vector updatedReportCols = new Vector();
+
+ curSQLParsePos = 0;
+ int lastParsePos = curSQLParsePos;
+ String lastToken = null;
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Flat File parseReportSQL ******* SQL " + sql));
+ sql = sql.replaceAll("([\\s]*\\() (?!FROM)", "(");
+ sql = sql.replaceAll("[\\s]*\\)", ")");
+ //sql = sql.replaceAll("[dD][eE][cC][oO][dD][eE] ", "decode");
+ //sql = sql.replaceAll("[\\s]*\\(", "(");
+ //sql = replaceNewLine(sql, "decode ", "decode");
+ //sql = replaceNewLine(sql, "DECODE ", "decode");
+ //sql = replaceNewLine(sql, "Decode ", "decode");
+
+ String nextToken = getNextSQLParseToken(sql, true);
+ String dbInfo = getDbInfo();
+ boolean isCYMBALScript = false;
+ if (!isNull(dbInfo) && (!dbInfo.equals(AppConstants.DB_LOCAL))) {
+ try {
+ org.openecomp.portalsdk.analytics.util.RemDbInfo remDbInfo = new org.openecomp.portalsdk.analytics.util.RemDbInfo();
+ String dbType = remDbInfo.getDBType(dbInfo);
+ if (dbType.equals("DAYTONA") && !(nextToken.toUpperCase().equals("SELECT"))) {
+ isCYMBALScript = true;
+ }
+ } catch (Exception ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ if ( isCYMBALScript == false ) {
+ while (nextToken.length() > 0) {
+ //System.out.println("LastToken " + lastToken + " NextToken " + nextToken);
+
+
+ if (parsedSQL.length() == 0) {
+ if (nextToken.toUpperCase().equals("SELECT"))
+ parsedSQL.append("SELECT ");
+ else
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "The SQL must start with the SELECT keyword.");
+ } else if (nextToken.toUpperCase().equals("DISTINCT")
+ && parsedSQL.toString().equals("SELECT ")) {
+ parsedSQL.append("DISTINCT ");
+ } else if (nextToken.equals("*")
+ && (parsedSQL.toString().equals("SELECT ") || parsedSQL.toString().equals(
+ "SELECT DISTINCT "))) {
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "You cannot use \"SELECT *\". Please specify select columns/expressions.");
+ } else if (nextToken.toUpperCase().equals("FROM")) {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, null, parsedSQL,
+ updatedReportCols, false));
+ lastToken = null;
+ }
+
+ parsedSQL.append(" \n");
+ while (lastParsePos < sql.length()
+ && Character.isWhitespace(sql.charAt(lastParsePos)))
+ lastParsePos++;
+ parsedSQL.append(sql.substring(lastParsePos));
+ break;
+ } else {
+ //System.out.println("Next Token " + nextToken);
+ if (nextToken.charAt(nextToken.length() - 1) == ',') {
+ // The token ends with ,
+ nextToken = nextToken.substring(0, nextToken.length() - 1);
+
+ if (nextToken.length() == 0) {
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, null,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } // else just comma => ignore it
+ } else {
+ //System.out.println("Next Token " + nextToken + " is Here" + " Last Token " + lastToken);
+ if (lastToken != null) {
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } else
+ updatedReportCols.add(getParseSQLDataColumn(nextToken, null,
+ parsedSQL, updatedReportCols, false));
+ }
+ } else {
+ // The token doesn't end with ,
+ if (lastToken == null)
+ lastToken = nextToken;
+ else {
+ String token = getNextSQLParseToken(sql, false);
+ //System.out.println(" ********** " + token + " " + lastToken);
+ if (!token.toUpperCase().equals("FROM"))
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "|FROM keyword or a comma expected after [" + nextToken
+ + "].");
+ //System.out.println("Next Token " + nextToken);
+ updatedReportCols.add(getParseSQLDataColumn(lastToken, nextToken,
+ parsedSQL, updatedReportCols, false));
+ lastToken = null;
+ } // else
+ } // else
+ } // else
+
+ lastParsePos = curSQLParsePos;
+ nextToken = getNextSQLParseToken(sql, true);
+ } // while
+ } else { // if CYMBAL Script
+ nextToken = getNextCYMBALSQLParseToken(sql, true);
+ Pattern re = null;
+ Matcher matcher = null;
+ String extracted = null;
+ while (nextToken.length() > 0) {
+ if (lastToken == null) lastToken = nextToken;
+
+ if( lastToken.toUpperCase().equals("DO DISPLAY")) {
+ re = Pattern.compile("each(.*)\\[.(.*?)\\]"); //\\[(.*?)\\]
+ matcher = re.matcher(nextToken);
+ if (matcher.find()) {
+ extracted = matcher.group();
+ re = Pattern.compile("\\[(.*?)\\]");
+ matcher = re.matcher(nextToken);
+ if(matcher.find()) {
+ extracted = matcher.group();
+ extracted = extracted.substring(1,extracted.length()-2);
+ StringTokenizer sToken = new StringTokenizer(extracted);
+ while(sToken.hasMoreTokens()) {
+ updatedReportCols.add(getParseSQLDataColumn("", sToken.nextToken(),
+ new StringBuffer(""), updatedReportCols, true));
+ }
+ }
+
+ }
+
+ }
+ lastToken = nextToken;
+ nextToken = getNextCYMBALSQLParseToken(sql, true);
+ }
+ }
+
+ if (updatedReportCols.size() == 0)
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "The SQL statement must have at least one column in the SELECT clause.");
+
+
+ return parsedSQL.toString();
+
+ } // parseReportSQL
+
+ private String getNextCYMBALSQLParseToken(String sql, boolean updateParsePos) {
+ int braketCount = 0;
+ boolean isInsideQuote = false;
+ StringBuffer nextToken = new StringBuffer();
+ for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
+ char ch = sql.charAt(idxNext);
+
+ if (ch!='\n')
+ nextToken.append(ch);
+ else break;
+ } // for
+
+ return nextToken.toString();
+ } // getNextSQLParseToken
+
+ private String getNextSQLParseToken(String sql, boolean updateParsePos) {
+ int braketCount = 0;
+ boolean isInsideQuote = false;
+ StringBuffer nextToken = new StringBuffer();
+ for (int idxNext = curSQLParsePos; idxNext < sql.length(); idxNext++) {
+ char ch = sql.charAt(idxNext);
+
+ if (Character.isWhitespace(ch) || ch == ',') {
+ if (ch == ',')
+ nextToken.append(ch);
+
+ if (nextToken.length() == 0)
+ continue;
+ else if (braketCount == 0 && (!isInsideQuote)) {
+ if (updateParsePos)
+ curSQLParsePos = idxNext + ((ch == ',') ? 1 : 0);
+ break;
+ } else if (ch != ',' && nextToken.charAt(nextToken.length() - 1) != ' ')
+ nextToken.append(' ');
+ } else {
+ nextToken.append(ch);
+
+ if (ch == '(' || ch == '[')
+ braketCount++;
+ else if (ch == ')' || ch == ']')
+ braketCount--;
+ else if (ch == '\''/* ||ch=='\"' */)
+ isInsideQuote = (!isInsideQuote);
+ } // else
+ } // for
+
+ return nextToken.toString();
+ } // getNextSQLParseToken
+
+ private DataColumnType getParseSQLDataColumn(String sqlExpression, String colId,
+ StringBuffer parsedSQL, Vector updatedReportCols, boolean isCYMBALScript) throws RaptorException {
+ DataColumnType dct = null;
+
+ if (colId != null) {
+ if (!isParseSQLColID(colId))
+ throw new org.openecomp.portalsdk.analytics.error.ValidationException(
+ "["
+ + colId
+ + "] must either be a valid column id consisting only of letters, numbers, and underscores, or there must be a comma in front of it.");
+
+ dct = getColumnById(colId);
+ } else {
+ // Getting unique column id
+ colId = "";
+ int colIdN = 0;
+ for (int i = 0; (i < sqlExpression.length()) && (colIdN < 2); i++)
+ if (Character.isLetter(sqlExpression.charAt(i))) {
+ colId += sqlExpression.toLowerCase().charAt(i);
+ colIdN++;
+ } // if
+
+ colIdN = getAllColumns().size() + updatedReportCols.size();
+ for (boolean idAlreadyUsed = true; idAlreadyUsed; colIdN++) {
+ String newColId = colId + colIdN;
+ idAlreadyUsed = false;
+
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();)
+ if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
+ idAlreadyUsed = true;
+ break;
+ }
+
+ if (!idAlreadyUsed)
+ for (Iterator iter = updatedReportCols.iterator(); iter.hasNext();)
+ if (newColId.equals(((DataColumnType) iter.next()).getColId())) {
+ idAlreadyUsed = true;
+ break;
+ }
+ } // for
+
+ colId += (colIdN - 1);
+ } // else
+
+ if (dct == null) {
+ dct = (new ObjectFactory()).createDataColumnType();
+ dct.setColId(colId);
+ dct.setDisplayWidth(10);
+ dct.setDisplayAlignment("Left");
+ dct.setVisible(true);
+ dct.setGroupBreak(false); // ???
+
+ boolean isValidIdentifier = Character.isLetterOrDigit(sqlExpression.charAt(0));
+ for (int i = 0; i < sqlExpression.length(); i++)
+ if (!(Character.isLetterOrDigit(sqlExpression.charAt(i))
+ || (sqlExpression.charAt(i) == '_') || (sqlExpression.charAt(i) == '$'))) {
+ isValidIdentifier = false;
+ break;
+ } // if
+
+ if (isValidIdentifier) {
+ dct.setDisplayName(sqlExpression);
+ } else {
+ dct.setDisplayName(colId);
+ } // else
+ } // if
+ if(!isCYMBALScript)
+ sqlExpression = sqlExpression.replaceAll(", '", ",'");
+ dct.setDbColName(sqlExpression);
+ dct.setColName(sqlExpression);
+ dct.setCalculated(true);
+ dct.setColType(AppConstants.CT_CHAR);
+ dct.setDbColType(AppConstants.CT_CHAR);
+ adjustColumnType(dct); // ???
+
+ if(!isCYMBALScript) {
+ if (parsedSQL.toString().equals("SELECT ")
+ || parsedSQL.toString().equals("SELECT DISTINCT "))
+ parsedSQL.append("\n\t");
+ else
+ parsedSQL.append(", \n\t");
+ parsedSQL.append(sqlExpression);
+ parsedSQL.append(" ");
+ parsedSQL.append(colId);
+ }
+
+ return dct;
+ } // getParseSQLDataColumn
+
+ private boolean isParseSQLColID(String token) {
+ if (nvl(token).length() == 0)
+ return false;
+
+ for (int i = 0; i < token.length(); i++) {
+ char ch = token.charAt(i);
+
+ if (i == 0 && ch == '_')
+ return false;
+
+ if (!(Character.isLetterOrDigit(ch) || ch == '_'))
+ return false;
+ } // for
+
+ return true;
+ } // isParseSQLColID
+
+ /*private*/ public String parseReportSQLForDrillDownParams(String reportSQL, DataColumnType dataColumnRequest, HttpServletRequest request){
+ String param = nvl(dataColumnRequest.getDrillDownParams());
+ String sql = reportSQL;
+ int pos = 0;
+ while (param.indexOf('[', pos) >= 0) {
+ int startIdx = param.indexOf('[',pos);
+ int endIdx = param.indexOf(']',startIdx+1);
+ pos = startIdx+1;
+ StringBuffer sb = new StringBuffer();
+ if (startIdx > 0)
+ sb.append(param.substring(0, startIdx));
+ else break;
+
+ if (param.charAt(startIdx + 1) == '#') {
+ // Parameter is a form field value
+ String fieldId = param.substring(startIdx + 2, endIdx);
+ String fieldValue = request.getParameter(fieldId);
+ sql = Utils.replaceInString(sql, "[" + fieldId.toUpperCase()+"]", fieldValue );
+ }
+ }
+ return sql;
+ }
+
+public List getMapMarkers(ReportData rd, org.openecomp.portalsdk.analytics.xmlobj.ReportMap xmlmap){
+
+ ArrayList markers = new ArrayList();
+ int rNum = 0;
+ HashMap colHash = new HashMap();
+
+ for(rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext(); rNum++) {
+ DataRow dr = rd.reportDataRows.getNext();
+ for(dr.resetNext(); dr.hasNext(); ) {
+ DataValue dv = dr.getNext();
+ colHash.put(dv.getColId(), dv.getDisplayValueLinkHtml());
+ }
+
+ for (int i = 0; i < xmlmap.getMarkers().size(); i ++){
+ Marker marker = new Marker("", "", "");
+ org.openecomp.portalsdk.analytics.xmlobj.Marker m = (org.openecomp.portalsdk.analytics.xmlobj.Marker) xmlmap.getMarkers().get(i);
+ String address = (String) colHash.get(m.getAddressColumn());
+ String data = (String) colHash.get(m.getDataColumn());
+ marker.setAddress(address);
+ if (xmlmap.getAddAddressInDataYN() != null && xmlmap.getAddAddressInDataYN().equals("Y")){
+ marker.setData(address + "<br/>" + data);
+ }
+ else{
+ marker.setData(data);
+ }
+ marker.setColor(m.getMarkerColor());
+ markers.add(marker);
+ System.out.println("%%%%%%%%%%%% marker is : " + address + data);
+ }
+
+ }
+
+ return markers;
+ }
+
+
+
+ public ReportParamValues getReportParamValues() {
+ return reportParamValues;
+ }
+
+ public String getFormFieldFilled(String title) {
+ if( getFormFieldList()!=null && reportParamValues!=null && nvl(title).length()>0) {
+ for (Iterator iter1 = getFormFieldList().getFormField().iterator(); iter1.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter1.next();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ String fieldId = fft.getFieldId();
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK) && !fft.getFieldType().equals(FormField.FFT_LIST_MULTI) && !fft.getFieldType().equals(FormField.FFT_TEXTAREA)) {
+ String paramValue = Utils.oracleSafe(nvl(reportParamValues.getParamValue(fieldId)));
+ title = Utils.replaceInString(title, fieldDisplay, nvl(
+ paramValue, ""));
+ }
+ }
+ }
+ return title;
+ }
+// public static void main (String args[])throws Exception {
+// ReportRuntime rr = new ReportRuntime();
+// String sql= " SELECT NULL TOTAL_AC20, NULL TOTAL_AC21, NULL TOTAL_AC22, NULL TOTAL_CO1, NULL TOTAL_BR2, NULL TOTAL_CO3, NULL TOTAL_CO4, NULL TOTAL_HO20, NULL TOTAL_DU9, NULL TOTAL_HO19, NULL TOTAL_CU10, NULL TOTAL_AC11,TO_CHAR (SUM(TO_NUMBER (SE29,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_SE29,TO_CHAR (SUM(TO_NUMBER (BR6,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_BR6,TO_CHAR (SUM(TO_NUMBER (TR7,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_TR7,TO_CHAR (SUM(TO_NUMBER (FE8,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_FE8,TO_CHAR (SUM(TO_NUMBER (TA12,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_TA12,TO_CHAR (SUM(TO_NUMBER (UN13,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_UN13,TO_CHAR (SUM(TO_NUMBER (TA27,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_TA27,TO_CHAR (SUM(TO_NUMBER (TA28,'$9,999,999,990.99')),'$9,999,999,990.99') TOTAL_TA28, NULL TOTAL_CU20, NULL TOTAL_MG23, NULL TOTAL_CU27, NULL TOTAL_CU24, NULL TOTAL_CU28, NULL TOTAL_AC24, NULL TOTAL_CU21, NULL TOTAL_RE25, NULL TOTAL_BI29 FROM (SELECT substr(ACCT_ID,1,3) ac20, substr(ACCT_ID,5,5) ac21, substr(ACCT_ID,11,25) ac22, ci1.CONF_ID co1, ci1.BRIDGE_ID br2, ci1.CONF_RESERVE_DATE co3, ci1.CONF_RESERVE_TIME co4, ci1.HOST_PARTICIPANT_NUMBER ho20, to_number(duration_in_minutes) du9, ci1.HOST_PARTICIPANT_NAME ho19, ci1.CUSTOMER_CONF_ID cu10, ci1.ACCESS_METHOD ac11, TO_CHAR(ci1.SETUP_CHARGES,'$9,999,999,990.99') se29, TO_CHAR(ci1.BRIDGE_CHARGES,'$9,999,999,990.99') br6, TO_CHAR(ci1.TRANSPORT_CHARGES,'$9,999,999,990.99') tr7, TO_CHAR(ci1.FEATURES_CHARGES,'$9,999,999,990.99') fe8, TO_CHAR(ci1.TAXES,'$9,999,999,990.99') ta12, TO_CHAR(Univ_connect_charges+admin_exp_fee+nvl(property_tax_allotment,0)+nvl(federal_regulatory_fee,0),'$9,999,999,990.99') un13, TO_CHAR(setup_charges+Bridge_charges + transport_charges + features_charges-discount,'$9,999,999,990.99') ta27, TO_CHAR(setup_charges + bridge_charges + transport_charges + features_charges + taxes + univ_connect_charges+admin_exp_fee+nvl(property_tax_allotment,0)+nvl(federal_regulatory_fee,0)-discount,'$9,999,999,990.99') ta28, ci1.CUST_ID cu20, ci2.MGD_SVC_FEE mg23, NULL cu27, to_char( DURATION_IN_MINUTES * mgd_svc_fee ,'$9,990.99') cu24, NULL cu28, ci2.ACCESS_DESCRIPTION ac24, decode ( cust_id , '0011681500002' , '00002' , decode ( cust_id , '0011681500092' , '00092' , decode ( cust_id , '0011681500093' , '00093' , substr(cust_id,9,5) ))) cu21, ci1.RECORD_TYPE re25, ci1.BILL_MONTH bi29 FROM CIS_AUDIO ci1, CIS_MGD_SVC_FEE ci2 WHERE ci2.ACCESS_METHOD (+)=ci1.ACCESS_METHOD AND substr(ACCT_ID,1,3) = '215' AND decode ( cust_id , '0011681500002' , '00002' , decode ( cust_id , '0011681500092' , '00092' , decode ( cust_id , '0011681500093' , '00093' , substr(cust_id,9,5) ))) IN ('00002') AND ci1.BILL_MONTH = 'NOV 2006' ORDER BY ci1.ACCESS_METHOD ASC) totalSQL";
+// rr.parseReportSQL(sql);
+// }
+
+ public synchronized Object clone() {
+ try {
+ return super.clone();
+ } catch (CloneNotSupportedException e) {
+ // this shouldn't happen, since we are Cloneable
+ throw new InternalError("Cloning throws error.");
+ }
+ }
+
+ /* private Vector addForecastData(String sql) throws Exception {
+ InstanceQuery instTrainQuery = new InstanceQuery();
+ //instTrainQuery.setDatabaseURL("jdbc:idb:=experiments.prp");
+ instTrainQuery.setUsername("fusionapp");
+ instTrainQuery.setPassword("i64eq4aunp");
+ Instances data = instTrainQuery.retrieveInstances(sql);
+
+ ArrayList<String> forecastArray = new ArrayList<String>();
+
+ List reportCols = getAllColumns();
+ DataColumnType dct = null;
+ Iterator iter = null;
+
+ String dateAttribute = "";
+
+ for(iter=reportCols.iterator(); iter.hasNext(); ) {
+ dct = (DataColumnType) iter.next();
+ if(nvl(dct.getDataMiningCol()).equals(AppConstants.DM_FORECASTING_ATTR))
+ forecastArray.add(dct.getColId().toUpperCase());
+ }
+
+ for(iter=reportCols.iterator(); iter.hasNext(); ) {
+ dct = (DataColumnType) iter.next();
+ if(nvl(dct.getDataMiningCol()).equals(AppConstants.DM_DATE_ATTR))
+ dateAttribute = dct.getColId().toUpperCase();
+ }
+
+
+ int forecastUnits = getForecastingPeriod();
+ // new forecaster
+ WekaForecaster forecaster = new WekaForecaster();
+
+ // set the targets we want to forecast. This method calls
+ // setFieldsToLag() on the lag maker object for us
+ StringBuffer forecastAttribute = new StringBuffer("");
+ for (int i=0; i < forecastArray.size(); i++) {
+ forecastAttribute.append(forecastArray.get(i));
+ if(i<forecastArray.size()-1) forecastAttribute.append(",");
+ }
+ forecaster.setFieldsToForecast(forecastAttribute.toString());
+
+ // default underlying classifier is SMOreg (SVM) - we'll use
+ // gaussian processes for regression instead
+ if(getClassifier().equals(AppConstants.DM_GAUSSIAN_CLASSIFIER))
+ forecaster.setBaseForecaster(new GaussianProcesses());
+ else if (getClassifier().equals(AppConstants.DM_SVM_CLASSIFIER))
+ forecaster.setBaseForecaster(new weka.classifiers.functions.SMOreg());
+
+ forecaster.getTSLagMaker().setTimeStampField(dateAttribute); // date time stamp
+ forecaster.getTSLagMaker().setMinLag(1);
+ forecaster.getTSLagMaker().setMaxLag(12); // monthly data
+
+ // add a month of the year indicator field
+ forecaster.getTSLagMaker().setAddMonthOfYear(true);
+
+ // add a quarter of the year indicator field
+ forecaster.getTSLagMaker().setAddQuarterOfYear(true);
+
+ // build the model
+ forecaster.buildForecaster(data, System.out);
+
+ // prime the forecaster with enough recent historical data
+ // to cover up to the maximum lag. In our case, we could just supply
+ // the 12 most recent historical instances, as this covers our maximum
+ // lag period
+ forecaster.primeForecaster(data);
+
+ // forecast for 12 units (months) beyond the end of the
+ // training data
+ List<List<NumericPrediction>> forecast = forecaster.forecast(getForecastingPeriod(), System.out);
+
+ String dateFormat = "";
+ if(nvl(getForecastingTimeFormat()).length()>0)
+ dateFormat = getForecastingTimeFormat();
+ java.text.SimpleDateFormat sdf = null;
+ java.text.SimpleDateFormat sdf1 = null;
+ java.text.SimpleDateFormat sdf2 = null;
+ if(dateFormat.equals("Default")) {
+ sdf = new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss");
+ sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ } else {
+ sdf = new SimpleDateFormat("yyyy-MM-dd\'T\'HH:mm:ss");
+ sdf1 = new SimpleDateFormat(dateFormat);
+ sdf2 = new SimpleDateFormat("MM/yyyy");
+ }
+ // output the predictions. Outer list is over the steps; inner list is over
+ // the targets
+ int k = 0;
+ int flag = 0;
+ Enumeration<Attribute> enum1 = data.lastInstance().enumerateAttributes();
+ Attribute attrib = null;
+
+ HashMap<String, Object> predictedHashMap = new HashMap<String, Object>();
+
+ while(enum1.hasMoreElements()) {
+ attrib = enum1.nextElement();
+ System.out.println(attrib.name() + " " + attrib.index());
+ }
+ Vector<Vector> forecastedDataSet = new Vector<Vector>();
+ Vector forecastedData = new Vector();
+ Date d = null;
+ Date forecastedDate = null;
+ Calendar c1 = Calendar.getInstance();
+ for (int i = 0; i < forecastUnits; i++) {
+ TSLagMaker ts = forecaster.getTSLagMaker();
+ //java.sql.Timestamp ts1 = new java.sql.Timestamp(new Long(ts.getCurrentTimeStampValue()).longValue());
+ //System.out.println(data.lastInstance().dataset().attribute(0).getDateFormat());//parseDate("yyyy-MM-dd\'T\'HH:mm:ss")
+ //System.out.println(data.lastInstance().dataset().lastInstance().stringValue(0) + " " + sdf.parse(data.lastInstance().dataset().lastInstance().stringValue(0)));
+ d = sdf.parse(data.lastInstance().dataset().lastInstance().stringValue(0));
+ c1.setTime(d);
+ c1.add(Calendar.MONTH, i+1);
+ forecastedDate = c1.getTime();
+ List<NumericPrediction> predsAtStep = forecast.get(i);
+ predictedHashMap.put(dateAttribute, sdf1.format(forecastedDate));
+ predictedHashMap.put(dateAttribute+"_FORMAT", sdf2.format(forecastedDate));
+
+ for (int j = 0; j < forecastArray.size(); j++) {
+ NumericPrediction predForTarget = predsAtStep.get(j);
+ predictedHashMap.put(forecastArray.get(j), new Integer(new Double(predForTarget.predicted()).intValue()).toString());
+ //System.out.print(forecastArray.get(j)+" " + predForTarget.predicted());
+ }
+
+ enum1 = data.lastInstance().enumerateAttributes();
+ while(enum1.hasMoreElements()) {
+ attrib = enum1.nextElement();
+ if((!attrib.name().equals(dateAttribute)) && (!attrib.name().equals(dateAttribute+"_FORMAT"))){
+ for (int h=0; h < forecastArray.size(); h++) {
+ if(attrib.name().equals(forecastArray.get(h))) {
+ forecastedData.add(predictedHashMap.get(attrib.name()));
+ flag = 1;
+ }
+
+ }
+ } else if(attrib.name().equals(dateAttribute+"_FORMAT")) {
+ forecastedData.add(predictedHashMap.get(dateAttribute+"_FORMAT"));
+ flag = 1;
+ } else if(attrib.name().equals(dateAttribute)) {
+ forecastedData.add(predictedHashMap.get(dateAttribute));
+ flag = 1;
+ }
+ if(flag == 0) {
+ forecastedData.add("");
+ } / *else {
+ forecastedData.add(predictedHashMap.get(dateAttribute));
+ forecastedData.add(predictedHashMap.get(dateAttribute+"_format"));
+ }* /
+ //System.out.println(attrib.name() + " " + attrib.index());
+
+
+
+
+
+ flag = 0;
+
+ }
+ forecastedDataSet.add(forecastedData);
+ predictedHashMap = new HashMap<String, Object>();
+ forecastedData = new Vector();
+ enum1 = data.lastInstance().enumerateAttributes();
+ }
+ setReportDataSize(getReportDataSize()+getForecastingPeriod());
+ return forecastedDataSet;
+ } */
+
+ public VisualManager getVisualManager() {
+ return visualManager;
+ }
+
+ public String getReportSQLWithRowNum(String _orderBy, boolean asc) {
+ String sql = getWholeSQL();
+ int closeBracketPos = 0;
+ /*if (nvl(_orderBy).length() > 0) {
+ if(sql.lastIndexOf(")")!= -1) closeBracketPos = sql.lastIndexOf(")");
+ int idxOrderBy = (closeBracketPos>0)?sql.toUpperCase().indexOf("ORDER BY", closeBracketPos):sql.toUpperCase().lastIndexOf("ORDER BY");
+ DataColumnType dct = getColumnById(_orderBy+"_sort");
+ if(dct!=null && dct.getColName().length()>0) {
+ _orderBy = _orderBy+"_sort";
+ }
+ if (idxOrderBy < 0)
+ sql += " ORDER BY " + _orderBy + " " + (asc ? "ASC" : "DESC");
+ else {
+ int braketCount = 0;
+ int idxOrderByClauseEnd = 0;
+ for (idxOrderByClauseEnd = idxOrderBy; idxOrderByClauseEnd < sql.length(); idxOrderByClauseEnd++) {
+ char ch = sql.charAt(idxOrderByClauseEnd);
+
+ if (ch == '(')
+ braketCount++;
+ else if (ch == ')') {
+ if (braketCount == 0)
+ break;
+ braketCount--;
+ }
+ } // for
+
+ sql = sql.substring(0, idxOrderBy) + " ORDER BY " + _orderBy + " "
+ + (asc ? "ASC" : "DESC") + sql.substring(idxOrderByClauseEnd);
+ } // else
+ } // if*/
+
+ // Added reportSQLOnlyFirstPart which has Column information with Rownum
+ return nvl(getReportSQLOnlyFirstPart()) + " " + sql + ") x ";
+
+ }
+
+ public int getDisplayMode() {
+ return DISPLAY_MODE;
+ }
+
+ public void setDisplayMode(int mode) {
+ DISPLAY_MODE = mode;
+ }
+
+ public int getDateOption() {
+ return DATE_OPTION;
+ }
+
+ public void setDateOption(int dateOption) {
+ DATE_OPTION = dateOption;
+ }
+
+ public boolean isDisplayColTotals() {
+ return displayColTotals;
+ }
+
+ public void setDisplayColTotals(boolean displayColTotals) {
+ this.displayColTotals = displayColTotals;
+ }
+
+ public boolean isDisplayRowTotals() {
+ return displayRowTotals;
+ }
+
+ public void setDisplayRowTotals(boolean displayRowTotals) {
+ this.displayRowTotals = displayRowTotals;
+ }
+
+
+ private boolean canPersistLinearReport() {
+ boolean visibleColExist = false;
+
+ if (getDataSourceList().getDataSource().size() > 0) {
+ for (Iterator iter = getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.isVisible()) {
+ visibleColExist = true;
+ break;
+ }
+ } // for
+ } // if
+
+ return visibleColExist;
+ } // canPersistLinearReport
+
+ public void persistLinearReport(HttpServletRequest request)
+ throws RaptorException {
+ if (!canPersistLinearReport())
+ return;
+
+ Connection connection = null;
+ try {
+ String userID = AppUtils.getUserID(request);
+ String reportXML = marshal();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report " + reportID
+ + " XML marshalled succesfully"));
+
+ // Update report
+ verifySQLBasedReportAccess(request);
+ reportSecurity.reportUpdate(request);
+ connection = DbUtils.startTransaction();
+ ReportLoader.updateCustomReportRec(connection, this, reportXML);
+ ReportLoader.createReportLogEntry(connection, reportID, userID,
+ AppConstants.RLA_UPDATE, "", "");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report "
+ + reportID + " succesfull"));
+ DbUtils.commitTransaction(connection);
+ } catch (RaptorException e) {
+ e.printStackTrace();
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // persistLinearReport
+
+ public void persistDashboardReport(HttpServletRequest request)
+ throws RaptorException {
+
+ Connection connection = null;
+ try {
+ String userID = AppUtils.getUserID(request);
+ String reportXML = marshal();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] Report " + reportID
+ + " XML marshalled succesfully"));
+
+ // Update report
+ verifySQLBasedReportAccess(request);
+ reportSecurity.reportUpdate(request);
+ connection = DbUtils.startTransaction();
+ ReportLoader.updateCustomReportRec(connection, this, reportXML);
+ ReportLoader.createReportLogEntry(connection, reportID, userID,
+ AppConstants.RLA_UPDATE, "", "");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] DB update report "
+ + reportID + " succesfull"));
+ DbUtils.commitTransaction(connection);
+ } catch (RaptorException e) {
+ e.printStackTrace();
+ DbUtils.rollbackTransaction(connection);
+ throw e;
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // persistDashboardReport
+ public String getTotalSql() {
+ return totalSql;
+ }
+
+ public void setTotalSql(String totalSql) {
+ this.totalSql = totalSql;
+ }
+
+ public void setTriggerFormFieldCheck( ReportFormFields FormFieldList, FormField selectedFormField) {
+
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(!ff.getFieldName().equals(selectedFormField.getFieldName())) {
+ if(nvl(ff.getBaseSQL()).length()>0 && ff.getBaseSQL().indexOf("["+selectedFormField.getFieldDisplayName() +"]")!= -1) {
+ selectedFormField.setTriggerOtherFormFields(true);
+ }
+
+ }
+ }
+
+ }
+
+ public void setTriggerThisFormFieldCheck( ReportFormFields FormFieldList, FormField selectedFormField) {
+
+ String sql = nvl(selectedFormField.getBaseSQL()).length()>0 ? selectedFormField.getBaseSQL():"";
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ FormField ff = (FormField) iter.next();
+ if(!ff.getFieldName().equals(selectedFormField.getFieldName())) {
+ if(sql.indexOf("["+ff.getFieldDisplayName() +"]")!= -1) {
+ selectedFormField.setTriggerThisFormfield(true);
+ break;
+ }
+
+ }
+ }
+
+ }
+
+ private boolean isAllowEdit(HttpServletRequest request) {
+ boolean allowEdit = false;
+ try {
+ if( AppUtils.isAdminUser(request) || AppUtils.isSuperUser(request) ) {
+ allowEdit = true;
+ }
+ } catch (RaptorException ex) {
+ allowEdit = false;
+ }
+ return allowEdit;
+ }
+ public ReportJSONRuntime createReportJSONRuntime(HttpServletRequest request, ReportData rd) {
+ String userId = AppUtils.getUserID(request);
+ ObjectMapper mapper = new ObjectMapper();
+ ReportJSONRuntime reportJSONRuntime = new ReportJSONRuntime();
+ reportJSONRuntime.setReportTitle(getReportTitle());
+ reportJSONRuntime.setReportID(getReportID());
+ reportJSONRuntime.setReportDescr(getReportDescr());
+ reportJSONRuntime.setReportName(getReportName());
+ reportJSONRuntime.setReportSubTitle(getReportSubTitle());
+ reportJSONRuntime.setAllowSchedule(isAllowSchedule());
+ reportJSONRuntime.setAllowEdit(isAllowEdit(request));
+ reportJSONRuntime.setColIdxTobeFreezed(getFrozenColumnId());
+ reportJSONRuntime.setNumFormCols(getNumFormColsAsInt());
+ //back button url
+ reportJSONRuntime.setBackBtnURL("");
+ String chartType = getChartType();
+ boolean displayChart = (nvl(chartType).length()>0)&&getDisplayChart();
+ boolean displayChartWizard = getDisplayChart();
+ reportJSONRuntime.setChartAvailable(displayChart);
+ reportJSONRuntime.setChartWizardAvailable(displayChartWizard);
+ reportJSONRuntime.setDisplayData(!isDisplayOptionHideData());
+ reportJSONRuntime.setDisplayForm(!isDisplayOptionHideForm());
+ reportJSONRuntime.setDisplayExcel(!isDisplayOptionHideExcelIcons());
+ reportJSONRuntime.setDisplayPDF(!isDisplayOptionHidePDFIcons());
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ if(getReportFormFields()!=null) {
+ formFieldJSONList = new ArrayList<FormFieldJSON>(getReportFormFields().size());
+ for (Iterator iter = getReportFormFields().iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ ff.setDbInfo(getDbInfo());
+ FormFieldJSON ffJSON = new FormFieldJSON();
+ ffJSON.setFieldId(ff.getFieldName());
+ ffJSON.setFieldType(ff.getFieldType());
+ ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
+ ffJSON.setHelpText(ff.getHelpText());
+ ffJSON.setValidationType(ff.getValidationType());
+ ffJSON.setVisible(ff.isVisible());
+ //ffJSON.setTriggerOtherFormFields(ff.getDependsOn());
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillWithCurrentValues(request, SQL, ff);
+ String defaultSQL = lu.getDefaultSQL();
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+
+ if(lookup != null && lookup.size() > 0) {
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ if(requestValue != null && Arrays.asList(requestValue).contains(value.getId())) {
+ //if(value.getId().equals(requestValue))
+ value.setDefaultValue(true);
+ } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
+ if(ff.getDefaultValue().equals(value.getId())) {
+ value.setDefaultValue(true);
+ }
+ }
+ if(!(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) && value.isDefaultValue())
+ formFieldValues.add(value);
+ else if(ff.getFieldType().equals(FormField.FFT_CHECK_BOX) || ff.getFieldType().equals(FormField.FFT_COMBO_BOX) || ff.getFieldType().equals(FormField.FFT_LIST_BOX)
+ || ff.getFieldType().equals(FormField.FFT_LIST_MULTI)) {
+ formFieldValues.add(value);
+ }
+ //break;
+ }
+ } else {
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ }
+ }
+
+ } else {
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
+ IdNameValue value = new IdNameValue(ff.getDefaultValue(), ff.getDefaultValue(), true, false);
+ formFieldValues.add(value);
+ }
+ }
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+
+
+ ffJSON.setFormFieldValues(formFieldValues);
+ formFieldJSONList.add(ffJSON);
+ } // for
+ }
+ reportJSONRuntime.setFormFieldList(formFieldJSONList);
+ //reportJSONRuntime.setReportDataColumns(get);
+ int count = 0;
+ Map<String,Object> dvJSON = null;
+ if(rd!=null) {
+ count = 0;
+ reportJSONRuntime.setTotalRows(getReportDataSize());
+ ArrayList<ColumnHeader> colList = new ArrayList<ColumnHeader>();
+ ArrayList<Map<String,Object>> reportDataRows = new ArrayList<Map<String,Object>>();
+ for(rd.reportColumnHeaderRows.resetNext(); rd.reportColumnHeaderRows.hasNext(); ) {
+ count++;
+ ColumnHeaderRow chr = rd.reportColumnHeaderRows.getNext();
+ for(chr.resetNext(); chr.hasNext(); ) {
+ colList.add(chr.getNext());
+ }
+ }
+ if(getReportDataSize() > 0) {
+ count = 0;
+ for(rd.reportDataRows.resetNext(); rd.reportDataRows.hasNext(); count++) {
+ dvJSON = new HashMap<String,Object>();
+ DataRow dr = rd.reportDataRows.getNext();
+ for(dr.resetNext(); dr.hasNext(); ) {
+ DataValue dv = dr.getNext();
+ try {
+ dvJSON.put(dv.getColId(), dv);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ }
+ reportDataRows.add(dvJSON);
+ }
+ }
+ reportJSONRuntime.setReportDataColumns(colList);
+ reportJSONRuntime.setReportDataRows(reportDataRows);
+ //reportJSONRuntime.setSqlWhole(getWholeSQL());
+ reportJSONRuntime.setPageSize(getPageSize());
+
+ }
+
+ if(getReportDataSize() <= 0) {
+ reportJSONRuntime.setMessage(getEmptyMessage());
+ }
+ reportJSONRuntime.setSqlWhole(getWholeSQL());
+ return reportJSONRuntime;
+
+ }
+
+ public ReportJSONRuntime createFormFieldJSONRuntime(HttpServletRequest request) {
+ String userId = AppUtils.getUserID(request);
+ ObjectMapper mapper = new ObjectMapper();
+ ReportJSONRuntime reportJSONRuntime = new ReportJSONRuntime();
+ reportJSONRuntime.setReportTitle(getReportTitle());
+ reportJSONRuntime.setReportID(getReportID());
+ reportJSONRuntime.setReportName(getReportName());
+ reportJSONRuntime.setReportSubTitle(getReportSubTitle());
+ reportJSONRuntime.setNumFormCols(getNumFormColsAsInt());
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ if(reportFormFields!=null) {
+ formFieldJSONList = new ArrayList<FormFieldJSON>(reportFormFields.size());
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ FormFieldJSON ffJSON = new FormFieldJSON();
+ ffJSON.setFieldId(ff.getFieldName());
+ ffJSON.setFieldType(ff.getFieldType());
+ ffJSON.setFieldDisplayName(ff.getFieldDisplayName());
+ ffJSON.setHelpText(ff.getHelpText());
+ ffJSON.setValidationType(ff.getValidationType());
+ ffJSON.setFormFieldValues(formFieldValues);
+ ffJSON.setVisible(ff.isVisible());
+ formFieldJSONList.add(ffJSON);
+ }
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ ff.setDbInfo(getDbInfo());
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ if(ffJSON.getFieldId().equals(ff.getFieldName())) {
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ setTriggerThisFormFieldCheck(getReportFormFields(), ff);
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillOtherFormfieldValues(request, SQL, userId, formFieldJSONList);
+ //SQL = parseAndFillWithCurrentValues(formGrid,SQL, ff);
+ String defaultSQL = lu.getDefaultSQL();
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ //defaultSQL = parseAndFillWithCurrentValues(formGrid,defaultSQL, ff);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+ String requestValue = request.getParameter(ff.getFieldName());
+ ArrayList<String> requestValueList = new ArrayList<String>();
+ requestValueList.add(requestValue);
+
+ /*if(ff.isTriggerThisFormfield()) {
+ refreshFormFieldsWithLatestValue(request, userId, ff, formFieldJSONList);
+ }*/
+
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ if(nvl(requestValue).length()>0) {
+ if(value.getId().equals(requestValue))
+ value.setDefaultValue(true);
+ }
+ formFieldValues.add(value);
+ //break;
+ }
+
+ } else {
+ setTriggerFormFieldCheck( getReportFormFields(), ff);
+ ffJSON.setTriggerOtherFormFields(ff.isTriggerOtherFormFields());
+ String[] requestValue = request.getParameterValues(ff.getFieldName());
+ if(requestValue!=null && requestValue.length>0) {
+ IdNameValue value = new IdNameValue(requestValue[0], requestValue[0], true, false);
+ formFieldValues.add(value);
+ } else if (AppUtils.nvl(ff.getDefaultValue()).length()>0) {
+ IdNameValue value = new IdNameValue(ff.getDefaultValue(), ff.getDefaultValue(), true, false);
+ formFieldValues.add(value);
+ }
+ }
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ }
+
+
+ //if(!ff.isTriggerThisFormfield()) {
+ ffJSON.setFormFieldValues(formFieldValues);
+ //}
+
+ break;
+
+ } //if
+ } //for
+ }//for
+ }//if
+
+ reportJSONRuntime.setFormFieldList(formFieldJSONList);
+ //reportJSONRuntime.setReportDataColumns(get);
+
+ return reportJSONRuntime;
+
+ }
+
+
+ private String parseAndFillOtherFormfieldValues(HttpServletRequest request, String SQL, String userId, ArrayList<FormFieldJSON> formFieldJSONList) {
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ String selectedValue = "";
+ String displayName = "";
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ displayName = ffJSON.getFieldDisplayName();
+ ArrayList<IdNameValue> formfieldvalues = ffJSON.getFormFieldValues();
+ for (int i = 0; i< formfieldvalues.size(); i++) {
+ IdNameValue formfieldItem = formfieldvalues.get(i);
+ if(formfieldItem.isDefaultValue()) {
+ selectedValue = formfieldItem.getId();
+ }
+ }
+ SQL = Utils.replaceInString(SQL, "["+displayName+"]", selectedValue);
+ }
+ return SQL;
+
+ }
+
+ private void refreshFormFieldsWithLatestValue(HttpServletRequest request, String userId, FormField ff_src, ArrayList<FormFieldJSON> formFieldJSONList) {
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ //ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ List<String> requestValueList = null;
+ IdNameList lookup = null;
+ lookup = ff_src.getLookupList();
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = "" ;
+ String oldSQL = "";
+ String oldDefaultSQL = "";
+ String defaultSQL = "";
+ IdNameList lookupList = null;
+ if(lu != null) {
+ SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ oldDefaultSQL = lu.getDefaultSQL();
+ defaultSQL = lu.getDefaultSQL();
+ }
+ boolean readOnly = false;
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ if((ffJSON.getFieldId().equals(ff_src.getFieldName())) && ffJSON.isVisible()) {
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ if(!ff.getFieldName().equals(ff_src.getFieldName())) {
+ //IdNameList lookup = null;
+ //lookup = ff.getLookupList();
+ String selectedValue = "";
+
+
+
+ String [] requestParam = request.getParameterValues(ff.getFieldName());
+ if(requestParam != null) {
+ requestValueList = Arrays.asList(request.getParameterValues(ff.getFieldName()));
+
+ } else {
+ requestValueList = new ArrayList<String>();
+ }
+
+
+ if(nvl(ff_src.getBaseSQL()).length()>0 && ff_src.getBaseSQL().indexOf("["+ff.getFieldDisplayName() +"]")!= -1) {
+ if(lookup!=null) {
+ try {
+ if(!ff_src.hasPredefinedList) {
+ String formatSelected = null;
+ if(ff_src.getFieldType().equals(FormField.FFT_LIST_MULTI) || ff_src.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ formatSelected = formatSelectedItems(requestValueList, ff_src.getFieldType());
+ } else
+ formatSelected = requestValueList.size()>0?requestValueList.get(0):"";
+ SQL = Utils.replaceInString(SQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = Utils.replaceInString(defaultSQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff_src);
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillWithCurrentValues(request, SQL, ff_src);
+
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+
+ }
+
+ }
+ }
+ }
+
+ if(nvl(ff_src.getBaseSQL()).length()>0) {
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff_src.getDbInfo(), ff_src.getUserId());
+ } catch (Exception e ){
+ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ if(!ff_src.hasPredefinedList) {
+ lookup.trimToSize();
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+ formFieldValues.add(value);
+ }
+ }
+ ffJSON.setFormFieldValues(formFieldValues);
+ }
+ if(!ff_src.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ if(oldDefaultSQL != null && !oldDefaultSQL.equals("")) {
+ ((IdNameSql)lookup).setDefaultSQL(oldDefaultSQL);
+ }
+ }
+
+ }
+ }
+
+ }
+
+
+ private void triggerOtherFormFieldsWithThisValue(HttpServletRequest request, String userId, FormField ff_src, ArrayList<String> requestValueList, ArrayList<FormFieldJSON> formFieldJSONList) {
+ ArrayList<IdNameValue> formFieldValues = new ArrayList<IdNameValue>();
+ //ArrayList<FormFieldJSON> formFieldJSONList = new ArrayList<FormFieldJSON>();
+ for (Iterator iter = reportFormFields.iterator(); iter.hasNext();) {
+ formFieldValues = new ArrayList<IdNameValue>();
+ FormField ff = (FormField) iter.next();
+ if(!ff_src.getFieldName().equals(ff.getFieldName())) {
+ for (Iterator iter1 = formFieldJSONList.iterator(); iter1.hasNext();) {
+ FormFieldJSON ffJSON = (FormFieldJSON) iter1.next();
+ if(ffJSON.getFieldId().equals(ff.getFieldName()) && ffJSON.isVisible()) {
+ if(nvl(ff.getBaseSQL()).length()>0 && ff.getBaseSQL().indexOf("["+ff_src.getFieldDisplayName() +"]")!= -1) {
+ IdNameList lookup = null;
+ lookup = ff.getLookupList();
+ String selectedValue = "";
+ String oldSQL = "";
+ String oldDefaultSQL = "";
+ IdNameList lookupList = null;
+ boolean readOnly = false;
+ if(lookup!=null) {
+ try {
+ if(!ff.hasPredefinedList) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = lu.getSql();
+ oldSQL = lu.getSql();
+ oldDefaultSQL = lu.getDefaultSQL();
+ String defaultSQL = lu.getDefaultSQL();
+ String formatSelected = null;
+ if(ff_src.getFieldType().equals(FormField.FFT_LIST_MULTI) || ff_src.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ formatSelected = formatSelectedItems(requestValueList, ff.getFieldType());
+ }
+ else
+ formatSelected = requestValueList.size()>0?requestValueList.get(0):"";
+ SQL = Utils.replaceInString(SQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = Utils.replaceInString(defaultSQL, "["+ff_src.getFieldDisplayName()+"]", formatSelected);
+ defaultSQL = parseAndFillWithCurrentValues(request, defaultSQL, ff_src);
+ defaultSQL = parseAndFillReq_Session_UserValues(request, defaultSQL, userId);
+ SQL = parseAndFillReq_Session_UserValues(request, SQL, userId);
+ SQL = parseAndFillWithCurrentValues(request, SQL, ff_src);
+ lookup = new IdNameSql(-1,SQL,defaultSQL);
+ lookupList = lookup;
+ try {
+ lookup.loadUserData(0, "", ff.getDbInfo(), ff.getUserId());
+ } catch (Exception e ){
+ e.printStackTrace(); //throw new RaptorRuntimeException(e);
+ }
+ }
+ lookup.trimToSize();
+
+
+
+ for (lookup.resetNext(); lookup.hasNext();) {
+ IdNameValue value = lookup.getNext();
+ readOnly = value.isReadOnly();
+// if(nvl(requestValue).length()>0) {
+// if(value.getId().equals(requestValue))
+// value.setDefaultValue(true);
+// }
+ formFieldValues.add(value);
+ //break;
+ }
+
+ ffJSON.setFormFieldValues(formFieldValues);
+
+ if(!ff.hasPredefinedList) {
+ if(oldSQL != null && !oldSQL.equals("")) {
+ ((IdNameSql)lookup).setSQL(oldSQL);
+ }
+ if(oldDefaultSQL != null && !oldDefaultSQL.equals("")) {
+ ((IdNameSql)lookup).setDefaultSQL(oldDefaultSQL);
+ }
+ }
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ }
+ }
+
+ } //ff baseSQL
+ }
+ }
+ }
+ }
+
+ }
+
+ public String formatSelectedItems(List selectedItems, String type) {
+ StringBuffer value = new StringBuffer("");
+ int count = 0;
+ boolean multiple = false;
+ if(type.equals("LIST_MULTI_SELECT"))
+ multiple = true;
+ //multiple = (selectedItems.size()>1);
+ for(Iterator iter = selectedItems.iterator(); iter.hasNext(); ) {
+ count++;
+ String entry = (String) iter.next();
+ if(count == 1 && multiple)
+ value.append("(");
+ //if(type.equals(FormField.FFT_CHECK_BOX))
+ /*if(type.equals(FormField.FFT_CHECK_BOX))
+ value.append("'"+Utils.oracleSafe(entry)+"'");
+ else*/ if (type.equals(FormField.FFT_LIST_MULTI))
+ value.append("'"+Utils.oracleSafe(entry)+"'");
+ else if(type.equals(FormField.FFT_LIST_BOX))
+ value.append(Utils.oracleSafe(entry));
+ else
+ value.append("'"+Utils.oracleSafe(entry)+"'");
+ if((count < selectedItems.size()) && multiple)
+ value.append(",");
+ if((count == selectedItems.size()) && multiple)
+ value.append(")");
+ }
+
+ if(value.length()>0)
+ return value.toString();
+ else
+ return null;
+ }
+
+public String parseAndFillWithCurrentValues(HttpServletRequest request, String sql, FormField source_Formfield) {
+
+ if (getFormFieldList() != null) {
+ for (Iterator iter = getFormFieldList().getFormField().iterator(); iter.hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = getFormFieldDisplayName(fft);
+ String formfield_value = "";
+ List<String> selectedItems = new ArrayList<String>();
+ //Added so that Combo Box in old RAPTOR definition is translated to List box
+ if(fft.getFieldType().equals(FormField.FFT_COMBO_BOX)) {
+ fft.setFieldType(FormField.FFT_LIST_BOX);
+ }
+ if(!fft.getFieldType().equals(FormField.FFT_BLANK)) {
+ //if(source_Formfield==null || (source_Formfield!=null && !fft.getFieldId().equals(source_Formfield.getFieldName()))) {
+ // Add oracle safe
+ // Add param base sql
+ if(fft.getFieldType().equals(FormField.FFT_LIST_MULTI) || fft.getFieldType().equals(FormField.FFT_CHECK_BOX)) {
+ if(request.getParameterValues(fieldId)!=null && request.getParameterValues(fieldId).length > 0) {
+
+ selectedItems = Arrays.asList(request.getParameterValues(fieldId));
+ formfield_value = formatSelectedItems(selectedItems, fft.getFieldType());
+ } else {
+ formfield_value = "";
+ }
+ } else if(fft.getFieldType().equals(FormField.FFT_RADIO_BTN)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if (fft.getFieldType().equals(FormField.FFT_HIDDEN)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if((fft.getFieldType().equals(FormField.FFT_TEXT) || fft.getFieldType().equals(FormField.FFT_TEXTAREA)) &&
+ (!fft.getValidationType().equals(FormField.VT_DATE) && !fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)&&
+ !fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) && !fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) ) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if (fft.getValidationType().equals(FormField.VT_DATE) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
+ fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ /*if(formGrid.hasFellow(fieldId, true)) {
+ Datebox tb = (Datebox) formGrid.getFellowIfAny(fieldId, true);
+ try {
+ formfield_value = tb.getText();
+ } catch (WrongValueException ex) {
+ formfield_value = "";
+ }
+ if(AppUtils.nvl(formfield_value).length() > 0) {
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ if(formGrid.hasFellow(fieldId+"_Hr", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+ if(formGrid.hasFellow(fieldId+"_Min", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ if(formGrid.hasFellow(fieldId+"_Sec", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+ Label hiddenLbSec = (Label) formGrid.getFellowIfAny(fieldId+"_Sec", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue()+ ":" +hiddenLbSec.getValue();
+
+ }
+ }
+ }
+
+ } else {
+ formfield_value = "";
+ }*/
+ } else if ((fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
+ fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC))) {
+ /*if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)||
+ fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ if(formGrid.hasFellow(fieldId+"_Hr", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+ if(formGrid.hasFellow(fieldId+"_Min", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+
+ }
+ } else if(fft.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ if(formGrid.hasFellow(fieldId+"_Sec", true)) {
+ Label hiddenLbHr = (Label) formGrid.getFellowIfAny(fieldId+"_Hr", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue();
+ Label hiddenLbMin = (Label) formGrid.getFellowIfAny(fieldId+"_Min", true);
+ //formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue();
+ Label hiddenLbSec = (Label) formGrid.getFellowIfAny(fieldId+"_Sec", true);
+ formfield_value = formfield_value + " " + hiddenLbHr.getValue() + ":" +hiddenLbMin.getValue()+ ":" +hiddenLbSec.getValue();
+
+ }
+ }
+
+ } */
+ } else if (fft.getFieldType().equals(FormField.FFT_TEXT_W_POPUP)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ } else if (fft.getFieldType().equals(FormField.FFT_LIST_BOX)) {
+ if(request.getParameter(fieldId)!=null) {
+ formfield_value = request.getParameter(fieldId);
+ } else {
+ formfield_value = "";
+ }
+ //}
+ }
+ if(nvl(formfield_value).length()>0) {
+ sql = Utils.replaceInString(sql, fieldDisplay, formfield_value);
+ } else {
+ sql = Utils.replaceInString(sql, "'"+fieldDisplay+"'", "null");
+ sql = Utils.replaceInString(sql, fieldDisplay, "null");
+ //sql = Utils.replaceInString(sql, fieldDisplay, "''");
+ }
+ } // for
+ }
+ }
+ return sql;
+ }
+ public String parseAndFillReq_Session_UserValues(HttpServletRequest request, String sql, String user_id) {
+ HttpSession session = request.getSession();
+
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String[] scheduleSessionParameters = Globals.getSessionParamsForScheduling().split(",");
+
+
+ if(AppUtils.nvl(sql).length()>0) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff") && (request.getParameter(reqParameters[i].toUpperCase())!=null && request.getParameter(reqParameters[i].toUpperCase()).length() > 0))
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else if (request.getParameter(reqParameters[i])!=null && request.getParameter(reqParameters[i]).length() > 0)
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+
+ for (int i = 0; i < scheduleSessionParameters.length; i++) {
+ //debugLogger.debug(" Session " + " scheduleSessionParameters[i] " + scheduleSessionParameters[i].toUpperCase() + " " + request.getParameter(scheduleSessionParameters[i]));
+ if(request.getParameter(scheduleSessionParameters[i])!=null && request.getParameter(scheduleSessionParameters[i]).trim().length()>0 )
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", request.getParameter(scheduleSessionParameters[i]) );
+ if(request.getAttribute(scheduleSessionParameters[i])!=null && ((String)request.getAttribute(scheduleSessionParameters[i])).trim().length()>0 )
+ sql = Utils.replaceInString(sql, "[" + scheduleSessionParameters[i].toUpperCase()+"]", (String) request.getAttribute(scheduleSessionParameters[i]) );
+
+ }
+
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ //fieldSQL = Utils.replaceInString(fieldSQL, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i].toUpperCase()) );
+ //else {
+ if (session.getAttribute(sessionParameters[i])!=null && ((String)session.getAttribute(sessionParameters[i])).length() > 0) {
+ //debugLogger.debug(" Session " + " sessionParameters[i] " + sessionParameters[i] + " " + (String)session.getAttribute(sessionParameters[i]));
+ sql = Utils.replaceInString(sql, "[" + sessionParameters[i].toUpperCase()+"]", (String)session.getAttribute(sessionParameters[i]) );
+ }
+ // }
+ }
+ sql = Utils.replaceInString(sql, "[USERID]", user_id);
+ sql = Utils.replaceInString(sql, "[USER_ID]", user_id);
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", user_id);
+
+ }
+ return sql;
+ }
+
+} // ReportRuntime
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/TimeSeriesChartOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/TimeSeriesChartOptions.java
new file mode 100644
index 00000000..9e6f657f
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/TimeSeriesChartOptions.java
@@ -0,0 +1,62 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+public class TimeSeriesChartOptions {
+ private String lineChartRenderer;
+ private boolean multiSeries;
+ private boolean nonTimeAxis;
+ private boolean showXAxisLabel;
+ private boolean addXAxisTicker;
+
+ public String getLineChartRenderer() {
+ return lineChartRenderer;
+ }
+ public void setLineChartRenderer(String lineChartRenderer) {
+ this.lineChartRenderer = lineChartRenderer;
+ }
+ public boolean isMultiSeries() {
+ return multiSeries;
+ }
+ public void setMultiSeries(boolean multiSeries) {
+ this.multiSeries = multiSeries;
+ }
+ public boolean isNonTimeAxis() {
+ return nonTimeAxis;
+ }
+ public void setNonTimeAxis(boolean nonTimeAxis) {
+ this.nonTimeAxis = nonTimeAxis;
+ }
+ public boolean isShowXAxisLabel() {
+ return showXAxisLabel;
+ }
+ public void setShowXAxisLabel(boolean showXAxisLabel) {
+ this.showXAxisLabel = showXAxisLabel;
+ }
+ public boolean isAddXAxisTicker() {
+ return addXAxisTicker;
+ }
+ public void setAddXAxisTicker(boolean addXAxisTicker) {
+ this.addXAxisTicker = addXAxisTicker;
+ }
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.java
new file mode 100644
index 00000000..9587de53
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.java
@@ -0,0 +1,68 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.runtime;
+
+import java.util.HashMap;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class VisualManager extends RaptorObject {
+ private HashMap hiddenCols = new HashMap();
+
+ private String sortByColId = "";
+
+ private String sortByAscDesc = AppConstants.SO_ASC;
+
+ public VisualManager() {
+ super();
+ }
+
+ public void hideColumn(String colId) {
+ hiddenCols.put(colId, "Y");
+ } // hideColumn
+
+ public void showColumn(String colId) {
+ hiddenCols.put(colId, "N");
+ } // showColumn
+
+ public boolean isColumnVisible(String colId) {
+ return nvl((String) hiddenCols.get(colId), "N").equals("N");
+ } // isColumnVisible
+
+ public void setSortByColumn(String colId) {
+ if (sortByColId.equals(colId))
+ sortByAscDesc = sortByAscDesc.equals(AppConstants.SO_ASC) ? AppConstants.SO_DESC
+ : AppConstants.SO_ASC;
+ else {
+ sortByColId = colId;
+ sortByAscDesc = AppConstants.SO_ASC;
+ }
+ } // setSortByColumn
+
+ public String getSortByColId() {
+ return sortByColId;
+ }
+
+ public String getSortByAscDesc() {
+ return sortByAscDesc;
+ }
+
+} // VisualManager
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResult.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResult.java
new file mode 100644
index 00000000..ec7999e0
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResult.java
@@ -0,0 +1,84 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class ReportSearchResult extends SearchResult {
+ private static final String HTML_FORM = "forma";
+
+ public ReportSearchResult(int pageNo) {
+ this(pageNo, Globals.getDefaultPageSize(), -1, -1);
+ } // ReportSearchResult
+
+ public ReportSearchResult(int pageNo, int writeAccessColIndex, int ownerIndicatorColIndex) {
+ this(pageNo, Globals.getDefaultPageSize(), writeAccessColIndex, ownerIndicatorColIndex);
+ } // ReportSearchResult
+
+ public ReportSearchResult(int pageNo, int pageSize, int writeAccessColIndex,
+ int ownerIndicatorColIndex) {
+ super(pageNo, pageSize, writeAccessColIndex, ownerIndicatorColIndex);
+
+ addColumn(new SearchResultColumn("no","No", "5%", "Center"));
+ addColumn(new SearchResultColumn("rep_id","Report ID", "5%", "Center"));
+ addColumn(new SearchResultColumn("rep_name","Report Name", "25%", "Left"));
+ addColumn(new SearchResultColumn("descr","Description", "30%", "Left"));
+ addColumn(new SearchResultColumn("owner","Report Owner", "10%", "Center"));
+ addColumn(new SearchResultColumn("create_date","Create Date", "10%", "Center"));
+ addColumn(new SearchResultColumn("copy","&nbsp;&nbsp;Copy&nbsp;&nbsp;", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.copy';", "Copy report", HTML_FORM,
+ "Are you sure you want to create a copy of this report?", AppUtils
+ .getImgFolderURL()
+ + "modify_icon.gif", "13", "12", true, false, false));
+ /*addColumn(new SearchResultColumn("&nbsp;&nbsp;Schedule&nbsp;&nbsp;", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.schedule_only';", "Schedule report", HTML_FORM,
+ null, AppUtils
+ .getImgFolderURL()
+ + "calendar_icon.gif", "13", "12", true, false, false));
+ */
+
+ addColumn(new SearchResultColumn("edit","&nbsp;&nbsp;Edit&nbsp;&nbsp;", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.edit';", "Edit report", HTML_FORM, null, AppUtils
+ .getImgFolderURL()
+ + "pen_paper.gif", "12", "12", false, true, false));
+ addColumn(new SearchResultColumn("delete","Delete", "5%", "Center", "document." + HTML_FORM
+ + "." + AppConstants.RI_ACTION + ".value='report.delete';", "Delete report",
+ HTML_FORM, "Are you sure you want to delete this report?", AppUtils
+ .getImgFolderURL()
+ + "deleteicon.gif", "12", "12", false, false, true));
+ addColumn(new SearchResultColumn("schedule","Schedule", "5%", "Center", "document." + HTML_FORM
+ + "." + AppConstants.RI_ACTION + ".value='report.schedule.report.submit_wmenu';", "Schedule report",
+ HTML_FORM, null, AppUtils
+ .getImgFolderURL()
+ + "calendar_icon.gif", "20", "20", false, false, false, true));
+ addColumn(new SearchResultColumn("run","&nbsp;&nbsp;Run&nbsp;&nbsp;", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.run';", "Run report", HTML_FORM, null, AppUtils
+ .getImgFolderURL()
+ + "test_run.gif", "12", "12"));
+ } // ReportSearchResult
+
+} // ReportSearchResult
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResultJSON.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResultJSON.java
new file mode 100644
index 00000000..fda50d54
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/ReportSearchResultJSON.java
@@ -0,0 +1,251 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+class MetaReport {
+ private boolean pagination = true;
+ private int pageSize;
+ private int totalSize;
+ private int pageNo;
+ public boolean isPagination() {
+ return pagination;
+ }
+ public void setPagination(boolean pagination) {
+ this.pagination = pagination;
+ }
+ public int getPageSize() {
+ return pageSize;
+ }
+ public void setPageSize(int pageSize) {
+ this.pageSize = pageSize;
+ }
+ public int getTotalSize() {
+ return totalSize;
+ }
+ public void setTotalSize(int totalSize) {
+ this.totalSize = totalSize;
+ }
+ public int getPageNo() {
+ return pageNo;
+ }
+ public void setPageNo(int pageNo) {
+ this.pageNo = pageNo;
+ }
+
+
+}
+class SearchReport {
+ private MetaReport metaReport;
+ public MetaReport getMetaReport() {
+ return metaReport;
+ }
+ public void setMetaReport(MetaReport metaReport) {
+ this.metaReport = metaReport;
+ }
+ private ArrayList<ArrayList<SearchResultColumn>> columns = new ArrayList<ArrayList<SearchResultColumn>>();
+ private ArrayList<ArrayList<SearchResultRow>> rows = new ArrayList<ArrayList<SearchResultRow>>();
+ public ArrayList<ArrayList<SearchResultColumn>> getColumns() {
+ return columns;
+ }
+ public void setColumns(ArrayList<ArrayList<SearchResultColumn>> columns) {
+ this.columns = columns;
+ }
+ public ArrayList<ArrayList<SearchResultRow>> getRows() {
+ return rows;
+ }
+ public void setRows(ArrayList<ArrayList<SearchResultRow>> rows) {
+ this.rows = rows;
+ }
+
+}
+
+public class ReportSearchResultJSON extends SearchResultJSON {
+ private static final String HTML_FORM = "forma";
+ private String JSONString= "";
+ private SearchReport searchReport;
+ //private ArrayList<ArrayList<SearchResultColumn>> columns = new ArrayList<ArrayList<SearchResultColumn>>();
+ //private ArrayList<ArrayList<SearchResultRow>> rows = new ArrayList<ArrayList<SearchResultRow>>();
+
+
+ public ReportSearchResultJSON(int pageNo) {
+ this(pageNo, Globals.getDefaultPageSize(), -1, -1);
+ } // ReportSearchResult
+
+ public ReportSearchResultJSON(int pageNo, int writeAccessColIndex, int ownerIndicatorColIndex) {
+ this(pageNo, Globals.getDefaultPageSize(), writeAccessColIndex, ownerIndicatorColIndex);
+ } // ReportSearchResult
+
+ public ReportSearchResultJSON(int pageNo, int pageSize, int writeAccessColIndex,
+ int ownerIndicatorColIndex) {
+
+ searchReport = new SearchReport();
+ MetaReport metaReport = new MetaReport();
+ //if(searchReport.getMetaReport()!=null)
+ searchReport.setMetaReport(metaReport);
+ metaReport.setPageNo(pageNo);
+ metaReport.setPageSize(pageSize);
+ metaReport.setPagination(true);
+ addColumn(new SearchResultColumn("no", "No", "5%", "Center"));
+ addColumn(new SearchResultColumn("rep_id", "Report ID", "5%", "Center"));
+ addColumn(new SearchResultColumn("rep_name", "Report Name", "25%", "Left"));
+ addColumn(new SearchResultColumn("descr", "Description", "30%", "Left"));
+ addColumn(new SearchResultColumn("owner", "Report Owner", "10%", "Center"));
+ addColumn(new SearchResultColumn("create_date", "Create Date", "10%", "Center"));
+ addColumn(new SearchResultColumn("copy", "Copy", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.copy';", "Copy report", HTML_FORM,
+ "Are you sure you want to create a copy of this report?", AppUtils
+ .getImgFolderURL()
+ + "modify_icon.gif", "13", "12", true, false, false));
+ /*addColumn(new SearchResultColumn("&nbsp;&nbsp;Schedule&nbsp;&nbsp;", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.schedule_only';", "Schedule report", HTML_FORM,
+ null, AppUtils
+ .getImgFolderURL()
+ + "calendar_icon.gif", "13", "12", true, false, false));
+ */
+
+ addColumn(new SearchResultColumn("edit", "Edit", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.edit';", "Edit report", HTML_FORM, null, AppUtils
+ .getImgFolderURL()
+ + "pen_paper.gif", "12", "12", false, true, false));
+ addColumn(new SearchResultColumn("delete", "Delete", "5%", "Center", "document." + HTML_FORM
+ + "." + AppConstants.RI_ACTION + ".value='report.delete';", "Delete report",
+ HTML_FORM, "Are you sure you want to delete this report?", AppUtils
+ .getImgFolderURL()
+ + "deleteicon.gif", "12", "12", false, false, true));
+ addColumn(new SearchResultColumn("schedule", "Schedule", "5%", "Center", "document." + HTML_FORM
+ + "." + AppConstants.RI_ACTION + ".value='report.schedule.report.submit_wmenu';", "Schedule report",
+ HTML_FORM, null, AppUtils
+ .getImgFolderURL()
+ + "calendar_icon.gif", "20", "20", false, false, false, true));
+ addColumn(new SearchResultColumn("run", "Run", "5%", "Center",
+ "document." + HTML_FORM + "." + AppConstants.RI_ACTION
+ + ".value='report.run';", "Run report", HTML_FORM, null, AppUtils
+ .getImgFolderURL()
+ + "test_run.gif", "12", "12"));
+ searchReport.getColumns().add(searchResultColumns);
+ } // ReportSearchResult
+
+ public void parseData(DataSet ds, HttpServletRequest request, int pageNo, int pageSize, int writeAccessColIndex, int ownerIndicatorColIndex) throws RaptorException {
+ // Presumes single ID field in the first column of the DataSet and row
+ // number in the first SearchResultColumn
+
+ pageNo = AppUtils.getRequestNvlValue(request, "r_page").length()>0?Integer.parseInt(AppUtils.getRequestNvlValue(request, "r_page")):0;
+ String userID = AppUtils.getUserID(request);
+ int dataSize = ds.getRowCount();
+ //pageSize = 0;
+
+ if(searchReport.getMetaReport()!=null) {
+ searchReport.getMetaReport().setPageNo(pageNo);
+ //searchReport.getMetaReport().setPageSize(pageSize);
+ pageSize = searchReport.getMetaReport().getPageSize();
+ searchReport.getMetaReport().setTotalSize(dataSize);
+ }
+ int startRow = (pageNo >= 0) ? (pageNo * pageSize) : 0;
+ int endRow = (pageNo >= 0) ? Math.min(startRow + pageSize, ds.getRowCount()) : ds
+ .getRowCount();
+ for (int r = startRow; r < endRow; r++) {
+ SearchResultRow row = new SearchResultRow();
+ searchResultRows.add(row);
+
+ String idValue = ds.getString(r, 0);
+
+ boolean bCanEdit = true;
+ if (writeAccessColIndex >= 0) {
+ String isReadOnlyValue = nvl(ds.getString(r, writeAccessColIndex), "Y");
+ bCanEdit = AppUtils.isSuperUser(request) || AppUtils.isAdminUser(request)
+ || isReadOnlyValue.equals("N");
+ }
+
+ boolean bCanDelete = bCanEdit;
+ if (Globals.getDeleteOnlyByOwner() && ownerIndicatorColIndex >= 0) {
+ String isOwnedByUserRecord = nvl(ds.getString(r, ownerIndicatorColIndex), "N");
+ bCanDelete = AppUtils.isSuperUser(request) || isOwnedByUserRecord.equals("Y");
+ }
+
+ boolean bCanSchedule = ds.getString(r, getNumColumns()-3).equals("Y");
+
+ row.addColumnContent(new ColumnContent(getColumn(0).getColumnId(), new SearchResultField("" + (r + 1), idValue,
+ getColumn(0), true)));
+ boolean isAuthorized = true;
+ for (int c = 1; c < getNumColumns(); c++) {
+ SearchResultColumn column = getColumn(c);
+ isAuthorized = true;
+
+ if(column.isCopyLink())
+ isAuthorized = Globals.getCanCopyOnReadOnly()? true:bCanEdit;
+ else if (column.isDeleteLink())
+ isAuthorized = bCanDelete;
+ else if (column.isEditLink())
+ isAuthorized = bCanEdit;
+ else if (column.isScheduleLink())
+ isAuthorized = bCanSchedule;
+ row.addColumnContent(new ColumnContent(column.getColumnId(), new SearchResultField(
+ (column.getLinkURL() == null) ? ds.getString(r, c) : column
+ .getLinkTitle(), idValue, column, isAuthorized
+ )));
+ } // for
+ } // for
+ searchReport.getRows().add(searchResultRows);
+ ObjectMapper mapper = new ObjectMapper();
+ String jsonInString = "";
+ try {
+ jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(searchReport);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ System.out.println(jsonInString);
+ this.JSONString = jsonInString;
+ } // parseData
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ public String getJSONString() {
+ return JSONString;
+ }
+
+ public void setJSONString(String jSONString) {
+ JSONString = jSONString;
+ }
+
+
+} // ReportSearchResult
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResult.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResult.java
new file mode 100644
index 00000000..5ab75590
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResult.java
@@ -0,0 +1,213 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+
+public class SearchResult{
+ private int pageNo = -1;
+
+ private int pageSize = 50;
+
+ private int dataSize = -1;
+
+ private int writeAccessColIndex = -1;
+
+ private int ownerIndicatorColIndex = -1;
+
+ private String csvPageFileName = null;
+
+
+
+ private String csvAllRowsFileName = null;
+
+ private String excelAllRowsFileName = null;
+
+ public ArrayList searchResultColumns = new ArrayList();
+
+ public ArrayList searchResultRows = new ArrayList();
+
+ public SearchResult(int pageNo) {
+ this(pageNo, Globals.getDefaultPageSize());
+ } // SearchResult
+
+ public SearchResult(int pageNo, int pageSize) {
+ this(pageNo, pageSize, -1, -1);
+ } // SearchResult
+
+ public SearchResult(int pageNo, int pageSize, int writeAccessColIndex,
+ int ownerIndicatorColIndex) {
+ super();
+
+ this.pageNo = pageNo;
+ this.pageSize = pageSize;
+
+ this.writeAccessColIndex = writeAccessColIndex;
+ this.ownerIndicatorColIndex = ownerIndicatorColIndex;
+ } // SearchResult
+
+ public int getPageNo() {
+ return pageNo;
+ }
+
+ public int getPageSize() {
+ return pageSize;
+ }
+
+ public int getDataSize() {
+ return dataSize;
+ }
+
+ public String getCsvPageFileName() {
+ return csvPageFileName;
+ }
+
+ public String getCsvAllRowsFileName() {
+ return csvAllRowsFileName;
+ }
+
+ public String getExcelAllRowsFileName() {
+ return excelAllRowsFileName;
+ }
+
+ private void setDataSize(int dataSize) {
+ this.dataSize = dataSize;
+ }
+
+ public void setCsvPageFileName(String csvPageFileName) {
+ this.csvPageFileName = csvPageFileName;
+ }
+
+
+
+ public void setCsvAllRowsFileName(String csvAllRowsFileName) {
+ this.csvAllRowsFileName = csvAllRowsFileName;
+ }
+
+
+
+ public void addColumn(SearchResultColumn column) {
+ searchResultColumns.add(column);
+ } // addColumn
+
+ public SearchResultColumn getColumn(int index) {
+ return (SearchResultColumn) searchResultColumns.get(index);
+ } // getColumn
+
+ public int getNumColumns() {
+ return searchResultColumns.size();
+ } // getNumColumns
+
+ public int getNumRows() {
+ return searchResultRows.size();
+ } // getNumRows
+
+ public SearchResultRow getRow(int index) {
+ return (SearchResultRow) searchResultRows.get(index);
+ } // getRow
+
+ public void parseData(DataSet ds, HttpServletRequest request) throws RaptorException {
+ // Presumes single ID field in the first column of the DataSet and row
+ // number in the first SearchResultColumn
+ String userID = AppUtils.getUserID(request);
+ setDataSize(ds.getRowCount());
+
+ int startRow = (pageNo >= 0) ? (pageNo * pageSize) : 0;
+ int endRow = (pageNo >= 0) ? Math.min(startRow + pageSize, ds.getRowCount()) : ds
+ .getRowCount();
+ for (int r = startRow; r < endRow; r++) {
+ SearchResultRow row = new SearchResultRow();
+ searchResultRows.add(row);
+
+ String idValue = ds.getString(r, 0);
+
+ boolean bCanEdit = true;
+ if (writeAccessColIndex >= 0) {
+ String isReadOnlyValue = nvl(ds.getString(r, writeAccessColIndex), "Y");
+ bCanEdit = AppUtils.isSuperUser(request) || AppUtils.isAdminUser(request)
+ || isReadOnlyValue.equals("N");
+ }
+
+ boolean bCanDelete = bCanEdit;
+ if (Globals.getDeleteOnlyByOwner() && ownerIndicatorColIndex >= 0) {
+ String isOwnedByUserRecord = nvl(ds.getString(r, ownerIndicatorColIndex), "N");
+ bCanDelete = AppUtils.isSuperUser(request) || isOwnedByUserRecord.equals("Y");
+ }
+
+ boolean bCanSchedule = ds.getString(r, getNumColumns()-3).equals("Y");
+
+ row.addSearchResultField(new SearchResultField("" + (r + 1), idValue,
+ getColumn(0), true));
+ boolean isAuthorized = true;
+ for (int c = 1; c < getNumColumns(); c++) {
+ SearchResultColumn column = getColumn(c);
+ isAuthorized = true;
+
+ if(column.isCopyLink())
+ isAuthorized = Globals.getCanCopyOnReadOnly()? true:bCanEdit;
+ else if (column.isDeleteLink())
+ isAuthorized = bCanDelete;
+ else if (column.isEditLink())
+ isAuthorized = bCanEdit;
+ else if (column.isScheduleLink())
+ isAuthorized = bCanSchedule;
+
+ row.addSearchResultField(new SearchResultField(
+ (column.getLinkURL() == null) ? ds.getString(r, c) : column
+ .getLinkTitle(), idValue, column, isAuthorized
+ ));
+ } // for
+ } // for
+ } // parseData
+
+ public void truncateToPage(int pageNo) {
+ if (this.pageNo >= 0 || pageNo < 0)
+ return;
+
+ this.pageNo = pageNo;
+
+ int startRow = pageNo * pageSize;
+ int endRow = Math.min(startRow + pageSize, dataSize);
+
+ for (int r = getNumRows() - 1; r >= endRow; r--)
+ searchResultRows.remove(r);
+
+ for (int r = startRow - 1; r >= 0; r--)
+ searchResultRows.remove(r);
+ } // truncateToPage
+
+ /** *********************************************************************** */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+} // SearchResult
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultColumn.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultColumn.java
new file mode 100644
index 00000000..bca1f4cf
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultColumn.java
@@ -0,0 +1,254 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+public class SearchResultColumn extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String columnId = "";
+ private String columnTitle = "";
+
+ private String columnWidth = "";
+
+ private String alignment = "Left";
+
+ private String linkURL = null; // if not null => display link instead of
+ // text
+
+ private String linkTitle = null; // if img => hint, otherwise link
+ // display text
+
+ private String linkForm = null; // if not null => displays input submit
+ // instead of link
+
+ private String linkConfirmMsg = null; // if not null => display conf. box
+ // on link click
+
+ private String linkImg = null; // if not null => link shows image, not text
+
+ private String linkImgWidth = null; // optional
+
+ private String linkImgHeight = null; // optional
+
+ private boolean copyLink = false; // optional
+
+ private boolean editLink = false; // optional
+
+ private boolean deleteLink = false; // optional
+
+ private boolean scheduleLink = false; // optional
+
+ public SearchResultColumn(String columnId, String columnTitle) {
+ super();
+ setColumnId(columnId);
+ setColumnTitle(columnTitle);
+ } // SearchResultColumn
+
+ public SearchResultColumn(String columnId, String columnTitle, String columnWidth, String alignment) {
+ super();
+ setColumnId(columnId);
+ setColumnTitle(columnTitle);
+ setColumnWidth(columnWidth);
+ setAlignment(alignment);
+ } // SearchResultColumn
+
+ public SearchResultColumn(String columnId, String columnTitle, String columnWidth, String alignment,
+ String linkURL, String linkTitle, String linkForm, String linkConfirmMsg,
+ String linkImg) {
+ super();
+ setColumnId(columnId);
+ setColumnTitle(columnTitle);
+ setColumnWidth(columnWidth);
+ setAlignment(alignment);
+ setLinkURL(linkURL);
+ setLinkTitle(linkTitle);
+ setLinkForm(linkForm);
+ setLinkConfirmMsg(linkConfirmMsg);
+ setLinkImg(linkImg);
+ } // SearchResultColumn
+
+ public SearchResultColumn(String columnId, String columnTitle, String columnWidth, String alignment,
+ String linkURL, String linkTitle, String linkForm, String linkConfirmMsg,
+ String linkImg, String linkImgWidth, String linkImgHeight) {
+ this(columnId, columnTitle, columnWidth, alignment, linkURL, linkTitle, linkForm,
+ linkConfirmMsg, linkImg);
+
+ setLinkWidth(linkImgWidth);
+ setLinkHeight(linkImgHeight);
+ } // SearchResultColumn
+
+ public SearchResultColumn(String columnId, String columnTitle, String columnWidth, String alignment,
+ String linkURL, String linkTitle, String linkForm, String linkConfirmMsg,
+ String linkImg, String linkImgWidth, String linkImgHeight, boolean copyLink,
+ boolean editLink, boolean deleteLink) {
+ this(columnId, columnTitle, columnWidth, alignment, linkURL, linkTitle, linkForm,
+ linkConfirmMsg, linkImg, linkImgWidth, linkImgHeight);
+
+ setCopyLink(copyLink);
+ setEditLink(editLink);
+ setDeleteLink(deleteLink);
+ } // SearchResultColumn
+
+ public SearchResultColumn(String columnId, String columnTitle, String columnWidth, String alignment,
+ String linkURL, String linkTitle, String linkForm, String linkConfirmMsg,
+ String linkImg, String linkImgWidth, String linkImgHeight, boolean copyLink,
+ boolean editLink, boolean deleteLink, boolean scheduleLink) {
+ this(columnId, columnTitle, columnWidth, alignment, linkURL, linkTitle, linkForm,
+ linkConfirmMsg, linkImg, linkImgWidth, linkImgHeight);
+
+ setCopyLink(copyLink);
+ setEditLink(editLink);
+ setDeleteLink(deleteLink);
+ setScheduleLink(scheduleLink);
+ } // SearchResultColumn
+
+ public String getColumnTitle() {
+ return columnTitle;
+ }
+
+ public String getColumnWidth() {
+ return columnWidth;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ public String getLinkURL() {
+ return linkURL;
+ }
+
+ public String getLinkTitle() {
+ return linkTitle;
+ }
+
+ public String getLinkForm() {
+ return linkForm;
+ }
+
+ public String getLinkConfirmMsg() {
+ return linkConfirmMsg;
+ }
+
+ public String getLinkImg() {
+ return linkImg;
+ }
+
+ public String getLinkImgWidth() {
+ return linkImgWidth;
+ }
+
+ public String getLinkImgHeight() {
+ return linkImgHeight;
+ }
+
+ public boolean isCopyLink() {
+ return copyLink;
+ }
+
+ public boolean isEditLink() {
+ return editLink;
+ }
+
+ public boolean isDeleteLink() {
+ return deleteLink;
+ }
+
+ public void setColumnTitle(String columnTitle) {
+ this.columnTitle = nvl(columnTitle);
+ }
+
+ public void setColumnWidth(String columnWidth) {
+ this.columnWidth = nvl(columnWidth);
+ }
+
+ public void setAlignment(String alignment) {
+ this.alignment = alignment;
+ }
+
+ public void setLinkURL(String linkURL) {
+ this.linkURL = linkURL;
+ }
+
+ public void setLinkTitle(String linkTitle) {
+ this.linkTitle = linkTitle;
+ }
+
+ public void setLinkForm(String linkForm) {
+ this.linkForm = linkForm;
+ }
+
+ public void setLinkConfirmMsg(String linkConfirmMsg) {
+ this.linkConfirmMsg = linkConfirmMsg;
+ }
+
+ public void setLinkImg(String linkImg) {
+ this.linkImg = linkImg;
+ }
+
+ public void setLinkWidth(String linkImgWidth) {
+ this.linkImgWidth = linkImgWidth;
+ }
+
+ public void setLinkHeight(String linkImgHeight) {
+ this.linkImgHeight = linkImgHeight;
+ }
+
+ public void setCopyLink(boolean copyLink) {
+ this.copyLink = copyLink;
+ }
+
+ public void setEditLink(boolean editLink) {
+ this.editLink = editLink;
+ }
+
+ public void setDeleteLink(boolean deleteLink) {
+ this.deleteLink = deleteLink;
+ }
+
+ public String getColumnTitleHtml() {
+ return (columnTitle.length() == 0) ? "&nbsp;" : columnTitle;
+ }
+
+ public String getColumnWidthHtml() {
+ return (columnWidth.length() == 0) ? "" : (" width=" + columnWidth);
+ }
+
+ public String getLinkImgSizeHtml() {
+ return ((nvl(linkImgWidth).length() > 0) ? " width=\"" + linkImgWidth + "\"" : "")
+ + ((nvl(linkImgHeight).length() > 0) ? " height=\"" + linkImgHeight + "\""
+ : "");
+ }
+
+ public boolean isScheduleLink() {
+ return scheduleLink;
+ }
+
+ public void setScheduleLink(boolean scheduleLink) {
+ this.scheduleLink = scheduleLink;
+ }
+
+ public String getColumnId() {
+ return columnId;
+ }
+
+ public void setColumnId(String columnId) {
+ this.columnId = columnId;
+ }
+
+} // SearchResultColumn
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultField.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultField.java
new file mode 100644
index 00000000..a0621553
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultField.java
@@ -0,0 +1,212 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class SearchResultField extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String columnId;
+ private String displayValue = "";
+
+ private String alignment = "Left";
+
+ private String drillDownLink = null;
+
+ private String drillDownImage = null;
+
+ private String confirmationText = null;
+
+
+
+ public String getConfirmationText() {
+ return confirmationText;
+ }
+
+ public void setConfirmationText(String confirmationText) {
+ this.confirmationText = confirmationText;
+ }
+
+ public String getDrillDownImage() {
+ return drillDownImage;
+ }
+
+ public void setDrillDownImage(String drillDownImage) {
+ this.drillDownImage = drillDownImage;
+ }
+
+ public SearchResultField() {
+ }
+
+ public SearchResultField(String displayValue, String linkIdValue,
+ SearchResultColumn column, boolean isAuthorized) {
+ super();
+
+ if (!isAuthorized)
+ return;
+
+ setColumnId(column.getColumnId());
+ setDisplayValue(displayValue);
+ setAlignment(column.getAlignment());
+ if(column.getColumnId().equals("edit")) {
+ setDrillDownLink("report_wizard.htm?action=report.edit&c_master="+linkIdValue);
+ setDrillDownImage(column.getLinkImg());
+ setConfirmationText(null);
+ } else if(column.getColumnId().equals("copy")) {
+ setDrillDownLink("report_wizard.htm?action=report.copy&c_master="+linkIdValue);
+ setDrillDownImage(column.getLinkImg());
+ setConfirmationText(column.getLinkConfirmMsg());
+ } else if(column.getColumnId().equals("delete")) {
+ setDrillDownLink("raptor.htm?action=report.delete&c_master="+linkIdValue);
+ setDrillDownImage(column.getLinkImg());
+ setConfirmationText(column.getLinkConfirmMsg());
+ } else if(column.getColumnId().equals("schedule")) {
+ setDrillDownLink("report_wizard.htm?action=report.schedule.report.submit_wmenu&c_master="+linkIdValue+"&refresh=Y");
+ setDrillDownImage(column.getLinkImg());
+ setConfirmationText(null);
+ } else if(column.getColumnId().equals("run")) {
+ setDrillDownLink("raptor.htm?action=report.run.container&c_master="+linkIdValue+"&refresh=Y");
+ setDrillDownImage(column.getLinkImg());
+ setConfirmationText(null);
+ } else {
+ if (column.getLinkURL() != null) {
+ StringBuffer sb = new StringBuffer();
+
+ if (column.getLinkForm() == null) {
+ sb.append("<a href=\"");
+ sb.append(column.getLinkURL());
+ sb.append(nvl(linkIdValue));
+ if (column.getLinkConfirmMsg() != null) {
+ sb.append(" onClick=\"return confirm('");
+ sb.append(column.getLinkConfirmMsg());
+ sb.append("');\"");
+ }
+ sb.append("\">");
+ if (column.getLinkImg() != null) {
+ sb.append("<img src=\"");
+ sb.append(column.getLinkImg());
+ sb.append("\"");
+ sb.append(column.getLinkImgSizeHtml());
+ sb.append(" border=\"0\"");
+ sb.append(column.getLinkTitle() != null ? " alt=\""
+ + column.getLinkTitle()/*
+ * +(column.isDeleteLink()?"
+ * "+linkIdValue:"")
+ */
+ + "\"" : "");
+ sb.append(">");
+ } else
+ sb.append(column.getLinkTitle());
+ sb.append("</a>");
+ } else {
+ sb.append("<input type=\"");
+ if (column.getLinkImg() != null) {
+ sb.append("image\" src=\"");
+ sb.append(column.getLinkImg());
+ sb.append("\"");
+ sb.append(column.getLinkImgSizeHtml());
+ sb.append(" border=\"0\"");
+ sb.append(column.getLinkTitle() != null ? " alt=\""
+ + column.getLinkTitle()/*
+ * +(column.isDeleteLink()?"
+ * "+linkIdValue:"")
+ */
+ + "\"" : "");
+ } else {
+ sb.append("submit\" value=\"");
+ sb.append(column.getLinkTitle());
+ sb.append("\"");
+ }
+ sb.append(" onClick=\"");
+ if (column.getLinkConfirmMsg() != null) {
+ sb.append("if(! confirm('");
+ sb.append(column.getLinkConfirmMsg());
+ sb.append("')) return false; ");
+ }
+ sb.append(column.getLinkURL());
+ sb.append(" document.");
+ sb.append(column.getLinkForm());
+ sb.append(".");
+ sb.append(AppConstants.RI_REPORT_ID);
+ sb.append(".value='");
+ sb.append(nvl(linkIdValue));
+ sb.append("';");
+ sb.append(" document.");
+ sb.append(column.getLinkForm());
+ sb.append(".");
+ sb.append("refresh");
+ sb.append(".value='");
+ sb.append("Y");
+ sb.append("';\">");
+ } // else
+
+ setDrillDownLink(sb.toString());
+ } // if
+ }
+ } // SearchResultField
+
+ public String getDisplayValue() {
+ return displayValue;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ public String getDrillDownLink() {
+ return drillDownLink;
+ }
+
+ public void setDisplayValue(String displayValue) {
+ this.displayValue = nvl(displayValue);
+ }
+
+ public void setAlignment(String alignment) {
+ this.alignment = alignment;
+ }
+
+ public void setDrillDownLink(String drillDownLink) {
+ this.drillDownLink = drillDownLink;
+ }
+
+ public String getTooltipValue() {
+ return (displayValue.length() == 0) ? "&nbsp;" : displayValue;
+ }
+
+ /*public String getAlignmentHtml() {
+ return (alignment.length() == 0) ? "" : (" align=" + alignment);
+ }*/
+
+ /*public String getDisplayValueLinkHtml() {
+ if (nvl(drillDownLink).length() == 0)
+ return getDisplayValueHtml();
+ else
+ return getDrillDownLink();
+ } // getDisplayValueLinkHtml*/
+
+ public String getColumnId() {
+ return columnId;
+ }
+
+ public void setColumnId(String columnId) {
+ this.columnId = columnId;
+ }
+
+
+} // SearchResultField
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultJSON.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultJSON.java
new file mode 100644
index 00000000..00e18f12
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultJSON.java
@@ -0,0 +1,80 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+import java.util.ArrayList;
+
+public class SearchResultJSON{
+
+ public ArrayList<SearchResultColumn> searchResultColumns = new ArrayList<SearchResultColumn>();
+
+ public ArrayList<SearchResultRow> searchResultRows = new ArrayList<SearchResultRow>();
+
+
+
+
+
+
+ public ArrayList<SearchResultColumn> getSearchResultColumns() {
+ return searchResultColumns;
+ }
+
+ public void setSearchResultColumns(ArrayList<SearchResultColumn> searchResultColumns) {
+ this.searchResultColumns = searchResultColumns;
+ }
+
+ public ArrayList<SearchResultRow> getSearchResultRows() {
+ return searchResultRows;
+ }
+
+ public void setSearchResultRows(ArrayList<SearchResultRow> searchResultRows) {
+ this.searchResultRows = searchResultRows;
+ }
+
+ public void addColumn(SearchResultColumn column) {
+ searchResultColumns.add(column);
+ } // addColumn
+
+ public SearchResultColumn getColumn(int index) {
+ return (SearchResultColumn) searchResultColumns.get(index);
+ } // getColumn
+
+ public int getNumColumns() {
+ return searchResultColumns.size();
+ } // getNumColumns
+
+ public int getNumRows() {
+ return searchResultRows.size();
+ } // getNumRows
+
+ public SearchResultRow getRow(int index) {
+ return (SearchResultRow) searchResultRows.get(index);
+ } // getRow
+
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+} // SearchResultJSON
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultRow.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultRow.java
new file mode 100644
index 00000000..21fb0254
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/search/SearchResultRow.java
@@ -0,0 +1,92 @@
+/*-
+ * ================================================================================
+ * eCOMP Portal SDK
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ================================================================================
+ */
+package org.openecomp.portalsdk.analytics.model.search;
+
+import java.util.ArrayList;
+
+class ColumnContent {
+ String columnId;
+ SearchResultField searchresultField;
+
+ public ColumnContent(String columnId, SearchResultField searchresultField) {
+ this.columnId = columnId;
+ this.searchresultField = searchresultField;
+ }
+ public String getColumnId() {
+ return columnId;
+ }
+ public void setColumnId(String columnId) {
+ this.columnId = columnId;
+ }
+ public SearchResultField getSearchresultField() {
+ return searchresultField;
+ }
+ public void setSearchresultField(SearchResultField searchresultField) {
+ this.searchresultField = searchresultField;
+ }
+
+
+
+}
+public class SearchResultRow extends ArrayList {
+
+
+ //private SearchResultField searchresultField;
+ private int nextElemIdx = 0;
+
+ public void resetNext() {
+ resetNext(0);
+ } // resetNext
+
+ public void resetNext(int toPos) {
+ nextElemIdx = toPos;
+ } // resetNext
+
+ public boolean hasNext() {
+ return (nextElemIdx < size());
+ } // hasNext
+
+ public SearchResultField getNext() {
+ return hasNext() ? getSearchResultField(nextElemIdx++) : null;
+ } // getNext
+
+ public SearchResultField getSearchResultField(int idx) {
+ return (SearchResultField) get(idx);
+ } // getRowHeader
+
+ public void addSearchResultField(SearchResultField searchResultField) {
+ add(searchResultField);
+ } // addSearchResultField
+
+ public void addSearchResultField(int idx, SearchResultField searchResultField) {
+ add(idx, searchResultField);
+ } // addSearchResultField
+
+ public void addColumnContent(ColumnContent cc ) {
+
+ add(cc);
+ } // addSearchResultField
+
+ public void addColumnContent(int idx, ColumnContent cc) {
+ add(idx, cc);
+ } // addSearchResultField
+
+
+} // SearchResultRow