summaryrefslogtreecommitdiffstats
path: root/ecomp-sdk/sdk-analytics/src
diff options
context:
space:
mode:
authortalasila <talasila@research.att.com>2017-02-07 11:47:55 -0500
committertalasila <talasila@research.att.com>2017-02-07 12:51:32 -0500
commit1faf201e8608dfa4d7af3460fd3d1fc7ebec398b (patch)
tree2208f76271cc6b1a81dbfb9143cd7118b071a909 /ecomp-sdk/sdk-analytics/src
parentca23569858b8cc9f60010e193b7041feb2d3227b (diff)
Initial OpenECOMP Portal SDK commit
Change-Id: I66a3491600a4b9ea241128dc29267eed6a78ed76 Signed-off-by: talasila <talasila@research.att.com>
Diffstat (limited to 'ecomp-sdk/sdk-analytics/src')
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/AntBuild.java89
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/RaptorObject.java44
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/config/ConfigLoader.java196
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Action.java89
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionHandler.java2417
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionMapping.java34
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Controller.java124
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ErrorHandler.java112
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardProcessor.java2354
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequence.java189
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceCrossTab.java43
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceDashboard.java38
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceLinear.java45
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedCrossTab.java42
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedHive.java44
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinear.java45
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinearDatamining.java44
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorException.java35
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorRuntimeException.java36
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorSchedularException.java36
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ReportSQLException.java51
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserAccessException.java34
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserDefinedException.java35
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ValidationException.java42
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/Line.java86
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineCollection.java158
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineInfo.java190
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/ColorProperties.java119
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GMapProperties.java46
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GeoCoordinate.java25
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/MapConstant.java44
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/NovaMap.java504
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/layer/SwingLayer.java234
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/Node.java178
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeCollection.java188
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeInfo.java210
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/MapUtils.java62
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/SwingWorker.java155
-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
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SchedulerUtil.java369
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendEmail.java415
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendNotifications.java460
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/AppUtils.java333
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ConnectionUtils.java69
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/DbUtils.java1298
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ExecuteQuery.java60
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/Globals.java2282
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IAppUtils.java175
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IDbUtils.java35
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RDbUtils.java36
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RemDbUtils.java200
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AntBuild.java66
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AppUtils.java363
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/DbUtils.java75
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/RemoteDbUtils.java50
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/AdapterSessionFactoryContainer.java39
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/DateUtils.java287
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/FusionAdapter.java135
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/IdName.java59
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Item.java55
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Lookup.java85
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/RaptorAdapter.java368
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/SpringContext.java37
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/controller/FileServletController.java206
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/CR_Report.java306
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/QuickLink.java61
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/RaptorSearch.java188
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/ReportInfo.java159
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorService.java36
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorServiceImpl.java163
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorController.java191
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorControllerAsync.java410
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/ReportsSearchListController.java74
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/AppConstants.java658
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/DataSet.java177
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/ExcelColorDef.java68
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/HtmlStripper.java155
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Log.java40
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/RemDbInfo.java93
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/SQLCorrector.java343
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Scheduler.java91
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Utils.java378
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/XSSFilter.java90
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/upgrade/SystemUpgrade.java125
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeader.java239
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeaderRow.java100
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnVisual.java74
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabColumnValues.java75
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabOrderManager.java98
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabTotalValue.java56
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataRow.java169
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataValue.java359
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/HtmlFormatter.java205
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportColumnHeaderRows.java71
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportData.java812
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportDataRows.java72
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportRowHeaderCols.java71
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeader.java119
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeaderCol.java156
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartAdditionalOptions.java1178
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillFormfield.java86
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillOptions.java207
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterList.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterType.java298
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/CustomReportType.java2011
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorList.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorReport.java172
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReports.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReportsNew.java148
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnList.java96
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnType.java1455
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceList.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceType.java281
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataminingOptions.java167
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldList.java121
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldType.java610
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatList.java96
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatType.java366
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptItemType.java144
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptList.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Marker.java167
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ObjectFactory.java305
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PDFAdditionalOptions.java340
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PredefinedValueList.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ReportMap.java445
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Reports.java113
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreList.java94
-rw-r--r--ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreType.java227
185 files changed, 70448 insertions, 0 deletions
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/AntBuild.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/AntBuild.java
new file mode 100644
index 00000000..eeb2b605
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/AntBuild.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;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.Manifest;
+
+/**
+ * This class is used to get version and Build information when
+ * user run "java -jar raptor_classes.jar" command.
+ */
+public class AntBuild {
+
+ public static String buildNum = "";
+
+ public static void main(String[] args) {
+ System.out.println("Jar (raptor_classes.jar) Information: ");
+ readManifest();
+ }
+
+ public static void readManifest() {
+ try {
+ Class clazz = AntBuild.class;
+ String classContainer = clazz.getProtectionDomain().getCodeSource().getLocation().toString();
+ URL manifestUrl = new URL("jar:" + classContainer + "!/META-INF/MANIFEST.MF");
+ Manifest manifest = new Manifest(manifestUrl.openStream());
+
+ //JarFile jar = new JarFile("../lib/raptor_classes.jar");
+ //Manifest manifest = jar.getManifest();
+
+ Attributes attribs = manifest.getMainAttributes();
+ Iterator it = attribs.entrySet().iterator();
+ while(it.hasNext()) {
+ Map.Entry entry = (Map.Entry) it.next();
+ Attributes.Name attributeName = (Attributes.Name) entry.getKey();
+ String attributeValue = (String) entry.getValue();
+ if (attributeName.toString().equals("Created-By"))
+ System.out.println("Java HotSpot(TM) Client VM " + " : " + attributeValue);
+ else if (attributeName.toString().equals("Java-Version"))
+ System.out.println("Java Version " + " : " + attributeValue);
+ else if (attributeName.toString().equals("Java-Runtime-Version"))
+ System.out.println("Java Runtime Version " + " : " + attributeValue);
+ else if (attributeName.toString().equals("Ant-Version"))
+ System.out.println(attributeName.toString() + " : " + attributeValue);
+ else {
+ if(attributeName.toString().startsWith("Raptor")) {
+ if (attributeName.toString().startsWith("Raptor-Build-Version"))
+ buildNum = attributeValue;
+ System.out.println(attributeName.toString() + " : " + attributeValue);
+ }
+ }
+ }
+
+ } catch (IOException e) {
+ System.err.println("Cannot read jar-file manifest: "
+ + e.getMessage());
+ }
+ }
+
+ public static String getBuildNum() {
+ if (buildNum.length()>0)
+ return buildNum;
+ else {
+ readManifest();
+ return buildNum;
+ }
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/RaptorObject.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/RaptorObject.java
new file mode 100644
index 00000000..9a45c19c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/RaptorObject.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;
+
+public class RaptorObject extends java.lang.Object {
+
+ protected String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ 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");
+ }
+
+} // RaptorObject
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/config/ConfigLoader.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/config/ConfigLoader.java
new file mode 100644
index 00000000..826d7a29
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/config/ConfigLoader.java
@@ -0,0 +1,196 @@
+/*-
+ * ================================================================================
+ * 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.config;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.StringReader;
+import java.util.Properties;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.analytics.controller.Action;
+import org.openecomp.portalsdk.analytics.controller.ActionMapping;
+import org.openecomp.portalsdk.analytics.util.Log;
+
+public class ConfigLoader {
+ // public static final String RAPTOR_ACTION_MAP =
+ // "raptor_action_map.properties";
+
+ private static final String P_FILE_EXTENSION = ".properties";
+
+ public static final String RAPTOR_PROPERTIES = "raptor";
+
+ public static final String SQL_PROPERTIES = "sql";
+
+ public static final String APP_PROPERTIES = "raptor_app";
+
+ public static final String DB_PROPERTIES = "raptor_db";
+
+ private static String configFilesPath = "/WEB-INF/conf/";
+
+ public static final String RAPTOR_PDF_PROPERTIES = "raptor_pdf";
+
+ // private static String internalFilesPath =
+ // are not supposed to be modified by the user; may be unavailable in some
+ // cases - so defaults are expected
+
+ private static String raptorActionMapString =
+ "report.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_run.jsp \n"
+ + "mobile.report.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |mobile_report_run.jsp \n"
+ + "report.dashrep1.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportDashRep1 |report_run_dashrep1.jsp \n"
+ + "report.dashrep2.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportDashRep2 |report_run_dashrep2.jsp \n"
+ + "report.dashrep3.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportDashRep3 |report_run_dashrep3.jsp \n"
+ + "report.dashrep4.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportDashRep4 |report_run_dashrep4.jsp \n"
+ + "report.download |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_xls.jsp \n"
+ + "report.download.excel2007 |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_xlsx.jsp \n"
+ + "report.download.page |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_page_xls.jsp \n"
+ + "report.csv.download |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_csv.jsp \n"
+ + "report.text.download |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_txt.jsp \n"
+ + "report.search |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportSearch |report_search.jsp \n"
+ + "report.search.execute |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportSearchExecute |report_search \n"
+ + "report.search.user |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportSearchUser |report_search.jsp \n"
+ + "report.search.public |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportSearchPublic |report_search.jsp \n"
+ + "report.search.favorite |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportSearchFavorites |report_search.jsp \n"
+ + "report.wizard |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportWizard |report_wizard \n"
+ + "report.create |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportCreate |report_wizard \n"
+ + "report.import |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_import \n"
+ + "report.import.save |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportImportSave |report_wizard \n"
+ + "report.copy |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportCopy |report_wizard \n"
+ + "report.copy.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportCopy |raptor_wizard_container.jsp \n"
+ + "report.edit |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportEdit |report_wizard \n"
+ + "report.delete |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportDelete |report_search \n"
+ + "report.popup.field |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportFormFieldPopup |popup_field.jsp \n"
+ + "report.popup.map |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportValuesMapDefPopup |popup_map.jsp \n"
+ + "report.popup.drilldown.table |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |popup_drill_down_table.jsp \n"
+ + "report.popup.drilldown.report|org.openecomp.portalsdk.analytics.controller.ActionHandler|reportDrillDownToReportDefPopup|popup_drill_down_report \n"
+ + "report.popup.import.semaphore|org.openecomp.portalsdk.analytics.controller.ActionHandler|importSemaphorePopup |popup_import_semaphore \n"
+ + "report.popup.semaphore |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |popup_semaphore \n"
+ + "report.popup.semaphore.save |org.openecomp.portalsdk.analytics.controller.ActionHandler|saveSemaphorePopup |popup_semaphore \n"
+ + "report.popup.filter.col |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |popup_filter_col.jsp \n"
+ + "report.popup.filter.data |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportFilterDataPopup |popup_filter_data.jsp \n"
+ + "report.popup.sql |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportShowSQLPopup |popup_sql \n "
+ + "report.run.popup |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_run_popup.jsp \n"
+ + "report.popup.test.cond |org.openecomp.portalsdk.analytics.controller.ActionHandler|testSchedCondPopup |popup_sql \n"
+ + "report.popup.testrun.sql |org.openecomp.portalsdk.analytics.controller.ActionHandler|testRunSQLPopup |popup_testrun_sql \n"
+ + "report.test.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |test_run_sql \n"
+ + "report.field.testrun.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |test_field_run_sql \n"
+ + "report.field.default.testrun.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |default_field_run_sql \n"
+ + "report.field.date.start.testrun.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |date_start_field_run_sql \n"
+ + "report.field.date.end.testrun.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |date_end_field_run_sql \n"
+ + "report.popup.table.cols |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |popup_table_cols \n"
+ + "refresh.cache |org.openecomp.portalsdk.analytics.controller.ActionHandler|refreshCache |message.jsp \n"
+ + "report.message |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |message.jsp \n"
+ + "report.download.pdf |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_pdf.jsp \n"
+ + "report.popup.pdfconfig |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |popup_pdf_config.jsp \n"
+ + "download.all |org.openecomp.portalsdk.analytics.controller.ActionHandler|downloadAll |close.jsp \n"
+ + "download.all.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |popup_download_flat_file.jsp \n"
+ + "download.data.file |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |download_data_file.jsp \n"
+ + "popup.calendar |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |gtm_calendar.jsp \n"
+ + "report.folderlist |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |folder_report_list.jsp \n"
+ + "report.folderlist_iframe |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |folder_report_list_iframe.jsp \n"
+ + "report.childDropDown |org.openecomp.portalsdk.analytics.controller.ActionHandler|getChildDropDown |raptor_childdropdown.jsp \n"
+ + "report.create.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_create_container.jsp \n"
+ + "report.search.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_search_container.jsp \n"
+ + "report.search.execute.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_search_execute_container.jsp \n"
+ + "report.search.user.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_search_user_container.jsp \n"
+ + "report.search.public.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_search_public_container.jsp \n"
+ + "report.search.favorite.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_search_favorite_container.jsp \n"
+ + "report.run.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_run_container.jsp \n"
+ + "report.formfields.run.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|formFieldRun |report_run_container.jsp \n"
+ + "report.run.jsp |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_run.jsp \n"
+ + "report.schedule.multiple |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |wizard_schedule_multiple.jsp \n"
+ + "report.schedule.submit |org.openecomp.portalsdk.analytics.controller.ActionHandler|processSchedule |wizard_schedule_only.jsp \n"
+ + "report.schedule.report.submit |org.openecomp.portalsdk.analytics.controller.ActionHandler|processScheduleReportList |wizard_schedule_only.jsp \n"
+ + "report.schedule.report.submit_wmenu |org.openecomp.portalsdk.analytics.controller.ActionHandler|processScheduleReportList |wizard_schedule_only_from_search.jsp \n"
+ + "report.schedule_only |org.openecomp.portalsdk.analytics.controller.ActionHandler|processSchedule |wizard_schedule_only \n"
+ + "report.schedule_only_from_search |org.openecomp.portalsdk.analytics.controller.ActionHandler|processSchedule |wizard_schedule_only_from_search.jsp \n"
+ + "report.schedule_delete |org.openecomp.portalsdk.analytics.controller.ActionHandler|processScheduleDelete |report_run_container.jsp \n"
+ + "report.schedule.submit_from_search |org.openecomp.portalsdk.analytics.controller.ActionHandler|processSchedule |wizard_schedule_only_from_search.jsp \n"
+ + "report.dashboard.detail |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |dashboard_report_run_detail.jsp \n"
+ + "report.csv.download.direct |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_csv.jsp \n"
+ + "report.csv.download.direct |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportRun |report_download_csv.jsp \n"
+ + "report.download.csv.session |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_download_csv \n"
+ + "report.download.excel2007.session |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_download_xlsx.jsp \n"
+ + "report.download.excel.session |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_download_xls.jsp \n"
+ + "report.download.pdf.session |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_download_pdf.jsp \n"
+ + "report.download.page.session |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_download_page_xls.jsp \n"
+ + "report.data.remove.session |org.openecomp.portalsdk.analytics.controller.ActionHandler|removeReportDataFromSession |report_run_container.jsp \n"
+ + "report.dashboard.run.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_dashboard_run_container.jsp \n"
+ + "chart.force.cluster |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |force_cluster.jsp \n"
+ + "chart.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportChartRun |report_run_container.jsp \n"
+ + "chart.json |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportChartRun |report_run_container.jsp \n"
+ + "chart.data.json |org.openecomp.portalsdk.analytics.controller.ActionHandler|reportChartDataRun |report_run_container.jsp \n"
+ + "quicklinks.json |org.openecomp.portalsdk.analytics.controller.ActionHandler|getQuickLinksJSON |report_run_container.jsp \n"
+ + "embed.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_embed_run_container.zul \n"
+ + "schedule.edit |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |wizard_adhoc_schedule.zul \n"
+ + "chart.annotations.run |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |plugin_chart_annotation.jsp \n"
+ + "chart.annotations.exec |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |chart_annotations.jsp \n"
+ + "chart.mini |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |chart_minified.jsp \n"
+ + "report.olap.run.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_olap_run_container.jsp \n"
+ + "report.hive.run.container |org.openecomp.portalsdk.analytics.controller.ActionHandler|gotoJsp |report_hive_run_container.jsp \n"
+
+ ;
+
+ private ConfigLoader() {
+ }
+
+ public static void setConfigFilesPath(String path) {
+ configFilesPath = path;
+ } // setConfigFilesPath
+
+ public static Properties getProperties(ServletContext servletContext, String propertiesFile)
+ throws IOException {
+ return getProperties(servletContext, propertiesFile, null);
+ } // getProperties
+
+ public static Properties getProperties(ServletContext servletContext,
+ String propertiesFile, String systemTypeExtension) throws IOException {
+ Properties p = new Properties();
+ p.load(servletContext.getResourceAsStream(configFilesPath + propertiesFile
+ + ((systemTypeExtension == null) ? "" : "_" + systemTypeExtension)
+ + P_FILE_EXTENSION));
+ return p;
+ } // getProperties
+
+ public static ActionMapping loadRaptorActionMapping(ServletContext servletContext)
+ throws IOException {
+ ActionMapping actionMapping = new ActionMapping();
+
+ String pLine = null;
+ // BufferedReader pFile = new BufferedReader(new
+ // InputStreamReader(servletContext.getResourceAsStream(internalFilesPath+RAPTOR_ACTION_MAP)));
+ BufferedReader pFile = new BufferedReader(new StringReader(raptorActionMapString));
+ while ((pLine = pFile.readLine()) != null)
+ if (pLine.trim().length() > 0)
+ try {
+ actionMapping.addAction(Action.parse(pLine));
+ } catch (Exception e) {
+ Log
+ .write("[ConfigLoader.loadRaptorActionMapping] Error - unable to parse action ["
+ + pLine + "]");
+ }
+ pFile.close();
+
+ return actionMapping;
+ } // loadRaptorActionMapping
+
+} // ConfigLoader
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Action.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Action.java
new file mode 100644
index 00000000..3d14dcbf
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Action.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.controller;
+
+import java.util.StringTokenizer;
+
+public class Action extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String action = null;
+
+ private String controllerClass = null;
+
+ private String controllerMethod = null;
+
+ private String jspName = null;
+
+ private Action() {
+ }
+
+ public Action(String action, String controllerClass, String controllerMethod,
+ String jspName) {
+ setAction(action);
+ setControllerClass(controllerClass);
+ setControllerMethod(controllerMethod);
+ setJspName(jspName);
+ } // Action
+
+ public static Action parse(String configFileEntry) {
+ Action a = new Action();
+
+ StringTokenizer st = new StringTokenizer(configFileEntry, "| \t", false);
+ // if(st.hasMoreTokens())
+ a.setAction(st.nextToken());
+ a.setControllerClass(st.nextToken());
+ a.setControllerMethod(st.nextToken());
+ a.setJspName(st.nextToken());
+
+ return a;
+ } // parse
+
+ public String getAction() {
+ return action;
+ }
+
+ public String getControllerClass() {
+ return controllerClass;
+ }
+
+ public String getControllerMethod() {
+ return controllerMethod;
+ }
+
+ public String getJspName() {
+ return jspName;
+ }
+
+ private void setAction(String action) {
+ this.action = action;
+ }
+
+ private void setControllerClass(String controllerClass) {
+ this.controllerClass = controllerClass;
+ }
+
+ private void setControllerMethod(String controllerMethod) {
+ this.controllerMethod = controllerMethod;
+ }
+
+ private void setJspName(String jspName) {
+ this.jspName = jspName;
+ }
+
+} // Action
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionHandler.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionHandler.java
new file mode 100644
index 00000000..e0cd8d2f
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionHandler.java
@@ -0,0 +1,2417 @@
+/*-
+ * ================================================================================
+ * 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
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * ActionHandler.java - This class is used to call actions related to reports.
+ * -------------------------------------------------------------------------------------------
+ *
+ *
+ *
+ * Changes
+ * -------
+ * 31-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> reportFormFieldPopup iterates form field collections. </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>
+ * 13-Aug-2009 : Version 8.5 (Sundar);<UL><LI> reportFormFieldPopup is changed to have effect on textfield with popup. </LI></UL>
+ * 06-Aug-2009 : Version 9.0 (Sundar);<UL><LI> reportFormFieldPopupB is changed. </LI></UL>
+ * 29-Jul-2009 : Version 8.4 (Sundar);<UL><LI> Previously report data for dashboard stored only page level data. This has been changed to show all the data up to the maximum specified. </LI></UL>
+ * 27-Jul-2009 : Version 8.4 (Sundar);<UL><LI>Bug due to not showing back button after child report in drilldown is navigated more than
+ * one page is resolved. </LI></UL>
+ * 14-Jul-2009 : Version 8.4 (Sundar); <UL><LI>Dashboard reports can now be generated excel as separate sheets or group together in PDF.
+ * They can also be scheduled.</LI></UL>
+ *
+ */
+package org.openecomp.portalsdk.analytics.controller;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.io.Writer;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.SQLException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+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.TreeMap;
+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.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.error.RaptorSchedularException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.error.UserDefinedException;
+import org.openecomp.portalsdk.analytics.error.ValidationException;
+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.SearchHandler;
+import org.openecomp.portalsdk.analytics.model.base.IdNameColLookup;
+import org.openecomp.portalsdk.analytics.model.base.IdNameList;
+import org.openecomp.portalsdk.analytics.model.base.IdNameSql;
+import org.openecomp.portalsdk.analytics.model.base.ReportSecurity;
+import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.model.definition.ReportSchedule;
+import org.openecomp.portalsdk.analytics.model.runtime.ChartWebRuntime;
+import org.openecomp.portalsdk.analytics.model.runtime.ErrorJSONRuntime;
+import org.openecomp.portalsdk.analytics.model.runtime.FormField;
+import org.openecomp.portalsdk.analytics.model.runtime.FormatProcessor;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportFormFields;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportJSONRuntime;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.model.runtime.VisualManager;
+import org.openecomp.portalsdk.analytics.model.search.ReportSearchResultJSON;
+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.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.analytics.view.DataRow;
+import org.openecomp.portalsdk.analytics.view.DataValue;
+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 com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+
+public class ActionHandler extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ //private static Log debugLogger = LogFactory.getLog(ActionHandler.class.getName());
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ActionHandler.class);
+
+ private void preserveReportRuntimeAsBackup(HttpServletRequest request) {
+ HttpSession session = request.getSession();
+ ArrayList repAl = null;
+
+ if(session.getAttribute(AppConstants.DRILLDOWN_REPORTS_LIST)!=null)
+ repAl = ((ArrayList)session.getAttribute(AppConstants.DRILLDOWN_REPORTS_LIST));
+ int index = Integer.parseInt(nvl((String) session.getAttribute(AppConstants.DRILLDOWN_INDEX), "0"));
+ int form_index = Integer.parseInt(nvl((String) session.getAttribute(AppConstants.FORM_DRILLDOWN_INDEX), "0"));
+ int flag = 0;
+ if(repAl ==null || repAl.size() <= 0) {
+ //session.setAttribute(AppConstants.SI_BACKUP_FOR_REP_ID, ((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)).getReportID());
+ //session.setAttribute(AppConstants.SI_REPORT_RUN_BACKUP, request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME));
+ repAl = new ArrayList();
+ repAl.add((ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME));
+
+ } else {
+ if(Globals.getMaxDrillDownLevel() < repAl.size()) {
+ repAl.remove(0);
+ if(index > 0) index--;
+ } else if(index < repAl.size())
+ repAl.remove(index);
+ repAl.add(index, (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME));
+ }
+ index = index + 1;
+ // needed to differentiate form and report index to store form parameters for ZK
+ form_index = form_index + 1;
+ session.setAttribute(AppConstants.FORM_DRILLDOWN_INDEX, Integer.toString(form_index));
+ session.setAttribute(AppConstants.DRILLDOWN_INDEX, Integer.toString(index));
+ request.getSession().setAttribute(AppConstants.DRILLDOWN_REPORTS_LIST, repAl);
+ } // preserveReportRuntimeAsBackup
+
+ private void clearReportRuntimeBackup(HttpServletRequest request) {
+// debugLogger.debug("in Action Handler clear is been called.");
+ HttpSession session = request.getSession();
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ request.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ request.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);
+ }
+ }
+ //request.getSession().removeAttribute(AppConstants.SI_REPORT_RUN_BACKUP);
+ //request.getSession().removeAttribute(AppConstants.SI_BACKUP_FOR_REP_ID);
+ } // clearReportRuntimeBackup
+
+ private boolean isDashboardInDrillDownList(HttpServletRequest request) throws RaptorException {
+ ArrayList aL = (ArrayList) request.getSession().getAttribute(
+ AppConstants.DRILLDOWN_REPORTS_LIST);
+ ReportRuntime rr = null;
+ if(aL ==null || aL.size() <= 0) {
+ return false;
+ } else {
+ for (int i =0; i<aL.size(); i++) {
+ rr = (ReportRuntime) aL.get(i);
+ if( rr!=null && rr.getReportType().equals(AppConstants.RT_DASHBOARD))
+ return true;
+ }
+ }
+ return false;
+ }
+ private ReportRuntime getReportRuntimeFromBackup(HttpServletRequest request) {
+ ArrayList aL = (ArrayList) request.getSession().getAttribute(
+ AppConstants.DRILLDOWN_REPORTS_LIST);
+ ReportRuntime rr = null;
+ HttpSession session = request.getSession();
+ /*if(aL==null || (aL.size() <=0) ) {
+ rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUN_BACKUP);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr);
+ } else {*/
+ //clearReportRuntimeBackup(request);
+
+ 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));
+
+ rr = (ReportRuntime)aL.get(index);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr);
+ //clearReportRuntimeBackup(request);
+ //}
+ return rr;
+ } // getReportRuntimeFromBackup
+
+ public String reportRun(HttpServletRequest request, String nextPage) {
+ String action = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
+ ReportRuntime rr = null;
+ String userId = null;
+ String formFields = "";
+ ReportData rd = null;
+ boolean isEmailAttachment = false;
+ boolean fromDashboard = AppUtils.getRequestFlag(request,"fromDashboard");
+ request.getSession().setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+
+ boolean rDisplayContent = AppUtils.getRequestFlag(request,
+ AppConstants.RI_DISPLAY_CONTENT)
+ || AppUtils.getRequestFlag(request, "noFormFields");
+
+ try {
+ //if "refresh=Y" is in request parameter, session variables are removed.
+ if(AppUtils.getRequestFlag(request, AppConstants.RI_REFRESH)) {
+ removeVariablesFromSession(request);
+ }
+
+
+ long currentTime = System.currentTimeMillis();
+ request.setAttribute("triggeredStartTime", new Long(currentTime));
+ String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
+ String pdfAttachmentKey = AppUtils.getRequestNvlValue(request, "pdfAttachmentKey");
+ String parent = "";
+ int parentFlag = 0;
+ if(!nvl(request.getParameter("parent"), "").equals("N")) parent = nvl(request.getParameter("parent"), "");
+ if(parent.startsWith("parent_")) parentFlag = 1;
+
+ if (pdfAttachmentKey.length()<=0) {
+ if(actionKey.equals("report.download.page") || actionKey.equals("report.download") || actionKey.equals("report.download.pdf") || actionKey.equals("report.download.excel2007") || actionKey.equals("report.csv.download") || actionKey.equals("report.text.download")) {
+ if(parentFlag == 1) rr = (ReportRuntime) request.getSession().getAttribute(parent+"_rr");
+ if(rr==null)
+ rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); //changing session to request
+ if(!(rr!=null && fromDashboard)) {
+ userId = AppUtils.getUserID(request);
+ boolean isFromReportLog = AppUtils.getRequestFlag(request, "fromReportLog");
+ int downloadLimit = 0;
+ if(rr!=null)
+ downloadLimit = (rr.getMaxRowsInExcelDownload()>0)?rr.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ if(actionKey.equals("report.csv.download"))
+ downloadLimit = Globals.getCSVDownloadLimit();
+
+ if(rr!=null && rr.getReportType().equals(AppConstants.RT_LINEAR)) {
+ String sql_whole = rr.getReportDataSQL(userId, downloadLimit, request);
+ request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole);
+ } else if(rr!=null && rr.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ rd = rr.loadReportData(-1, userId, downloadLimit,request, false); /* TODO: should be changed to true */
+ request.getSession().setAttribute(AppConstants.RI_REPORT_DATA, rd);
+ }
+ if(!isFromReportLog) {
+ if(pdfAttachmentKey!=null && pdfAttachmentKey.length()>0) {
+ if(actionKey.equals("report.download")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_SCHEDULED_DOWNLOAD_EXCEL, formFields);
+ } else if (actionKey.equals("report.download.pdf")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_SCHEDULED_DOWNLOAD_PDF, formFields);
+ } else if (actionKey.equals("report.download.excel2007")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_SCHEDULED_DOWNLOAD_EXCELX, formFields);
+ }
+ } else {
+ if(actionKey.equals("report.download") ) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_DOWNLOAD_EXCEL, formFields);
+ } else if (actionKey.equals("report.download.pdf")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_DOWNLOAD_PDF, formFields);
+ } else if (actionKey.equals("report.csv.download")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_DOWNLOAD_CSV, formFields);
+ } else if (actionKey.equals("report.text.download")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_DOWNLOAD_TEXT, formFields);
+ } else if (actionKey.equals("report.download.page")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_DOWNLOAD_PAGE_EXCEL, formFields);
+ } else if (actionKey.equals("report.download.excel2007")) {
+ rr.logReportExecutionTime(userId, "",AppConstants.RLA_DOWNLOAD_EXCELX, formFields);
+ }
+ }
+ }
+ return nextPage;
+ }
+
+ }
+ }// pdfAttachmentKey
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); //changing session to request
+
+ String reportIDFromSession = (rr!=null)?rr.getReportID():"";
+ logger.debug(EELFLoggerDelegate.debugLogger, ("in Action Handler ********** " + reportID + " " + reportIDFromSession + " "+ actionKey));
+// ReportRuntime rr = (ReportRuntime) request.getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("^^^^^^^^^^^^^^report ID from session " + ((rr!=null)?rr.getReportID():"no report id in session")));
+ // if(rr!=null && !(rr.getReportID().equals(reportID))) {
+// rr = null;
+// request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, null);
+// }
+
+ ReportHandler rh1 = new ReportHandler();
+ ReportRuntime rr1 = null;
+
+ //debugLogger.debug("Report ID B4 rr1 in ActionHandler "
+ // + ( request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null?((ReportRuntime)request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)).getReportID():"Not in session"));
+
+
+ //try {
+ boolean isGoBackAction = AppUtils.getRequestFlag(request, AppConstants.RI_GO_BACK);
+
+ if (AppUtils.getRequestFlag(request, AppConstants.RI_SHOW_BACK_BTN) && !isGoBackAction) {
+ // debugLogger.debug("Preserving report");
+ if(!reportID.equals(reportIDFromSession))
+ preserveReportRuntimeAsBackup(request);
+ }
+
+ if(reportID !=null)
+ rr1 = rh1.loadReportRuntime(request, reportID, true, 1);
+ //} catch(Exception e) {
+
+ // }
+// debugLogger.debug("Report ID After rr1 in ActionHandler "
+// + ( request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null?((ReportRuntime)request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)).getReportID():"Not in session"));
+ if(rr1!=null && rr1.getReportType().equals(AppConstants.RT_DASHBOARD)) {
+ int DASH=7;
+ int requestFlag = DASH;
+ ReportHandler rh = new ReportHandler();
+ // Added below statement to add parent dashboard report id in session.
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REP_ID, reportID);
+ //rr = null;
+ // get dashboard HTML from report runtime. getListOfReportsFromDashBoardHTML
+ String strHTML = rr1.getDashboardLayoutHTML();
+
+ //System.out.println("StrHTML " + strHTML);
+ // call getListOfReportsFromDashBoardHTML returns HashMap
+
+ TreeMap treeMap = getListOfReportsFromDashBoardHTML(strHTML);
+ //System.out.println("Size " + hashMap.size());
+ Set set = treeMap.entrySet();
+ String value = "";
+
+ HashMap reportsRuntimeMap = new HashMap();
+ HashMap reportDataMap = new HashMap();
+ HashMap reportChartDataMap = new HashMap();
+ // displayTypeMap differentiates whether report need to be displayed as data or chart
+ HashMap reportDisplayTypeMap = new HashMap();
+
+ userId = null;
+ userId = AppUtils.getUserID(request);
+ int pageNo = -1;
+ //int downloadLimit = (rr1.getMaxRowsInExcelDownload()>0)?rr1.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ int downloadLimit = 0;
+ int rep_idx = 0;
+ int widthFlag = 0;
+ int heightFlag = 0;
+ ReportRuntime rrDashboardReports = null;
+ Integer intObj = null;
+ ReportRuntime similiarReportRuntime = null;
+ rd = null;
+ DataSet ds = null;
+ String reportIDFromMap = null;
+ int record = 0;
+ boolean buildReportdata = true;
+
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ record++;
+ Map.Entry entry = (Entry) iter.next();
+ //System.out.println("Key "+ entry.getKey());
+ //System.out.println("Value "+ entry.getValue());
+ reportIDFromMap = entry.getValue().toString().substring(1);
+ // The below line is used to optimize, so that if there is already same report id it wouldn't go through the whole process
+ similiarReportRuntime = getSimiliarReportRuntime(reportsRuntimeMap, reportIDFromMap);
+ if(similiarReportRuntime != null ) {
+ rrDashboardReports = (ReportRuntime) getSimiliarReportRuntime(reportsRuntimeMap, reportIDFromMap).clone();
+ intObj = getKey(reportsRuntimeMap,reportIDFromMap);
+ } else {
+ rrDashboardReports = rh.loadReportRuntime(request, reportIDFromMap, true, requestFlag);
+ }
+ if(entry.getValue().toString().toLowerCase().startsWith("c")) {
+ rrDashboardReports.setDisplayMode(ReportRuntime.DISPLAY_CHART_ONLY);
+ } else {
+ rrDashboardReports.setDisplayMode(ReportRuntime.DISPLAY_DATA_ONLY);
+ }
+
+ downloadLimit = (rrDashboardReports.getMaxRowsInExcelDownload()>0)?rrDashboardReports.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ if (new Integer(nvl(rrDashboardReports.getDataContainerWidth(),"100")).intValue() >100) widthFlag = 1;
+ if (new Integer(nvl(rrDashboardReports.getDataContainerHeight(),"100")).intValue() >100) heightFlag = 1;
+
+ if(record == 1) {
+ if(rrDashboardReports.getReportFormFields()!=null && rrDashboardReports.getReportFormFields().size()>0) {
+ buildReportdata = false;
+ if(rDisplayContent) buildReportdata = true;
+ }
+ }
+
+ if(buildReportdata) {
+ if(similiarReportRuntime != null ) {
+ rd = (ReportData) reportDataMap.get(intObj);
+ ds = (DataSet) reportChartDataMap.get(intObj);
+ } else {
+ if (!rrDashboardReports.getReportType().equals(AppConstants.RT_HIVE))
+ rd = rrDashboardReports.loadReportData(pageNo, userId, downloadLimit,request, false /*download*/);
+ else
+ rd = rrDashboardReports.loadHiveLinearReportData(rrDashboardReports.getReportSQL(), userId, 2,request);
+ ds = rrDashboardReports.loadChartData(userId,request);
+ }
+ }
+
+
+ long totalTime = System.currentTimeMillis() - currentTime;
+ formFields = AppUtils.getRequestNvlValue(request, "formFields");
+ if(buildReportdata) {
+ rrDashboardReports.logReportRun(userId, String.valueOf(totalTime),formFields);
+ rrDashboardReports.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_EXECUTION_TIME, formFields);
+ }
+
+ /*reportsRuntimeMap.put(new Integer(entry.getKey().toString()), rrDashboardReports);
+ reportDataMap.put(new Integer(entry.getKey().toString()), rd);
+ reportChartDataMap.put(new Integer(entry.getKey().toString()), ds);
+ reportDisplayTypeMap.put(new Integer(entry.getKey().toString()), entry.getValue().toString().substring(0,1));*/
+
+ reportsRuntimeMap.put(new Integer(entry.getKey().toString())+"_"+rrDashboardReports.getReportID(), rrDashboardReports);
+ reportDisplayTypeMap.put(new Integer(entry.getKey().toString())+"_"+rrDashboardReports.getReportID(), entry.getValue().toString().substring(0,1));
+ if(buildReportdata) {
+ reportDataMap.put(new Integer(entry.getKey().toString())+"_"+rrDashboardReports.getReportID(), rd);
+ reportChartDataMap.put(new Integer(entry.getKey().toString())+"_"+rrDashboardReports.getReportID(), ds);
+ }
+
+ }
+
+ /*if(widthFlag ==1) request.getSession().setAttribute("extendedWidth", "Y");
+ else request.getSession().removeAttribute("extendedWidth");
+ if(heightFlag ==1) request.getSession().setAttribute("extendedHeight", "Y");
+ else request.getSession().removeAttribute("extendedHeight");
+ */
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP, new TreeMap(reportsRuntimeMap));
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP, new TreeMap(reportDisplayTypeMap));
+ if(buildReportdata) {
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP, new TreeMap(reportDataMap));
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP, new TreeMap(reportChartDataMap));
+ }
+// debugLogger.debug("I am inside this if " + rr1.getReportType() + " "+rr1.getReportID());
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr1); //changing session to request
+ //request.setAttribute(AppConstants.SI_REPORT_RUNTIME, rr1);
+ if((String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!= null || rr1.getReportType().equals(AppConstants.RT_DASHBOARD)) {
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME, rr1);
+ }
+
+ return "raptor/report_dashboard_run_container.jsp";
+ } else {
+ fromDashboard = AppUtils.getRequestFlag(request,"fromDashboard");
+ if(isDashboardInDrillDownList(request)) fromDashboard= true;
+
+ if(!fromDashboard) {
+ request.getSession().removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP);
+ request.getSession().removeAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP);
+ request.getSession().removeAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP);
+ request.getSession().removeAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP);
+ request.getSession().removeAttribute(AppConstants.SI_DASHBOARD_REP_ID);
+ request.getSession().removeAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME);
+ request.getSession().removeAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP);
+ request.getSession().removeAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP);
+ }
+ //String pdfAttachmentKey = AppUtils.getRequestValue(request, "pdfAttachmentKey");
+ String report_email_sent_log_id = AppUtils.getRequestValue(request, "log_id");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Email PDF" + pdfAttachmentKey+" "+ report_email_sent_log_id));
+
+ //email pdf attachment specific
+ if(nvl(pdfAttachmentKey).length()>0 && report_email_sent_log_id !=null)
+ isEmailAttachment = true;
+ if(isEmailAttachment) {
+ /* String query = "Select user_id, rep_id from CR_REPORT_EMAIL_SENT_LOG" +
+ " where rownum = 1" +
+ " and gen_key='"+pdfAttachmentKey.trim()+"'" +
+ " and log_id ="+report_email_sent_log_id.trim() +
+ " and (sysdate - sent_date) < 1 ";*/
+
+
+ String query = Globals.getDownloadAllEmailSent();
+ query = query.replace("[pdfAttachmentKey.trim()]", pdfAttachmentKey.trim());
+ query = query.replace("[report_email_sent_log_id.trim()]", report_email_sent_log_id.trim());
+
+ DataSet ds = DbUtils.executeQuery(query, 1);
+ if(!ds.isEmpty()) {
+ userId = ds.getString(0,"user_id");
+ reportID = ds.getString(0, "rep_id");
+ request.setAttribute("schedule_email_userId", userId);
+ } else {
+ request.setAttribute("message", "This link has expired, please <a href=''>login</a> and regenerate the report");
+ return "raptor/message.jsp";
+ }
+ } else userId = AppUtils.getUserID(request);
+// debugLogger.debug("Report ID b4 showbutton in ActionHandler "
+// + ( request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null?((ReportRuntime)request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME)).getReportID():"Not in session"));
+// debugLogger.debug("Report ID " + reportID + " " + reportIDFromSession);
+
+ // Scheduling Dashoard report
+ if(reportID !=null && nvl(pdfAttachmentKey).length()>0)
+ rr = rh1.loadReportRuntime(request, reportID, true, 1);
+ if(rr!=null && rr.getReportType().equals(AppConstants.RT_DASHBOARD) && nvl(pdfAttachmentKey).length()>0) {
+ int DASH=7;
+ int requestFlag = DASH;
+ ReportHandler rh = new ReportHandler();
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REP_ID, reportID);
+ //rr = null;
+ // get dashboard HTML from report runtime. getListOfReportsFromDashBoardHTML
+ String strHTML = rr.getDashboardLayoutHTML();
+ //System.out.println("StrHTML " + strHTML);
+ // call getListOfReportsFromDashBoardHTML returns HashMap
+
+ TreeMap treeMap = getListOfReportsFromDashBoardHTML(strHTML);
+ //System.out.println("Size " + hashMap.size());
+ Set set = treeMap.entrySet();
+ String value = "";
+
+ HashMap reportsRuntimeMap = new HashMap();
+ HashMap reportDataMap = new HashMap();
+ HashMap reportChartDataMap = new HashMap();
+ HashMap reportDisplayTypeMap = new HashMap();
+
+ userId = null;
+ userId = AppUtils.getUserID(request);
+ int pageNo = -1;
+ int downloadLimit = 0;
+ int rep_idx = 0;
+ int widthFlag = 0;
+ int heightFlag = 0;
+ ReportRuntime rrDashboardReports = null;
+ Integer intObj = null;
+ ReportRuntime similiarReportRuntime = null;
+ rd = null;
+ DataSet ds = null;
+ String reportIDFromMap = null;
+ int record = 0;
+ boolean buildReportdata = true;
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ record++;
+ Map.Entry entry = (Entry) iter.next();
+
+ reportIDFromMap = entry.getValue().toString().substring(1);
+ similiarReportRuntime = getSimiliarReportRuntime(reportsRuntimeMap, reportIDFromMap);
+ if(similiarReportRuntime != null ) {
+ rrDashboardReports = getSimiliarReportRuntime(reportsRuntimeMap, reportIDFromMap);
+ intObj = getKey(reportsRuntimeMap,reportIDFromMap);
+ } else {
+ rrDashboardReports = rh.loadReportRuntime(request, reportIDFromMap, true, requestFlag);
+ }
+
+ downloadLimit = (rrDashboardReports.getMaxRowsInExcelDownload()>0)?rrDashboardReports.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+
+ if (new Integer(nvl(rrDashboardReports.getDataContainerWidth(),"100")).intValue() >100) widthFlag = 1;
+ if (new Integer(nvl(rrDashboardReports.getDataContainerHeight(),"100")).intValue() >100) heightFlag = 1;
+ if(record == 1) {
+ if(rrDashboardReports.getReportFormFields()!=null && rrDashboardReports.getReportFormFields().size()>0) {
+ buildReportdata = false;
+ if(rDisplayContent) buildReportdata = true;
+ }
+ }
+ if(buildReportdata) {
+ if(similiarReportRuntime != null ) {
+ rd = (ReportData) reportDataMap.get(intObj);
+ ds = (DataSet) reportChartDataMap.get(intObj);
+ } else {
+
+ if (!rrDashboardReports.getReportType().equals(AppConstants.RT_HIVE))
+ rd = rrDashboardReports.loadReportData(pageNo, userId, downloadLimit,request, false /*download*/);
+ else
+ rd = rrDashboardReports.loadHiveLinearReportData(rrDashboardReports.getReportSQL(), userId, 2,request);
+ ds = rrDashboardReports.loadChartData(userId,request);
+ }
+ }
+
+
+
+ long totalTime = System.currentTimeMillis() - currentTime;
+ formFields = AppUtils.getRequestNvlValue(request, "formFields");
+
+ rrDashboardReports.logReportRun(userId, String.valueOf(totalTime),formFields);
+ rrDashboardReports.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_EXECUTION_TIME, formFields);
+
+ reportsRuntimeMap.put(new Integer(entry.getKey().toString()), rrDashboardReports);
+ reportDisplayTypeMap.put(new Integer(entry.getKey().toString()), entry.getValue().toString().substring(0,1));
+ if(buildReportdata) {
+ reportDataMap.put(new Integer(entry.getKey().toString()), rd);
+ reportChartDataMap.put(new Integer(entry.getKey().toString()), ds);
+ //reportDisplayTypeMap.put(new Integer(entry.getKey().toString()), entry.getValue().toString().substring(0,1));
+ }
+ }
+
+ /*if(widthFlag ==1) request.getSession().setAttribute("extendedWidth", "Y");
+ else request.getSession().removeAttribute("extendedWidth");
+ if(heightFlag ==1) request.getSession().setAttribute("extendedHeight", "Y");
+ else request.getSession().removeAttribute("extendedHeight");
+ */
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REPORTRUNTIME_MAP, new TreeMap(reportsRuntimeMap));
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr); //changing session to request
+ if(buildReportdata) {
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_DISPLAYTYPE_MAP, new TreeMap(reportDisplayTypeMap));
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_REPORTDATA_MAP, new TreeMap(reportDataMap));
+ request.getSession().setAttribute(AppConstants.SI_DASHBOARD_CHARTDATA_MAP, new TreeMap(reportChartDataMap));
+ }
+ //request.setAttribute(AppConstants.SI_REPORT_RUNTIME, rr1);
+ //return nextPage;
+ } else {
+
+ // Ends
+
+
+// debugLogger.debug("Action Handler *****************" + new java.util.Date()+ " " + isGoBackAction);
+ ReportHandler rh = new ReportHandler();
+ //rr = null; // COMMENT THIS LINE
+ boolean resetParams = AppUtils.getRequestFlag(request,
+ AppConstants.RI_RESET_PARAMS);
+ boolean resetAction = AppUtils.getRequestFlag(request,
+ AppConstants.RI_RESET_ACTION);
+ boolean refresh = false;
+ if (resetAction) {
+ rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ resetParams=true;
+ refresh = true;
+ if(rr!=null) {
+ rr.setParamValues(request, resetParams,refresh);
+ request.getSession().removeAttribute(AppConstants.RI_REPORT_DATA);
+ rr.resetVisualSettings();
+ }
+ return nextPage;
+ }
+
+ /*if (isGoBackAction) {
+// debugLogger.debug("Report back in action handler " + ((ReportRuntime) request.getSession().getAttribute(
+// AppConstants.SI_REPORT_RUN_BACKUP))!=null?((ReportRuntime) request.getSession().getAttribute(
+// AppConstants.SI_REPORT_RUN_BACKUP)).getReportID():((ReportRuntime) request.getSession().getAttribute(
+// AppConstants.SI_REPORT_RUN_BACKUP)));
+ rr = null;
+ rr = getReportRuntimeFromBackup(request);
+ if (rr == null)
+ throw new Exception("[ActionHandler.reportRun] Report backup not found");
+ reportID = rr.getReportID();
+ } else {*/
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Ocurring during Schedule "));
+ //TODO differentiate Schedule with other actions
+// if(isEmailAttachment) {
+//
+// } else {
+//
+// }
+ rr = rh.loadReportRuntime(request, reportID);
+ //setParamValues called for Drilldown to display formfield
+ //rr.setParamValues(request, false,true);
+
+ //} // else
+
+ ArrayList aL = (ArrayList)request.getSession().getAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ ReportRuntime aLR = null;
+ if(aL != null) {
+// for (int i = 1; i < aL.size(); i++) {
+// aLR = (ReportRuntime) aL.get(i);
+// if (!aLR.getReportID().equals(reportID)) {
+// request.setAttribute(AppConstants.RI_SHOW_BACK_BTN, "Y");
+// }
+// }
+// if(reportID.equals(reportIDFromSession)) {
+ aLR = (ReportRuntime) aL.get(0);
+ if (aLR!=null && !aLR.getReportID().equals(reportID)) {
+ request.setAttribute(AppConstants.RI_SHOW_BACK_BTN, "Y");
+ }
+// }
+ }
+
+ if(rDisplayContent)
+ rr.setDisplayFlags(true, true);
+
+ if (rr.getDisplayContent()) {
+ int pageNo = 0;
+ if (isGoBackAction)
+ pageNo = rr.getCachedPageNo();
+ else {
+ try {
+ pageNo = Integer.parseInt(AppUtils.getRequestNvlValue(request, AppConstants.RI_NEXT_PAGE));
+ } catch (Exception e) {
+ }
+
+ String vAction = AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_VISUAL_ACTION);
+ String vCoId = AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID);
+ if (vAction.equals(AppConstants.VA_HIDE))
+ rr.hideColVisual(vCoId);
+ else if (vAction.equals(AppConstants.VA_SHOW))
+ rr.showColVisual(vCoId);
+ else if (vAction.equals(AppConstants.VA_SORT)) {
+ rr.sortColVisual(vCoId);
+ pageNo = 0;
+ } // else
+ } // else
+
+ int downloadLimit = (rr.getMaxRowsInExcelDownload()>0)?rr.getMaxRowsInExcelDownload():Globals.getDownloadLimit();
+ if(isEmailAttachment) {
+ String limit = nvl(request.getParameter("download_limit"),"1000");
+ downloadLimit = Integer.parseInt(limit);
+ }
+ //if (action.startsWith("mobile")) rr.setPageSize(5);
+ long reportTime = System.currentTimeMillis();
+ if (!rr.getReportType().equals(AppConstants.RT_HIVE))
+ rd = rr.loadReportData(pageNo, userId, downloadLimit,request,false /*download*/);
+ else
+ rd = rr.loadHiveLinearReportData(rr.getReportSQL(), userId, 2,request);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for the loading report data --- " + (System.currentTimeMillis() - reportTime)));
+ ReportData rd_whole = null;
+ boolean hideReportMap = rr.isDisplayOptionHideMap()||AppUtils.getRequestNvlValue(request, "noMap").equals("Y");
+/* if (Globals.getMapAllowedYN().equals("Y") && !hideReportMap && rr.getReportMap()!=null){
+ rd_whole = rr.loadReportData(-1, userId, downloadLimit,request);
+ }
+*/
+ request.getSession().setAttribute(AppConstants.RI_REPORT_DATA, rd);
+ //if (Globals.getMapAllowedYN().equals("Y") && !hideReportMap && (rr.getReportMap()!=null && rr.getReportMap().getLatColumn()!=null && rr.getReportMap().getLongColumn()!=null)) {
+ if(rr!=null && rr.getReportType().equals(AppConstants.RT_LINEAR)) {
+ String sql_whole = rr.getReportDataSQL(userId, downloadLimit, request);
+ request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole);
+ } else if(rr.getReportType().equals(AppConstants.RT_HIVE)) {
+ String sql_whole = rr.getReportSQL();
+ request.setAttribute(AppConstants.RI_REPORT_SQL_WHOLE, sql_whole);
+ }
+ //}
+ //request.setAttribute(AppConstants.RI_REPORT_DATA_WHOLE, rd_whole);
+ // if(rr.getReportDataSize() > Globals.getFlatFileLowerLimit() && rr.getReportDataSize() <= Globals.getFlatFileUpperLimit() ) {
+ // rr.setFlatFileName(rh.saveFlatFile(request, rd, rr
+ // .getParamNameValuePairs(), rr.getReportName(), rr.getReportDescr()));
+ // }
+ //if(actionKey!=null && actionKey.equals("report.download")) {
+// rr.setExcelPageFileName(rh.saveAsExcelFile(request, rd, rr
+// .getParamNameValuePairs(), rr.getReportName(), rr.getReportDescr()));
+ //}
+ if (!rr.getReportType().equals(AppConstants.RT_HIVE)) {
+ long currentChartTime = System.currentTimeMillis();
+ DataSet chartDS = rr.loadChartData(userId,request);
+ if(chartDS != null)
+ request.getSession().setAttribute(AppConstants.RI_CHART_DATA, rr.loadChartData(userId,request));
+ else
+ request.getSession().removeAttribute(AppConstants.RI_CHART_DATA);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[DEBUG MESSAGE FROM RAPTOR] ------->Time Taken for the loading chart data --- " + (System.currentTimeMillis() - currentChartTime)));
+ }
+
+/* if((String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null) {
+ request.getSession().setAttribute("FirstDashReport", rr);
+ }
+*/
+ }
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rr); //changing session to request
+ request.getSession().setAttribute(AppConstants.RI_REPORT_DATA, rd);
+ } // else
+ long totalTime = System.currentTimeMillis() - currentTime;
+ formFields = AppUtils.getRequestNvlValue(request, "formFields");
+ request.setAttribute(AppConstants.RLA_EXECUTION_TIME, "" + totalTime);
+
+
+ boolean isFromReportLog = AppUtils.getRequestFlag(request, "fromReportLog");
+ if(!isFromReportLog) {
+ if(pdfAttachmentKey!=null && pdfAttachmentKey.length()>0) {
+ if(actionKey.equals("report.download")) {
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_SCHEDULED_DOWNLOAD_EXCEL, formFields);
+ } else if (actionKey.equals("report.download.pdf")) {
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_SCHEDULED_DOWNLOAD_PDF, formFields);
+ }
+ } else {
+ if(actionKey.equals("report.download") ) {
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_DOWNLOAD_EXCEL, formFields);
+ } else if (actionKey.equals("report.download.pdf")) {
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_DOWNLOAD_PDF, formFields);
+ } else if (actionKey.equals("report.csv.download")) {
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_DOWNLOAD_CSV, formFields);
+ } else if (actionKey.equals("report.text.download")) {
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_DOWNLOAD_TEXT, formFields);
+ } else {
+
+ //rr.logReportRun(userId, String.valueOf(totalTime),formFields);
+ if(rd!=null && !action.equals("report.run.container"))
+ rr.logReportExecutionTime(userId, String.valueOf(totalTime),AppConstants.RLA_EXECUTION_TIME, formFields);
+ }
+ }
+ } else {
+ rr.logReportExecutionTimeFromLogList(userId, String.valueOf(totalTime),formFields);
+ }
+
+/* if((String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID)!=null) {
+ reportID = (String) request.getSession().getAttribute(AppConstants.SI_DASHBOARD_REP_ID);
+ ReportRuntime rrDash = rh1.loadReportRuntime(request, reportID, true, 1);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_RUNTIME, rrDash);
+ }
+*/
+ if(rr.isDrillDownURLInPopupPresent()) {
+ request.getSession().setAttribute("parent_"+rr.getReportID()+"_rr", rr);
+ request.getSession().setAttribute("parent_"+rr.getReportID()+"_rd", rd);
+ }
+
+ if(rr.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+ return "raptor/report_crosstab_run_container.jsp";
+ } else if (rr.getReportType().equals(AppConstants.RT_HIVE) && !isEmailAttachment) {
+ return "raptor/report_hive_run_container.jsp";
+ }
+ } // else
+
+ boolean isEmbedded = false;
+ Object temp = request.getSession().getAttribute("isEmbedded");
+ if(temp!=null){
+ isEmbedded = (boolean)temp;
+ }
+ if(isEmbedded && !action.equals("chart.run")){
+ HashMap embeddedReportsRuntimeMap = null;
+ HashMap embeddedReportsDataMap = null;
+ if(request.getSession().getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)!= null){
+ embeddedReportsRuntimeMap = (HashMap)request.getSession().getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP);
+ } else {
+ embeddedReportsRuntimeMap = new HashMap();
+ }
+ if(request.getSession().getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)!= null){
+ embeddedReportsDataMap = (HashMap)request.getSession().getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP);
+ } else {
+ embeddedReportsDataMap = new HashMap();
+ }
+ embeddedReportsRuntimeMap.put(rr.getReportID(), rr);
+ embeddedReportsDataMap.put(rr.getReportID(), rd);
+
+
+ request.getSession().setAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP, embeddedReportsRuntimeMap);
+ request.getSession().setAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP, embeddedReportsDataMap);
+
+ }
+
+ ReportJSONRuntime reportJSONRuntime = rr.createReportJSONRuntime(request, rd);
+ ObjectMapper mapper = new ObjectMapper();
+ //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(reportJSONRuntime);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ return jsonInString;
+ } catch (RaptorException e) {
+ try {
+ e.printStackTrace();
+
+ if(rr!=null) { // when user tries report they don't have access this should not throw exception that's why this if is added.
+ if(isEmailAttachment)
+ rr.logReportExecutionTime(userId, "", "Scheduled: " + AppConstants.RLA_ERROR, formFields);
+ else
+ rr.logReportExecutionTime(userId, "", "On Demand: " + AppConstants.RLA_ERROR, formFields);
+ }
+
+ ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
+ errorJSONRuntime.setErrormessage(e.getMessage());
+ errorJSONRuntime.setStacktrace(getStackTrace(e));
+ ObjectMapper mapper = new ObjectMapper();
+ //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(errorJSONRuntime);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ return jsonInString;
+
+ } catch (RaptorException ex) {
+ nextPage = (new ErrorHandler()).processFatalError(request, ex);
+ ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
+ errorJSONRuntime.setErrormessage(ex.getMessage());
+ errorJSONRuntime.setStacktrace(getStackTrace(ex));
+ ObjectMapper mapper = new ObjectMapper();
+ //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(errorJSONRuntime);
+ } catch (Exception ex1) {
+ ex1.printStackTrace();
+ }
+ return jsonInString;
+ }
+ //nextPage = (new ErrorHandler()).processFatalError(request, e);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ ErrorJSONRuntime errorJSONRuntime = new ErrorJSONRuntime();
+ errorJSONRuntime.setErrormessage(t.toString());
+ errorJSONRuntime.setStacktrace(getStackTrace(t));
+ ObjectMapper mapper = new ObjectMapper();
+ //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(errorJSONRuntime);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ return jsonInString;
+
+ }
+ //return nextPage;
+ } // reportRun
+
+ public static String getStackTrace(Throwable aThrowable) {
+ Writer result = new StringWriter();
+ PrintWriter printWriter = new PrintWriter(result);
+ aThrowable.printStackTrace(printWriter);
+ return result.toString();
+ }
+
+ /**
+ * The below method is used to optimize, so that if there is already same report id in hashMap it wouldn't go through the whole process again.
+ **/
+ private ReportRuntime getSimiliarReportRuntime(HashMap reportsRuntimeMap, String reportID) {
+ Set set = reportsRuntimeMap.entrySet();
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ if (((ReportRuntime) entry.getValue()).getReportID().equals(reportID)) {
+ return (ReportRuntime) entry.getValue();
+ }
+ }
+ return null;
+ }
+
+ private Integer getKey(HashMap reportsRuntimeMap, String reportID) {
+ Set set = reportsRuntimeMap.entrySet();
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ if (((ReportRuntime) entry.getValue()).getReportID().equals(reportID)) {
+ return new Integer(((String) entry.getKey()).substring(2));
+ }
+ }
+ return null;
+ }
+
+ public String reportSearch(HttpServletRequest request, String nextPage) {
+ return reportSearchExecute(request, nextPage);
+ } // reportSearch
+
+ public String reportSearchUser(HttpServletRequest request, String nextPage) {
+ removeVariablesFromSession(request);
+ request.setAttribute(AppConstants.RI_USER_REPORTS, "Y");
+ return reportSearchExecute(request, nextPage);
+ } // reportSearchUser
+
+ public String reportSearchPublic(HttpServletRequest request, String nextPage) {
+ removeVariablesFromSession(request);
+ request.setAttribute(AppConstants.RI_PUBLIC_REPORTS, "Y");
+ return reportSearchExecute(request, nextPage);
+ } // reportSearchPublic
+
+ public String reportSearchFavorites(HttpServletRequest request, String nextPage) {
+ removeVariablesFromSession(request);
+ request.setAttribute(AppConstants.RI_FAVORITE_REPORTS, "Y");
+ return reportSearchExecute(request, nextPage);
+ } // reportSearchFavorites
+
+ public String reportSearchExecute(HttpServletRequest request, String nextPage) {
+ removeVariablesFromSession(request);
+ try {
+ SearchHandler sh = new SearchHandler();
+ ReportSearchResultJSON sr = sh.loadReportSearchResult(request);
+ return sr.getJSONString();
+ //request.setAttribute(AppConstants.RI_SEARCH_RESULT, sr);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportSearchExecute
+
+ public String reportChartRun(HttpServletRequest request, String nextPage) {
+ ChartWebRuntime cwr = new ChartWebRuntime();
+ return cwr.generateChart(request, false); //no data
+ } // reportSearchExecute
+
+ public String reportChartDataRun(HttpServletRequest request, String nextPage) {
+ ChartWebRuntime cwr = new ChartWebRuntime();
+ return cwr.generateChart(request); //data
+ } // reportSearchExecute
+
+
+ // public String reportRunExecute(HttpServletRequest request, String nextPage) {
+// try {
+// ReportRunHandler rh = new ReportRunHandler();
+// ReportRunResultJSON sr = rh.loadReportRunResult(request);
+// return sr.getJSONString();
+// //request.setAttribute(AppConstants.RI_SEARCH_RESULT, sr);
+// } catch (RaptorException e) {
+// nextPage = (new ErrorHandler()).processFatalError(request, e);
+// }
+//
+// return nextPage;
+// }
+
+ public String getQuickLinksJSON(HttpServletRequest request, String nextPage) {
+ String jsonInString = null;
+ try {
+ ArrayList<QuickLink> quickLinks = ReportLoader.getQuickLinksJSON(request, request.getParameter("quick_links_menu_id"),true);
+ ObjectMapper mapper = new ObjectMapper();
+ mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
+ mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ jsonInString = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(quickLinks);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return jsonInString;
+ }
+
+ public String processScheduleReportList(HttpServletRequest request, String nextPage) {
+ String reportID = "";
+ reportID = AppUtils.getRequestNvlValue(request, "schedule_reports");
+ if (nvl(reportID).length()<=0)
+ reportID = AppUtils.getRequestNvlValue(request, AppConstants.RI_REPORT_ID);
+ // Added for form field chaining in schedule tab so that setParamValues() is called
+ request.setAttribute(AppConstants.SCHEDULE_ACTION, "Y");
+
+ try {
+ boolean isAdmin = AppUtils.isAdminUser(request);
+ boolean check = ReportLoader.doesUserCanScheduleReport(request, null);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("^^^^^^^^^^^^^Check " + check + " Admin "+ isAdmin));
+
+ if(check || isAdmin) {
+ if(reportID.length()>0) {
+ ReportHandler rh = new ReportHandler();
+ ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ ReportSchedule reportSchedule = null;
+ if(rdef!=null) {
+ reportSchedule = new ReportSchedule(reportID, AppUtils.getUserID(request), false, request);
+ }
+ request.getSession().setAttribute(AppConstants.SI_REPORT_SCHEDULE, reportSchedule);
+ }
+ } else {
+ //String message = "You have reached your schedule limit. Please visit this page again after removing your old schedules in \"My Schedule\" section.";
+ String message = "You have reached the scheduled report limit for your Login ID. Please remove any old schedule requests in the \"My Scheduled Reports\" screen before attempting to schedule any additional reports.";
+ nextPage = (new ErrorHandler()).processFatalError(request, new RaptorSchedularException(message));
+ }
+
+ } catch(Exception ex) { ex.printStackTrace();}
+ return nextPage;
+ }
+
+ public String processSchedule(HttpServletRequest request, String nextPage) {
+
+ // Added for form field chaining in schedule tab so that setParamValues() is called
+
+ request.setAttribute(AppConstants.SCHEDULE_ACTION, "Y");
+ if(request.getSession().getAttribute(AppConstants.SI_REPORT_SCHEDULE)!=null && (!AppUtils.getRequestNvlValue(request, AppConstants.RI_ACTION).equals("report.schedule_only_from_search"))) {
+ String action = nvl(request.getParameter(AppConstants.RI_WIZARD_ACTION),
+ AppConstants.WA_BACK);
+ String scheduleID = "";
+ scheduleID = AppUtils.getRequestValue(request, AppConstants.RI_SCHEDULE_ID);
+ ReportSchedule reportSchedule = null;
+
+ if( nvl(scheduleID).length() <= 0) {
+ reportSchedule = (ReportSchedule) request.getSession().getAttribute(AppConstants.SI_REPORT_SCHEDULE);
+ scheduleID = reportSchedule.getScheduleID();
+ }
+
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ try {
+ boolean isAdmin = AppUtils.isAdminUser(request);
+ boolean check = ReportLoader.doesUserCanScheduleReport(request, scheduleID);
+ if(!isAdmin && !check) {
+ String message = "You have reached the scheduled report limit for your Login ID. Please remove any old schedule requests in the My Scheduled Reports screen before attempting to schedule any additional reports.";
+ nextPage = (new ErrorHandler()).processFatalError(request, new RaptorSchedularException(message));
+ return nextPage;
+ }
+
+ } catch (Exception ex) { ex.printStackTrace();}
+ if(reportSchedule == null) reportSchedule = new ReportSchedule(reportID, scheduleID, AppUtils.getUserID(request), request);
+ String formFields = "";
+ formFields = reportSchedule.getFormFields();
+ formFields = (formFields.length()>1)?formFields.substring(1):formFields;
+ String formFieldsArr[] = formFields.split("&");
+ String sessionParams[] = Globals.getSessionParamsForScheduling().split(",");
+
+ for (int i=0; i<sessionParams.length; i++) {
+ for (int j = 0; j < formFieldsArr.length; j++) {
+ if(formFieldsArr[j].startsWith(sessionParams[i])) {
+ request.setAttribute(sessionParams[i], formFieldsArr[j].substring(formFieldsArr[j].indexOf("=")+1));
+ }
+
+ }
+ }
+
+ boolean reportUpdated = false;
+ WizardProcessor wp = null;
+ Connection connection = null;
+ try {
+ connection = DbUtils.startTransaction();
+ wp = new WizardProcessor();
+ String toListUpdated = nvl(request.getParameter("toListUpdated"),"false" );
+ reportUpdated = wp.processAdhocSchedule(request, action);
+ if(reportUpdated && toListUpdated.equals("false")) {
+ request.setAttribute("message", "Report has been scheduled successfully");
+ reportSchedule = (ReportSchedule) request.getSession().getAttribute(AppConstants.SI_REPORT_SCHEDULE);
+ //if(AppUtils.getRequestNvlValue(request, AppConstants.RI_SCHEDULE_ID).length()<=0) {
+ reportSchedule.persistScheduleData(connection, request);
+ DbUtils.commitTransaction(connection);
+ //}
+ }
+ } catch (ValidationException ve) {
+ (new ErrorHandler()).processError(request, ve);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ e.printStackTrace();
+ try {
+ DbUtils.rollbackTransaction(connection);
+ } catch (Exception e1) {e1.printStackTrace();}
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ finally {
+ try {
+ DbUtils.clearConnection(connection);
+ } catch (Exception e1) {e1.printStackTrace();}
+ }
+ request.setAttribute("schedule_only", "Y");
+ //request.getSession().removeAttribute(AppConstants.SI_REPORT_SCHEDULE);
+
+ return nextPage;
+ } else {
+ try {
+ String scheduleID = "";
+ scheduleID = AppUtils.getRequestValue(request, AppConstants.RI_SCHEDULE_ID);
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ request.setAttribute("schedule_only", "Y");
+ ReportHandler rh = new ReportHandler();
+ ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
+ ReportSchedule reportSchedule = null;
+ if(rdef!=null) {
+ reportSchedule = new ReportSchedule(reportID, scheduleID, AppUtils.getUserID(request), request);
+ }
+ String formFields = "";
+ formFields = reportSchedule.getFormFields();
+ formFields = (formFields.length()>1)?formFields.substring(1):formFields;
+ String formFieldsArr[] = formFields.split("&");
+ String sessionParams[] = Globals.getSessionParamsForScheduling().split(",");
+
+ for (int i=0; i<sessionParams.length; i++) {
+ for (int j = 0; j < formFieldsArr.length; j++) {
+ if(formFieldsArr[j].startsWith(sessionParams[i])) {
+ request.setAttribute(sessionParams[i], formFieldsArr[j].substring(formFieldsArr[j].indexOf("=")+1));
+ }
+
+ }
+ }
+ request.getSession().setAttribute(AppConstants.SI_REPORT_SCHEDULE, reportSchedule);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ }
+ } // processSchedule
+
+ /****Remove Report Data from Session when Javascript throw error on onSubmit***/
+ public String removeReportDataFromSession (HttpServletRequest request, String nextPage) {
+ HttpSession session = request.getSession(false);
+/* if (session.getAttribute(AppConstants.RI_REPORT_DATA)!=null)
+ request.getSession().removeAttribute(AppConstants.RI_REPORT_DATA);
+ if (request.getAttribute(AppConstants.RI_REPORT_DATA)!=null)
+ request.removeAttribute(AppConstants.RI_REPORT_DATA);
+ if (session.getAttribute(AppConstants.RI_CHART_DATA)!=null)
+ request.getSession().removeAttribute(AppConstants.RI_CHART_DATA);
+ if (request.getAttribute(AppConstants.RI_CHART_DATA)!=null)
+ request.removeAttribute(AppConstants.RI_CHART_DATA);
+*/ /*if (session.getAttribute(AppConstants.SI_REPORT_RUNTIME)!=null)
+ request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);*/
+ //request.setAttribute(AppConstants.RI_RESET_ACTION, "Y");
+ return nextPage;
+
+ } // processScheduleDelete
+
+ /****Added to delete a schedule***/
+ public String processScheduleDelete(HttpServletRequest request, String nextPage) {
+
+ // Added for form field chaining in schedule tab so that setParamValues() is called
+ request.setAttribute(AppConstants.SCHEDULE_ACTION, "Y");
+ try {
+ String scheduleID = "";
+ scheduleID = AppUtils.getRequestValue(request, AppConstants.RI_SCHEDULE_ID);
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ ReportHandler rh = new ReportHandler();
+ ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
+ String myScheduleRepID = AppUtils.getRequestNvlValue(request, "myScheduleRepId");
+ if (myScheduleRepID.equals(""))
+ myScheduleRepID = "2670";
+ ReportSchedule reportSchedule = null;
+ if(rdef!=null) {
+ reportSchedule = new ReportSchedule(reportID, scheduleID, AppUtils.getUserID(request), request);
+ Connection connection = null;
+
+ try {
+ connection = DbUtils.startTransaction();
+ reportSchedule.deleteScheduleData(connection);
+ DbUtils.commitTransaction(connection);
+ } catch (ValidationException ve) {
+ (new ErrorHandler()).processError(request, ve);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ e.printStackTrace();
+ try {
+ DbUtils.rollbackTransaction(connection);
+ } catch (Exception e1) {e1.printStackTrace();}
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+ finally {
+ try {
+ DbUtils.clearConnection(connection);
+ } catch (Exception e1) {e1.printStackTrace();}
+ }
+ }
+ request.setAttribute(AppConstants.RI_REPORT_ID, myScheduleRepID);
+ request.setAttribute(AppConstants.RI_REFRESH, "y");
+ nextPage = this.reportRun(request, nextPage);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+ return nextPage;
+
+ } // processScheduleDelete
+
+ public String reportWizard(HttpServletRequest request, String nextPage) {
+ String action = nvl(request.getParameter(AppConstants.RI_WIZARD_ACTION),
+ AppConstants.WA_BACK);
+ String goToStep = nvl(request.getParameter(AppConstants.RI_GO_TO_STEP));
+ try {
+ (new WizardProcessor()).processWizardStep(request);
+
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ WizardSequence ws = rdef.getWizardSequence();
+ //debugLogger.debug("Step Count " + ws.getStepCount());
+ //debugLogger.debug("Dashboard " + ((ws instanceof WizardSequenceDashboard) ? ws.getStepCount(): "Not a Dashboard"));
+ //debugLogger.debug("GO TO STEP LENGTH " + goToStep.length());
+ //debugLogger.debug("NumDash Cols in Action Handler " + AppUtils.getRequestNvlValue(request, "numDashCols"));
+ if (goToStep.length() > 0)
+ ws.performGoToStep(goToStep);
+ else
+ ws.performAction(action, rdef);
+ } catch (ValidationException ve) {
+ (new ErrorHandler()).processError(request, ve);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ } catch (Throwable t) {
+ t.printStackTrace();
+ }
+
+ return nextPage;
+ } // reportWizard
+
+ public String refreshCache ( HttpServletRequest request, String nextPage ) {
+ //DataCache.refreshReportTableSources();
+ removeVariablesFromSession(request);
+ DataCache.refreshAll();
+ Globals.getAppUtils().resetUserCache();
+ request.setAttribute("message", "Cache Refreshed");
+ return nextPage;
+ }
+ public String reportCreate(HttpServletRequest request, String nextPage) {
+ try {
+ removeVariablesFromSession(request);
+ ReportDefinition rdef = ReportDefinition.createBlank(request);
+
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ // request.setAttribute(AppConstants.RI_CUR_STEP,
+ // AppConstants.WS_DEFINITION);
+ DataCache.refreshReportTableSources();
+ request.getSession().removeAttribute("remoteDB");
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportCreate
+
+ public String reportImportSave(HttpServletRequest request, String nextPage) {
+ try {
+ String reportXML = nvl(AppUtils.getRequestValue(request, "reportXML")).trim();
+
+ ReportHandler rh = new ReportHandler();
+ ReportDefinition rdef = rh.createReportDefinition(request, "-1", reportXML);
+ rdef.updateReportDefType();
+ rdef.generateWizardSequence(request);
+ rdef.setReportName("Import: " + rdef.getReportName());
+ rdef.clearAllDrillDowns();
+
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ } catch (RaptorException e) {
+ request.setAttribute("error_extra_msg", "Unable to parse XML. Nested error: ");
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportImportSave
+
+ private String reportLoad(HttpServletRequest request, String nextPage, boolean asCopy) {
+ try {
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+
+ ReportHandler rh = new ReportHandler();
+ ReportDefinition rdef = rh.loadReportDefinition(request, reportID);
+ if (asCopy)
+ rdef.setAsCopy(request);
+ else
+ rdef.checkUserWriteAccess(request);
+
+ rdef.getWizardSequence().performGoToStep(AppConstants.WS_DEFINITION);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+ // request.setAttribute(AppConstants.RI_CUR_STEP,
+ // AppConstants.WS_DEFINITION);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportLoad
+
+ public String reportCopy(HttpServletRequest request, String nextPage) {
+ return reportLoad(request, nextPage, true);
+ } // reportCopy
+
+ public String reportEdit(HttpServletRequest request, String nextPage) {
+ return reportLoad(request, nextPage, false);
+ } // reportEdit
+
+ public String reportDelete(HttpServletRequest request, String nextPage) {
+ try {
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ try {
+ int i = Integer.parseInt(reportID);
+ } catch(NumberFormatException ex) {
+ throw new UserDefinedException("Not a valid report id");
+ }
+ String userID = AppUtils.getUserID(request);
+
+ (new ReportSecurity(reportID)).checkUserDeleteAccess(request);
+
+ ReportLoader.deleteReportRecord(reportID);
+
+ return "deleted:true";
+ //nextPage = reportSearchExecute(request, nextPage);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ //return nextPage;
+ return "deleted:false";
+ } // reportDelete
+
+ private String generateSearchString(HttpServletRequest request) {
+ String searchString = AppUtils.getRequestNvlValue(request, AppConstants.RI_SEARCH_STRING);
+ boolean containFlag = AppUtils.getRequestFlag(request, AppConstants.RI_CONTAIN_FLAG);
+ return (searchString.length() > 0) ? ((containFlag ? "%" : "") + searchString + "%"):"";
+ } // generateSearchString
+
+ public String reportFormFieldPopup(HttpServletRequest request, String nextPage) {
+ try {
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+
+ FormField ff = rr.getFormField(request.getParameter(AppConstants.RI_FIELD_NAME));
+ ReportFormFields rff = rr.getReportFormFields();
+
+ int idx = 0;
+ FormField ff1 = null;
+ Map fieldNameMap = new HashMap();
+ int countOfFields = 0 ;
+ String userId = AppUtils.getUserID(request);
+ IdNameList lookup = ff.getLookupList();
+ String oldSQL = lookup.getOldSql();
+
+ if(AppUtils.getRequestFlag(request, AppConstants.RI_TEXTFIELD_POP)) {
+ for(rff.resetNext(); rff.hasNext(); idx++) {
+ ff1 = rff.getNext();
+ fieldNameMap.put(ff1.getFieldName(), ff1.getFieldDisplayName());
+ countOfFields++;
+ }
+
+
+ //List formParameter = new ArrayList();
+ String formField = "";
+ HashMap valuesMap = new HashMap();
+ for(int i = 0 ; i < rff.size(); i++) {
+ formField = ((FormField)rff.getFormField(i)).getFieldName();
+ if(request.getParameterValues(formField) != null && request.getParameterValues(formField).length > 1 ) {
+ String[] vals = (String[]) request.getParameterValues(formField);
+ String value = "";
+ StringBuffer valueBuf = new StringBuffer();
+ for(int ii = 0 ; ii < vals.length; ii++) {
+ if(ii == 0) valueBuf.append("(");
+ valueBuf.append(vals[ii]);
+ if(ii == vals.length-1) valueBuf.append(")");
+ else valueBuf.append(",");
+ }
+ value = valueBuf.toString();
+ valuesMap.put(fieldNameMap.get(formField), value);
+ } else if(request.getParameter(formField) != null) {
+ valuesMap.put(fieldNameMap.get(formField), request.getParameter(formField));
+ }
+ }
+ if(countOfFields != 0) {
+ IdNameSql lu = (IdNameSql) lookup;
+ String SQL = (oldSQL==null)?lu.getSql():oldSQL;
+ oldSQL = SQL;
+ Set set = valuesMap.entrySet();
+ String value = "";
+ StringBuffer valueBuf = new StringBuffer();
+ for(Iterator iter = set.iterator(); iter.hasNext(); ) {
+ Map.Entry entry = (Entry) iter.next();
+ if(entry.getValue() instanceof String[]) {
+ String[] vals = (String[]) entry.getValue();
+ for(int i = 0 ; i < vals.length; i++) {
+ if(i == 0) valueBuf.append("(");
+ valueBuf.append(vals[i]);
+ if(i == vals.length-1) valueBuf.append(")");
+ else valueBuf.append(",");
+ }
+ value = valueBuf.toString();
+ } else {
+ value = (String) entry.getValue();
+ }
+ // added so empty string would be treated as null value if not given in single quotes.
+ if(value==null || value.trim().length()<=0) value="NULL";
+ SQL = Utils.replaceInString(SQL, "["+entry.getKey()+"]", Utils.oracleSafe(value));
+ }
+ if(request.getParameter(ff.getFieldName())!=null) {
+ lookup = new IdNameSql(-1,SQL,null);
+ lookup.setOldSql(oldSQL);
+ }
+ else {
+ lookup = new IdNameSql(-1,SQL,lu.getDefaultSQL());
+ lookup.setOldSql(oldSQL);
+ }
+ //lookup.loadData("0");
+ }
+ if(lookup instanceof IdNameSql) ((IdNameSql)lookup).setDataSizeUsedinPopup(-3); // -3 indicates to run the count sql for pagination.
+ }
+ if(lookup instanceof IdNameSql) {
+ ((IdNameSql)lookup).loadUserData(request.getParameter(AppConstants.RI_NEXT_PAGE),
+ nvl(generateSearchString(request),"%"), rr.getDBInfo(),userId);
+ }
+
+ int dataSizeForPopUp = 0;
+ if(lookup instanceof IdNameSql) {
+ dataSizeForPopUp = ((IdNameSql)lookup).getDataSizeUsedinPopup();
+ } else
+ dataSizeForPopUp = lookup.getDataSize();
+
+ ff.setLookupList(lookup);
+ request.setAttribute("lookupList", lookup);
+ if(dataSizeForPopUp >= 0)
+ request.getSession().setAttribute(AppConstants.SI_DATA_SIZE_FOR_TEXTFIELD_POPUP, ""+dataSizeForPopUp);
+ } catch (RaptorException e) {
+ e.printStackTrace();
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+ return nextPage;
+ } // reportFormFieldPopup
+
+ public String reportValuesMapDefPopup(HttpServletRequest request, String nextPage) {
+ try {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String colName = AppUtils.getRequestNvlValue(request, "colName");
+ String colType = nvl(AppUtils.getRequestValue(request, "colType"),
+ AppConstants.CT_CHAR);
+ String displayName = AppUtils.getRequestNvlValue(request, "displayName");
+ String displayFormat = AppUtils.getRequestNvlValue(request, "displayFormat");
+ String tableId = AppUtils.getRequestNvlValue(request, "tableId");
+ String dbInfo = rdef.getDBInfo();
+ if (Utils.isNull(dbInfo)) {
+ dbInfo = (String) request.getSession().getAttribute("remoteDB");
+ }
+ /*String query = "SELECT x FROM (SELECT DISTINCT "
+ + (colType.equals(AppConstants.CT_DATE) ? ("TO_CHAR(" + colName + ", '"
+ + nvl(displayFormat, AppConstants.DEFAULT_DATE_FORMAT) + "')")
+ : colName) + " x FROM "
+ + rdef.getTableById(tableId).getTableName() + " WHERE " + colName
+ + " IS NOT NULL ORDER BY 1) xx WHERE ROWNUM <= "
+ + Globals.getDefaultPageSize();*/
+
+
+ String q1 = Globals.getReportValuesMapDefA();
+
+ String q2 = Globals.getReportValuesMapDefB();
+ q2 = q2.replace("[colName]", colName);
+ q2 = q2.replace("[nvl(displayFormat, AppConstants.DEFAULT_DATE_FORMAT)]", nvl(displayFormat, AppConstants.DEFAULT_DATE_FORMAT));
+
+ String q3 = Globals.getReportValuesMapDefC();
+ q3 = q3.replace("[colName]", colName);
+
+ String q4 = Globals.getReportValuesMapDefD();
+ q4 = q4.replace("[rdef.getTableById(tableId).getTableName()]", rdef.getTableById(tableId).getTableName());
+ q4 = q4.replace("[colName]", colName);
+ q4 = q4.replace("[Globals.getDefaultPageSize()]", String.valueOf(Globals.getDefaultPageSize()));
+
+ String query = q1 + (colType.equals(AppConstants.CT_DATE) ? q2 : q3) + q4;
+
+ DataSet ds = ConnectionUtils.getDataSet(query, dbInfo);
+ request.setAttribute(AppConstants.RI_DATA_SET, ds);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportValuesMapDefPopup
+
+ public String reportDrillDownToReportDefPopup(HttpServletRequest request, String nextPage) {
+ try {
+ // ReportDefinition rdef = (ReportDefinition)
+ // request.getSession().getAttribute(AppConstants.SI_REPORT_DEFINITION);
+ String ddReportID = AppUtils
+ .getRequestNvlValue(request, AppConstants.RI_REPORT_ID);
+ ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, ddReportID,
+ false);
+ if (ddRr != null)
+ request.setAttribute(AppConstants.RI_FORM_FIELDS, ddRr.getReportFormFields());
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportDrillDownToReportDefPopup
+
+ public String reportFilterDataPopup(HttpServletRequest request, String nextPage) {
+ try {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String colId = AppUtils.getRequestNvlValue(request, AppConstants.RI_COLUMN_ID);
+ IdNameColLookup lookup = null;
+ String dbInfo = rdef.getDBInfo();
+ if (Utils.isNull(dbInfo)) {
+ dbInfo = (String) request.getSession().getAttribute("remoteDB");
+ }
+ if (!AppUtils.getRequestFlag(request, AppConstants.RI_RESET_PARAMS))
+ lookup = (IdNameColLookup) request.getSession().getAttribute(
+ AppConstants.SI_COLUMN_LOOKUP);
+ if (lookup == null || (!colId.equals(lookup.getColId()))) {
+ DataColumnType dct = rdef.getColumnById(colId);
+ lookup = new IdNameColLookup(colId, rdef.getTableById(dct.getTableId())
+ .getTableName(), dct.getColName(), rdef.getSelectExpr(dct), dct
+ .getColName()
+ + (dct.getColType().equals(AppConstants.CT_DATE) ? " DESC" : ""));
+ request.getSession().setAttribute(AppConstants.SI_COLUMN_LOOKUP, lookup);
+ } // if
+
+ lookup.loadData(nvl(request.getParameter(AppConstants.RI_NEXT_PAGE), "0"),
+ generateSearchString(request), dbInfo);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportFilterDataPopup
+
+ public String reportShowSQLPopup(HttpServletRequest request, String nextPage) {
+ try {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ String reportSQL = rdef.generateSQL(AppUtils.getUserID(request),request);
+
+ String[] sqlClause = { "SELECT ", "FROM ", "WHERE ", "GROUP BY ", "HAVING ",
+ "ORDER BY " };
+
+ int idxNext = 0;
+ StringBuffer sb = new StringBuffer();
+ while (idxNext < sqlClause.length) {
+ sb.append("<b>");
+ if (idxNext > 0)
+ sb.append("&nbsp;&nbsp;&nbsp;&nbsp;");
+ sb.append(sqlClause[idxNext]);
+ sb.append("</b><br>\n");
+
+ int clauseStartPos = reportSQL.indexOf(sqlClause[idxNext])
+ + sqlClause[idxNext].length();
+ do
+ idxNext++;
+ while ((idxNext < sqlClause.length)
+ && (reportSQL.indexOf(sqlClause[idxNext]) < 0));
+
+ String clauseContent = null;
+ if (idxNext < sqlClause.length)
+ clauseContent = reportSQL.substring(clauseStartPos, reportSQL
+ .indexOf(sqlClause[idxNext]) - 1);
+ else
+ clauseContent = reportSQL.substring(clauseStartPos);
+
+ while (clauseContent.length() > 0) {
+ int braketCount = 0;
+ StringBuffer nextToken = new StringBuffer();
+ for (int i = 0; i < clauseContent.length(); i++) {
+ char ch = clauseContent.charAt(i);
+ nextToken.append(ch);
+ if (ch == '(')
+ braketCount++;
+ else if (ch == ')')
+ braketCount--;
+ else if (ch == ',')
+ if (braketCount == 0)
+ break;
+ } // for %>
+
+ sb.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;");
+ sb.append(nextToken.toString());
+ sb.append("<br>\n");
+
+ if (nextToken.length() < clauseContent.length())
+ clauseContent = clauseContent.substring(nextToken.length() + 1);
+ else
+ clauseContent = "";
+ } // while
+ } // while
+
+ request.setAttribute(AppConstants.RI_FORMATTED_SQL, sb.toString());
+ request.setAttribute(AppConstants.RI_PAGE_TITLE, "Generated SQL");
+ request.setAttribute(AppConstants.RI_PAGE_SUBTITLE, "Generated SQL for report "
+ + rdef.getReportName());
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // reportShowSQLPopup
+
+ public String testSchedCondPopup(HttpServletRequest request, String nextPage) {
+ try {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String sql = AppUtils.getRequestNvlValue(request, AppConstants.RI_FORMATTED_SQL);
+
+ request.setAttribute("msg_align", " align=center");
+ request.setAttribute(AppConstants.RI_PAGE_TITLE, "Test Scheduler Condition");
+ // request.setAttribute(AppConstants.RI_PAGE_SUBTITLE, ...);
+ //String query = "SELECT 1 FROM DUAL WHERE EXISTS (" + sql + ")";
+
+ String query = Globals.getTestSchedCondPopup();
+ query = query.replace("[sql]", sql);
+
+ DataSet ds = null;
+ String remoteDb = request.getParameter("remoteDbPrefix");
+ String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb
+ : rdef.getDBInfo();
+ ds = ConnectionUtils.getDataSet(sql, remoteDbPrefix);
+ // if ( (remoteDbPrefix!=null) &&
+ // (!remoteDbPrefix.equals(AppConstants.DB_LOCAL))) {
+ // Globals.getRDbUtils().setDBPrefix(remoteDbPrefix);
+ // ds = RemDbUtils.executeQuery(query);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(query);
+ if (ds.getRowCount() == 0)
+ request
+ .setAttribute(AppConstants.RI_FORMATTED_SQL,
+ "<br><b>Condition NOT satisfied</b> - email notification will NOT be send.<br><br>");
+ else
+ request
+ .setAttribute(AppConstants.RI_FORMATTED_SQL,
+ "<br><b>Condition satisfied</b> - email notification will be send.<br><br>");
+ } catch (Exception e) {
+ // nextPage = (new ErrorHandler()).processFatalError(request, e);
+ request.setAttribute(AppConstants.RI_FORMATTED_SQL, "<br><b>SQL ERROR</b> "
+ + e.getMessage() + "<br>Email notification will NOT be send.<br><br>");
+ }
+
+ return nextPage;
+ } // testSchedCondPopup
+
+ public String testRunSQLPopup(HttpServletRequest request, String nextPage) {
+ String sql = AppUtils.getRequestNvlValue(request, AppConstants.RI_FORMATTED_SQL);
+ if(nvl(sql).length()<=0) {
+ sql = AppUtils.getRequestNvlValue(request, "reportSQL");
+ }
+
+
+ boolean chkFormFieldSQL = AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_CHK_FIELD_SQL).equals("Y");
+ try {
+ if (!sql.trim().toUpperCase().startsWith("SELECT"))
+ throw new UserDefinedException(
+ "Invalid statement - the SQL must start with the keyword SELECT");
+
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ if (!chkFormFieldSQL) {
+ if (rdef.getFormFieldList() != null)
+ for (Iterator iter = rdef.getFormFieldList().getFormField().iterator(); iter
+ .hasNext();) {
+ FormFieldType fft = (FormFieldType) iter.next();
+ String fieldId = fft.getFieldId();
+ String fieldDisplay = rdef.getFormFieldDisplayName(fft);
+ /*
+ * if(paramValues.isParameterMultiValue(fieldId))
+ * generatedSQL = Utils.replaceInString(generatedSQL,
+ * fieldDisplay, nvl(formatListValue((String)
+ * paramValues.get(fieldId), null, false, false, null),
+ * "NULL")); else
+ */
+ sql = Utils.replaceInString(sql, fieldDisplay, "NULL");
+ } // for
+ } // if
+ DataSet ds = null;
+ String remoteDb = request.getParameter("remoteDbPrefix");
+ String remoteDbPrefix = (remoteDb != null && !remoteDb.equalsIgnoreCase("null")) ? remoteDb
+ : rdef.getDBInfo();
+ String userId = AppUtils.getUserID(request);
+ sql = Utils.replaceInString(sql, "[LOGGED_USERID]", userId);
+ String[] reqParameters = Globals.getRequestParams().split(",");
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ javax.servlet.http.HttpSession session = request.getSession();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("B4 testRunSQL " + sql));
+ if(request != null ) {
+ for (int i = 0; i < reqParameters.length; i++) {
+ if(!reqParameters[i].startsWith("ff"))
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i].toUpperCase()) );
+ else
+ sql = Utils.replaceInString(sql, "[" + reqParameters[i].toUpperCase()+"]", request.getParameter(reqParameters[i]) );
+ }
+ }
+ if(session != null ) {
+ for (int i = 0; i < sessionParameters.length; i++) {
+ //if(!sessionParameters[i].startsWith("ff"))
+ //sql = Utils.replaceInString(sql, "[" + 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]) );
+ //}
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("After testRunSQL " + sql));
+
+ ds = ConnectionUtils.getDataSet(sql, remoteDbPrefix, true);
+ // if ( (remoteDbPrefix!=null) &&
+ // (!remoteDbPrefix.equals(AppConstants.DB_LOCAL))) {
+ // Globals.getRDbUtils().setDBPrefix(remoteDbPrefix);
+ // ds = RemDbUtils.executeQuery(sql,
+ // Globals.getDefaultPageSize()+1);
+ // }
+ // else
+ // ds = DbUtils.executeQuery(sql, Globals.getDefaultPageSize()+1);
+ if (chkFormFieldSQL && ds.getRowCount() > 0) {
+ String id = ds.getString(0, "id");
+ String name = ds.getString(0, "name");
+ } // if
+
+ request.setAttribute(AppConstants.RI_DATA_SET, ds);
+ } catch (RaptorException e) {
+ request.setAttribute(AppConstants.RI_EXCEPTION, e);
+ }
+
+ return nextPage;
+ } // testRunSQLPopup
+
+ public String importSemaphorePopup(HttpServletRequest request, String nextPage) {
+ try {
+ (new WizardProcessor()).processImportSemaphorePopup(request);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // importSemaphorePopup
+
+ public String saveSemaphorePopup(HttpServletRequest request, String nextPage) {
+ try {
+ (new WizardProcessor()).processSemaphorePopup(request);
+ } catch (RaptorException e) {
+ nextPage = (new ErrorHandler()).processFatalError(request, e);
+ }
+
+ return nextPage;
+ } // saveSemaphorePopup
+
+ public String gotoJsp(HttpServletRequest request, String nextPage) {
+ return nextPage;
+ } // gotoJsp
+
+ public String downloadAll(HttpServletRequest request, String nextPage) throws InterruptedException, IOException, Exception {
+ String emailId = null;
+ String pdfAttachmentKey = AppUtils.getRequestValue(request, "pdfAttachmentKey");
+ boolean isFromSchedule = nvl(pdfAttachmentKey).length()>0;
+ if(!isFromSchedule)
+ emailId = AppUtils.getUserEmail(request);
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ SimpleDateFormat sdf1 = new SimpleDateFormat("yyyyMMdd");
+ java.util.Date currDate = new java.util.Date();
+ String timestamp = sdf.format(currDate);
+ String dateStr = sdf1.format(currDate);
+
+ String userId = null;
+ if(!isFromSchedule)
+ userId = AppUtils.getUserID(request);
+ else
+ userId = AppUtils.getRequestValue(request, "user_id");
+ Runtime runtime = Runtime.getRuntime();
+ ReportRuntime rr = null;
+ if(!isFromSchedule) {
+ rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ if(rr!=null) AppUtils.getUserEmail(request);
+ }
+ String scheduleId = "";
+
+ if(isFromSchedule) {
+ String reportID = null;
+ String report_email_sent_log_id = AppUtils.getRequestValue(request, "log_id");
+ /*String query = "Select user_id, rep_id from CR_REPORT_EMAIL_SENT_LOG" +
+ " where rownum = 1" +
+ " and gen_key='"+pdfAttachmentKey.trim()+"'" +
+ " and log_id ="+report_email_sent_log_id.trim() +
+ " and (sysdate - sent_date) < 1 ";*/
+
+ String query = Globals.getDownloadAllEmailSent();
+ query = query.replace("[pdfAttachmentKey.trim()]", pdfAttachmentKey.trim());
+ query = query.replace("[report_email_sent_log_id.trim()]", report_email_sent_log_id.trim());
+
+ DataSet ds = DbUtils.executeQuery(query, 1);
+ if(!ds.isEmpty()) {
+ userId = ds.getString(0,"user_id");
+ reportID = ds.getString(0, "rep_id");
+ request.setAttribute("schedule_email_userId", userId);
+ } else {
+ request.setAttribute("message", "This link has expired, please <a href=''>login</a> and regenerate the report");
+ return "raptor/message.jsp";
+ }
+
+ ReportHandler rh1 = new ReportHandler();
+
+ if(reportID !=null && nvl(pdfAttachmentKey).length()>0) {
+ rr = rh1.loadReportRuntime(request, reportID, true, 1);
+ rr.loadReportData(-1, userId, 1000 ,request, false /*download*/);
+ }
+
+ String d_sql = Globals.getDownloadAllGenKey();
+ d_sql = d_sql.replace("[pdfAttachmentKey]", pdfAttachmentKey);
+
+ //ds = DbUtils.executeQuery("select schedule_id from cr_report_email_sent_log u where U.GEN_KEY = '"+ pdfAttachmentKey + "'");
+
+ ds = DbUtils.executeQuery(d_sql);
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ scheduleId = ds.getString(i,0);
+ }
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("SQL2:\n"+ rr.getCachedSQL()));
+ String fileName = rr.getReportID()+"_"+userId+"_"+timestamp;
+ boolean flag = false;
+ logger.debug(EELFLoggerDelegate.debugLogger, (""+Utils.isDownloadFileExists(rr.getReportID()+"_"+userId+"_"+dateStr)));
+ // if(Utils.isDownloadFileExists(rr.getReportID()+"_"+userId+"_"+dateStr)) {
+ // flag = true;
+ // }
+
+ if(flag){
+ String strFileName = Utils.getLatestDownloadableFile(rr.getReportID()+"_"+userId+"_"+dateStr);
+ //debugLogger.debug("File Name " + strFileName);
+ StringBuffer messageBuffer = new StringBuffer("");
+ messageBuffer.append("Download data file using the following link<BR>");
+ messageBuffer.append("<a href=\"" + request.getContextPath() + "/raptor/dwnld/data/" +
+ strFileName + "\">click here</a>.</p>");
+ request.setAttribute("message", messageBuffer.toString());
+ }
+ else if(!flag) {
+ String whole_fileName = (Globals.getShellScriptDir() +AppConstants.SHELL_QUERY_DIR+ fileName+AppConstants.FT_SQL);
+ String whole_columnsfileName = (Globals.getShellScriptDir() +AppConstants.SHELL_QUERY_DIR+ fileName+AppConstants.FT_COLUMNS);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("FILENAME "+whole_fileName));
+
+ 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("|");
+ }
+ try {
+ PrintWriter xmlOut = new PrintWriter(new BufferedWriter(new FileWriter(new File(whole_columnsfileName))));
+ xmlOut.println(allColumnsBuffer.toString());
+ xmlOut.flush();
+ xmlOut.close();
+ } catch (IOException e) {e.printStackTrace();}
+ try {
+ PrintWriter xmlOut = new PrintWriter(new BufferedWriter(new FileWriter(new File(whole_fileName))));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("**************************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, (rr.getWholeSQL()));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("************************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, ("************************"));
+ logger.debug(EELFLoggerDelegate.debugLogger, (rr.parseReportSQL(rr.getWholeSQL())));
+ xmlOut.println(rr.parseReportSQL(rr.getWholeSQL()));
+ //xmlOut.println("******************");
+ //xmlOut.println(rr.getWholeSQL());
+ xmlOut.flush();
+ xmlOut.close();
+ } catch (IOException e) {e.printStackTrace();}
+
+ StringBuffer command = new StringBuffer(Globals.getShellScriptDir() + AppConstants.SHELL_SCRIPTS_DIR);
+ if(nvl(emailId).length()>0) {
+ command.append(AppConstants.SHELL_SCRIPT_NAME + " " + (fileName+AppConstants.FT_SQL));
+ command.append(" "+emailId);
+ }
+ else if (nvl(scheduleId).length()>0) {
+ command.append(AppConstants.SCHEDULE_SHELL_SCRIPT_NAME + " " + (fileName+AppConstants.FT_SQL));
+ command.append(" " + scheduleId);
+ }
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Command " + command));
+ Process downloadProcess = runtime.exec(command.toString());
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Command Executed "));
+ //Connection connection = DbUtils.getConnection();
+ Enumeration enum1 = rr.getParamKeys();
+ String value = "", key = "";
+ String paramStr = "";
+ StringBuffer paramBuffer = new StringBuffer();
+ if(enum1!=null) {
+ for (; enum1.hasMoreElements();) {
+ key = (String) enum1.nextElement();
+ value = rr.getParamValue(key);
+ paramBuffer.append(key+":"+value+" ");
+ }
+ paramStr = paramBuffer.toString();
+ }
+
+ StringBuffer retrieveUserEmailQry = null;
+ ArrayList userEmailList = new ArrayList();
+ if(nvl(scheduleId).length()>0) {
+ /*retrieveUserEmailQry = new StringBuffer();
+ retrieveUserEmailQry.append(" SELECT ");
+ retrieveUserEmailQry.append(" au.user_id ");
+ retrieveUserEmailQry.append(" FROM ");
+ retrieveUserEmailQry.append(" (SELECT rs.schedule_id, rs.rep_id FROM cr_report_schedule rs WHERE rs.enabled_yn='Y' AND rs.run_date IS NOT NULL ");
+ retrieveUserEmailQry.append(" AND rs.schedule_id = " + scheduleId + " ) x, cr_report r, app_user au ");
+ retrieveUserEmailQry.append(" WHERE ");
+ retrieveUserEmailQry.append("x.rep_id = r.rep_id ");
+ retrieveUserEmailQry.append(" AND au.user_id IN (SELECT rsu.user_id FROM cr_report_schedule_users rsu WHERE rsu.schedule_id = x.schedule_id and rsu.schedule_id = " + scheduleId );
+ retrieveUserEmailQry.append(" UNION ");
+ retrieveUserEmailQry.append(" SELECT ur.user_id FROM fn_user_role ur ");
+ retrieveUserEmailQry.append(" WHERE ur.role_id IN ");
+ retrieveUserEmailQry.append(" (SELECT rsu2.role_id FROM cr_report_schedule_users rsu2 ");
+ retrieveUserEmailQry.append(" WHERE rsu2.schedule_id = x.schedule_id and ");
+ retrieveUserEmailQry.append(" rsu2.schedule_id = "+ scheduleId + ")) ");*/
+
+ String r_sql = Globals.getDownloadAllRetrieve();
+ r_sql = r_sql.replace("[scheduleId]", scheduleId);
+
+ // DataSet ds = DbUtils.executeQuery(retrieveUserEmailQry.toString());
+ DataSet ds = DbUtils.executeQuery(r_sql);
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ userEmailList.add(ds.getString(i, 0));
+ }
+
+ }
+ // String insertQry = "insert into cr_report_dwnld_log (user_id,rep_id,file_name,dwnld_start_time,filter_params) values (?,?,?,?,?)";
+ String insertQry = Globals.getDownloadAllInsert();
+
+
+ Connection connection = null;
+ PreparedStatement pst = null;
+ try {
+ connection = DbUtils.getConnection();
+ pst = connection.prepareStatement(insertQry);
+ if(nvl(emailId).length()>0){
+ pst.setInt(1, Integer.parseInt(userId));
+ pst.setInt(2, Integer.parseInt(rr.getReportID()));
+ pst.setString(3, fileName+AppConstants.FT_ZIP);
+ pst.setTimestamp(4,new java.sql.Timestamp(currDate.getTime()));
+ pst.setString(5,paramStr);
+ pst.execute();
+ connection.commit();
+ } else {
+ for (int i = 0; i < userEmailList.size(); i++) {
+ pst.setInt(1, Integer.parseInt((String)userEmailList.get(i)));
+ pst.setInt(2, Integer.parseInt(rr.getReportID()));
+ pst.setString(3, fileName+AppConstants.FT_ZIP);
+ pst.setTimestamp(4,new java.sql.Timestamp(currDate.getTime()));
+ pst.setString(5,paramStr);
+ pst.execute();
+ connection.commit();
+ }
+ }
+ pst.close();
+ connection.close();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Data inserted"));
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ } catch (ReportSQLException ex) {
+ throw new RaptorException(ex);
+ } catch (Exception ex) {
+ throw new RaptorException (ex);
+ } finally {
+ try {
+ if(connection!=null)
+ connection.close();
+ if(pst!=null)
+ pst.close();
+ } catch (SQLException ex) {
+ throw new RaptorException(ex);
+ }
+ }
+ //DbUtils.commitTransaction(connection);
+ //DbUtils.clearConnection(connection);
+
+
+
+// debugLogger.debug("|"+downloadProcess.toString() + "|");
+// if (downloadProcess == null)
+// throw new Exception("unable to create a process for command:" +
+// command);
+// int retCode= 1;
+// try {
+// retCode= downloadProcess.waitFor();
+// } catch (InterruptedException e){
+// e.printStackTrace();
+// }
+// debugLogger.debug("retCode " + retCode);
+// Process child = rtime.exec("/bin/bash");
+// BufferedWriter outCommand = new BufferedWriter(new
+// OutputStreamWriter(child.getOutputStream()));
+// outCommand.write(Globals.getShellScriptName());
+// outCommand.flush();
+// int retCode = child.waitFor();
+// debugLogger.debug("RetCode " + retCode);
+ //request.setAttribute("message", "Shell Script is running in the background. You'll get an email once it is done");
+ }
+
+ return nextPage;
+ }
+ public String getChildDropDown(HttpServletRequest request, String nextPage) throws RaptorRuntimeException {
+
+ if(request.getParameter("firstTime") != null) { return nextPage; }
+
+ /*ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+
+ String c_master = request.getParameter("c_master");
+ java.util.HashMap valuesMap = Globals.getRequestParamtersMap(request);
+ request.setAttribute("c_master", c_master);
+
+ int idx = 0;
+ ReportFormFields rff = rr.getReportFormFields();
+ FormField ff = null;
+ for(rff.resetNext(); rff.hasNext(); idx++) {
+ ff = rff.getNext();
+
+
+ if(ff.getDependsOn() != null && ff.getDependsOn().trim() != "")
+ {
+ String val = request.getParameter(ff.getFieldName());
+ request.setAttribute(ff.getFieldName(), ff.getHtml(val, valuesMap, rr));
+ }
+
+ }
+ */
+ return nextPage;
+
+ }
+
+ private void removeVariablesFromSession(HttpServletRequest request) {
+ HttpSession session = request.getSession();
+ session.removeAttribute(AppConstants.DRILLDOWN_REPORTS_LIST);
+ session.removeAttribute(AppConstants.DRILLDOWN_INDEX);
+ session.removeAttribute(AppConstants.FORM_DRILLDOWN_INDEX);
+ 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);
+ session.removeAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP);
+ session.removeAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP);
+ Enumeration<String> enum1 = session.getAttributeNames();
+ String attributeName = "";
+ while(enum1.hasMoreElements()) {
+ attributeName = enum1.nextElement();
+ if(attributeName.startsWith("parent_")) {
+ session.removeAttribute(attributeName);
+ }
+ }
+ }
+
+
+ private TreeMap getListOfReportsFromDashBoardHTML(String htmlString) {
+ //String sourcestring = "<table border=1><tr><td>[Report#123]</td><td>[Report#124]</td></tr><tr><td>[Report#125]</td><td>[Report#126]</td></tr></table>";
+ String sourcestring = htmlString;
+ //Pattern re = Pattern.compile("([a-z]+)\\[([a-z]+)([=<>]+)([a-z]+)\\]",Pattern.CASE_INSENSITIVE);
+ //Pattern re = Pattern.compile("\\[([R][e][p][o][r][t][#])[(*)]\\]");
+ Pattern re = Pattern.compile("\\[(.*?)\\]"); //\\[(.*?)\\]
+ Matcher m = re.matcher(sourcestring);
+ HashMap hashReports = new HashMap();
+ int mIdx = 0;
+ while (m.find()){
+ for( int groupIdx = 0; groupIdx < m.groupCount(); groupIdx++ ){
+ String str = m.group(groupIdx);
+ //System.out.println(str);
+ hashReports.put(new String(Integer.toString(mIdx+1)), (str.substring(1).toLowerCase().startsWith("chart")?"c":"d") + str.substring(str.indexOf("#")+1, str.length()-1));
+ }
+ mIdx++;
+ }
+ // Sorting HashMap based on Keys
+ /*List mapKeys = new ArrayList(hashReports.keySet());
+ List mapValues = new ArrayList(hashReports.values());
+ hashReports.clear();
+ hashReports = null;
+ hashReports = new HashMap();
+
+ TreeSet sortedSet = new TreeSet(mapKeys);
+ Object[] sortedArray = sortedSet.toArray();
+ int size = sortedArray.length;
+ for (int i=0; i<size; i++) {
+ hashReports.put(sortedArray[i], mapValues.get(mapKeys.indexOf(sortedArray[i])));
+ }*/
+ return new TreeMap(hashReports);
+ }
+
+ public ReportData getReportData(ReportRuntime reportRuntime, HttpServletRequest request, String sql, int maxRows) throws RaptorException {
+
+
+ // replace the request parameter specified in the drill down
+ List reportCols = reportRuntime.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());
+ if (dc.isVisible()) {
+ //TODO: Drilldown URL
+ //sql = reportRuntime.parseReportSQLForDrillDownParams(sql, dc, request);
+ }
+ }
+
+ DataSet ds = null;
+ // try {
+ String dbInfo = reportRuntime.getDBInfo();
+ if(maxRows == 1)
+ sql += " limit "+ maxRows;
+ System.out.println("SQL getReportData()- " + sql);
+ ds = ConnectionUtils.getDataSet(sql, dbInfo);
+ int totalRows = 0;
+ /*if (reportRuntime.getReportDataSize() < 0) {*/
+ //String countSQL = "SELECT count(*) FROM (" + sql + ") x";
+ String dbType = "";
+
+ if (dbInfo!=null && (!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);
+ }
+ }
+
+ totalRows = ds.getRowCount();
+ /*}*/
+ ReportData rd = new ReportData(0, true);
+
+ if(totalRows > 0) {
+ // 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 = reportRuntime.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(
+ reportRuntime.getSemaphoreById(dc.getSemaphoreId()), dc.getColType(), dc
+ .getColFormat(), reportRuntime.getReportDefType().equals(
+ AppConstants.RD_SQL_BASED)));
+
+ /* TODO: Add Drilldown URL */
+ if (nvl(dc.getDrillDownURL()).length() > 0) {
+ childReportFormFields = reportRuntime.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);
+ }
+ }
+ }
+ //}
+
+ VisualManager visualManager = reportRuntime.getVisualManager();
+ rd.createColumn(dc.getColId(), dc.getDisplayName(), dc.getDisplayWidthInPxls(),dc.getDisplayHeaderAlignment(),
+ visualManager.isColumnVisible(dc.getColId()), visualManager
+ .getSortByColId().equals(dc.getColId()) ? visualManager
+ .getSortByAscDesc() : null, true, 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
+
+ // 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
+ if(maxRows > totalRows) maxRows = totalRows;
+ ArrayList reportDataList = new ArrayList();
+ for (int r = 0; r < maxRows; 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);
+ //Modified since ds is null.
+ DataValue dv = new DataValue();
+
+ if(ds.getRowCount()>0){
+ if(ds.getColumnIndex(dct.getColId())!= -1) {
+ dr.addDataValue(dv);
+ dv.setDisplayValue(ds.getString(r, dct.getColId()));
+ } else {
+ continue;
+ }
+
+ } else {
+ dv.setDisplayValue("");
+ }
+ dv.setColName(dct.getColName());
+ dv.setColId(dct.getColId());
+ dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+
+ //Add Drilldown URL to dv
+ if (nvl(dct.getDrillDownURL()).length() > 0) {
+
+ if(dv.getDisplayValue().length() > 0) {
+ dv.setDrillDownURL(reportRuntime.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
+
+ 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) {
+ //TODO: Below Drilldown URL
+// dv.setDrillDownURL(reportRuntime.parseDrillDownURL(r, /* c, */ds, dct,request, childReportFormFields));
+// dv.setDrillDowninPoPUp(dct.isDrillinPoPUp());
+// }
+//
+// 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());
+ DataRow colDataTotalsLinear = null;
+ if (colDataTotalsLinear == null)
+ colDataTotalsLinear = reportRuntime.generateColumnDataTotalsLinear(new ArrayList(reportCols), AppUtils.getUserID(request),
+ reportRuntime.getDbInfo(),request);
+
+ if(colDataTotalsLinear!=null)
+ rd.setColumnDataTotalsLinear(colDataTotalsLinear, "Total");
+ // 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 String formFieldRun(HttpServletRequest request, String nextPage) {
+ ReportRuntime rr = null;
+ rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ if(rr!=null) {
+ ReportJSONRuntime reportJSONRuntime = rr.createFormFieldJSONRuntime(request);
+ ObjectMapper mapper = new ObjectMapper();
+ //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(reportJSONRuntime);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+
+ }
+ return jsonInString;
+ }
+
+ return "";
+ }
+
+} // ActionHandler
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionMapping.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionMapping.java
new file mode 100644
index 00000000..93fff254
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ActionMapping.java
@@ -0,0 +1,34 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import java.util.HashMap;
+
+public class ActionMapping extends HashMap {
+
+ public void addAction(Action action) {
+ put(action.getAction(), action);
+ } // addAction
+
+ public Action getAction(String actionKey) {
+ return (Action) get(actionKey);
+ } // getAction
+
+} // ActionMapping
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Controller.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Controller.java
new file mode 100644
index 00000000..b2be8510
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/Controller.java
@@ -0,0 +1,124 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class Controller extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(Controller.class);
+ public Controller() {
+ }
+
+ public String processRequest(HttpServletRequest request) {
+ String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), "report.run");
+
+ return processRequest(actionKey, request);
+ } // processRequest
+
+ public String processRequest(String actionKey, HttpServletRequest request) {
+ Action action = null;
+ try {
+ action = Globals.getRaptorActionMapping().getAction(actionKey);
+ if (action == null)
+ throw new RaptorRuntimeException("Action not found");
+ } catch (RaptorException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. RaptorException: " + e.getMessage()));
+// if (actionKey.equals("system_upgrade")) // System override
+
+ return (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. Exception: " + e.getMessage()));
+ }
+
+ try {
+ Class[] paramTypes = new Class[2];
+ paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
+ paramTypes[1] = Class.forName("java.lang.String");
+
+ Class handlerClass = Class.forName(action.getControllerClass());
+ Object handler = handlerClass.newInstance();
+ Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(),
+ paramTypes);
+
+ Object[] paramValues = new Object[2];
+ paramValues[0] = request;
+ paramValues[1] = action.getJspName();
+
+ return (String) handlerMethod.invoke(handler, paramValues);
+ } catch (ClassNotFoundException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. ClassNotFoundException: " + e.getMessage()));
+ return (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ } catch (IllegalAccessException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. IllegalAccessException: " + e.getMessage()));
+ return (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (InstantiationException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. InstantiationException: " + e.getMessage()));
+ return (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (NoSuchMethodException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. NoSuchMethodException: " + e.getMessage()));
+ return (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (InvocationTargetException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. InvocationTargetException: " + e.getMessage()));
+ return (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }
+ } // processRequest
+
+ public void handleRequest(HttpServletRequest request, HttpServletResponse response,
+ ServletContext servletContext) throws Exception {
+ String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
+
+ handleRequest(actionKey, request, response, servletContext);
+ } // handleRequest
+
+ public void handleRequest(String actionKey, HttpServletRequest request,
+ HttpServletResponse response, ServletContext servletContext) throws Exception {
+ servletContext.getRequestDispatcher("/" + processRequest(actionKey, request)).forward(
+ request, response);
+ } // handleRequest
+
+} // Controller
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ErrorHandler.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ErrorHandler.java
new file mode 100644
index 00000000..bca56955
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/ErrorHandler.java
@@ -0,0 +1,112 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import java.util.ArrayList;
+
+import javax.servlet.http.HttpServletRequest;
+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.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+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.core.logging.format.AlarmSeverityEnum;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class ErrorHandler extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ErrorHandler.class);
+
+ public ErrorHandler() {
+ }
+
+ public void processError(HttpServletRequest request, String errorMsg) {
+ //Log.write(errorMsg, 2);
+ logger.error(EELFLoggerDelegate.debugLogger, (errorMsg));
+ ArrayList error_list = (ArrayList) request.getAttribute(AppConstants.RI_ERROR_LIST);
+ if (error_list == null)
+ error_list = new ArrayList(1);
+ error_list.add(errorMsg);
+ request.setAttribute(AppConstants.RI_ERROR_LIST, error_list);
+ } // processError
+
+ public void processError(HttpServletRequest request, RaptorException e) {
+ processError(request, "Exception: " + e.getMessage());
+ } // processError
+
+ private String getSessionLog(HttpServletRequest request) {
+ String[] sessionVariablesToLog = Globals.getLogVariablesInSession().split(",");
+ StringBuffer sessionLogStrBuf = new StringBuffer("\n");
+ sessionLogStrBuf.append("***** ADDITIONAL INFORMATION ******");
+ HttpSession session = request.getSession();
+ ReportRuntime rr = (ReportRuntime) session.getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ ReportDefinition rdef = (ReportDefinition) session.getAttribute(AppConstants.SI_REPORT_DEFINITION);
+ if(rr!=null) {
+ sessionLogStrBuf.append("\nWHILE RUNNING");
+ sessionLogStrBuf.append("\nReport Id="+rr.getReportID()+";\t");
+ sessionLogStrBuf.append("Report Name="+rr.getReportName()+";\t\n");
+ } else if (rdef != null) {
+ sessionLogStrBuf.append("\nWHILE CREATING/UPDATING");
+ sessionLogStrBuf.append("\nReport Id="+rdef.getReportID()+";\t");
+ sessionLogStrBuf.append("Report Name="+rdef.getReportName()+";\t\n");
+ }
+ for (int i = 0; i < sessionVariablesToLog.length; i++) {
+ if(session.getAttribute(sessionVariablesToLog[i])!=null)
+ sessionLogStrBuf.append(sessionVariablesToLog[i]+"="+(String)session.getAttribute(sessionVariablesToLog[i])+";\t");
+ }
+ sessionLogStrBuf.append("\n***********************************");
+ sessionLogStrBuf.append("\n");
+ return sessionLogStrBuf.toString();
+ }
+ public String processFatalError(HttpServletRequest request, RaptorException e) {
+ //Log.write("Fatal error [" + e.getClass().getName() + "]: " + nvl(e.getMessage()), 1);
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] Fatal error [" + e.getClass().getName() + "]: " + nvl(e.getMessage())+" "+ getSessionLog(request) + e.getMessage()),AlarmSeverityEnum.MAJOR);
+ if (e instanceof ReportSQLException) {
+ String errorSQL = ((ReportSQLException) e).getReportSQL();
+ if (nvl(errorSQL).length() > 0)
+ request.setAttribute("c_error_sql", errorSQL);
+ } // if
+ AppUtils.processErrorNotification(request, e);
+
+ request.setAttribute(AppConstants.RI_EXCEPTION, e);
+ return AppUtils.getErrorPage();
+ } // processFatalError
+
+ public String processFatalErrorWMenu(HttpServletRequest request, RaptorException e) {
+ //Log.write("Fatal error [" + e.getClass().getName() + "]: " + nvl(e.getMessage()), 1);
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] Fatal error [" + e.getClass().getName() + "]: " + nvl(e.getMessage())+" "+ getSessionLog(request) + e.getMessage()),AlarmSeverityEnum.MAJOR);
+ if (e instanceof ReportSQLException) {
+ String errorSQL = ((ReportSQLException) e).getReportSQL();
+ if (nvl(errorSQL).length() > 0)
+ request.setAttribute("c_error_sql", errorSQL);
+ } // if
+ AppUtils.processErrorNotification(request, e);
+
+ request.setAttribute(AppConstants.RI_EXCEPTION, e);
+ return AppUtils.getErrorPageWMenu();
+ } // processFatalError
+
+} // ErrorHandler
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardProcessor.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardProcessor.java
new file mode 100644
index 00000000..a9204db1
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardProcessor.java
@@ -0,0 +1,2354 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ValidationException;
+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.base.OrderBySeqComparator;
+import org.openecomp.portalsdk.analytics.model.base.OrderSeqComparator;
+import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.model.definition.ReportSchedule;
+import org.openecomp.portalsdk.analytics.model.runtime.FormField;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+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.XSSFilter;
+import org.openecomp.portalsdk.analytics.xmlobj.ChartDrillFormfield;
+import org.openecomp.portalsdk.analytics.xmlobj.ColFilterType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.analytics.xmlobj.DataSourceType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormFieldType;
+import org.openecomp.portalsdk.analytics.xmlobj.FormatType;
+import org.openecomp.portalsdk.analytics.xmlobj.JavascriptItemType;
+import org.openecomp.portalsdk.analytics.xmlobj.Marker;
+import org.openecomp.portalsdk.analytics.xmlobj.ObjectFactory;
+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>WizardProcessor.java</B> - This class is used to process the user input provided in the wizard.<BR/>
+ * It is called in creation as well as updation process. It builds report xml via JAXB using user<BR/>
+ * input. This is vital one, to store meta information of each report<BR/>
+ * ---------------------------------------------------------------------------------------------------<BR/>
+ *
+ *
+ * <U>Change Log</U><BR/><BR/>
+ *
+ * 31-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> For Time Series multi series property is exposed. </LI></UL>
+ * 28-Aug-2009 : Version 8.5.1 (Sundar);<UL><LI> If user login id is null, it would display user name when user is added for schedule. </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>
+ * 12-Aug-2009 : Version 8.5 (Sundar); <UL><LI> For Line Charts too options are captured and rendering is customized. </LI></UL>
+ * 29-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Maximum Excel Download size would be persisted if changed. </LI></UL>
+ * 14-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Schedule feature is added to Dashboard Reports. </LI></UL>
+ * 29-Jun-2009 : Version 8.4 (Sundar); <UL><LI> Options for <I>Compare to Previous year Chart</I> are processed.</LI>
+ * <LI> In the Bar chart Last Occuring Series/Category can be plotted as Bar or Line Renderer. </LI>
+ * </UL>
+ * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI> processChart method is modified to accommodate creating
+ * Bar Charts, Time Difference Charts and adding generic chart options.</LI></UL>
+ *
+ */
+
+public class WizardProcessor extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(WizardProcessor.class);
+
+ public WizardProcessor() {
+ }
+
+ private String adjustDataType(String oracleDataType) {
+ return oracleDataType.equals("VARCHAR2") ? AppConstants.CT_CHAR : oracleDataType;
+ // Probably should be expanded to convert any CHAR or VARCHAR type to
+ // CT_CHAR, number type to CT_NUMBER and date to CT_DATE
+ } // adjustDataType
+
+ public void persistReportDefinition(HttpServletRequest request, ReportDefinition rdef)
+ throws RaptorException {
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ if (rr != null && rr.getReportID().equals(rdef.getReportID()))
+ request.getSession().removeAttribute(AppConstants.SI_REPORT_RUNTIME);
+ rdef.persistReport(request);
+ } // persistReportDefinition
+
+ public void processWizardStep(HttpServletRequest request) throws Exception {
+ String action = nvl(request.getParameter(AppConstants.RI_WIZARD_ACTION),
+ AppConstants.WA_BACK);
+
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ ReportDefinition rdef = (new ReportHandler()).loadReportDefinition(request, reportID);
+ request.getSession().setAttribute(AppConstants.SI_REPORT_DEFINITION, rdef);
+
+ String curStep = rdef.getWizardSequence().getCurrentStep();
+ String curSubStep = rdef.getWizardSequence().getCurrentSubStep();
+ if (AppUtils.getRequestNvlValue(request, "showDashboardOptions").length()<=0)
+ request.setAttribute("showDashboardOptions", "F");
+ logger.debug(EELFLoggerDelegate.debugLogger, ("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^curStep " + curStep + " " + curSubStep + " " + action));
+ boolean reportUpdated = false;
+ if (!action.equals(AppConstants.WA_BACK)) {
+ if (curStep.equals(AppConstants.WS_DEFINITION)) {
+ reportUpdated = processDefinition(request);
+ } else if (curStep.equals(AppConstants.WS_SQL)) {
+ if (action.equals(AppConstants.WA_VALIDATE))
+ reportUpdated = processValidateSQL(request);
+ } else if (curStep.equals(AppConstants.WS_TABLES)) {
+ if (curSubStep.equals(AppConstants.WSS_ADD))
+ reportUpdated = processTableAdd(request);
+ else if (curSubStep.equals(AppConstants.WSS_EDIT))
+ reportUpdated = processTableEdit(request);
+ else if (action.equals(AppConstants.WA_DELETE))
+ reportUpdated = processTableDelete(request);
+ } else if (curStep.equals(AppConstants.WS_COLUMNS)) {
+ if (curSubStep.equals(AppConstants.WSS_ADD)
+ || curSubStep.equals(AppConstants.WSS_EDIT) || action.equals(AppConstants.WA_SAVE) || action.equals(AppConstants.WA_NEXT)) {
+ reportUpdated = processColumnAddEdit(request, curSubStep
+ .equals(AppConstants.WSS_EDIT) || curSubStep
+ .equals(AppConstants.WA_MODIFY));
+ //reportUpdated = processColumnAddEdit(request, true);
+ }
+ else if (curSubStep.equals(AppConstants.WSS_ADD_MULTI))
+ reportUpdated = processColumnAddMulti(request);
+ else if (curSubStep.equals(AppConstants.WSS_ORDER_ALL))
+ reportUpdated = processColumnOrderAll(request);
+ else if (action.equals(AppConstants.WA_DELETE))
+ reportUpdated = processColumnDelete(request);
+ else if (action.equals(AppConstants.WA_MOVE_UP))
+ reportUpdated = processColumnMoveUp(request);
+ else if (action.equals(AppConstants.WA_MOVE_DOWN))
+ reportUpdated = processColumnMoveDown(request);
+ } else if (curStep.equals(AppConstants.WS_FORM_FIELDS)) {
+ if (curSubStep.equals(AppConstants.WSS_ADD)
+ || curSubStep.equals(AppConstants.WSS_EDIT))
+ reportUpdated = processFormFieldAddEdit(request, curSubStep
+ .equals(AppConstants.WSS_EDIT), action);
+ else if (action.equals(AppConstants.WA_DELETE))
+ reportUpdated = processFormFieldDelete(request);
+ else if (action.equals(AppConstants.WA_MOVE_UP))
+ reportUpdated = processFormFieldMoveUp(request);
+ else if (action.equals(AppConstants.WA_MOVE_DOWN))
+ reportUpdated = processFormFieldMoveDown(request);
+ else if (action.equals(AppConstants.WSS_ADD_BLANK))
+ reportUpdated = processFormFieldBlank(request);
+ else if (action.equals(AppConstants.WSS_INFO_BAR))
+ reportUpdated = processFormFieldInfoBar(request);
+ } else if (curStep.equals(AppConstants.WS_FILTERS)) {
+ if (curSubStep.equals(AppConstants.WSS_ADD)
+ || curSubStep.equals(AppConstants.WSS_EDIT))
+ reportUpdated = processFilterAddEdit(request, curSubStep
+ .equals(AppConstants.WSS_EDIT));
+ else if (action.equals(AppConstants.WA_DELETE))
+ reportUpdated = processFilterDelete(request);
+ } else if (curStep.equals(AppConstants.WS_SORTING)) {
+ if (curSubStep.equals(AppConstants.WSS_ADD)
+ || curSubStep.equals(AppConstants.WSS_EDIT))
+ reportUpdated = processSortAddEdit(request, curSubStep
+ .equals(AppConstants.WSS_EDIT));
+ else if (curSubStep.equals(AppConstants.WSS_ORDER_ALL))
+ reportUpdated = processSortOrderAll(request);
+ else if (action.equals(AppConstants.WA_DELETE))
+ reportUpdated = processSortDelete(request);
+ else if (action.equals(AppConstants.WA_MOVE_UP))
+ reportUpdated = processSortMoveUp(request);
+ else if (action.equals(AppConstants.WA_MOVE_DOWN))
+ reportUpdated = processSortMoveDown(request);
+ } else if (curStep.equals(AppConstants.WS_JAVASCRIPT)) {
+ if (action.equals(AppConstants.WSS_ADD))
+ reportUpdated = processAddJavascriptElement(request);
+ else if (action.equals(AppConstants.WA_SAVE))
+ reportUpdated = processSaveJavascriptElement(request);
+ else if (action.equals(AppConstants.WA_DELETE))
+ reportUpdated = processDeleteJavascriptElement(request);
+ else
+ reportUpdated = processJavascript(request);
+ } else if (curStep.equals(AppConstants.WS_CHART)) {
+ reportUpdated = processChart(request, action);
+ } else if (curStep.equals(AppConstants.WS_USER_ACCESS)) {
+ reportUpdated = processUserAccess(request, action);
+ } else if (curStep.equals(AppConstants.WS_REPORT_LOG)) {
+ if (action.equals(AppConstants.WA_DELETE_USER))
+ reportUpdated = processClearLog(request);
+ } else if (curStep.equals(AppConstants.WS_SCHEDULE)) {
+ reportUpdated = processSchedule(request, action);
+ } else if(curStep.equals(AppConstants.WS_DATA_FORECASTING)) {
+ reportUpdated = processForecasting(request, action);
+ }
+ /****For Report Maps - Start*****/
+ else if (curStep.equals(AppConstants.WS_MAP)) {
+ reportUpdated = processMap(request, action);
+ }
+ /****For Report Maps - End*****/
+
+ // else
+ }
+ if (reportUpdated)
+ persistReportDefinition(request, rdef);
+ } // processWizardStep
+
+ public void processImportSemaphorePopup(HttpServletRequest request) throws RaptorException {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String importReportId = AppUtils
+ .getRequestNvlValue(request, AppConstants.RI_REPORT_ID);
+ ReportRuntime rr = (new ReportHandler()).loadReportRuntime(request, importReportId,
+ false);
+
+ ArrayList importedList = new ArrayList();
+ if (rr.getSemaphoreList() != null)
+ for (Iterator iter = rr.getSemaphoreList().getSemaphore().iterator(); iter
+ .hasNext();) {
+ SemaphoreType sem = rdef.addSemaphore(new ObjectFactory(),
+ (SemaphoreType) iter.next());
+ importedList
+ .add(new IdNameValue(sem.getSemaphoreId(), sem.getSemaphoreName()));
+ } // for
+
+ if (importedList.size() > 0) {
+ request.setAttribute(AppConstants.RI_DATA_SET, importedList);
+ persistReportDefinition(request, rdef);
+ } // if
+ } // processImportSemaphorePopup
+
+ public void processSemaphorePopup(HttpServletRequest request) throws RaptorException {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String semaphoreId = AppUtils.getRequestNvlValue(request, "semaphoreId");
+ String semaphoreName = AppUtils.getRequestNvlValue(request, "semaphoreName");
+ String semaphoreType = AppUtils.getRequestNvlValue(request, "semaphoreType");
+
+ SemaphoreType semaphore = rdef.getSemaphoreById(semaphoreId);
+ if (semaphore == null) {
+ semaphore = rdef.addSemaphoreType(new ObjectFactory(), semaphoreName,
+ semaphoreType, null);
+ semaphoreId = semaphore.getSemaphoreId();
+ request.setAttribute("semaphoreId", semaphoreId);
+ } else {
+ rdef.deleteSemaphore(semaphore);
+ semaphore.setSemaphoreName(semaphoreName);
+ semaphore.setSemaphoreType(semaphoreType);
+
+ rdef.setSemaphore(semaphore);
+ }
+
+ String[] formatId = request.getParameterValues("formatId");
+ String[] lessThanValue = request.getParameterValues("lessThanValue");
+ String[] expression = request.getParameterValues("expression");
+ String[] bold = request.getParameterValues("bold");
+ String[] italic = request.getParameterValues("italic");
+ String[] underline = request.getParameterValues("underline");
+ String[] bgColor = request.getParameterValues("bgColor");
+ String[] fontColor = request.getParameterValues("fontColor");
+ String[] fontFace = request.getParameterValues("fontFace");
+ String[] fontSize = request.getParameterValues("fontSize");
+ //String[] anyFmt = request.getParameterValues("anyFmt");
+
+ // String[] alignment = request.getParameterValues("alignment");
+
+ for (int i = 0; i < lessThanValue.length; i++)
+ if (i == 0 || nvl(lessThanValue[i]).length() > 0) {
+ FormatType fmt = null;
+ if (i == 0 || nvl(formatId[i]).length() > 0)
+ fmt = rdef.getSemaphoreFormatById(semaphore, nvl(formatId[i]));
+ if (fmt == null)
+ fmt = rdef.addEmptyFormatType(new ObjectFactory(), semaphore);
+
+ fmt.setLessThanValue(nvl(lessThanValue[i]));
+ fmt.setExpression(nvl(expression[i]));
+ fmt.setBold(bold[i].equals("Y"));
+ fmt.setItalic(italic[i].equals("Y"));
+ fmt.setUnderline(underline[i].equals("Y"));
+ fmt.setBgColor(bgColor[i]);
+ fmt.setFontColor(fontColor[i]);
+ fmt.setFontFace(fontFace[i]);
+ fmt.setFontSize(fontSize[i]);
+ //fmt.setAnyFmt((anyFmt[i]!=null)?anyFmt[i].startsWith("Y"):false);
+ // fmt.setAlignment(alignment[i]);
+ } else if (nvl(formatId[i]).length() > 0)
+ rdef.deleteFormatType(semaphore, formatId[i]);
+
+ persistReportDefinition(request, rdef);
+ } // processSemaphorePopup
+
+ private boolean processDefinition(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String reportName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportName"));
+ String reportDescr = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportDescr"));
+ String folderId = AppUtils.getRequestNvlValue(request, "folder_id");
+ boolean isAllowSchedule = (AppUtils.getRequestNvlValue(request, "allowSchedule").length()<=0?"N":AppUtils.getRequestNvlValue(request, "allowSchedule")).startsWith("Y");
+ boolean isColumnGroup = (AppUtils.getRequestNvlValue(request, "multiGroupColumn").length()<=0?"N":AppUtils.getRequestNvlValue(request, "multiGroupColumn")).startsWith("Y");
+ boolean isTopDown = (AppUtils.getRequestNvlValue(request, "topDown").length()<=0?"N":AppUtils.getRequestNvlValue(request, "topDown")).startsWith("Y");
+ boolean isSizedByContent= (AppUtils.getRequestNvlValue(request, "sizedByContent").length()<=0?"N":AppUtils.getRequestNvlValue(request, "sizedByContent")).startsWith("Y");
+ boolean reportsInNewWindow = false;
+ boolean hideFormFieldAfterRun = false;
+
+ /*recurrance in schedule tab - Start*/
+ String isOneTimeScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isOneTimeScheduleAllowed"),"N");
+ String isHourlyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isHourlyScheduleAllowed"),"N");
+ String isDailyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isDailyScheduleAllowed"),"N");
+ String isDailyMFScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isDailyMFScheduleAllowed"),"N");
+ String isWeeklyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isWeeklyScheduleAllowed"),"N");
+ String isMonthlyScheduleAllowed = nvl(AppUtils.getRequestValue(request, "isMonthlyScheduleAllowed"),"N");
+ //System.out.println("//////////// + isOneTimeScheduleAllowed : " + isOneTimeScheduleAllowed);
+ /*recurrance in schedule tab - End*/
+
+
+ if (reportDescr.length() > 1000)
+ reportDescr = reportDescr.substring(0, 1000);
+ boolean reportUpdated;
+
+ String reportType = AppUtils.getRequestNvlValue(request, "reportType");
+
+
+
+ //rdef.setReportName(reportName);
+ //rdef.setReportDescr(reportDescr);
+ //rdef.setReportType(reportType);
+ rdef.setFolderId(folderId);
+// debugLogger.debug("setting folder ID = " + folderId);
+ if(reportType.equals(AppConstants.RT_DASHBOARD)) {
+ rdef.setReportName(reportName);
+ rdef.setReportDescr(reportDescr);
+ rdef.setReportType(reportType);
+ String dashboardLayoutHTML = AppUtils.getRequestNvlValue(request, "dashboardLayoutHTML");
+ rdef.setDashboardLayoutHTML(dashboardLayoutHTML);
+ String dataContainerHeight = nvl(AppUtils.getRequestValue(request, "heightContainer"), "auto");
+ String dataContainerWidth = nvl(AppUtils.getRequestValue(request, "widthContainer"), "auto");
+ rdef.setDataContainerHeight(dataContainerHeight);
+ rdef.setDataContainerWidth(dataContainerWidth);
+ rdef.setAllowSchedule(isAllowSchedule?"Y":"N");
+
+
+ /*
+ String numDashCols = AppUtils.getRequestNvlValue(request, "numDashCols");
+ String reports1 = AppUtils.getRequestNvlValue(request, "reports1");
+ String reports2 = AppUtils.getRequestNvlValue(request, "reports2");
+ String reports3 = AppUtils.getRequestNvlValue(request, "reports3");
+ String reports4 = AppUtils.getRequestNvlValue(request, "reports4");
+ String repBgColor1 = AppUtils.getRequestNvlValue(request, "repBgColor1");
+ String repBgColor2 = AppUtils.getRequestNvlValue(request, "repBgColor2");
+ String repBgColor3 = AppUtils.getRequestNvlValue(request, "repBgColor3");
+ String repBgColor4 = AppUtils.getRequestNvlValue(request, "repBgColor4");
+
+ //List reports = rdef.getDashBoardReports();
+ rdef.setNumDashCols(numDashCols);
+ DashboardReports reportsList = new DashboardReportsImpl();
+
+ String reports[] = new String[]{reports1, reports2, reports3, reports4};
+ String repBgColors[] = new String[]{repBgColor1, repBgColor2, repBgColor3, repBgColor4};
+ for (int i = 0; i < reports.length; i++) {
+ Reports report = new ReportsImpl();
+ report.setReportId(reports[i]);
+ report.setBgcolor(repBgColors[i]);
+ reportsList.getReportsList().add(report);
+ }
+
+
+
+ rdef.setDashBoardReports(reportsList);
+ */
+ reportUpdated = true;
+
+// reportUpdated = (!(reportName.equals(nvl(rdef.getReportName()))
+// && reportDescr.equals(nvl(rdef.getReportDescr()))
+// && reportType.equals(nvl(rdef.getReportType()))
+// && numDashCols.equals(nvl(rdef.getNumDashCols()))));
+//// && rdef.getR
+
+ if (rdef.getWizardSequence() instanceof WizardSequence)
+ rdef.generateWizardSequence(request);
+
+ } else {
+
+ if (AppUtils.getRequestNvlValue(request, "reportType").equals(AppConstants.RT_CROSSTAB) || rdef.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+
+ String widthNo = AppUtils.getRequestNvlValue(request, "widthNo");
+ if(nvl(widthNo).endsWith("px"))
+ rdef.setWidthNoColumn(widthNo);
+ else
+ rdef.setWidthNoColumn(widthNo+"px");
+ }
+
+ String dataGridAlign = AppUtils.getRequestNvlValue(request, "dataGridAlign");
+ if(nvl(dataGridAlign).length()>0) {
+ rdef.setDataGridAlign(dataGridAlign);
+ } else {
+ rdef.setDataGridAlign("left");
+ }
+
+ String pdfImgLogo = AppUtils.getRequestNvlValue(request, "pdfImg");
+ if(nvl(pdfImgLogo).length()>0)
+ rdef.setPdfImg(pdfImgLogo);
+ else
+ rdef.setPdfImg(null);
+ String emptyMessage = AppUtils.getRequestNvlValue(request, "emptyMessage");
+ if(nvl(emptyMessage).length()>0)
+ rdef.setEmptyMessage(emptyMessage);
+ else
+ rdef.setEmptyMessage("");
+ String formHelp = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "formHelp"));
+ //String rDashboardType = nvl(AppUtils.getRequestValue(request, "showDashboardOptions"), "N");
+ //rdef.setDashboardType(rDashboardType.equals("Y"));
+ int excelDownloadSize = 500;
+ try {
+ excelDownloadSize = Integer.parseInt(AppUtils.getRequestValue(request, "excelDownloadSize"));
+ } catch (NumberFormatException ex) {}
+ if(AppUtils.getRequestNvlValue(request, "excelDownloadSize").length()>0)
+ rdef.setMaxRowsInExcelDownload(Integer.parseInt(AppUtils.getRequestValue(request, "excelDownloadSize")));
+ if(AppUtils.getRequestNvlValue(request, "reportInNewWindow").length()>0)
+ reportsInNewWindow = AppUtils.getRequestNvlValue(request,"reportInNewWindow").equals("Y");
+ if(AppUtils.getRequestNvlValue(request, "hideFormFieldsAfterRun").length()>0)
+ hideFormFieldAfterRun = AppUtils.getRequestNvlValue(request,"hideFormFieldsAfterRun").equals("Y");
+
+
+ if(AppUtils.getRequestNvlValue(request, "displayFolderTree").length()>0)
+ rdef.setDisplayFolderTree(AppUtils.getRequestNvlValue(request,"displayFolderTree").equals("Y"));
+ else
+ rdef.setDisplayFolderTree(false);
+ String dataSource = AppUtils.getRequestNvlValue(request, "dataSource");
+ String dbType = Globals.getDBType();
+ String schemaSql = Globals.getRemoteDbSchemaSqlWithWhereClause();
+ schemaSql = schemaSql.replace("[schema_id]", dataSource);
+ DataSet ds = null;
+ try {
+ ds = DbUtils.executeQuery(schemaSql);
+
+ String prefix = "", desc = "";
+
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ dbType = ds.getItem(i, 2);
+ }
+ }
+ catch (Exception e) {}
+
+ int pageSize = Globals.getDefaultPageSize();
+ try {
+ pageSize = Integer.parseInt(AppUtils.getRequestValue(request, "pageSize"));
+ } catch (NumberFormatException e) {
+ }
+ String rApproved = nvl(AppUtils.getRequestValue(request, "menuApproved"), "N");
+ String menuID = "";
+ String[] menuIDs = request.getParameterValues("menuID");
+ if (menuIDs != null)
+ for (int i = 0; i < menuIDs.length; i++)
+ menuID += (menuID.length() == 0 ? "" : "|") + menuIDs[i];
+
+// boolean additionalFieldsShown = AppUtils.getRequestNvlValue(request,
+// "additionalFieldsShown").equals("Y");
+ boolean rRCSDisabled = AppUtils.getRequestNvlValue(request, "runtimeColSortDisabled").equals("Y");
+ String reportDefType = AppUtils.getRequestNvlValue(request, "reportDefType");
+ String dataContainerHeight = nvl(AppUtils.getRequestValue(request, "heightContainer"), "auto");
+ String dataContainerWidth = nvl(AppUtils.getRequestValue(request, "widthContainer"), "auto");
+
+ String displayOptions = nvl(AppUtils.getRequestValue(request, "hideForm"), "N")
+ + nvl(AppUtils.getRequestValue(request, "hideChart"), "N")
+ + nvl(AppUtils.getRequestValue(request, "hideData"), "N")
+ + nvl(AppUtils.getRequestValue(request, "hideBtns"), "N")
+ + nvl(AppUtils.getRequestValue(request, "hideMap"), "N")
+ + nvl(AppUtils.getRequestValue(request, "hideExcelIcons"), "N")
+ + nvl(AppUtils.getRequestValue(request, "hidePDFIcons"), "N");
+/* StringBuffer dashboardOptions = new StringBuffer("");
+ dashboardOptions.append((nvl(AppUtils.getRequestValue(request, "hide"),"chart").equals("chart"))?"Y":"N");
+ dashboardOptions.append((nvl(AppUtils.getRequestValue(request, "hide"),"").equals("data"))?"Y":"N");
+ dashboardOptions.append((nvl(AppUtils.getRequestValue(request, "hideBtns"),"").equals("Y"))?"Y":"N");*/
+
+ String numFormCols = nvl(AppUtils.getRequestValue(request, "numFormCols"), "1");
+ String reportTitle = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportTitle"));
+ String reportSubTitle = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportSubTitle"));
+ String reportHeader = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportHeader"));
+ String reportFooter = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportFooter"));
+
+ int frozenColumns = 0;
+ try {
+ frozenColumns = Integer.parseInt(AppUtils.getRequestValue(request, "frozenColumns"));
+ } catch (NumberFormatException ex) {
+
+ }
+
+/* reportUpdated = (!(reportName.equals(nvl(rdef.getReportName()))))
+ && (!(reportDescr.equals(nvl(rdef.getReportDescr()))))
+ && (!(formHelp.equals(nvl(rdef.getFormHelpText()))))
+ && (!(reportType.equals(nvl(rdef.getReportType()))))
+ && (pageSize != rdef.getPageSize()) &&
+ // rPublic.equals(rdef.isPublic()?"Y":"N")&&
+ (!(menuID.equals(nvl(rdef.getMenuID()))))
+ && (!(rApproved.equals(rdef.isMenuApproved()))) && (additionalFieldsShown ? ((!(rRCSDisabled
+ .equals(rdef.isRuntimeColSortDisabled())))
+ && (!(displayOptions.equals(nvl(rdef.getDisplayOptions()))))
+ && (!(dashboardOptions.equals(nvl(rdef.getDashboardOptions()))))
+ && (!(numFormCols.equals(nvl(rdef.getNumFormCols()))))
+ && (!(reportTitle.equals(nvl(rdef.getReportTitle()))))
+ && (!(reportSubTitle.equals(nvl(rdef.getReportSubTitle()))))
+ && (!(reportHeader.equals(nvl(rdef.getReportHeader())))) && (!(reportFooter
+ .equals(nvl(rdef.getReportFooter()))))&& (reportsInNewWindow != rdef.isReportInNewWindow())):true);
+*/
+/* reportUpdated = rRCSDisabled ==(rdef.isRuntimeColSortDisabled()
+ && displayOptions.equals(nvl(rdef.getDisplayOptions()))
+ //&& dashboardOptions.equals(nvl(rdef.getDashboardOptions()))
+ && numFormCols.equals(nvl(rdef.getNumFormCols()))
+ && reportTitle.equals(nvl(rdef.getReportTitle()))
+ && reportSubTitle.equals(nvl(rdef.getReportSubTitle()))
+ && reportHeader.equals(nvl(rdef.getReportHeader()))
+ && reportsInNewWindow == rdef.isReportInNewWindow()
+ && reportFooter.equals(nvl(rdef.getReportFooter())))
+ ;*/
+
+
+ /*reportUpdated = (!(reportName.equals(nvl(rdef.getReportName()))
+ && reportDescr.equals(nvl(rdef.getReportDescr()))
+ && formHelp.equals(nvl(rdef.getFormHelpText()))
+ && reportType.equals(nvl(rdef.getReportType()))
+ && (pageSize == rdef.getPageSize())
+ && excelDownloadSize == rdef.getMaxRowsInExcelDownload()
+ && reportsInNewWindow == rdef.isReportInNewWindow()
+ && displayOptions.equals(rdef.getDisplayOptions())
+ && dataContainerHeight.equals(rdef.getDataContainerHeight())
+ && dataContainerWidth.equals(rdef.getDataContainerWidth())
+ && (isAllowSchedule ==(rdef.isAllowSchedule()))
+ // rPublic.equals(rdef.isPublic()?"Y":"N")&&
+ && menuID.equals(nvl(rdef.getMenuID()))
+ && rApproved.equals(rdef.isMenuApproved() ? "Y" : "N") && (rRCSDisabled
+ == ((rdef.isRuntimeColSortDisabled())
+ && displayOptions.equals(nvl(rdef.getDisplayOptions()))
+ //&& dashboardOptions.equals(nvl(rdef.getDashboardOptions()))
+ && numFormCols.equals(nvl(rdef.getNumFormCols()))
+ && reportTitle.equals(nvl(rdef.getReportTitle()))
+ && reportSubTitle.equals(nvl(rdef.getReportSubTitle()))
+ && isOneTimeScheduleAllowed.equals(nvl(rdef.getIsOneTimeScheduleAllowed()))
+ && isHourlyScheduleAllowed.equals(nvl(rdef.getIsHourlyScheduleAllowed()))
+ && isDailyScheduleAllowed.equals(nvl(rdef.getIsDailyScheduleAllowed()))
+ && isDailyMFScheduleAllowed.equals(nvl(rdef.getIsDailyMFScheduleAllowed()))
+ && isWeeklyScheduleAllowed.equals(nvl(rdef.getIsWeeklyScheduleAllowed()))
+ && isMonthlyScheduleAllowed.equals(nvl(rdef.getIsMonthlyScheduleAllowed()))
+ && reportHeader.equals(nvl(rdef.getReportHeader())) && reportFooter
+ .equals(nvl(rdef.getReportFooter()))))
+ )); */
+ rdef.setReportName(reportName);
+ rdef.setReportDescr(reportDescr);
+ rdef.setFormHelpText(formHelp);
+ rdef.setReportType(reportType);
+ rdef.setPageSize(pageSize);
+ rdef.setDBInfo(dataSource);
+ rdef.setDBType(dbType);
+ rdef.setDisplayOptions(displayOptions);
+ rdef.setDataContainerHeight(dataContainerHeight);
+ rdef.setDataContainerWidth(dataContainerWidth);
+ rdef.setAllowSchedule(isAllowSchedule?"Y":"N");
+ rdef.setMultiGroupColumn(isColumnGroup?"Y":"N");
+ rdef.setTopDown(isTopDown?"Y":"N");
+ rdef.setSizedByContent(isSizedByContent?"Y":"N");
+ // rdef.setPublic(rPublic.equals("Y"));
+ rdef.setMenuID(menuID);
+ rdef.setMenuApproved(rApproved.equals("Y"));
+ if (reportDefType.length() > 0)
+ rdef.setReportDefType(reportDefType);
+/* if(rdef.isDashboardType()) {
+ rdef.setDashboardOptions(dashboardOptions.toString());
+ }*/
+ rdef.setHideFormFieldAfterRun(hideFormFieldAfterRun);
+ rdef.setReportInNewWindow(reportsInNewWindow);
+ rdef.setRuntimeColSortDisabled(rRCSDisabled);
+ rdef.setNumFormCols(numFormCols);
+ rdef.setReportTitle(reportTitle);
+ rdef.setReportSubTitle(reportSubTitle);
+ rdef.setReportHeader(reportHeader);
+ rdef.setReportFooter(reportFooter);
+ rdef.setIsOneTimeScheduleAllowed(isOneTimeScheduleAllowed);
+ rdef.setIsHourlyScheduleAllowed(isHourlyScheduleAllowed);
+ rdef.setIsDailyScheduleAllowed(isDailyScheduleAllowed);
+ rdef.setIsDailyMFScheduleAllowed(isDailyMFScheduleAllowed);
+ rdef.setIsWeeklyScheduleAllowed(isWeeklyScheduleAllowed);
+ rdef.setIsMonthlyScheduleAllowed(isMonthlyScheduleAllowed);
+ rdef.setFrozenColumns(frozenColumns);
+
+ } // if
+
+ if (rdef.getWizardSequence() instanceof WizardSequence)
+ rdef.generateWizardSequence(request);
+
+
+ /*
+ * if(formHelp.length()>255) formHelp = formHelp.substring(0, 255);
+ */
+
+
+ // String rPublic = nvl(AppUtils.getRequestValue(request, "public"),
+ // "N");
+ // String menuID = AppUtils.getRequestNvlValue(request, "menuID");
+
+// boolean dashboardOptionsShown = AppUtils.getRequestNvlValue(request,
+// "dashboardOptionsShown").equals("Y");
+
+ reportUpdated = true;
+
+ if (rdef.getReportID().equals("-1"))
+ // Always need to persist new report - in case it is a copy
+ reportUpdated = true;
+
+ return reportUpdated;
+ } // processDefinition
+
+ private boolean processTableAdd(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String tableName = AppUtils.getRequestNvlValue(request, "tableName").toUpperCase();
+ String tableId = rdef.getUniqueTableId(tableName);
+
+ String joinTableExpr = null;
+ String joinTableId = null;
+
+ DataSourceType joinTable =
+ rdef.getTableById(AppUtils.getRequestValue(request, "joinTableName"));
+ if (joinTable != null) {
+ String joinTableName = joinTable.getTableName();
+ joinTableId = joinTable.getTableId();
+
+ String joinExpr = AppUtils.getRequestNvlValue(request, "joinExpr").toUpperCase();
+
+ joinTableExpr = joinExpr.replaceAll("\\["+tableName+"\\]", tableId);
+ joinTableExpr = joinTableExpr.replaceAll("\\["+joinTableName+"\\]", joinTableId);
+// debugLogger.debug("joinExpr : "+joinExpr+"\njoinTableExpr : "+ joinTableExpr);
+ }
+
+ rdef.addDataSourceType(new ObjectFactory(), tableId, tableName, AppUtils
+ .getRequestNvlValue(request, "tablePK"), AppUtils.getRequestNvlValue(request,
+ "displayName"), joinTableId, joinTableExpr, null);
+
+ rdef.setOuterJoin(rdef.getTableById(tableId), AppUtils.getRequestNvlValue(request,
+ "outerJoin"));
+ rdef.resetCache(true);
+
+ return true;
+ } // processTableAdd
+
+ private boolean processTableEdit(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ DataSourceType dst = rdef.getTableById(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+
+ String displayName = XSSFilter.filterRequest(AppUtils.getRequestNvlValue(request, "displayName"));
+ String outerJoin = AppUtils.getRequestNvlValue(request, "outerJoin");
+
+ String tableName = AppUtils.getRequestNvlValue(request, "tableName").toUpperCase();
+ String joinTableId = AppUtils.getRequestNvlValue(request, "joinTableName");
+
+ String joinExpr = AppUtils.getRequestNvlValue(request, "joinExpr").toUpperCase();
+
+ String joinTableExpr = null;
+ if(joinExpr.length()!=0){
+ joinTableExpr = joinExpr.replaceAll("\\["+tableName+"\\]", rdef.getTableByDBName(tableName).getTableId());
+ joinTableExpr = joinTableExpr.replaceAll("\\["+rdef.getTableById(joinTableId).getTableName().toUpperCase()+"\\]", joinTableId);
+ dst.setRefDefinition(joinTableExpr);
+ }
+ boolean reportUpdated = (!displayName.equals(nvl(dst.getDisplayName())) ||
+ !outerJoin.equals(rdef.getOuterJoinType(dst)) ||
+ !(joinExpr.length()==0));
+
+ dst.setDisplayName(displayName);
+ rdef.setOuterJoin(dst, outerJoin);
+ if (reportUpdated)
+ rdef.resetCache(true);
+
+ return true; // reportUpdated;
+ } // processTableEdit
+
+
+ private boolean processTableDelete(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.deleteDataSourceType(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processTableDelete
+
+ private boolean processColumnAddEdit(HttpServletRequest request, boolean isEdit)
+ throws Exception {
+ if(!isEdit) {
+ return true;
+ }
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ DataColumnType currColumn = null;
+
+ String tableId = null;
+ String colName = null;
+ String dataType = null;
+ if (isEdit) {
+ currColumn = rdef.getColumnById(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+
+ if(currColumn!=null) {
+ tableId = currColumn.getTableId();
+ colName = currColumn.getDbColName(); // currColumn.getColName();
+ dataType = currColumn.getDbColType();
+ }
+ } else {
+ String colData = AppUtils.getRequestNvlValue(request, "columnDetails");
+ if(nvl(colData).length()>0) {
+ tableId = colData.substring(0, colData.indexOf('|'));
+ colName = colData.substring(tableId.length() + 1,
+ colData.indexOf('|', tableId.length() + 1)).toUpperCase();
+ dataType = colData.substring(tableId.length() + colName.length() + 2);
+ }
+ } // else
+
+ String exprFormula = AppUtils.getRequestNvlValue(request, "exprFormula");
+
+ String colNameValue = null;
+ if (exprFormula.length() > 0)
+ if (exprFormula.equals("_exprText_"))
+ colNameValue = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestValue(request, "exprText"));
+ else if (exprFormula.equals("COUNT(*)"))
+ colNameValue = exprFormula;
+ else
+ colNameValue = exprFormula + " " + colName + ")";
+ else
+ colNameValue = colName;
+
+ int displayWidth = -1;
+ try {
+ displayWidth = Integer.parseInt(AppUtils.getRequestValue(request, "displayWidth"));
+ } catch (NumberFormatException e) {
+ }
+
+ String sColId = isEdit ? currColumn.getColId() : (nvl(colName).length()>0?rdef.getUniqueColumnId(colName):null);
+ String drillDownParams = AppUtils.getRequestValue(request, "drillDownParams");
+ if (drillDownParams != null) {
+ // Replacing references to [this] with [col_id]
+ while (drillDownParams.indexOf("[this]") >= 0) {
+ int startIdx = drillDownParams.indexOf("[this]");
+ StringBuffer sb = new StringBuffer();
+
+ if (startIdx > 0)
+ sb.append(drillDownParams.substring(0, startIdx));
+ sb.append("[" + sColId + "]");
+ if (startIdx + 6 < drillDownParams.length() - 1)
+ sb.append(drillDownParams.substring(startIdx + 5));
+ drillDownParams = sb.toString();
+ } // while
+ } // if
+
+ String crossTabValue = null;
+ boolean isVisible = AppUtils.getRequestFlag(request, "visible");
+ boolean isSortable = AppUtils.getRequestFlag(request, "sortable");
+ String nowrap = AppUtils.getRequestNvlValue(request, "nowrap");
+ int indentation = 0;
+ try {
+ indentation = Integer.parseInt(AppUtils.getRequestNvlValue(request, "indentation"));
+ }catch (NumberFormatException e) {
+ }
+ String dependsOnFormField = AppUtils.getRequestNvlValue(request, "dependsOnFormField");
+ boolean isGroupBreak = AppUtils.getRequestFlag(request, "groupBreak");
+ String groupByPosStr = AppUtils.nvls(AppUtils.getRequestValue(request, "groupByPos"), "0");
+ int groupByPos = Integer.parseInt(groupByPosStr);
+ currColumn.setGroupByPos(groupByPos);
+
+ if(groupByPos > 0) {
+ String subTotalCustomText = AppUtils.nvls(AppUtils.getRequestValue(request, "subTotalCustomText"), "Sub Total");
+ currColumn.setSubTotalCustomText(subTotalCustomText);
+
+ boolean hideRepeatedKey = AppUtils.getRequestFlag(request, "hideRepeatedKeys");
+ currColumn.setHideRepeatedKey(hideRepeatedKey);
+ }
+
+ String displayTotal = AppUtils.getRequestNvlValue(request, "displayTotal");
+ String widthInPxls = AppUtils.getRequestNvlValue(request, "widthInPxls");
+
+ if (rdef.getReportType().equals(AppConstants.RT_CROSSTAB)) {
+
+
+
+ crossTabValue = AppUtils.getRequestValue(request, "crossTabValue");
+ isVisible = nvl(crossTabValue).equals(AppConstants.CV_ROW)
+ || nvl(crossTabValue).equals(AppConstants.CV_COLUMN)
+ || nvl(crossTabValue).equals(AppConstants.CV_VALUE);
+ isGroupBreak = nvl(crossTabValue).equals(AppConstants.CV_ROW)
+ || nvl(crossTabValue).equals(AppConstants.CV_COLUMN);
+
+ if (nvl(crossTabValue).equals(AppConstants.CV_VALUE))
+ displayTotal += "|"
+ + AppUtils.getRequestNvlValue(request, "displayTotalPerRow");
+ else
+ displayTotal = "";
+ } // if
+
+ String displayName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "displayName"));
+ String colType = AppUtils.getRequestNvlValue(request, "colType");
+ String displayFormat = AppUtils.getRequestNvlValue(request, "displayFormat");
+
+ //HYPERLINK
+ if(colType.equals(AppConstants.CT_HYPERLINK)) {
+ String hyperlinkURL = AppUtils.getRequestValue(request, "hyperlinkURL");
+ currColumn.setHyperlinkURL(hyperlinkURL);
+ String anchor = AppUtils.getRequestValue(request, "anchor");
+ currColumn.setHyperlinkType(anchor);
+ if(anchor.equals("IMAGE")) {
+ String actionImg = AppUtils.getRequestValue(request, "actionImg");
+ currColumn.setActionImg(actionImg);
+ }
+ }
+
+
+
+ String displayAlign = AppUtils.getRequestValue(request, "displayAlign");
+ String displayHeaderAlign = AppUtils.getRequestValue(request, "displayHeaderAlign");
+ String drillDownURL = AppUtils.getRequestValue(request, "drillDownURL");
+ String drillDownSuppress = AppUtils.getRequestValue(request, "drillDownSuppress");
+ boolean drillDownPopUp = AppUtils.getRequestFlag (request, "drillDownPopUp");
+ String semaphoreId = AppUtils.getRequestNvlValue(request, "semaphore");
+ String semaphoreType = AppUtils.getRequestNvlValue(request, "semaphoreTypeHidden");
+
+ String levelStr = AppUtils.getRequestNvlValue(request, "multiGroupColLevel");
+ String startColGroup = AppUtils.getRequestNvlValue(request, "startMultiGroup");
+ String colGroupColSpan = AppUtils.getRequestNvlValue(request, "colspan");
+ int level = 0;
+ try {
+ level = Integer.parseInt(levelStr);
+ }catch (NumberFormatException ex) {
+ level = 0;
+ }
+ int startColGroupInt = 0;
+ int colGroupColSpanInt = 0;
+ if(level > 0) {
+ try {
+ //startColGroupInt = Integer.parseInt(startColGroup);
+ colGroupColSpanInt = Integer.parseInt(colGroupColSpan);
+ } catch (NumberFormatException ex) {
+
+ }
+ }
+ currColumn.setLevel(level);
+ if(level > 0) {
+ currColumn.setStart(startColGroupInt);
+ currColumn.setColspan(colGroupColSpanInt);
+ }
+
+ String targetColumnId = (semaphoreType.indexOf("|")!= -1 ? semaphoreType.substring(semaphoreType.indexOf("|")+1):"");
+ DataColumnType targetColumn = rdef.getColumnById(targetColumnId);
+
+ SemaphoreType semaphore = rdef.getSemaphoreById(semaphoreId);
+ rdef.deleteSemaphore(semaphore);
+ if(nvl(semaphoreType).length() > 0 && semaphoreType.indexOf("|")!=-1)
+ semaphore.setSemaphoreType(semaphoreType.substring(0,semaphoreType.indexOf("|")));
+ if(semaphore!=null) {
+ semaphore.setComment(currColumn.getColId());
+ if(nvl(semaphoreType).length() > 0)
+ semaphore.setTarget(targetColumnId.length()>0? targetColumnId: "");
+ rdef.setSemaphore(semaphore);
+ }
+
+
+ if (isEdit) {
+ if(nvl(widthInPxls).length()>0) {
+ if(nvl(widthInPxls).endsWith("px"))
+ currColumn.setDisplayWidthInPxls(widthInPxls);
+ else
+ currColumn.setDisplayWidthInPxls(widthInPxls+"px");
+ } else {
+ currColumn.setDisplayWidthInPxls("");
+ }
+
+ currColumn.setCrossTabValue(crossTabValue);
+ currColumn.setDependsOnFormField(dependsOnFormField);
+ currColumn.setDisplayName(displayName);
+ //currColumn.setOriginalDisplayName(displayName);
+
+ if (displayWidth > 0)
+ currColumn.setDisplayWidth(displayWidth);
+ currColumn.setDisplayAlignment(displayAlign);
+ currColumn.setDisplayHeaderAlignment(displayHeaderAlign);
+ currColumn.setDrillDownURL(drillDownURL);
+ currColumn.setDrillDownParams(drillDownParams);
+ currColumn.setDrillDownType(drillDownSuppress);
+ currColumn.setDrillinPoPUp(drillDownPopUp);
+ //indentation
+ currColumn.setIndentation(indentation);
+ if(drillDownPopUp) {
+ rdef.setDrillDownURLInPopupPresent(true);
+ }
+ /*if(targetColumn!=null) {
+ currColumn.setSemaphoreId(null);
+ targetColumn.setSemaphoreId(semaphoreId);
+ } else */
+ currColumn.setSemaphoreId(semaphoreId);
+ currColumn.setGroupBreak(isGroupBreak);
+ logger.debug(EELFLoggerDelegate.debugLogger, (" ------------ Display Total ---------- "+ displayTotal));
+ currColumn.setDisplayTotal(displayTotal);
+ //if (currColumn.getDrillDownURL() == null || currColumn.getDrillDownURL().length() == 0)
+ currColumn.setVisible(isVisible);
+ currColumn.setIsSortable(isSortable);
+ currColumn.setNowrap(nowrap);
+ //else
+ // currColumn.setVisible(true);
+ if (rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ if(colType!=null)
+ currColumn.setColType(colType);
+ displayFormat = AppUtils.getRequestValue(request, "colDataFormat");
+ if (displayFormat != null){
+ currColumn.setColFormat(displayFormat);
+ }
+ if(colType!=null && colType.equals(AppConstants.CT_DATE)) {
+ boolean enhancedPagination = AppUtils.getRequestFlag(request, "enhancedPagination");
+ currColumn.setEnhancedPagination(enhancedPagination);
+ }
+ }
+ if (!rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ currColumn.setColName(colNameValue);
+ if (displayFormat != null)
+ currColumn.setColFormat(displayFormat);
+ //currColumn.setVisible(isVisible);
+ currColumn.setCalculated(exprFormula.length() > 0);
+
+ rdef.adjustColumnType(currColumn);
+ } // if
+
+ rdef.resetCache(true);
+ } else
+ currColumn = rdef.addDataColumnType(new ObjectFactory(), sColId, tableId, colName,
+ crossTabValue, colNameValue, displayName, displayWidth, displayAlign, rdef
+ .getAllColumns().size() + 1, isVisible,
+ (exprFormula.length() > 0), adjustDataType(dataType), displayFormat,
+ isGroupBreak, -1, null, displayTotal, null, -1, drillDownSuppress,
+ drillDownURL, drillDownParams, semaphoreId, null);
+
+ if (rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ rdef.setColumnNoParseDateFlag(currColumn, AppUtils.getRequestFlag(request,
+ "no_parse_date"));
+ if(nvl(displayName).length()>0)
+ return true;
+ else
+ return false;
+ } // processColumnAddEdit
+
+ private boolean processColumnAddMulti(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ List reportCols = rdef.getAllColumns();
+ int nCol = reportCols.size() + 1;
+
+ String[] addColumn = request.getParameterValues("addColumn");
+ String[] tableId = request.getParameterValues("tableId");
+ String[] columnName = request.getParameterValues("columnName");
+ String[] columnType = request.getParameterValues("columnType");
+ String[] displayName = request.getParameterValues("displayName");
+
+ for (int i = 0; i < addColumn.length; i++)
+ if (addColumn[i].equals("Y")) {
+ int j = 2;
+ String uniqueDisplayName = displayName[i];
+ boolean isUnique = true;
+ do {
+ isUnique = true;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();)
+ if (uniqueDisplayName.equals(((DataColumnType) iter.next())
+ .getDisplayName())) {
+ isUnique = false;
+ uniqueDisplayName = displayName[i] + (j++);
+ break;
+ } // if
+ } while (!isUnique);
+
+ rdef
+ .addDataColumnType(
+ new ObjectFactory(),
+ rdef.getUniqueColumnId(columnName[i]),
+ tableId[i],
+ columnName[i],
+ null,
+ columnName[i],
+ uniqueDisplayName,
+ 10,
+ "Left",
+ nCol++,
+ true,
+ false,
+ adjustDataType(columnType[i]),
+ (columnType[i].equals(AppConstants.CT_DATE) ? AppConstants.DEFAULT_DATE_FORMAT
+ : null), false, -1, null, null, null, -1, null, null,
+ null, null, null);
+ } // if
+
+ return true;
+ } // processColumnAddMulti
+
+ private boolean processColumnOrderAll(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String[] colId = request.getParameterValues("colId");
+ String[] colOrder = request.getParameterValues("colOrder");
+
+ boolean reportUpdated = false;
+ for (int i = 0; i < colId.length; i++) {
+ DataColumnType dct = rdef.getColumnById(nvl(colId[i]));
+ if (dct == null)
+ continue;
+
+ int iColOrder = 0;
+ try {
+ iColOrder = Integer.parseInt(colOrder[i]);
+ } catch (NumberFormatException e) {
+ }
+
+ if (iColOrder > 0) {
+ dct.setOrderSeq(iColOrder);
+ reportUpdated = true;
+ } // if
+ } // for
+
+ if (reportUpdated) {
+ List reportCols = rdef.getAllColumns();
+ Collections.sort(reportCols, new OrderSeqComparator());
+
+ int iOrder = 1;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ dct.setOrderSeq(iOrder++);
+ } // for
+
+ rdef.resetCache(false);
+ } // if
+
+ return reportUpdated;
+ } // processColumnOrderAll
+
+ private boolean processColumnDelete(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.deleteDataColumnType(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processColumnDelete
+
+ private boolean processColumnMoveUp(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.shiftColumnOrderUp(AppUtils
+ .getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processColumnMoveUp
+
+ private boolean processColumnMoveDown(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.shiftColumnOrderDown(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processColumnMoveDown
+
+ private boolean processFormFieldAddEdit(HttpServletRequest request, boolean isEdit,
+ String action) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String fieldName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldName"));
+ String multiSelectSize = "0";
+ String colId = AppUtils.getRequestNvlValue(request, "fieldColId");
+ if (rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED)) {
+ String displayFormat = AppUtils.getRequestNvlValue(request, "displayFormat");
+ if (displayFormat.length() > 0)
+ colId += "|" + displayFormat;
+ } // if
+ String fieldType = AppUtils.getRequestNvlValue(request, "fieldType");
+ String validation = AppUtils.getRequestNvlValue(request, "validation");
+ String mandatory = nvl(AppUtils.getRequestValue(request, "mandatory"), "N");
+ String defaultValue = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "defaultValue"));
+ String fieldHelp = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldHelp"));
+ String fieldSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldSQL"));
+ String fieldDefaultSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "fieldDefaultSQL"));
+ String visible = nvl(AppUtils.getRequestValue(request, "visible"),"Y");
+ String dependsOn = nvl(AppUtils.getRequestValue(request, "dependsOn"),"");
+ String rangeStartDate = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeStartDate"));
+ String rangeEndDate = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeEndDate"));
+ String rangeStartDateSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeStartDateSQL"));
+ String rangeEndDateSQL = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "rangeEndDateSQL"));
+ boolean isGroupFormField = AppUtils.getRequestFlag(request,"isGroupFormField");
+
+ Calendar start = null;
+ Calendar end = null;
+ if (AppUtils.nvl(rangeStartDate).length()>0){
+ SimpleDateFormat dtf = new SimpleDateFormat("MM/dd/yyyy");
+ start = Calendar.getInstance();
+ start.setTime(dtf.parse(rangeStartDate));
+ }
+ if (AppUtils.nvl(rangeEndDate).length()>0){
+ SimpleDateFormat dtf = new SimpleDateFormat("MM/dd/yyyy");
+ end = Calendar.getInstance();
+ end.setTime(dtf.parse(rangeEndDate));
+ }/*
+ * if(fieldHelp.length()>255) fieldHelp = fieldHelp.substring(0, 255);
+ */
+
+ boolean reportUpdated = false;
+
+ FormFieldType currField = null;
+ if (isEdit) {
+ String fieldId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
+
+ currField = rdef.getFormFieldById(fieldId);
+ if (currField != null && nvl(fieldName).length()>0) {
+ reportUpdated = (!(fieldName.equals(nvl(currField.getFieldName()))
+ && colId.equals(nvl(currField.getColId()))
+ && fieldType.equals(nvl(currField.getFieldType()))
+ && validation.equals(nvl(currField.getValidationType()))
+ && mandatory.equals(nvl(currField.getMandatory(), "N"))
+ && defaultValue.equals(nvl(currField.getDefaultValue()))
+ && fieldSQL.equals(nvl(currField.getFieldSQL()))
+ && fieldDefaultSQL.equals(nvl(currField.getFieldDefaultSQL()))
+ && dependsOn.equals(nvl(currField.getDependsOn(), "N"))
+ && (start == null || (start != null && currField.getRangeStartDate() == null) || (start.equals(currField.getRangeStartDate())))
+ && (end == null || (end != null && currField.getRangeEndDate() == null) || (end.equals(currField.getRangeEndDate())))
+ && rangeStartDateSQL.equals(nvl(currField.getRangeStartDateSQL()))
+ && rangeEndDateSQL.equals(nvl(currField.getRangeEndDateSQL()))
+ && visible.equals(nvl(currField.getVisible(), "Y"))
+ && isGroupFormField == currField.isGroupFormField()
+ && fieldHelp.equals(nvl(currField.getComment()))));
+
+ rdef.replaceFormFieldReferences("[" + currField.getFieldName() + "]", "["
+ + fieldName + "]");
+
+ currField.setFieldName(fieldName);
+ currField.setColId(colId);
+ currField.setFieldType(fieldType);
+ currField.setValidationType(validation);
+ currField.setMandatory(mandatory);
+ currField.setDefaultValue(defaultValue);
+ currField.setFieldSQL(fieldSQL);
+ currField.setFieldDefaultSQL(fieldDefaultSQL);
+ currField.setComment(fieldHelp);
+ currField.setVisible(visible);
+ currField.setDependsOn(dependsOn);
+ try {
+ if(start!=null) {
+ currField.setRangeStartDate(DatatypeFactory.newInstance()
+ .newXMLGregorianCalendar(start.YEAR, start.MONTH, start.DAY_OF_WEEK, start.HOUR, start.MINUTE, start.SECOND, start.MILLISECOND, start.ZONE_OFFSET));
+ } else {
+ currField.setRangeStartDate(null);
+ }
+ if(end!=null) {
+ currField.setRangeEndDate(DatatypeFactory.newInstance()
+ .newXMLGregorianCalendar(end.YEAR, end.MONTH, end.DAY_OF_WEEK, end.HOUR, end.MINUTE, end.SECOND, end.MILLISECOND, end.ZONE_OFFSET));
+ } else {
+ currField.setRangeEndDate(null);
+ }
+ /*currField.setRangeEndDate(DatatypeFactory.newInstance()
+ .newXMLGregorianCalendar(end));*/
+ } catch (DatatypeConfigurationException ex) {
+
+ }
+
+ currField.setRangeStartDateSQL(rangeStartDateSQL);
+ currField.setRangeEndDateSQL(rangeEndDateSQL);
+ currField.setGroupFormField(isGroupFormField);
+ if(fieldType.equals(FormField.FFT_LIST_MULTI)) {
+ multiSelectSize = AppUtils.getRequestNvlValue(request, "multiSelectListSize");
+ currField.setMultiSelectListSize(multiSelectSize);
+ }
+
+
+ } // if
+ } else {
+ reportUpdated = true;
+
+ currField = rdef.addFormFieldType(new ObjectFactory(), fieldName, colId,
+ fieldType, validation, mandatory, defaultValue, fieldSQL, fieldHelp, start, end, rangeStartDateSQL, rangeEndDateSQL);
+
+ request.setAttribute(AppConstants.RI_DETAIL_ID, currField.getFieldId());
+ } // else
+
+ if (action.equals(AppConstants.WA_ADD_USER)) {
+ reportUpdated = true;
+ rdef.addFormFieldPredefinedValue(new ObjectFactory(), currField, XSSFilter.filterRequestOnlyScript(AppUtils
+ .getRequestNvlValue(request, "newPredefinedValue")));
+ } else if (action.equals(AppConstants.WA_DELETE_USER)) {
+ reportUpdated = true;
+ rdef.deleteFormFieldPredefinedValue(currField, AppUtils.getRequestNvlValue(
+ request, "delPredefinedValue"));
+ }
+
+ return reportUpdated;
+ } // processFormFieldAddEdit
+
+ private boolean processFormFieldDelete(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String fieldId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
+ rdef.deleteFormField(fieldId);
+
+ return true;
+ } // processFormFieldDelete
+
+ private boolean processFormFieldMoveUp(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.shiftFormFieldUp(AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processFormFieldMoveUp
+
+ private boolean processFormFieldMoveDown(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.shiftFormFieldDown(AppUtils
+ .getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processFormFieldMoveDown
+
+ private boolean processFormFieldBlank(HttpServletRequest request) throws Exception {
+ boolean reportUpdated = false;
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ reportUpdated = true;
+ rdef.addFormFieldBlank(new ObjectFactory());
+ return true;
+ } // processFormFieldMoveDown
+
+ //processFormFieldInfoBar
+ private boolean processFormFieldInfoBar(HttpServletRequest request) throws Exception {
+ boolean reportUpdated = false;
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ reportUpdated = true;
+ rdef.addCustomizedTextForParameters(XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "blueBarField")));
+ return true;
+ } // processFormFieldMoveDown
+
+
+ private boolean processForecasting(HttpServletRequest request, String action) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ if(rdef.getDataminingOptions()==null)
+ rdef.addDataminingOptions(new ObjectFactory());
+
+ String classifiers = AppUtils.getRequestNvlValue(request, "classifiers");
+ rdef.setClassifier(classifiers);
+ String dateAttrColId = AppUtils.getRequestNvlValue(request, "timeAttribute");
+ String timeFormat = AppUtils.getRequestNvlValue(request, "timeFormat");
+ if(timeFormat.equals("Default")) timeFormat = "yyyy-MM-dd HH:mm:ss";
+ String forecastingPeriod = AppUtils.getRequestNvlValue(request, "forecastingPeriod");
+
+ String[] forecastCols = request.getParameterValues("forecastCol");
+ List reportCols = rdef.getAllColumns();
+ DataColumnType dct = null;
+ Iterator iter = null;
+
+
+
+ if(dateAttrColId != null) {
+ for(iter=reportCols.iterator(); iter.hasNext(); ) {
+ dct = (DataColumnType) iter.next();
+ if(dct.getColId().equals(dateAttrColId)) {
+ dct.setDataMiningCol(AppConstants.DM_DATE_ATTR);
+ if(timeFormat!=null) rdef.setForecastingTimeFormat(timeFormat);
+ break;
+ }
+ }
+ }
+
+ if(forecastCols != null) {
+ for (int i = 0; i < forecastCols.length; i++) {
+ for(iter=reportCols.iterator(); iter.hasNext(); ) {
+ dct = (DataColumnType) iter.next();
+ if(dct.getColId().equals(forecastCols[i])) {
+ dct.setDataMiningCol(AppConstants.DM_FORECASTING_ATTR);
+ }
+ }
+ }
+ rdef.setForecastingPeriod(forecastingPeriod);
+ }
+ boolean reportUpdated = true;
+
+ return reportUpdated;
+ } // processForecasting
+
+
+ private boolean processFilterAddEdit(HttpServletRequest request, boolean isEdit)
+ throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String colId = AppUtils.getRequestNvlValue(request, "filterColId");
+ String filterExpr = AppUtils.getRequestNvlValue(request, "filterExpr");
+ String argType = (filterExpr.equals("IS NULL") || filterExpr.equals("IS NOT NULL")) ? null
+ : AppUtils.getRequestNvlValue(request, "argType");
+ String argValue = (filterExpr.equals("IS NULL") || filterExpr.equals("IS NOT NULL")) ? null
+ : AppUtils.getRequestNvlValue(request, "argValue");
+
+ if (nvl(argType).equals(AppConstants.AT_COLUMN)) {
+ List reportCols = rdef.getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (argValue.equals("[" + dct.getDisplayName() + "]")) {
+ argValue = dct.getColId();
+ break;
+ }
+ } // for
+ } // if
+
+ if (nvl(argType).equals(AppConstants.AT_VALUE)
+ && (!nvl(argValue).equals(AppConstants.FILTER_MAX_VALUE))
+ && (!nvl(argValue).equals(AppConstants.FILTER_MIN_VALUE))) {
+ // Validating the value by type
+ DataColumnType currColumn = rdef.getColumnById(colId);
+ String currColType = currColumn.getColType();
+
+ try {
+ String s_sql = Globals.getProcessFilterAddEdit();
+ s_sql = s_sql.replace("[argValue]", argValue);
+ /*DataSet ds = DbUtils.executeQuery("SELECT "
+ + (currColType.equals(AppConstants.CT_NUMBER) ? ("TO_NUMBER('"
+ + argValue + "')")
+ : (currColType.equals(AppConstants.CT_DATE) ? ("TO_DATE('"
+ + argValue
+ + "', '"
+ + nvl(currColumn.getColFormat(),
+ AppConstants.DEFAULT_DATE_FORMAT) + "')")
+ : ("'" + argValue + "'"))) + " FROM dual");*/
+
+ DataSet ds = DbUtils.executeQuery("SELECT "
+ + (currColType.equals(AppConstants.CT_NUMBER) ? ("TO_NUMBER('"
+ + argValue + "')")
+ : (currColType.equals(AppConstants.CT_DATE) ? ("TO_DATE('"
+ + argValue
+ + "', '"
+ + nvl(currColumn.getColFormat(),
+ AppConstants.DEFAULT_DATE_FORMAT) + "')")
+ : s_sql)));
+ } catch (Exception e) {
+ throw new ValidationException(
+ ""
+ + (currColType.equals(AppConstants.CT_NUMBER) ? "Invalid number"
+ : (currColType.equals(AppConstants.CT_DATE) ? ("Invalid date<br>Expected date format " + nvl(
+ currColumn.getColFormat(),
+ AppConstants.DEFAULT_DATE_FORMAT))
+ : "Invalid value<br>Possible reason: use of single quotes"))
+ + "<!--" + e.getMessage() + "--><br>Value: " + argValue);
+ }
+ } // if
+
+ if (isEdit) {
+ int filterPos = -1;
+ try {
+ filterPos = Integer.parseInt(AppUtils.getRequestValue(request, "filterPos"));
+ } catch (NumberFormatException e) {
+ }
+
+ ColFilterType currFilter = rdef.getFilterById(colId, filterPos);
+ if (currFilter != null) {
+ currFilter.setJoinCondition(AppUtils.getRequestValue(request, "filterJoin"));
+ currFilter.setOpenBrackets(AppUtils.getRequestValue(request, "openBrackets"));
+ currFilter.setExpression(filterExpr);
+ // if(argType!=null)
+ currFilter.setArgType(argType);
+ // if(argValue!=null)
+ currFilter.setArgValue(argValue);
+ currFilter
+ .setCloseBrackets(AppUtils.getRequestValue(request, "closeBrackets"));
+ } // if
+
+ rdef.resetCache(true);
+ } else {
+ rdef.addColFilterType(new ObjectFactory(), colId, AppUtils.getRequestValue(
+ request, "filterJoin"), AppUtils.getRequestValue(request, "openBrackets"),
+ filterExpr, argType, argValue, AppUtils.getRequestValue(request,
+ "closeBrackets"), null);
+ } // else
+
+ return true;
+ } // processFilterAddEdit
+
+ private boolean processFilterDelete(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String filterId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
+ String colId = filterId.substring(0, filterId.indexOf('|'));
+ int filterPos = -1;
+ try {
+ filterPos = Integer.parseInt(filterId.substring(colId.length() + 1));
+ } catch (NumberFormatException e) {
+ }
+
+ rdef.removeColumnFilter(colId, filterPos);
+
+ return true;
+ } // processFilterDelete
+
+ private boolean processSortAddEdit(HttpServletRequest request, boolean isEdit)
+ throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String sortAscDesc = AppUtils.getRequestNvlValue(request, "sortAscDesc");
+ if (isEdit) {
+ DataColumnType currColumn = rdef.getColumnById(AppUtils.getRequestNvlValue(
+ request, AppConstants.RI_DETAIL_ID));
+ if (currColumn != null)
+ currColumn.setOrderByAscDesc(sortAscDesc);
+ rdef.resetCache(true);
+ } else
+ rdef.addColumnSort(AppUtils.getRequestNvlValue(request, "sortColId"), sortAscDesc,
+ rdef.getNumSortColumns() + 1);
+
+ return true;
+ } // processSortAddEdit
+
+ private boolean processSortOrderAll(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String[] colId = request.getParameterValues("colId");
+ String[] sortOrder = request.getParameterValues("sortOrder");
+ String[] sortAscDesc = request.getParameterValues("sortAscDesc");
+
+ boolean reportUpdated = false;
+ for (int i = 0; i < colId.length; i++) {
+ DataColumnType dct = rdef.getColumnById(nvl(colId[i]));
+ if (dct == null)
+ continue;
+
+ int iSortOrder = 0;
+ try {
+ iSortOrder = Integer.parseInt(sortOrder[i]);
+ } catch (NumberFormatException e) {
+ }
+
+ if (iSortOrder > 0) {
+ if (dct.getOrderBySeq() > 0) {
+ // Update sort
+ if (dct.getOrderBySeq() != iSortOrder) {
+ dct.setOrderBySeq(iSortOrder);
+ reportUpdated = true;
+ } // if
+ if (!nvl(dct.getOrderByAscDesc()).equals(nvl(sortAscDesc[i]))) {
+ dct.setOrderByAscDesc(sortAscDesc[i]);
+ reportUpdated = true;
+ } // if
+ } else {
+ // Add sort
+ dct.setOrderBySeq(iSortOrder);
+ dct.setOrderByAscDesc(sortAscDesc[i]);
+ reportUpdated = true;
+ } // else
+ } else {
+ if (dct.getOrderBySeq() > 0) {
+ // Remove sort
+ dct.setOrderBySeq(0);
+ dct.setOrderByAscDesc(null);
+ reportUpdated = true;
+ } // if
+ } // else
+ } // for
+
+ if (reportUpdated) {
+ List reportCols = rdef.getAllColumns();
+ Collections.sort(reportCols, new OrderBySeqComparator());
+ int iOrder = 1;
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (dct.getOrderBySeq() > 0)
+ dct.setOrderBySeq(iOrder++);
+ } // for
+ Collections.sort(reportCols, new OrderSeqComparator());
+
+ rdef.resetCache(true);
+ } // if
+
+ return reportUpdated;
+ } // processSortOrderAll
+
+ private boolean processSortDelete(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.removeColumnSort(AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processSortDelete
+
+ private boolean processSortMoveUp(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef
+ .shiftColumnSortUp(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processSortMoveUp
+
+ private boolean processSortMoveDown(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.shiftColumnSortDown(AppUtils.getRequestNvlValue(request,
+ AppConstants.RI_DETAIL_ID));
+ return true;
+ } // processSortMoveDown
+
+ private boolean processJavascript (HttpServletRequest request) throws Exception {
+ processSaveJavascriptElement(request);
+ return true;
+ }
+
+ private boolean processSaveJavascriptElement (HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ rdef.setJavascriptElement(AppUtils.getRequestNvlValue(request, AppConstants.RI_JAVASCRIPT));
+ String id = AppUtils.getRequestNvlValue(request, AppConstants.RI_JAVASCRIPT_ITEM_ID);
+ String fieldId = AppUtils.getRequestNvlValue(request, "javascriptFormField-"+id);
+ if( nvl(fieldId).length()>0 && !(fieldId.startsWith("-1"))) {
+
+ String callableJavascriptText = AppUtils.getRequestNvlValue(request, "callText-"+id);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("FieldId " + fieldId + " Call Text " + callableJavascriptText+ " id " + id));
+ JavascriptItemType javaScriptType = null;
+ if(id.length()>0 && id.startsWith("-1")) {
+ javaScriptType = rdef.addJavascriptType(new ObjectFactory(), id);
+ javaScriptType.setFieldId(fieldId);
+ if(!fieldId.equals("os1") || !fieldId.equals("ol1"))
+ javaScriptType.setId(rdef.getNextIdForJavaScriptElement(new ObjectFactory(), fieldId));
+ else {
+ if(fieldId.equals("os1"))
+ javaScriptType.setId("os1|1");
+ else
+ javaScriptType.setId("ol1|1");
+ }
+ javaScriptType.setCallText(callableJavascriptText);
+ } else {
+ javaScriptType = rdef.addJavascriptType(new ObjectFactory(), id);
+ javaScriptType.setCallText(callableJavascriptText);
+ }
+ }
+ return true;
+ }
+ private boolean processAddJavascriptElement (HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ JavascriptItemType javaScriptType = rdef.addJavascriptType(new ObjectFactory(), "");
+ javaScriptType.setId("");
+ javaScriptType.setFieldId("");
+ javaScriptType.setCallText("");
+
+ return true;
+ }
+
+ private boolean processDeleteJavascriptElement (HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ String id = AppUtils.getRequestNvlValue(request, AppConstants.RI_JAVASCRIPT_ITEM_ID);
+ if(rdef.deleteJavascriptType(id))
+ return true;
+ else
+ return false;
+ }
+
+ private boolean processChart(HttpServletRequest request, String action) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ int valueColsCount = rdef.getChartValueColumnsList(AppConstants.CHART_ALL_COLUMNS, null).size();
+
+ String chartType = AppUtils.getRequestNvlValue(request, "chartType");
+ String chartTypeFixed = AppUtils.getRequestValue(request, "chartTypeFixed");
+ String legendColId = AppUtils.getRequestNvlValue(request, "legendCol");
+ // String valueColId = AppUtils.getRequestNvlValue(request, "valueCol");
+ String leftAxisLabel = AppUtils.getRequestValue(request, "leftAxisLabel");
+ String rightAxisLabel = AppUtils.getRequestValue(request, "rightAxisLabel");
+ String chartWidth = XSSFilter.filterRequest(AppUtils.getRequestNvlValue(request, "chartWidth"));
+ String chartHeight = XSSFilter.filterRequest(AppUtils.getRequestNvlValue(request, "chartHeight"));
+ String chartMultiseries = AppUtils.getRequestNvlValue(request, "multiSeries");
+ String lastSeriesALineChart = AppUtils.getRequestNvlValue(request, "lastSeriesALineChart");
+ String lastSeriesABarChart = AppUtils.getRequestNvlValue(request, "lastSeriesABarChart");
+ String overLayItemLabel = "N";
+ String chartDisplay = null;
+
+ String multiplePieOrder = null;
+ String multiplePieLabelDisplay = null;
+
+ String chartOrientation = null;
+ String secondaryChartRenderer = null;
+
+ String linearRegression = null;
+
+ boolean multiplePieOrderInRunPage = false;
+ boolean multiplePieLabelDisplayInRunPage = false;
+
+ boolean chartOrientationInRunPage = false;
+ boolean secondaryChartRendererInRunPage = false;
+
+ boolean chartDisplayInRunPage = false;
+
+ String intervalFromdate = null;
+ String intervalTodate = null;
+ String intervalLabel = null;
+ boolean displayIntervalInputInRunPage = false;
+ boolean animate = false;
+
+ animate = AppUtils.getRequestNvlValue(request, "animatedOption").equals("animate");
+ if(Globals.showAnimatedChartOption())
+ rdef.setChartAnimate(animate);
+
+
+ String removeColId = "";
+ if (action.equals(AppConstants.WA_DELETE_USER)) {
+ removeColId = AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID);
+ if(valueColsCount == 2 && !rdef.hasSeriesColumn()) {
+ rdef.setChartLeftAxisLabel(null);
+ rdef.setChartRightAxisLabel(null);
+
+ if(chartType.equals(AppConstants.GT_TIME_SERIES) || chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
+ chartMultiseries = "N";
+ }
+ }
+ }
+
+ if(rdef.getChartAdditionalOptions()==null)
+ rdef.addChartAdditionalOptions(new ObjectFactory());
+
+ if(rdef.getChartDrillOptions()==null)
+ rdef.addChartDrillOptions(new ObjectFactory());
+
+ //clearing already added
+ if(rdef.getChartDrillOptions().getTargetFormfield()!=null)
+ rdef.getChartDrillOptions().getTargetFormfield().removeAll(rdef.getChartDrillOptions().getTargetFormfield());
+
+
+ if(chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
+ multiplePieOrder = AppUtils.getRequestNvlValue(request, "multiplePieOrder");
+ multiplePieLabelDisplay = AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplay");
+ chartDisplay = AppUtils.getRequestNvlValue(request, "chartDisplay");
+ //if(AppUtils.getRequestNvlValue(request, "multiplePieOrderInRunPage").length()>0)
+ multiplePieOrderInRunPage = AppUtils.getRequestNvlValue(request,"multiplePieOrderInRunPage").equals("Y");
+ //if(AppUtils.getRequestNvlValue(request, "multiplePieLabelDisplayInRunPage").length()>0)
+ multiplePieLabelDisplayInRunPage = AppUtils.getRequestNvlValue(request,"multiplePieLabelDisplayInRunPage").equals("Y");
+ //if(AppUtils.getRequestNvlValue(request, "chartDisplayInRunPage").length()>0)
+ chartDisplayInRunPage = AppUtils.getRequestNvlValue(request,"chartDisplayInRunPage").equals("Y");
+ if(rdef.getChartAdditionalOptions()!=null) {
+ rdef.setChartMultiplePieOrder(multiplePieOrder+(multiplePieOrderInRunPage?"|Y":""));
+ rdef.setChartMultiplePieLabelDisplay(multiplePieLabelDisplay+(multiplePieLabelDisplayInRunPage?"|Y":""));
+ rdef.setChartDisplay(chartDisplay+(chartDisplayInRunPage?"|Y":""));
+ }
+
+ }
+
+ if(chartType.equals(AppConstants.GT_REGRESSION)) {
+ linearRegression = AppUtils.getRequestNvlValue(request, "regressionType");
+ rdef.setLinearRegressionColor(AppUtils.getRequestNvlValue(request, "valueLinearRegressionColor"));
+ rdef.setExponentialRegressionColor(AppUtils.getRequestNvlValue(request, "valueExponentialRegressionColor"));
+ rdef.setCustomizedRegressionPoint(AppUtils.getRequestNvlValue(request, "regressionPointCustomization"));
+
+ if(nvl(linearRegression).length()>0)
+ rdef.setLinearRegression(linearRegression);
+ else
+ rdef.setLinearRegression("Y");
+ }
+
+ if(chartType.equals(AppConstants.GT_BAR_3D)) {
+ chartOrientation = AppUtils.getRequestNvlValue(request, "chartOrientation");
+ secondaryChartRenderer = AppUtils.getRequestNvlValue(request, "secondaryChartRenderer");
+ chartDisplay = AppUtils.getRequestNvlValue(request, "chartDisplay");
+ //if(AppUtils.getRequestNvlValue(request, "chartOrientationInRunPage").length()>0)
+ chartOrientationInRunPage = AppUtils.getRequestNvlValue(request,"chartOrientationInRunPage").equals("Y");
+ //if(AppUtils.getRequestNvlValue(request, "secondaryChartRendererInRunPage").length()>0)
+ secondaryChartRendererInRunPage = AppUtils.getRequestNvlValue(request,"secondaryChartRendererInRunPage").equals("Y");
+ //if(AppUtils.getRequestNvlValue(request, "chartDisplayInRunPage").length()>0)
+ chartDisplayInRunPage = AppUtils.getRequestNvlValue(request,"chartDisplayInRunPage").equals("Y");
+ rdef.setChartOrientation(chartOrientation+(chartOrientationInRunPage?"|Y":""));
+ rdef.setSecondaryChartRenderer(secondaryChartRenderer+(secondaryChartRendererInRunPage?"|Y":""));
+ rdef.setChartDisplay(chartDisplay+(chartDisplayInRunPage?"|Y":""));
+ rdef.setLastSeriesALineChart(nvl(lastSeriesALineChart, "N"));
+ }
+
+ if(chartType.equals(AppConstants.GT_LINE)) {
+ chartOrientation = AppUtils.getRequestNvlValue(request, "chartOrientation");
+ secondaryChartRenderer = AppUtils.getRequestNvlValue(request, "secondaryChartRenderer");
+ chartDisplay = AppUtils.getRequestNvlValue(request, "chartDisplay");
+ //if(AppUtils.getRequestNvlValue(request, "chartOrientationInRunPage").length()>0)
+ chartOrientationInRunPage = AppUtils.getRequestNvlValue(request,"chartOrientationInRunPage").equals("Y");
+ //if(AppUtils.getRequestNvlValue(request, "secondaryChartRendererInRunPage").length()>0)
+ secondaryChartRendererInRunPage = AppUtils.getRequestNvlValue(request,"secondaryChartRendererInRunPage").equals("Y");
+ //if(AppUtils.getRequestNvlValue(request, "chartDisplayInRunPage").length()>0)
+ chartDisplayInRunPage = AppUtils.getRequestNvlValue(request,"chartDisplayInRunPage").equals("Y");
+ rdef.setChartOrientation(chartOrientation+(chartOrientationInRunPage?"|Y":""));
+ rdef.setSecondaryChartRenderer(secondaryChartRenderer+(secondaryChartRendererInRunPage?"|Y":""));
+ rdef.setChartDisplay(chartDisplay+(chartDisplayInRunPage?"|Y":""));
+ rdef.setLastSeriesABarChart(nvl(lastSeriesABarChart, "N"));
+ }
+ if(chartType.equals(AppConstants.GT_TIME_DIFFERENCE_CHART)) {
+ intervalFromdate = AppUtils.getRequestNvlValue(request, "intervalFromDate");
+ intervalTodate = AppUtils.getRequestNvlValue(request, "intervalToDate");
+ intervalLabel = AppUtils.getRequestNvlValue(request, "intervalLabel");
+ displayIntervalInputInRunPage = AppUtils.getRequestNvlValue(request,"intervalInputInRunPage").equals("Y");
+ rdef.setIntervalFromdate(intervalFromdate+(displayIntervalInputInRunPage?"|Y":""));
+ rdef.setIntervalTodate(intervalTodate+(displayIntervalInputInRunPage?"|Y":""));
+ rdef.setIntervalLabel(intervalLabel);
+ }
+ if(chartType.equals(AppConstants.GT_STACKED_VERT_BAR) || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR) || chartType.equals(AppConstants.GT_STACKED_VERT_BAR_LINES)
+ || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR_LINES)) {
+ overLayItemLabel = AppUtils.getRequestNvlValue(request, "overlayItemValue");
+ rdef.setOverlayItemValueOnStackBar(nvl(overLayItemLabel, "N"));
+ animate = AppUtils.getRequestNvlValue(request, "animatedOption").equals("animate");
+ rdef.setChartAnimate(animate);
+ }
+
+ rdef.setRangeAxisLowerLimit(AppUtils.getRequestNvlValue(request, "yAxisLowerLimit"));
+ rdef.setRangeAxisUpperLimit(AppUtils.getRequestNvlValue(request, "yAxisUpperLimit"));
+ rdef.setLegendLabelAngle(AppUtils.getRequestNvlValue(request,"labelAngle"));
+ rdef.setLegendPosition(AppUtils.getRequestNvlValue(request,"legendPosition"));
+ rdef.setMaxLabelsInDomainAxis(AppUtils.getRequestNvlValue(request,"maxLabelsInDomainAxis"));
+ String chartLegendDisplay = AppUtils.getRequestNvlValue(request,"hideLegend");
+ boolean showLegendDisplayOptionsInRunPage = false;
+ showLegendDisplayOptionsInRunPage = AppUtils.getRequestNvlValue(request,"showLegendDisplayOptionsInRunPage").equals("Y");
+ rdef.setChartLegendDisplay(chartLegendDisplay+(showLegendDisplayOptionsInRunPage?"|Y":""));
+ rdef.setChartToolTips(AppUtils.getRequestNvlValue(request,"hideTooltips"));
+ rdef.setDomainAxisValuesAsString(AppUtils.getRequestNvlValue(request,"keepAsString"));
+
+ //System.out.println("KeepAsString " + AppUtils.getRequestNvlValue(request,"keepAsString"));
+ //System.out.println("From ReportDef " + rdef.keepDomainAxisValueInChartAsString());
+ // boolean reportUpdated = (!
+ // chartType.equals(nvl(rdef.getChartType())));
+ rdef.setChartType(chartType);
+ rdef.setChartTypeFixed(nvl(chartTypeFixed, "N"));
+ if (nvl(leftAxisLabel).length()>0)
+ rdef.setChartLeftAxisLabel(leftAxisLabel);
+ else
+ rdef.setChartLeftAxisLabel(null);
+ if (nvl(rightAxisLabel).length()>0)
+ rdef.setChartRightAxisLabel(rightAxisLabel);
+ else
+ rdef.setChartRightAxisLabel(null);
+ rdef.setChartWidth(nvl(chartWidth, "" + Globals.getDefaultChartWidth()));
+ rdef.setChartHeight(nvl(chartHeight, "" + Globals.getDefaultChartHeight()));
+ if(chartType.equals(AppConstants.GT_TIME_SERIES) || chartType.equals(AppConstants.GT_PIE_MULTIPLE)) {
+ rdef.setChartMultiSeries(chartMultiseries);
+ } else {
+ rdef.setChartMultiSeries("N");
+ }
+
+ List reportCols = rdef.getAllColumns();
+ for (Iterator iter = reportCols.iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+
+ if (dct.getColId().equals(legendColId)) {
+ // reportUpdated = reportUpdated||(!
+ // nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND));
+ dct.setColOnChart(AppConstants.GC_LEGEND);
+ } else {
+ // reportUpdated =
+ // reportUpdated||nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND);
+ dct.setColOnChart(null);
+ }
+
+ /*
+ * if(dct.getColId().equals(valueColId)) { reportUpdated =
+ * reportUpdated||(dct.getChartSeq()<=0); dct.setChartSeq(1); }
+ * else { reportUpdated = reportUpdated||(dct.getChartSeq()>0);
+ */
+ dct.setChartSeq(-1);
+ /* } */
+ } // for
+
+ int idx = 1;
+ List columns = rdef.getAllColumns();
+ if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ String chartGroup = AppUtils.getRequestNvlValue(request, "chartGroup");
+ String yAxis = AppUtils.getRequestNvlValue(request, "yAxis");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+
+ String drillDownReportId = AppUtils.getRequestNvlValue(request, "drillDownReport");
+ if(!drillDownReportId.equals("-1")) {
+ ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, drillDownReportId,
+ false);
+ if (ddRr != null)
+ request.setAttribute("CHART_FORMFIELDS", ddRr.getReportFormFields());
+
+ for(ddRr.getReportFormFields().resetNext(); ddRr.getReportFormFields().hasNext(); ) {
+ FormField ff = ddRr.getReportFormFields().getNext();
+ if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
+ String value = AppUtils.getRequestNvlValue(request, "drillDown_"+ff.getFieldName());
+ ChartDrillFormfield cdf = new ObjectFactory().createChartDrillFormfield();
+ cdf.setFormfield(value);
+ rdef.getChartDrillOptions().getTargetFormfield().add(cdf);
+ }
+ }
+ }
+
+ } else {
+ if(chartType.equals(AppConstants.GT_BAR_3D)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ String chartGroup = AppUtils.getRequestNvlValue(request, "chartGroup");
+ String yAxis = AppUtils.getRequestNvlValue(request, "yAxis");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+ String drillDownReportId = AppUtils.getRequestNvlValue(request, "drillDownReport");
+ rdef.setDrillReportIdForChart(drillDownReportId);
+ if(drillDownReportId.equals("-1")){
+ rdef.setDrillReportIdForChart("");
+ }
+
+ if(!drillDownReportId.equals("-1")) {
+ ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, drillDownReportId,
+ false);
+ if (ddRr != null)
+ request.setAttribute("CHART_FORMFIELDS", ddRr.getReportFormFields());
+
+ for(ddRr.getReportFormFields().resetNext(); ddRr.getReportFormFields().hasNext(); ) {
+ FormField ff = ddRr.getReportFormFields().getNext();
+ if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
+ String value = AppUtils.getRequestNvlValue(request, "drillDown_"+ff.getFieldName());
+ ChartDrillFormfield cdf = new ObjectFactory().createChartDrillFormfield();
+ cdf.setFormfield(value);
+ rdef.getChartDrillOptions().getTargetFormfield().add(cdf);
+ }
+ }
+
+ String xAxisFormField = AppUtils.getRequestNvlValue(request, "drillDownXAxisFormfield");
+ String yAxisFormField = AppUtils.getRequestNvlValue(request, "drillDownYAxisFormfield");
+ String seriesAxisFormField = AppUtils.getRequestNvlValue(request, "drillDownSeriesAxisFormfield");
+
+ if(!xAxisFormField.equals("-1")){
+ rdef.setDrillXAxisFormField(xAxisFormField);
+
+ if(!yAxisFormField.equals("-1"))
+ rdef.setDrillYAxisFormField(yAxisFormField);
+ if(!seriesAxisFormField.equals("-1"))
+ rdef.setDrillSeriesFormField(seriesAxisFormField);
+ } else {
+ rdef.setDrillXAxisFormField("");
+ rdef.setDrillYAxisFormField("");
+ rdef.setDrillSeriesFormField("");
+ }
+ }
+
+ } else if(chartType.equals(AppConstants.GT_SCATTER)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+
+ }else if(chartType.equals(AppConstants.GT_REGRESSION)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+ }else if(chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR) || chartType.equals(AppConstants.GT_STACKED_VERT_BAR)
+ || chartType.equals(AppConstants.GT_STACKED_VERT_BAR_LINES) || chartType.equals(AppConstants.GT_STACKED_HORIZ_BAR_LINES)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+ }else if(chartType.equals(AppConstants.GT_LINE)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+ } else if (chartType.equals(AppConstants.GT_TIME_DIFFERENCE_CHART)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+ } else if (chartType.equals(AppConstants.GT_COMPARE_PREVYEAR_CHART)) {
+ String chartSeries = AppUtils.getRequestNvlValue(request, "chartSeries");
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ //debugLogger.debug("**********In " + chartSeries + " " + alldct.getColId());
+ alldct.setChartSeries((chartSeries.equals(alldct.getColId()))?true : false);
+ }
+
+ } else {
+ if (rdef.hasSeriesColumn()) {
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType alldct = (DataColumnType) iterator.next();
+ alldct.setChartSeries(false);
+ }
+ }
+
+ String drillDownReportId = AppUtils.getRequestNvlValue(request, "drillDownReport");
+ rdef.setDrillReportIdForChart(drillDownReportId);
+ if(drillDownReportId.equals("-1")){
+ rdef.setDrillReportIdForChart("");
+ }
+
+ if(!drillDownReportId.equals("-1")) {
+ ReportRuntime ddRr = (new ReportHandler()).loadReportRuntime(request, drillDownReportId,
+ false);
+ if (ddRr != null)
+ request.setAttribute("CHART_FORMFIELDS", ddRr.getReportFormFields());
+ for(ddRr.getReportFormFields().resetNext(); ddRr.getReportFormFields().hasNext(); ) {
+ FormField ff = ddRr.getReportFormFields().getNext();
+ if(!ff.getFieldType().equals(FormField.FFT_BLANK)) {
+ String value = AppUtils.getRequestNvlValue(request, "drillDown_"+ff.getFieldName());
+ ChartDrillFormfield cdf = new ObjectFactory().createChartDrillFormfield();
+ cdf.setFormfield(value);
+ rdef.getChartDrillOptions().getTargetFormfield().add(cdf);
+ }
+ }
+
+ String xAxisFormField = AppUtils.getRequestNvlValue(request, "drillDownXAxisFormfield");
+ String yAxisFormField = AppUtils.getRequestNvlValue(request, "drillDownYAxisFormfield");
+ String seriesAxisFormField = AppUtils.getRequestNvlValue(request, "drillDownSeriesAxisFormfield");
+
+ if(!xAxisFormField.equals("-1")){
+ rdef.setDrillXAxisFormField(xAxisFormField);
+
+ if(!yAxisFormField.equals("-1"))
+ rdef.setDrillYAxisFormField(yAxisFormField);
+ if(!seriesAxisFormField.equals("-1"))
+ rdef.setDrillSeriesFormField(seriesAxisFormField);
+ } else {
+ rdef.setDrillXAxisFormField("");
+ rdef.setDrillYAxisFormField("");
+ rdef.setDrillSeriesFormField("");
+ }
+ }
+
+ }
+ }
+
+ for (int i = 1; i < Math.max(valueColsCount, 1) + 1; i++) {
+ //debugLogger.debug("********** " + chartSeries);
+ if(i==1) {
+ /* Range Axis is resetted before adding */
+ for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
+ DataColumnType dct = (DataColumnType) iterator.next();
+ if(!nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND)) {
+ dct.setChartSeq(-1);
+ dct.setChartColor(null);
+ dct.setColOnChart(null);
+ dct.setCreateInNewChart(false);
+ dct.setChartGroup(null);
+ dct.setYAxis(null);
+ }
+ }
+
+ }
+ String newChartColAxis = AppUtils.getRequestNvlValue(request, "newChart" + i+"Axis");
+ String valueColId = AppUtils.getRequestNvlValue(request, "valueCol" + i);
+ String valueColColor = AppUtils.getRequestNvlValue(request, "valueCol" + i
+ + "Color");
+ String valueColAxis = AppUtils
+ .getRequestNvlValue(request, "valueCol" + valueColId + "Axis");
+ String chartGroup = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "chartGroup" + valueColId + "Axis"));
+ String yAxisGroup = "";
+ yAxisGroup = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "YAxisLabel" + valueColId));
+ //debugLogger.debug("^^^^^^^^^^^^^^^^^Chart Group " + chartGroup);
+ //if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
+ // debugLogger.debug("**********Outer If " + chartSeries);
+ //}
+
+ if (valueColId.length() > 0 && (!valueColId.equals(removeColId))) {
+ DataColumnType dct = rdef.getColumnById(valueColId);
+ dct.setChartSeq(idx++);
+ dct.setChartColor(valueColColor);
+ dct.setColOnChart(valueColAxis.equals("Y") ? "1" : "0");
+ if(chartType.equals(AppConstants.GT_TIME_SERIES)) {
+ dct.setCreateInNewChart(newChartColAxis.equals("Y") ? true : false);
+ } else
+ dct.setCreateInNewChart(false);
+
+ if(chartGroup!=null && chartGroup.length()>0)
+ dct.setChartGroup(chartGroup+"|"+valueColId);
+ else dct.setChartGroup("");
+ if(chartType.equals(AppConstants.GT_TIME_SERIES))
+ dct.setYAxis(nvl(yAxisGroup)+"|"+valueColId);
+ else if (chartType.equals(AppConstants.GT_BAR_3D))
+ dct.setYAxis(nvl(yAxisGroup)+"|"+valueColId);
+ else dct.setYAxis("");
+ //}
+ //else
+ //dct.setCreateInNewChart(false);
+ } else if (valueColId.length() > 0 && (valueColId.equals(removeColId))) {// if
+ DataColumnType dct = rdef.getColumnById(valueColId);
+ dct.setChartSeq(-1);
+ dct.setChartColor(null);
+ dct.setColOnChart(null);
+ dct.setCreateInNewChart(false);
+ dct.setChartGroup(null);
+ dct.setYAxis(null);
+ } else { // else
+ DataColumnType dct = rdef.getColumnById(valueColId);
+ dct.setChartSeq(-1);
+ dct.setChartColor(null);
+ dct.setColOnChart(null);
+ dct.setCreateInNewChart(false);
+ dct.setChartGroup(null);
+ dct.setYAxis(null);
+ }
+ } // for
+
+ if (action.equals(AppConstants.WA_ADD_USER)) {
+ String valueColId = AppUtils.getRequestNvlValue(request, "valueColNew");
+ String valueColColor = AppUtils.getRequestNvlValue(request, "valueColNewColor");
+ String valueColAxis = AppUtils.getRequestNvlValue(request, "valueColNewAxis");
+
+ if (valueColId.length() > 0) {
+ DataColumnType dct = rdef.getColumnById(valueColId);
+ dct.setChartSeq(idx++);
+ dct.setChartColor(valueColColor);
+ dct.setColOnChart(valueColAxis.equals("Y") ? "1" : "0");
+ } // if
+ } // for
+
+ return true; // reportUpdated;
+ } // processChart
+
+ public boolean processAdhocSchedule(HttpServletRequest request, String action)
+ throws Exception {
+ ReportSchedule reportSchedule = (ReportSchedule) request.getSession().getAttribute(AppConstants.SI_REPORT_SCHEDULE);
+ reportSchedule.setScheduleUserID(AppUtils.getUserID(request));
+ reportSchedule.setSchedEnabled(
+ nvl(AppUtils.getRequestValue(request, "schedEnabled"), "N"));
+ reportSchedule.setStartDate(
+ AppUtils.getRequestNvlValue(request, "schedStartDate"));
+ reportSchedule.setEndDate(
+ AppUtils.getRequestNvlValue(request, "schedEndDate"));
+ reportSchedule.setEndHour(AppUtils.getRequestNvlValue(request, "schedEndHour"));
+ reportSchedule.setEndMin(AppUtils.getRequestNvlValue(request, "schedEndMin"));
+ reportSchedule.setEndAMPM(AppUtils.getRequestNvlValue(request, "schedEndAMPM"));
+ //schedRunDate
+ reportSchedule.setRunDate(
+ AppUtils.getRequestNvlValue(request, "schedRunDate").length()>0?AppUtils.getRequestNvlValue(request, "schedRunDate"):AppUtils.getRequestNvlValue(request, "schedStartDate"));
+ reportSchedule.setRunHour(AppUtils.getRequestNvlValue(request, "schedHour"));
+ reportSchedule.setRunMin(AppUtils.getRequestNvlValue(request, "schedMin"));
+ reportSchedule.setRunAMPM(AppUtils.getRequestNvlValue(request, "schedAMPM"));
+ reportSchedule.setRecurrence(
+ AppUtils.getRequestNvlValue(request, "schedRecurrence"));
+ reportSchedule.setConditional(
+ nvl(AppUtils.getRequestValue(request, "conditional"), "N"));
+ reportSchedule.setConditionSQL(
+ AppUtils.getRequestNvlValue(request, "conditionSQL"));
+ reportSchedule.setNotify_type(
+ AppUtils.getRequestNvlValue(request, "notify_type"));
+ reportSchedule.setDownloadLimit(
+ AppUtils.getRequestNvlValue(request, "downloadLimit"));
+ reportSchedule.setFormFields(
+ AppUtils.getRequestNvlValue(request, "formFields"));
+ reportSchedule.setAttachmentMode(
+ AppUtils.getRequestNvlValue(request, "sendAttachment"));
+
+ String userId = AppUtils.getRequestNvlValue(request, "schedEmailAdd");
+ String roleId = AppUtils.getRequestNvlValue(request, "schedEmailAddRole");
+ int flag = 0;
+ if ((!(userId.length()>0 || roleId.length()>0) && (reportSchedule.getEmailToUsers().isEmpty() && reportSchedule.getEmailToRoles().isEmpty())) ) {
+ flag = 1;
+ }
+
+ if (flag == 1 || (action.equals(AppConstants.WA_ADD_USER) || action.equals(AppConstants.WA_ADD_ROLE)) ) {
+ String loggedInUserId = AppUtils.getUserID(request);
+ if (Globals.getUseLoginIdInSchedYN().equals("Y")){
+ reportSchedule.addEmailToUser(loggedInUserId, AppUtils.getUserLoginId(request));
+ } else
+ reportSchedule.addEmailToUser(loggedInUserId, (AppUtils.getUserName(loggedInUserId).length()>0?AppUtils.getUserName(loggedInUserId):(AppUtils.getUserLoginId(loggedInUserId).length()>0?AppUtils.getUserLoginId(loggedInUserId):loggedInUserId) ));
+ }
+ if (action.equals(AppConstants.WA_ADD_USER)) {
+ //String userId = AppUtils.getRequestNvlValue(request, "schedEmailAdd");
+ String userName = AppUtils.getUserName(userId);
+ if (Globals.getUseLoginIdInSchedYN().equals("Y")){
+ String userLoginId = AppUtils.getUserLoginId(userId);
+ if (userId.length() > 0 && (userLoginId != null && userLoginId.length() > 0))
+ reportSchedule.addEmailToUser(userId, userLoginId);
+ else {
+ if (userId.length() > 0 && (userName != null && userName.length() > 0) )
+ reportSchedule.addEmailToUser(userId, userName);
+ else {
+ reportSchedule.addEmailToUser(userId, userId);
+ }
+ }
+ }else{
+ if (userId.length() > 0 && (userName != null && userName.length() > 0) )
+ reportSchedule.addEmailToUser(userId, userName);
+ else {
+ reportSchedule.addEmailToUser(userId, userId);
+ }
+ }
+
+ } else if (action.equals(AppConstants.WA_DELETE_USER))
+ reportSchedule.removeEmailToUser(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ else if (action.equals(AppConstants.WA_ADD_ROLE)) {
+ //String roleId = AppUtils.getRequestNvlValue(request, "schedEmailAddRole");
+ String roleName = AppUtils.getRoleName(roleId);
+ if (roleId.length() > 0 && roleName != null)
+ reportSchedule.addEmailToRole(roleId, roleName);
+ } else if (action.equals(AppConstants.WA_DELETE_ROLE))
+ reportSchedule.removeEmailToRole(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ request.getSession().setAttribute(AppConstants.SI_REPORT_SCHEDULE, reportSchedule);
+ return true;
+ } // processAdhocSchedule
+
+ private boolean processSchedule(HttpServletRequest request, String action)
+ throws Exception {
+ // Added for form field chaining in schedule tab so that setParamValues() is called
+ request.setAttribute(AppConstants.SCHEDULE_ACTION, "Y");
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ ReportSchedule reportSchedule = rdef.getReportSchedule();
+ reportSchedule.setScheduleUserID(AppUtils.getUserID(request));
+ reportSchedule.setSchedEnabled(
+ nvl(AppUtils.getRequestValue(request, "schedEnabled"), "N"));
+ reportSchedule.setStartDate(
+ AppUtils.getRequestNvlValue(request, "schedStartDate"));
+ reportSchedule.setEndDate(
+ AppUtils.getRequestNvlValue(request, "schedEndDate"));
+ reportSchedule.setEndHour(AppUtils.getRequestNvlValue(request, "schedEndHour"));
+ reportSchedule.setEndMin(AppUtils.getRequestNvlValue(request, "schedEndMin"));
+ reportSchedule.setEndAMPM(AppUtils.getRequestNvlValue(request, "schedEndAMPM"));
+ //schedRunDate
+ reportSchedule.setRunDate(
+ AppUtils.getRequestNvlValue(request, "schedRunDate").length()>0?AppUtils.getRequestNvlValue(request, "schedRunDate"):AppUtils.getRequestNvlValue(request, "schedStartDate"));
+ reportSchedule.setRunHour(AppUtils.getRequestNvlValue(request, "schedHour"));
+ reportSchedule.setRunMin(AppUtils.getRequestNvlValue(request, "schedMin"));
+ reportSchedule.setRunAMPM(AppUtils.getRequestNvlValue(request, "schedAMPM"));
+ reportSchedule.setRecurrence(
+ AppUtils.getRequestNvlValue(request, "schedRecurrence"));
+ reportSchedule.setConditional(
+ nvl(AppUtils.getRequestValue(request, "conditional"), "N"));
+ reportSchedule.setConditionSQL(
+ AppUtils.getRequestNvlValue(request, "conditionSQL"));
+ reportSchedule.setNotify_type(
+ AppUtils.getRequestNvlValue(request, "notify_type"));
+ reportSchedule.setDownloadLimit(
+ AppUtils.getRequestNvlValue(request, "downloadLimit"));
+ reportSchedule.setFormFields(
+ AppUtils.getRequestNvlValue(request, "formFields"));
+ reportSchedule.setAttachmentMode(
+ AppUtils.getRequestNvlValue(request, "sendAttachment"));
+
+ reportSchedule.setEncryptMode(
+ AppUtils.getRequestNvlValue(request, "encryptMode"));
+ if (action.equals(AppConstants.WA_ADD_USER)) {
+ String userId = AppUtils.getRequestNvlValue(request, "schedEmailAdd");
+ String userName = AppUtils.getUserName(userId);
+ if (Globals.getUseLoginIdInSchedYN().equals("Y")){
+ String userLoginId = AppUtils.getUserLoginId(userId);
+ if (userId.length() > 0 && (userLoginId != null && userLoginId.length() > 0))
+ reportSchedule.addEmailToUser(userId, userLoginId);
+ else {
+ if (userId.length() > 0 && (userName != null && userName.length() > 0) )
+ reportSchedule.addEmailToUser(userId, userName);
+ else {
+ reportSchedule.addEmailToUser(userId, userId);
+ }
+ }
+ }else{
+ if (userId.length() > 0 && (userName != null && userName.length() > 0) )
+ reportSchedule.addEmailToUser(userId, userName);
+ else {
+ reportSchedule.addEmailToUser(userId, userId);
+ }
+ }
+ } else if (action.equals(AppConstants.WA_DELETE_USER))
+ reportSchedule.removeEmailToUser(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ else if (action.equals(AppConstants.WA_ADD_ROLE)) {
+ String roleId = AppUtils.getRequestNvlValue(request, "schedEmailAddRole");
+ String roleName = AppUtils.getRoleName(roleId);
+ if (roleId.length() > 0 && roleName != null)
+ reportSchedule.addEmailToRole(roleId, roleName);
+ } else if (action.equals(AppConstants.WA_DELETE_ROLE))
+ reportSchedule.removeEmailToRole(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+
+ return true;
+ } // processSchedule
+
+ private boolean processUserAccess(HttpServletRequest request, String action)
+ throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String ownerID = AppUtils.getRequestNvlValue(request, "reportOwner");
+ String rPublic = nvl(AppUtils.getRequestValue(request, "public"), "N");
+
+ boolean reportUpdated = (!(ownerID.equals(nvl(rdef.getOwnerID())) && rPublic
+ .equals(rdef.isPublic() ? "Y" : "N")));
+
+ rdef.getReportSecurity().setOwnerID(ownerID);
+ rdef.setPublic(rPublic.equals("Y"));
+
+ if (action.equals(AppConstants.WA_ADD_USER))
+ rdef.getReportSecurity().addUserAccess(
+ AppUtils.getRequestNvlValue(request, "newUserId"), "Y");
+ else if (action.equals(AppConstants.WA_DELETE_USER))
+ rdef.getReportSecurity().removeUserAccess(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ else if (action.equals(AppConstants.WA_GRANT_USER))
+ rdef.getReportSecurity().updateUserAccess(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "N");
+ else if (action.equals(AppConstants.WA_REVOKE_USER))
+ rdef.getReportSecurity().updateUserAccess(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "Y");
+ else if (action.equals(AppConstants.WA_ADD_ROLE))
+ rdef.getReportSecurity().addRoleAccess(
+ AppUtils.getRequestNvlValue(request, "newRoleId"), "Y");
+ else if (action.equals(AppConstants.WA_DELETE_ROLE))
+ rdef.getReportSecurity().removeRoleAccess(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID));
+ else if (action.equals(AppConstants.WA_GRANT_ROLE))
+ rdef.getReportSecurity().updateRoleAccess(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "N");
+ else if (action.equals(AppConstants.WA_REVOKE_ROLE))
+ rdef.getReportSecurity().updateRoleAccess(
+ AppUtils.getRequestNvlValue(request, AppConstants.RI_DETAIL_ID), "Y");
+
+ return reportUpdated;
+ } // processUserAccess
+
+ private boolean processClearLog(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+ String user_id = AppUtils.getUserID(request);
+ // Modified so that only the logged in user entries are erased. - Sundar
+ ReportLoader.clearReportLogEntries(rdef.getReportID(), user_id);
+ return false;
+ } // processClearLog
+
+ private boolean processValidateSQL(HttpServletRequest request) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ String sql = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "reportSQL"));
+ request.setAttribute("sqlValidated", "N");
+ rdef.parseReportSQL(sql);
+ request.setAttribute("sqlValidated", "Y");
+
+ return true;
+ } // processValidateSQL
+
+
+ /*****For Report Maps - Start******/
+ private boolean processMap(HttpServletRequest request, String action) throws Exception {
+ ReportDefinition rdef = (ReportDefinition) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_DEFINITION);
+
+ org.openecomp.portalsdk.analytics.xmlobj.ReportMap repMap = rdef.getReportMap();
+ //clearing already added
+ if (repMap != null){
+ repMap.getMarkers().removeAll(repMap.getMarkers());
+ }
+ String addressColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "addressColumn0"));
+ System.out.println(" #$%#$%#$% -- address col = " + addressColumn);
+ String dataColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataColumn0"));
+ String legendColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "legendColumn"));
+ //String legendDisplayName = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataHeaderL"));
+ //if(nvl(legendDisplayName).length()<=0) legendDisplayName = legendColumn;
+ String color = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "markerColor0"));
+ String isMapAllowed = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "isMapAllowed"));
+ String useDefaultSize = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "useDefaultSize"));
+ String height = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "height"));
+ String width = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "width"));
+ System.out.println(" #$%#$%#$% -- useDefaultSize="+ useDefaultSize+" height = " + height+" width="+width);
+
+ String addAddress = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "addAddress"));
+ String latCol = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "latColumn"));
+ String longCol = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "longColumn"));
+ String colorCol = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "colorColumn"));
+ if (isMapAllowed.equals(""))
+ isMapAllowed = "N";
+ if (useDefaultSize.equals(""))
+ useDefaultSize = "N";
+ if (repMap == null)
+ rdef.setReportMap(new ObjectFactory().createReportMap());
+ repMap.setAddressColumn(addressColumn);
+ repMap.setDataColumn(dataColumn);
+ repMap.setIsMapAllowedYN(isMapAllowed);
+ repMap.setUseDefaultSize(useDefaultSize);
+ repMap.setMarkerColor(color);
+ repMap.setAddAddressInDataYN(addAddress);
+ repMap.setLatColumn(latCol);
+ repMap.setLongColumn(longCol);
+ repMap.setColorColumn(colorCol);
+ repMap.setHeight(height.trim());
+ repMap.setWidth(width.trim());
+ repMap.setLegendColumn(legendColumn);
+ //repMap.setLegendDisplayName(legendDisplayName);
+
+ Marker m = new ObjectFactory().createMarker();
+ m.setAddressColumn(addressColumn);
+ m.setDataColumn(dataColumn);
+ repMap.getMarkers().add(m);
+ String markerCountString = AppUtils.getRequestNvlValue(request, "markerCount");
+ int markerCount = 0;
+ if (markerCountString != null && markerCountString.equals("") == false){
+ markerCount = new Integer(markerCountString).intValue();
+ }
+ for (int i = 1; i < markerCount; i ++){
+ String additionalAddressColumn = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "addressColumn" + i));
+ String additionalDataHeader = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataHeader" + i));
+ String additionalData = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "dataColumn" + i));
+ String additionalColor = XSSFilter.filterRequestOnlyScript(AppUtils.getRequestNvlValue(request, "markerColor" + i));
+ if (additionalAddressColumn.equals("1") == false){
+ m = new ObjectFactory().createMarker();
+ m.setAddressColumn(additionalAddressColumn);
+ m.setDataHeader(additionalDataHeader);
+ m.setDataColumn(additionalData);
+ m.setMarkerColor(additionalColor);
+ repMap.getMarkers().add(m);
+ }
+ }
+ return true;
+ } // processMap
+ /*****For Report Maps - End******/
+
+
+} // WizardProcessor
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequence.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequence.java
new file mode 100644
index 00000000..3a843873
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequence.java
@@ -0,0 +1,189 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import java.util.Vector;
+
+import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequence extends Vector {
+ // private String currentStep = AppConstants.WS_DEFINITION;
+ private int currentStepIdx = 0;
+
+ private String currentSubStep = "";
+
+ 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 String getNext() {
+ return hasNext() ? getStep(nextElemIdx++) : null;
+ } // getNext
+
+ // *****************************************************
+
+ public WizardSequence() {
+ add(AppConstants.WS_DEFINITION);
+ } // WizardSequence
+
+ private String getStep(int index) {
+ return (String) get(index);
+ } // getStep
+
+ private int getStepIndex(String step) {
+ for (int i = 0; i < size(); i++)
+ if (getStep(i).equals(step))
+ return i;
+
+ throw new IndexOutOfBoundsException();
+ } // getStepIndex
+
+ /*
+ * private String getInitialStep() { return getStep(0); } // getInitialStep
+ *
+ * private String getFinalStep() { return getStep(getStepCount()-1); } //
+ * getFinalStep
+ */
+ private boolean isInitialStep(int index) {
+ return (index == 0);
+ } // isInitialStep
+
+ /*
+ * private boolean isInitialStep(String step) { return
+ * isInitialStep(getStepIndex(step)); } // isInitialStep
+ */
+ private boolean isFinalStep(int index) {
+ if (index == 0)
+ return false;
+
+ return (index == (getStepCount() - 1));
+ } // isFinalStep
+
+ /*
+ * private boolean isFinalStep(String step) { return
+ * isFinalStep(getStepIndex(step)); } // isFinalStep
+ */
+
+ private int getNextStepIndex(int index) {
+ return (index == (getStepCount() - 1)) ? index : (index + 1);
+ } // getNextStep
+
+ /*
+ * private String getNextStep(String step) { return
+ * getStep(getNextStepIndex(getStepIndex(step))); } // getNextStep
+ *
+ * private String getNextStep(String step, String subStep) {
+ * if(subStep.length()>0) return step;
+ *
+ * return getNextStep(step); } // getNextStep
+ */
+ private int getPrevStepIndex(int index) {
+ return (index == 0) ? index : (index - 1);
+ } // getPrevStepIndex
+
+ /*
+ * private String getPrevStep(String step) { return
+ * getStep(getPrevStepIndex(getStepIndex(step))); } // getPrevStep
+ *
+ * private String getPrevStep(String step, String subStep) {
+ * if(subStep.length()>0) return step;
+ *
+ * return getPrevStep(step); } // getPrevStep
+ */
+ // *****************************************************
+ public int getStepCount() {
+ return size();
+ } // getStepCount
+
+ public int getCurrentStepIndex() {
+ return currentStepIdx + 1;
+ } // getCurrentStepIndex
+
+ public String getCurrentStep() {
+ return getStep(currentStepIdx);
+ } // getCurrentStep
+
+ public String getCurrentSubStep() {
+ return currentSubStep;
+ } // getCurrentSubStep
+
+ public boolean isInitialStep() {
+ return isInitialStep(currentStepIdx);
+ } // isInitialStep
+
+ public boolean isFinalStep() {
+ return isFinalStep(currentStepIdx);
+ } // isFinalStep
+
+ public void performAction(String action, ReportDefinition rdef) {
+ if (action.equals(AppConstants.WA_BACK))
+ if (currentSubStep.length() > 0)
+ currentSubStep = "";
+ else
+ currentStepIdx = getPrevStepIndex(currentStepIdx);
+ else if (action.equals(AppConstants.WA_NEXT)) {
+ if (currentSubStep.length() > 0)
+ currentSubStep = "";
+ else {
+ currentStepIdx = getNextStepIndex(currentStepIdx);
+ if (rdef != null)
+ if (!rdef.getReportDefType().equals(AppConstants.RD_SQL_BASED))
+ if (getCurrentStep().equals(AppConstants.WS_TABLES)
+ && (rdef.getDataSourceList().getDataSource().size() == 0))
+ currentSubStep = AppConstants.WSS_ADD;
+ else if (getCurrentStep().equals(AppConstants.WS_COLUMNS)
+ && (rdef.getAllColumns().size() == 0))
+ currentSubStep = (rdef.getReportType().equals(
+ AppConstants.RT_CROSSTAB) ? AppConstants.WSS_ADD
+ : AppConstants.WSS_ADD_MULTI);
+ }
+ } else if (action.equals(AppConstants.WA_EDIT) || action.equals(AppConstants.WA_ADD)
+ || action.equals(AppConstants.WA_ADD_MULTI)
+ || action.equals(AppConstants.WA_ORDER_ALL)|| action.equals(AppConstants.WSS_ADD_BLANK) || action.equals(AppConstants.WA_MODIFY)) {
+ currentSubStep = action;
+ }
+ else if (currentSubStep.equals(AppConstants.WSS_ADD)
+ || currentSubStep.equals(AppConstants.WSS_EDIT))
+ currentSubStep = AppConstants.WSS_EDIT;
+ else
+ currentSubStep = "";
+ } // performAction
+
+ public void performGoToStep(String step) {
+ int stepIdx = getStepIndex(step);
+
+ if (stepIdx >= 0 && stepIdx < getStepCount()) {
+ currentStepIdx = stepIdx;
+ currentSubStep = "";
+ }
+ } // performGoToStep
+
+} // WizardSequence
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceCrossTab.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceCrossTab.java
new file mode 100644
index 00000000..2f16dcca
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceCrossTab.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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceCrossTab extends WizardSequence {
+
+ public WizardSequenceCrossTab(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_TABLES);
+ add(AppConstants.WS_COLUMNS);
+ add(AppConstants.WS_FORM_FIELDS);
+ add(AppConstants.WS_FILTERS);
+ add(AppConstants.WS_JAVASCRIPT);
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceCrossTab
+
+} // WizardSequenceCrossTab
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceDashboard.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceDashboard.java
new file mode 100644
index 00000000..d883e27e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceDashboard.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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceDashboard extends WizardSequence {
+
+ public WizardSequenceDashboard(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceDashboard
+
+} // WizardSequenceDashboard
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceLinear.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceLinear.java
new file mode 100644
index 00000000..1ae4e8a6
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceLinear.java
@@ -0,0 +1,45 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceLinear extends WizardSequence {
+
+ public WizardSequenceLinear(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_TABLES);
+ add(AppConstants.WS_COLUMNS);
+ add(AppConstants.WS_FORM_FIELDS);
+ add(AppConstants.WS_FILTERS);
+ add(AppConstants.WS_SORTING);
+ //add(AppConstants.WS_JAVASCRIPT);
+ //add(AppConstants.WS_CHART);
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceLinear
+
+} // WizardSequenceLinear
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedCrossTab.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedCrossTab.java
new file mode 100644
index 00000000..663c30c9
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedCrossTab.java
@@ -0,0 +1,42 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceSQLBasedCrossTab extends WizardSequence {
+
+ public WizardSequenceSQLBasedCrossTab(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_SQL);
+ add(AppConstants.WS_COLUMNS);
+ add(AppConstants.WS_FORM_FIELDS);
+ add(AppConstants.WS_JAVASCRIPT);
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceSQLBasedCrossTab
+
+} // WizardSequenceSQLBasedCrossTab
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedHive.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedHive.java
new file mode 100644
index 00000000..77996380
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedHive.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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceSQLBasedHive extends WizardSequence {
+
+ public WizardSequenceSQLBasedHive(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_SQL);
+ add(AppConstants.WS_COLUMNS);
+ add(AppConstants.WS_FORM_FIELDS);
+ add(AppConstants.WS_JAVASCRIPT);
+ add(AppConstants.WS_CHART);
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_MAP);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceSQLBasedHive
+
+} // WizardSequenceSQLBasedHive
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinear.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinear.java
new file mode 100644
index 00000000..eb90d3d6
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinear.java
@@ -0,0 +1,45 @@
+/*-
+ * ================================================================================
+ * 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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceSQLBasedLinear extends WizardSequence {
+
+ public WizardSequenceSQLBasedLinear(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_SQL);
+ add(AppConstants.WS_COLUMNS);
+ add(AppConstants.WS_FORM_FIELDS);
+ //add(AppConstants.WS_JAVASCRIPT);
+ //if(!Globals.showAnimatedChartOnly())
+ //add(AppConstants.WS_CHART);
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_MAP);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceSQLBasedLinear
+
+} // WizardSequenceSQLBasedLinear
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinearDatamining.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinearDatamining.java
new file mode 100644
index 00000000..e43bf288
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/controller/WizardSequenceSQLBasedLinearDatamining.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.controller;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+
+public class WizardSequenceSQLBasedLinearDatamining extends WizardSequence {
+
+ public WizardSequenceSQLBasedLinearDatamining(boolean userIsAuthorizedToSeeLog) {
+ super();
+
+ add(AppConstants.WS_SQL);
+ add(AppConstants.WS_COLUMNS);
+ add(AppConstants.WS_FORM_FIELDS);
+ add(AppConstants.WS_DATA_FORECASTING);
+ add(AppConstants.WS_JAVASCRIPT);
+ add(AppConstants.WS_CHART);
+ add(AppConstants.WS_USER_ACCESS);
+ //add(AppConstants.WS_SCHEDULE);
+ if (userIsAuthorizedToSeeLog)
+ if (Globals.getEnableReportLog())
+ add(AppConstants.WS_REPORT_LOG);
+ add(AppConstants.WS_RUN);
+ } // WizardSequenceSQLBasedLinear
+
+} // WizardSequenceSQLBasedLinear
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorException.java
new file mode 100644
index 00000000..f0de41f8
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorException.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.error;
+
+public class RaptorException extends Exception {
+
+ public RaptorException(String message) {
+ super(message);
+ }
+
+ public RaptorException(String message, Throwable ex) {
+ super(message, ex);
+ }
+
+ public RaptorException(Throwable ex) {
+ super(ex);
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorRuntimeException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorRuntimeException.java
new file mode 100644
index 00000000..98938f49
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorRuntimeException.java
@@ -0,0 +1,36 @@
+/*-
+ * ================================================================================
+ * 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.error;
+
+public class RaptorRuntimeException extends RaptorException {
+
+ public RaptorRuntimeException (String message) {
+ super(message);
+ }
+
+ public RaptorRuntimeException (String message, Throwable ex) {
+ super(message, ex);
+ }
+
+ public RaptorRuntimeException (Throwable ex) {
+ super(ex);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorSchedularException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorSchedularException.java
new file mode 100644
index 00000000..3339ba5f
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/RaptorSchedularException.java
@@ -0,0 +1,36 @@
+/*-
+ * ================================================================================
+ * 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.error;
+
+public class RaptorSchedularException extends RaptorException {
+
+ public RaptorSchedularException (String message) {
+ super(message);
+ }
+
+ public RaptorSchedularException (String message, Throwable ex) {
+ super(message, ex);
+ }
+
+ public RaptorSchedularException (Throwable ex) {
+ super(ex);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ReportSQLException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ReportSQLException.java
new file mode 100644
index 00000000..f78810ee
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ReportSQLException.java
@@ -0,0 +1,51 @@
+/*-
+ * ================================================================================
+ * 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.error;
+
+public class ReportSQLException extends RaptorException {
+ private String reportSQL = null;
+
+ public ReportSQLException(String message, String reportSQL) {
+ super(message);
+
+ this.reportSQL = reportSQL;
+ } // ReportSQLException
+
+ public ReportSQLException(String message, String reportSQL, Throwable ex) {
+ super(message, ex);
+
+ this.reportSQL = reportSQL;
+ } // ReportSQLException
+
+ public ReportSQLException(String message) {
+ super(message);
+ this.reportSQL = "";
+ } // ReportSQLException
+
+ public ReportSQLException(String message, Throwable ex) {
+ super(message, ex);
+ this.reportSQL = "";
+ } // ReportSQLException
+
+ public String getReportSQL() {
+ return reportSQL;
+ } // getReportSQL
+
+} // ReportSQLException
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserAccessException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserAccessException.java
new file mode 100644
index 00000000..ed88f5ff
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserAccessException.java
@@ -0,0 +1,34 @@
+/*-
+ * ================================================================================
+ * 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.error;
+
+public class UserAccessException extends RaptorRuntimeException {
+
+ public UserAccessException(Throwable ex) {
+ super(ex);
+ } // UserAccessException
+
+ public UserAccessException(String reportID, String userName, String accessType) {
+ //super("User " + userName + " does NOT have " + accessType + " permission for report "
+ // + reportID);
+ super("Access denied. Please contact Administrator");
+ } // UserAccessException
+
+} // UserAccessException
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserDefinedException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserDefinedException.java
new file mode 100644
index 00000000..31476bf6
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/UserDefinedException.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.error;
+
+/**
+ * This class is exclusively used to print error messages to user.
+ *
+ */
+public class UserDefinedException extends RaptorRuntimeException {
+
+ public UserDefinedException(String message) {
+ super(message);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ValidationException.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ValidationException.java
new file mode 100644
index 00000000..ee26abd0
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/error/ValidationException.java
@@ -0,0 +1,42 @@
+/*-
+ * ================================================================================
+ * 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.error;
+
+public class ValidationException extends RaptorRuntimeException {
+ private String fieldID = null;
+
+ public ValidationException(String message) {
+ super(message);
+ }
+
+ public ValidationException(String message, Throwable ex) {
+ super(message, ex);
+ }
+
+ public ValidationException(String fieldID, String message) {
+ super(message);
+ this.fieldID = fieldID;
+ }
+
+ public String getFieldID() {
+ return fieldID;
+ }
+
+} // ValidationException
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/Line.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/Line.java
new file mode 100644
index 00000000..00445606
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/Line.java
@@ -0,0 +1,86 @@
+/*-
+ * ================================================================================
+ * 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.gmap.line;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.openecomp.portalsdk.analytics.gmap.map.NovaMap;
+
+public class Line {
+ private NovaMap map;
+ private LineCollection lineCollection;
+ private ArrayList<String> selectionList;
+ private Set<String> lineIDSet;
+
+ public Line(NovaMap map) {
+ this.map = map;
+ lineCollection = new LineCollection();
+ lineIDSet = new HashSet<String>();
+ selectionList = new ArrayList<String>();
+ }
+
+ public ArrayList<LineInfo> lineExist(Point2D screenPoint) {
+ ArrayList<LineInfo> existLineInfo = null;
+ String selectedLine = null;
+ String selectedType = null;
+ int nearest = -1;
+ int nodeSize = map.getShapeWidth();
+ nodeSize = nodeSize > 20 ? 20 : nodeSize;
+ int x0 = (int) screenPoint.getX();
+ int y0 = (int) screenPoint.getY();
+
+ ArrayList<LineInfo> lineInfos = lineCollection.getLineCollection();
+
+ for (LineInfo lineInfo : lineInfos) {
+ Point2D point1 = map.getScreenPointFromLonLat(lineInfo.geoCoordinate1.longitude, lineInfo.geoCoordinate1.latitude);
+ Point2D point2 = map.getScreenPointFromLonLat(lineInfo.geoCoordinate2.longitude, lineInfo.geoCoordinate2.latitude);
+ int x1 = (int) point1.getX();
+ int y1 = (int) point1.getY();
+ int x2 = (int) point2.getX();
+ int y2 = (int) point2.getY();
+ int diff = Math.abs((x0 - x1) * (y0 - y2) - (x0 - x2) * (y0 - y1));
+
+ if (((x1 - x0) * (x2 - x0) <= (nodeSize * 2)) && ((y1 - y0) * (y2 - y0) <= (nodeSize * 2)) &&
+ diff < (Math.abs(y1 - y2) + Math.abs(x1 - x2)) * (int) (nodeSize * .2)) {
+ if (nearest == -1) {
+ nearest = diff;
+ selectedLine = lineInfo.getLineID();
+ selectedType = lineInfo.getLineType();
+ }
+ else if (diff <= nearest) {
+ nearest = diff;
+ selectedLine = lineInfo.getLineID();
+ selectedType = lineInfo.getLineType();
+ }
+
+ if (existLineInfo == null) {
+ existLineInfo = new ArrayList<LineInfo>();
+ }
+
+ existLineInfo.add(lineInfo);
+ }
+ }
+
+ return existLineInfo;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineCollection.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineCollection.java
new file mode 100644
index 00000000..249b277c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineCollection.java
@@ -0,0 +1,158 @@
+/*-
+ * ================================================================================
+ * 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.gmap.line;
+
+import java.util.ArrayList;
+import java.util.HashSet;
+import java.util.Set;
+
+public class LineCollection {
+ private Set<String> selectedLine; // all selected node
+ private String lineID; // last clicked node
+ private ArrayList<LineInfo> lineCollection;
+
+ public LineCollection() {
+ lineCollection = new ArrayList<LineInfo>(20000);
+ selectedLine = new HashSet<String>();
+ }
+
+ public void addSelectedLine(String lineID) {
+ selectedLine.add(lineID);
+ }
+
+ public void removeSelectedLine(String lineID) {
+ selectedLine.remove(lineID);
+ }
+
+ public Set<String> getSelectedLine() {
+ return selectedLine;
+ }
+
+ public boolean containSelectedLine(String lineID) {
+ return selectedLine.contains(lineID);
+ }
+
+ public void clearSelectedLine() {
+ selectedLine.clear();
+ }
+
+ public void addLine(LineInfo lineInfo) {
+ lineCollection.add(lineInfo);
+ }
+
+ public ArrayList<LineInfo> getLineCollection() {
+ return lineCollection;
+ }
+
+ public LineInfo getLine(String lineID) {
+ for (LineInfo lineInfo : lineCollection) {
+ if (lineInfo.getLineID().equalsIgnoreCase(lineID)) {
+ return lineInfo;
+ }
+ }
+
+ return null;
+ }
+
+ public LineInfo getLine(String lineID, String lineType) {
+ for (LineInfo lineInfo : lineCollection) {
+ if (lineInfo.getLineID().equalsIgnoreCase(lineID) && lineInfo.getLineType().equalsIgnoreCase(lineType)) {
+ return lineInfo;
+ }
+ }
+
+ return null;
+ }
+
+ public LineInfo getLine(String nodeID1, String nodeID2, boolean dummy) {
+ for (LineInfo lineInfo : lineCollection) {
+ if ((lineInfo.getNodeID1().equalsIgnoreCase(nodeID1) && lineInfo.getNodeID2().equalsIgnoreCase(nodeID2)) ||
+ (lineInfo.getNodeID1().equalsIgnoreCase(nodeID2) && lineInfo.getNodeID2().equalsIgnoreCase(nodeID1))) {
+ return lineInfo;
+ }
+ }
+
+ return null;
+ }
+
+ public LineInfo removeLine(String lineID) {
+ for (int i = 0; i < lineCollection.size(); i++) {
+ if (lineCollection.get(i).getLineID().equalsIgnoreCase(lineID)) {
+ return lineCollection.remove(i);
+ }
+ }
+
+ removeSelectedLine(lineID);
+ return null;
+ }
+
+ public LineInfo removeLine(String lineID, String lineType) {
+ for (int i = 0; i < lineCollection.size(); i++) {
+ if (lineCollection.get(i).getLineID().equalsIgnoreCase(lineID) &&
+ lineCollection.get(i).getLineType().equalsIgnoreCase(lineType)) {
+ return lineCollection.remove(i);
+ }
+ }
+
+ removeSelectedLine(lineID);
+ return null;
+ }
+
+ public void clearLine() {
+ lineCollection.clear();
+ selectedLine.clear();
+ }
+
+ public int getSize() {
+ return lineCollection.size();
+ }
+
+ public String getLineID() {
+ return lineID;
+ }
+
+ public void setLineID(String lineID) {
+ this.lineID = lineID;
+ }
+
+ public void clearAllCollection () {
+ clearLine();
+ clearSelectedLine();
+ this.lineID = null;
+ }
+
+ public String[] getWildCardLine(String lineID) {
+ ArrayList<String> list = new ArrayList<String>();
+
+ for (LineInfo lineInfo : lineCollection) {
+ if (lineInfo.getLineID().toLowerCase().indexOf(lineID.toLowerCase()) != -1) {
+ list.add(lineInfo.getLineID());
+ }
+ }
+
+ String[] result = new String[list.size()];
+
+ for (int i = 0; i < list.size(); i++) {
+ result[i] = list.get(i);
+ }
+
+ return result;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineInfo.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineInfo.java
new file mode 100644
index 00000000..fd9ec94c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/line/LineInfo.java
@@ -0,0 +1,190 @@
+/*-
+ * ================================================================================
+ * 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.gmap.line;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.openecomp.portalsdk.analytics.gmap.map.GeoCoordinate;
+
+public class LineInfo {
+ public GeoCoordinate geoCoordinate1;
+ public GeoCoordinate geoCoordinate2;
+
+ private String nodeID1;
+ private String nodeID2;
+
+ private String lineID;
+ private String lineType;
+ private String lineDescription;
+
+ private boolean moveable;
+ private boolean deleteable;
+
+ private int state;
+
+ private Map<String, String> lineAttributes;
+
+ public LineInfo(String nodeID1, String nodeID2) {
+ this.nodeID1 = nodeID1;
+ this.nodeID2 = nodeID2;
+ lineAttributes = new HashMap<String, String>();
+ }
+
+ public LineInfo clone() {
+ LineInfo lineInfo = new LineInfo(nodeID1, nodeID2);
+ lineInfo.geoCoordinate1.longitude = geoCoordinate1.longitude;
+ lineInfo.geoCoordinate1.latitude = geoCoordinate1.latitude;
+ lineInfo.geoCoordinate2.longitude = geoCoordinate2.longitude;
+ lineInfo.geoCoordinate2.latitude = geoCoordinate2.latitude;
+ lineInfo.setDescription(lineDescription);
+ lineInfo.setLineID(lineID);
+ lineInfo.setLineType(lineType);
+ lineInfo.setMoveable(moveable);
+ lineInfo.setDeleteable(deleteable);
+ lineInfo.setState(state);
+ lineInfo.initializeAttributes(lineAttributes);
+
+ return lineInfo;
+ }
+
+ public void setLineID(String lineID) {
+ this.lineID = lineID;
+ geoCoordinate1 = new GeoCoordinate();
+ geoCoordinate2 = new GeoCoordinate();
+ }
+
+ public String getLineID() {
+ return lineID;
+ }
+
+ public void setLineType(String lineType) {
+ this.lineType = lineType;
+ }
+
+ public String getLineType() {
+ return lineType;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public void setState(int state) {
+ this.state = state;
+ }
+
+ public String getDescription() {
+ return lineDescription;
+ }
+
+ public void setDescription(String lineDescription) {
+ this.lineDescription = lineDescription;
+ }
+
+ public boolean isMoveable() {
+ return moveable;
+ }
+
+ public void setMoveable(boolean moveable) {
+ this.moveable = moveable;
+ }
+
+ public String getNodeID1() {
+ return nodeID1;
+ }
+
+ public void setNodeID1(String nodeID1) {
+ this.nodeID1 = nodeID1;
+ }
+
+ public String getNodeID2() {
+ return nodeID2;
+ }
+
+ public void setNodeID2(String nodeID2) {
+ this.nodeID2 = nodeID2;
+ }
+
+ public void initializeAttributes(Map<String, String> lineAttributes) {
+ this.lineAttributes.clear();
+ Set<String> keySet = lineAttributes.keySet();
+ Iterator<String> iter = keySet.iterator();
+
+ while (iter.hasNext()) {
+ String key = iter.next();
+ this.lineAttributes.put(key, lineAttributes.get(key));
+ }
+ }
+
+ public void setAttribute(String key, String value) {
+ lineAttributes.put(key, value);
+ }
+
+ public String getAttribute(String key) {
+ String value = lineAttributes.get(key);
+ return value;
+ }
+
+ public List<String> getAttributeKeys() {
+ Set<String> keySet = lineAttributes.keySet();
+ List<String> keys = new ArrayList<String>(keySet.size());
+ Iterator<String> iter = keySet.iterator();
+
+ while (iter.hasNext()) {
+ String key = iter.next();
+
+ if (key.indexOf("x_") != 0) {
+ keys.add(key);
+ }
+ }
+
+ return keys;
+ }
+
+ public List<String> getAttributeInternalKeys() {
+ Set<String> keySet = lineAttributes.keySet();
+ List<String> internalKeys = new ArrayList<String>();
+ Iterator<String> iter = keySet.iterator();
+
+ while (iter.hasNext()) {
+ String key = iter.next();
+
+ if (key.indexOf("x_") == 0) {
+ key = key.substring(2);
+ internalKeys.add(key);
+ }
+ }
+
+ return internalKeys;
+ }
+
+ public boolean isDeleteable() {
+ return deleteable;
+ }
+
+ public void setDeleteable(boolean deleteable) {
+ this.deleteable = deleteable;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/ColorProperties.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/ColorProperties.java
new file mode 100644
index 00000000..a87af423
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/ColorProperties.java
@@ -0,0 +1,119 @@
+/*-
+ * ================================================================================
+ * 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.gmap.map;
+
+import java.awt.Color;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+
+public class ColorProperties {
+ private NovaMap map;
+
+ private Map<String, Object> colorProperties;
+ private ArrayList<String> nodeLegends;
+ private ArrayList<String> lineLegends;
+
+ public ColorProperties(NovaMap map) {
+ this.map = map;
+ colorProperties = new HashMap<String, Object>();
+ }
+
+ public void setColor(String type, String color) {
+ //colorProperties.put(type + "_COLOR", color);
+ String[] rgb = color.split(",");
+ colorProperties.put(type + "_COLOR",
+ new Color(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]),
+ Integer.parseInt(rgb[2])));
+ }
+
+// public void setColor(String type, int number, String color) {
+// Object object = colorProperties.get(type + ":" + number + "_COLOR");
+//
+// if (object != null) {
+// Color oldColor = (Color) object;
+//
+// if (!color.equals(oldColor.getRed() + "," + oldColor.getGreen() + "," + oldColor.getBlue())) {
+// String[] rgb = color.split(",");
+// colorProperties.put(type + ":" + number + "_COLOR",
+// new Color(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]),
+// Integer.parseInt(rgb[2])));
+// }
+// }
+// else {
+// String[] rgb = color.split(",");
+// colorProperties.put(type + ":" + number + "_COLOR",
+// new Color(Integer.parseInt(rgb[0]), Integer.parseInt(rgb[1]),
+// Integer.parseInt(rgb[2])));
+// }
+// }
+
+// public Color getColor(String type, int number) {
+// return (Color) colorProperties.get(type + ":" + number + "_COLOR");
+// }
+
+ public Color getColor(String type) {
+ return (Color) colorProperties.get(type + "_COLOR");
+ }
+
+ public void setShape(String type, String shape) {
+ colorProperties.put(type + "_SHAPE", shape);
+ }
+
+ public void setShape(String type, int number, String shape) {
+ colorProperties.put(type + ":" + number + "_SHAPE", shape);
+ }
+
+ public String getShape(String type) {
+ return (String) colorProperties.get(type + "_SHAPE");
+ }
+
+ public String getShape(String type, int number) {
+ return (String) colorProperties.get(type + ":" + number + "_SHAPE");
+ }
+
+ public void setSize(String type, String size) {
+ colorProperties.put(type + "_SIZE", size);
+ }
+
+ public void setSize(String type, int number, String size) {
+ colorProperties.put(type + ":" + number + "_SIZE", size);
+ }
+
+ public int getSize(String type) {
+ Object object = colorProperties.get(type + "_SIZE");
+
+ if (object == null) {
+ return 0;
+ }
+
+ return Integer.parseInt(object.toString());
+ }
+
+ public int getSize(String type, int number) {
+ Object object = colorProperties.get(type + ":" + number + "_SIZE");
+
+ if (object == null) {
+ return 0;
+ }
+
+ return Integer.parseInt(object.toString());
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GMapProperties.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GMapProperties.java
new file mode 100644
index 00000000..7c66f4be
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GMapProperties.java
@@ -0,0 +1,46 @@
+/*-
+ * ================================================================================
+ * 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.gmap.map;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+public class GMapProperties {
+
+ public static String getProjectFolder() {
+ return Globals.getProjectFolder();
+ }
+
+ public static String getMarketShapefileFolder() {
+ return Globals.getMarketShapefileFolder();
+ }
+
+ public static String getTileSize() {
+ return Globals.getTileSize();
+ }
+
+ public static String getOutputFolder() {
+ return Globals.getOutputFolder();
+ }
+
+ public static String getTempFolderURL() {
+ return Globals.getTempFolderURL();
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GeoCoordinate.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GeoCoordinate.java
new file mode 100644
index 00000000..ed3fe8bd
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/GeoCoordinate.java
@@ -0,0 +1,25 @@
+/*-
+ * ================================================================================
+ * 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.gmap.map;
+
+public class GeoCoordinate {
+ public double longitude;
+ public double latitude;
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/MapConstant.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/MapConstant.java
new file mode 100644
index 00000000..cef1f4ad
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/MapConstant.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.gmap.map;
+
+public class MapConstant {
+ public static final String CURSOR = "CURSOR";
+ public static final String FILLED_TRIANGLE = "FILLED TRIANGLE";
+ public static final String FILLED_SQUARE = "FILLED SQUARE";
+ public static final String FILLED_CIRCLE = "FILLED CIRCLE";
+ public static final String FILLED_DIAMOND = "FILLED DIAMOND";
+ public static final String HOLLOW_TRIANGLE = "HOLLOW TRIANGLE";
+ public static final String HOLLOW_SQUARE = "HOLLOW SQUARE";
+ public static final String HOLLOW_CIRCLE = "HOLLOW CIRCLE";
+ public static final String HOLLOW_DIAMOND = "HOLLOW DIAMOND";
+
+ public static int NORMAL_STATE = 1;
+ public static int FORCE_STATE = 2;
+ public static int EXCLUDE_STATE = 3;
+ public static int ANY_STATE = 4;
+
+ public static int ZOOM_MIN = 1;
+ public static int ZOOM_MAX = 22;
+
+ public static final double ARROW_ANGLE_HIGH = .75;
+ public static final double ARROW_ANGLE_LOW = .45;
+ public static final double ZOOMING_INDEX = .6;
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/NovaMap.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/NovaMap.java
new file mode 100644
index 00000000..ba245064
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/NovaMap.java
@@ -0,0 +1,504 @@
+/*-
+ * ================================================================================
+ * 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.gmap.map;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.NoninvertibleTransformException;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.util.ArrayList;
+import java.util.HashSet;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.gmap.line.Line;
+import org.openecomp.portalsdk.analytics.gmap.line.LineInfo;
+import org.openecomp.portalsdk.analytics.gmap.map.layer.SwingLayer;
+import org.openecomp.portalsdk.analytics.gmap.node.Node;
+import org.openecomp.portalsdk.analytics.gmap.node.NodeInfo;
+
+public class NovaMap {
+ private static int[] shapeWidth;
+
+ public static final Font TEXT_FONT = new Font("sans-serif", Font.BOLD, 12);
+ public static final Font HEADER_FONT = new Font("sans-serif", Font.ITALIC+Font.BOLD, 12);
+
+ private HashSet<String> showList;
+ private ArrayList<SwingLayer> swingLayers;
+ private AffineTransform transform;
+
+ private Node node;
+ private Line line;
+ private ColorProperties colorProperties;
+
+ private Rectangle2D defaultBoundary;
+
+ private int zoomLevel;
+
+ private String currentYearMonth;
+
+ private String dataLoaded = "";
+
+ /**
+ * size in screen pixel
+ */
+ private Rectangle boundingBox;
+
+ /**
+ * size in pixel web mercator projection
+ */
+ private Rectangle2D mapArea;
+
+ /**
+ * size in longitude latitude
+ */
+ private Rectangle2D geoArea;
+
+ public static double[] meter2pixel;
+
+ private boolean showLegend = false;
+
+ static {
+ initShapeWidth();
+ initMeter2Pixel();
+ }
+
+ private static void initMeter2Pixel() {
+ meter2pixel = new double[MapConstant.ZOOM_MAX - MapConstant.ZOOM_MIN+1];
+ meter2pixel[0] = 156543.04/2;
+ for(int i=1; i<meter2pixel.length; ++i)
+ meter2pixel[i] = meter2pixel[i-1]/2;
+ }
+
+ private static void initShapeWidth() {
+ // ZOOM_MAX+1 is added to below line because of ArrayIndexOutOfException. This is Suggested by Hendra Tuty. - Sundar
+ shapeWidth = new int[MapConstant.ZOOM_MAX];
+ int width = 0;
+ for (int i = 0; i < shapeWidth.length; i++) {
+ if (i < 5) {
+
+ }
+ else if (i == 5) {
+ width = 4;
+ }
+ else if (i > 4 && i < 10) {
+ width += 2;
+ }
+ else {
+ width++;
+ }
+
+ shapeWidth[i] = width;
+ }
+ }
+
+ public NovaMap() {
+ boundingBox = new Rectangle();
+ mapArea = new Rectangle2D.Double();
+ geoArea = new Rectangle2D.Double();
+ showList = new HashSet<String>();
+ swingLayers = new ArrayList<SwingLayer>();
+ }
+
+
+
+ public int getBestZoomLevel(double Latitude1, double Longitude1,
+ double Latitude2, double Longitude2,
+ double height, double width) {
+
+ if (height==0)
+ height=700;
+ if (width==0)
+ width=1200;
+
+ double lat1 = Math.min(Latitude1, Latitude1);
+ double CosLat = Math.cos(Math.toRadians(lat1));
+ double Wmeter = getDistance(
+ lat1, Longitude1,
+ lat1, Longitude2)/CosLat;
+ double Hmeter = getDistance(
+ Latitude1, Longitude1,
+ Latitude2, Longitude1)/CosLat;
+
+ int zoom = 0;
+ if(Latitude1 == Latitude2 && Longitude1 == Longitude2)
+ zoom = 15;
+ if (zoom <= 0) {
+ for(;
+ zoom < meter2pixel.length
+ && (width*meter2pixel[zoom]) > Wmeter
+ && (height*meter2pixel[zoom]) > Hmeter;
+ ++zoom) ;
+ }
+
+// && (1200*meter2pixel[zoom]) > Wmeter
+// && (700*meter2pixel[zoom]) > Hmeter;
+
+ return zoom + MapConstant.ZOOM_MIN-1;
+ }
+
+ public static double getDistance(double Latitude1, double Longitude1,
+ double Latitude2, double Longitude2) {
+ Latitude1 = Math.toRadians(Latitude1);
+ Longitude1 = Math.toRadians(Longitude1);
+ Latitude2 = Math.toRadians(Latitude2);
+ Longitude2 = Math.toRadians(Longitude2);
+
+ final double R = 6371.0; // earth's mean radius in km
+ double dSinLat05 = Math.sin( (Latitude2 - Latitude1)/2 );
+ double dSinLong05 = Math.sin( (Longitude2 - Longitude1)/2 );
+ double a = dSinLat05 * dSinLat05 +
+ Math.cos(Latitude1) * Math.cos(Latitude2) * dSinLong05 * dSinLong05;
+ double c = (0==a || 1==a)
+ ? 0
+ : 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1.0-a));
+ return R * c * 1000.0; //in meters
+ }
+
+ public Rectangle getBoundingBox() {
+ return boundingBox;
+ }
+
+ public void setBoundingBox(int width, int height) {
+ boundingBox.setSize(width, height);
+ }
+
+ public void setNode(Node node) {
+ this.node = node;
+ }
+
+ public Node getNode() {
+ return node;
+ }
+
+ public void setLine(Line line) {
+ this.line = line;
+ }
+
+ public Line getLine() {
+ return line;
+ }
+
+ public void setColorProperties(ColorProperties colorProperties) {
+ this.colorProperties = colorProperties;
+ }
+
+ public ColorProperties getColorProperties() {
+ return colorProperties;
+ }
+
+ public void setZoomLevel(int zoomLevel) {
+ this.zoomLevel = zoomLevel;
+ }
+
+ public int getZoomLevel() {
+ return zoomLevel;
+ }
+
+ public void addShowList(String type) {
+ showList.add(type.toUpperCase());
+ }
+
+ public void addShowList(String type, int number) {
+ showList.add(type.toUpperCase() + ":" + number);
+ }
+
+ public void removeShowList(String type) {
+ showList.remove(type.toUpperCase());
+ }
+
+ public void removeShowList(String type, int number) {
+ showList.remove(type.toUpperCase() + ":" + number);
+ }
+
+ public void clearShowList() {
+ showList.clear();
+ }
+
+ public HashSet getShowList() {
+ return showList;
+ }
+
+ public boolean containsShowList(String type) {
+ return showList.contains(type.toUpperCase());
+ }
+
+ public boolean containsShowList(String type, int number) {
+ return showList.contains(type.toUpperCase() + ":" + number);
+ }
+
+ public int getShowListSize() {
+ return showList.size();
+ }
+
+ public void addSwingLayer(SwingLayer swingLayer) {
+ swingLayers.add(swingLayer);
+ }
+
+ public void removeSwingLayer(SwingLayer swingLayer) {
+ swingLayers.remove(swingLayer);
+ }
+
+ public void clearSwingLayers() {
+ swingLayers.clear();
+ }
+
+ public ArrayList<SwingLayer> getSwingLayers() {
+ return swingLayers;
+ }
+
+ public int getShapeWidth() {
+ return shapeWidth[getZoomLevel()>=22?21:(getZoomLevel()<=8 ? 8:getZoomLevel())];
+ }
+
+ public Point2D getPixelPos(double latitude, double longitude) {
+ double sinLatitude = Math.sin(Math.toRadians(latitude));
+ return new Point2D.Double(
+ ((longitude + 180.0) / 360.0) * 256.0 * (1<<zoomLevel),
+ ( 0.5 - Math.log((1.0+sinLatitude)/(1.0-sinLatitude))
+ /(4.0*Math.PI) )*256.0*(1<<zoomLevel)
+ );
+ }
+
+ private boolean checkTransform(Rectangle2D geoArea) {
+ System.out.println("%%%%%%map.checkTransform start");
+ if (!this.geoArea.equals(geoArea)) {
+ Point2D point1 = getPixelPos(geoArea.getMinY(), geoArea.getMinX());
+ Point2D point2 = getPixelPos(geoArea.getMaxY(), geoArea.getMaxX());
+ mapArea.setRect(point1.getX(), point2.getY(),
+ boundingBox.getWidth(), boundingBox.getHeight());
+ this.geoArea.setRect(geoArea);
+ resetTransform(boundingBox, mapArea);
+ System.out.println("%%%%%%map.checkTransform end 1");
+ return true;
+ }
+
+ System.out.println("%%%%%%map.checkTransform end 2");
+ return false;
+ }
+
+ private void resetTransform(Rectangle boundingBox, Rectangle2D mapArea) {
+ System.out.println("%%%%%%map.resetTransform start");
+ if (mapArea == null || boundingBox.getWidth() == 0 || boundingBox.getHeight() == 0 ) {
+ System.out.println("%%%%%%map.resetTransform end 1");
+ return;
+ }
+
+ transform = new AffineTransform(mapArea.getWidth() / boundingBox.getWidth(),
+ 0.0, 0.0, mapArea.getHeight() / boundingBox.getHeight(),
+ mapArea.getMinX(), mapArea.getMinY());
+ System.out.println("%%%%%%map.resetTransform end 2");
+ }
+
+ protected AffineTransform getTransform() {
+ if (transform != null) {
+ return new AffineTransform(transform);
+ }
+
+ return null;
+ }
+
+ public Point2D getScreenPointFromPixel(double xPixel, double yPixel) {
+ try {
+ return getTransform().inverseTransform(new Point2D.Double(xPixel, yPixel), null);
+ } catch (NoninvertibleTransformException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ public Point2D getScreenPointFromLonLat(double longitude, double latitude) {
+ Point2D point = getPixelPos(latitude, longitude);
+ return getScreenPointFromPixel(point.getX(), point.getY());
+ }
+
+ public Point2D getLonLatFromPixel(int x1, int y1) {
+ double x = (double) x1 / 256;
+ double y = (double) y1 / 256;
+ double lon = -180; // x
+ double lonWidth = 360; // width 360
+
+ //double lat = -90; // y
+ //double latHeight = 180; // height 180
+ double lat = -1;
+ double latHeight = 2;
+
+ int tilesAtThisZoom = 1 << getZoomLevel();
+ lonWidth = 360.0 / tilesAtThisZoom;
+ lon = -180 + (x * lonWidth);
+ latHeight = -2.0 / tilesAtThisZoom;
+ lat = 1 + (y * latHeight);
+
+ // convert lat and latHeight to degrees in a transverse mercator projection
+ // note that in fact the coordinates go from about -85 to +85 not -90 to 90!
+ latHeight += lat;
+ latHeight = (2 * Math.atan(Math.exp(Math.PI * latHeight))) - (Math.PI / 2);
+ latHeight *= (180 / Math.PI);
+
+ lat = (2 * Math.atan(Math.exp(Math.PI * lat))) - (Math.PI / 2);
+ lat *= (180 / Math.PI);
+
+ latHeight -= lat;
+
+ if (lonWidth < 0) {
+ lon = lon + lonWidth;
+ lonWidth = -lonWidth;
+ }
+
+ if (latHeight < 0) {
+ lat = lat + latHeight;
+ latHeight = -latHeight;
+ }
+
+ return new Point2D.Double(lon, lat + latHeight);
+ }
+
+ public ArrayList getImage(final HttpServletRequest request, Rectangle2D geoArea) {
+ Object showListArr[] = ((HashSet)getShowList()).toArray();
+ BufferedImage image = new BufferedImage(boundingBox.width, boundingBox.height, BufferedImage.TYPE_INT_ARGB);
+ final Graphics2D g2d = image.createGraphics();
+ // LEGEND INFO
+ BufferedImage legendImage = null;
+ Graphics2D g2Legend = null;
+ if(showLegend) {
+ legendImage = new BufferedImage(boundingBox.width, (int)(20*showListArr.length) + 20, BufferedImage.TYPE_INT_ARGB);
+ g2Legend = legendImage.createGraphics();
+ g2Legend.setBackground(Color.WHITE);
+ }
+
+ checkTransform(geoArea);
+
+ boolean shapefileLayerPainted = false;
+ boolean swingLayerPainted = false;
+
+ Object object = request.getAttribute("server_process_interrupted");
+ if (object != null && ((Boolean) object)) {
+ System.out.println("interrupted");
+ g2d.dispose();
+ return null;
+ }
+
+ for (SwingLayer layer : swingLayers) {
+ swingLayerPainted = swingLayerPainted || layer.paintLayer(request, g2d, boundingBox, mapArea, g2Legend);
+ }
+
+ ArrayList imageArr = new ArrayList();
+ //if(showLegend) layer.paintLegend(g2Legend);
+
+ g2d.dispose();
+ if(showLegend)
+ g2Legend.dispose();
+ object = request.getAttribute("server_process_interrupted");
+
+ if (object != null && ((Boolean) object)) {
+ System.out.println("interrupted");
+ return imageArr;
+ }
+ else if (!shapefileLayerPainted && !swingLayerPainted) {
+ System.out.println("not painted");
+ return imageArr;
+ }
+
+ imageArr.add(image);
+ if(g2Legend!=null) {
+ imageArr.add(legendImage);
+ }
+ return imageArr;
+ }
+
+ public Object singleLeftClick(double longitude, double latitude, Rectangle2D geoArea) {
+ System.out.println("%%%%%%map.singleLeftClick start");
+ System.out.println("%%%%%%map.singleLeftClick check transform start");
+ checkTransform(geoArea);
+ System.out.println("%%%%%%map.singleLeftClick check transform end");
+ Point2D screenPoint = getScreenPointFromLonLat(longitude, latitude);
+ System.out.println("%%%%%%map.singleLeftClick getting nodeExist array ");
+ ArrayList<NodeInfo> existNodeInfo = node.nodeExist(screenPoint);
+
+ if (existNodeInfo == null) {
+ ArrayList<LineInfo> existLineInfo = line.lineExist(screenPoint);
+
+ if (existLineInfo == null) {
+
+ }
+ else {
+ System.out.println("%%%%%%map.singleLeftClick end 1");
+ return existLineInfo;
+ }
+ }
+ else {
+// if (existNodeInfo.size() == 1) {
+// NodeInfo nodeInfo = existNodeInfo.get(0);
+// node.getNodeCollection().clearSelectedNode();
+// node.getNodeCollection().addSelectedNode(nodeInfo.getID(), nodeInfo.getLegendID());
+// return getSelectedImage(geoArea);
+// }
+// else {
+// return existNodeInfo;
+// }
+
+ System.out.println("%%%%%%map.singleLeftClick end 2");
+ return existNodeInfo;
+ }
+
+ System.out.println("%%%%%%map.singleLeftClick end 3");
+ return null;
+ }
+
+ public String getCurrentYearMonth() {
+ return currentYearMonth;
+ }
+
+ public void setCurrentYearMonth(String currentYearMonth) {
+ this.currentYearMonth = currentYearMonth;
+ }
+
+ public Rectangle2D getDefaultBoundary() {
+ return defaultBoundary;
+ }
+
+ public void setDefaultBoundary(Rectangle2D defaultBoundary) {
+ this.defaultBoundary = defaultBoundary;
+ }
+
+ public boolean isShowLegend() {
+ return showLegend;
+ }
+
+ public void setShowLegend(boolean showLegend) {
+ this.showLegend = showLegend;
+ }
+
+ public String getDataLoaded() {
+ return dataLoaded;
+ }
+
+ public void setDataLoaded(String dataLoaded) {
+ this.dataLoaded = dataLoaded;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/layer/SwingLayer.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/layer/SwingLayer.java
new file mode 100644
index 00000000..f5237ccf
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/map/layer/SwingLayer.java
@@ -0,0 +1,234 @@
+/*-
+ * ================================================================================
+ * 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.gmap.map.layer;
+
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.FontMetrics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Stroke;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.gmap.map.ColorProperties;
+import org.openecomp.portalsdk.analytics.gmap.map.MapConstant;
+import org.openecomp.portalsdk.analytics.gmap.map.NovaMap;
+import org.openecomp.portalsdk.analytics.gmap.node.Node;
+import org.openecomp.portalsdk.analytics.gmap.node.NodeInfo;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+
+public class SwingLayer {
+ private Rectangle shape;
+ private NovaMap map;
+
+ public SwingLayer(NovaMap map) {
+ this.map = map;
+ }
+
+ public boolean paintLayer(HttpServletRequest request, Graphics2D g2d, Rectangle bounds, Rectangle2D mapArea, Graphics2D g2Legend) {
+ return paintNodes(request, g2d, bounds, mapArea, g2Legend);
+ }
+
+ protected boolean paintNodes(HttpServletRequest request, Graphics2D g2d, Rectangle bounds, Rectangle2D mapArea, Graphics2D g2Legend) {
+ boolean painted = false;
+ Node node = map.getNode();
+ ColorProperties colorProperties = map.getColorProperties();
+ int legendSize = 0;
+ if(map.isShowLegend())
+ legendSize = map.getShowListSize();
+ Object showListArr[] = ((HashSet)map.getShowList()).toArray();
+ HashMap<String,NodeInfo> hashMap = node.getNodeCollection().getNodeCollection();
+ Set set = hashMap.entrySet();
+ int width = map.getShapeWidth();
+ ArrayList<String> visibleLabel = new ArrayList<String>(151);
+ Color oldColor = g2d.getColor();
+ Stroke oldStroke = g2d.getStroke();
+ int textWidth = 0;
+ int legendLength = 0;
+ for (int i = 0; i < showListArr.length; i++) {
+ legendLength = ((String)showListArr[i]).length();
+ if(legendLength > textWidth) textWidth = legendLength;
+ }
+ Point2D point = null;
+ for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ NodeInfo nodeInfo = (NodeInfo) entry.getValue();
+
+ String id1 = (String) request.getAttribute("server_process_id");
+ String id2 = (String) request.getSession().getAttribute("server_process_id");
+
+ if (!id1.equals(id2)) {
+ request.setAttribute("server_process_interrupted", true);
+ System.out.println("swing layer interrupted");
+ return false;
+ }
+ //System.out.println("%%%%%%%getImage. no of T1%%%%%%" + nodeInfo.getAttribute("x_sequence"));
+
+
+ point = map.getPixelPos(nodeInfo.geoCoordinate.latitude, nodeInfo.geoCoordinate.longitude);
+
+ if (!mapArea.contains(point.getX(), point.getY())) {
+ continue;
+ }
+
+ painted = true;
+
+ g2d.setColor(colorProperties.getColor(nodeInfo.getNodeType()));
+
+ Point2D xyPoint = map.getScreenPointFromPixel(point.getX(), point.getY());
+ int width2 = (colorProperties.getSize(nodeInfo.getNodeType()) * width) / 5;
+
+ if (shape == null) {
+ shape = new Rectangle((int) xyPoint.getX(), (int) xyPoint.getY(), width2, width2);
+ }
+ else {
+ shape.setRect((int) xyPoint.getX(), (int) xyPoint.getY(), width2, width2);
+ }
+
+ if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.FILLED_SQUARE)) {
+ g2d.fillRect((int) shape.getCenterX() - width2, (int) shape.getCenterY() - width2, width2, width2);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.HOLLOW_SQUARE)) {
+ g2d.drawRect((int) shape.getCenterX() - width2, (int) shape.getCenterY() - width2, width2, width2);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.FILLED_CIRCLE)) {
+ g2d.fillOval((int) shape.getCenterX() - width2, (int) shape.getCenterY() - width2, width2, width2);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.HOLLOW_CIRCLE)) {
+ g2d.drawOval((int) shape.getCenterX() - width2, (int) shape.getCenterY() - width2, width2, width2);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.FILLED_TRIANGLE)) {
+ int[] xPoints = {(int) shape.getX(), (int) shape.getX() - width2 / 2, (int) shape.getX() + width2 / 2};
+ int[] yPoints = {(int) shape.getY() + width2 / 2, (int) shape.getY() - width2 / 2, (int) shape.getY() - width2 / 2};
+ g2d.fillPolygon(xPoints, yPoints, xPoints.length);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.HOLLOW_TRIANGLE)) {
+ int[] xPoints = {(int) shape.getX(), (int) shape.getX() - width2 / 2, (int) shape.getX() + width2 / 2};
+ int[] yPoints = {(int) shape.getY() + width2 / 2, (int) shape.getY() - width2 / 2, (int) shape.getY() - width2 / 2};
+ g2d.drawPolygon(xPoints, yPoints, xPoints.length);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.FILLED_DIAMOND)) {
+ int[] xPoints = {(int) shape.getX() - width2 / 2, (int) shape.getX(), (int) shape.getX() + width2 / 2, (int) shape.getX()};
+ int[] yPoints = {(int) shape.getY() , (int) shape.getY() - width2 / 2, (int) shape.getY(), (int) shape.getY() + width2 / 2};
+ g2d.fillPolygon(xPoints, yPoints, xPoints.length);
+ }
+ else if (colorProperties.getShape(nodeInfo.getNodeType())!=null && colorProperties.getShape(nodeInfo.getNodeType()).equalsIgnoreCase(MapConstant.HOLLOW_DIAMOND)) {
+ int[] xPoints = {(int) shape.getX() - width2 / 2, (int) shape.getX(), (int) shape.getX() + width2 / 2, (int) shape.getX()};
+ int[] yPoints = {(int) shape.getY() , (int) shape.getY() - width2 / 2, (int) shape.getY(), (int) shape.getY() + width2 / 2};
+ g2d.drawPolygon(xPoints, yPoints, xPoints.length);
+ } else {
+ g2d.drawRect((int) shape.getCenterX() - width2, (int) shape.getCenterY() - width2, width2, width2);
+ }
+
+ if (nodeInfo.isMoveable()) {
+ int fontSize = width / 2;
+ fontSize = fontSize > 14 ? 14 : fontSize;
+ fontSize = (colorProperties.getSize(nodeInfo.getNodeType()) * fontSize) / 5;
+ Font font = new Font("sans-serif", Font.BOLD, fontSize);
+ g2d.setFont(font);
+ g2d.setColor(Color.BLACK);
+ g2d.drawString("M", shape.x + width2 / 2, shape.y);
+ }
+
+// if (map.containsShowLabelList(nodeInfo.getNodeType())) {
+// g2d.setColor(Color.BLACK);
+// FontMetrics metrics = g2d.getFontMetrics();
+// int x = shape.x - metrics.stringWidth(nodeInfo.getID()) / 2;
+// int y = shape.y + width2 * 4 / 3;
+// g2d.drawString(nodeInfo.getID(), x, y);
+// }
+ }
+ String legendName = "";
+ int baseY = 0;
+ baseY = (int)(20*showListArr.length) + 20;//+5;
+ int baseX = 0;
+ if(map.isShowLegend()) {
+ for (int i = showListArr.length-1; i>=0; i--) {
+
+ legendName = (String)showListArr[i];
+ //for(int i = 0; i < showListArr.length; i++ ) {
+ if(i == showListArr.length-1){
+ textWidth = (textWidth<="Legend".length())?"Legend".length():textWidth;
+ g2Legend.setColor(Color.WHITE);
+ //g2d.draw(new Rectangle2D.Double((int) bounds.getMaxX()*0.1, (int) bounds.getMaxY()*0.75*showListArr.length, (int) bounds.getMaxX()*0.75, (int) bounds.getMaxY()*0.75));
+ g2Legend.fill3DRect((int)(0), (int)(0), (int) bounds.getWidth() , (int)(baseY) , true); // (int)(bounds.getMaxX()*0.9)- (int)(bounds.getMaxX()*0.25)
+ //if(i == 0){
+ g2Legend.setColor(Color.BLACK);
+ g2Legend.setFont(NovaMap.HEADER_FONT);
+ g2Legend.drawString("Legend", (int) (10), 10);
+ }
+ int[] xPointsL = {(int) (10 - width / 2), (int) (10), (int) (10 + width/2), (int) (10)};
+ int[] yPointsL = {(int) (15*i+5+20), (int) (15*i+5+20 - width / 2), (int) (15*i+5+20), (int) (15*i+5+20 + width / 2)};
+ g2Legend.setColor(colorProperties.getColor( ((String)showListArr[i]).toUpperCase()));
+ g2Legend.fillPolygon(xPointsL, yPointsL, xPointsL.length);
+ g2Legend.setFont(NovaMap.TEXT_FONT);
+ g2Legend.setColor(Color.BLACK);
+
+ g2Legend.drawString(legendName.substring(0, legendName.indexOf("-")), (int) (10) + width+10, (int) (15*i)+10+20);
+ }
+ }
+
+/* g2d.drawString("0", (int) bounds.getMaxX()/2+20 + width+10, 0);
+ g2d.drawString("50", (int) bounds.getMaxX()/2+20 + width+10, 50);
+ g2d.drawString("100", (int) bounds.getMaxX()/2+20 + width+10, 100);
+ g2d.drawString("200", (int) bounds.getMaxX()/2+20 + width+10, 200);
+ g2d.drawString("400", (int) bounds.getMaxX()/2+20 + width+10, 400);
+ g2d.drawString("600", (int) bounds.getMaxX()/2+20 + width+10, 600);
+*/
+// g2d.setFont(NovaMap.TEXT_FONT);
+// g2d.setColor(Color.BLACK);
+ if(nvl(map.getDataLoaded()).trim().length() > 0) {
+ g2d.setColor(Color.WHITE);
+ g2d.fill3DRect(new Double(bounds.getMinX()).intValue(), new Double(bounds.getMaxY()).intValue()-30, (int) bounds.getWidth() , (int)(30) , true); // (int)(bounds.getMaxX()*0.9)- (int)(bounds.getMaxX()*0.25)
+ g2d.setColor(Color.RED);
+ g2d.setFont(NovaMap.HEADER_FONT);
+ g2d.drawString(Globals.getUserDefinedMessageForMemoryLimitReached() + " "+ map.getDataLoaded()+ " were downloaded to Map.", new Double(bounds.getMinX()).intValue()+80, new Double(bounds.getMaxY()).intValue()-15);
+ }
+
+ //g2d.drawString("Hello", new Double(bounds.getMinX()).intValue()+20, new Double(bounds.getMaxY()).intValue()-50);
+ FontMetrics metrics = g2d.getFontMetrics();
+
+ for (int i = 0; i < visibleLabel.size(); i++) {
+ String[] properties = visibleLabel.get(i).split(">>>");
+ int x = Integer.parseInt(properties[1]) - metrics.stringWidth(properties[0]) / 2;
+ int y = Integer.parseInt(properties[2]) + Integer.parseInt(properties[3]) * 4 / 3;
+ g2d.drawString(properties[0], x, y);
+ }
+
+ g2d.setColor(oldColor);
+ g2d.setStroke(oldStroke);
+
+ return painted;
+ }
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/Node.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/Node.java
new file mode 100644
index 00000000..a58eb458
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/Node.java
@@ -0,0 +1,178 @@
+/*-
+ * ================================================================================
+ * 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.gmap.node;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.openecomp.portalsdk.analytics.gmap.map.MapConstant;
+import org.openecomp.portalsdk.analytics.gmap.map.NovaMap;
+
+public class Node {
+ private Set<String> nodeIDSet;
+ private NodeCollection nodeCollection;
+ private ArrayList<String> selectionList;
+ private NovaMap map;
+
+ public Node(NovaMap map) {
+ this.map = map;
+ nodeCollection = new NodeCollection();
+ nodeIDSet = new HashSet<String>();
+ selectionList = new ArrayList<String>();
+ }
+
+ public NodeInfo addNode(double longitude, double latitude, String nodeType, String nodeID,
+ String nodeAttributes, int state, boolean moveable, boolean deleteable) {
+ NodeInfo nodeInfo = new NodeInfo(nodeID);
+ nodeInfo.geoCoordinate.longitude = longitude;
+ nodeInfo.geoCoordinate.latitude = latitude;
+ nodeInfo.setNodeType(nodeType);
+ nodeInfo.setState(state);
+ nodeInfo.setMoveable(moveable);
+ nodeInfo.setDeleteable(deleteable);
+ nodeInfo.initializeAttributes(nodeAttributes);
+
+ //if (nodeCollection.getNode(nodeInfo.getNodeID()+""+nodeInfo.getNodeType()) == null) {
+ nodeCollection.addNode(nodeInfo);
+ nodeIDSet.add(nodeID);
+/* }
+ else {
+ return nodeCollection.getNode(nodeType);
+ }
+*/
+ return nodeInfo;
+ }
+
+ /**
+ *
+ */
+/* public void updateNumberT1(String currentYearMonth) {
+ ArrayList<NodeInfo> nodeCollection = this.nodeCollection.getNodeCollection();
+
+ for (NodeInfo nodeInfo : nodeCollection) {
+ nodeInfo.setAttribute(NodeInfo.NUMBER_OF_T1_KEY, nodeInfo.getAttribute(currentYearMonth));
+ }
+ }
+*/
+/* public Set<Integer> getUniqueNumberT1(String currentYearMonth) {
+ ArrayList<NodeInfo> nodeCollection = this.nodeCollection.getNodeCollection();
+ Set<Integer> numberT1Set = new TreeSet<Integer>();
+
+ for (NodeInfo nodeInfo : nodeCollection) {
+ numberT1Set.add(Integer.parseInt(nodeInfo.getAttribute(currentYearMonth).toString()));
+ }
+
+ return numberT1Set;
+ }
+*/
+ public void updateNumberT1(String currentYearMonth) {
+ HashMap<String,NodeInfo> hashMap = this.nodeCollection.getNodeCollection();
+ Set set = hashMap.entrySet();
+
+ for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ NodeInfo nodeInfo = (NodeInfo) entry.getValue();
+ nodeInfo.setAttribute(NodeInfo.NUMBER_OF_T1_KEY, nodeInfo.getAttribute(currentYearMonth));
+ }
+
+ }
+
+ public Set<Integer> getUniqueNumberT1(String currentYearMonth) {
+ HashMap<String,NodeInfo> hashMap = this.nodeCollection.getNodeCollection();
+ Set set = hashMap.entrySet();
+ Set<Integer> numberT1Set = new TreeSet<Integer>();
+
+ for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ NodeInfo nodeInfo = (NodeInfo) entry.getValue();
+ numberT1Set.add(Integer.parseInt(nodeInfo.getAttribute(currentYearMonth).toString()));
+ }
+
+ return numberT1Set;
+ }
+
+ /**
+ *
+ * @param screenPoint
+ * @return list of NodeInfo within screenPoint. If not found, null is return
+ */
+ public ArrayList<NodeInfo> nodeExist(Point2D screenPoint) {
+ ArrayList<NodeInfo> existNodeInfo = null;
+ int nearest = 9999;
+ String selectedNode = null;
+ String selectedType = null;
+ int nodeSize = map.getShapeWidth();
+ HashMap<String,NodeInfo> hashMap = nodeCollection.getNodeCollection();
+ Set set = hashMap.entrySet();
+ //ArrayList<NodeInfo> list = nodeCollection.getNodeCollection();
+
+ for (Iterator iterator = set.iterator(); iterator.hasNext();) {
+ Map.Entry entry = (Map.Entry) iterator.next();
+ NodeInfo nodeInfo = (NodeInfo) entry.getValue();
+
+ if (!map.containsShowList(nodeInfo.getNodeType())) {
+ continue;
+ }
+
+ int width = (map.getColorProperties().getSize(nodeInfo.getNodeType()) * nodeSize) / 5;
+ int foundFactor = (int) (MapConstant.ZOOMING_INDEX * width);
+ Point2D nodePoint = map.getScreenPointFromLonLat(nodeInfo.geoCoordinate.longitude,
+ nodeInfo.geoCoordinate.latitude);
+
+ int lonDiff = (int) Math.abs(screenPoint.getX() - nodePoint.getX());
+ int latDiff = (int) Math.abs(screenPoint.getY() - nodePoint.getY());
+
+ if (lonDiff < foundFactor && latDiff < foundFactor) {
+ if (lonDiff < nearest) {
+ nearest = lonDiff;
+ selectedNode = nodeInfo.getNodeID();
+ selectedType = nodeInfo.getNodeType();
+ nodeCollection.setNodeID(selectedNode);
+ }
+
+ if (existNodeInfo == null) {
+ existNodeInfo = new ArrayList<NodeInfo>();
+ }
+
+ existNodeInfo.add(nodeInfo);
+ }
+ }
+
+ return existNodeInfo;
+ }
+
+ public NodeCollection getNodeCollection() {
+ return nodeCollection;
+ }
+
+ public void clearNodeIDSet() {
+ nodeIDSet.clear();
+ }
+
+ public void clearSelectionList() {
+ selectionList.clear();
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeCollection.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeCollection.java
new file mode 100644
index 00000000..35801a4d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeCollection.java
@@ -0,0 +1,188 @@
+/*-
+ * ================================================================================
+ * 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.gmap.node;
+
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Set;
+
+public class NodeCollection {
+ private Set<String> selectedNode; // all selected node
+ private String nodeID; // last clicked node
+ private HashMap<String,NodeInfo> nodeCollection;
+
+ public NodeCollection() {
+ selectedNode = new HashSet<String>();
+ nodeCollection = new HashMap<String,NodeInfo>(20000);
+ }
+
+ public void addSelectedNode(String nodeID) {
+ selectedNode.add(nodeID);
+ }
+
+ public void removeSelectedNode(String nodeID) {
+ selectedNode.remove(nodeID);
+ }
+
+ public boolean containSelectedNode(String nodeID) {
+ return selectedNode.contains(nodeID);
+ }
+
+ public void addSelectedNode(String nodeID, String nodeType) {
+ selectedNode.add(nodeID + ">>" + nodeType);
+ }
+
+ public void removeSelectedNode(String nodeID, String nodeType) {
+ selectedNode.remove(nodeID + ">>" + nodeType);
+ }
+
+ public void clearSelectedNode() {
+ selectedNode.clear();
+ }
+
+ public boolean containSelectedNode(String nodeID, String nodeType) {
+ return selectedNode.contains(nodeID + ">>" + nodeType);
+ }
+
+ public Set<String> getSelectedNode() {
+ return selectedNode;
+ }
+
+ public void addNode(NodeInfo nodeInfo) {
+ if (nodeInfo == null) {
+ System.out.println("nodeInfo is null");
+ }
+ nodeCollection.put(nodeInfo.getNodeID()+""+nodeInfo.getNodeType(), nodeInfo);
+ }
+
+ public HashMap<String,NodeInfo> getNodeCollection() {
+ return nodeCollection;
+ }
+
+/* public NodeInfo getNode(String nodeID) {
+ for (NodeInfo nodeInfo : nodeCollection) {
+ if (nodeInfo.getNodeID().equalsIgnoreCase(nodeID) ) {
+ return nodeInfo;
+ }
+ }
+
+ return null;
+ }
+*/
+/* public NodeInfo getNode(String nodeID, String nodeType) {
+ for (NodeInfo nodeInfo : nodeCollection) {
+ if (nodeInfo.getNodeID().equalsIgnoreCase(nodeID) && nodeInfo.getNodeType().equalsIgnoreCase(nodeType)) {
+ return nodeInfo;
+ }
+ }
+
+ return null;
+ }
+*/
+ public NodeInfo getNode(String nodeType) {
+ return (NodeInfo)nodeCollection.get(nodeType);
+ }
+/* public ArrayList<NodeInfo> getWildCardNode(String nodeID, String nodeType) {
+ ArrayList<NodeInfo> list = new ArrayList<NodeInfo>();
+
+ for (NodeInfo nodeInfo : nodeCollection) {
+ if (nodeInfo.getNodeType().equalsIgnoreCase(nodeType) &&
+ nodeInfo.getNodeID().toLowerCase().indexOf(nodeID.toLowerCase()) != -1) {
+ list.add(nodeInfo);
+ }
+ }
+
+ return list;
+ }*/
+
+/* public NodeInfo removeNode(String nodeID) {
+ for (int i = 0; i < nodeCollection.size(); i++) {
+ if (nodeCollection.get(i).getNodeID().equalsIgnoreCase(nodeID)) {
+ return nodeCollection.remove(i);
+ }
+ }
+
+ removeSelectedNode(nodeID);
+ return null;
+ }
+
+ public NodeInfo removeNode(String nodeID, String nodeType) {
+ for (int i = 0; i < nodeCollection.size(); i++) {
+ if (nodeCollection.get(i).getNodeID().equalsIgnoreCase(nodeID) &&
+ nodeCollection.get(i).getNodeType().equalsIgnoreCase(nodeType)) {
+ return nodeCollection.remove(i);
+ }
+ }
+
+ removeSelectedNode(nodeID, nodeType);
+ return null;
+ }
+*/
+/* public void removeNode(String nodeType) {
+ nodeCollection.remove(nodeType);
+ }*/
+
+/* public ArrayList<NodeInfo> getCellsiteLocation(String location, boolean exactMatch) {
+ ArrayList<NodeInfo> list = new ArrayList<NodeInfo>();
+
+ for (NodeInfo nodeInfo : nodeCollection) {
+ if (nodeInfo.getAttribute("Location") == null) {
+ continue;
+ }
+
+ if (exactMatch) {
+ if (nodeInfo.getAttribute("Location").equalsIgnoreCase(location)) {
+ list.add(nodeInfo);
+ }
+ }
+ else {
+ if (nodeInfo.getAttribute("Location").toUpperCase().indexOf(location.toUpperCase()) != -1) {
+ list.add(nodeInfo);
+ }
+ }
+ }
+
+ return list;
+ }
+*/
+ public void clearNode() {
+ nodeCollection.clear();
+ selectedNode.clear();
+ }
+
+ public int getSize() {
+ return nodeCollection.size();
+ }
+
+ public void setNodeID(String nodeID) {
+ this.nodeID = nodeID;
+ }
+
+ public String getNodeID() {
+ return nodeID;
+ }
+
+ public void clearAllCollection() {
+ this.clearNode();
+ this.clearSelectedNode();
+ this.nodeID = "";
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeInfo.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeInfo.java
new file mode 100644
index 00000000..d1676e02
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/node/NodeInfo.java
@@ -0,0 +1,210 @@
+/*-
+ * ================================================================================
+ * 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.gmap.node;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.TreeMap;
+
+import org.openecomp.portalsdk.analytics.gmap.map.GeoCoordinate;
+
+public class NodeInfo {
+ public static final String NUMBER_OF_T1_KEY = "x_numberOfT1";
+ public static final String SEQUENCE_KEY = "x_sequence";
+
+ public GeoCoordinate geoCoordinate;
+
+ private String nodeID;
+ private String nodeType;
+ private int state;
+ private boolean moveable;
+ private boolean deleteable;
+
+ private List<String> lineIDS;
+ private Map<String, String> nodeAttributes;
+
+ public NodeInfo(String nodeID) {
+ this.nodeID = nodeID;
+ lineIDS = new ArrayList<String>();
+ nodeAttributes = new TreeMap<String, String>();
+ geoCoordinate = new GeoCoordinate();
+ }
+
+ public NodeInfo clone() {
+ NodeInfo nodeInfo = new NodeInfo(nodeID);
+ nodeInfo.geoCoordinate.longitude = geoCoordinate.longitude;
+ nodeInfo.geoCoordinate.latitude = geoCoordinate.latitude;
+ nodeInfo.setMoveable(moveable);
+ nodeInfo.setNodeType(nodeType);
+ nodeInfo.setNodeID(nodeID);
+ nodeInfo.setState(state);
+ nodeInfo.setLineIDS(cloneLineIDS());
+ nodeInfo.setDeleteable(deleteable);
+ nodeInfo.initializeAttributes(nodeAttributes);
+
+ return nodeInfo;
+ }
+
+ public void addLineID(String lineID, String lineType) {
+ if (!lineIDS.contains(lineID + ">>" + lineType)) {
+ lineIDS.add(lineID + ">>" + lineType);
+ }
+ }
+
+ public void removeLineID(String lineID, String lineType) {
+ lineIDS.remove(lineID + ">>" + lineType);
+ }
+
+ public String getLineID(String lineID, String lineType) {
+ for (Object temp : lineIDS) {
+ if (temp.toString().equals(lineID + ">>" + lineType)) {
+ return temp.toString();
+ }
+ }
+
+ return null;
+ }
+
+ public List<String> getLineIDS() {
+ return lineIDS;
+ }
+
+ public void printLineIDS() {
+ Iterator<String> iter = lineIDS.iterator();
+
+ while (iter.hasNext()) {
+ System.out.println(iter.next());
+ }
+ }
+
+ public List<String> cloneLineIDS() {
+ List<String> lineIDS = new ArrayList<String>();
+
+ for (String lineID : this.lineIDS) {
+ lineIDS.add(lineID);
+ }
+
+ return lineIDS;
+ }
+
+ public void setLineIDS(List<String> lineIDS) {
+ this.lineIDS = lineIDS;
+ }
+
+ public void setNodeID(String nodeID) {
+ this.nodeID = nodeID;
+ }
+
+ public String getNodeID() {
+ return nodeID;
+ }
+
+ public void setNodeType(String nodeType) {
+ this.nodeType = nodeType;
+ }
+
+ public String getNodeType() {
+ return nodeType;
+ }
+
+ public void setState(int state) {
+ this.state = state;
+ }
+
+ public int getState() {
+ return state;
+ }
+
+ public void setMoveable(boolean moveable) {
+ this.moveable = moveable;
+ }
+
+ public boolean isMoveable() {
+ return moveable;
+ }
+
+ public void setDeleteable(boolean deleteable) {
+ this.deleteable = deleteable;
+ }
+
+ public boolean isDeleteable() {
+ return deleteable;
+ }
+
+ public String getAttribute(String key) {
+ String value = nodeAttributes.get(key);
+ return value;
+ }
+
+ public void initializeAttributes(Map<String, String> nodeAttributes) {
+ this.nodeAttributes.clear();
+ Set<String> keySet = nodeAttributes.keySet();
+ Iterator<String> iter = keySet.iterator();
+
+ while (iter.hasNext()) {
+ String key = iter.next();
+ this.nodeAttributes.put(key, nodeAttributes.get(key));
+ }
+ }
+
+ public void initializeAttributes(String nodeAttributes) {
+ if (nodeAttributes == null) {
+ return;
+ }
+
+ this.nodeAttributes.clear();
+ StringTokenizer tokenizer = new StringTokenizer(nodeAttributes, "|");
+
+ while (tokenizer.hasMoreTokens()) {
+ String attribute = tokenizer.nextToken();
+ StringTokenizer attributeTokenizer = new StringTokenizer(attribute, "=");
+
+ if (attributeTokenizer.countTokens() == 2) {
+ String key = attributeTokenizer.nextToken();
+ String value = attributeTokenizer.nextToken();
+ this.nodeAttributes.put(key, value);
+ }
+ }
+ }
+
+ public void setAttribute(String key, String value) {
+ nodeAttributes.put(key, value);
+ }
+
+ public List<String> getAttributeKeys() {
+ Set<String> keySet = nodeAttributes.keySet();
+ List<String> keys = new ArrayList<String>(keySet.size());
+ Iterator<String> iter = keySet.iterator();
+
+ while (iter.hasNext()) {
+ String key = iter.next();
+
+ if (key.indexOf("x_") != 0) {
+ keys.add(key);
+ }
+ }
+
+ return keys;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/MapUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/MapUtils.java
new file mode 100644
index 00000000..d938869a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/MapUtils.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.gmap.utils;
+
+import java.text.SimpleDateFormat;
+
+
+public class MapUtils {
+ public static final short PLATE_CARREE_PROJECTION = 0;
+ public static final short WEB_MERCATOR_PROJECTION = 1;
+
+
+
+ private static final SimpleDateFormat SIMPLE_DATE_FORMAT = new java.text.SimpleDateFormat("yyyy/MM");
+
+
+
+ public static String getModifiedMarketID(String marketID) {
+ String modifiedMarketID = marketID.replaceAll("/", "_");
+ modifiedMarketID = modifiedMarketID.replaceAll(" ", "_");
+ return modifiedMarketID;
+ }
+
+ /**
+ * increment or decrement
+ * @param currentYearMonth
+ * @param value - positive value will increment, otherwise decrement
+ * @return null if not valid number (must be between 2008/01 to 2010/12)
+ */
+
+
+/* public static void saveColor(HttpServletRequest request, DomainService domainService,
+ String type, String colorValue) {
+// String userID = Integer.toString(UserUtils.getUserId(request));
+// MapColorPK colorPK = new MapColorPK();
+// MapColorVO colorVO = new MapColorVO();
+//
+// colorPK.setUserID(userID);
+// colorPK.setPrefID(type);
+// colorVO.setMapColorPK(colorPK);
+// colorVO.setColorValue(colorValue);
+//
+// domainService.saveDomainObject(colorVO);
+ } */
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/SwingWorker.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/SwingWorker.java
new file mode 100644
index 00000000..26cbb114
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/gmap/utils/SwingWorker.java
@@ -0,0 +1,155 @@
+/*-
+ * ================================================================================
+ * 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.gmap.utils;
+
+import javax.swing.SwingUtilities;
+
+/**
+ * This is the 3rd version of SwingWorker (also known as
+ * SwingWorker 3), an abstract class that you subclass to
+ * perform GUI-related work in a dedicated thread. For
+ * instructions on using this class, see:
+ *
+ * http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
+ *
+ * Note that the API changed slightly in the 3rd version:
+ * You must now invoke start() on the SwingWorker after
+ * creating it.
+ */
+public abstract class SwingWorker {
+ private Object value; // see getValue(), setValue()
+ private Thread thread;
+
+ /**
+ * Class to maintain reference to current worker thread
+ * under separate synchronization control.
+ */
+ private static class ThreadVar {
+ private Thread thread;
+ ThreadVar(Thread t) { thread = t; }
+ synchronized Thread get() { return thread; }
+ synchronized void clear() { thread = null; }
+ }
+
+ private ThreadVar threadVar;
+
+ /**
+ * Get the value produced by the worker thread, or null if it
+ * hasn't been constructed yet.
+ */
+ protected synchronized Object getValue() {
+ return value;
+ }
+
+ /**
+ * Set the value produced by worker thread
+ */
+ private synchronized void setValue(Object x) {
+ value = x;
+ }
+
+ /**
+ * Compute the value to be returned by the <code>get</code> method.
+ */
+ public abstract Object construct();
+
+ /**
+ * Called on the event dispatching thread (not on the worker thread)
+ * after the <code>construct</code> method has returned.
+ */
+ public void finished() {
+ }
+
+ /**
+ * A new method that interrupts the worker thread. Call this method
+ * to force the worker to stop what it's doing.
+ */
+ public void interrupt() {
+ Thread t = threadVar.get();
+ if (t != null) {
+ t.interrupt();
+ }
+ threadVar.clear();
+ }
+
+ /**
+ * Return the value created by the <code>construct</code> method.
+ * Returns null if either the constructing thread or the current
+ * thread was interrupted before a value was produced.
+ *
+ * @return the value created by the <code>construct</code> method
+ */
+ public Object get() {
+ while (true) {
+ Thread t = threadVar.get();
+ if (t == null) {
+ return getValue();
+ }
+ try {
+ t.join();
+ }
+ catch (InterruptedException e) {
+ Thread.currentThread().interrupt(); // propagate
+ return null;
+ }
+ }
+ }
+
+
+ /**
+ * Start a thread that will call the <code>construct</code> method
+ * and then exit.
+ */
+ public SwingWorker() {
+ final Runnable doFinished = new Runnable() {
+ public void run() { finished(); }
+ };
+
+ Runnable doConstruct = new Runnable() {
+ public void run() {
+ try {
+ setValue(construct());
+ }
+ finally {
+ threadVar.clear();
+ }
+
+ SwingUtilities.invokeLater(doFinished);
+ }
+ };
+
+ Thread t = new Thread(doConstruct);
+ threadVar = new ThreadVar(t);
+ }
+
+ /**
+ * Start the worker thread.
+ */
+ public void start() {
+ Thread t = threadVar.get();
+ if (t != null) {
+ t.start();
+ }
+ }
+
+ public Thread getThread() {
+ return threadVar.get();
+ }
+}
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
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SchedulerUtil.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SchedulerUtil.java
new file mode 100644
index 00000000..d5162cc1
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SchedulerUtil.java
@@ -0,0 +1,369 @@
+/*-
+ * ================================================================================
+ * 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.scheduler;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+
+
+
+
+public class SchedulerUtil {
+
+ private Connection conn = null;
+
+ protected Connection getConnection() {
+ return conn;
+ }
+
+ protected void setConnection(Connection _conn) {
+ conn = _conn;
+ }
+
+ protected Connection init() throws SQLException, ReportSQLException{
+ if(conn != null)
+ return conn;
+ conn = DbUtils.getConnection();
+ return conn;
+ }
+
+ protected void closeConnection() throws SQLException {
+ if(conn != null) conn.close();
+ }
+
+ public void insertOrUpdate(String sql) throws SQLException, ReportSQLException {
+
+ Statement stat = null;
+ try{
+ //conn = getConnection();
+ stat = conn.createStatement();
+ stat.executeUpdate(sql);
+
+ } finally{
+ stat.close();
+ //conn.close();
+ }
+ }
+
+ public void updateBinaryStream(String sql, BigDecimal id, InputStream is, int size) throws SQLException, ReportSQLException, IOException {
+
+ // cludge hack for oracle databases
+ if(conn.getMetaData().getDatabaseProductName().toLowerCase().contains("oracle")) {
+/* updateBlob(sql,id,is,size);
+*/ throw new ReportSQLException("only maria db support for this ");
+
+ }
+
+ PreparedStatement stat = null;
+ try {
+ stat = conn.prepareStatement(sql);
+ stat.setBigDecimal(2, id);
+ stat.setBinaryStream(1, is, size);
+ stat.executeUpdate();
+
+ } finally{
+ stat.close();
+ }
+
+ }
+
+ /*public void updateBlob(String sql, BigDecimal id, InputStream is, int size) throws SQLException, ReportSQLException, IOException {
+ PreparedStatement stat = null;
+ OutputStream out = null;
+ BLOB blob = null;
+ try {
+ stat = conn.prepareStatement(sql);
+ blob = BLOB.createTemporary(conn,false, BLOB.DURATION_SESSION);
+ out = blob.getBinaryOutputStream();
+
+ int read;
+ while((read = is.read()) != -1) {
+ out.write(read);
+ }
+ out.flush();
+
+ stat.setBigDecimal(2, id);
+ stat.setBlob(1, blob);
+ stat.executeUpdate();
+
+ }
+ catch (SQLException sqL) {
+ sqL.printStackTrace();
+ }
+ finally{
+ out.close();
+ stat.close();
+ }
+
+ }*/
+
+
+ public void insertOrUpdateWithPrepared(String sql, List<Object> params, List<Integer> types) throws SQLException, ReportSQLException {
+
+ PreparedStatement stat = null;
+ try{
+ //conn = getConnection();
+ stat = conn.prepareStatement(sql);
+ conn.getMetaData();
+ int i2;
+ int paramLength = params.size();
+ for(int i = 0 ; i< paramLength ; i++) {
+ i2 = i+1;
+ Object param = params.get(i);
+ int type = types.get(i);
+
+ if(param.equals("NULL")) {
+ stat.setNull(i2, type);
+ }
+ else if(type == Types.VARCHAR) {
+ stat.setString(i2, (String)param);
+ }
+ else if(type == Types.INTEGER) {
+ stat.setInt(i2, (Integer)param);
+ }
+ else if(type == Types.NUMERIC) {
+ stat.setLong(i2, (Long)param);
+ }
+ else if(type == Types.DOUBLE) {
+ stat.setDouble(i2, (Double)param);
+ }
+ else if(type == Types.DATE) {
+ stat.setDate(i2, (java.sql.Date)param);
+ }
+ else if(type == Types.TIMESTAMP) {
+ stat.setTimestamp(i2, (java.sql.Timestamp)param);
+ }
+ else if(type == Types.BIGINT) {
+ stat.setBigDecimal(i2, (BigDecimal)param);
+ }
+ else
+ throw new SQLException("Unidentified Object; Please contact admin and have this method updated with the current object type");
+
+ }
+
+ stat.executeUpdate();
+
+ } finally{
+ stat.close();
+ //conn.close();
+ }
+ }
+
+
+ public Object getSingleResult(String sql, String fieldname) throws SQLException, ReportSQLException{
+
+ Statement stat = null;
+ ResultSet rs = null;
+ Object o=null;
+ try{
+ //conn = getConnection();
+ stat = conn.createStatement();
+ rs = stat.executeQuery(sql);
+
+ while (rs.next()) {
+ o = rs.getObject(fieldname);
+ }
+ }
+ catch(SQLException sqlE){
+ sqlE.printStackTrace();
+ }
+
+ finally{
+ if(rs!=null)
+ rs.close();
+ if(stat!=null)
+ stat.close();
+ //conn.close();
+ }
+ return o;
+ }
+
+ public InputStream getDBStream(String sql, String fieldname) throws SQLException, ReportSQLException, IOException{
+
+ // cludge hack for oracle databases
+ if(conn.getMetaData().getDatabaseProductName().toLowerCase().contains("oracle")) {
+ /*return getDBBlob(sql,fieldname);*/
+ throw new ReportSQLException("only maria db support for this ");
+
+ }
+
+
+ Statement stat = null;
+ ResultSet rs = null;
+ InputStream o=null;
+ try{
+ //conn = getConnection();
+ stat = conn.createStatement();
+ rs = stat.executeQuery(sql);
+
+ while (rs.next()) {
+ o = rs.getBinaryStream(fieldname);
+ }
+ }
+ catch(SQLException sqlE){
+ sqlE.printStackTrace();
+ }
+
+ finally{
+ if(rs!=null)
+ rs.close();
+ if(stat!=null)
+ stat.close();
+ //conn.close();
+ }
+ return o;
+ }
+
+ /*public InputStream getDBBlob(String sql, String fieldname) throws SQLException, ReportSQLException, IOException{
+
+
+ Statement stat = null;
+ ResultSet rs = null;
+ BLOB blob=null;
+ ByteArrayInputStream in = null;
+ try{
+ stat = conn.createStatement();
+ rs = stat.executeQuery(sql);
+
+ if (rs.next()) {
+ blob = ((OracleResultSet) rs).getBLOB(fieldname);
+ in = new ByteArrayInputStream(blob.getBytes(1,(int)blob.length()));
+
+ }
+ }
+ catch(SQLException sqlE){
+ sqlE.printStackTrace();
+ }
+
+ finally{
+ if(rs!=null)
+ rs.close();
+ if(stat!=null)
+ stat.close();
+ //conn.close();
+ }
+ return in;
+ }
+ */
+
+ public void getAndExecute(String sql, Executor executor) throws SQLException, ReportSQLException{
+ //Connection conn = getConnection();
+ Statement stat = conn.createStatement();
+ ResultSet rs = stat.executeQuery(sql);
+
+
+ while (rs.next()) {
+ executor.execute(rs);
+ }
+
+ if(rs!=null)
+ rs.close();
+ if(stat!=null)
+ stat.close();
+ //conn.close();
+ }
+
+ interface Executor{
+ public void execute(ResultSet rs) throws SQLException;
+ }
+
+
+
+
+
+
+ public static Date trunc_hour(Date v_date) {
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.setTime(v_date);
+ calendar.set(Calendar.MILLISECOND, 0);
+ calendar.set(Calendar.SECOND, 0);
+ calendar.set(Calendar.MINUTE, 0);
+ return calendar.getTime();
+ }
+
+ public static Date add_hours(Date v_date, int i) {
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(v_date);
+ cal.add(Calendar.HOUR, i);
+ return cal.getTime();
+ }
+
+ public static Date add_months(Date v_date, int i) {
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(v_date);
+ cal.add(Calendar.MONTH, i);
+ return cal.getTime();
+ }
+
+ public static Date add_days(Date v_date, int i) {
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(v_date);
+ cal.add(Calendar.DATE, i);
+ return cal.getTime();
+ }
+
+ public static Date to_date(String input, String format) {
+
+ Date date = null;
+ try {
+ date = new SimpleDateFormat(format, Locale.ENGLISH).parse(input);
+ } catch (Exception e) {
+ }
+ return date;
+ }
+
+ public static String to_date_str(Date input, String format) {
+
+ String date = null;
+ try {
+ date = new SimpleDateFormat(format, Locale.ENGLISH).format(input);
+ } catch (Exception e) {
+ }
+ return date;
+ }
+
+ public static String[] cr_dissecturl(String formfields, String delimiter){
+ if(formfields == null || formfields.isEmpty())
+ return new String[]{};
+ return formfields.split("&");
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendEmail.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendEmail.java
new file mode 100644
index 00000000..6f51cee4
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendEmail.java
@@ -0,0 +1,415 @@
+/*-
+ * ================================================================================
+ * 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.scheduler;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.math.BigDecimal;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Types;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.scheduler.SchedulerUtil.Executor;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+
+
+public class SendEmail {
+
+SchedulerUtil schedulerUtil;
+
+ public SendEmail() {
+
+ }
+
+
+ public void sendEmail( String p_mail_server, String p_sender, String p_subject, String p_mail_text, String p_url, int p_file_type, int p_schedule_id, int p_time_interval, boolean p_send_attachment, int connectionTimeout) throws SQLException, ReportSQLException{
+
+ String allEmailAddr = "";
+ final List<String> emailArr = new ArrayList<String>();
+ //int count1 = 0;
+ String schedular_email;
+
+
+ schedular_email = (String) schedulerUtil.getSingleResult("select email from fn_user au, cr_report_schedule crs where CRS.SCHED_USER_ID = AU.USER_ID and CRS.SCHEDULE_ID = "+ p_schedule_id, "email");
+
+
+ String sql=Globals.getSchedulerUserEmails().replace("[p_schedule_id]", p_schedule_id+"");
+ schedulerUtil.getAndExecute(sql, new Executor() {
+
+ @Override
+ public void execute(ResultSet rs) throws SQLException {
+
+ emailArr.add(rs.getString("email"));
+ // count1 = count1 + 1
+ }
+
+ });
+
+ if (!p_send_attachment) {
+ http_to_blob(p_url, p_file_type, p_schedule_id, connectionTimeout);
+ }
+
+ int i = 0;
+ for (String email : emailArr) {
+ /* If the email address is invalid ignore that email address */
+ if (email.contains("@")) {
+
+ if (i == 0)
+ allEmailAddr = email;
+ else
+ allEmailAddr += ',' + email;
+
+ i++;
+ }
+ }
+
+ /*List<MailAttachment> mailAttachments = null;
+
+ if (p_file_type > 1 && p_send_attachment) {
+ mailAttachments = add_attachment(p_url, p_file_type, p_schedule_id, connectionTimeout);
+ }
+ AppUtils.notifyWithAttachments(p_mail_text, emailArr.toArray(new String[emailArr.size()]), p_sender, p_subject, new String[] { schedular_email }, null, mailAttachments, true);
+ */
+ }
+
+ class HistRec {
+
+ String file_blob;
+ BigDecimal rep_id;
+ BigDecimal hist_id;
+ String file_name;
+ int sched_user_id;
+ String recurrence;
+ int file_size = 0;
+ String raptor_url;
+ int schedule_id;
+ int file_type_id;
+ int user_id;
+ String deleted_yn;
+ }
+
+
+ private HistRec http_to_blob(String p_url, int v_file_type, int p_schedule_id, int connectionTimeout) throws SQLException , ReportSQLException{
+
+
+ final HistRec v_hist_rec = initializeVHistoryRecord(p_url, v_file_type, p_schedule_id);
+ HttpURLConnection con = null;
+ try {
+ URL url = new URL(p_url);
+ con = (HttpURLConnection) url.openConnection();
+ con.setConnectTimeout(connectionTimeout*1000);
+ con.setRequestMethod("GET");
+ schedulerUtil.insertOrUpdate("INSERT INTO cr_filehist_log (SCHEDULE_ID, url, notes, run_time) VALUES ("+ p_schedule_id +",'" + p_url+ "','http_to_blob: Initiated HTTP request', " + Globals.getCurrentDateString() + " )");
+ int responseCode = con.getResponseCode();
+ String outputFolder = Globals.getProjectFolder() + java.io.File.separator + Globals.getOutputFolder();
+ String fileName = v_hist_rec.file_name;
+ createFile(con, outputFolder, fileName);
+
+ File readFile = new File(outputFolder + java.io.File.separator + fileName);
+ // need to revist this conversion; may not be safe for large file sizes
+ v_hist_rec.file_size = (int)readFile.length();
+
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'" + p_url +"', 'http_to_blob: http response recieved. Code " + responseCode + "', " + Globals.getCurrentDateString() + " )");
+
+ //v_hist_rec.file_blob = response.toString();
+ //v_hist_rec.file_size = v_hist_rec.file_blob.length();
+
+ List<Object> params = new ArrayList<Object>();
+ List<Integer> types = new ArrayList<Integer>();
+ prepareHisRecUpdate(v_hist_rec, params, types);
+
+ schedulerUtil
+ .insertOrUpdateWithPrepared("INSERT INTO cr_report_file_history(HIST_ID, SCHED_USER_ID, SCHEDULE_ID, USER_ID, REP_ID, RUN_DATE, RECURRENCE, FILE_TYPE_ID, FILE_NAME, FILE_SIZE, RAPTOR_URL, ERROR_YN, ERROR_CODE, DELETED_YN, DELETED_BY)"
+ + " VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
+ params, types
+ );
+
+ FileInputStream fileStream = new FileInputStream(readFile);
+ schedulerUtil.updateBinaryStream("update cr_report_file_history set file_blob = ? where hist_id = ?", v_hist_rec.hist_id, fileStream, v_hist_rec.file_size);
+ fileStream.close();
+
+ String userAddRecSql =
+ Globals.getSchedulerUserEmails().replace("[p_schedule_id]", p_schedule_id+"");
+
+ schedulerUtil.getAndExecute(userAddRecSql, new Executor() {
+
+ @Override
+ public void execute(ResultSet rs) throws SQLException {
+
+ try {
+ schedulerUtil.insertOrUpdate("INSERT INTO CR_HIST_USER_MAP (HIST_ID, USER_ID) values ( " + v_hist_rec.hist_id + "," + rs.getInt("user_id") + ")");
+ } catch (ReportSQLException e) {
+ throw new SQLException(e.getMessage());
+ }
+ }
+
+ });
+
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'" + p_url + "','Success: http_to_blob', " + Globals.getCurrentDateString() + " )");
+
+
+ } catch (Exception e) {
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'" + p_url + "', 'Failure: http_to_blob : Exception" + e.getMessage() +"', " + Globals.getCurrentDateString() + " )");
+ e.printStackTrace();
+ } finally {
+ if(con != null)
+ con.disconnect();
+ }
+ return v_hist_rec;
+
+ }
+
+
+ protected void prepareHisRecUpdate(final HistRec v_hist_rec, List<Object> params,
+ List<Integer> types) {
+ params.add( v_hist_rec.hist_id);
+ types.add(Types.BIGINT);
+ params.add( v_hist_rec.sched_user_id);
+ types.add(Types.INTEGER);
+ params.add( v_hist_rec.schedule_id);
+ types.add(Types.INTEGER);
+ params.add( v_hist_rec.user_id);
+ types.add(Types.INTEGER);
+ params.add( v_hist_rec.rep_id);
+ types.add(Types.BIGINT);
+ params.add( new java.sql.Date(Calendar.getInstance().getTime().getTime()));
+ types.add(Types.DATE);
+ params.add( v_hist_rec.recurrence);
+ types.add(Types.VARCHAR);
+ params.add( v_hist_rec.file_type_id);
+ types.add(Types.INTEGER);
+ params.add( v_hist_rec.file_name);
+ types.add(Types.VARCHAR);
+ params.add( v_hist_rec.file_size);
+ types.add(Types.INTEGER);
+ params.add( v_hist_rec.raptor_url);
+ types.add(Types.VARCHAR);
+ params.add( "N");
+ types.add(Types.VARCHAR);
+ params.add( "NULL");
+ types.add(Types.INTEGER);
+ params.add( v_hist_rec.deleted_yn);
+ types.add(Types.VARCHAR);
+ params.add(v_hist_rec.sched_user_id );
+ types.add(Types.INTEGER);
+ }
+
+
+ protected HistRec initializeVHistoryRecord(String p_url, int v_file_type,
+ int p_schedule_id) throws SQLException,
+ ReportSQLException {
+
+ final HistRec v_hist_rec = new HistRec();
+
+ v_hist_rec.rep_id = (BigDecimal) schedulerUtil.getSingleResult("SELECT rep_id FROM cr_report_schedule WHERE schedule_id =" + p_schedule_id, "rep_id");
+
+ Object sequenceId = schedulerUtil.getSingleResult(Globals.getSequenceNextVal().replace("[sequenceName]", "seq_cr_report_file_history"),"ID");
+
+ if(sequenceId instanceof Long)
+ v_hist_rec.hist_id = new BigDecimal((Long)sequenceId);
+ else if(sequenceId instanceof BigDecimal)
+ v_hist_rec.hist_id = (BigDecimal)sequenceId;
+
+ v_hist_rec.file_name = (String) schedulerUtil.getSingleResult("select translate(title||to_char( "+ Globals.getCurrentDateString() + ",'MM-dd-yyyyHH24:mm:ss'), "
+ + "'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'||'():;.-`~^\\|'||chr(34)||chr(39)||chr(9)||' ', "
+ + "'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')|| "+ v_hist_rec.hist_id +" as title FROM cr_report WHERE rep_id = "+v_hist_rec.rep_id, "title");
+
+
+ class File {
+
+ String file_name;
+ String file_ext;
+ }
+ final File file = new File();
+ schedulerUtil.getAndExecute("select template_file from cr_report_template_map where report_id = " + v_hist_rec.rep_id, new Executor() {
+
+ @Override
+ public void execute(ResultSet rs) throws SQLException {
+
+ file.file_name = rs.getString("template_file");
+ file.file_ext = file.file_name.substring(file.file_name.indexOf('.'));
+
+ }
+ });
+
+ if (v_file_type == 2) {
+ v_hist_rec.file_name = v_hist_rec.file_name + ".pdf";
+
+ } else if (v_file_type == 4) {
+ v_hist_rec.file_name = v_hist_rec.file_name + ".xls";
+
+ } else if (v_file_type == 5) {
+ if (file.file_name != null && file.file_ext.length() > 0) {
+ v_hist_rec.file_name = v_hist_rec.file_name + file.file_ext;
+ } else {
+ v_hist_rec.file_name = v_hist_rec.file_name + ".xlsx";
+ }
+ } else if (v_file_type == 3) {
+ v_hist_rec.file_name = v_hist_rec.file_name + ".csv";
+
+ }
+
+
+ schedulerUtil.getAndExecute("select sched_user_id, rep_id, recurrence from cr_report_schedule where schedule_id="+p_schedule_id, new Executor() {
+
+ @Override
+ public void execute(ResultSet rs) throws SQLException {
+ v_hist_rec.sched_user_id = rs.getInt("sched_user_id");
+ v_hist_rec.rep_id = rs.getBigDecimal("rep_id");
+ v_hist_rec.recurrence = rs.getString("recurrence");
+ }
+ });
+
+
+ v_hist_rec.file_size = 0;
+ v_hist_rec.raptor_url = p_url;
+ v_hist_rec.schedule_id = p_schedule_id;
+ v_hist_rec.file_type_id = v_file_type;
+ v_hist_rec.user_id = v_hist_rec.sched_user_id;
+ v_hist_rec.deleted_yn = "N";
+
+ return v_hist_rec;
+ }
+
+
+
+ /*private List<MailAttachment> add_attachment(String p_url, int v_file_type, int p_schedule_id, int connectionTimeout) throws SQLException,ReportSQLException{
+
+
+ List<MailAttachment> mailAttachmentList = new ArrayList<MailAttachment>();
+ final HistRec vHistRec = initializeVHistoryRecord(p_url, v_file_type, p_schedule_id);
+
+ /*
+ refer to http_to_blob for more details
+
+ String v_content_type;
+ String v_content_disposition;
+ int transfer_timeout_limit = 1800;
+ String v_title;
+
+ if (v_file_type == 2) {
+ v_content_type = "application/pdf";
+ v_content_disposition ="inline; filename=\""+v_title+".pdf\"";
+
+ }else if(v_file_type == 4){
+ v_content_type = "application/excel";
+ v_content_disposition ="inline; filename=\""+v_title+".xls\"";
+
+ }else if(v_file_type == 5){
+ v_content_type = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
+
+ if (file.file_ext != null && file.file_ext.length() > 0) {
+ v_content_disposition ="inline; filename=\""+v_title+ file.file_ext+"\"";
+ if (".xlsm".equals(file.file_ext)) {
+ v_content_type = "application/vnd.ms-excel.sheet.macroEnabled.12";
+ }
+ } else {
+ v_content_disposition ="inline; filename=\""+v_title+".xlsx\"";
+ };
+ }else if(v_file_type == 3){
+ v_content_type = "application/csv";
+ v_content_disposition ="inline; filename=\""+v_title+".csv\"";
+
+ }
+ * ... /
+ HttpURLConnection con = null;
+ try {
+ URL url = new URL(p_url);
+ con = (HttpURLConnection) url.openConnection();
+ con.setConnectTimeout(connectionTimeout*1000);
+ con.setRequestMethod("GET");
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'"+ p_url +"', 'Success: http request began.', " + Globals.getCurrentDateString() + " )");
+ int responseCode = con.getResponseCode();
+
+ String outputFolder = Globals.getProjectFolder() + java.io.File.separator + Globals.getOutputFolder();
+ String fileName = vHistRec.file_name;
+ createFile(con, outputFolder, fileName);
+
+ MailAttachment mailAttachment = new MailAttachment();
+ mailAttachment.setAttachmentType(MailAttachment.FILE_ATTACHMENT);
+ mailAttachment.setFilePathName(outputFolder);
+ mailAttachment.setFileName(fileName);
+ mailAttachmentList.add(mailAttachment);
+
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'" + p_url +"', 'Success: http response recieved. Code " + responseCode + "', " + Globals.getCurrentDateString() + " )");
+
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'" + p_url + "','Success: added attachment', " + Globals.getCurrentDateString() + " )");
+
+ } catch (Exception e) {
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + p_schedule_id + ",'" + p_url + "', 'Failure: adding attachment : Exception" + e.getMessage() +"', " + Globals.getCurrentDateString() + " )");
+ e.printStackTrace();
+ } finally {
+ if(con != null)
+ con.disconnect();
+ }
+
+
+ return mailAttachmentList;
+ }*/
+
+
+ void createFile(HttpURLConnection con, String outputFolder, String fileName)
+ throws IOException, FileNotFoundException {
+ //BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
+ InputStream in = con.getInputStream();
+
+ try {
+
+ FileOutputStream out = new FileOutputStream(outputFolder + java.io.File.separator + fileName );
+ try {
+ int inputLine;
+
+ while ((inputLine = in.read()) != -1) {
+ out.write(inputLine);
+ }
+ out.flush();
+ }
+ finally {
+ out.close();
+ }
+
+ }
+ finally {
+ in.close();
+ }
+ }
+
+
+ public SchedulerUtil getSchedulerUtil() {
+ return schedulerUtil;
+ }
+
+
+ public void setSchedulerUtil(SchedulerUtil schedulerUtil) {
+ this.schedulerUtil = schedulerUtil;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendNotifications.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendNotifications.java
new file mode 100644
index 00000000..40adbee4
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/scheduler/SendNotifications.java
@@ -0,0 +1,460 @@
+/*-
+ * ================================================================================
+ * 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.scheduler;
+
+import java.math.BigDecimal;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.UUID;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.scheduler.SchedulerUtil.Executor;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+public class SendNotifications {
+
+ SchedulerUtil schedulerUtil;
+ public SendEmail sendEmail;
+
+ public SendNotifications() throws Exception {
+ schedulerUtil = new SchedulerUtil();
+ sendEmail = new SendEmail();
+ sendEmail.setSchedulerUtil(schedulerUtil);
+ init();
+ }
+
+
+ public void deInit() throws SQLException {
+ schedulerUtil.closeConnection();
+ }
+
+ public void init() throws SQLException, ReportSQLException {
+ schedulerUtil.init();
+ }
+
+ public void send_notification(String p_mail_server, String p_sender, String p_system_name, String p_system_url, int connectionTimeout) throws RaptorException, Exception {
+
+ System.out.println(p_mail_server + " " + p_sender + " " + p_system_name + " " + p_system_url);
+ int p_time_interval = Globals.getSchedulerInterval();
+ int v_num_recs = 0;
+ String v_gen_key;
+ BigDecimal v_id = null;
+ String v_url;
+ String v_r_action = "report.download.pdf";
+ String v_email_msg;
+ String v_formfields;
+ // String error_m;
+ // int transfer_timeout_limit = 1800;
+ // boolean v_attach_email_yn = true;
+ int v_schedule_id;
+ Date v_touch_date;
+ // Exception for_rec;
+
+ Connection conn = schedulerUtil.getConnection();
+ Statement stat = conn.createStatement();
+
+ String CNotificationsql =
+ /*
+ "SELECT x.rep_id, x.schedule_id, x.conditional_yn, x.condition_large_sql, x.notify_type, x.max_row, x.initial_formfields, x.processed_formfields, r.title, x.user_id "
+ + "FROM ("
+ + "SELECT rs.rep_id, rs.schedule_id, rs.sched_user_id user_id, rs.conditional_yn, rs.condition_large_sql, "
+ + "rs.notify_type, rs.max_row, rs.initial_formfields, rs.processed_formfields "
+ + "FROM cr_report_schedule rs "
+ + "WHERE rs.enabled_yn='Y' "
+ + "AND rs.start_"
+ + "date <= sysdate "
+ + "AND (rs.end_date >= sysdate or rs.end_date is null ) "
+ + "AND rs.run_date IS NOT NULL "
+ + ") x, cr_report r "
+ + "WHERE x.rep_id = r.rep_id ";
+ */
+
+ Globals.getAvailableSchedules().replace("[currentDate]", Globals.getCurrentDateString());
+
+
+ ResultSet rs = stat.executeQuery(CNotificationsql);
+
+ while (rs.next()) {
+
+ v_schedule_id = rs.getInt("schedule_id");
+ int offset = get_report_sched_offset(rs.getInt("rep_id"), v_schedule_id);
+
+ if(offset >= p_time_interval) continue;
+
+
+ v_touch_date = (Date) schedulerUtil.getSingleResult("select touch_date from cr_report_email_sent_log where schedule_id = " + v_schedule_id + " and log_id = (select max(log_id) from cr_report_email_sent_log where schedule_id = " + v_schedule_id + ")", "touch_date");
+ if (v_touch_date != null) {
+ if (Math.abs(System.currentTimeMillis() - v_touch_date.getTime()) /1000 < (p_time_interval - 1)) {
+ return;
+ }
+ }
+
+ if ("Y".equals(rs.getString("conditional_yn"))) {
+
+ v_num_recs = (Integer) schedulerUtil.getSingleResult("select count(*) count from (" + rs.getString("condition_large_sql") + " )", "count");
+ }
+
+ if (v_num_recs > 0 || "N".equals(rs.getString("conditional_yn"))) {
+
+ v_gen_key = ("Z" + UUID.randomUUID()).toString().substring(0,24); // 25 character string
+ Object sequenceId = schedulerUtil.getSingleResult(Globals.getSequenceNextVal().replace("[sequenceName]", "seq_email_sent_log_id"), "id");
+
+ if(sequenceId instanceof Long)
+ v_id = new BigDecimal((Long)sequenceId);
+ else if(sequenceId instanceof BigDecimal)
+ v_id = (BigDecimal)sequenceId;
+
+ schedulerUtil.insertOrUpdate("insert into cr_report_email_sent_log (log_id, gen_key, schedule_id, rep_id, user_id, touch_date) values (" + v_id + ",'" + v_gen_key + "'," + rs.getInt("schedule_id") + "," + rs.getInt("rep_id") + "," + rs.getInt("user_id") + ", " + Globals.getCurrentDateString() + " )");
+
+ int notify_type = rs.getInt("notify_type");
+ if (notify_type == 4)
+ v_r_action = "report.download";
+ else if (notify_type == 2)
+ v_r_action = "report.download.pdf";
+ else if (notify_type == 3)
+ v_r_action = "report.csv.download";
+ else if (notify_type == 5)
+ v_r_action = "report.download.excel2007";
+ else if (notify_type == 6)
+ v_r_action = "download.all";
+
+ if (rs.getObject("processed_formfields") != null)
+ v_formfields = modify_formfields(v_schedule_id, rs.getString("processed_formFields"));
+ else
+ v_formfields = strip_formfields(v_schedule_id, rs.getString("initial_formfields"));
+
+ v_url = p_system_url + "&r_action=" + v_r_action + "&log_id=" + v_id + "&user_id=" + rs.getString("user_id") + "&pdfAttachmentKey=" + v_gen_key + "&download_limit=" + rs.getInt("max_row") + v_formfields;
+
+ boolean v_attach_email_yn = shouldSendAttachmentInEmail(v_schedule_id);
+
+ v_email_msg = "<html><body><p><b><u><i>" + p_system_name + " System Notification</i></u></b></p>" + "<p>Report <b>" + rs.getString("title") + "</b> is available for viewing.</p><p>You can view the report if it is attached. </br>"
+ + "If it is not attached, or you have problem to open it, you can log into Business Direct and run the report.</p>" + "</body></html>";
+
+ if (rs.getInt("notify_type") != 6) {
+
+ sendEmail.sendEmail(p_mail_server, p_sender, p_system_name + " System Notification: Report " + rs.getString("title") + " generated", v_email_msg, v_url, rs.getInt("notify_type"), v_schedule_id, p_time_interval, v_attach_email_yn,connectionTimeout);
+
+ } else {
+
+ // may not necessary
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + v_schedule_id + ",'" + v_url + "'," + "'Success: http request began.', " + Globals.getCurrentDateString() + " )");
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + v_schedule_id + ",'" + v_url + "'," + "'Success: http response recieved. Code resp.status_code '' desc '' resp.reason_phrase', " + Globals.getCurrentDateString() + " )");
+
+ }
+
+ schedulerUtil.insertOrUpdate("update cr_report_schedule set run_date = " + Globals.getCurrentDateString() +" where schedule_id=" + v_schedule_id);
+
+ schedulerUtil.insertOrUpdate("update cr_report_email_sent_log set sent_date= " + Globals.getCurrentDateString() +" , access_flag='N' where log_id=" + v_id);
+ schedulerUtil.insertOrUpdate("insert into cr_schedule_activity_log (SCHEDULE_ID, url, notes, run_time) values (" + v_schedule_id + ",'" + v_url + "','Success: Email Sent', " + Globals.getCurrentDateString() + " )");
+
+ }
+
+ }
+
+ if(rs!=null)
+ rs.close();
+ if(stat!=null)
+ stat.close();
+ //conn.close();
+
+ }
+
+ private boolean shouldSendAttachmentInEmail(int v_schedule_id) throws SQLException, ReportSQLException {
+
+ String l_boolean = (String) schedulerUtil.getSingleResult("SELECT ATTACHMENT_YN from cr_report_schedule where schedule_id = " + v_schedule_id, "ATTACHMENT_YN");
+ if ("Y".equals(l_boolean))
+ return true;
+ return false;
+ }
+
+ private String strip_formfields(int v_schedule_id, String p_formfields) throws SQLException, ReportSQLException {
+
+ String v_formfields_insert = "";
+ String v_formfields_generate = "";
+ String v_name = "";
+ String v_value = "";
+
+
+ String[] column_values = schedulerUtil.cr_dissecturl(p_formfields, "&");
+
+ for(String column_value : column_values){
+ if(column_value == null || column_value.isEmpty())
+ continue;
+
+ v_name = column_value.substring(0, column_value.indexOf('='));
+ v_formfields_insert += column_value + "&";
+ v_value = column_value.substring(column_value.indexOf('=') + 1);
+ if (column_value.indexOf("_auto") > 0) {
+ v_formfields_generate = v_formfields_generate + v_name.substring(0, v_name.indexOf("_auto")) + "=" + v_value + "&";
+ } else {
+ v_formfields_generate = v_formfields_generate + column_value + "&";
+ }
+ }
+
+ schedulerUtil.insertOrUpdate("update CR_REPORT_SCHEDULE set processed_formfields ='" + v_formfields_insert + "' where schedule_id = " + v_schedule_id);
+
+ return v_formfields_generate.substring(0, v_formfields_generate.length());
+
+ }
+
+ private String modify_formfields(int v_schedule_id, String p_formfields) throws SQLException, ReportSQLException {
+
+ class Result {
+
+ String v_formfields_insert = "";
+ String v_formfields_generate = "";
+ String v_name = "";
+ String v_value = "";
+ Date v_date;
+ String v_hour = "";
+ String v_hour_value = "";
+ }
+
+ final Result result = new Result();
+
+ final String v_recurrence = (String) schedulerUtil.getSingleResult("select recurrence from cr_report_schedule where schedule_id = " + v_schedule_id, "recurrence");
+
+ String[] column_values = schedulerUtil.cr_dissecturl(p_formfields, "&");
+
+ for(String column_value : column_values){
+ if (column_value == null)
+ column_value = "";
+
+ if ("MONTHLY".equals(v_recurrence)) {
+ if (column_value.indexOf("_auto") > 0) {
+ result.v_name = column_value.substring(0, column_value.indexOf('='));
+ result.v_date = schedulerUtil.to_date(column_value.substring(column_value.indexOf('=') + 1), "mm/dd/yyyy");
+ result.v_value = schedulerUtil.add_months(result.v_date, 1).toString();
+
+ if (result.v_name.length() > 0) {
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value + "&";
+ }
+ } else {
+ result.v_formfields_insert = result.v_formfields_insert + column_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + column_value + "&";
+ }
+
+ } else if ("DAILY".equals(v_recurrence)) {
+ if (column_value.indexOf("_auto") > 0) {
+ result.v_name = column_value.substring(0, column_value.indexOf('='));
+ result.v_date = schedulerUtil.to_date(column_value.substring(column_value.indexOf('=') + 1), "mm/dd/yyyy");
+ result.v_value = schedulerUtil.add_months(result.v_date, 1).toString();
+
+ if (result.v_name.length() > 0) {
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value + "&";
+ }
+ } else {
+ result.v_formfields_insert = result.v_formfields_insert + column_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + column_value + "&";
+ }
+
+ } else if ("DAILY_MO_FR".equals(v_recurrence)) {
+ if (column_value.indexOf("_auto") > 0) {
+ result.v_name = column_value.substring(0, column_value.indexOf('='));
+ result.v_date = schedulerUtil.to_date(column_value.substring(column_value.indexOf('=') + 1), "mm/dd/yyyy");
+ SimpleDateFormat sdf = new SimpleDateFormat("EEE");
+ sdf.format(result.v_date);
+ if ("FRI".equals(result.v_date.toString())) {
+ result.v_date = schedulerUtil.add_days(result.v_date, 3);
+ } else if ("SAT".equals(result.v_date.toString())) {
+ result.v_date = schedulerUtil.add_days(result.v_date, 2);
+ } else {
+ result.v_date = schedulerUtil.add_days(result.v_date, 1);
+ }
+ result.v_value = result.v_date.toString();
+ if (result.v_name.length() > 0) {
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value + "&";
+ }
+
+ } else {
+ result.v_formfields_insert = result.v_formfields_insert + column_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + column_value + "&";
+ }
+
+ } else if ("HOURLY".equals(v_recurrence)) {
+
+ result.v_name = column_value.indexOf('=')>0?column_value.substring(0, column_value.indexOf('=')) : "";
+ if (column_value.indexOf("_auto") > 0) {
+
+
+ String[] column_values2 = schedulerUtil.cr_dissecturl(p_formfields, "&");
+
+ for(String column_value2 : column_values2){
+
+ String key = column_value2.substring(0, column_value2.indexOf("="));
+ if(key.equals(result.v_name.substring(0, result.v_name.indexOf("_auto"))) || key.equals(result.v_name.substring(0, result.v_name.indexOf("_Hr")))){
+ result.v_hour = column_value2;
+ }
+ }
+
+// schedulerUtil.getAndExecute("select c.column_value from table(CR_DISSECTURL(p_formfields)) c where substr(c.column_value, 1, instr(c.column_value, '=')-1) = substr(" + result.v_name + ",1,instr(" + result.v_name + ",'_auto')-1)||'_Hr'", new Executor() {
+//
+// @Override
+// public void execute(ResultSet rs) throws SQLException {
+//
+// result.v_hour = rs.getString("column_value");
+// }
+//
+// });
+
+ if (result.v_hour.length() > 0) {
+ result.v_hour_value = result.v_hour.substring(result.v_hour.indexOf('=') + 1);
+ }
+
+ result.v_date = schedulerUtil.to_date(column_value.substring(column_value.indexOf('=') + 1) + " " + result.v_hour_value, "mm/dd/yyyy HH24:MI:SS");
+
+ result.v_value = schedulerUtil.to_date_str(schedulerUtil.add_hours(result.v_date, 1), "mm/dd/yyyy HH24");
+
+ if (result.v_name.length() > 0) {
+ if (result.v_hour.length() > 0) {
+
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value.substring(0, 10) + "&" + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "_Hr=" + result.v_value.substring(11, 13);
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value.substring(0, 10) + "&" + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "_Hr="
+ + result.v_value.substring(11, 13) + "&";
+
+ } else {
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value + "&";
+ }
+ }
+ }
+ if (column_value.indexOf("_Hr") <= 0) {
+ result.v_formfields_insert = result.v_formfields_insert + column_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + column_value + "&";
+ }
+ } else if ("WEEKLY".equals(v_recurrence)) {
+
+ if (column_value.indexOf("_auto") > 0) {
+ result.v_name = column_value.substring(0, column_value.indexOf('='));
+ result.v_date = schedulerUtil.to_date(column_value.substring(column_value.indexOf('=') + 1), "mm/dd/yyyy");
+ result.v_value = schedulerUtil.add_days(result.v_date, 7).toString();
+
+ if (result.v_name.length() > 0) {
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value + "&";
+ }
+
+ } else {
+ result.v_formfields_insert = result.v_formfields_insert + column_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + column_value + "&";
+ }
+
+ } else {
+ if (column_value.indexOf("_auto") > 0) {
+ result.v_name = column_value.substring(0, column_value.indexOf('='));
+ result.v_date = schedulerUtil.to_date(column_value.substring(column_value.indexOf('=') + 1), "mm/dd/yyyy");
+ result.v_value = schedulerUtil.add_days(result.v_date, 7).toString();
+ if (result.v_name.length() > 0) {
+ result.v_formfields_insert = result.v_formfields_insert + result.v_name + "=" + result.v_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + result.v_name.substring(0, result.v_name.indexOf("_auto")) + "=" + result.v_value + "&";
+ }
+
+ } else {
+ result.v_formfields_insert = result.v_formfields_insert + column_value + "&";
+ result.v_formfields_generate = result.v_formfields_generate + column_value + "&";
+ }
+ }
+ }
+
+ schedulerUtil.insertOrUpdate("update CR_REPORT_SCHEDULE set processed_formfields ='" + result.v_formfields_insert + "' where schedule_id =" + v_schedule_id);
+ return "&" + result.v_formfields_generate.substring(0, result.v_formfields_generate.length());
+ }
+
+ private int get_report_sched_offset(int p_rep_id, int p_schedule_id) throws SQLException, ReportSQLException {
+
+ class CrReportSchedule {
+
+ Date run_date;
+ String recurrence;
+ }
+ Date v_last_date = null;
+ Date v_sysdate = new Date();
+
+ final CrReportSchedule v_report_schedule_rec = new CrReportSchedule();
+
+ schedulerUtil.getAndExecute("SELECT * FROM cr_report_schedule WHERE rep_id = " + p_rep_id + " and schedule_id = " + p_schedule_id, new Executor() {
+
+ @Override
+ public void execute(ResultSet rs) throws SQLException {
+
+ v_report_schedule_rec.recurrence = rs.getString("recurrence");
+ java.sql.Timestamp runDate = rs.getTimestamp("run_date");
+ v_report_schedule_rec.run_date = new Date(runDate.getTime()) ;
+ }
+
+ });
+
+ if (v_report_schedule_rec.run_date == null || v_report_schedule_rec.run_date.compareTo(v_sysdate) > 0) {
+ return Integer.MAX_VALUE;
+ }
+
+ Date v_next_date = v_report_schedule_rec.run_date;
+
+ while (v_next_date.compareTo(v_sysdate) < 0) {
+
+ if ("HOURLY".equals(v_report_schedule_rec.recurrence)) {
+ v_next_date = SchedulerUtil.add_hours(v_next_date, 1);
+ } else if ("DAILY".equals(v_report_schedule_rec.recurrence)) {
+ v_next_date = SchedulerUtil.add_days(v_next_date, 1);
+ } else if ("DAILY_MO_FR".equals(v_report_schedule_rec.recurrence)) {
+ SimpleDateFormat sdf = new SimpleDateFormat("EEE");
+ sdf.format(v_next_date);
+ if ("FRI".equals(v_next_date.toString())) {
+ v_next_date = SchedulerUtil.add_days(v_next_date, 3);
+ } else if ("SAT".equals(v_next_date.toString())) {
+ v_next_date = SchedulerUtil.add_days(v_next_date, 2);
+ } else {
+ v_next_date = SchedulerUtil.add_days(v_next_date, 1);
+ }
+ } else if ("WEEKLY".equals(v_report_schedule_rec.recurrence)) {
+ v_next_date = SchedulerUtil.add_days(v_next_date, 7);
+ } else if ("MONTHLY".equals(v_report_schedule_rec.recurrence)) {
+ v_next_date = SchedulerUtil.add_months(v_next_date, 1);
+ } else {
+ break;
+ }
+ v_last_date = v_next_date;
+ }
+
+ if (SchedulerUtil.trunc_hour(v_last_date).compareTo(SchedulerUtil.trunc_hour(v_sysdate)) == 0) {
+ return (int)(Math.abs (v_sysdate.getTime() - v_last_date.getTime()) / 1000);
+ } else {
+ // More than an hour
+ return 3601;
+ }
+ }
+
+ public SchedulerUtil getSchedulerUtil() {
+ return schedulerUtil;
+ }
+
+ public void setSchedulerUtil(SchedulerUtil schedulerUtil) {
+ this.schedulerUtil = schedulerUtil;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/AppUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/AppUtils.java
new file mode 100644
index 00000000..ce070c3a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/AppUtils.java
@@ -0,0 +1,333 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.io.File;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.HtmlStripper;
+
+public class AppUtils /* implements IAppUtils */{
+ private static String baseURL = null;
+
+ private AppUtils() {
+ }
+
+ /** ******************************************************** */
+
+ public static String generateFileName(HttpServletRequest request, String fileTypeExtension) {
+ return AppConstants.FILE_PREFIX + getUserID(request) + fileTypeExtension;
+ } // generateFileName
+
+ public static String generateUniqueFileName(HttpServletRequest request, String reportName, String fileTypeExtension) {
+ String formattedReportName = new HtmlStripper().stripSpecialCharacters(reportName);
+ String formattedDate = new SimpleDateFormat("MMddyyyyHHmm").format(new Date());
+ return formattedReportName+formattedDate+getUserID(request)+fileTypeExtension;
+ } // generateFileName
+
+ public static String getRequestValue(HttpServletRequest request, String valueID) {
+ String value = (String) request.getAttribute(valueID);
+ if (value == null)
+ value = request.getParameter(valueID);
+ return value;
+ } // getRequestValue
+
+ public static String getRequestNvlValue(HttpServletRequest request, String valueID) {
+ String value = getRequestValue(request, valueID);
+ return (value == null) ? "" : value;
+ } // getRequestValue
+
+ public static boolean getRequestFlag(HttpServletRequest request, String valueID) {
+ String value = getRequestNvlValue(request, valueID);
+ return value.toLowerCase().equals("true") || value.toUpperCase().startsWith("Y");
+ } // getRequestFlag
+
+ /** ******************************************************** */
+
+ public static String getUserID(HttpServletRequest request) {
+ return Globals.getAppUtils().getUserID(request);
+ } // getUserID
+
+ public static String getUserName(HttpServletRequest request) {
+ return Globals.getAppUtils().getUserName(request);
+ } // getUserName
+
+ public static String getUserName(String userId) {
+ return Globals.getAppUtils().getUserName(userId);
+ } // getUserName
+
+ public static String getUserEmail(String userId) {
+ return Globals.getAppUtils().getUserEmail(userId);
+ } // getUserEmail
+
+ public static String getUserEmail(HttpServletRequest request) {
+ return Globals.getAppUtils().getUserEmail(request);
+ } // getUserEmail
+
+ public static String getUserLoginId(HttpServletRequest request) {
+ return Globals.getAppUtils().getUserLoginId(request);
+ } // getUserLoginId
+
+ public static String getUserLoginId(String userId) {
+ return Globals.getAppUtils().getUserLoginId(userId);
+ } // getUserLoginId
+
+ public static String getUserBackdoorLoginId(HttpServletRequest request) {
+ return Globals.getAppUtils().getUserBackdoorLoginId(request);
+ } // getUserBackdoorLoginId
+
+ public static Vector getAllUsers(String customizedQuery, String param, boolean isAdmin) {
+ return Globals.getAppUtils().getAllUsers(customizedQuery, param, isAdmin);
+ } // getAllUsers
+
+ public static String getRoleName(String roleId) {
+ return Globals.getAppUtils().getRoleName(roleId);
+ } // getRoleName
+
+ public static Vector getAllRoles(String customizedQuery, String param, boolean isAdmin) {
+ return Globals.getAppUtils().getAllRoles(customizedQuery, param, isAdmin);
+ } // getAllRoles
+
+ public static boolean isUserInRole(HttpServletRequest request, String roleId) throws RaptorException {
+ return Globals.getAppUtils().isUserInRole(request,roleId);
+ } // isUserInRole
+
+// public static boolean isUserInRole(String userId, String roleId) throws RaptorException {
+// return Globals.getAppUtils().isUserInRole(userId, roleId);
+// } // isUserInRole
+
+ public static Vector getUserRoles(HttpServletRequest request) throws RaptorException {
+ return Globals.getAppUtils().getUserRoles(request);
+ } // getUserRoles
+
+ public static Vector getUserRoles(String userID) throws RaptorException {
+ return Globals.getAppUtils().getUserRoles(userID);
+ } // getUserRoles
+
+// public static Vector getUserRoles(HttpServletRequest request) throws RaptorException {
+// return Globals.getAppUtils().getUserRoles(request);
+// } // getUserRoles
+
+ public static void resetUserCache() {
+ Globals.getAppUtils().resetUserCache();
+ } // resetUserCache
+
+ public static String getSuperRoleID() {
+ return Globals.getAppUtils().getSuperRoleID();
+ } // getSuperRoleID
+
+ public static Vector getAdminRoleIDs() {
+ return Globals.getAppUtils().getAdminRoleIDs();
+ } // getAdminRoleIDs
+
+ // This is changed to check for Admin User as admin user also need super user privilege if explicitly specified in properties file.
+ public static boolean isSuperUser(HttpServletRequest request)throws RaptorException {
+ if(Globals.isAdminRoleEquivalenttoSuperRole()) return isAdminUser(request);
+ else return isUserInRole(request, getSuperRoleID());
+ } // isSuperUser
+
+ /*public static boolean isSuperUser(String userId) throws RaptorException {
+ if(Globals.isAdminRoleEquivalenttoSuperRole()) return isAdminUser(userId);
+ else return isUserInRole(userId, getSuperRoleID());
+ } // isSuperUser
+ */
+
+ public static boolean isAdminUser(HttpServletRequest request) throws RaptorException {
+ if (isSuperUser(request))
+ return true;
+ for (int i = 0; i < getAdminRoleIDs().size(); i++)
+ if (isUserInRole(request, (String) getAdminRoleIDs().get(i)))
+ return true;
+
+ return false;
+ } // isAdminUser
+
+ /*public static boolean isAdminUser(String userId) throws RaptorException {
+ if (isSuperUser(userId))
+ return true;
+
+ for (int i = 0; i < getAdminRoleIDs().size(); i++)
+ if (isUserInRole(userId, (String) getAdminRoleIDs().get(i)))
+ return true;
+
+ return false;
+ } // isAdminUser
+ */
+
+ public static String getTempFolderPath() {
+ String path = Globals.getAppUtils().getTempFolderPath();
+ if (path.endsWith(File.separator) || path.endsWith("/")){
+ return path;
+ } else {
+ path = path + File.separator;
+ return path;
+ }
+ } // getTempFolderPath
+
+ public static String getUploadFolderPath() {
+ String path = Globals.getAppUtils().getUploadFolderPath();
+ if (path.endsWith(File.separator)){
+ return path;
+ } else {
+ path = path + File.separator;
+ return path;
+ }
+ } // getUploadFolderPath
+
+ public static String getTempFolderURL() {
+ return Globals.getAppUtils().getTempFolderURL();
+ } // getTempFolderURL
+
+ public static String getUploadFolderURL() {
+ return Globals.getAppUtils().getUploadFolderURL();
+ } // getUploadFolderURL
+
+ public static String getSMTPServer()throws Exception {
+ return Globals.getAppUtils().getSMTPServer();
+ } // getSMTPServer
+
+ public static String getDefaultEmailSender() throws RaptorException {
+ return Globals.getAppUtils().getDefaultEmailSender();
+ } // getDefaultEmailSender
+
+ public static String getErrorPage() {
+ return getJspContextPath() + Globals.getAppUtils().getErrorPage();
+ } // getErrorPage
+
+ public static String getErrorPageWMenu() {
+ return getJspContextPath() + Globals.getAppUtils().getErrorPageWMenu();
+ } // getErrorPage
+
+ public static String getJspContextPath() {
+ return Globals.getAppUtils().getJspContextPath();
+ } // getJspContextPath
+
+ public static String getImgFolderURL() {
+ return Globals.getAppUtils().getImgFolderURL();
+ } // getImgFolderURL
+
+ public static String getBaseFolderURL() {
+ return Globals.getAppUtils().getBaseFolderURL();
+ } // getBaseFolderURL
+
+ /*
+ * public static String getReportExecuteActionURL() { return
+ * Globals.getAppUtils().getReportExecuteActionURL(); } //
+ * getReportExecuteActionURL
+ *
+ * public static String getDataViewActionURL() { return
+ * Globals.getAppUtils().getDataViewActionURL(); } // getDataViewActionURL
+ *
+ * public static String getDataViewActionParam() { return
+ * Globals.getAppUtils().getDataViewActionParam(); } //
+ * getDataViewActionParam
+ */
+ public static String getDirectAccessURL() {
+ return Globals.getAppUtils().getDirectAccessURL();
+ } // getDirectAccessURL
+
+ public static String getBaseURL() {
+ if (baseURL == null) {
+ baseURL = getBaseActionURL();
+ if (baseURL.indexOf("?") > 0)
+ baseURL = baseURL.substring(0, baseURL.indexOf("?"));
+ } // if
+
+ return baseURL;
+ } // getBaseURL
+
+ public static String getBaseActionURL() {
+ return Globals.getAppUtils().getBaseActionURL();
+ } // getBaseActionURL
+
+ public static String getDrillActionURL() {
+ return Globals.getAppUtils().getDrillActionURL();
+ } // getBaseActionURL
+
+ public static String getRaptorActionURL() {
+ return Globals.getAppUtils().getBaseActionURL() + "raptor&" + AppConstants.RI_ACTION
+ + "=";
+ } // getRaptorActionURL
+
+ public static String getRaptorActionURLNG() {
+ return Globals.getAppUtils().getBaseActionURLNG();
+ } // getRaptorActionURL
+
+ public static String getReportExecuteActionURL() {
+ return getRaptorActionURL() + "report.run.container&" + AppConstants.RI_REPORT_ID + "="; // getBaseActionParam();
+ } // getReportExecuteActionURL
+
+ public static String getReportExecuteActionURLNG() {
+ return getRaptorActionURLNG() + "report_run/"; // getBaseActionParam();
+ } // getReportExecuteActionURL
+
+ public static String getBaseActionParam() {
+ return Globals.getAppUtils().getBaseActionParam();
+ } // getBaseActionParam
+
+ public static Vector getQuickLinksMenuIDs() {
+ return Globals.getAppUtils().getQuickLinksMenuIDs();
+ } // getQuickLinksMenuIDs
+
+ public static String getMenuLabel(String menuId) {
+ return Globals.getAppUtils().getMenuLabel(menuId);
+ } // getMenuLabel
+
+ public static String getReportDbColsMaskSQL() {
+ return Globals.getAppUtils().getReportDbColsMaskSQL();
+ } // getReportDbColsMaskSQL
+
+ public static String getReportDbLookupsSQL() {
+ return Globals.getAppUtils().getReportDbLookupsSQL();
+ } // getReportDbLookupsSQL
+
+ public static void processErrorNotification(HttpServletRequest request, RaptorException e) {
+ Globals.getAppUtils().processErrorNotification(request, e);
+ } // processErrorNotification
+
+ public static String getExcelTemplatePath() {
+ String path = Globals.getAppUtils().getExcelTemplatePath();
+ if (path.endsWith(File.separator)){
+ return path;
+ } else {
+ path = path + File.separator;
+ return path;
+ }
+ } // getTempFolderPath
+
+ public static String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public static boolean isNotEmpty(String s) {
+ return nvl(s).length()>0;
+ }
+ public static String nvls(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+} // AppUtils
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ConnectionUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ConnectionUtils.java
new file mode 100644
index 00000000..58fb3f25
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ConnectionUtils.java
@@ -0,0 +1,69 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.sql.Connection;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+
+public class ConnectionUtils {
+
+ public static DataSet getDataSet(String sql, String remoteDbPrefix)
+ throws RaptorException {
+ return getDataSet(sql, remoteDbPrefix, false);
+ }
+
+ public static Connection getConnection(String remoteDbPrefix) throws ReportSQLException {
+ if (!isNull(remoteDbPrefix) && (!remoteDbPrefix.equals(AppConstants.DB_LOCAL)) && !Globals.getSystemType().equals(Globals.ST_GENERIC) ) {
+ return RemDbUtils.getConnection(remoteDbPrefix);
+ } else {
+ return DbUtils.getConnection();
+ }
+ }
+
+ public static DataSet getDataSet(String sql, String remoteDbPrefix,
+ boolean pagesize) throws ReportSQLException {
+ DataSet ds = null;
+ if (!isNull(remoteDbPrefix) && (!remoteDbPrefix.equals(AppConstants.DB_LOCAL)) && !Globals.getSystemType().equals(Globals.ST_GENERIC) ) {
+ if (pagesize == false)
+ ds = RemDbUtils.executeQuery(sql,remoteDbPrefix);
+ else
+ ds = RemDbUtils.executeQuery(sql, Globals.getDefaultPageSize() + 1,remoteDbPrefix);
+ } else {
+ if (pagesize == false)
+ ds = DbUtils.executeQuery(sql);
+ else
+ ds = DbUtils.executeQuery(sql, Globals.getDefaultPageSize() + 1);
+ }
+ return ds;
+ }
+
+ public static boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/DbUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/DbUtils.java
new file mode 100644
index 00000000..859931f9
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/DbUtils.java
@@ -0,0 +1,1298 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.sql.CallableStatement;
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.sql.Types;
+
+import javax.sql.DataSource;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.web.support.AppUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+
+public class DbUtils /* implements IDbUtils */{
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(DbUtils.class);
+
+
+
+ private static DataSource dataSource;
+
+
+ public DbUtils() {
+ }
+
+ public static Connection getConnection() throws ReportSQLException {
+ try {
+ return AppUtils.getDatasource().getConnection();
+ } catch(SQLException ex) {
+ ex.printStackTrace();
+ }
+ return null;
+ //return Globals.getDbUtils().getConnection();
+ } // getConnection
+
+ public static void clearConnection(Connection con) throws ReportSQLException {
+ try {
+ if ((con != null) && !con.isClosed())
+ Globals.getDbUtils().clearConnection(con);
+ } catch (SQLException ex) {
+ throw new ReportSQLException(ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new ReportSQLException (ex2.getMessage(), ex2.getCause());
+ }
+ } // clearConnection
+
+ public static Connection startTransaction() throws ReportSQLException {
+ Connection con = null;
+ try {
+ con = getConnection();
+ con.setAutoCommit(false);
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new ReportSQLException (ex2.getMessage(), ex2.getCause());
+ }
+ return con;
+ } // startTransaction
+
+ public static void commitTransaction(Connection con) throws ReportSQLException {
+ try {
+ con.commit();
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new ReportSQLException (ex2.getMessage(), ex2.getCause());
+ }
+
+ //clearConnection(con);
+ } // commitTransaction
+
+ public static void rollbackTransaction(Connection con) throws ReportSQLException {
+ try {
+ con.rollback();
+ clearConnection(con);
+ } catch (SQLException ex) {
+ throw new ReportSQLException (ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new ReportSQLException (ex2.getMessage(), ex2.getCause());
+ }
+ } // rollbackTransaction
+
+ public static String executeCall(Connection con, String sql, boolean expectResult)
+ throws ReportSQLException {
+ String result = null;
+
+ try {
+ if(con.isClosed()) con = getConnection();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[SQL CALL FROM RAPTOR] [SQL Call] " + sql));
+ CallableStatement stmt = con.prepareCall(sql);
+ if (expectResult)
+ stmt.registerOutParameter(1, Types.CHAR);
+ stmt.executeUpdate();
+ if (expectResult)
+ result = stmt.getString(1);
+ stmt.close();
+ con.commit();
+ } catch (SQLException e) {
+ throw new ReportSQLException(e.getMessage(), sql);
+ } finally {
+ clearConnection(con);
+ }
+
+ return result;
+ } // executeCall
+
+ public static String executeCall(String sql, boolean expectResult)
+ throws RaptorException {
+ Connection con = null;
+ con = getConnection();
+ String result = executeCall(con, sql, expectResult);
+ //con.commit();
+ return result;
+ } // executeCall
+
+ public static int executeUpdate(Connection con, String sql) throws ReportSQLException {
+ int rcode = -1;
+ try {
+ Statement stmt = con.createStatement();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[SQL CALL FROM RAPTOR] [SQL Update] " + sql));
+ rcode = stmt.executeUpdate(sql);
+ stmt.close();
+ //con.commit();
+ } catch (SQLException e) {
+ //e.printStackTrace();
+ throw new ReportSQLException(e.getMessage(), sql);
+ }
+ return rcode;
+ } // executeUpdate
+
+ /* public static int batchUpdate(Connection con, String sql) throws ReportSQLException, Exception {
+ int rcode = -1;
+ try {
+ Statement stmt = con.createStatement();
+ debugLogger.debug("[SQL CALL FROM RAPTOR] [SQL Update] " + sql, 4);
+ rcode = stmt.executeUpdate(sql);
+ stmt.close();
+ } catch (SQLException e) {
+ e.printStackTrace();
+ throw new ReportSQLException(e.getMessage(), sql);
+ }
+ return rcode;
+ } // batchUpdate
+*/
+
+ public static int executeUpdate(String sql) throws ReportSQLException {
+ Connection con = null;
+ try {
+ con = getConnection();
+ int rcode = executeUpdate(con, sql);
+ if(Globals.getDBType().equals("oracle"))
+ con.commit();
+
+ return rcode;
+ } catch (SQLException e) {
+ throw new ReportSQLException(e.getMessage(), sql);
+ } finally {
+ clearConnection(con);
+ }
+ } // executeUpdate
+
+ public static DataSet executeQuery(Connection con, String sql) throws ReportSQLException {
+ return executeQuery(con, sql, Integer.MAX_VALUE);
+ } // executeQuery
+
+ public static DataSet executeQuery(Connection con, String sql, int maxRowLimit)
+ throws ReportSQLException {
+ try {
+ if(con.isClosed()) con = getConnection();
+ //con.
+ Statement stmt = con.createStatement();
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[SQL CALL FROM RAPTOR] [SQL] " + sql));
+ ResultSet rs = stmt.executeQuery(sql);
+ DataSet ds = new DataSet(rs, maxRowLimit);
+
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+
+ return ds;
+ } catch (SQLException e) {
+ throw new ReportSQLException(e.getMessage(), sql);
+ }
+ } // executeQuery
+
+ public static DataSet executeQuery(String sql) throws ReportSQLException {
+ return executeQuery(sql, Integer.MAX_VALUE);
+ } // executeQuery
+
+ public static DataSet executeQuery(String sql, int maxRowLimit) throws ReportSQLException {
+ Connection con = null;
+ try {
+ con = getConnection();
+ return executeQuery(con, sql, maxRowLimit);
+ }catch (ReportSQLException ex) {
+ logger.error(EELFLoggerDelegate.debugLogger, ("Error " + sql));
+ throw new ReportSQLException(ex.getMessage(), ex);
+ }catch(Exception ex1) {
+ throw new ReportSQLException(ex1.getMessage(), ex1.getCause());
+ } finally {
+ clearConnection(con);
+ }
+ } // executeQuery
+
+ //For ZK Support
+
+ public static int executeQuery(ReportRuntime rr, int dateOption) {
+ Connection con = null;
+ int rowCount = 0;
+ try {
+ con = ConnectionUtils.getConnection(rr.getDBInfo());
+ String wholeSql = rr.getWholeSQL();
+
+ DataColumnType dc = rr.getColumnWhichNeedEnhancedPagination();
+ String date_ColId = dc.getColId();
+ String dataFormat = dc.getColFormat();
+ if(dataFormat!=null && dataFormat.length()>0)
+ date_ColId = "to_date("+date_ColId+", '"+ dataFormat +"')";
+ String sql = "";
+ if(dateOption == 1)
+ sql = "select count(distinct to_char("+date_ColId+", 'YYYY/MM')) from ("+wholeSql+")";
+ else if (dateOption == 3)
+ sql = "select count(distinct to_char("+date_ColId+", 'YYYY/MM/DD')) from ("+wholeSql+")";
+ else if (dateOption == 2)
+ sql = "select count(distinct to_char("+date_ColId+", 'YYYY')) from ("+wholeSql+")";
+ DataSet ds = executeQuery(con, sql.toString());
+ rowCount = ds.getInt(0,0);
+ } catch (ReportSQLException ex) {
+ ex.printStackTrace();
+ }catch(Exception ex1) {
+ ex1.printStackTrace();
+ } finally {
+ try {
+ clearConnection(con);
+ } catch (ReportSQLException ex2) {
+ ex2.printStackTrace();
+ }
+ }
+ return rowCount;
+ }
+
+// public static List executeQuery(ReportRuntime rr, String filterClause, int itemStartNumber, int itemEndNumber, boolean topDown, String _orderBy, boolean asc, RaptorRunHandler raptorRunHandler) {
+// Connection con = null;
+// List rowList = new ArrayList();
+// String totalSql = raptorRunHandler.getTotalSql();
+// ReportData rd = null;
+// boolean totalAvailable = false;
+// if(nvls(totalSql).length()>0) totalAvailable = true;
+// /*if(totalAvailable) {
+// if(itemStartNumber > 0) itemStartNumber--;
+// itemEndNumber--;
+// //if(itemEndNumber > 2) itemEndNumber = itemEndNumber - 2;
+// }*/
+// try {
+//
+//
+//
+// con = ConnectionUtils.getConnection(rr.getDBInfo());
+// //if client side sorting is needed we could disable the comment line below for quicker development
+// // until we do it in "client" end.
+// //StringBuffer sql = new StringBuffer(rr.getReportSQLWithRowNum());
+// StringBuffer sql = new StringBuffer("");
+// String dbType = raptorRunHandler.getDbType();
+// if(rr.getDateOption() == -1) {
+// if (!dbType.equals("DAYTONA")) {
+// sql = new StringBuffer(rr.getReportSQLWithRowNum(_orderBy, asc));
+// //if( /*itemEndNumber > 1 &&*/ itemEndNumber > itemStartNumber)
+// if(topDown) {
+// sql.append(")"+ (Globals.isPostgreSQL()?" AS ":"") +" y");
+//
+// if(Globals.getDBType().equals("postgresql"))
+// sql.append(" WHERE RNUM < " + (itemEndNumber));
+// else
+// sql.append(" WHERE ROWNUM < " + (itemEndNumber));
+// }
+// else {
+// //sql.append(" WHERE ROWNUM <= " + (itemEndNumber));
+// String a_sql = Globals.getReportSqlOnlySecondPartA();
+// a_sql = a_sql.replace("[endRow]", String.valueOf(itemEndNumber));
+// String b_sql = Globals.getReportSqlOnlySecondPartBNoOrderBy();
+// b_sql = b_sql.replace("[startRow]", String.valueOf(itemStartNumber));
+// sql.append(") "+ (Globals.isPostgreSQL()?" AS ":"") +" a ");
+// sql.append(a_sql);
+// sql.append(b_sql);
+//
+// }
+// // sql.append(" ) y WHERE rnum >= " + (topDown?itemStartNumber:(itemStartNumber+1)));
+// if(nvls(_orderBy).length()>0)
+// sql.append(" ORDER BY "+ _orderBy + " "+ (asc ? "ASC" : "DESC"));
+// else
+// sql.append(" ORDER BY rnum");
+// // sql = String.format(sql, _orderBy, asc ? "ASC" : "DESC");
+// } else {
+// sql = new StringBuffer(rr.getWholeSQL());
+// if( sql.toString().trim().toUpperCase().startsWith("SELECT")) {
+// sql.append(" LIMIT TO "+ (itemStartNumber+1)+"->"+itemEndNumber);
+// }
+// //return sql;
+// }
+// System.out.println("ZK RAPTOR RUN " + sql);
+// } else {
+// String wholeSql = rr.getWholeSQL();
+// DataColumnType dc = rr.getColumnWhichNeedEnhancedPagination();
+// String date_ColId = dc.getColId();
+// String dataFormat = dc.getColFormat();
+// if(dataFormat!=null && dataFormat.length()>0)
+// date_ColId = "to_date("+date_ColId+", '"+ dataFormat +"')";
+// StringBuffer dateSql = new StringBuffer(" select y.rownum1, y.datetime from (select rownum rownum1, datetime from ");
+// if(rr.getDateOption() == 1) {
+// dateSql.append( "(select distinct to_char("+date_ColId+", 'YYYY/MM') datetime from ( " + wholeSql + ") order by 1 desc");
+// } else if (rr.getDateOption() == 2) {
+// dateSql.append( "(select distinct to_char("+date_ColId+", 'YYYY') datetime from ( " + wholeSql + ") order by 1 desc");
+// } else if (rr.getDateOption() == 3) {
+// dateSql.append( "(select distinct to_char("+date_ColId+", 'YYYY/MM/DD') datetime from ( " + wholeSql + ") order by 1 desc");
+// }
+// dateSql.append(")) y where y.rownum1 = "+ (itemStartNumber+1));
+// DataSet ds = executeQuery(con, dateSql.toString());
+// String dateStr = "";
+// if(ds.getRowCount() > 0)
+// dateStr = ds.getString(0,1);
+//
+// sql = new StringBuffer(rr.getReportSQLWithRowNum(_orderBy, asc));
+// if(rr.getDateOption() == 1) {
+// sql.append(" WHERE to_char("+ date_ColId + ", 'YYYY/MM') = '"+ dateStr +"')");
+// } else if (rr.getDateOption() == 2) {
+// sql.append(" WHERE to_char("+ date_ColId + ", 'YYYY') = '"+ dateStr +"')");
+// } else if (rr.getDateOption() == 3) {
+// sql.append(" WHERE to_char("+ date_ColId + ", 'YYYY/MM/DD') = '"+ dateStr +"')");
+// }
+// if(nvls(_orderBy).length()>0)
+// sql.append(" ORDER BY "+ _orderBy + " "+ (asc ? "ASC" : "DESC"));
+// else
+// sql.append(" ORDER BY rnum");
+// System.out.println("ZK RAPTOR RUN MONTHLY " + sql);
+// }
+//
+// debugLogger.error(" ************** just a test **************** ");
+// debugLogger.error(" SQL " + sql);
+// debugLogger.error(" ******************************************* ");
+//
+// DataSet ds = ConnectionUtils.getDataSet(sql.toString(), rr.getDBInfo());
+// DataSet ds1 = null;
+// //DataSet ds = executeQuery(sql.toString());
+// List reportCols = rr.getAllColumns();
+// Vector formatProcessors = new Vector(reportCols.size());
+//
+// String oldValue = "";
+// String value = "";
+// String groupByColValue = "";
+// int subTotalFlag = -1;
+// //String newValue = "";
+// for (int r = 0; r < ds.getRowCount(); r++) {
+// DataRow dr = new DataRow();
+// //rd.reportDataRows.addDataRow(dr);
+// //rd = raptorRunHandler.getReportData();
+// //RowHeaderCol rhc = new RowHeaderCol();
+// //reportRowHeaderCols.addRowHeaderCol(0, rhc);
+// //rhc.setColumnWidth("5%");
+// int formatCount = -1; //added for auxillary head check
+// String drillDownURL = "";
+//
+// int changedFlag = 0;
+// for (int c = 0; c < reportCols.size(); c++) {
+// if(reportCols.get(c)!=null) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// else formatCount++;
+// //
+// formatProcessors.add(formatCount,new FormatProcessor(
+// rr.getSemaphoreById(dct.getSemaphoreId()), dct.getColType(), dct
+// .getColFormat(), rr.getReportDefType().equals(
+// AppConstants.RD_SQL_BASED)));
+// //
+// if(!(dct.getColName().startsWith("[") && dct.getDisplayName() == null)) {
+// value = "";
+//
+// if(ds.getColumnIndex(dct.getColId())!= -1) {
+// value = ds.getString(r, dct.getColId());
+// if(dct.getGroupByPos()!=null && dct.getGroupByPos()>0) {
+// groupByColValue = ds.getString(r, dct.getColId());
+// if(oldValue.length()> 0 && !oldValue.equals(groupByColValue)) {
+// //newValue = value;
+// if(subTotalFlag > 0) {
+// changedFlag = -1;
+// oldValue = groupByColValue;
+// subTotalFlag = 0;
+// } else {
+// changedFlag = 1;
+// //oldValue = groupByColValue;
+// r--;
+// }
+// } else if (oldValue.length()<=0) {
+// oldValue = groupByColValue;
+// changedFlag = -1;
+// } else if (oldValue.equals(groupByColValue)) {
+// //oldValue = value;
+// changedFlag = 0;
+// }
+// }
+// }
+//
+// if(changedFlag > 0) {
+// StringBuffer subTotalSql = new StringBuffer(" select ");
+// StringBuffer whereClause = new StringBuffer("");
+// //get all colids
+// for (int d = 0; d < reportCols.size(); d++) {
+// if(reportCols.get(d)!=null) {
+// DataColumnType dct1 = (DataColumnType) reportCols.get(d);
+// if(dct1.getGroupByPos()!=null && dct1.getGroupByPos()>0){
+// subTotalSql.append(dct1.getColId() + " " );
+// whereClause.append(" where "+ dct1.getColId() + " = '" + oldValue + "' " + " group by "+ dct1.getColId() );
+// }
+// if(dct1.getDisplayTotal()!=null && dct1.getDisplayTotal().length() > 0) {
+// subTotalSql.append(", sum("+dct1.getColId()+")");
+// }
+// }
+// }
+//
+// subTotalSql.append(" from (");
+// subTotalSql.append(rr.getWholeSQL());
+// subTotalSql.append (")");
+// subTotalSql.append(whereClause);
+// ds1 = ConnectionUtils.getDataSet(subTotalSql.toString(),rr.getDbInfo());
+// dr = new DataRow();
+// DataValue dv = new DataValue();
+// int count = 0;
+// //dv.setColName("#");
+// for (int c1 = 0; c1 < reportCols.size(); c1++) {
+// dct = (DataColumnType) reportCols.get(c1);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// if ( dct != null && dct.isVisible()) {
+// count++;
+//
+// dv = new DataValue();
+// //if(count==1) {
+// if(dct.getGroupByPos()!=null && dct.getGroupByPos()>0) {
+// dr.addDataValue(dv);
+// if(AppUtils.nvl(dct.getSubTotalCustomText()).length()>0) {
+// dv.setDisplayValue(dct.getSubTotalCustomText());
+// } else {
+// dv.setDisplayValue("Sub Total");
+// }
+// dv.setColName(dct.getColName());
+// dv.setDisplayName(dct.getDisplayName());
+// dv.setColId(dct.getColId());
+// dv.setBold(true);
+// } else {
+// if(dct.getDisplayTotal()!=null && dct.getDisplayTotal().length() > 0) {
+// dr.addDataValue(dv);
+// String subtotalValue = "";
+// if (ds1 != null) {
+// subtotalValue = ds1.getString(0, "sum("+dct.getColId()+")");
+// dv.setDisplayValue(Utils.truncateTotalDecimals(subtotalValue));
+// } else {
+// dv.setDisplayValue("");
+// }
+// } else {
+// if(dv.isVisible())
+// dr.addDataValue(dv);
+// dv.setDisplayValue("");
+// }
+// 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"));
+// dv.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setBold(true);
+// }
+// } // dct check
+// } // for
+// //if(!topDown) {
+// //rowList.add(dr);
+// //}
+// //oldValue = value;
+// if(changedFlag == 1) changedFlag = 0;
+// subTotalFlag = 1;
+// } else {
+//
+// if(nvls(value).length()>0 && !nvls(value).equals("'")) {
+// DataValue dv = new DataValue();
+// dr.addDataValue(dv);
+// if(dct.getGroupByPos()!=null && dct.getGroupByPos()>0) {
+// if(changedFlag == 0) {
+// dv.setDisplayValue("");
+// } else {
+// dv.setDisplayValue(nvls(value));
+// }
+// } else {
+// dv.setDisplayValue(nvls(value));
+// }
+// dv.setColName(dct.getColName());
+// dv.setColId(dct.getColId());
+// if(dct.getColType().equals(AppConstants.CT_HYPERLINK)) {
+// dv.setHyperlinkURL(dct.getHyperlinkURL());
+// dv.setDisplayType(dct.getHyperlinkType());
+// if(dct.getHyperlinkType().equals("IMAGE"))
+// dv.setActionImg(dct.getActionImg());
+// }
+// dv.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// //dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+// if(dct.isVisible()) {
+//
+// dv.setVisible(true);
+// dv.setAlignment(dct.getDisplayAlignment());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setDisplayName(dct.getDisplayName());
+// dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+// //Add Drilldown URL to dv
+// if (nvls(dct.getDrillDownURL()).length() > 0) {
+//
+// if(dv.getDisplayValue().length() > 0) {
+// dv.setDrillDownURL(raptorRunHandler.parseDrillDownURL(r, /* c, */ds, dct,null));
+// 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(formatCount)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, false);
+// */
+//
+// //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+//
+// if(topDown) {
+// if(!dv.getColId().endsWith("_calc") && dv.isVisible())
+// rowList.add(dv);
+// for (int cInner = 0; cInner < reportCols.size(); cInner++) {
+// if(reportCols.get(cInner)!=null) {
+// DataColumnType dctInner = (DataColumnType) reportCols.get(cInner);
+// if((dv.getColId()+"_calc").equals(dctInner.getColId())) {
+// /* DataValue dvInner = new DataValue();
+// dvInner.setDisplayValue(ds.getString(r, c));
+// dvInner.setColName(dct.getColName());
+// dvInner.setColId(dct.getColId());
+// rowList.add(dvInner);
+// */ dv.setDisplayCalculatedValue(ds.getString(r, dctInner.getColId()));
+// }
+// }
+// }
+// }
+// } else { //dv value check
+// DataValue dv = new DataValue();
+// dr.addDataValue(dv);
+// dv.setDisplayValue(nvls(value));
+// dv.setColName(dct.getColName());
+// dv.setColId(dct.getColId());
+// if(dct.isVisible())
+// dv.setVisible(true);
+// else
+// dv.setVisible(false);
+// /* if(dr.getFormatId()!=null)
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, false);
+// */
+//
+// if(topDown) {
+// if(!dv.getColId().endsWith("_calc") && dv.isVisible())
+// rowList.add(dv);
+// for (int cInner = 0; cInner < reportCols.size(); cInner++) {
+// if(reportCols.get(cInner)!=null) {
+// DataColumnType dctInner = (DataColumnType) reportCols.get(cInner);
+// if((dv.getColId()+"_calc").equals(dctInner.getColId())) {
+// dv.setDisplayCalculatedValue(ds.getString(r, cInner));
+// }
+// }
+// }
+// }
+// }
+// } //changedFlag > 1
+// }
+// } // if reportCols
+//
+//
+// } // for
+//
+// //format
+//
+// for (int c = 0; c < reportCols.size(); c++) {
+// if(reportCols.get(c)!=null) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// //Modified since ds is null.
+// DataValue dv = new DataValue();
+// dv = dr.getDataValue(c);
+// if(dr.getFormatId()!=null)
+// ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
+// }
+// }
+// //add dr to rowList after all column is done.
+// if(!topDown) {
+// rowList.add(dr);
+// }
+// } // for
+//
+///* //rd.addRowNumbers(pageNo, getPageSize());
+// rd = raptorRunHandler.getReportData();
+// RowHeaderCol rhc = new RowHeaderCol();
+// rd.reportRowHeaderCols.addRowHeaderCol(0, rhc);
+// rhc.setColumnWidth("5%");
+// rhc.add(new RowHeader(""#, "15"));
+//*/
+//
+// //String totalSql = raptorRunHandler.getTotalSql();
+//
+// if(subTotalFlag >=0) {
+// StringBuffer subTotalSql = new StringBuffer(" select ");
+// StringBuffer whereClause = new StringBuffer("");
+// //get all colids
+// for (int d = 0; d < reportCols.size(); d++) {
+// if(reportCols.get(d)!=null) {
+// DataColumnType dct1 = (DataColumnType) reportCols.get(d);
+// if(dct1.getGroupByPos()!=null && dct1.getGroupByPos()>0){
+// subTotalSql.append(dct1.getColId() + " " );
+// whereClause.append(" where "+ dct1.getColId() + " = '" + oldValue + "' " + " group by "+ dct1.getColId() );
+// }
+// if(dct1.getDisplayTotal()!=null && dct1.getDisplayTotal().length() > 0) {
+// subTotalSql.append(", sum("+dct1.getColId()+")");
+// }
+// }
+// }
+//
+// subTotalSql.append(" from (");
+// subTotalSql.append(rr.getWholeSQL());
+// subTotalSql.append (")");
+// subTotalSql.append(whereClause);
+// ds1 = ConnectionUtils.getDataSet(subTotalSql.toString(),rr.getDbInfo());
+// DataRow dr = new DataRow();
+// DataValue dv = new DataValue();
+// int count = 0;
+// //dv.setColName("#");
+// DataColumnType dct = null;
+// for (int c1 = 0; c1 < reportCols.size(); c1++) {
+// dct = (DataColumnType) reportCols.get(c1);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// if ( dct != null && dct.isVisible()) {
+// count++;
+//
+// dv = new DataValue();
+// //if(count==1) {
+// if(dct.getGroupByPos()!=null && dct.getGroupByPos()>0) {
+// dr.addDataValue(dv);
+// if(AppUtils.nvl(dct.getSubTotalCustomText()).length()>0) {
+// dv.setDisplayValue(dct.getSubTotalCustomText());
+// } else {
+// dv.setDisplayValue("Sub Total");
+// }
+// dv.setColName(dct.getColName());
+// dv.setDisplayName(dct.getDisplayName());
+// dv.setColId(dct.getColId());
+// dv.setBold(true);
+// } else {
+// if(dct.getDisplayTotal()!=null && dct.getDisplayTotal().length() > 0) {
+// dr.addDataValue(dv);
+// String subtotalValue = "";
+// if (ds1 != null) {
+// subtotalValue = ds1.getString(0, "sum("+dct.getColId()+")");
+// dv.setDisplayValue(Utils.truncateTotalDecimals(subtotalValue));
+// } else {
+// dv.setDisplayValue("");
+// }
+// } else {
+// if(dv.isVisible())
+// dr.addDataValue(dv);
+// dv.setDisplayValue("");
+// }
+// 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"));
+// dv.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setBold(true);
+// }
+// } // dct check
+// } // for
+// if(!topDown) {
+// rowList.add(dr);
+// }
+// }
+// if(nvls(totalSql).length()>0) {
+// ds = ConnectionUtils.getDataSet(totalSql,rr.getDbInfo());
+// DataRow dr = new DataRow();
+// DataValue dv = new DataValue();
+// int count = 0;
+// //dv.setColName("#");
+// for (int c = 0; c < reportCols.size(); c++) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// if ( dct != null && dct.isVisible()) {
+// count++;
+//
+// dv = new DataValue();
+// if(count==1) {
+// dr.addDataValue(dv);
+// dv.setDisplayValue("Total (for all Records)");
+// dv.setColName(dct.getColName());
+// dv.setDisplayName(dct.getDisplayName());
+// dv.setColId(dct.getColId());
+// dv.setBold(true);
+// } else {
+// if(dv.isVisible())
+// dr.addDataValue(dv);
+//
+// String totalValue = "";
+// if (ds != null)
+// totalValue = ds.getString(0, "TOTAL_"+dct.getColId());
+// if (nvls(dct.getDisplayTotal()).length() > 0
+// && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
+// totalValue = nvls(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.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setBold(true);
+// }
+// } // dct check
+// } // for
+// if(!topDown) {
+// rowList.add(dr);
+// }
+//
+// }
+//
+//
+//
+// } catch (ReportSQLException ex) {
+// ex.printStackTrace();
+// }catch(Exception ex1) {
+// ex1.printStackTrace();
+// } finally {
+// try {
+// clearConnection(con);
+// } catch (ReportSQLException ex2) {
+// ex2.printStackTrace();
+// }
+// }
+// return rowList;
+// }
+
+
+ //For ZK Support
+
+// public static List executeQuery(ReportRuntime rr, String filterClause, int itemStartNumber, int itemEndNumber, boolean topDown, String _orderBy, boolean asc, DashboardReportRunHandler dashboardReportRunHandler) {
+// Connection con = null;
+// List rowList = new ArrayList();
+// String totalSql = rr.getTotalSql();
+// boolean totalAvailable = false;
+// if(nvls(totalSql).length()>0) totalAvailable = true;
+// if(totalAvailable) {
+// itemStartNumber--;
+// itemEndNumber--;
+// }
+// try {
+// con = ConnectionUtils.getConnection(rr.getDBInfo());
+// //if client side sorting is needed we could disable the comment line below for quicker development
+// // until we do it in "client" end.
+// //StringBuffer sql = new StringBuffer(rr.getReportSQLWithRowNum());
+// StringBuffer sql = new StringBuffer("");
+// if (!rr.getReportType().equals(AppConstants.RT_HIVE)) {
+// sql = new StringBuffer(rr.getReportSQLWithRowNum(_orderBy, asc));
+// //if( /*itemEndNumber > 1 &&*/ itemEndNumber > itemStartNumber)
+//
+// if(topDown) {
+// sql.append(") "+ (Globals.isPostgreSQL()?" AS ":"") +" y");
+// if(Globals.getDBType().equals("postgresql"))
+// sql.append(" WHERE RNUM < " + (itemEndNumber));
+// else
+// sql.append(" WHERE ROWNUM < " + (itemEndNumber));
+// }
+// else {
+// //sql.append(" WHERE ROWNUM <= " + (itemEndNumber));
+// String a_sql = Globals.getReportSqlOnlySecondPartA();
+// a_sql = a_sql.replace("[endRow]", String.valueOf(itemEndNumber));
+// String b_sql = Globals.getReportSqlOnlySecondPartBNoOrderBy();
+// b_sql = b_sql.replace("[startRow]", String.valueOf(itemStartNumber));
+// sql.append(") "+ (Globals.isPostgreSQL()?" AS ":"") +" a ");
+// sql.append(a_sql);
+// sql.append(b_sql);
+// }
+//
+// // sql.append(" ) y WHERE rnum >= " + (topDown?itemStartNumber:(itemStartNumber+1)));
+// if(nvls(_orderBy).length()>0)
+// sql.append(" ORDER BY "+ _orderBy + " "+ (asc ? "ASC" : "DESC"));
+// else
+// sql.append(" ORDER BY rnum");
+// // sql = String.format(sql, _orderBy, asc ? "ASC" : "DESC");
+//
+// /*//sql.append(" WHERE ROWNUM <= " + (topDown?itemEndNumber:(itemEndNumber)));
+// sql.append(" ) y WHERE rnum >= " + (topDown?itemStartNumber:(itemStartNumber+1)));
+// if(nvls(_orderBy).length()>0)
+// sql.append(" ORDER BY "+ _orderBy + " "+ (asc ? "ASC" : "DESC"));
+// else
+// sql.append(" ORDER BY rnum");
+// // sql = String.format(sql, _orderBy, asc ? "ASC" : "DESC");*/
+// itemStartNumber = 0;
+// } else {
+// sql.append(rr.getWholeSQL());
+// int count = rr.getReportDataSize();
+// System.out.println("Count "+ count+ " " + itemEndNumber);
+// if(count < itemEndNumber)
+// sql.append(" " + "limit "+ count);
+// else
+// sql.append(" " + "limit "+ itemEndNumber);
+// }
+// System.out.println("ZK RAPTOR RUN " + sql);
+// DataSet ds = null;
+// if (!rr.getReportType().equals(AppConstants.RT_HIVE)) {
+// ds = executeQuery(con, sql.toString());
+// } else {
+// String dbInfo = rr.getDBInfo();
+// ds = ConnectionUtils.getDataSet(sql.toString(), dbInfo);
+// }
+// List reportCols = rr.getAllColumns();
+// Vector formatProcessors = new Vector(reportCols.size());
+//
+// for (int r = itemStartNumber; r < ds.getRowCount(); r++) {
+// DataRow dr = new DataRow();
+// //rd.reportDataRows.addDataRow(dr);
+//
+// int formatCount = -1; //added for auxillary head check
+// for (int c = 0; c < reportCols.size(); c++) {
+// if(reportCols.get(c)!=null) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// else formatCount++;
+// //
+// formatProcessors.add(formatCount,new FormatProcessor(
+// rr.getSemaphoreById(dct.getSemaphoreId()), dct.getColType(), dct
+// .getColFormat(), rr.getReportDefType().equals(
+// AppConstants.RD_SQL_BASED)));
+// //
+// if(!(dct.getColName().startsWith("[") && dct.getDisplayName() == null)) {
+// String value = "";
+// if(ds.getColumnIndex(dct.getColId())!= -1) {
+// value = ds.getString(r, dct.getColId());
+// }
+// if(nvls(value).length()>0 && !nvls(value).equals("'")) {
+// DataValue dv = new DataValue();
+// dr.addDataValue(dv);
+// dv.setDisplayValue(nvls(value));
+// dv.setColName(dct.getColName());
+// dv.setColId(dct.getColId());
+// if(dct.getColType().equals(AppConstants.CT_HYPERLINK)) {
+// dv.setHyperlinkURL(dct.getHyperlinkURL());
+// dv.setDisplayType(dct.getHyperlinkType());
+// if(dct.getHyperlinkType().equals("IMAGE"))
+// dv.setActionImg(dct.getActionImg());
+// }
+// dv.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// //dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+// if(dct.isVisible()) {
+//
+// dv.setVisible(true);
+// dv.setAlignment(dct.getDisplayAlignment());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setDisplayName(dct.getDisplayName());
+//
+// //Add Drilldown URL to dv
+// if (nvls(dct.getDrillDownURL()).length() > 0) {
+//
+// if(dv.getDisplayValue().length() > 0) {
+// dv.setDrillDownURL(dashboardReportRunHandler.parseDrillDownURL(r, /* c, */ds, dct,null,rr));
+// 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(formatCount)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, false);*/
+//
+// //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+//
+// if(topDown) {
+// if(!dv.getColId().endsWith("_calc") && dv.isVisible())
+// rowList.add(dv);
+// for (int cInner = 0; cInner < reportCols.size(); cInner++) {
+// if(reportCols.get(cInner)!=null) {
+// DataColumnType dctInner = (DataColumnType) reportCols.get(cInner);
+// if((dv.getColId()+"_calc").equals(dctInner.getColId())) {
+// /* DataValue dvInner = new DataValue();
+// dvInner.setDisplayValue(ds.getString(r, c));
+// dvInner.setColName(dct.getColName());
+// dvInner.setColId(dct.getColId());
+// rowList.add(dvInner);
+// */ dv.setDisplayCalculatedValue(ds.getString(r, dctInner.getColId()));
+// }
+// }
+// }
+// }
+// } else { //dv value check
+// DataValue dv = new DataValue();
+// dr.addDataValue(dv);
+// dv.setDisplayValue(nvls(value));
+// dv.setColName(dct.getColName());
+// dv.setColId(dct.getColId());
+// if(dct.isVisible())
+// dv.setVisible(true);
+// else
+// dv.setVisible(false);
+// /*if(dr.getFormatId()!=null)
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, false);*/
+//
+// if(topDown) {
+// if(!dv.getColId().endsWith("_calc") && dv.isVisible())
+// rowList.add(dv);
+// for (int cInner = 0; cInner < reportCols.size(); cInner++) {
+// if(reportCols.get(cInner)!=null) {
+// DataColumnType dctInner = (DataColumnType) reportCols.get(cInner);
+// if((dv.getColId()+"_calc").equals(dctInner.getColId())) {
+// dv.setDisplayCalculatedValue(ds.getString(r, dctInner.getColId()));
+// }
+// }
+// }
+// }
+// }
+// }
+// } // if reportCols
+//
+//
+// } // for
+// for (int c = 0; c < reportCols.size(); c++) {
+// if(reportCols.get(c)!=null) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// //Modified since ds is null.
+// DataValue dv = new DataValue();
+// dv = dr.getDataValue(c);
+// if(dr.getFormatId()!=null)
+// ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(c)).setHtmlFormatters(dv, dr, false);
+// }
+// }
+// //add dr to rowList after all column is done.
+// if(!topDown) {
+// rowList.add(dr);
+// }
+// } // for
+//
+// //String totalSql = raptorRunHandler.getTotalSql();
+// if(nvls(totalSql).length()>0) {
+// ds = ConnectionUtils.getDataSet(totalSql,rr.getDbInfo());
+// DataRow dr = new DataRow();
+// DataValue dv = new DataValue();
+//
+// //dv.setColName("#");
+// int count = 0;
+// for (int c = 0; c < reportCols.size(); c++) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// if ( dct != null && dct.isVisible()) {
+// count++;
+//
+// dv = new DataValue();
+// dv.setVisible(dct.isVisible());
+//
+// if(count==1) {
+// dr.addDataValue(dv);
+// dv.setDisplayValue("Total (for all Records)");
+// dv.setColName(dct.getColName());
+// dv.setDisplayName(dct.getDisplayName());
+// dv.setColId(dct.getColId());
+// dv.setBold(true);
+// } else {
+// if(dv.isVisible())
+// dr.addDataValue(dv);
+//
+// String totalValue = "";
+// if (ds != null)
+// totalValue = ds.getString(0, "TOTAL_"+dct.getColId());
+// if (nvls(dct.getDisplayTotal()).length() > 0
+// && (!dct.getDisplayTotal().equals(AppConstants.TOTAL_SUM_ID)))
+// totalValue = nvls(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.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setBold(true) ;
+// }
+// } // dct check
+// } // for
+// if(!topDown) {
+// rowList.add(dr);
+// }
+//
+// }
+//
+//
+// } catch (ReportSQLException ex) {
+// ex.printStackTrace();
+// }catch(Exception ex1) {
+// ex1.printStackTrace();
+// } finally {
+// try {
+// clearConnection(con);
+// } catch (ReportSQLException ex2) {
+// ex2.printStackTrace();
+// }
+// }
+// return rowList;
+// }
+
+ public String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public static String nvls(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public static String nvl(String s, String sDefault) {
+ return nvls(s).equals("") ? sDefault : s;
+ }
+
+
+
+ public static DataSource getDataSource() {
+ return dataSource;
+ }
+
+ @Autowired
+ public void setDataSource(DataSource dataSource) {
+ dataSource = dataSource;
+ }
+
+
+// public static List executeQuery(ReportRuntime rr, String filterClause, int itemStartNumber, int itemEndNumber, boolean topDown, String _orderBy, boolean asc, RaptorHiveRunHandler raptorHiveRunHandler) {
+// Connection con = null;
+// List rowList = new ArrayList();
+// ReportData rd = null;
+//
+// try {
+//
+//
+//
+// con = ConnectionUtils.getConnection(rr.getDBInfo());
+// //if client side sorting is needed we could disable the comment line below for quicker development
+// // until we do it in "client" end.
+// //StringBuffer sql = new StringBuffer(rr.getReportSQLWithRowNum());
+// StringBuffer sql = new StringBuffer("");
+// sql.append(rr.getWholeSQL());
+// int count = rr.getReportDataSize();
+// System.out.println("Count "+ count+ " " + itemEndNumber);
+// if(count < itemEndNumber)
+// sql.append(" " + "limit "+ count);
+// else
+// sql.append(" " + "limit "+ itemEndNumber);
+// //sql = new StringBuffer(raptorHiveRunHandler.getReportSQLWithRowNum(_orderBy, asc));
+// //if( /*itemEndNumber > 1 &&*/ itemEndNumber > itemStartNumber)
+// //sql.append(" WHERE ROWNUM <= " + (topDown?itemEndNumber:(itemEndNumber+1)));
+// //sql.append(" ) y WHERE rnum >= " + (topDown?itemStartNumber:(itemStartNumber+1)));
+// //if(nvls(_orderBy).length()>0)
+// //sql.append(" ORDER BY "+ _orderBy + " "+ (asc ? "ASC" : "DESC"));
+// //else
+// //sql.append(" ORDER BY rnum");
+// // sql = String.format(sql, _orderBy, asc ? "ASC" : "DESC");
+//
+// System.out.println("ZK RAPTOR RUN " + sql);
+//
+// String dbInfo = rr.getDBInfo();
+// DataSet ds = null;
+// ds = ConnectionUtils.getDataSet(sql.toString(), dbInfo);
+// List reportCols = rr.getAllColumns();
+// Vector formatProcessors = new Vector(reportCols.size());
+//
+// for (int r = itemStartNumber; r < ds.getRowCount(); r++) {
+// DataRow dr = new DataRow();
+// //rd.reportDataRows.addDataRow(dr);
+// //rd = raptorRunHandler.getReportData();
+// //RowHeaderCol rhc = new RowHeaderCol();
+// //reportRowHeaderCols.addRowHeaderCol(0, rhc);
+// //rhc.setColumnWidth("5%");
+//
+// int formatCount = -1; //added for auxillary head check
+// for (int c = 0; c < reportCols.size(); c++) {
+// if(reportCols.get(c)!=null) {
+// DataColumnType dct = (DataColumnType) reportCols.get(c);
+// if(dct.getLevel()!=null && dct.getLevel() > 0) continue;
+// else formatCount++;
+// //
+// formatProcessors.add(formatCount,new FormatProcessor(
+// rr.getSemaphoreById(dct.getSemaphoreId()), dct.getColType(), dct
+// .getColFormat(), rr.getReportDefType().equals(
+// AppConstants.RD_SQL_BASED)));
+// //
+// if(!(dct.getColName().startsWith("[") && dct.getDisplayName() == null)) {
+// String value = "";
+// if(ds.getColumnIndex(dct.getColId())!= -1) {
+// value = ds.getString(r, dct.getColId());
+// }
+// if(nvls(value).length()>0 && !nvls(value).equals("'")) {
+// DataValue dv = new DataValue();
+// dr.addDataValue(dv);
+// dv.setDisplayValue(nvls(value));
+// dv.setColName(dct.getColName());
+// dv.setColId(dct.getColId());
+// if(dct.getColType().equals(AppConstants.CT_HYPERLINK)) {
+// dv.setHyperlinkURL(dct.getHyperlinkURL());
+// dv.setDisplayType(dct.getHyperlinkType());
+// if(dct.getHyperlinkType().equals("IMAGE"))
+// dv.setActionImg(dct.getActionImg());
+// }
+// dv.setIndentation(new Integer((dct.getIndentation()==null)?new Integer("0"):dct.getIndentation()).toString());
+// //dv.setNowrap(nvl(dct.getNowrap(),"null").equals("false")?"null":nvl(dct.getNowrap(),"null"));
+// if(dct.isVisible()) {
+//
+// dv.setVisible(true);
+// dv.setAlignment(dct.getDisplayAlignment());
+// dv.setDisplayTotal(dct.getDisplayTotal());
+// dv.setDisplayName(dct.getDisplayName());
+//
+// //Add Drilldown URL to dv
+// if (nvls(dct.getDrillDownURL()).length() > 0) {
+//
+// if(dv.getDisplayValue().length() > 0) {
+// dv.setDrillDownURL(raptorHiveRunHandler.parseDrillDownURL(r, /* c, */ds, dct,null));
+// 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(formatCount)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, false);
+//
+// //System.out.println("in Linear report After" + dr.getFormatId() + dr.getBgColorHtml() + dv.getDisplayValue());
+//
+// if(topDown) {
+// if(!dv.getColId().endsWith("_calc") && dv.isVisible())
+// rowList.add(dv);
+// for (int cInner = 0; cInner < reportCols.size(); cInner++) {
+// if(reportCols.get(cInner)!=null) {
+// DataColumnType dctInner = (DataColumnType) reportCols.get(cInner);
+// if((dv.getColId()+"_calc").equals(dctInner.getColId())) {
+// /* DataValue dvInner = new DataValue();
+// dvInner.setDisplayValue(ds.getString(r, c));
+// dvInner.setColName(dct.getColName());
+// dvInner.setColId(dct.getColId());
+// rowList.add(dvInner);
+// */ dv.setDisplayCalculatedValue(ds.getString(r, dctInner.getColId()));
+// }
+// }
+// }
+// }
+// } else { //dv value check
+// DataValue dv = new DataValue();
+// dr.addDataValue(dv);
+// dv.setDisplayValue(nvls(value));
+// dv.setColName(dct.getColName());
+// dv.setColId(dct.getColId());
+// if(dct.isVisible())
+// dv.setVisible(true);
+// else
+// dv.setVisible(false);
+// if(dr.getFormatId()!=null)
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, true);
+// else
+// ((FormatProcessor) formatProcessors.get(formatCount)).setHtmlFormatters(dv, dr, false);
+//
+// if(topDown) {
+// if(!dv.getColId().endsWith("_calc") && dv.isVisible())
+// rowList.add(dv);
+// for (int cInner = 0; cInner < reportCols.size(); cInner++) {
+// if(reportCols.get(cInner)!=null) {
+// DataColumnType dctInner = (DataColumnType) reportCols.get(cInner);
+// if((dv.getColId()+"_calc").equals(dctInner.getColId())) {
+// dv.setDisplayCalculatedValue(ds.getString(r, cInner));
+// }
+// }
+// }
+// }
+// }
+// }
+// } // if reportCols
+//
+//
+// } // for
+// //add dr to rowList after all column is done.
+// if(!topDown) {
+// rowList.add(dr);
+// }
+// } // for
+// } catch (ReportSQLException ex) {
+// ex.printStackTrace();
+// }catch(Exception ex1) {
+// ex1.printStackTrace();
+// } finally {
+// try {
+// clearConnection(con);
+// } catch (ReportSQLException ex2) {
+// ex2.printStackTrace();
+// }
+// }
+// return rowList;
+// }
+
+
+} // DbUtils
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ExecuteQuery.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ExecuteQuery.java
new file mode 100644
index 00000000..8d769d4f
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/ExecuteQuery.java
@@ -0,0 +1,60 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+import java.util.concurrent.Callable;
+
+public class ExecuteQuery implements Callable<ResultSet>{
+
+ private Statement stmt;
+ private String sql = "";
+ private int maxRowLimit;
+ private ResultSet resultSet;
+
+ public ResultSet getResultSet() {
+ return resultSet;
+ }
+ public void setResultSet(ResultSet resultSet) {
+ this.resultSet = resultSet;
+ }
+
+ public ExecuteQuery(Statement stmt, String sql, int maxRowLimit) {
+ super();
+ this.stmt = stmt;
+ this.sql = sql;
+ this.maxRowLimit = maxRowLimit;
+ }
+
+ public ResultSet call() throws SQLException {
+ try {
+ System.out.println("Query Started" + new java.util.Date());
+ resultSet = stmt.executeQuery(sql);
+ System.out.println("Query End" + new java.util.Date());
+ } catch (SQLException ex) {
+ System.out.println("Query Exception" + new java.util.Date());
+ ex.printStackTrace();
+ throw ex;
+ }
+ return resultSet;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/Globals.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/Globals.java
new file mode 100644
index 00000000..f02600eb
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/Globals.java
@@ -0,0 +1,2282 @@
+/*-
+ * ================================================================================
+ * 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
+ * ===========================================================================================
+ *
+ * -------------------------------------------------------------------------------------------
+ * Globals.java - This class is used to read properties file and call the common methods
+ * existing among all the frameworks.
+
+ * -------------------------------------------------------------------------------------------
+ *
+ *
+ * Changes
+ * -------
+ * 31-Jul-2009 : Version 8.4 (Sundar); <UL><LI> getRequestparametersMap method iterates form field collections. </LI>
+ * </UL>
+ * 27-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Added property "admin_role_equiv_to_super_role" to specify Admin User equivalent to Super User.</LI>
+ * </UL>
+ * 14-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Added property to showing/hiding params displayed in dashboard reports.</LI>
+ * </UL>
+ *
+ */
+package org.openecomp.portalsdk.analytics.system;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Hashtable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.config.ConfigLoader;
+import org.openecomp.portalsdk.analytics.controller.ActionMapping;
+import org.openecomp.portalsdk.analytics.model.runtime.FormField;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportFormFields;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.ExcelColorDef;
+import org.openecomp.portalsdk.analytics.util.Scheduler;
+import org.openecomp.portalsdk.analytics.util.Utils;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class Globals extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(Globals.class);
+
+
+ private static boolean systemInitialized = false;
+
+ private static ActionMapping raptorActionMapping = null;
+
+ private static Scheduler scheduler = null;
+
+ // System type constants
+ public final static String ST_FUSION = "fusion";
+
+ public final static String ST_GENERIC = "generic";
+
+ public final static String ST_PRISMS = "prisms";
+
+ private static String systemType = ST_PRISMS; // default
+
+ private static IAppUtils appUtils = null;
+
+ private static IDbUtils dbUtils = null;
+
+ private static RDbUtils rdbUtils = null;
+
+ private static int debugLevel = 5;
+
+ private static int downloadLimit = 65000; // max number rows for download
+ // csv file
+
+ private static int defaultPageSize = 50;
+
+ private static int formFieldsListSize = 50;
+
+ private static int schedulerInterval = 0;
+
+ private static String systemName = "MSA Databank";
+
+ private static String baseTitle = "ANALYSIS";
+
+ private static String sheet_name = "Raptor Reports";
+
+ private static boolean allowSQLBasedReports = true; // whether to allow
+ // SQL-based report
+ // definition (security
+ // risk); super users
+ // are always allowed to
+ // create SQL-based
+ // reports
+
+ private static boolean showDisclaimer = true; // whether to include
+ // disclaimer page at the
+ // bottom of each screen
+
+ private static boolean displayFormBeforeRun = true; // whether to display
+ // the form page as a
+ // separate page before
+ // running the report
+
+ private static boolean includeFormWithData = true; // whether to include
+ // the form page on the
+ // report data page
+
+ private static boolean cacheChartData = true; // whether to cache chart
+ // data in the session =>
+ // faster re-display if the
+ // data volume does not get
+ // too large
+
+ private static boolean cacheCurPageData = true; // whether to cache report
+ // data for the currently
+ // displayed page in the
+ // session => faster
+ // re-display if the data
+ // volume does not get too
+ // large
+
+ private static boolean deleteOnlyByOwner = true; // whether to permit
+ // report deletion only
+ // by report owner or by
+ // everyone with "write"
+ // access
+
+ private static boolean enableReportLog = true; // whether to log each
+ // report execution and
+ // update time and user ID
+
+ private static boolean cacheUserRoles = true; // whether to cache user
+ // roles info in memory
+ // (saves many DB reads, but
+ // does not account for
+ // roles assigned after the
+ // cache was loaded)
+
+ private static boolean monthFormatUseLastDay = true; // whether to
+ // convert month
+ // formats (e.g.
+ // MM/YYYY) to the
+ // last day of the
+ // month (true) or
+ // first day (false)
+ // - like 12/2003 is
+ // converted to
+ // either 12/31/2003
+ // or 12/01/2003
+
+ private static boolean printTitleInDownload = false; // whether to print
+ // the report title
+ // in the download
+ // files
+
+ private static boolean showDescrAtRuntime = false; // whether to show
+ // report description
+ // when the report is
+ // run and in the quick
+ // links
+
+ // private static boolean skipChartLabelsToFit = false; // whether to skip
+ // labels on the Line chart axis when they overlap
+ private static boolean showNonstandardCharts = false; // whether to show
+ // chart types that
+ // are purpose
+ // and/or data
+ // specific
+
+ private static boolean allowRuntimeChartSel = true; // whether to allow the
+ // user to change the
+ // chart type at runtime
+
+ private static boolean displayChartTitle = false; // whether to display
+ // the report title as
+ // chart title as well
+
+ private static boolean mergeCrosstabRowHeadings = true; // whether to
+ // merge/blank
+ // multi-level row
+ // headings in
+ // cross-tab report
+
+ private static boolean displayChartByDefault = true; // whether to
+ // display chart
+ // when displaying
+ // the report at
+ // first or just a
+ // "Show Chart"
+ // button
+
+ private static boolean printParamsInDownload = false; // whether to print
+ // the form field
+ // values in the
+ // download files
+
+ // private static boolean chartLinesAlwaysSolid = true; // whether
+ // multi-lines chart uses solid line for all series or dashed/dotted/etc for
+ // each
+ // private static boolean chartLinesAlwaysSmooth = true; // whether line
+ // charts display smooth lines or with marked points on them for each value
+ private static int maxDecimalsOnTotals = 2; // Maximum number of decimals
+ // displayed in totals; decimal
+ // digits beyond that number
+ // will be truncated; if
+ // negative => display all
+ // decimal digits
+
+ private static int defaultChartWidth = 700;
+
+ private static int defaultChartHeight = 420;
+
+ private static int skipChartLabelsLimit = 30;
+
+ private static boolean canCopyOnReadOnly = true; // whether to users with
+ // read-only rights for
+ // a report can copy it
+
+ // Currently not loaded from a property file
+ private static boolean restrictTablesByRole = true; // whether to restrict
+ // DB tables
+ // accessibility by user
+ // role; defaults to
+ // false if table
+ // CR_TABLE_ROLE is
+ // empty, otherwise true
+
+ private static String javaTimeFormat = "MM/dd/yyyy h:m:s a";
+
+ private static String oracleTimeFormat = "%m/%d/%Y %h:%i:%s %p"; // must
+ // correspond
+ // to
+ // the
+ // java
+ // format
+ // modifier
+
+ private static String raptorVersion = "10.5.1";
+
+ private static int flatFileLowerLimit = 0;
+
+ private static int flatFileUpperLimit = 0;
+
+ private static String shellScriptDir = "";
+
+ private static String queryFolder = "";
+
+ private static String requestParams = "";
+
+ private static String sessionParams = "";
+
+ private static boolean displayAllUsers = true;
+
+ private static boolean user_col_def = true;
+
+ private static boolean printFooterInDownload = true;
+
+ private static String footerFirstLine = "";
+
+ private static String footerSecondLine = "";
+
+ private static boolean reportsInPoPUpWindow = false;
+
+ private static boolean poPUpInNewWindow = false;
+
+ private static boolean passRequestParamInDrilldown = false;
+
+ private static Properties raptorPdfProperties;
+
+ private static Properties raptorProperties;
+
+ private static Properties sqlProperty;
+
+ private static boolean showPDFDownloadIcon = false;
+
+
+
+ private Globals() {
+ }
+
+ public static synchronized void initializeSystem(ServletContext servletContext) {
+ if (systemInitialized)
+ return;
+ AppConstants.initializeAppConstants();
+ ExcelColorDef.initializeExcelColorDef();
+
+ //DB Agnostic Addition
+ try{
+ Properties sqlProperty = ConfigLoader.getProperties(servletContext, ConfigLoader.SQL_PROPERTIES);
+ Globals.sqlProperty = sqlProperty;
+ }
+
+ catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ Properties raptorProperties = ConfigLoader.getProperties(servletContext,
+ ConfigLoader.RAPTOR_PROPERTIES);
+ initializeRaptorProperties(raptorProperties);
+
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] Globals: Unable to load properties ["
+ + ConfigLoader.RAPTOR_PROPERTIES + "]. Exception: " + e.getMessage()));
+ // throw new RuntimeException(e.getMessage());
+ }
+
+ systemInitialized = true;
+
+ try {
+ appUtils = (IAppUtils) Class.forName(
+ "org.openecomp.portalsdk.analytics.system." + systemType.toLowerCase() + ".AppUtils")
+ .newInstance();
+ appUtils.initializeAppUtils(servletContext);
+
+ dbUtils = (IDbUtils) Class.forName(
+ "org.openecomp.portalsdk.analytics.system." + systemType.toLowerCase() + ".DbUtils")
+ .newInstance();
+ dbUtils.initializeDbUtils(servletContext);
+
+ if(!Globals.getSystemType().equals(Globals.ST_GENERIC)) {
+ rdbUtils = (RDbUtils) Class.forName(
+ "org.openecomp.portalsdk.analytics.system." + systemType.toLowerCase() + ".RemoteDbUtils")
+ .newInstance();
+ rdbUtils.initializeDbUtils(servletContext);
+ }
+ } catch (Exception e) {
+ String eMsg = "[SYSTEM ERROR] Globals: Unable to instantiate system classes. Exception: "
+ + e.getMessage();
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] " + eMsg));
+ systemInitialized = false;
+ throw new RuntimeException(eMsg);
+ }
+
+ try {
+ raptorActionMapping = ConfigLoader.loadRaptorActionMapping(servletContext);
+ } catch (Exception e) {
+ String eMsg = "[SYSTEM ERROR] Globals: Unable to load Raptor action mapping. Exception: "
+ + e.getMessage();
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] " + eMsg));
+ systemInitialized = false;
+ throw new RuntimeException(eMsg);
+ } // catch
+
+ /*try {
+ //DataSet ds = DbUtils
+ // .executeQuery("SELECT 1 FROM dual WHERE EXISTS (SELECT 1 FROM cr_table_role)");
+
+ String p_sql = Globals.getInitializeRoles();
+ DataSet ds = DbUtils.executeQuery(p_sql);
+
+ restrictTablesByRole = (ds.getRowCount() > 0);
+ } catch (Exception e) {
+ String eMsg = "[SYSTEM ERROR] Globals: Unable to load Raptor version. Exception: "
+ + e.getMessage();
+ debugLogger.error("[EXCEPTION ENCOUNTERED IN RAPTOR] " + eMsg, e);
+ } // catch
+ */
+ /*try {
+ //DataSet ds = DbUtils.executeQuery("SELECT cr_raptor.get_version FROM dual");
+
+ //String n_sql = Globals.getInitializeVersion();
+ //DataSet ds = DbUtils.executeQuery(n_sql);
+ //raptorVersion = Globals.get
+ // if(ds.getRowCount()>0)
+ // raptorVersion = " v"+ds.getString(0, 0);
+ } catch (Exception e) {
+ String eMsg = "[SYSTEM ERROR] Globals: Unable to load Raptor version. Exception: "
+ + e.getMessage();
+ debugLogger.error("[EXCEPTION ENCOUNTERED IN RAPTOR] " + eMsg, e);
+ } // catch*/
+
+
+ //initiate pdf global config
+ try {
+ raptorPdfProperties = ConfigLoader.getProperties(servletContext, ConfigLoader.RAPTOR_PDF_PROPERTIES);
+ }
+ catch (Exception e) {
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] Globals: Unable to load properties ["
+ + ConfigLoader.RAPTOR_PDF_PROPERTIES + "]. Exception: " + e.getMessage()));
+
+ }
+
+ scheduler = new Scheduler(schedulerInterval);
+
+ } // initializeSystem
+
+ public static void initializeRaptorProperties(Properties raptorProperties) {
+ Globals.raptorProperties = raptorProperties;
+ systemType = raptorProperties.getProperty("system");
+
+ try {
+ debugLevel = Integer.parseInt(nvls(raptorProperties
+ .getProperty("debug_level")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ downloadLimit = Integer.parseInt(nvls(raptorProperties
+ .getProperty("download_limit")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ defaultPageSize = Integer.parseInt(nvls(raptorProperties
+ .getProperty("default_page_size")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ formFieldsListSize = Integer.parseInt(nvls(raptorProperties
+ .getProperty("form_fields_list_size")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ schedulerInterval = Integer.parseInt(nvls(raptorProperties
+ .getProperty("scheduler_interval")).trim());
+ } catch (NumberFormatException nfe) {
+ System.out.println("NUMBERFORMATEXCEPTION Schedular " + raptorProperties
+ .getProperty("scheduler_interval"));
+ schedulerInterval = 0;
+ }
+
+ try {
+ maxDecimalsOnTotals = Integer.parseInt(nvls(raptorProperties
+ .getProperty("max_decimals_on_totals")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ defaultChartWidth = Integer.parseInt(nvls(raptorProperties
+ .getProperty("default_chart_width")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ defaultChartHeight = Integer.parseInt(nvls(raptorProperties
+ .getProperty("default_chart_height")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ try {
+ skipChartLabelsLimit = Integer.parseInt(nvls(raptorProperties
+ .getProperty("skip_chart_labels_limit")).trim());
+ } catch (NumberFormatException nfe) {
+ }
+
+ systemName = nvls(raptorProperties.getProperty("system_name"), "MSA Databank");
+ baseTitle = nvls(raptorProperties.getProperty("base_title"), "ANALYSIS");
+
+
+ allowSQLBasedReports = nvls(
+ raptorProperties.getProperty("allow_sql_based_reports"), "yes")
+ .toUpperCase().startsWith("Y");
+ showDisclaimer = nvls(raptorProperties.getProperty("show_disclaimer"), "yes")
+ .toUpperCase().startsWith("Y");
+ displayFormBeforeRun = nvls(
+ raptorProperties.getProperty("display_form_before_run"), "yes")
+ .toUpperCase().startsWith("Y");
+ includeFormWithData = nvls(raptorProperties.getProperty("include_form_with_data"),
+ "yes").toUpperCase().startsWith("Y");
+ cacheChartData = nvls(raptorProperties.getProperty("cache_chart_data"), "yes")
+ .toUpperCase().startsWith("Y");
+ cacheCurPageData = nvls(raptorProperties.getProperty("cache_cur_page_data"), "yes")
+ .toUpperCase().startsWith("Y");
+ deleteOnlyByOwner = nvls(raptorProperties.getProperty("delete_only_by_owner"),
+ "yes").toUpperCase().startsWith("Y");
+ enableReportLog = nvls(raptorProperties.getProperty("enable_report_log"), "yes")
+ .toUpperCase().startsWith("Y");
+ cacheUserRoles = nvls(raptorProperties.getProperty("cache_user_roles"), "yes")
+ .toUpperCase().startsWith("Y");
+ monthFormatUseLastDay = nvls(
+ raptorProperties.getProperty("month_format_use_last_day"), "yes")
+ .toUpperCase().startsWith("Y");
+ printTitleInDownload = nvls(
+ raptorProperties.getProperty("print_title_in_download"), "no")
+ .toUpperCase().startsWith("Y");
+ showDescrAtRuntime = nvls(raptorProperties.getProperty("show_descr_at_runtime"),
+ "no").toUpperCase().startsWith("Y");
+ // skipChartLabelsToFit =
+ // nvls(raptorProperties.getProperty("skip_chart_labels_to_fit"),
+ // "no" ).toUpperCase().startsWith("Y");
+ showNonstandardCharts = nvls(
+ raptorProperties.getProperty("show_nonstandard_charts"), "no")
+ .toUpperCase().startsWith("Y");
+ allowRuntimeChartSel = nvls(
+ raptorProperties.getProperty("allow_runtime_chart_sel"), "yes")
+ .toUpperCase().startsWith("Y");
+ displayChartTitle = nvls(raptorProperties.getProperty("display_chart_title"), "no")
+ .toUpperCase().startsWith("Y");
+ mergeCrosstabRowHeadings = nvls(
+ raptorProperties.getProperty("merge_crosstab_row_headings"), "yes")
+ .toUpperCase().startsWith("Y");
+ displayChartByDefault = nvls(
+ raptorProperties.getProperty("display_chart_by_default"), "yes")
+ .toUpperCase().startsWith("Y");
+ //System.out.println("Params Globals " + raptorProperties.getProperty("print_params_in_download"));
+
+ printParamsInDownload = nvls(
+ raptorProperties.getProperty("print_params_in_download"), "no")
+ .toUpperCase().startsWith("Y");
+ //System.out.println("printParamsInDownload " + printParamsInDownload);
+
+ canCopyOnReadOnly = nvls(raptorProperties.getProperty("can_copy_on_read_only"),
+ "yes").toUpperCase().startsWith("Y");
+ // chartLinesAlwaysSolid =
+ // nvls(raptorProperties.getProperty("chart_lines_always_solid"),
+ // "yes").toUpperCase().startsWith("Y");
+ // chartLinesAlwaysSmooth =
+ // nvls(raptorProperties.getProperty("chart_lines_always_smooth"),
+ // "yes").toUpperCase().startsWith("Y");
+ displayAllUsers = nvls(
+ raptorProperties.getProperty("display_all_users"), "yes")
+ .toUpperCase().startsWith("Y");
+ requestParams = nvls(
+ raptorProperties.getProperty("request_get_params"), "");
+ sessionParams = nvls(
+ raptorProperties.getProperty("session_params"), "");
+ user_col_def = nvls(
+ raptorProperties.getProperty("user_col_def"), "no")
+ .toUpperCase().startsWith("Y");
+ sheet_name = nvls(raptorProperties.getProperty("sheet_name"), "Raptor Reports");
+ try {
+ flatFileLowerLimit = Integer.parseInt(raptorProperties
+ .getProperty("flat_file_lower_limit"));
+ } catch (NumberFormatException nfe) {
+ }
+ try {
+ flatFileUpperLimit = Integer.parseInt(raptorProperties
+ .getProperty("flat_file_upper_limit"));
+ } catch (NumberFormatException nfe) {
+ }
+ shellScriptDir = nvls(raptorProperties.getProperty("shell_script_dir"), "");
+ //queryFolder = nvls(raptorProperties.getProperty("download_query_folder"), AppUtils.getTempFolderPath()+"../raptor/dwnld/query/");
+ queryFolder = nvls(raptorProperties.getProperty("download_query_folder"),"../raptor/dwnld/query/");
+
+
+ printFooterInDownload = nvls(
+ raptorProperties.getProperty("print_footer_in_download"), "no")
+ .toUpperCase().startsWith("Y");
+ footerFirstLine = nvls(raptorProperties.getProperty("footer_first_line"), "");
+ footerSecondLine = nvls(raptorProperties.getProperty("footer_second_line"), "Use Pursuant to Company Instructions");
+ reportsInPoPUpWindow = nvls(
+ raptorProperties.getProperty("report_in_popup_window"), "no")
+ .toUpperCase().startsWith("Y");
+ poPUpInNewWindow = nvls(
+ raptorProperties.getProperty("popup_in_new_window"), "no")
+ .toUpperCase().startsWith("Y") && reportsInPoPUpWindow;
+
+ passRequestParamInDrilldown = nvls(
+ raptorProperties.getProperty("pass_request_param_in_drilldown"), "yes")
+ .toUpperCase().startsWith("Y");
+ showPDFDownloadIcon = nvls(
+ raptorProperties.getProperty("show_pdf_download"), "no")
+ .toUpperCase().startsWith("Y");
+ }
+
+ /** *********************************************************************** */
+
+ public static ActionMapping getRaptorActionMapping() {
+ if (!systemInitialized)
+ throw new RuntimeException("[SYSTEM ERROR] Globals not initialized");
+
+ return raptorActionMapping;
+ } // getRaptorActionMapping
+
+ public static String getSystemType() {
+ if (!systemInitialized)
+ throw new RuntimeException("[SYSTEM ERROR] Globals not initialized");
+
+ return systemType;
+ } // getSystemType
+
+ public static IAppUtils getAppUtils() {
+ if (!systemInitialized)
+ throw new RuntimeException("[SYSTEM ERROR] Globals not initialized");
+
+ return appUtils;
+ } // getAppUtils
+
+ public static IDbUtils getDbUtils() {
+ if (!systemInitialized)
+ throw new RuntimeException("[SYSTEM ERROR] Globals not initialized");
+
+ return dbUtils;
+ } // getDbUtils
+
+ public static RDbUtils getRDbUtils() {
+ if (!systemInitialized)
+ throw new RuntimeException("[SYSTEM ERROR] Globals not initialized");
+ return rdbUtils;
+ } // getDbUtils
+
+ /** *********************************************************************** */
+
+ public static int getDebugLevel() {
+ return debugLevel;
+ }
+
+ public static int getDownloadLimit() {
+ return downloadLimit;
+ }
+
+ public static int getCSVDownloadLimit() {
+ return Integer.parseInt(nvls(raptorProperties.getProperty("csv_download_limit"), new Integer(getDownloadLimit()).toString()).trim());
+ }
+
+ public static String getDownloadLimitAsText() {
+ return java.text.NumberFormat.getNumberInstance(java.util.Locale.US).format(
+ downloadLimit);
+ }
+
+ public static int getDefaultPageSize() {
+ return defaultPageSize;
+ }
+
+ public static int getFormFieldsListSize() {
+ return formFieldsListSize;
+ }
+
+ public static int getSchedulerInterval() {
+ return schedulerInterval;
+ }
+
+ public static String getBaseTitle() {
+ return baseTitle;
+ }
+
+ public static String getSystemName() {
+ return systemName;
+ }
+
+ public static boolean getAllowSQLBasedReports() {
+ return allowSQLBasedReports;
+ }
+
+ public static boolean getShowDisclaimer() {
+ return showDisclaimer;
+ }
+
+ public static boolean getDisplayFormBeforeRun() {
+ return displayFormBeforeRun;
+ }
+
+ public static boolean getIncludeFormWithData() {
+ return includeFormWithData;
+ }
+
+ public static boolean getCacheChartData() {
+ return cacheChartData;
+ }
+
+ public static boolean getCacheCurPageData() {
+ return cacheCurPageData;
+ }
+
+ public static boolean getDeleteOnlyByOwner() {
+ return deleteOnlyByOwner;
+ }
+
+ public static boolean getEnableReportLog() {
+ return enableReportLog;
+ }
+
+ public static boolean getCacheUserRoles() {
+ return cacheUserRoles;
+ }
+
+ public static boolean getMonthFormatUseLastDay() {
+ return monthFormatUseLastDay;
+ }
+
+ public static boolean getPrintTitleInDownload() {
+ return printTitleInDownload;
+ }
+
+ public static boolean getShowDescrAtRuntime() {
+ return showDescrAtRuntime;
+ }
+
+ // public static boolean getSkipChartLabelsToFit() { return
+ // skipChartLabelsToFit; }
+ public static boolean getShowNonstandardCharts() {
+ return showNonstandardCharts;
+ }
+
+ public static boolean getAllowRuntimeChartSel() {
+ return allowRuntimeChartSel;
+ }
+
+ public static boolean getDisplayChartTitle() {
+ return displayChartTitle;
+ }
+
+ public static boolean getMergeCrosstabRowHeadings() {
+ return mergeCrosstabRowHeadings;
+ }
+
+ public static boolean getDisplayChartByDefault() {
+ return displayChartByDefault;
+ }
+
+ public static boolean getPrintParamsInDownload() {
+ return printParamsInDownload;
+ }
+
+ public static boolean getCanCopyOnReadOnly() {
+ return canCopyOnReadOnly;
+ }
+
+ // public static boolean getChartLinesAlwaysSolid() { return
+ // chartLinesAlwaysSolid; }
+ // public static boolean getChartLinesAlwaysSmooth() { return
+ // chartLinesAlwaysSmooth; }
+ public static int getMaxDecimalsOnTotals() {
+ return maxDecimalsOnTotals;
+ }
+
+ public static int getDefaultChartWidth() {
+ return defaultChartWidth;
+ }
+
+ public static int getDefaultChartHeight() {
+ return defaultChartHeight;
+ }
+
+ public static int getSkipChartLabelsLimit() {
+ return skipChartLabelsLimit;
+ }
+
+ public static boolean getRestrictTablesByRole() {
+ return restrictTablesByRole;
+ }
+
+ public static String getJavaTimeFormat() {
+ return javaTimeFormat;
+ }
+
+ public static String getOracleTimeFormat() {
+ return oracleTimeFormat;
+ }
+
+ public static String getRaptorVersion() {
+ return raptorVersion;
+ }
+
+ public static boolean getDisplayAllUsers() {
+ return displayAllUsers;
+ }
+
+ public static boolean getUserColDef() {
+ return user_col_def;
+ }
+
+ public static String getSheetName() {
+ return sheet_name;
+ }
+
+ public static int getFlatFileLowerLimit() {
+ return flatFileLowerLimit;
+ }
+
+ public static int getFlatFileUpperLimit() {
+ return flatFileUpperLimit;
+ }
+
+
+ public static String getShellScriptDir() {
+ return shellScriptDir;
+ }
+
+ public static String getQueryFolder() {
+ return AppUtils.getTempFolderPath()+queryFolder;
+ }
+
+ public static String getRequestParams() {
+ return requestParams;
+ }
+
+ public static String getSessionParams() {
+ return sessionParams;
+ }
+
+ public static boolean getPrintFooterInDownload() {
+ return printFooterInDownload;
+ }
+
+ public static String getFooterFirstLine() {
+ return footerFirstLine;
+ }
+
+ public static String getFooterSecondLine() {
+ return footerSecondLine;
+ }
+
+ public static boolean getReportsInPoPUpWindow() {
+ return reportsInPoPUpWindow;
+ }
+
+ public static boolean getPoPUpInNewWindow() {
+ return poPUpInNewWindow;
+ }
+
+ public static boolean getPassRequestParamInDrilldown() {
+ return passRequestParamInDrilldown;
+ }
+
+
+ //pdf specific properties
+ public static float getDataFontSize() {
+ float size = 10f;
+
+ try {
+ size = Float.parseFloat(nvls(raptorPdfProperties.getProperty("pdf_data_font_size")).trim());
+ } catch (Exception ex) {
+
+ }
+ return size;
+ }
+
+ public static float getDataFontSizeOffset() {
+ float size = 9f;
+
+ try {
+ size = Float.parseFloat(nvls(raptorPdfProperties.getProperty("pdf_data_font_size_offset")).trim());
+ } catch (Exception ex) {
+
+ }
+ return size;
+ }
+
+ public static float getFooterFontSize() {
+ float size = 9f;
+
+ try {
+ size = Float.parseFloat(nvls(raptorPdfProperties.getProperty("pdf_footer_font_size")).trim());
+ } catch (Exception ex) {
+
+ }
+ return size;
+ }
+
+ public static int getPageNumberPosition() {
+ int size = 1;
+
+ try {
+ size = Integer.parseInt(nvls(raptorPdfProperties.getProperty("pdf_page_number_position")).trim());
+ } catch (Exception ex) {
+
+ }
+ return size;
+ }
+
+ public static String getDataFontFamily() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_data_font_family"),"Arial").trim();
+ }
+
+ public static String getFooterFontFamily() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_footer_font_family"),"Arial").trim();
+ }
+
+ public static boolean isCoverPageNeeded() {
+
+ return nvls(raptorPdfProperties.getProperty("display_cover_page"),"true").trim().equalsIgnoreCase("true");
+ }
+
+ public static boolean isDataAlternateColor() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_data_alternate_color"),"true").trim().equalsIgnoreCase("true");
+ }
+
+ public static String getAttProprietary() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_att_proprietary"));
+ }
+
+ public static boolean isCreatedOwnerInfoNeeded() {
+ return nvls(raptorPdfProperties.getProperty("display_create_owner_info"),"true").trim().equalsIgnoreCase("true");
+ }
+
+ // Selected Form field section in the run page
+ public static boolean displayFormFieldInfo() {
+ return nvls(raptorProperties.getProperty("display_formfield_info"),"no").trim().toUpperCase().startsWith("Y");
+ }
+
+ // Customize Form field section in the run page
+ public static boolean customizeFormFieldInfo() {
+ return nvls(raptorProperties.getProperty("customize_formfield_info"),"no").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean displayLoginIdForDownloadedBy() {
+ return nvls(raptorPdfProperties.getProperty("display_loginid_for_downloaded_by"),"false").trim().equalsIgnoreCase("true");
+ }
+
+ public static boolean isDefaultOrientationPortrait() {
+ return nvls(raptorPdfProperties.getProperty("is_default_orientation_portrait"),"true").trim().equalsIgnoreCase("true");
+ }
+
+ public static String getSessionInfoForTheCoverPage() {
+ return nvls(raptorPdfProperties.getProperty("session_info"));
+ }
+
+ public static String getDatePattern() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_date_pattern"),"MM/dd/yyyy hh:mm:ss a");
+ }
+
+ public static String getTimeZone() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_date_timezone"),"EST");
+ }
+
+ public static String getWordBeforePageNumber() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_word_before_page_number"));
+ }
+
+ public static String getWordAfterPageNumber() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_word_after_page_number"));
+ }
+
+ public static float getAttProprieraryFontSize() {
+ float size = 7f;
+
+ try {
+ size = Float.parseFloat(nvls(raptorPdfProperties.getProperty("pdf_att_proprierary_font_size")).trim());
+ } catch (Exception ex) {
+
+ }
+ return size;
+ }
+
+ public static String getDataBackgroundAlternateHexCode() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_data_background_alternate_hex_code"),"#FFFFFF");
+ }
+
+ public static String getDataDefaultBackgroundHexCode() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_data_default_background_hex_code"),"#FFFFFF");
+ }
+
+ public static String getDataTableHeaderFontColor() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_data_table_header_font_hex_code"),"#FFFFFF");
+ }
+
+ public static String getDataTableHeaderBackgroundFontColor() {
+
+ return nvls(raptorPdfProperties.getProperty("pdf_data_table_header_background_hex_code"),"#8A9BB3");
+ }
+
+ public static boolean isFolderTreeAllowed() {
+ return nvls(raptorProperties.getProperty("show_folder_tree"),"yes").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean isFolderDefaultMinimized() {
+ return nvls(raptorProperties.getProperty("folder_tree_minimized"),"no").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean isFolderTreeAllowedOnlyForAdminUsers() {
+ return nvls(raptorProperties.getProperty("show_folder_tree_only_to_admin_users"),"yes").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static float getCoverPageFirstColumnSize() {
+ float size = 0.3f;
+
+ try {
+ size = Float.parseFloat(nvls(raptorPdfProperties.getProperty("pdf_coverpage_firstcolumn_size")).trim());
+ } catch (Exception ex) {
+
+ }
+ return size;
+ }
+
+ public static boolean isImageAutoRotate() {
+ return nvls(raptorPdfProperties.getProperty("pdf_image_auto_rotate"),"false").trim().equalsIgnoreCase("true");
+ }
+
+
+ public static boolean isShowPDFDownloadIcon() {
+ return showPDFDownloadIcon;
+ }
+
+
+ public static void setShowPDFDownloadIcon(boolean showPDFDownloadIcon) {
+ Globals.showPDFDownloadIcon = showPDFDownloadIcon;
+ }
+
+ public static int getScheduleLimit() {
+ int limit = 1000;
+ try {
+ limit = Integer.parseInt(nvls(raptorProperties.getProperty("schedule_limit")).trim());
+ } catch (Exception ex) {
+
+ }
+ return limit;
+ }
+
+// public static String getWhereConditionForUserRole() {
+// return nvls(raptorProperties.getProperty("schedule_where_condition"),"").trim();
+// }
+ public static String getCustomizedScheduleQueryForUsers() {
+ return nvls(raptorProperties.getProperty("schedule_custom_query_for_users"),"").trim();
+ }
+
+ public static String getCustomizedScheduleQueryForRoles() {
+ return nvls(raptorProperties.getProperty("schedule_custom_query_for_roles"),"").trim();
+ }
+
+ public static String getScheduleDatePattern() {
+ return nvls(raptorProperties.getProperty("schedule_date_pattern"),"MM/dd/yyyy hh:mm:ss a");
+ }
+
+ public static String getChartYearlyPattern() {
+ return nvls(raptorProperties.getProperty("chart_yearly_format"),"yyyy");
+ }
+
+ public static String getChartMonthlyPattern() {
+ return nvls(raptorProperties.getProperty("chart_monthly_format"),"MMM-yyyy");
+ }
+
+ public static String getChartDailyPattern() {
+ return nvls(raptorProperties.getProperty("chart_daily_format"),"MM-dd-yyyy");
+ }
+
+ public static String getChartWeeklyPattern() {
+ return nvls(raptorProperties.getProperty("chart_weekly_format"),"MM-dd-yyyy");
+ }
+
+ public static String getChartHourlyPattern() {
+ return nvls(raptorProperties.getProperty("chart_hourly_format"),"HH");
+ }
+
+ public static String getChartMinutePattern() {
+ return nvls(raptorProperties.getProperty("chart_minute_format"),"HH:mm");
+ }
+
+ public static String getChartSecPattern() {
+ return nvls(raptorProperties.getProperty("chart_second_format"),"HH:mm:ss");
+ }
+
+ public static String getChartMilliSecPattern() {
+ return nvls(raptorProperties.getProperty("chart_millisecond_format"),"HH:mm:ss.S");
+ }
+
+ public static String getSessionParamsForScheduling() {
+ return nvls(raptorProperties.getProperty("session_params_for_scheduling"),"");
+ }
+
+ public static String getDisplaySessionParamInPDFEXCEL() {
+ return nvls(raptorProperties.getProperty("display_session_param_pdfexcel"),"");
+ }
+
+ public static String getDisplayScheduleSessionParamInPDFEXCEL() {
+ return nvls(raptorProperties.getProperty("session_params_for_displaying_in_scheduling"),"");
+ }
+
+ public static boolean isScheduleDateParamAutoIncr() {
+ return nvls(raptorProperties.getProperty("session_date_formfield_auto_incr"),"yes").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static int getMaxCellWidthInExcel() {
+ int cellWidth = 40;
+ try {
+ cellWidth = Integer.parseInt(nvls(raptorProperties.getProperty("max_cell_width_in_excel")).trim());
+ } catch (Exception ex) {
+
+ }
+ return cellWidth;
+ }
+
+ public static synchronized int getFormFieldsCount(HttpServletRequest request)
+ {
+ if(request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME) == null )
+ {
+ return 0;
+ }
+
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+
+ 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++;
+ }
+ return countOfFields;
+
+ }
+
+ public static synchronized java.util.HashMap getRequestParametersMap(HttpServletRequest request, HashMap paramsMap) {
+ HashMap valuesMap = new HashMap();
+ if(paramsMap.size() <= 0) {
+ return valuesMap;
+ }
+
+ ReportRuntime rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ if(rr.getReportType().equals(AppConstants.RT_DASHBOARD)) {
+ rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
+ }
+ 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();
+
+ if(paramsMap.containsKey(formField) ) {
+ String vals = (String) paramsMap.get(formField);
+ StringBuffer value = new StringBuffer("");
+ 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(isMultiValue) {
+ value.append("(");
+ }
+ StringTokenizer st = new StringTokenizer(vals, "|");
+ if(st.countTokens()>0) {
+ while(st.hasMoreTokens()) {
+ if(isMultiValue) value.append("'");
+ String token = st.nextToken();
+ try {
+ if(token !=null && token.length() > 0)
+ token = java.net.URLDecoder.decode(token, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {}
+ catch (IllegalArgumentException ex1){}
+ catch (Exception ex2){}
+ value.append(token);
+ if(isMultiValue) value.append("'");
+ if(st.hasMoreTokens()) {
+ value.append(",");
+ }
+ }
+ } else {
+ String valueStr = "";
+ valueStr = request.getParameter(formField);
+ valueStr = Utils.oracleSafe(valueStr);
+ valueStr = "('" + Utils.replaceInString(valueStr, ",", "'|'") + "')";
+ valueStr = Utils.replaceInString(valueStr, "|", ",");
+ valuesMap.put(fieldNameMap.get(formField), valueStr);
+ valueStr = "";
+ }
+ if(isMultiValue) value.append(")");
+
+ valuesMap.put(fieldNameMap.get(formField), value.toString());
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ String valueStr = "";
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ valueStr = (String) paramsMap.get(formField +"_Hr");
+ valuesMap.put(formField+"_Hr", valueStr);
+ valueStr = "";
+ } else if (ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+ valueStr =(String) paramsMap.get(formField +"_Hr");
+ valuesMap.put(formField+"_Hr", valueStr);
+ valueStr = "";
+ valueStr = (String) paramsMap.get(formField +"_Min");
+ valuesMap.put(formField+"_Min", valueStr);
+ valueStr = "";
+ } else if (ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ valueStr = (String) paramsMap.get(formField +"_Hr");
+ valuesMap.put(formField+"_Hr", valueStr);
+ valueStr = "";
+ valueStr =(String) paramsMap.get(formField +"_Min");
+ valuesMap.put(formField+"_Min", valueStr);
+ valueStr = "";
+ valueStr = (String) paramsMap.get(formField +"_Sec");
+ valuesMap.put(formField+"_Sec", valueStr);
+ valueStr = "";
+ }
+ }
+
+ value = new StringBuffer("");
+
+ } else if (paramsMap.containsKey(formField +"_auto")) {
+ String vals = (String) paramsMap.get(formField +"_auto");
+ StringBuffer value = new StringBuffer("");
+ 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(isMultiValue) {
+ value.append("(");
+ }
+ StringTokenizer st = new StringTokenizer(vals, "|");
+ if(st.countTokens()>0) {
+ while(st.hasMoreTokens()) {
+ if(isMultiValue) value.append("'");
+ String token = st.nextToken();
+ try {
+ if(token !=null && token.length() > 0)
+ token = java.net.URLDecoder.decode(Utils.oracleSafe(token), "UTF-8");
+ } catch (UnsupportedEncodingException ex) {}
+ catch (IllegalArgumentException ex1){}
+ catch (Exception ex2){}
+ value.append(token);
+ if(isMultiValue) value.append("'");
+ if(st.hasMoreTokens()) {
+ value.append(",");
+ }
+ }
+ } else {
+ String valueStr = "";
+ valueStr = request.getParameter(formField +"_auto");
+ valueStr = "('" + Utils.replaceInString(valueStr, ",", "'|'") + "')";
+ valueStr = Utils.replaceInString(valueStr, "|", ",");
+ valuesMap.put(fieldNameMap.get(formField), valueStr);
+ valueStr = "";
+ }
+ if(isMultiValue) value.append(")");
+
+ valuesMap.put(fieldNameMap.get(formField), value.toString());
+
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN) || ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ String valueStr = "";
+ if(ff.getValidationType().equals(FormField.VT_TIMESTAMP_HR)) {
+ valueStr = (String) paramsMap.get(formField +"_Hr");
+ valuesMap.put(formField+"_Hr", valueStr);
+ valueStr = "";
+ } else if (ff.getValidationType().equals(FormField.VT_TIMESTAMP_MIN)) {
+ valueStr = (String) paramsMap.get(formField +"_Hr");
+ valuesMap.put(formField+"_Hr", valueStr);
+ valueStr = "";
+ valueStr = (String) paramsMap.get(formField +"_Min");
+ valuesMap.put(formField+"_Min", valueStr);
+ valueStr = "";
+ } else if (ff.getValidationType().equals(FormField.VT_TIMESTAMP_SEC)) {
+ valueStr = (String) paramsMap.get(formField +"_Hr");
+ valuesMap.put(formField+"_Hr", valueStr);
+ valueStr = "";
+ valueStr = (String) paramsMap.get(formField +"_Min");
+ valuesMap.put(formField+"_Min", valueStr);
+ valueStr = "";
+ valueStr = (String) paramsMap.get(formField +"_Sec");
+ valuesMap.put(formField+"_Sec", valueStr);
+ valueStr = "";
+ }
+ }
+ value = new StringBuffer("");
+
+
+ } else
+ valuesMap.put(fieldNameMap.get(formField), "" );
+ }
+ return valuesMap;
+ }
+
+ public static synchronized java.util.HashMap getRequestParamtersMap(HttpServletRequest request) {
+ return getRequestParamtersMap(request, false);
+ }
+
+ public static synchronized java.util.HashMap getRequestParamtersMap(HttpServletRequest request, boolean isFromChild)
+ {
+ HashMap valuesMap = new HashMap();
+ ReportRuntime rr = null;
+ if(request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME) == null )
+ {
+ rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
+ if(rr==null)
+ return valuesMap;
+ }
+
+ rr = (ReportRuntime) request.getSession().getAttribute(
+ AppConstants.SI_REPORT_RUNTIME);
+ if(rr!=null && rr.getReportType().equals(AppConstants.RT_DASHBOARD)) {
+ rr = (ReportRuntime) request.getSession().getAttribute("FirstDashReport");
+ }
+
+ 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++;
+ }
+ if(isFromChild) {
+ Hashtable ht = rr.getReportParamValues();
+ Set set = ht.entrySet();
+ HashMap hashMap = new HashMap();
+ Iterator itr = set.iterator();
+ while(itr.hasNext()){
+ Map.Entry entry = (Map.Entry)itr.next();
+ Object key = entry.getKey();
+ Object val = entry.getValue();
+ if(key==null){
+ key = ""; // Or whatever you want
+ }
+ if(val==null){
+ val = ""; // Or whatever you want
+ }
+ hashMap.put(fieldNameMap.get((String)key),val);
+ }
+ return hashMap;
+
+ } else {
+ List formParameter = new ArrayList();
+ String formField = "";
+
+// for(int i = 1 ; i < (countOfFields+1); i++)
+// {
+// formField ="ff"+i;
+//
+// if(request.getParameterValues(formField) != null && request.getParameterValues(formField).length > 1 )
+// {
+// String[] vals = request.getParameterValues(formField);
+// boolean isMultiValue = false;
+// StringBuffer value = new StringBuffer("");
+// if(vals.length > 1) {
+// isMultiValue = true;
+// value.append("(");
+// }
+// for(int j = 0 ; j < vals.length; j++)
+// {
+// if(isMultiValue) value.append("'");
+// try {
+// if(vals[j] !=null && vals[j].length() > 0)
+// 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 > 1) {
+// value.append(")");
+// }
+//
+// //value = value.substring(0 , value.length());
+//
+// valuesMap.put(fieldNameMap.get(formField), value.toString());
+// value = new StringBuffer("");
+//
+// }
+// else if(request.getParameter(formField) != null)
+// {
+// String value = "";
+// value = request.getParameter(formField);
+// try {
+// if(value !=null && value.length() > 0)
+// value = java.net.URLDecoder.decode(request.getParameter(formField), "UTF-8");
+// } catch (UnsupportedEncodingException ex) {}
+// catch (IllegalArgumentException ex1){}
+// catch (Exception ex2){}
+// valuesMap.put(fieldNameMap.get(formField), value);
+//
+// }else
+// {
+// valuesMap.put(fieldNameMap.get(formField), "NULL" );
+// }
+// }
+ 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);
+/* try {
+ value = java.net.URLDecoder.decode(value, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {}
+ catch (IllegalArgumentException ex1){}
+ catch (Exception ex2){}
+*/
+ 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);
+ /*try {
+ value = java.net.URLDecoder.decode(value, "UTF-8");
+ } catch (UnsupportedEncodingException ex) {}
+ catch (IllegalArgumentException ex1){}
+ catch (Exception ex2){}
+*/
+ valuesMap.put(fieldNameMap.get(formField), Utils.oracleSafe(value));
+ }
+
+ } else {
+ valuesMap.put(fieldNameMap.get(formField), "" );
+ }
+
+ }
+
+ return valuesMap;
+ }
+ }
+
+ //new method added to get the help message for schedule tab
+ public static String getScheduleHelpMessage() {
+ return nvls(raptorProperties.getProperty("schedule_help_text"),"").trim();
+ }
+
+ //new method added to get the help message for schedule tab
+ public static String getUseLoginIdInSchedYN() {
+ return nvls(raptorProperties.getProperty("use_loginid_in_schedYN"),"N").trim();
+ }
+
+ //new method to check if map is allowed or not
+ public static String getMapAllowedYN() {
+ return nvls(raptorProperties.getProperty("map_allowed"),"").trim();
+ }
+
+ //new method added to get gmap key
+ public static String getGmapKey() {
+ return nvls(raptorProperties.getProperty("gmap_key"),"").trim();
+ }
+
+// new method added to get gmap
+ public static String getProjectFolder() {
+ return nvls(raptorProperties.getProperty("PROJECT-FOLDER"),"").trim();
+ }
+
+
+ //new method added to get gmap
+ public static String getMarketShapefileFolder() {
+ return nvls(raptorProperties.getProperty("MARKET-SHAPEFILE-FOLDER"),"").trim();
+ }
+
+ //new method added to get gmap
+ public static String getTileSize() {
+ return nvls(raptorProperties.getProperty("TILE-SIZE"),"").trim();
+ }
+
+ // new method added to get gmap
+ public static String getOutputFolder() {
+ return nvls(raptorProperties.getProperty("OUTPUT-FOLDER"),"").trim();
+ }
+
+ //getting server details
+ public static boolean isWeblogicServer() {
+ return nvls(raptorProperties.getProperty("application_server"),"tomcat").trim().toUpperCase().startsWith("WEBLOGIC");
+ }
+
+ public static String getTempFolderURL() {
+ return nvls(AppUtils.getTempFolderURL(),"").trim();
+ }
+
+ public static int getMaxDrillDownLevel() {
+ int drillDownLevel = 1;
+ try {
+ drillDownLevel = Integer.parseInt(nvls(raptorProperties.getProperty("max_drilldown_level")).trim());
+ } catch (Exception ex) {
+
+ }
+ return drillDownLevel;
+ }
+
+ public static int getMemoryThreshold() {
+ int threshold = Integer.parseInt(nvls(raptorProperties.getProperty("memory_threshold_percentage"),"0").trim());
+ if(threshold <= 0) threshold = 0;
+ return threshold;
+ }
+
+ public static boolean showParamsInAllDashboardReports() {
+ return nvls(raptorProperties.getProperty("show_params_in_all_dashboard_reports"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean isAdminRoleEquivalenttoSuperRole() {
+ return nvls(raptorProperties.getProperty("admin_role_equiv_to_super_role"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean showLoadingMsgDuringFormFieldChain() {
+ return nvls(raptorProperties.getProperty("show_loading_during_formfield_chain"),"Y").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean showPrintIcon() {
+ return nvls(raptorProperties.getProperty("show_print_icon"),"Y").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean IsGlobalNoWrap() {
+ return nvls(raptorProperties.getProperty("globally_nowrap"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static String getCalendarOutputDateFormat() {
+ return nvls(raptorProperties.getProperty("calendar_output_date_format"),"MM/dd/yyyy");
+ }
+
+ public static String getUserDefinedMessageForMemoryLimitReached() {
+ return nvls(raptorProperties.getProperty("user_defined_message_memory_limit"),"Please note: Due to limited computing resource at this time,");
+ }
+
+ public static String getAdhocUserRoldId() {
+ return nvls(raptorProperties.getProperty("adhoc_user_roleId"),"");
+ }
+
+ public static String getAdhocReportSequence() {
+ return nvls(raptorProperties.getProperty("adhoc_report_sequence"),"");
+ }
+
+ public static boolean hideToolTipsGlobally() {
+ return nvls(raptorProperties.getProperty("hide_tooltips_in_chart"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean showScheduleIconBeforeRun() {
+ return nvls(raptorProperties.getProperty("show_schedule_icon_before_run"),"Y").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean hideRaptorFooter() {
+ return nvls(raptorProperties.getProperty("hide_raptor_footer"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean getPrintParamsInCSVDownload() {
+ return nvls(raptorProperties.getProperty("print_params_in_csv_download"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static String getLogVariablesInSession() {
+ return nvls(raptorProperties.getProperty("log_variable_in_session"), "");
+ }
+
+ public static boolean hideTitleInDashboard() {
+ return nvls(raptorProperties.getProperty("notitle_in_dashboard"), "N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static String getEncryptedSMTPServer() {
+ return nvls(raptorProperties.getProperty("secure_smtp_server"), "");
+ }
+
+ public static boolean generateSchedReportsInFileSystem() {
+ return nvls(raptorProperties.getProperty("generate_store_sched_reports"), "N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean showExcel2007DownloadIcon() {
+ return nvls(raptorProperties.getProperty("show_excel_2007_download"), "N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean printExcelInLandscapeMode() {
+ return nvls(raptorProperties.getProperty("print_excel_in_landscape"), "").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static String getAppDefinedMessageForSendingSchedAsAttachment() {
+ return nvls(raptorProperties.getProperty("app_defined_message_schedule_attachment"),"Send as Attachment");
+ }
+
+ public static String getReportEmptyMessage() {
+ return nvls(raptorProperties.getProperty("no_rows_found"),"Your Search didn't yield any results.");
+ }
+
+ public static boolean showAnimatedChartOption() {
+ return nvls(raptorProperties.getProperty("show_animated_chart_option"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean showAnimatedChartOnly() {
+ return nvls(raptorProperties.getProperty("show_animated_chart_only"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean adjustContentBasedOnHeight() {
+ return nvls(raptorProperties.getProperty("adjust_content_based_on_height"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean disclaimerPositionedTopInCSVExcel() {
+ return nvls(raptorProperties.getProperty("disclaimer_positioned_top_in_csvexcel"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static String customizedSubmitButtonText() {
+ return nvls(raptorProperties.getProperty("custom_submit_button_text"),"submit");
+ }
+
+ public static String customizedResetButtonText() {
+ return nvls(raptorProperties.getProperty("custom_reset_button_text"),"reset");
+ }
+ public static boolean customizeFormFieldLayout() {
+ return nvls(raptorProperties.getProperty("customize_formfield_layout"),"N").trim().toUpperCase().startsWith("Y");
+ }
+ public static String getRaptorTheme() {
+ return nvls(raptorProperties.getProperty("raptor_theme"),"default");
+ }
+
+ public static String getFormfieldAlignment() {
+ return nvls(raptorProperties.getProperty("formfield_alignment"),"left");
+ }
+
+ public static boolean displayExcelOptionInDashboard() {
+ return nvls(raptorProperties.getProperty("display_excel_option_in_dashboard"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean displayRuntimeOptionsAsDefault() {
+ return nvls(raptorProperties.getProperty("display_runtime_options_as_default"),"Y").trim().toUpperCase().startsWith("Y");
+ }
+
+ public static boolean displayHiddenFormfieldinExcel() {
+ return nvls(raptorProperties.getProperty("display_hidden_field_in_excel"),"N").trim().toUpperCase().startsWith("Y");
+ }
+
+ //ReportLoader.java
+ public static String getLoadCustomReportXml(){
+ return nvls(sqlProperty.getProperty("load.custom.report.xml"));
+ }
+
+ public static String getDBUpdateReportXml(){
+ return nvls(sqlProperty.getProperty("db.update.report.xml"));
+ }
+
+ public static String getUpdateCustomReportRec(){
+ return nvls(sqlProperty.getProperty("update.custom.report.rec"));
+ }
+
+ public static String getIsReportAlreadyScheduled(){
+ return nvls(sqlProperty.getProperty("is.report.already.scheduled"));
+ }
+
+ public static String getCreateCustomReportRec(){
+ return nvls(sqlProperty.getProperty("create.custom.report.rec"));
+ }
+
+ public static String getTheUserReportNames(){
+ return nvls(sqlProperty.getProperty("get.user.report.names"));
+ }
+
+ public static String getTheReportOwnerId(){
+ return nvls(sqlProperty.getProperty("get.report.owner.id"));
+ }
+
+ public static String getReportSecurity(){
+ return nvls(sqlProperty.getProperty("report.security.create"));
+ }
+
+ public static String getDeleteReportRecordLog(){
+ return nvls(sqlProperty.getProperty("delete.report.record.log"));
+ }
+
+ public static String getDeleteReportRecordUsers(){
+ return nvls(sqlProperty.getProperty("delete.report.record.users"));
+ }
+
+ public static String getDeleteReportRecordSchedule(){
+ return nvls(sqlProperty.getProperty("delete.report.record.schedule"));
+ }
+
+ public static String getDeleteReportRecordAccess(){
+ return nvls(sqlProperty.getProperty("delete.report.record.access"));
+ }
+
+ public static String getDeleteReportRecordEmail(){
+ return nvls(sqlProperty.getProperty("delete.report.record.email"));
+ }
+
+ public static String getDeleteReportRecordFavorite(){
+ return nvls(sqlProperty.getProperty("delete.report.record.favorite"));
+ }
+
+ public static String getDeleteReportRecordReport(){
+ return nvls(sqlProperty.getProperty("delete.report.record.report"));
+ }
+
+ public static String getLoadQuickLinks(){
+ return nvls(sqlProperty.getProperty("load.quick.links"));
+ }
+
+ public static String getLoadFolderReports(){
+ return nvls(sqlProperty.getProperty("load.folder.reports"));
+ }
+
+ public static String getLoadFolderReportsUser(){
+ return nvls(sqlProperty.getProperty("load.folder.reports.user"));
+ }
+
+ public static String getLoadFolderReportsPublicSql(){
+ return nvls(sqlProperty.getProperty("load.folder.reports.publicsql"));
+ }
+
+ public static String getLoadQuickDownloadLinks(){
+ return nvls(sqlProperty.getProperty("load.quick.download.links"));
+ }
+
+ public static String getLoadReportsToSchedule(){
+ return nvls(sqlProperty.getProperty("load.reports.to.schedule"));
+ }
+
+ public static String getLoadReportsToAddInDashboard(){
+ return nvls(sqlProperty.getProperty("load.reports.to.add.in.dashboard"));
+ }
+
+ public static String getLoadMyRecentLinks(){
+ return nvls(sqlProperty.getProperty("load.my.recent.links"));
+ }
+
+ public static String getCreateReportLogEntry(){
+ return nvls(sqlProperty.getProperty("create.report.log.entry"));
+ }
+
+ public static String getCreateReportLogEntryExecTime(){
+ return nvls(sqlProperty.getProperty("create.report.log.entry.exec.time"));
+ }
+
+ public static String getClearReportLogEntries(){
+ return nvls(sqlProperty.getProperty("clear.report.log.entries"));
+ }
+
+ public static String getLoadReportLogEntries(){
+ return nvls(sqlProperty.getProperty("load.report.log.entries"));
+ }
+
+ public static String getDoesUserCanScheduleReport(){
+ return nvls(sqlProperty.getProperty("does.user.can.schedule.report"));
+ }
+
+ public static String getDoesUserCanSchedule(){
+ return nvls(sqlProperty.getProperty("does.user.can.schedule"));
+ }
+
+ public static String getTheSystemDateTime(){
+ return nvls(sqlProperty.getProperty("get.system.date.time"));
+ }
+
+ public static String getTheNextDayDateTime(){
+ return nvls(sqlProperty.getProperty("get.next.day.date.time"));
+ }
+
+ public static String getTheNextFifteenMinDateTime(){
+ return nvls(sqlProperty.getProperty("get.next.fifteen.minutes.date.time"));
+ }
+
+ public static String getTheNextThirtyMinDateTime(){
+ return nvls(sqlProperty.getProperty("get.next.thirty.minutes.date.time"));
+ }
+
+ public static String getTheTemplateFile(){
+ return nvls(sqlProperty.getProperty("get.template.file"));
+ }
+
+ public static String getLoadPdfImgLookup(){
+ return nvls(sqlProperty.getProperty("load.pdf.img.lookup"));
+ }
+
+ public static String getLoadActionImgLookup(){
+ return nvls(sqlProperty.getProperty("load.action.img.lookup"));
+ }
+
+ //ActionHandler.java
+
+ public static String getReportValuesMapDefA(){
+ return nvls(sqlProperty.getProperty("report.values.map.def.a"));
+ }
+ public static String getReportValuesMapDefB(){
+ return nvls(sqlProperty.getProperty("report.values.map.def.b"));
+ }
+ public static String getReportValuesMapDefC(){
+ return nvls(sqlProperty.getProperty("report.values.map.def.c"));
+ }
+ public static String getReportValuesMapDefD(){
+ return nvls(sqlProperty.getProperty("report.values.map.def.d"));
+ }
+
+ public static String getTestSchedCondPopup(){
+ return nvls(sqlProperty.getProperty("test.sched.cond.popup"));
+ }
+
+ public static String getDownloadAllEmailSent(){
+ return nvls(sqlProperty.getProperty("download.all.email.sent"));
+ }
+
+ public static String getDownloadAllGenKey(){
+ return nvls(sqlProperty.getProperty("download.all.gen.key"));
+ }
+
+ public static String getDownloadAllRetrieve(){
+ return nvls(sqlProperty.getProperty("download.all.retrieve"));
+ }
+
+ public static String getDownloadAllInsert(){
+ return nvls(sqlProperty.getProperty("download.all.insert"));
+ }
+
+ //ReportWrapper.java
+
+ public static String getReportWrapperFormat(){
+ return nvls(sqlProperty.getProperty("report.wrapper.format"));
+ }
+
+ public static String getGenerateSubsetSql(){
+ return nvls(sqlProperty.getProperty("generate.subset.sql"));
+ }
+
+ public static String getReportSqlForFormfield(){
+ return nvls(sqlProperty.getProperty("formfield.id.name.sql"));
+ }
+
+ public static String getReportSqlForFormfieldPrefix(){
+ return nvls(sqlProperty.getProperty("formfield.id.name.sql.prefix"));
+ }
+
+ public static String getReportSqlForFormfieldSuffix(){
+ return nvls(sqlProperty.getProperty("formfield.id.name.sql.suffix"));
+ }
+
+ public static String getReportSqlOnlyFirstPart(){
+ return nvls(sqlProperty.getProperty("report.sql.only.first.part"));
+ }
+
+ public static String getReportSqlOnlySecondPartA(){
+ return nvls(sqlProperty.getProperty("report.sql.only.second.part.a"));
+ }
+
+ public static String getReportSqlOnlySecondPartB(){
+ return nvls(sqlProperty.getProperty("report.sql.only.second.part.b"));
+ }
+
+ public static String getReportSqlOnlySecondPartBNoOrderBy(){
+ return nvls(sqlProperty.getProperty("report.sql.only.second.part.b.noorderby"));
+ }
+
+ public static String getGenerateSqlVisualSelect(){
+ return nvls(sqlProperty.getProperty("generate.sql.visual.select"));
+ }
+
+ public static String getGenerateSqlVisualCount(){
+ return nvls(sqlProperty.getProperty("generate.sql.visual.count"));
+ }
+
+ public static String getGenerateSqlVisualDual(){
+ return nvls(sqlProperty.getProperty("generate.sql.visual.select"));
+ }
+
+ //ReportRuntime.java
+
+ public static String getLoadCrosstabReportData(){
+ return nvls(sqlProperty.getProperty("load.crosstab.report.data"));
+ }
+
+ //ReportRunHandler.java
+
+ public static String getGenerateSqlHandler(){
+ return nvls(sqlProperty.getProperty("generate.sql.handler"));
+ }
+
+ public static String getGenerateSqlSelect(){
+ return nvls(sqlProperty.getProperty("generate.sql.select"));
+ }
+
+ public static String getRemoteDbSchemaSql() {
+ return nvls(sqlProperty.getProperty("load.remoteDB.schema"));
+ }
+
+ public static String getRemoteDbSchemaSqlWithWhereClause() {
+ return nvls(sqlProperty.getProperty("load.remoteDB.schema.where"));
+ }
+
+ //ReportSchedule.java
+
+ public static String getLoadScheduleData(){
+ return nvls(sqlProperty.getProperty("load.schedule.data"));
+ }
+
+ public static String getLoadScheduleGetId(){
+ return nvls(sqlProperty.getProperty("load.schedule.getid"));
+ }
+
+ public static String getLoadScheduleUsers(){
+ return nvls(sqlProperty.getProperty("load.schedule.users"));
+ }
+
+ public static String getNewScheduleData(){
+ return nvls(sqlProperty.getProperty("new.schedule.data"));
+ }
+
+ public static String getNewReportData(){
+ return nvls(sqlProperty.getProperty("new.report.data"));
+ }
+
+ public static String getExecuteUpdate(){
+ return nvls(sqlProperty.getProperty("execute.update"));
+ }
+
+ public static String getExecuteUpdateUsers(){
+ return nvls(sqlProperty.getProperty("execute.update.users"));
+ }
+
+ public static String getExecuteUpdateRoles(){
+ return nvls(sqlProperty.getProperty("execute.update.roles"));
+ }
+
+ public static String getExecuteUpdateActivity(){
+ return nvls(sqlProperty.getProperty("execute.update.activity"));
+ }
+
+ public static String getDeleteScheduleData(){
+ return nvls(sqlProperty.getProperty("delete.schedule.data"));
+ }
+
+ public static String getDeleteScheduleDataUsers(){
+ return nvls(sqlProperty.getProperty("delete.schedule.data.users"));
+ }
+
+ public static String getDeleteScheduleDataId(){
+ return nvls(sqlProperty.getProperty("delete.schedule.data.id"));
+ }
+
+ public static String getLoadCondSql(){
+ return nvls(sqlProperty.getProperty("load.cond.sql"));
+ }
+
+ public static String getLoadCondSqlSelect(){
+ return nvls(sqlProperty.getProperty("load.cond.sql.select"));
+ }
+
+ public static String getPersistCondSqlUpdate(){
+ return nvls(sqlProperty.getProperty("persist.cond.sql.update"));
+ }
+
+ public static String getPersistCondSqlLarge(){
+ return nvls(sqlProperty.getProperty("persist.cond.sql.large"));
+ }
+
+ public static String getPersistCondSqlSet(){
+ return nvls(sqlProperty.getProperty("persist.cond.sql.set"));
+ }
+
+ //DataCache.java
+
+ public static String getTheDataViewActions(){
+ return nvls(sqlProperty.getProperty("get.data.view.actions"));
+ }
+
+ public static String getThePublicReportIdNames(){
+ return nvls(sqlProperty.getProperty("get.public.report.id.names"));
+ }
+
+ public static String getThePrivateAccessibleNamesA(){
+ return nvls(sqlProperty.getProperty("get.private.accessible.names.a"));
+ }
+ public static String getThePrivateAccessibleNamesIf(){
+ return nvls(sqlProperty.getProperty("get.private.accessible.names.if"));
+ }
+ public static String getThePrivateAccessibleNamesB(){
+ return nvls(sqlProperty.getProperty("get.private.accessible.names.b"));
+ }
+
+ public static String getTheGroupAccessibleNamesA(){
+ return nvls(sqlProperty.getProperty("get.group.accessible.names.a"));
+ }
+
+ public static String getTheGroupAccessibleNamesB(){
+ return nvls(sqlProperty.getProperty("get.group.accessible.names.b"));
+ }
+
+ public static String getTheReportTableSourcesA(){
+ return nvls(sqlProperty.getProperty("get.report.table.sources.a"));
+ }
+
+ public static String getTheReportTableSourcesWhere(){
+ return nvls(sqlProperty.getProperty("get.report.table.sources.where"));
+ }
+
+ public static String getTheReportTableSourcesIf(){
+ return nvls(sqlProperty.getProperty("get.report.table.sources.if"));
+ }
+
+ public static String getTheReportTableSourcesElse(){
+ return nvls(sqlProperty.getProperty("get.report.table.sources.else"));
+ }
+
+ public static String grabTheReportTableA(){
+ return nvls(sqlProperty.getProperty("grab.report.table.a"));
+ }
+
+ public static String grabTheReportTableIf(){
+ return nvls(sqlProperty.getProperty("grab.report.table.if"));
+ }
+
+ public static String grabTheReportTableElse(){
+ return nvls(sqlProperty.getProperty("grab.report.table.else"));
+ }
+
+ public static String grabTheReportTableB(){
+ return nvls(sqlProperty.getProperty("grab.report.table.b"));
+ }
+
+ public static String grabTheReportTableC(){
+ return nvls(sqlProperty.getProperty("grab.report.table.c"));
+ }
+
+ public static String getTheReportTableCrJoin(){
+ return nvls(sqlProperty.getProperty("get.report.table.crjoin"));
+ }
+
+ public static String getTheReportTableJoins(){
+ return nvls(sqlProperty.getProperty("get.report.table.joins"));
+ }
+
+ public static String getGenerateReportTableCol(){
+ return nvls(sqlProperty.getProperty("generate.report.table.col"));
+ }
+
+
+ public static String getGenerateDbUserSqlA(){
+ return nvls(sqlProperty.getProperty("generate.db.user.sql.a"));
+ }
+
+ public static String getGenerateDbUserSqlIf(){
+ return nvls(sqlProperty.getProperty("generate.db.user.sql.if"));
+ }
+
+ public static String getGenerateDbUserSqlElse(){
+ return nvls(sqlProperty.getProperty("generate.db.user.sql.else"));
+ }
+
+ public static String getGenerateDbUserSqlB(){
+ return nvls(sqlProperty.getProperty("generate.db.user.sql.b"));
+ }
+
+ public static String getGenerateDbUserSqlC(){
+ return nvls(sqlProperty.getProperty("generate.db.user.sql.c"));
+ }
+
+ public static String getGenerateDbUserSqlD(){
+ return nvls(sqlProperty.getProperty("generate.db.user.sql.d"));
+ }
+
+ //SearchHandler.java
+
+ public static String getLoadReportSearchResult(){
+ return nvls(sqlProperty.getProperty("load.report.search.result"));
+ }
+
+ public static String getLoadReportSearchInstr(){
+ return nvls(sqlProperty.getProperty("load.report.search.instr"));
+ }
+
+ public static String getLoadReportSearchResultUser(){
+ return nvls(sqlProperty.getProperty("load.report.search.result.user"));
+ }
+
+ public static String getLoadReportSearchResultPublic(){
+ return nvls(sqlProperty.getProperty("load.report.search.result.public"));
+ }
+
+ public static String getLoadReportSearchResultFav(){
+ return nvls(sqlProperty.getProperty("load.report.search.result.fav"));
+ }
+
+ public static String getLoadReportSearchResultSort(){
+ return nvls(sqlProperty.getProperty("load.report.search.result.sort"));
+ }
+
+ public static String getLoadFolderReportResult(){
+ return nvls(sqlProperty.getProperty("load.folder.report.result"));
+ }
+
+ public static String getLoadFolderReportResultSort(){
+ return nvls(sqlProperty.getProperty("load.folder.report..result.sort"));
+ }
+
+ //WizardProcessor.java
+
+ public static String getProcessFilterAddEdit(){
+ return nvls(sqlProperty.getProperty("process.filter.add.edit"));
+ }
+
+ //ReportDefinition.java
+
+ public static String getPersistReportAdhoc(){
+ return nvls(sqlProperty.getProperty("persist.report.adhoc"));
+ }
+
+ //Globals.java
+ public static String getInitializeRoles(){
+ return nvls(sqlProperty.getProperty("initialize.roles"));
+ }
+
+ public static String getInitializeVersion(){
+ return nvls(sqlProperty.getProperty("initialize.version"));
+ }
+
+ public static String getDBType(){
+ return nvls(raptorProperties.getProperty("db_type"), "oracle");
+ }
+
+ public static boolean isPostgreSQL(){
+ return getDBType().equals("postgresql");
+ }
+ public static boolean isMySQL(){
+ return getDBType().equals("mysql");
+ }
+ public static boolean isOracle(){
+ return getDBType().equals("oracle");
+ }
+
+ //scheduler
+ public static String getAvailableSchedules(){
+ return nvls(sqlProperty.getProperty("scheduler.available.schedules"));
+ }
+
+ public static String getCurrentDateString(){
+ return nvls(sqlProperty.getProperty("current.date.string"));
+ }
+
+ public static String getSchedulerUserEmails(){
+ return nvls(sqlProperty.getProperty("scheduler.user.emails"));
+ }
+
+ public static String getSqlConvertToRaw(){
+ return nvls(sqlProperty.getProperty("convert.to.raw"));
+ }
+
+ public static Properties getRaptorPdfProperties() {
+ return raptorPdfProperties;
+ }
+
+ public static void setRaptorPdfProperties(Properties raptorPdfProperties) {
+ Globals.raptorPdfProperties = raptorPdfProperties;
+ }
+
+ public static Properties getRaptorProperties() {
+ return raptorProperties;
+ }
+
+ public static void setRaptorProperties(Properties raptorProperties) {
+ Globals.raptorProperties = raptorProperties;
+ }
+
+ public static Properties getSqlProperty() {
+ return sqlProperty;
+ }
+
+ public static void setSqlProperty(Properties sqlProperty) {
+ Globals.sqlProperty = sqlProperty;
+ }
+
+ public static String getSequenceNextVal() {
+ return nvls(sqlProperty.getProperty("seq.next.val"));
+ }
+
+ public static String getRandomString() {
+ return nvls(sqlProperty.getProperty("seq.next.val"));
+ }
+
+ public static String getReportUserAccess(){
+ return nvls(sqlProperty.getProperty("report.user.access"));
+ }
+
+ public static String getAddUserAccess(){
+ return nvls(sqlProperty.getProperty("add.user.access"));
+ }
+
+ public static String getUpdateUserAccess(){
+ return nvls(sqlProperty.getProperty("update.user.access"));
+ }
+
+ public static String getRemoveUserAccess(){
+ return nvls(sqlProperty.getProperty("remove.user.access"));
+ }
+
+ public static String getAddRoleAccess(){
+ return nvls(sqlProperty.getProperty("add.role.access"));
+ }
+
+ public static String getUpdateRoleAccess(){
+ return nvls(sqlProperty.getProperty("update.role.access"));
+ }
+
+ public static String getRemoveRoleAccess(){
+ return nvls(sqlProperty.getProperty("remove.role.access"));
+ }
+
+ public static boolean isSystemInitialized() {
+ return systemInitialized;
+ }
+} // Globals
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IAppUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IAppUtils.java
new file mode 100644
index 00000000..e239a3f9
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IAppUtils.java
@@ -0,0 +1,175 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.util.Vector;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+
+public interface IAppUtils {
+ void initializeAppUtils(ServletContext servletContext);
+
+ /** Returns ID of the user currently logged in */
+ String getUserID(HttpServletRequest request);
+
+ /** Obtains user name by ID */
+ String getUserName(HttpServletRequest request);
+ String getUserName(String userId);
+
+ /** Obtains user email by ID */
+ String getUserEmail(HttpServletRequest request);
+ String getUserEmail(String userId);
+
+ /** Obtains user login ID */
+ String getUserLoginId(HttpServletRequest request);
+ String getUserLoginId(String userId);
+
+ /** Obtains user back door log id */
+ String getUserBackdoorLoginId(HttpServletRequest request);
+
+ /** Obtains list of all users (in IdNameValue objects) */
+ Vector getAllUsers(String customizedQuery, String param, boolean isAdmin);
+
+ /** Obtains role name by ID */
+ String getRoleName(String roleId);
+
+ /** Obtains list of all roles (in IdNameValue objects) */
+ Vector getAllRoles(String customizedQuery, String param, boolean isAdmin);
+
+ /** Checks whether the user currently logged in has the specified role */
+ // boolean isUserInRole(HttpServletRequest request, String roleId);
+ /** Checks whether the specified user has the specified role */
+ boolean isUserInRole(HttpServletRequest request, String roleId) throws RaptorException ;
+
+ /**
+ * Returns Vector containing the IDs of all the roles to which the user
+ * currently logged in belongs
+ */
+ // Vector getUserRoles(HttpServletRequest request);
+ /**
+ * Returns Vector containing the IDs of all the roles to which the specified
+ * user belongs
+ */
+ Vector getUserRoles(HttpServletRequest request)throws RaptorException;
+
+ Vector getUserRoles(String userID)throws RaptorException;
+ /** Empties cached lists of app users and roles */
+ void resetUserCache();
+
+ /** Returns the ID of the super role (all powerful) */
+ String getSuperRoleID();
+
+ /** Returns Vector containing the IDs of all Admin roles */
+ Vector getAdminRoleIDs();
+
+ /** Returns Temp folder file path */
+ String getTempFolderPath();
+
+ /** Returns Upload folder file path */
+ String getUploadFolderPath();
+
+ /** Returns Temp folder web URL */
+ String getTempFolderURL();
+
+ /** Returns Upload folder web URL */
+ String getUploadFolderURL();
+
+ /** Returns SMTP server to be used for notifications */
+ String getSMTPServer()throws RaptorException ;
+
+ /** Returns Encrypted SMTP server to be used for notifications */
+ String getEncryptedSMTPServer()throws RaptorException ;
+
+ /**
+ * Returns email address used for the "From" field in the system
+ * notifications
+ */
+ String getDefaultEmailSender() throws RaptorException;
+
+ /** Returns the application error page */
+ String getErrorPage();
+
+ /** Returns the application error page with menu for fusion*/
+ String getErrorPageWMenu();
+
+ /** Returns path to the folder containing JSP pages */
+ String getJspContextPath();
+
+ /** Returns web URL of the folder containing the images */
+ String getImgFolderURL();
+
+ /** Returns web URL to the base raptor folder */
+ String getBaseFolderURL();
+
+ /** Returns the URL used for executing a report - system specific */
+ // String getReportExecuteActionURL();
+ /** Returns the URL used for displaying data record - system specific */
+ // String getDataViewActionURL();
+ /**
+ * Returns the parameter name of the ID value used for displaying data
+ * record - system specific
+ */
+ // String getDataViewActionParam();
+ /** Returns full web URL for direct access to execute a report */
+ String getDirectAccessURL();
+
+ /** Returns the URL of the controller servlet - system specific */
+ String getBaseActionURL();
+
+ /** Returns the base URL of the NG report - system specific */
+ String getBaseActionURLNG();
+
+ /** Returns the URL of the Report Run specifc to AngularJS */
+ String getDrillActionURL();
+
+ /** Returns the primary parameter name - system specific */
+ String getBaseActionParam();
+
+ /** Returns Vector containing menu IDs for quick links */
+ Vector getQuickLinksMenuIDs();
+
+ /** Obtains menu label by ID */
+ String getMenuLabel(String menuId);
+
+ /**
+ * SQL for loading the screen labels and restricting to active cols only for
+ * report columns; can return null => use straight data dictionary For
+ * PRISMS - based on "useFieldTable" config parameter
+ */
+ String getReportDbColsMaskSQL();
+
+ /**
+ * SQL for replacing lookup tables with id and name values; can return null =>
+ * do NOT replace lookups Returns SQL with columns - Table_name, Field_name,
+ * New_Lookup_Table_name, New_Lookup_Id_Field_name,
+ * New_Lookup_Name_Field_name For PRISMS - based on "useFieldTable" config
+ * parameter
+ */
+ String getReportDbLookupsSQL();
+
+ /** Obtains menu label by ID */
+ void processErrorNotification(HttpServletRequest request, RaptorException e);
+
+ /** Returns Excel template PATH web URL */
+ String getExcelTemplatePath();
+} // IAppUtils
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IDbUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IDbUtils.java
new file mode 100644
index 00000000..5ee42719
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/IDbUtils.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.system;
+
+import java.sql.Connection;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+
+public interface IDbUtils {
+ void initializeDbUtils(ServletContext servletContext);
+
+ Connection getConnection() throws ReportSQLException ;
+
+ void clearConnection(Connection con) throws ReportSQLException ;
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RDbUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RDbUtils.java
new file mode 100644
index 00000000..b9753a51
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RDbUtils.java
@@ -0,0 +1,36 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.sql.Connection;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.analytics.error.ReportSQLException;
+
+public interface RDbUtils {
+
+ void initializeDbUtils(ServletContext servletContext);
+
+ Connection getRemoteConnection(String dbKey)throws ReportSQLException;
+
+ void clearConnection(Connection con)throws ReportSQLException;
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RemDbUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RemDbUtils.java
new file mode 100644
index 00000000..733a0a38
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/RemDbUtils.java
@@ -0,0 +1,200 @@
+/*-
+ * ================================================================================
+ * 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.system;
+
+import java.sql.Connection;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+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.util.DataSet;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class RemDbUtils /* implements IDbUtils */{
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RemDbUtils.class);
+
+
+
+ public RemDbUtils() {
+ }
+
+ public static Connection getConnection(String dbKey) throws ReportSQLException {
+ return Globals.getRDbUtils().getRemoteConnection(dbKey);
+ } // getConnection
+
+ public static void clearConnection(Connection con) throws ReportSQLException {
+ try {
+ if ((con != null) && !con.isClosed())
+ Globals.getRDbUtils().clearConnection(con);
+ } catch (SQLException ex) { throw new ReportSQLException(ex.getMessage()); }
+
+ } // clearConnection
+
+ public static Connection startTransaction(String dbKey) throws RaptorException {
+ Connection con = null;
+ try {
+ con = getConnection(dbKey);
+ con.setAutoCommit(false);
+ } catch (SQLException ex) {
+ throw new RaptorRuntimeException (ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new RaptorException (ex2.getMessage(), ex2.getCause());
+ }
+ return con;
+ } // startTransaction
+
+ public static void commitTransaction(Connection con) throws RaptorException {
+ try {
+ con.commit();
+ } catch (SQLException ex) {
+ throw new RaptorRuntimeException (ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new RaptorException (ex2.getMessage(), ex2.getCause());
+ }
+ //clearConnection(con);
+ } // commitTransaction
+
+ public static void rollbackTransaction(Connection con) throws RaptorException {
+ try {
+ con.rollback();
+ clearConnection(con);
+ } catch (SQLException ex) {
+ throw new RaptorRuntimeException (ex.getMessage(), ex.getCause());
+ } catch (Exception ex2 ) {
+ throw new RaptorException (ex2.getMessage(), ex2.getCause());
+ }
+ } // rollbackTransaction
+
+// public static String executeCall(Connection con, String sql, boolean expectResult)
+// throws ReportSQLException, Exception {
+// String result = null;
+//
+// try {
+// if(con.isClosed()) con = getConnection();
+// Log.write("[SQL Call] " + sql, 4);
+// CallableStatement stmt = con.prepareCall(sql);
+// if (expectResult)
+// stmt.registerOutParameter(1, Types.CHAR);
+// stmt.executeUpdate();
+// if (expectResult)
+// result = stmt.getString(1);
+// stmt.close();
+// con.commit();
+// } catch (SQLException e) {
+// throw new ReportSQLException(e.getMessage(), sql);
+// } finally {
+// clearConnection(con);
+// }
+//
+// return result;
+// } // executeCall
+//
+// public static String executeCall(String sql, boolean expectResult)
+// throws ReportSQLException, Exception {
+// Connection con = null;
+// try {
+// con = getConnection();
+// String result = executeCall(con, sql, expectResult);
+// return result;
+// } catch (SQLException e) {
+// throw new ReportSQLException(e.getMessage(), sql);
+// }
+// } // executeCall
+//
+// public static int executeUpdate(Connection con, String sql) throws ReportSQLException, Exception {
+// try {
+// if(con.isClosed()) con = getConnection();
+// Statement stmt = con.createStatement();
+//
+// int rcode = -1;
+// try {
+// Log.write("[SQL Update] " + sql, 4);
+// rcode = stmt.executeUpdate(sql);
+// stmt.close();
+// con.commit();
+// } finally {
+// clearConnection(con);
+// }
+//
+// return rcode;
+// } catch (SQLException e) {
+// throw new ReportSQLException(e.getMessage(), sql);
+// } finally {
+// clearConnection(con);
+// }
+// } // executeUpdate
+//
+// public static int executeUpdate(String sql) throws ReportSQLException, Exception {
+// Connection con = null;
+// try {
+// con = getConnection();
+// int rcode = executeUpdate(con, sql);
+// return rcode;
+// } catch (SQLException e) {
+// throw new ReportSQLException(e.getMessage(), sql);
+// }
+// } // executeUpdate
+
+ public static DataSet executeQuery(Connection con, String sql, String dbKey) throws ReportSQLException, Exception {
+ return executeQuery(con, sql, Integer.MAX_VALUE,dbKey);
+ } // executeQuery
+
+ public static DataSet executeQuery(Connection con, String sql, int maxRowLimit, String dbKey)
+ throws ReportSQLException {
+ try {
+ if (con==null || con.isClosed()) con = getConnection(dbKey);
+ if(con==null) throw new ReportSQLException("Remote Connection not configured for "+ dbKey);
+ Statement stmt = con.createStatement();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[SQL CALL FROM RAPTOR] [SQL] " + sql));
+ ResultSet rs = stmt.executeQuery(sql);
+ DataSet ds = new DataSet(rs, maxRowLimit);
+ if(rs!=null)
+ rs.close();
+ if(stmt!=null)
+ stmt.close();
+
+ return ds;
+ } catch (SQLException e) {
+ throw new ReportSQLException(e.getMessage(), sql, e.getCause());
+ }
+ } // executeQuery
+
+ public static DataSet executeQuery(String sql,String dbKey) throws ReportSQLException {
+ return executeQuery(sql, Integer.MAX_VALUE, dbKey);
+ } // executeQuery
+
+ public static DataSet executeQuery(String sql, int maxRowLimit, String dbKey) throws ReportSQLException{
+ Connection con = null;
+ try {
+ con = getConnection(dbKey);
+ return executeQuery(con, sql, maxRowLimit,dbKey);
+ } catch (ReportSQLException e) {
+ throw new ReportSQLException(e.getMessage(), sql, e.getCause());
+ } finally {
+ clearConnection(con);
+ }
+ } // executeQuery
+
+} // DbUtils
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AntBuild.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AntBuild.java
new file mode 100644
index 00000000..724a07d3
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AntBuild.java
@@ -0,0 +1,66 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion;
+
+import java.io.IOException;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.jar.Attributes;
+import java.util.jar.JarFile;
+import java.util.jar.Manifest;
+
+/**
+ * This class is used to get version and Build information when
+ * user run "java -jar raptor_fusion.jar" command.
+ */
+public class AntBuild {
+
+ public static void main(String[] args) {
+ System.out.println("Jar (raptor_fusion.jar) Information: ");
+ readManifest();
+ }
+
+ public static void readManifest() {
+ try {
+ JarFile jar = new JarFile("./raptor_fusion.jar");
+ Manifest manifest = jar.getManifest();
+
+ Attributes attribs = manifest.getMainAttributes();
+ Iterator it = attribs.entrySet().iterator();
+ while(it.hasNext()) {
+ Map.Entry entry = (Map.Entry) it.next();
+ Attributes.Name attributeName = (Attributes.Name) entry.getKey();
+ String attributeValue = (String) entry.getValue();
+ if (attributeName.toString().equals("Created-By"))
+ System.out.println("JDK Version " + " : " + attributeValue);
+ else if (attributeName.toString().equals("Ant-Version"))
+ System.out.println(attributeName.toString() + " : " + attributeValue);
+ else {
+ if(attributeName.toString().startsWith("Raptor"))
+ System.out.println(attributeName.toString() + " : " + attributeValue);
+ }
+ }
+
+ } catch (IOException e) {
+ System.err.println("Cannot read jar-file manifest: "
+ + e.getMessage());
+ }
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AppUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AppUtils.java
new file mode 100644
index 00000000..008a1d8c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/AppUtils.java
@@ -0,0 +1,363 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion;
+
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+import java.util.StringTokenizer;
+import java.util.Vector;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.config.ConfigLoader;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.system.IAppUtils;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.RaptorAdapter;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;;
+
+public class AppUtils extends org.openecomp.portalsdk.analytics.RaptorObject implements IAppUtils {
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(AppUtils.class);
+
+
+ private static String tempFolderPath = "/artemis/PROJECT1/MSA/databank/WEB-INF/temp/";
+ private static String uploadFolderPath = "/artemis/PROJECT1/MSA/databank/WEB-INF/upload/";
+ private static String tempFolderURL = "temp/";
+ private static String uploadFolderURL = "upload/";
+ private static String SMTPServer = "todo.smtp.server.com";
+ private static String defaultEmailSender = "todo.email.sender.com";
+ private static String errorPage = "error_page";
+ private static String errorPageWMenu = "error_page_wmenu";
+ private static String jspContextPath = "raptor/";
+ private static String imgFolderURL = "raptor/images/";
+ private static String baseFolderURL = "raptor/";
+ //private static String reportExecuteActionURL = "dispatcher?action=raptor&r_action=report.run&c_master=";
+ //private static String dataViewActionURL = "dispatcher?action="; // dispatcher?action=ACTION_ID&c_master=REC_ID
+ //private static String dataViewActionParam = "c_master=";
+ private static String directAccessURL = "http://localhost:8082/databank/dispatcher?direct.access=raptor&r_action=report.run&show=";
+ private static String baseActionURL = "dispatcher?action="; // dispatcher?action=ACTION_ID&c_master=REC_ID or dispatcher?action=raptor&r_action=RAPTOR_ACTION_ID&c_master=REC_ID
+ private static String baseActionURLNG = "report#/"; // dispatcher?action=ACTION_ID&c_master=REC_ID or dispatcher?action=raptor&r_action=RAPTOR_ACTION_ID&c_master=REC_ID
+ private static String drillActionURL = "dispatcher?action="; // dispatcher?action=ACTION_ID&c_master=REC_ID or dispatcher?action=raptor&r_action=RAPTOR_ACTION_ID&c_master=REC_ID
+ private static String baseActionParam = "c_master=";
+ private static String superRoleID = "1";
+ private static Vector adminRoleIDs = new Vector();
+ private static Vector quickLinksMenuIDs = new Vector();
+
+ private static Properties raptorAppProperties;
+
+ private static String encryptedSMTPServer = "";
+ public AppUtils() {}
+
+ public void initializeAppUtils(ServletContext servletContext) {
+ try {
+ Properties appProperties = ConfigLoader.getProperties(servletContext, ConfigLoader.APP_PROPERTIES, Globals.getSystemType());
+ raptorAppProperties = appProperties;
+ tempFolderPath = appProperties.getProperty("temp_folder_path");
+ uploadFolderPath = appProperties.getProperty("upload_folder_path");
+ tempFolderURL = appProperties.getProperty("temp_folder_url");
+ uploadFolderURL = appProperties.getProperty("upload_folder_url");
+ SMTPServer = appProperties.getProperty("smtp_server");
+ encryptedSMTPServer = appProperties.getProperty("encrypted_smtp_server");
+ defaultEmailSender = appProperties.getProperty("default_email_sender");
+ errorPage = appProperties.getProperty("error_page");
+ jspContextPath = appProperties.getProperty("jsp_context_path");
+ imgFolderURL = appProperties.getProperty("img_folder_url");
+ baseFolderURL = appProperties.getProperty("base_folder_url");
+/* reportExecuteActionURL = appProperties.getProperty("report_execute_action_url");
+ dataViewActionURL = appProperties.getProperty("data_view_action_url");
+ dataViewActionParam = appProperties.getProperty("data_view_action_param");*/
+ directAccessURL = appProperties.getProperty("direct_access_url");
+ baseActionURL = appProperties.getProperty("base_action_url");
+ baseActionURLNG = appProperties.getProperty("base_action_url_ng");
+ drillActionURL = appProperties.getProperty("drill_action_url");
+ baseActionParam = appProperties.getProperty("base_action_param");
+ superRoleID = appProperties.getProperty("super_role_id");
+
+ adminRoleIDs.removeAllElements();
+ StringTokenizer st = new StringTokenizer(appProperties.getProperty("admin_role_ids"), ",");
+ while(st.hasMoreTokens())
+ adminRoleIDs.add(st.nextToken());
+
+ quickLinksMenuIDs.removeAllElements();
+ st = new StringTokenizer(appProperties.getProperty("quick_links_menu_ids"), ",");
+ while(st.hasMoreTokens())
+ quickLinksMenuIDs.add(st.nextToken());
+ } catch(Exception e) {
+ logger.error(EELFLoggerDelegate.debugLogger, ("[EXCEPTION ENCOUNTERED IN RAPTOR] AppUtils.initializeAppUtils: Unable to load properties ["+Globals.getSystemType()+"_"+ConfigLoader.APP_PROPERTIES+"]. Exception: "+e.getMessage()));
+ //throw new RuntimeException(e.getMessage());
+ }
+ } // initializeAppUtils
+
+ public static void getFullURL(HttpServletRequest req) {
+ String applicationBase = "";
+ if (applicationBase == null) {
+ applicationBase = req.getScheme() + "://" + req.getServerName() +
+ getPort(req) + req.getContextPath();
+ }
+ }
+
+ private static String getPort(HttpServletRequest req) {
+ if ("http".equalsIgnoreCase(req.getScheme()) && req.getServerPort() != 80 ||
+ "https".equalsIgnoreCase(req.getScheme()) && req.getServerPort() != 443 ) {
+ return (":" + req.getServerPort());
+ } else {
+ return "";
+ }
+ }
+ public String getUserID(HttpServletRequest request) {
+ String pdfAttachmentKey = org.openecomp.portalsdk.analytics.system.AppUtils.getRequestValue(request, "pdfAttachmentKey");
+ String report_email_sent_log_id = org.openecomp.portalsdk.analytics.system.AppUtils.getRequestValue(request, "log_id");
+ boolean isEmailAttachment = false;
+ if(pdfAttachmentKey != null && report_email_sent_log_id !=null)
+ isEmailAttachment = true;
+ if(isEmailAttachment) {
+ return RaptorAdapter.getUserID(org.openecomp.portalsdk.analytics.system.AppUtils.getRequestValue(request, "user_id"));
+ } else
+ return RaptorAdapter.getUserID(request);
+ } // getUserID
+
+ public Vector getAllUsers(String customizedQuery, String param, boolean isAdmin) {
+ Map map = RaptorAdapter.getAllUsers(customizedQuery, param, isAdmin);
+
+ Vector vector = new Vector(map.size());
+ for(Iterator iter=map.keySet().iterator(); iter.hasNext(); ) {
+ Long key = (Long) iter.next();
+ vector.add(new IdNameValue(""+key, (String) map.get(key)));
+ } // for
+
+ return vector;
+ } // getAllUsers
+
+ public String getRoleName(String roleId) {
+ return RaptorAdapter.getRoleName(roleId);
+ } // getRoleName
+
+ public Vector getAllRoles(String customizedQuery, String param, boolean isAdmin) {
+ Map map = RaptorAdapter.getAllRolesUsingCustomizedQuery(customizedQuery, param, isAdmin);
+
+ Vector vector = new Vector(map.size());
+ for(Iterator iter=map.keySet().iterator(); iter.hasNext(); ) {
+ Long key = (Long) iter.next();
+ vector.add(new IdNameValue(""+key, (String) map.get(key)));
+ } // for
+
+ return vector;
+ } // getAllRoles
+
+ public String getUserName(HttpServletRequest request) {
+ return RaptorAdapter.getUserName(request);
+ } // getUserName
+
+ public String getUserName(String userId) {
+ return RaptorAdapter.getUserName(userId);
+ } // getUserName
+
+ public String getUserEmail(String userId) {
+ return RaptorAdapter.getUserEmail(userId);
+ } // getUserEmail
+
+ public String getUserEmail(HttpServletRequest request) {
+ return RaptorAdapter.getUserEmail(request);
+ } // getUserEmail
+
+ public String getUserLoginId(HttpServletRequest request) {
+ return RaptorAdapter.getUserLoginId(request);
+ } // getUserLoginId
+
+ public String getUserLoginId(String userId) {
+ return RaptorAdapter.getUserLoginId(userId);
+ } // getUserLoginId
+
+ public String getUserBackdoorLoginId(HttpServletRequest request) {
+ String pdfAttachmentKey = org.openecomp.portalsdk.analytics.system.AppUtils.getRequestValue(request, "pdfAttachmentKey");
+ String report_email_sent_log_id = org.openecomp.portalsdk.analytics.system.AppUtils.getRequestValue(request, "log_id");
+ boolean isEmailAttachment = false;
+ if(pdfAttachmentKey != null && report_email_sent_log_id !=null)
+ isEmailAttachment = true;
+ if(isEmailAttachment) {
+ return RaptorAdapter.getUserBackdoorLoginId(org.openecomp.portalsdk.analytics.system.AppUtils.getRequestValue(request, "user_id"));
+ } else
+ return RaptorAdapter.getUserBackdoorLoginId(request);
+ } // getUserBackdoorLoginId
+
+ public boolean isUserInRole(HttpServletRequest request, String roleId) {
+ return RaptorAdapter.isCurrentUserInRole(request, roleId);
+ } // isUserInRole
+
+ public Vector getUserRoles(HttpServletRequest request) {
+// Map map = RaptorAdapter.getAllRoles(userId);
+ Set set = RaptorAdapter.getUserRoles(request);
+
+ Vector vector = new Vector(set.size());
+ for(Iterator iter=set.iterator(); iter.hasNext(); ) {
+ Long key = (Long) iter.next();
+ vector.add(""+key);
+ //vector.add(new IdNameValue(""+key, (String) map.get(key)));
+ } // for
+
+ return vector;
+ } // getUserRoles
+
+ public Vector getUserRoles(String userId) {
+ Set set = RaptorAdapter.getUserRoles(userId);
+
+ Vector vector = new Vector(set.size());
+ for(Iterator iter=set.iterator(); iter.hasNext(); ) {
+ Long key = (Long) iter.next();
+ vector.add(""+key);
+ //vector.add(new IdNameValue(""+key, (String) map.get(key)));
+ } // for
+
+ return vector;
+ //return null;
+ } // getUserRoles
+
+ public void resetUserCache() {
+ //org.openecomp.portalsdk.core.web.support.AppUtils.removeObjectFromCache(RaptorAdapter.KEY_USER_ROLES_CACHE);
+ } // resetUserCache
+
+ public String getSuperRoleID(){
+ return superRoleID;
+ } // getSuperRoleID
+
+ public Vector getAdminRoleIDs(){
+ return adminRoleIDs;
+ } // getAdminRoleIDs
+
+
+ public String getTempFolderPath() {
+ return tempFolderPath;
+ } // getTempFolderPath
+
+ public String getUploadFolderPath() {
+ return uploadFolderPath;
+ } // getUploadFolderPath
+
+ public String getTempFolderURL() {
+ return tempFolderURL;
+ } // getTempFolderURL
+
+ public String getUploadFolderURL() {
+ return uploadFolderURL;
+ } // getUploadFolderURL
+
+ public String getSMTPServer() {
+ return SMTPServer;
+ } // getSMTPServer
+
+ public String getDefaultEmailSender() {
+ return defaultEmailSender;
+ } // getDefaultEmailSender
+
+ public String getErrorPage() {
+ return errorPage;
+ } // getErrorPage
+
+ public String getJspContextPath() {
+ return jspContextPath;
+ } // getJspContextPath
+
+ public String getImgFolderURL() {
+ return imgFolderURL;
+ } // getImgFolderURL
+
+ public String getBaseFolderURL() {
+ return baseFolderURL;
+ } // getBaseFolderURL
+
+/* public String getReportExecuteActionURL() {
+ return reportExecuteActionURL;
+ } // getReportExecuteActionURL
+
+ public String getDataViewActionURL() {
+ return dataViewActionURL;
+ } // getDataViewActionURL
+
+ public String getDataViewActionParam() {
+ return dataViewActionParam;
+ } // getDataViewActionParam
+*/
+ public String getDirectAccessURL() {
+ return directAccessURL.trim();
+ } // getDirectAccessURL
+
+ public String getBaseActionURL() {
+ return baseActionURL;
+ } // getBaseActionURL
+
+ public String getBaseActionURLNG() {
+ return baseActionURLNG;
+ } // getBaseActionURLNG
+
+ public String getDrillActionURL() {
+ return drillActionURL;
+ } // getBaseActionURL
+
+ public String getBaseActionParam() {
+ return baseActionParam;
+ } // getBaseActionParam
+
+ public Vector getQuickLinksMenuIDs(){
+ return quickLinksMenuIDs;
+ } // getQuickLinksMenuIDs
+
+ public String getMenuLabel(String menuId) {
+ //return menuId.substring(0, 1).toUpperCase()+menuId.substring(1).toLowerCase();
+ return menuId;
+ } // getMenuLabel
+
+ public String getReportDbColsMaskSQL() {
+ return null;
+/* Example:
+ return "SELECT f.table_name, UPPER(f.column_name) column_name, f.label "+
+ "FROM fields f WHERE f.active_yn = 'Y'"; */
+ } // getReportDbColsMaskSQL
+
+ public String getReportDbLookupsSQL() {
+ return null;
+/* Example:
+ return "SELECT DISTINCT f.table_name, UPPER(f.column_name) column_name, f.lookup_table, f.lookup_id_field, f.lookup_name_field "+
+ "FROM fields f WHERE f.active_yn = 'Y'"; */
+ } // getReportDbLookupsSQL
+
+ public void processErrorNotification(HttpServletRequest request, RaptorException e) {
+ //RaptorAdapter.processErrorNotification(request, e);
+} // processErrorNotification
+
+ public String getErrorPageWMenu() {
+ return errorPageWMenu;
+ }
+
+ public String getExcelTemplatePath() {
+ return nvls(raptorAppProperties.getProperty("excel_template_path"), "");
+ }
+ /**
+ * @return the encryptedSMTPServer
+ */
+ public String getEncryptedSMTPServer() {
+ return encryptedSMTPServer;
+ }
+
+} // AppUtils
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/DbUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/DbUtils.java
new file mode 100644
index 00000000..4638f3e3
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/DbUtils.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.system.fusion;
+
+import java.sql.Connection;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.analytics.system.IDbUtils;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.FusionAdapter;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.RaptorAdapter;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.SpringContext;
+import org.springframework.beans.factory.annotation.Autowired;
+
+
+
+public class DbUtils implements IDbUtils {
+
+ @Autowired
+ public RaptorAdapter raptorAdapter;
+ @Autowired
+ public FusionAdapter fusionAdapter;
+
+ public DbUtils() {}
+
+ public void initializeDbUtils(ServletContext servletContext) {
+ raptorAdapter = (RaptorAdapter)SpringContext.getApplicationContext().getBean("raptorAdapter");
+ } // initializeDbUtils
+
+ public Connection getConnection() {
+ return raptorAdapter.getConnection();
+ } // getConnection
+
+ public void clearConnection(Connection con) {
+ raptorAdapter.releaseConnection(con);
+ } // clearConnection
+
+ public RaptorAdapter getRaptorAdapter() {
+ return raptorAdapter;
+ }
+
+ public void setRaptorAdapter(RaptorAdapter raptorAdapter) {
+ this.raptorAdapter = raptorAdapter;
+ }
+
+ public FusionAdapter getFusionAdapter() {
+ return fusionAdapter;
+ }
+
+ public void setFusionAdapter(FusionAdapter fusionAdapter) {
+ this.fusionAdapter = fusionAdapter;
+ }
+
+
+
+
+
+} // DbUtils
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/RemoteDbUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/RemoteDbUtils.java
new file mode 100644
index 00000000..4f8f7427
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/RemoteDbUtils.java
@@ -0,0 +1,50 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion;
+
+import java.sql.Connection;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.analytics.system.RDbUtils;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.RaptorAdapter;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.SpringContext;
+
+
+
+public class RemoteDbUtils implements RDbUtils{
+
+ private RaptorAdapter raptorAdapter;
+
+
+ public void initializeDbUtils(ServletContext servletContext) {
+ raptorAdapter = (RaptorAdapter)SpringContext.getApplicationContext().getBean("raptorAdapter");
+ } // initializeDbUtils
+
+
+ public Connection getRemoteConnection(String dbKey) {
+ return raptorAdapter.getConnection(dbKey);
+ }
+
+ public void clearConnection(Connection conn) {
+ raptorAdapter.releaseConnection(conn);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/AdapterSessionFactoryContainer.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/AdapterSessionFactoryContainer.java
new file mode 100644
index 00000000..1e2de464
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/AdapterSessionFactoryContainer.java
@@ -0,0 +1,39 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+import java.util.LinkedHashMap;
+
+public class AdapterSessionFactoryContainer {
+
+ private LinkedHashMap sessionFactories;
+
+ public AdapterSessionFactoryContainer() {
+ }
+
+ public LinkedHashMap getSessionFactories() {
+ return sessionFactories;
+ }
+
+ public void setSessionFactories(LinkedHashMap sessionFactories) {
+ this.sessionFactories = sessionFactories;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/DateUtils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/DateUtils.java
new file mode 100644
index 00000000..a9ea0979
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/DateUtils.java
@@ -0,0 +1,287 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+
+import java.io.Serializable;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.TimeZone;
+
+import org.openecomp.portalsdk.core.FusionObject;
+import org.openecomp.portalsdk.core.domain.User;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.openecomp.portalsdk.core.web.support.AppUtils;
+
+
+public class DateUtils implements Serializable, FusionObject{
+
+ public static final String US_PACIFIC = "US/Pacific";
+ public static final String US_MOUNTAIN = "US/Mountain";
+ public static final String US_CENTRAL = "US/Central";
+ public static final String US_EASTERN = "US/Eastern";
+ public static final String US_HAWAII = "US/Hawaii";
+ public static final String US_ALASKA = "US/Alaska";
+
+ //Arizona State has Mountain Time with no Daylight Savings
+ public static final String US_ARIZONA = "America/Phoenix";
+
+ private static final String DB_DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
+ private static final String GET_CURRENT_DATE = "getCurrentDate";
+
+ private static DataAccessService dataAccessService;
+
+ public static DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ /**
+ * Parses a date value with given pattern,
+ * to return a Date Object
+ *
+ * @param dateValue
+ * @param inPattern
+ * @return Date Object
+ * @throws Exception
+ *
+ */
+ public static Date parseDate(String dateValue,String inPattern) throws Exception{
+ return parseDate(dateValue,inPattern,null);
+ }
+
+ /**
+ * Parses a date value with the given pattern for the specific TimeZone,
+ * to return a Date Object
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param currentTimeZone
+ * @return Date Object
+ * @throws Exception
+ *
+ */
+ public static Date parseDate(String dateValue,String inPattern,
+ String currentTimeZone) throws Exception{
+ DateFormat df = new SimpleDateFormat(inPattern);
+ if(currentTimeZone !=null && !(currentTimeZone.trim().equals(""))){
+ df.setTimeZone(TimeZone.getTimeZone(currentTimeZone));
+ }
+ Date date = df.parse(dateValue);
+ return date;
+ }
+
+ /**
+ * Parses a date value with the given pattern for the specific User(in User TimeZone),
+ * to return a Date Object
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param userId
+ * @return Date Object
+ * @throws Exception
+ *
+ */
+ public static Date parseUserDate(String dateValue, String inPattern, Long userId) throws Exception{
+ User user = (User)getDataAccessService().getDomainObject(User.class, userId, null);
+
+ String userTimeZone = null;
+ Long timezoneId = user.getTimeZoneId();
+
+ if (timezoneId != null) {
+ userTimeZone = AppUtils.getLookupValueByLabel(timezoneId.toString(), "fn_lu_timezone", "timezone_id", "timezone_value");
+ }
+
+ return parseDate(dateValue,inPattern,userTimeZone);
+ }
+
+ /**
+ * Formats a given date object to the desired pattern
+ *
+ * @param date
+ * @param outPattern
+ * @return Formatted date value
+ * @throws Exception
+ */
+ public static String formatDate(Date date,String outPattern)throws Exception{
+ return formatDate(date,outPattern,null);
+ }
+
+ /**
+ * Formats a date value with the given pattern into a date value with the desired pattern
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param outPattern
+ * @return Formatted date value
+ * @throws Exception
+ *
+ */
+ public static String formatDate(String dateValue,String inPattern,
+ String outPattern) throws Exception{
+ return formatDate(dateValue,inPattern,null,outPattern,null);
+ }
+
+ /**
+ * Formats a given date object to the desired pattern for the TimeZone provided
+ * @param date
+ * @param outPattern
+ * @param requiredTimeZone
+ * @return Formatted date value
+ * @throws Exception
+ */
+ public static String formatDate(Date date,String outPattern,
+ String requiredTimeZone) throws Exception{
+ DateFormat df = new SimpleDateFormat(outPattern);
+ if(requiredTimeZone != null && !requiredTimeZone.trim().equals("")){
+ df.setTimeZone(TimeZone.getTimeZone(requiredTimeZone));
+ }
+ return df.format(date);
+ }
+
+ /**
+ * Formats a date value with the given pattern
+ * into a date value with the desired pattern for the TimeZone provided
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param outPattern
+ * @param requiredTimeZone
+ * @return Formatted date value
+ * @throws Exception
+ *
+ */
+ public static String formatDate(String dateValue,String inPattern,
+ String outPattern,String requiredTimeZone) throws Exception{
+ return formatDate(dateValue,inPattern,null,outPattern,requiredTimeZone);
+ }
+
+ /**
+ * Formats a date value with the given pattern for a specific TimeZone,
+ * into a date value with the desired pattern for the TimeZone provided
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param currentTimeZone
+ * @param outPattern
+ * @param requiredTimeZone
+ * @return Formatted date value
+ * @throws Exception
+ *
+ */
+ public static String formatDate(String dateValue,String inPattern,String currentTimeZone,
+ String outPattern,String requiredTimeZone) throws Exception{
+ Date date = parseDate(dateValue,inPattern,currentTimeZone);
+ return formatDate(date,outPattern,requiredTimeZone);
+ }
+
+ /**
+ * Formats a date value with the given pattern, for a specific User(in User TimeZone),
+ * into a date value with the desired pattern for the TimeZone provided
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param userId
+ * @param outPattern
+ * @param requiredTimeZone
+ * @return Formatted date value
+ * @throws Exception
+ *
+ */
+ public static String formatUserDate(String dateValue,String inPattern, Long userId,String outPattern,String requiredTimeZone) throws Exception{
+ User user = (User)getDataAccessService().getDomainObject(User.class, userId, null);
+
+ String userTimeZone = null;
+ Long timezoneId = user.getTimeZoneId();
+
+ if (timezoneId != null) {
+ userTimeZone = AppUtils.getLookupValueByLabel(timezoneId.toString(), "fn_lu_timezone", "timezone_id", "timezone_value");
+ }
+
+ return formatDate(dateValue,inPattern,userTimeZone,outPattern,requiredTimeZone);
+ }
+
+ /**
+ * Formats a date value with a given pattern for a specific User(User TimeZone),
+ * into a date value with the desired pattern for Database TimeZone
+ *
+ * @param dateValue
+ * @param inPattern
+ * @param userId
+ * @param outPattern
+ * @return Formatted date value
+ * @throws Exception
+ *
+ */
+ public static String formatUserDateForDBTimeZone(String dateValue,String inPattern, Long userId,String outPattern) throws Exception{
+ User user = (User)getDataAccessService().getDomainObject(User.class, userId, null);
+
+ String userTimeZone = null;
+ Long timezoneId = user.getTimeZoneId();
+
+ /*if (timezoneId != null) {
+ userTimeZone = AppUtils.getLookupValueByLabel(timezoneId.toString(), "fn_lu_timezone", "timezone_id", "timezone_value");
+ }*/
+
+ String dbTimeZone = SystemProperties.getProperty(SystemProperties.DATABASE_TIME_ZONE);
+
+ return formatDate(dateValue,inPattern,userTimeZone,outPattern,dbTimeZone);
+ }
+
+ /**
+ * Get the current database Date/Time
+ * @return Date object
+ */
+ public static Date getCurrentDBDate()throws Exception{
+ String dbTimeZone = SystemProperties.getProperty(SystemProperties.DATABASE_TIME_ZONE);
+ List results = (List)getDataAccessService().executeNamedQuery(GET_CURRENT_DATE, null, null);
+ return parseDate(((Object[])results.get(0))[0]+" "+((Object[])results.get(0))[1],DB_DATE_FORMAT,dbTimeZone);
+ }
+
+ /**
+ * Get the current date value formatted for the User's TimeZone in the desired pattern
+ *
+ * @param outPattern
+ * @param userId
+ * @return Date value
+ * @throws Exception
+ */
+ public static String getCurrentDBDateForUser(String outPattern,Long userId)throws Exception{
+ User user = (User)getDataAccessService().getDomainObject(User.class, userId, null);
+
+ String userTimeZone = null;
+ Long timezoneId = user.getTimeZoneId();
+
+ /*if (timezoneId != null) {
+ userTimeZone = AppUtils.getLookupValueByLabel(timezoneId.toString(), "fn_lu_timezone", "timezone_id", "timezone_value");
+ }*/
+
+ Date dbDate = getCurrentDBDate();
+
+ return formatDate(dbDate,outPattern,userTimeZone);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/FusionAdapter.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/FusionAdapter.java
new file mode 100644
index 00000000..33b6ec2d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/FusionAdapter.java
@@ -0,0 +1,135 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+import java.sql.Connection;
+import java.util.Map;
+
+import javax.servlet.ServletContext;
+
+import org.openecomp.portalsdk.core.FusionObject;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import com.mchange.v2.c3p0.ComboPooledDataSource;
+
+public class FusionAdapter implements FusionObject {
+
+ public static final String LOCAL_SESSION_FACTORY_KEY = "local";
+
+
+ private ComboPooledDataSource dataSource;
+ private Map<String,ComboPooledDataSource> dataSourceMap;
+
+ //private SessionFactory sessionFactory;
+ private ServletContext servletContext;
+
+ // private static Connection connection = null;
+
+ //private static AdapterSessionFactoryContainer sessionFactoryContainer;
+
+
+ public FusionAdapter() {
+ }
+
+
+ public ServletContext getServletContext() {
+ return servletContext;
+ }
+
+ public void setServletContext(ServletContext servletContext) {
+ this.servletContext = servletContext;
+ }
+
+ // public static AdapterSessionFactoryContainer getSessionFactoryContainer() {
+ // return sessionFactoryContainer;
+ // }
+
+ //public static LinkedHashMap getSessionFactories() {
+ // return getSessionFactoryContainer().getSessionFactories();
+ //}
+
+
+ //public void setSessionFactoryContainer(AdapterSessionFactoryContainer sessionFactoryContainer) {
+ // this.sessionFactoryContainer = sessionFactoryContainer;
+ //}
+
+
+ /** Gets connection to the database **/
+ public Connection getConnection() {
+ //Session session = sessionFactory.getCurrentSession();
+ Connection connection = null;
+ try {
+ connection = getDataSource().getConnection();
+ } catch(Exception ex) {
+ ex.printStackTrace();
+ }
+
+ return connection;
+ }
+
+
+ /** Gets connection to the database indicated via the session factory key **/
+ public synchronized Connection getConnection(String schemaId) {
+ Connection connection = null;
+ try {
+ connection = getDataSourceMap().get(schemaId).getConnection();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+
+ return connection;
+ }
+
+
+ /** Releases connection to the database **/
+ public void releaseConnection(Connection conn) {
+ try {
+ conn.close();
+ //logger.debug("releasing connection from adapter...");
+ }
+ catch (Exception e) {
+ //logger.error("Error while closing the connection.");
+ e.printStackTrace();
+ }
+ }
+
+
+ public ComboPooledDataSource getDataSource() {
+ return dataSource;
+ }
+
+
+ @Autowired
+ public void setDataSource(ComboPooledDataSource dataSource) {
+ this.dataSource = dataSource;
+ }
+
+ public Map<String,ComboPooledDataSource> getDataSourceMap() {
+ if(dataSourceMap==null)
+ dataSourceMap = (Map<String,ComboPooledDataSource>)SpringContext.getApplicationContext().getBean("dataSourceMap");
+
+ return dataSourceMap;
+ }
+
+ public void setdataSourceMap(Map<String,ComboPooledDataSource> dataSourceMap) {
+ this.dataSourceMap = dataSourceMap;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/IdName.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/IdName.java
new file mode 100644
index 00000000..5b4af3f9
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/IdName.java
@@ -0,0 +1,59 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+import org.openecomp.portalsdk.core.domain.support.DomainVo;
+
+/**
+ * <p>IdName.java</p>
+ * <p>Represents a id/name data object.</p>
+*/
+public class IdName extends DomainVo {
+
+ private String name;
+ private Long id;
+
+ public IdName() {}
+
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public int compareTo(Object obj){
+ String c1 = getName();
+ String c2 = ((IdName)obj).getName();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Item.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Item.java
new file mode 100644
index 00000000..71663bc2
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Item.java
@@ -0,0 +1,55 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+
+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/system/fusion/adapter/Lookup.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Lookup.java
new file mode 100644
index 00000000..ac6cd16c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/Lookup.java
@@ -0,0 +1,85 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+
+import java.io.Serializable;
+
+import org.openecomp.portalsdk.core.domain.FusionVo;
+import org.openecomp.portalsdk.core.domain.support.NameValueId;
+
+
+
+public class Lookup extends FusionVo implements Serializable {
+
+ private NameValueId nameValueId = new NameValueId();
+
+ public Lookup() {}
+
+ public Lookup(String label, String value) {
+ this();
+ setLabel(label);
+ setValue(value);
+ }
+
+ public String getValue() {
+ return getNameValueId().getVal();
+ }
+
+ public String getLabel() {
+ return getNameValueId().getLab();
+ }
+
+ public void setValue(String value) {
+ getNameValueId().setVal(value);
+ }
+
+ public void setLabel(String label) {
+ getNameValueId().setLab(label);
+ }
+
+ public NameValueId getNameValueId() {
+ return nameValueId;
+ }
+
+ public void setNameValueId(NameValueId nameValueId) {
+ this.nameValueId = nameValueId;
+ }
+
+ // required by ZK for to set the selectedItems of Listboxes (used heavily for <select>-style drop-downs)
+ public int hashCode() {
+ int hash = getValue().hashCode();
+ hash = hash + getLabel().hashCode();
+
+ return hash;
+ }
+
+ public boolean equals( Object obj ) {
+ boolean equivalent = false;
+
+ Lookup lookup = (Lookup)obj;
+ if( lookup.getValue().equals(getValue()) && lookup.getLabel().equals(getLabel())) {
+ equivalent = true;
+ }
+
+ return equivalent;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/RaptorAdapter.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/RaptorAdapter.java
new file mode 100644
index 00000000..99cc0272
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/RaptorAdapter.java
@@ -0,0 +1,368 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.adapter;
+
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.core.domain.Menu;
+import org.openecomp.portalsdk.core.domain.MenuData;
+import org.openecomp.portalsdk.core.domain.Role;
+import org.openecomp.portalsdk.core.domain.RoleFunction;
+import org.openecomp.portalsdk.core.domain.User;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.openecomp.portalsdk.core.util.SystemProperties;
+import org.openecomp.portalsdk.core.web.support.UserUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+@Service("raptorAdapter")
+public class RaptorAdapter extends FusionAdapter {
+
+ @Autowired
+ private static DataAccessService dataAccessService;
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorAdapter.class);
+
+
+ public static final int RAPTOR_USER_ID = 20000; // RAPTOR system user id (for auditing purposes)
+ public static final String RAPTOR_CONTROLLER_CLASSNAME = "org.openecomp.portalsdk.analytics.controller.Controller";
+ public static final String KEY_USER_ROLES_CACHE = "userRoles";
+
+ public void initializeRaptor() {
+ org.openecomp.portalsdk.analytics.config.ConfigLoader.setConfigFilesPath(SystemProperties.getProperty(SystemProperties.RAPTOR_CONFIG_FILE_PATH));
+ org.openecomp.portalsdk.analytics.system.Globals.initializeSystem(getServletContext());
+ }
+
+
+ /** Returns ID of the user currently logged in */
+ public static String getUserID(HttpServletRequest request) {
+ return String.valueOf(UserUtils.getUserId(request));
+ //return null;
+ }
+
+ public static String getUserID(String user_id) {
+ return user_id;
+ }
+
+
+ public static String getUserBackdoorLoginId(HttpServletRequest request) {
+ if(AppUtils.getRequestNvlValue(request, "login_id").length()>0) return AppUtils.getRequestNvlValue(request, "login_id");
+ return String.valueOf(UserUtils.getUserSession(request).getLoginId());
+ }
+
+ public static String getUserBackdoorLoginId(String user_id) {
+ return getUserLoginId(user_id);
+ }
+
+ /** Obtains user name by ID */
+ public static String getUserName(String userId) {
+ Map<String, Long> params = new HashMap<String, Long>();
+ params.put("user_id", new Long(userId));
+
+ List list = getDataAccessService().executeNamedQuery("getUserNameById", params, null);
+
+ String firstName = "";
+ String lastName = "";
+
+ if (list != null) {
+ if (!list.isEmpty()) {
+ Object[] user = (Object[]) list.get(0);
+ firstName = (String) user[0]; // firstName scalar
+ lastName = (String) user[1]; // lastName scalar
+ }
+ }
+
+ return lastName + ", " + firstName;
+ }
+
+ public static String getUserName(HttpServletRequest request) {
+ User user = UserUtils.getUserSession(request);
+ return user.getLastName() + ", " + user.getFirstName();
+ }
+
+ public static String getUserEmail(String userId) {
+ Map<String, Long> params = new HashMap<String, Long>();
+ params.put("user_id", new Long(userId));
+ List list = getDataAccessService().executeNamedQuery("getUserEmail", params, null);
+ String email = "";
+ if (list != null && !list.isEmpty())
+ email = (String) list.get(0);
+ return email;
+ }
+
+ public static String getUserEmail(HttpServletRequest request) {
+ User user = UserUtils.getUserSession(request);
+ return user.getEmail();
+ }
+
+ public static String getUserLoginId(String userId) {
+
+ String loginId = "";
+ try{
+ List list = getDataAccessService().getList(User.class, " where user_id = " + userId, null, null);
+ if (list != null) {
+ if (!list.isEmpty()) {
+ User user = (User)list.get(0);
+ loginId = user.getLoginId(); // firstName scalar
+ }
+ }
+ }catch(Exception e){
+ logger.error(EELFLoggerDelegate.debugLogger, ("error while getting login id : Exception" + e.getMessage()));
+ }
+ return loginId;
+ }
+
+
+ public static String getUserLoginId(HttpServletRequest request) {
+ User user = UserUtils.getUserSession(request);
+ return user.getLoginId();
+ }
+
+ /** Obtains list of all users (in IdNameValue objects) */
+ public static Map<Long, String> getAllUsers(String customizedQuery, String param, boolean isAdmin) {
+ List users = null;
+ Map<Long, String> map = new LinkedHashMap<Long, String>();
+
+ if(customizedQuery.length()>0 && !isAdmin) {
+
+ users = getDataAccessService().executeSQLQuery(customizedQuery, IdName.class, null);
+
+ if (users != null) {
+ Iterator i = users.iterator();
+ while (i.hasNext()) {
+ IdName item = (IdName)i.next();
+ map.put(item.getId(), item.getName());
+ }
+ }
+
+ } else {
+ users = getDataAccessService().executeNamedQuery("getAllUsers", null, null);
+ if (users != null) {
+ Iterator i = users.iterator();
+ while (i.hasNext()) {
+ Object[] user = (Object[])i.next();
+ Long id = (Long)user[0]; // id scalar
+ String firstName = (String)user[1]; // firstName scalar
+ String lastName = (String)user[2]; // lastName scalar
+ map.put(id, lastName + ", " + firstName);
+ }
+ }
+ }
+ return map;
+ }
+
+ /** Obtains role name by ID */
+ public static String getRoleName(String roleId) {
+ Map<String, Long> params = new HashMap<String, Long>();
+ params.put("role_id", new Long(roleId));
+
+ List list = getDataAccessService().executeNamedQuery("getRoleNameById", params, null);
+
+ String roleName = "";
+
+ if (list != null) {
+ if (!list.isEmpty()) {
+ roleName = (String) list.get(0); // name scalar
+ }
+ }
+
+ return roleName;
+ }
+
+ /** Obtains list of all roles (in IdNameValue objects) */
+ public static Map<Long, String> getAllRolesUsingCustomizedQuery(String customizedQuery, String param, boolean isAdmin) {
+ List roles = null;
+
+ Map<Long, String> map = new LinkedHashMap<Long, String>();
+
+ if(customizedQuery.length()>0 && !isAdmin) {
+
+ roles = getDataAccessService().executeSQLQuery(customizedQuery, IdName.class, null);
+
+ if (roles != null) {
+ Iterator i = roles.iterator();
+ while (i.hasNext()) {
+ IdName item = (IdName)i.next();
+ map.put(item.getId(), item.getName());
+ }
+ }
+ } else {
+
+ roles = getDataAccessService().executeNamedQuery("getAllRoles", null, null);
+
+ if (roles != null) {
+ Iterator i = roles.iterator();
+ while (i.hasNext()) {
+ Object[] role = (Object[])i.next();
+ Long id = (Long)role[0]; // id scalar
+ String name = (String)role[1]; // firstName scalar
+ map.put(id, name);
+ }
+ }
+ }
+
+ return map;
+ }
+
+ public static Set getUserRoles(HttpServletRequest request) {
+ return UserUtils.getRoles(request).keySet();
+ }
+
+ public static Set getUserRoles(String userId) {
+ Set userRoles = new HashSet<Long>();
+// Map usersRolesMap = new LinkedHashMap<Long, Set>();
+// Map<String, Long> params = new HashMap<String, Long>();
+//
+// params.put("user_id", new Long(userId));
+//
+// List usersRolesList = getDataAccessService().executeNamedQuery("getAllUsersRoles", params, null);
+// Iterator i = usersRolesList.iterator();
+// while (i.hasNext()) {
+// Object[] userRole = (Object[]) i.next();
+//
+// Long roleId = (Long) userRole[1]; // role id scalar
+// userRoles.add(roleId);
+//
+// }
+ userRoles = getActiveUsersRoleIds(new Long(userId));
+
+
+ return userRoles;
+ }
+
+ /** this is used to get role for the current user. **/
+ public static synchronized boolean isCurrentUserInRole(HttpServletRequest request, String roleId) {
+ HttpSession session = request.getSession(false);
+ if(session!=null && session.getAttribute(SystemProperties.getProperty(SystemProperties.USER_ATTRIBUTE_NAME))!=null)
+ return UserUtils.hasRole(request, roleId);
+ else
+ return false;
+ }
+
+ // public static void processErrorNotification(HttpServletRequest request, Exception e) {
+ //org.openecomp.portalsdk.core.web.support.AppUtils.processError(e, logger, request);
+ //}
+
+ /** Obtains menu label by ID */
+ public static String getMenuLabel(String menuId) {
+ return ((Menu) getDataAccessService().getDomainObject(MenuData.class, new Long(menuId), null)).getLabel();
+ }
+
+ public static String formatUserDateForDBTimeZone(String dateValue,String inPattern,
+ Long userId, String outPattern)throws Exception{
+ return DateUtils.formatUserDateForDBTimeZone(dateValue,inPattern,userId,outPattern);
+ }
+
+ public static String getCurrentDBDateForUser(String inPattern,Long userId)throws Exception{
+ return DateUtils.getCurrentDBDateForUser(inPattern, userId);
+ }
+
+ public static Set<Long> getActiveUsersRoleIds(Long userId) {
+ Set<Role> allActiveUserRoles = getActiveUserRoles(userId);
+ Iterator<Role> allActiveUserRolesIterator = allActiveUserRoles.iterator();
+ Set<Long> allActiveUserRoleIds = new TreeSet<Long>();
+ while(allActiveUserRolesIterator.hasNext()){
+ Role role = allActiveUserRolesIterator.next();
+ allActiveUserRoleIds.add(role.getId());
+ }
+
+ return allActiveUserRoleIds;
+ }
+
+ public static Set<Long> getActiveUserRoleIds(Long userId) {
+ Set<Role> allActiveUserRoles = getActiveUserRoles(userId);
+ Iterator<Role> allActiveUserRolesIterator = allActiveUserRoles.iterator();
+ Set<Long> allActiveUserRoleIds = new TreeSet<Long>();
+ while(allActiveUserRolesIterator.hasNext()){
+ Role role = allActiveUserRolesIterator.next();
+ allActiveUserRoleIds.add(role.getId());
+ }
+
+ return allActiveUserRoleIds;
+ }
+
+ public static Set<RoleFunction> getActiveRoleFunctions(Long userId) {
+ Set<Role> allActiveUserRoles = getActiveUserRoles(userId);
+ Iterator<Role> allActiveUserRolesIterator = allActiveUserRoles.iterator();
+ Set<RoleFunction> allActiveRoleFunctions = new TreeSet<RoleFunction>();
+ while(allActiveUserRolesIterator.hasNext()){
+ Role role = allActiveUserRolesIterator.next();
+ allActiveRoleFunctions.addAll(role.getRoleFunctions());
+ }
+
+ return allActiveRoleFunctions;
+ }
+
+ public static Set<Role> getActiveUserRoles(Long userId) {
+ User user = (User)getDataAccessService().getDomainObject(User.class,userId,null);
+ Set<Role> allActiveUserRoles = new TreeSet<Role>();
+ allActiveUserRoles.addAll(user.getRoles());
+ Iterator<Role> userRolesIterator = user.getRoles().iterator();
+ while(userRolesIterator.hasNext()){
+ getAllChildRoles( userRolesIterator.next(),allActiveUserRoles);
+ }
+
+ Iterator<Role> allActiveUserRolesIterator = allActiveUserRoles.iterator();
+ while(allActiveUserRolesIterator.hasNext()){
+ Role role = allActiveUserRolesIterator.next();
+ if(!role.getActive()){
+ allActiveUserRolesIterator.remove();
+ }
+ }
+
+ return allActiveUserRoles;
+ }
+
+ public static Set<Role> getAllChildRoles(Role role, Set<Role> allchildRoles) {
+ Set<Role> childRoles = role.getChildRoles();
+ allchildRoles.addAll(childRoles);
+ Iterator<Role> childRolesIterator = childRoles.iterator();
+ while (childRolesIterator.hasNext()) {
+ getAllChildRoles(childRolesIterator.next(),allchildRoles);
+ }
+ return allchildRoles;
+ }
+
+
+ public static DataAccessService getDataAccessService() {
+ return org.openecomp.portalsdk.core.web.support.AppUtils.getDataAccessService();
+ }
+
+
+ public static void setDataAccessService(DataAccessService dataAccessService) {
+ dataAccessService = dataAccessService;
+ }
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/SpringContext.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/SpringContext.java
new file mode 100644
index 00000000..1d46290a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/adapter/SpringContext.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.system.fusion.adapter;
+
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.stereotype.Component;
+
+@Component("springContext")
+public class SpringContext implements ApplicationContextAware {
+ private static ApplicationContext context;
+
+ public void setApplicationContext(ApplicationContext context) throws BeansException {
+ this.context = context;
+ }
+ public static ApplicationContext getApplicationContext() {
+ return context;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/controller/FileServletController.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/controller/FileServletController.java
new file mode 100644
index 00000000..203ee9cc
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/controller/FileServletController.java
@@ -0,0 +1,206 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.controller;
+/**
+ * Raptor Blob Extract Servlet
+ *
+ */
+
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.sql.Blob;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.springframework.web.servlet.ModelAndView;;
+
+
+public class FileServletController {
+
+ private DataAccessService dataAccessService;
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(FileServletController.class);
+
+
+ public ModelAndView handleRequestInternal(HttpServletRequest request,
+ HttpServletResponse response) throws Exception {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("FileServletController:: f=" + request.getParameter("f")));
+
+ String fname = request.getParameter("f");
+
+ try {
+ Map params = new HashMap();
+ params.put("fname", fname);
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("executing query: select file_blob from cr_report_file_history where file_name = :"
+ + fname));
+
+ List<Object> fileFromDB = (List<Object>) getDataAccessService().executeNamedQuery("getFileWithName", params, null);
+
+ byte[] allBytesInBlob = null;
+
+ if (fileFromDB != null && fileFromDB.size() > 0) {
+
+ logger.debug(EELFLoggerDelegate.debugLogger, ("reading file blob from DB..."));
+ try {
+
+ /*for weblogic setup
+ * if(Globals.isWeblogicServer()) {
+ weblogic.jdbc.vendor.oracle.OracleThinBlob aBlob = (weblogic.jdbc.vendor.oracle.OracleThinBlob) ((org.hibernate.lob.SerializableBlob) fileFromDB
+ .get(0)).getWrappedBlob();
+ InputStream inBlob = ((java.sql.Blob) aBlob).getBinaryStream();
+ ByteArrayOutputStream baos = new ByteArrayOutputStream();
+ byte[] buf = new byte[1024];
+ int n = 0;
+ while ((n=inBlob.read(buf))>=0) {
+ baos.write(buf, 0, n);
+ }
+ inBlob.close();
+ allBytesInBlob = baos.toByteArray();
+ } else { */
+ /* works in Hinernate3 [ oracle.sql.BLOB aBlob = (oracle.sql.BLOB) ((org.hibernate.lob.SerializableBlob) fileFromDB
+ .get(0)).getWrappedBlob();
+ allBytesInBlob = aBlob.getBytes(1, (int) aBlob.length()); ] */
+ // }
+
+ Object fileFromDBType = fileFromDB.get(0);
+ if(fileFromDBType instanceof byte[] ) // postgres
+ allBytesInBlob = (byte[]) fileFromDB.get(0);
+ else if (fileFromDBType instanceof Blob ) // oracle
+ allBytesInBlob = ((Blob) fileFromDB.get(0)).getBytes(1, (int) ((Blob) fileFromDB.get(0)).length());
+
+
+
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.debugLogger, ("An exception has occurred: " + e.getMessage()));
+ throw (e);
+ }
+
+ } else {
+ logger.error(EELFLoggerDelegate.debugLogger, ("ERROR: No BLOB returned from DB..."));
+ throw (new Exception("ERROR: No BLOB returned from DB..."));
+ }
+
+ serveFile(response, allBytesInBlob, fname);
+ return null;
+ } catch (Exception e) {
+ logger.error(EELFLoggerDelegate.debugLogger, ("Exception occurred..." + e.getMessage()));
+ Map<String, Object> errView = new HashMap<String, Object>();
+ errView.put("error", "The requested resource was not found.");
+ //return new ModelAndView(getExceptionView(), "model", errView);
+ return null;
+ }
+
+ }
+
+ private void serveFile(HttpServletResponse response, File inFile)
+ throws Exception {
+ OutputStream os = null;
+ InputStream is = null;
+ try {
+ response.reset();
+ is = new BufferedInputStream(new FileInputStream(inFile));
+ os = new BufferedOutputStream(response.getOutputStream());
+ response.setContentLength((int) inFile.length());
+ response.setContentType("application/octet-stream");
+ response.setHeader("Content-disposition", "attachment; filename=\""
+ + inFile.getName() + "\"");
+ copyStream(is, os);
+ os.flush();
+ } catch (Exception ex) {
+ if (os == null)
+ throw new Exception("Could not open output stream for file ");
+ if (is == null)
+ throw new Exception("Could not open input stream for file ");
+ } finally {
+ if (os != null) {
+ os.close();
+ }
+ if (is != null)
+ is.close();
+ }
+ }
+
+ private void serveFile(HttpServletResponse response, byte[] outStream,
+ String name) throws Exception {
+ OutputStream os = null;
+ InputStream is = null;
+ try {
+ response.reset();
+ response.setContentLength((int) outStream.length);
+ response.setContentType("application/octet-stream");
+ response.setHeader("Content-disposition", "attachment; filename=\""
+ + name + "\"");
+ copyStream(response, outStream);
+ } catch (Exception ex) {
+ if (os == null)
+ throw new Exception("Could not open output stream for file ");
+ if (is == null)
+ throw new Exception("Could not open input stream for file ");
+ } finally {
+ if (os != null) {
+ os.close();
+ }
+ if (is != null)
+ is.close();
+ }
+ }
+
+ private int copyStream(InputStream in, OutputStream out) throws IOException {
+ int bytes, totalBytes = 0;
+
+ byte[] b = new byte[4096];
+
+ while ((bytes = in.read(b, 0, b.length)) != -1) {
+ totalBytes += bytes;
+ out.write(b, 0, bytes);
+ }
+ return totalBytes;
+ }
+
+ private int copyStream(HttpServletResponse response, byte[] outStream)
+ throws IOException {
+
+ OutputStream os = new BufferedOutputStream(response.getOutputStream());
+ os.write(outStream);
+ os.flush();
+ return outStream.length;
+ }
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/CR_Report.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/CR_Report.java
new file mode 100644
index 00000000..9f6ed7d6
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/CR_Report.java
@@ -0,0 +1,306 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.domain;
+
+
+import java.util.Date;
+
+import org.openecomp.portalsdk.core.domain.User;
+import org.openecomp.portalsdk.core.domain.support.DomainVo;;
+
+/**
+ * <p>CR_Report.java</p>
+ * <p>Represents a RAPTOR report data object.</p>
+ *
+ * @version 1.0
+ */
+public class CR_Report extends DomainVo {
+
+ private String title;
+ private String descr;
+ private String public_yn;
+ //private String report_xml;
+ private Date createDate;
+ private Date maintDate;
+ private String menuId;
+ private String menuApproved_YN;
+ private User ownerId;
+ private Long folderId;
+ private String dashboard_type_YN;
+ private String dashboard_yn;
+ private User createId;
+ private User maintId;
+
+/*
+ //New Buttons
+ private String copyImagePath = "/static/fusion/raptor/img/cross-small.png" ;
+ private String editImagePath = "/static/fusion/raptor/img/pencil-small.png" ;
+ private String deleteImagePath = "/static/fusion/raptor/img/DeleteCross-16x16.png" ;
+ private String scheduleImagePath = "/static/fusion/raptor/img/Calendar-16x16.png" ;
+ private String runImagePath = "/static/fusion/raptor/img/tick-small.png" ;
+
+*/
+ //private Set reportAccess = new TreeSet();
+
+ public CR_Report() {}
+
+
+
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+
+
+
+ /**
+ * @param title the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+
+
+ /**
+ * @return the descr
+ */
+ public String getDescr() {
+ return descr;
+ }
+
+
+
+ /**
+ * @param descr the descr to set
+ */
+ public void setDescr(String descr) {
+ this.descr = descr;
+ }
+
+
+
+ /**
+ * @return the public_yn
+ */
+ public String getPublic_yn() {
+ return public_yn;
+ }
+
+
+
+ /**
+ * @param public_yn the public_yn to set
+ */
+ public void setPublic_yn(String public_yn) {
+ this.public_yn = public_yn;
+ }
+
+
+ /**
+ * @return the createDate
+ */
+ public Date getCreateDate() {
+ return createDate;
+ }
+
+
+
+ /**
+ * @param createDate the createDate to set
+ */
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+
+ /**
+ * @return the maintDate
+ */
+ public Date getMaintDate() {
+ return maintDate;
+ }
+
+
+
+ /**
+ * @param maintDate the maintDate to set
+ */
+ public void setMaintDate(Date maintDate) {
+ this.maintDate = maintDate;
+ }
+
+
+
+ /**
+ * @return the menuId
+ */
+ public String getMenuId() {
+ return menuId;
+ }
+
+
+
+ /**
+ * @param menuId the menuId to set
+ */
+ public void setMenuId(String menuId) {
+ this.menuId = menuId;
+ }
+
+
+
+ /**
+ * @return the menuApproved_YN
+ */
+ public String getMenuApproved_YN() {
+ return menuApproved_YN;
+ }
+
+
+
+ /**
+ * @param menuApproved_YN the menuApproved_YN to set
+ */
+ public void setMenuApproved_YN(String menuApproved_YN) {
+ this.menuApproved_YN = menuApproved_YN;
+ }
+
+
+
+
+ /**
+ * @return the folderId
+ */
+ public Long getFolderId() {
+ return folderId;
+ }
+
+
+
+ /**
+ * @param folderId the folderId to set
+ */
+ public void setFolderId(Long folderId) {
+ this.folderId = folderId;
+ }
+
+
+
+ /**
+ * @return the dashboard_type_YN
+ */
+ public String getDashboard_type_YN() {
+ return dashboard_type_YN;
+ }
+
+
+
+ /**
+ * @param dashboard_type_YN the dashboard_type_YN to set
+ */
+ public void setDashboard_type_YN(String dashboard_type_YN) {
+ this.dashboard_type_YN = dashboard_type_YN;
+ }
+
+
+
+ /**
+ * @return the dashboard_yn
+ */
+ public String getDashboard_yn() {
+ return dashboard_yn;
+ }
+
+
+
+ /**
+ * @param dashboard_yn the dashboard_yn to set
+ */
+ public void setDashboard_yn(String dashboard_yn) {
+ this.dashboard_yn = dashboard_yn;
+ }
+
+
+
+ /**
+ * @return the ownerId
+ */
+ public User getOwnerId() {
+ return ownerId;
+ }
+
+
+
+ /**
+ * @param ownerId the ownerId to set
+ */
+ public void setOwnerId(User ownerId) {
+ this.ownerId = ownerId;
+ }
+
+
+
+ /**
+ * @return the createId
+ */
+ public User getCreateId() {
+ return createId;
+ }
+
+
+
+ /**
+ * @param createId the createId to set
+ */
+ public void setCreateId(User createId) {
+ this.createId = createId;
+ }
+
+
+
+ /**
+ * @return the maintId
+ */
+ public User getMaintId() {
+ return maintId;
+ }
+
+
+
+ /**
+ * @param maintId the maintId to set
+ */
+ public void setMaintId(User maintId) {
+ this.maintId = maintId;
+ }
+
+
+
+ public int compareTo(Object obj){
+ String c1 = getTitle();
+ String c2 = ((CR_Report)obj).getTitle();
+
+ return (c1 == null || c2 == null) ? 1 : c1.compareTo(c2);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/QuickLink.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/QuickLink.java
new file mode 100644
index 00000000..75b2d119
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/QuickLink.java
@@ -0,0 +1,61 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.domain;
+
+public class QuickLink {
+
+ private String reportURL;
+ private String reportName;
+ private String reportDescr;
+ private Boolean showDescr;
+
+ public String getReportURL() {
+ return reportURL;
+ }
+
+ public void setReportURL(String reportURL) {
+ this.reportURL = reportURL;
+ }
+
+ 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 Boolean getShowDescr() {
+ return showDescr;
+ }
+
+ public void setShowDescr(Boolean showDescr) {
+ this.showDescr = showDescr;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/RaptorSearch.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/RaptorSearch.java
new file mode 100644
index 00000000..cb85f368
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/RaptorSearch.java
@@ -0,0 +1,188 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.domain;
+
+import java.util.Date;
+
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.core.domain.support.DomainVo;;
+
+public class RaptorSearch extends DomainVo {
+
+ private Long repId;
+ private String title;
+ private String descr;
+ private String ownerName;
+ private Date createDate;
+ private String canEdit;
+ private String readOnly;
+ private String schedule;
+ // private Long countRows;
+
+ /**
+ * @return the repId
+ */
+ public Long getRepId() {
+ return repId;
+ }
+
+ /**
+ * @param repId
+ * the repId to set
+ */
+ public void setRepId(Long repId) {
+ this.repId = repId;
+ }
+
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+
+ /**
+ * @param title
+ * the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ /**
+ * @return the descr
+ */
+ public String getDescr() {
+ return descr;
+ }
+
+ /**
+ * @param descr
+ * the descr to set
+ */
+ public void setDescr(String descr) {
+ this.descr = descr;
+ }
+
+ /**
+ * @return the createDate
+ */
+ public Date getCreateDate() {
+ return createDate;
+ }
+
+ /**
+ * @param createDate
+ * the createDate to set
+ */
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+
+ /**
+ * @return the ownerName
+ */
+ public String getOwnerName() {
+ return ownerName;
+ }
+
+ /**
+ * @param ownerName
+ * the ownerName to set
+ */
+ public void setOwnerName(String ownerName) {
+ this.ownerName = ownerName;
+ }
+
+ /**
+ * @return the schedule
+ */
+ public String getSchedule() {
+ return schedule;
+ }
+
+ /**
+ * @param schedule
+ * the schedule to set
+ */
+ public void setSchedule(String schedule) {
+ this.schedule = schedule;
+ }
+
+ /**
+ * @return the canEdit
+ */
+ public String getCanEdit() {
+ return canEdit;
+ }
+
+ /**
+ * @param canEdit
+ * the canEdit to set
+ */
+ public void setCanEdit(String canEdit) {
+ this.canEdit = canEdit;
+ }
+
+ /**
+ * @return the canDelete
+ */
+ public boolean canDelete() {
+ String s = getCanEdit();
+ if (s != null && s.length() > 0 && s.equals("Y")) {
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * @return the canCopy
+ */
+ public boolean canCopy() {
+ String s = getReadOnly();
+ if (returnTrueOrFalse(s)) {
+ return Globals.getCanCopyOnReadOnly() ? true : returnTrueOrFalse(getCanEdit());
+ }
+ return true;
+ }
+
+ /**
+ * @return the readOnly
+ */
+ public String getReadOnly() {
+ return readOnly;
+ }
+
+ /**
+ * @param readOnly
+ * the readOnly to set
+ */
+ public void setReadOnly(String readOnly) {
+ this.readOnly = readOnly;
+ }
+
+ private boolean returnTrueOrFalse(String s) {
+ if (s != null && s.length() > 0 && s.equals("Y")) {
+ return true;
+ }
+ return false;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/ReportInfo.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/ReportInfo.java
new file mode 100644
index 00000000..e11f3bcb
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/domain/ReportInfo.java
@@ -0,0 +1,159 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.domain;
+
+import java.util.Date;
+
+public class ReportInfo {
+
+ private Long repId;
+ private String title;
+ private String createUser;
+ private String ownerName;
+ private Date createDate;
+ private Long lastAccessed = -1L;
+ private Long lastWeekAccess;
+ private Long lastMonthAccess;
+ private Long lastYearAccess;
+ private Long userAccessCount;
+ /**
+ * @return the repId
+ */
+ public Long getRepId() {
+ return repId;
+ }
+ /**
+ * @param repId the repId to set
+ */
+ public void setRepId(Long repId) {
+ this.repId = repId;
+ }
+ /**
+ * @return the title
+ */
+ public String getTitle() {
+ return title;
+ }
+ /**
+ * @param title the title to set
+ */
+ public void setTitle(String title) {
+ this.title = title;
+ }
+ /**
+ * @return the createUser
+ */
+ public String getCreateUser() {
+ return createUser;
+ }
+ /**
+ * @param createUser the createUser to set
+ */
+ public void setCreateUser(String createUser) {
+ this.createUser = createUser;
+ }
+ /**
+ * @return the ownerName
+ */
+ public String getOwnerName() {
+ return ownerName;
+ }
+ /**
+ * @param ownerName the ownerName to set
+ */
+ public void setOwnerName(String ownerName) {
+ this.ownerName = ownerName;
+ }
+ /**
+ * @return the createDate
+ */
+ public Date getCreateDate() {
+ return createDate;
+ }
+ /**
+ * @param createDate the createDate to set
+ */
+ public void setCreateDate(Date createDate) {
+ this.createDate = createDate;
+ }
+ /**
+ * @return the lastAccessed
+ */
+ public Long getLastAccessed() {
+ return lastAccessed;
+ }
+ /**
+ * @param lastAccessed the lastAccessed to set
+ */
+ public void setLastAccessed(Long lastAccessed) {
+ this.lastAccessed = lastAccessed;
+ }
+ /**
+ * @return the lastWeekAccess
+ */
+ public Long getLastWeekAccess() {
+ return lastWeekAccess;
+ }
+ /**
+ * @param lastWeekAccess the lastWeekAccess to set
+ */
+ public void setLastWeekAccess(Long lastWeekAccess) {
+ this.lastWeekAccess = lastWeekAccess;
+ }
+ /**
+ * @return the lastMonthAccess
+ */
+ public Long getLastMonthAccess() {
+ return lastMonthAccess;
+ }
+ /**
+ * @param lastMonthAccess the lastMonthAccess to set
+ */
+ public void setLastMonthAccess(Long lastMonthAccess) {
+ this.lastMonthAccess = lastMonthAccess;
+ }
+ /**
+ * @return the lastYearAccess
+ */
+ public Long getLastYearAccess() {
+ return lastYearAccess;
+ }
+ /**
+ * @param lastYearAccess the lastYearAccess to set
+ */
+ public void setLastYearAccess(Long lastYearAccess) {
+ this.lastYearAccess = lastYearAccess;
+ }
+ /**
+ * @return the userAccessCount
+ */
+ public Long getUserAccessCount() {
+ return userAccessCount;
+ }
+ /**
+ * @param userAccessCount the userAccessCount to set
+ */
+ public void setUserAccessCount(Long userAccessCount) {
+ this.userAccessCount = userAccessCount;
+ }
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorService.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorService.java
new file mode 100644
index 00000000..26276579
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorService.java
@@ -0,0 +1,36 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.service;
+
+import java.util.List;
+import java.util.Map;
+
+
+
+public interface RaptorService {
+ public void deleteReport(Long reportId);
+ public List getReportInfo(Map params);
+ public int getTotalSize();
+ public int executeCountQuery(Class entity, String query, Map params, String whereClause);
+ public List executeGridQuery(String query, Map params, Integer fromIndex, Integer toIndex);
+ public List executeGridQueryOrderByWithLimit(Class entity, String query, Map params, String _orderBy, boolean _asc, Integer fromIndex, Integer toIndex);
+ public List executeGridQuery(Class entity, String query, String whereClause, Map params, Integer fromIndex, Integer toIndex);
+ public List executeGridQueryOrderByWithLimit(Class entity, String query, String whereClause, Map params, String _orderBy, boolean _asc, Integer fromIndex, Integer toIndex);
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorServiceImpl.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorServiceImpl.java
new file mode 100644
index 00000000..e8e0cf31
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/service/RaptorServiceImpl.java
@@ -0,0 +1,163 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.service;
+
+import java.util.List;
+import java.util.Map;
+
+import org.openecomp.portalsdk.analytics.system.fusion.domain.CR_Report;
+import org.openecomp.portalsdk.core.service.DataAccessService;
+import org.openecomp.portalsdk.core.service.support.FusionService;
+import org.springframework.context.ApplicationContext;
+
+public class RaptorServiceImpl extends FusionService implements RaptorService {
+
+ private DataAccessService dataAccessService;
+
+ private int totalSize;
+
+ public DataAccessService getDataAccessService() {
+ return dataAccessService;
+ }
+
+ public void setDataAccessService(DataAccessService dataAccessService) {
+ this.dataAccessService = dataAccessService;
+ }
+
+ private ApplicationContext applicationContext;
+
+ //raptorSearchAllReportsCount
+
+ public int executeCountQuery(Class entity, String query, Map params, String whereClause) {
+ List l = getDataAccessService().executeNamedCountQuery(entity, query, whereClause, params);
+ //List l = getDataAccessService().executeNamedQuery(query, params, null);
+ int searchCount = 0;
+ if(l != null) {
+ if (!l.isEmpty()) {
+ searchCount = (((Long) l.get(0))).intValue();
+ }
+ }
+ totalSize = searchCount;
+ return totalSize;
+ }
+
+ //raptorSearchAllReports
+ public List executeGridQuery(String query, Map params, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQuery(query, params, fromIndex, toIndex, null);
+ }
+
+ public List executeGridQueryOrderByWithLimit(Class entity, String query, Map params, String _orderBy, boolean asc, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQueryWithOrderBy(entity, query, params, _orderBy, asc, fromIndex, toIndex, null);
+ }
+
+ //with where clause
+ public List executeGridQuery(Class entity, String query, String whereClause, Map params, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQuery(entity, query, whereClause, params, fromIndex, toIndex, null);
+ }
+
+ public List executeGridQueryOrderByWithLimit(Class entity, String query, String whereClause, Map params, String _orderBy, boolean asc, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQueryWithOrderBy(entity, query, whereClause, params, _orderBy, asc, fromIndex, toIndex, null);
+ }
+
+ /*
+ public int getUserReportsCount(Map params) {
+ List l = getDataAccessService().executeNamedQuery("raptorSearchUserReportsCount", params, null);
+ int count = 0;
+ if(l != null) {
+ if (!l.isEmpty()) {
+ Object[] result = (Object[]) l.get(0);
+ count = ((Long)result[0]).intValue();
+ }
+ }
+ totalSize = count;
+ return totalSize;
+ }
+
+ public List getUserReports(Map params, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQuery("raptorSearchUserReports", params, fromIndex, toIndex, null);
+ }
+
+ public int getPublicReportsCount(Map params) {
+ List l = getDataAccessService().executeNamedQuery("raptorPublicUserReportsCount", params, null);
+ int count = 0;
+ if(l != null) {
+ if (!l.isEmpty()) {
+ Object[] result = (Object[]) l.get(0);
+ count = ((Long)result[0]).intValue();
+ }
+ }
+ totalSize = count;
+ return totalSize;
+ }
+
+ public List getPublicReports(Map params, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQuery("raptorPublicUserReports", params, fromIndex, toIndex, null);
+ }
+
+ public int getFavReportsCount(Map params) {
+ List l = getDataAccessService().executeNamedQuery("raptorSearchFavReportsCount", params, null);
+ int count = 0;
+ if(l != null) {
+ if (!l.isEmpty()) {
+ Object[] result = (Object[]) l.get(0);
+ count = ((Long)result[0]).intValue();
+ }
+ }
+ totalSize = count;
+ return totalSize;
+ }
+
+ public List getFavReports(Map params, Integer fromIndex, Integer toIndex) {
+ return getDataAccessService().executeNamedQuery("raptorSearchFavReports", params, fromIndex, toIndex, null);
+ }
+ */
+ public int getTotalSize() {
+ return totalSize;
+ }
+
+ public void deleteReport(Long reportId) {
+ getDataAccessService().deleteDomainObject(getDataAccessService().getDomainObject(CR_Report.class, reportId, null), null);
+ }
+
+ public List getReportInfo(Map params) {
+ return getDataAccessService().executeNamedQuery("raptorInfoQuery", params, null);
+ }
+
+/* public List executeGridQueryWithOrderBy(String query, Map params, String _orderBy, boolean asc, Integer fromIndex, Integer toIndex) {
+ query = String.format(query, _orderBy, asc ? "ASC" : "DESC", fromIndex, toIndex);
+ DataSource ds = (DataSource)getApplicationContext().getBean(searchBean.getDatasourceName());
+ NamedParameterJdbcTemplate jdbcTemplate = new NamedParameterJdbcTemplate(ds);
+ }*/
+
+ /**
+ * @return the applicationContext
+ */
+ public ApplicationContext getApplicationContext() {
+ return applicationContext;
+ }
+
+ /**
+ * @param applicationContext the applicationContext to set
+ */
+ public void setApplicationContext(ApplicationContext applicationContext) {
+ this.applicationContext = applicationContext;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorController.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorController.java
new file mode 100644
index 00000000..417a8e19
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorController.java
@@ -0,0 +1,191 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.web;
+
+
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.portalsdk.analytics.controller.Action;
+import org.openecomp.portalsdk.analytics.controller.ErrorHandler;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.core.controller.RestrictedBaseController;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.servlet.ModelAndView;
+
+@Controller
+@RequestMapping("/")
+public class RaptorController extends RestrictedBaseController{
+ String viewName;
+ //static org.apache.log4j.Logger s_logger = org.apache.log4j.Logger.getLogger(RaptorController.class.getName());
+
+ @RequestMapping(value = {"/report" }, method = RequestMethod.GET)
+ public ModelAndView report(HttpServletRequest request) {
+ request.getSession().setAttribute("isEmbedded", false);
+ viewName = "report";
+ return new ModelAndView(getViewName());
+ }
+
+ @RequestMapping(value = {"/report_embedded" }, method = RequestMethod.GET)
+ public ModelAndView embededReport(HttpServletRequest request) {
+ request.getSession().setAttribute("isEmbedded", true);
+ viewName = "report_embedded";
+ return new ModelAndView(getViewName());
+ }
+
+ @RequestMapping(value = {"/report_sample" }, method = RequestMethod.GET)
+ public ModelAndView reportSample(HttpServletRequest request) {
+ viewName = "report_sample";
+ return new ModelAndView(getViewName());
+ }
+
+ @RequestMapping(value = {"/report_import.htm" }, method = RequestMethod.GET)
+
+ public ModelAndView RaptorWizard1(HttpServletRequest request, HttpServletResponse response) throws IOException {
+ viewName = "report_import";
+ Action action = null;
+ String actionKey = "report.import";
+ ServletContext servletContext = request.getSession().getServletContext();
+ if( !Globals.isSystemInitialized()) {
+ Globals.initializeSystem(servletContext);
+ }
+ try {
+ action = Globals.getRaptorActionMapping().getAction(actionKey);
+ if (action == null)
+ throw new RaptorRuntimeException("Action not found");
+ } catch (RaptorException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. RaptorException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. Exception: " + e.getMessage()));
+ }
+ return new ModelAndView(getViewName(), "model", null);
+ }
+
+
+ @RequestMapping(value = {"/report_wizard.htm" }, method = {RequestMethod.POST, RequestMethod.GET})
+ public ModelAndView RaptorWizard(HttpServletRequest request, HttpServletResponse response) throws IOException {
+
+
+ viewName = "";
+ String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
+ actionKey = nvl(actionKey, "report.run");
+ Action action = null;
+ ServletContext servletContext = request.getSession().getServletContext();
+ if( !Globals.isSystemInitialized()) {
+ Globals.initializeSystem(servletContext);
+ }
+ try {
+ action = Globals.getRaptorActionMapping().getAction(actionKey);
+ if (action == null)
+ throw new RaptorRuntimeException("Action not found");
+ } catch (RaptorException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. RaptorException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. Exception: " + e.getMessage()));
+ }
+
+ try {
+ Class[] paramTypes = new Class[2];
+ paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
+ paramTypes[1] = Class.forName("java.lang.String");
+
+ Class handlerClass = Class.forName(action.getControllerClass());
+ Object handler = handlerClass.newInstance();
+ Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(),
+ paramTypes);
+
+ Object[] paramValues = new Object[2];
+ paramValues[0] = request;
+ paramValues[1] = action.getJspName();;
+
+ viewName = (String) handlerMethod.invoke(handler, paramValues);
+ //ObjectMapper mapper = new ObjectMapper();
+ //response.setContentType("application/json");
+ //PrintWriter out = response.getWriter();
+ //out.write(viewName);
+
+ } catch (ClassNotFoundException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. ClassNotFoundException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ } catch (IllegalAccessException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. IllegalAccessException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (InstantiationException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("Ocurring during Schedule "));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (NoSuchMethodException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. NoSuchMethodException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (InvocationTargetException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. InvocationTargetException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }
+ return new ModelAndView(getViewName(), "model", null);
+ }
+
+ public String getViewName() {
+ return viewName;
+ }
+ public void setViewName(String viewName) {
+ this.viewName = viewName;
+ }
+
+ public String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorController.class);
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorControllerAsync.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorControllerAsync.java
new file mode 100644
index 00000000..bd3fdce3
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/RaptorControllerAsync.java
@@ -0,0 +1,410 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.web;
+
+
+import java.io.IOException;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
+import org.openecomp.portalsdk.analytics.controller.Action;
+import org.openecomp.portalsdk.analytics.controller.ErrorHandler;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.error.RaptorRuntimeException;
+import org.openecomp.portalsdk.analytics.model.ReportHandler;
+import org.openecomp.portalsdk.analytics.model.pdf.PdfReportHandler;
+import org.openecomp.portalsdk.analytics.model.runtime.CategoryAxisJSON;
+import org.openecomp.portalsdk.analytics.model.runtime.ChartJSON;
+import org.openecomp.portalsdk.analytics.model.runtime.RangeAxisJSON;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+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.view.ReportData;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+import org.openecomp.portalsdk.core.controller.UnRestrictedBaseController;
+import org.openecomp.portalsdk.core.domain.User;
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.openecomp.portalsdk.core.web.support.UserUtils;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+
+@Controller
+@RequestMapping("/")
+public class RaptorControllerAsync extends UnRestrictedBaseController{
+ String viewName;
+
+ @RequestMapping(value = {"/raptor.htm" }, method = RequestMethod.GET)
+ public void RaptorSearch(HttpServletRequest request, HttpServletResponse response) throws IOException {
+
+ /* List items = null;
+ int reportId = ServletRequestUtils.getIntParameter(request, "report_id", 0);
+ //String task = ServletRequestUtils.getStringParameter(request, "task", TASK_GET);
+
+ HashMap additionalParams = new HashMap();
+ additionalParams.put(Parameters.PARAM_HTTP_REQUEST, request);
+
+ return new ModelAndView(getViewName(), "model", null);
+
+ //return new ModelAndView(getViewName(), "model", null);
+ //System.out.println("Fill with proper code");
+ //return null;*/
+ viewName = "";
+ String actionKey = nvl(request.getParameter(AppConstants.RI_ACTION), request.getParameter("action"));
+ actionKey = nvl(actionKey, "report.run");
+
+ HttpSession session = request.getSession();
+ User user = UserUtils.getUserSession(request);
+
+ if(actionKey.equals("report.download.excel2007.session") || actionKey.equals("report.download.csv.session") || actionKey.equals("report.download.excel.session") || actionKey.equals("report.download.pdf.session") ) {
+ if(session!=null && user!=null){
+ ServletContext servletContext = request.getSession().getServletContext();
+ if( !Globals.isSystemInitialized()) {
+ Globals.initializeSystem(servletContext);
+ }
+ ReportRuntime 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");
+ }
+
+ boolean isEmbedded = false;
+ Object temp = request.getSession().getAttribute("isEmbedded");
+ if(temp!=null){
+ isEmbedded = (boolean)temp;
+ }
+ if(isEmbedded){
+ String reportID = AppUtils.getRequestValue(request, AppConstants.RI_REPORT_ID);
+ if(rr==null) rr = (ReportRuntime) ((HashMap)request.getSession().getAttribute(AppConstants.EMBEDDED_REPORTRUNTIME_MAP)).get(reportID);
+ if(rd==null) rd = (ReportData) ((HashMap)request.getSession().getAttribute(AppConstants.EMBEDDED_REPORTDATA_MAP)).get(reportID);
+ } else {
+ if(rr==null) rr = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME);
+ if(rd==null) rd = (ReportData) request.getSession().getAttribute(AppConstants.RI_REPORT_DATA);
+ }
+ String user_id = AppUtils.getUserID(request);
+ try {
+ OutputStreamWriter out = new OutputStreamWriter(response.getOutputStream());
+
+ if(actionKey.equals("report.download.pdf.session")) {
+ new PdfReportHandler().createPdfFileContent(request,response, 3);
+ } else if (actionKey.equals("report.download.csv.session")) {
+ (new ReportHandler()).createCSVFileContent(out, rd, rr, request, response);
+ } else if (actionKey.equals("report.download.excel.session")) {
+ new ReportHandler().createExcelFileContent(out, rd, rr, request, response, user_id, 3); //3 whole
+ } else {
+
+ new ReportHandler().createExcel2007FileContent(out, rd, rr, request, response, user_id, 3); //3 whole
+ }
+ } catch(Exception e) {
+ e.printStackTrace();
+ //Log.write("Fatal error [report_download_xlsx.jsp]: "+e.getMessage());
+ }
+ } else {
+ response.sendRedirect("login.htm");
+ }
+ } else {
+ if(session!=null && user!=null){
+ Action action = null;
+ ServletContext servletContext = request.getSession().getServletContext();
+ if( !Globals.isSystemInitialized()) {
+ Globals.initializeSystem(servletContext);
+ }
+ try {
+ action = Globals.getRaptorActionMapping().getAction(actionKey);
+ if (action == null)
+ throw new RaptorRuntimeException("Action not found");
+ } catch (RaptorException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. RaptorException: " + e.getMessage()));
+
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. Exception: " + e.getMessage()));
+ }
+
+ try {
+ Class[] paramTypes = new Class[2];
+ paramTypes[0] = Class.forName("javax.servlet.http.HttpServletRequest");
+ paramTypes[1] = Class.forName("java.lang.String");
+
+ Class handlerClass = Class.forName(action.getControllerClass());
+ Object handler = handlerClass.newInstance();
+ Method handlerMethod = handlerClass.getMethod(action.getControllerMethod(),
+ paramTypes);
+
+ Object[] paramValues = new Object[2];
+ paramValues[0] = request;
+ paramValues[1] = action.getJspName();;
+
+ viewName = (String) handlerMethod.invoke(handler, paramValues);
+ //ObjectMapper mapper = new ObjectMapper();
+ if(!actionKey.equals("chart.run"))
+ response.setContentType("application/json");
+ else
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+ out.write(viewName);
+
+ } catch (ClassNotFoundException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. ClassNotFoundException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ } catch (IllegalAccessException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. IllegalAccessException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (InstantiationException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. InstantiationException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (NoSuchMethodException e) {
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. NoSuchMethodException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }catch (InvocationTargetException e) {
+ e.printStackTrace();
+ logger.debug(EELFLoggerDelegate.debugLogger, ("[Controller.processRequest]Invalid raptor action [" + actionKey
+ + "]. InvocationTargetException: " + e.getMessage()));
+ viewName = (new ErrorHandler()).processFatalError(request, new RaptorRuntimeException(
+ "[Controller.processRequest] Unable to instantiate and invoke action handler. Exception: "
+ + e.getMessage()));
+ }
+ //return new ModelAndView(getViewName(), "model", null);
+ } else {
+ PrintWriter out = response.getWriter();
+ out.write("session has timed out for user");
+ }
+
+ }
+ }
+
+ @RequestMapping(value = "save_chart", method = RequestMethod.POST)
+ public void reportChartReceive(@RequestBody ChartJSON chartJSON, HttpServletRequest request, HttpServletResponse response) throws IOException {
+ ReportRuntime reportRuntime;
+ System.out.println("*****Hit RaptorChart******");
+ reportRuntime = (ReportRuntime) request.getSession().getAttribute(AppConstants.SI_REPORT_RUNTIME); //changing session to request
+ String reportID = request.getParameter("c_master");
+ if (reportRuntime == null && AppUtils.nvl(reportID).length() > 0) {
+ try {
+ ReportHandler rh = new ReportHandler();
+ reportRuntime = rh.loadReportRuntime(request, reportID);
+ } catch (RaptorException ex) {
+ ex.printStackTrace();
+
+ }
+ }
+
+ if (reportRuntime != null) {
+ String chartType = chartJSON.getChartType();
+ reportRuntime.setChartType(chartJSON.getChartType());
+ reportRuntime.setChartAnimate(chartJSON.isAnimation());
+ reportRuntime.setChartWidth(chartJSON.getWidth());
+ reportRuntime.setChartHeight(chartJSON.getHeight());
+ reportRuntime.setShowChartTitle(chartJSON.isShowTitle());
+
+
+ String domainAxis = null;
+ domainAxis = chartJSON.getDomainAxis();
+
+ List < DataColumnType > reportCols = reportRuntime.getAllColumns();
+
+ for (Iterator < DataColumnType > iter = reportCols.iterator(); iter
+ .hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (dct.getColId().equals(domainAxis)) {
+ dct.setColOnChart(AppConstants.GC_LEGEND);
+ } else {
+ dct.setColOnChart(null);
+ }
+ }
+
+ CategoryAxisJSON categoryAxisJSON = chartJSON.getCategoryAxisJSON();
+ String categoryAxis = null;
+
+ categoryAxis = (categoryAxisJSON!=null?categoryAxisJSON.getValue():"");
+
+ reportCols = reportRuntime.getAllColumns();
+
+ for (Iterator < DataColumnType > iter = reportCols.iterator(); iter
+ .hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (dct.getColId().equals(categoryAxis)) {
+ dct.setChartSeries(true);
+ } else {
+ dct.setChartSeries(false);
+ }
+ }
+
+
+ ArrayList < RangeAxisJSON > rangeAxisList = chartJSON.getRangeAxisList();
+ int r = 0;
+ for (int i = 0; i < rangeAxisList.size(); i++) {
+ RangeAxisJSON rangeAxisJSON = rangeAxisList.get(i);
+ String rangeAxis = rangeAxisJSON.getRangeAxis();
+ String rangeYAxis = AppUtils.nvl(rangeAxisJSON.getRangeYAxis());
+ String rangeChartGroup = AppUtils.nvl(rangeAxisJSON.getRangeChartGroup());
+ String rangeColor = AppUtils.nvl(rangeAxisJSON.getRangeColor());
+ String rangeLineType = AppUtils.nvl(rangeAxisJSON.getRangeLineType());
+
+ rangefor:
+ for (Iterator < DataColumnType > iterator = reportCols.iterator(); iterator.hasNext();) {
+ DataColumnType dct = (DataColumnType) iterator.next();
+ if (dct.getColId().equals(rangeAxis)) {
+ dct.setChartSeq(++r);
+ dct.setColOnChart("0");
+ dct.setYAxis(rangeYAxis); //+"|"+dct.getColId());
+ dct.setChartGroup(rangeChartGroup); //+"|"+dct.getColId());
+ dct.setChartColor(rangeColor);
+ dct.setChartLineType(rangeLineType);
+
+ if (chartType.equals(AppConstants.GT_ANNOTATION_CHART) || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
+ if (rangeAxisJSON.isShowAsArea()) {
+ dct.setIsRangeAxisFilled(true);
+ } else {
+ dct.setIsRangeAxisFilled(false);
+ }
+ }
+ break rangefor;
+ }
+ }
+
+ }
+
+
+ reportRuntime.setChartLeftAxisLabel(chartJSON.getPrimaryAxisLabel());
+ reportRuntime.setChartRightAxisLabel(chartJSON.getSecondaryAxisLabel());
+
+ reportRuntime.setRangeAxisLowerLimit(chartJSON.getMinRange());
+ reportRuntime.setRangeAxisUpperLimit(chartJSON.getMaxRange());
+
+
+
+ if (chartType.equals(AppConstants.GT_ANNOTATION_CHART) || chartType.equals(AppConstants.GT_FLEX_TIME_CHARTS)) {
+ if (chartJSON.getFlexTimeSeriesChartOptions() != null) {
+ reportRuntime.setZoomIn(chartJSON.getFlexTimeSeriesChartOptions().getZoomIn());
+ reportRuntime.setTimeAxisType(chartJSON.getFlexTimeSeriesChartOptions().getTimeAxisType());
+ }
+
+ }
+
+ if (chartType.equals(AppConstants.GT_TIME_SERIES)) {
+ if (chartJSON.getTimeSeriesChartOptions() != null) {
+ reportRuntime.setTimeSeriesRender(chartJSON.getTimeSeriesChartOptions().getLineChartRenderer());
+ reportRuntime.setShowXAxisLabel(chartJSON.getTimeSeriesChartOptions().isShowXAxisLabel());
+ reportRuntime.setAddXAxisTickers(chartJSON.getTimeSeriesChartOptions().isAddXAxisTicker());
+ reportRuntime.setTimeAxis(chartJSON.getTimeSeriesChartOptions().isNonTimeAxis());
+ reportRuntime.setMultiSeries(chartJSON.getTimeSeriesChartOptions().isMultiSeries());
+ }
+
+ }
+
+ if (chartType.equals(AppConstants.GT_BAR_3D)) {
+ if (chartJSON.getBarChartOptions() != null) {
+ reportRuntime.setChartOrientation(chartJSON.getBarChartOptions().isVerticalOrientation() ? "vertical" : "horizontal");
+ reportRuntime.setChartStacked(chartJSON.getBarChartOptions().isStackedChart());
+ reportRuntime.setBarControls(chartJSON.getBarChartOptions().isDisplayBarControls());
+ reportRuntime.setXAxisDateType(chartJSON.getBarChartOptions().isxAxisDateType());
+ reportRuntime.setLessXaxisTickers(chartJSON.getBarChartOptions().isMinimizeXAxisTickers());
+ reportRuntime.setTimeAxis(chartJSON.getBarChartOptions().isTimeAxis());
+ reportRuntime.setLogScale(chartJSON.getBarChartOptions().isyAxisLogScale());
+ }
+ }
+
+
+ reportRuntime.setLegendLabelAngle(chartJSON.getCommonChartOptions().getLegendLabelAngle());
+ reportRuntime.setChartLegendDisplay(chartJSON.getCommonChartOptions().isHideLegend() ? "Y" : "N");
+ reportRuntime.setAnimateAnimatedChart(chartJSON.getCommonChartOptions().isAnimateAnimatedChart());
+
+ reportRuntime.setTopMargin(chartJSON.getCommonChartOptions().getTopMargin());
+ reportRuntime.setBottomMargin(chartJSON.getCommonChartOptions().getBottomMargin());
+ reportRuntime.setLeftMargin(chartJSON.getCommonChartOptions().getLeftMargin());
+ reportRuntime.setRightMargin(chartJSON.getCommonChartOptions().getRightMargin());
+
+
+
+ for (Iterator < DataColumnType > iterator = reportCols.iterator(); iterator.hasNext();) {
+ DataColumnType dct = (DataColumnType) iterator.next();
+ if (!(AppUtils.nvl(dct.getColOnChart()).equals(AppConstants.GC_LEGEND) || (dct.getChartSeq()!=null && dct.getChartSeq()>0) || dct.isChartSeries()) ) {
+ dct.setChartSeq(-1);
+ dct.setChartColor(null);
+ dct.setColOnChart(null);
+ dct.setCreateInNewChart(false);
+ dct.setChartGroup(null);
+ dct.setYAxis(null);
+ }
+ }
+
+
+ try {
+ reportRuntime.persistLinearReport(request);
+ } catch (Exception ex) {
+ ex.printStackTrace();
+ logger.error("While SAVING CHART", ex);
+ }
+ }
+
+ }
+
+ public String getViewName() {
+ return viewName;
+ }
+ public void setViewName(String viewName) {
+ this.viewName = viewName;
+ }
+
+ public String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ public String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(RaptorControllerAsync.class);
+
+
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/ReportsSearchListController.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/ReportsSearchListController.java
new file mode 100644
index 00000000..b5df482b
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/system/fusion/web/ReportsSearchListController.java
@@ -0,0 +1,74 @@
+/*-
+ * ================================================================================
+ * 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.system.fusion.web;
+
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+import org.openecomp.portalsdk.analytics.system.fusion.service.RaptorService;
+import org.springframework.web.servlet.ModelAndView;
+
+
+public class ReportsSearchListController {
+
+ private RaptorService raptorService = null;
+
+ /**
+ * @return the raptorService
+ */
+ public RaptorService getRaptorService() {
+ return raptorService;
+ }
+
+ /**
+ * @param raptorService the raptorService to set
+ */
+ public void setRaptorService(RaptorService raptorService) {
+ this.raptorService = raptorService;
+ }
+
+ public ModelAndView handleRequestInternal(HttpServletRequest request,
+ HttpServletResponse response) {
+
+ /*List items = null;
+ int reportId = ServletRequestUtils.getIntParameter(request, "report_id", 0);
+ String task = ServletRequestUtils.getStringParameter(request, "task", TASK_GET);
+
+ HashMap additionalParams = new HashMap();
+ additionalParams.put(Parameters.PARAM_HTTP_REQUEST, request);
+
+ if (reportId != 0 && task.equals(TASK_DELETE)) { // delete the selected record
+ getRaptorService().deleteReport(new Long(reportId));
+ }
+
+ items = getRaptorService().getReports();
+
+ Map model = new HashMap();
+ model.put("items", items);
+
+ return new ModelAndView(getViewName(), "model", model);
+ */
+ //return new ModelAndView(getViewName(), "model", null);
+ System.out.println("Fill with proper code");
+ return null;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/AppConstants.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/AppConstants.java
new file mode 100644
index 00000000..3ec5c5e8
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/AppConstants.java
@@ -0,0 +1,658 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+import org.openecomp.portalsdk.analytics.model.base.IdNameList;
+
+/**<HR/>
+ * This class is part of <B><I>RAPTOR (Rapid Application Programming Tool for OLAP Reporting)</I></B><BR/>
+ * <HR/>
+ *
+ * --------------------------------------------------------------------------------------------------<BR/>
+ * <B>AppConstants.java</B> - This class holds almost all shareable constants for RAPTOR.
+ * --------------------------------------------------------------------------------------------------<BR/>
+ *
+ *
+ * <U>Change Log</U><BR/><BR/>
+ *
+ * 27-Jul-2009 : Version 8.4 (Sundar); <UL><LI> Added PUBLIC constant for SearchHandler</LI></UL>
+ * 14-Jul-2009 : Version 8.4 (Sundar); <UL><LI> New constants related to Dashboard is added.</LI></UL>
+ * 29-Jun-2009 : Version 8.4 (Sundar); <UL><LI> New constants related to Compare To Prev Year Chart is added.</LI></UL>
+ * 22-Jun-2009 : Version 8.4 (Sundar); <UL><LI> 3 new constants related to Pareto Chart, Multiple Time
+ * Series and Time difference Chart.</LI></UL>
+ *
+ */
+
+public class AppConstants {
+ // Session attribute IDs
+ public final static String SI_BACKUP_FOR_REP_ID = "backup_for_report_id";
+ public final static String SI_DASHBOARD_REP_ID = "dashboard_report_id";
+ public final static String SI_DASHBOARD_REPORTRUNTIME_MAP = "dashboardReportRuntimeMap";
+ public final static String SI_DASHBOARD_REPORTDATA_MAP = "dashboardReportDataMap";
+ public final static String SI_DASHBOARD_CHARTDATA_MAP = "dashboardChartDataMap";
+ public final static String SI_DASHBOARD_DISPLAYTYPE_MAP = "dashboardDisplayTypeMap";
+ public final static String SI_DASHBOARD_REPORTRUNTIME = "dashboardRuntime";
+ public final static String EMBEDDED_REPORTRUNTIME_MAP = "embeddedReportRuntimeMap";
+ public final static String EMBEDDED_REPORTDATA_MAP = "embeddedReportDataMap";
+
+ public final static String DRILLDOWN_INDEX = "drilldown_index";
+ public final static String FORM_DRILLDOWN_INDEX = "form_drilldown_index";
+
+ public final static String DRILLDOWN_REPORTS_LIST = "drilldownReportsList";
+
+ public final static String SI_REPORT_RUN_BACKUP = "report_runtime_backup";
+
+ public final static String SI_REPORT_RUNTIME = "report_runtime";
+
+ public final static String SI_FORMFIELD_INFO = "formfield_info";
+
+ public final static String SI_FORMFIELD_DOWNLOAD_INFO = "formfield_download_info";
+
+ public final static String SI_REPORT_DEFINITION = "report_definition";
+
+ public final static String SI_DATA_SIZE_FOR_TEXTFIELD_POPUP = "dataSizeForPopUp";
+
+ public final static String SI_MAP_OBJECT = "novamap";
+
+ public final static String SI_MAP = "raptorMap";
+
+ // Added for Adhoc Scheduling
+ public final static String SI_REPORT_SCHEDULE = "report_schedule";
+
+ public final static String SI_COLUMN_LOOKUP = "column_lookup";
+
+ // Request attribute IDs
+ public final static String RI_ACTION = "r_action";
+
+ public final static String RI_JAVASCRIPT_ITEM_ID = "javascriptItemId";
+
+ // added for form field chaining in schedule tab
+ public final static String SCHEDULE_ACTION = "N";
+
+ public final static String RI_REFRESH = "refresh";
+
+ public final static String RI_EXCEPTION = "c_exception";
+
+ public final static String RI_ERROR_LIST = "c_error_list";
+
+ public final static String RI_REPORT_ID = "c_master"; // should be
+ // reportID not
+ // c_master
+ public final static String RI_DASHBOARD_ID = "c_dashboard";
+
+ public final static String RI_DETAIL_ID = "c_detail"; // should be
+ // detailID not
+ // c_detail
+
+ public final static String RI_REPORT_DATA = "report_data";
+
+ public final static String RI_REPORT_DATA_WHOLE = "report_data_whole";
+
+ public final static String RI_REPORT_SQL_WHOLE = "report_sql_whole";
+
+ public final static String RI_CHART_DATA = "chart_data";
+
+ public final static String RI_CHART_FORECAST_DATA = "chart_forecast_data";
+
+ public final static String RI_CHART_TOTAL_COL = "chart_total"; // to show sub-totals
+
+ public final static String RI_CHART_COLOR = "chart_color"; // to specify colors
+
+ public final static String RI_CHART_INCLUDE = "chart_include"; //
+
+ public final static String RI_CHART_MARKER_START = "chart_marker_start"; //marker line
+
+ public final static String RI_CHART_MARKER_END = "chart_marker_end"; //marker line
+
+ public final static String RI_CHART_MARKER_TEXT_LEFT = "chart_marker_text_left"; //marker line
+
+ public final static String RI_CHART_MARKER_TEXT_RIGHT = "chart_marker_text_right"; //marker line
+
+ public final static String RI_ANOMALY_TEXT = "anomaly_text"; //marker line
+
+ public final static String RI_JAVASCRIPT = "javascriptElement";
+
+ public final static String RI_PAGE_TITLE = "title";
+
+ public final static String RI_PAGE_SUBTITLE = "subtitle";
+
+ public final static String RI_NEXT_PAGE = "r_page";
+
+ public final static String RI_PAGE_SIZE = "r_page_size";
+
+ public final static String RI_RECORD_NO = "r_record";
+
+ public final static String RI_NEXT_PAGE_SET = "r_page_set";
+
+ public final static String RI_DATA_SIZE = "r_data_size";
+
+ public final static String RI_SORT_ORDER = "sort_order";
+
+ public final static String RI_USER_REPORTS = "user_reports";
+
+ public final static String RI_PUBLIC_REPORTS = "public_reports";
+
+ public final static String RI_FAVORITE_REPORTS = "favorite_reports";
+
+ public final static String RI_F_REPORT_ID = "f_report_id";
+
+ public final static String RI_F_REPORT_NAME = "f_report_name";
+
+ public final static String RI_F_REPORT_CREATE_DATE = "f_report_create_date";
+
+ public final static String RI_F_PUBLIC = "f_public";
+
+ public final static String RI_F_OWNER_ID = "f_owner_id";
+
+ public final static String RI_SEARCH_RESULT = "search_result";
+
+ public final static String RI_JS_TARGET_FIELD = "js_target_field";
+
+ public final static String RI_FIELD_NAME = "field_name";
+
+ public final static String RI_COLUMN_ID = "column_id";
+
+ public final static String RI_ARG_TYPE = "arg_type";
+
+ public final static String RI_VIEW_ACTION = "view_action";
+
+ public final static String RI_SOURCE_PAGE = "source_page";
+
+ public final static String RI_GO_TO_STEP = "go_to_step";
+
+ public final static String RI_WIZARD_ACTION = "wizard_action";
+
+ public final static String RI_FORMATTED_SQL = "formatted_sql";
+
+ public final static String RI_DATA_SET = "data_set";
+
+ public final static String RI_FORM_FIELDS = "form_fields";
+
+ public final static String RI_DISPLAY_CONTENT = "display_content";
+
+ public final static String RI_SHOW_BACK_BTN = "show_back_btn";
+
+ public final static String RI_GO_BACK = "go_back";
+
+ public final static String RI_RESET_PARAMS = "reset_params";
+
+ public final static String RI_RESET_ACTION = "reset_action";
+
+ public final static String RI_VISUAL_ACTION = "v_action";
+
+ public final static String RI_SEARCH_STRING = "search_string";
+
+ public final static String RI_CONTAIN_FLAG = "contain_flag";
+
+ public final static String RI_TABLE_NAME = "table_name";
+
+ public final static String RI_DISPLAY_CHART = "display_chart";
+
+ public final static String RI_CHK_FIELD_SQL = "check_field_sql";
+
+ public final static String RI_EDIT_LINK = "edit_link";
+
+ public final static String RI_SCHEDULE_LINK = "schedule_link";
+
+ public final static String RI_LIST_CATEGORY = "raptor_list_category";
+
+ public final static String RI_SCHEDULE_ID = "c_schedule"; // should be
+ // reportID not
+ // c_master
+ public final static String RI_TEXTFIELD_POP = "forTextFieldPopUp"; // should be
+
+
+ // Visualization actions
+ public final static String VA_SHOW = "Show";
+
+ public final static String VA_HIDE = "Hide";
+
+ public final static String VA_SORT = "Sort";
+
+ public final static String HIDDEN = "Hidden";
+
+ // Wizard steps
+ public final static String WS_DEFINITION = "Definition";
+
+ public final static String WS_TABLES = "Tables";
+
+ public final static String WS_SQL = "SQL";
+
+ public final static String WS_COLUMNS = "Columns";
+
+ public final static String WS_FORM_FIELDS = "Form Fields";
+
+ public final static String WS_FILTERS = "Filters";
+
+ public final static String WS_JAVASCRIPT = "Javascript";
+
+ public final static String WS_SORTING = "Sorting";
+
+ public final static String WS_CHART = "Chart";
+
+ public final static String WS_USER_ACCESS = "Security";
+
+ public final static String WS_DATA_FORECASTING = "Forecasting";
+
+ public final static String WS_SCHEDULE = "Schedule";
+
+ public final static String WS_REPORT_LOG = "Log";
+
+ public final static String WS_RUN = "Run";
+
+ /*****for report map******/
+ public final static String WS_MAP = "Map";
+
+
+
+ // Wizard sub-steps
+ public final static String WSS_ADD = "Add";
+
+ public final static String WSS_ADD_MULTI = "Add Multiple";
+
+ public final static String WSS_ORDER_ALL = "Re-order All";
+
+ public final static String WSS_EDIT = "Edit";
+
+ public final static String WSS_DELETE = "Delete";
+
+ public final static String WSS_ADD_BLANK = "Add Blank";
+
+ public final static String WSS_INFO_BAR = "Display parameters";
+
+ // Wizard actions
+ public final static String WA_NEXT = "Next";
+
+ public final static String WA_BACK = "Back";
+
+ public final static String WA_ADD = "Add";
+
+ public final static String WA_ADD_MULTI = "Add Multiple";
+
+ public final static String WA_ORDER_ALL = "Re-order All";
+
+ public final static String WA_EDIT = "Edit";
+
+ public final static String WA_MODIFY = "Modify";
+
+ public final static String WA_DELETE = "Delete";
+
+ public final static String WA_SAVE = "Save";
+
+ public final static String WA_MOVE_UP = "Move Up";
+
+ public final static String WA_MOVE_DOWN = "Move Down";
+
+ public final static String WA_ADD_USER = "Add User";
+
+ public final static String WA_DELETE_USER = "Delete User";
+
+ public final static String WA_GRANT_USER = "Grant User Access";
+
+ public final static String WA_REVOKE_USER = "Revoke User Access";
+
+ public final static String WA_ADD_ROLE = "Add Role";
+
+ public final static String WA_DELETE_ROLE = "Delete Role";
+
+ public final static String WA_GRANT_ROLE = "Grant Role Access";
+
+ public final static String WA_REVOKE_ROLE = "Revoke Role Access";
+
+ public final static String WA_VALIDATE = "Validate";
+
+ // File types
+ public final static String FT_ZIP = ".zip";
+ public final static String FT_TXT = ".txt";
+ public final static String FT_DAT = ".dat";
+ public final static String FT_CSV = ".csv";
+ public final static String FT_XLS = ".xls";
+ public final static String FT_XLS_ALL = "_all.xls";
+
+ public final static String FT_CSV_ALL = "_all.csv";
+
+
+ public final static String FT_XML = ".xml";
+
+ public final static String FT_SQL = ".sql";
+ public final static String FT_COLUMNS = ".head";
+
+ public final static String FILE_PREFIX = "cr_";
+
+ // Chart types
+ public final static String GT_BAR_3D = "BarChart3D";
+
+ public final static String GT_HORIZ_BAR = "HorizontalBarChart";
+
+ public final static String GT_STACKED_HORIZ_BAR = "HorizontalStackedBarChart";
+
+ public final static String GT_STACKED_VERT_BAR = "VerticalStackedBarChart";
+
+ public final static String GT_STACKED_HORIZ_BAR_LINES = "HorizontalStackedBarLinesChart";
+
+ public final static String GT_STACKED_VERT_BAR_LINES = "VerticalStackedBarLinesChart";
+
+ public final static String GT_VERT_BAR = "VerticalBarChart";
+
+ public final static String GT_TOTAL_BAR = "TotalBarChart";
+
+ public final static String GT_PIE_3D = "Pie3DChart";
+
+ public final static String GT_PIE = "PieChart";
+
+ public final static String GT_PIE_MULTIPLE = "MultiplePieChart";
+
+ public final static String GT_TIME_SERIES = "TimeSeriesChart";
+
+ public final static String GT_LINE = "LineChart";
+
+ public final static String GT_SCATTER = "ScatterPlotChart";
+
+ public final static String GT_HIERARCHICAL = "HierarchicalChart";
+
+ public final static String GT_HIERARCHICAL_SUNBURST = "HierarchicalSunBurstChart";
+
+ public final static String GT_REGRESSION = "RegressionPlotChart";
+
+ public final static String GT_BAR_LINES = "BarLinesChart";
+
+ public final static String GT_MULTI_SERIES_CHART = "MultiSeriesChart";
+
+ public final static String GT_PARETO_CHART = "ParetoChart";
+
+ public final static String GT_MULTIPLE_TIMESERIES_CHART = "MultipleTimeSeriesChart";
+
+ public final static String GT_TIME_DIFFERENCE_CHART = "TimeDifferenceChart";
+
+ public final static String GT_COMPARE_PREVYEAR_CHART = "CompareToPrevYear";
+
+ public final static String GT_ANNOTATION_CHART = "AnnotationChart";
+
+ public final static String GT_FLEX_TIME_CHARTS = "FlexTimeChart";
+
+ // Non-standard chart types
+ public final static String GT_MTD_BAR = "MTDBarChart";
+
+ public final static String GT_METER = "MeterChart";
+
+ public final static String GT_STACK_BAR = "StackedBarChart";
+
+
+ // chart filter
+ public final static int CHART_ALL_COLUMNS = 0;
+ public final static int CHART_WITHOUT_NEWCHART_COLUMNS = 1;
+ public final static int CHART_NEWCHART_COLUMNS = 2;
+
+
+
+ // Chart columns
+ public final static String GC_LEGEND = "LEGEND";
+
+ /* Datamining Constants */
+ public final static String DM_DATE_ATTR = "DM_DATE_ATTR";
+ public final static String DM_FORECASTING_ATTR = "DM_FORECAST_ATTR";
+ public final static String DM_GAUSSIAN_CLASSIFIER = "GAUSSIAN";
+ public final static String DM_SVM_CLASSIFIER = "SVM";
+
+ // Schedule recurrence
+
+ public final static String SR_ONETIME = "ONE_TIME";
+ public final static String SR_HOURLY = "HOURLY";
+
+ public final static String SR_DAILY = "DAILY";
+
+ public final static String SR_DAILY_MO_FR = "DAILY_MO_FR";
+
+ public final static String SR_WEEKLY = "WEEKLY";
+
+ public final static String SR_MONTHLY = "MONTHLY";
+
+ // User access type
+ public final static String UA_READ = "read";
+
+ public final static String UA_WRITE = "write";
+
+ public final static String UA_DELETE = "delete";
+
+ // Semaphore Type
+ public static final String ST_ROW = "ROW";
+
+ public static final String ST_CELL = "CELL";
+
+ // Sort Order
+ public static final String SO_ASC = "ASC";
+
+ public static final String SO_DESC = "DESC";
+
+ // Report Log Action
+ public static final String RLA_CREATE = "Report Created";
+
+ public static final String RLA_UPDATE = "Report Updated";
+
+ public static final String RLA_DELETE = "Report Deleted"; // Not used
+
+ public static final String RLA_RUN = "Report Run";
+
+ public static final String RLA_EXECUTION_TIME = "Report Execution Time";
+
+ public static final String RLA_SCHEDULED_DOWNLOAD_EXCEL = "Scheduled and Generated in Excel";
+
+ public static final String RLA_SCHEDULED_DOWNLOAD_PDF = "Scheduled and Generated in PDF";
+
+ public static final String RLA_DOWNLOAD_EXCEL = "Generated in Excel";
+
+ public static final String RLA_DOWNLOAD_PAGE_EXCEL = "Generated in Excel for the current Page";
+
+ public static final String RLA_DOWNLOAD_EXCELX = "Generated in Excel 2007";
+
+ public static final String RLA_SCHEDULED_DOWNLOAD_EXCELX = "Scheduled and Generated in Excel 2007";
+
+ public static final String RLA_DOWNLOAD_PDF = "Generated in PDF";
+
+ public static final String RLA_DOWNLOAD_CSV = "Generated in CSV";
+
+ public static final String RLA_DOWNLOAD_TEXT = "Generated in TEXT";
+
+ public static final String RLA_ERROR = "Error Occurred";
+
+ public static final String RLA_FROM_LOG = "From Log List";
+
+ // Drill-down extra date columns extension
+ public static final String DD_COL_EXTENSION = "_dde";
+
+ // Column "don't attempt to parse as date" flag - currently placed in the
+ // comment
+ public static final String CF_NO_PARSE_DATE = "NO_PARSE_DATE";
+
+ /**
+ * *************** Transferred from CustomReportWrapper
+ * *********************
+ */
+
+ // Default Oracle date format
+ public static final String DEFAULT_DATE_FORMAT = "%m/%d/%Y";
+
+ // Java date formats
+ public static final String JAVA_DATE_FORMAT_MMDDYYYY = "MM/dd/yyyy";
+
+ public static final String JAVA_DATE_FORMAT_MMDDYYYY_HR = "MM/dd/yyyy hh aaa" ; //01-SEP-2013 00 AM
+
+ public static final String JAVA_DATE_FORMAT_MMYYYY = "MM/yyyy";
+
+ public static final String JAVA_DATE_FORMAT_DDMONYYYY = "dd-MMM-yyyy";
+
+ public static final String JAVA_DATE_FORMAT_DDMONYYYY_HR = "dd-MMM-yyyy hh aaa" ; //01-SEP-2013 00 AM
+
+ public static final String JAVA_DATE_FORMAT_MONTHDDYYYY = "MMMMMMMM dd, yyyy";
+
+ public static final String JAVA_DATE_FORMAT_MONTHYYYY = "MMMMMMMM, yyyy";
+
+ // Filter predefined values
+ public static final String FILTER_MAX_VALUE = "[MAX_VALUE]"; // Max value
+ // in that
+ // database
+ // column
+
+ public static final String FILTER_MIN_VALUE = "[MIN_VALUE]"; // Min value
+ // in that
+ // database
+ // column
+
+ // Column type constants
+ public static final String CT_CHAR = "VARCHAR2";
+
+ public static final String CT_NUMBER = "NUMBER";
+
+ public static final String CT_DATE = "DATE";
+
+ public static final String CT_HYPERLINK = "HYPERLINK";
+
+ public static final String CT_TIMESTAMP = "TIMESTAMP";
+
+ // Filter argument type constants
+ public static final String AT_FORMULA = "FORMULA"; // Exact expression -
+ // can be anything as
+ // long as fits in the
+ // SQL statement
+
+ public static final String AT_VALUE = "VALUE"; // Constant value - example
+ // 35 or Amsterdam or
+ // 11/25/2004
+
+ public static final String AT_LIST = "LIST"; // List of constant value -
+ // must include formatting -
+ // like 'a','b' or
+ // TO_DATE('11/11/2001','MM/DD/YYYY'),TO_DATE('02/11/2001','MM/DD/YYYY')
+
+ public static final String AT_COLUMN = "COLUMN"; // Column id of one of
+ // the columns in the
+ // report
+
+ public static final String AT_FORM = "FORM"; // To be inserted in a form
+ // before running the report
+
+ // Report type constants
+ public static final String RT_LINEAR = "Linear";
+
+ public static final String RT_CROSSTAB = "Cross-Tab";
+
+ public static final String RT_DASHBOARD = "Dashboard";
+ public static final String RT_HIVE = "Hive";
+
+ // Report definition type constants
+ public static final String RD_VISUAL = "Visual";
+
+ public static final String RD_SQL_BASED = "SQL-based";
+
+ public static final String RD_SQL_BASED_DATAMIN = "SQL-based_Datamining";
+
+ // Column cross-tab position
+ public static final String CV_ROW = "ROW";
+
+ public static final String CV_COLUMN = "COLUMN";
+
+ public static final String CV_VALUE = "VALUE";
+
+ // Outer join type constants
+ public static final String OJ_CURRENT = "CURRENT"; // cur_table (+) =
+ // join_table
+
+ public static final String OJ_JOINED = "JOINED"; // cur_table =
+ // join_table (+)
+
+
+
+ // List of Available Total Functions
+ public static final String TOTAL_SUM_ID = "SUM(";
+
+ public static IdNameList TOTAL_FUNCTIONS = new IdNameList();
+
+ public static final String DB_LOCAL = "local";
+
+ public static final String DB_DEV = "dev";
+
+ public static final String DB_PROD = "prod";
+
+ public static final String SHELL_SCRIPT_NAME = "dwnldflatfile.sh";
+
+ public static final String SCHEDULE_SHELL_SCRIPT_NAME = "dwnldflatfileschedule.sh";
+
+ public static final String SHELL_QUERY_DIR = "query/";
+
+ public static final String SHELL_SCRIPTS_DIR = "scripts/";
+
+ public static final String SHELL_DATA_DIR = "data/";
+
+ public static final int WEB_VERSION = 0;
+
+ public static final int IPHONE_VERSION = 1;
+
+ public static final String MYSQL = "mysql";
+ public static final String ORACLE = "oracle";
+ public static final String POSTGRESQL = "postgresql";
+
+ // COLORS to be used in Excel
+ public static String Aqua = "#00FFFF";
+ public static String Black = "#000000";
+ public static String Blue = "#0000FF";
+ public static String Fuchsia = "#FF00FF";
+ public static String Gray = "#808080";
+ public static String Green = "#008000";
+ public static String Lime = "#00FF00";
+ public static String Maroon = "#800000";
+ public static String Navy = "#000080";
+ public static String Olive = "#808000";
+ public static String Orange = "#FF9900";
+ public static String Purple = "#800080";
+ public static String Red = "#FF0000";
+ public static String Silver = "#C0C0C0";
+ public static String Teal = "#008080";
+ public static String White = "#FFFFFF";
+ public static String Yellow = "#FFFF00";
+ // End
+ public static void initializeAppConstants() {
+ // Initialize TOTAL_FUNCTIONS
+ if (TOTAL_FUNCTIONS.getCount() == 0) {
+ TOTAL_FUNCTIONS.addValue(TOTAL_SUM_ID, "Sum");
+ TOTAL_FUNCTIONS.addValue("MAX(", "Max");
+ TOTAL_FUNCTIONS.addValue("MIN(", "Min");
+ TOTAL_FUNCTIONS.addValue("COUNT(ALL ", "Count All");
+ TOTAL_FUNCTIONS.addValue("COUNT(DISTINCT ", "Count Distinct");
+ TOTAL_FUNCTIONS.addValue("AVG(ALL ", "Average All");
+ TOTAL_FUNCTIONS.addValue("AVG(DISTINCT ", "Average Distinct");
+ TOTAL_FUNCTIONS.addValue("VARIANCE(ALL ", "Variance All");
+ TOTAL_FUNCTIONS.addValue("VARIANCE(DISTINCT ", "Variance Distinct");
+ TOTAL_FUNCTIONS.addValue("STDDEV(ALL ", "Standard Deviation All");
+ TOTAL_FUNCTIONS.addValue("STDDEV(DISTINCT ", "Standard Deviation Distinct");
+ TOTAL_FUNCTIONS.addValue("AVG(ALL +STDDEV(ALL ",
+ "Average + Standard Deviation All");
+ TOTAL_FUNCTIONS.addValue("AVG(ALL +2*STDDEV(ALL ",
+ "Average + 2 * Standard Deviation All");
+ TOTAL_FUNCTIONS.addValue("AVG(ALL -STDDEV(ALL ",
+ "Average - Standard Deviation All");
+ TOTAL_FUNCTIONS.addValue("AVG(ALL -2*STDDEV(ALL ",
+ "Average - 2 * Standard Deviation All");
+ } // if
+
+ // ...
+ } // initializeAppConstants
+
+} // AppConstants
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/DataSet.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/DataSet.java
new file mode 100644
index 00000000..e70a2ed2
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/DataSet.java
@@ -0,0 +1,177 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+import java.io.Serializable;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.Vector;
+
+public class DataSet extends Vector implements Serializable {
+ private Vector columnNames = null;
+
+ private Vector columnTypes = null;
+
+ public DataSet(ResultSet rs) throws SQLException {
+ this(rs, Integer.MAX_VALUE);
+ } // DataSet
+
+ public DataSet(ResultSet rs, int maxRowLimit) throws SQLException {
+ ResultSetMetaData rsmd = rs.getMetaData();
+ int mb = 1024*1024;
+ Runtime runtime = Runtime.getRuntime();
+
+ int colCount = rsmd.getColumnCount();
+ columnNames = new Vector(colCount);
+ columnTypes = new Vector(colCount);
+ for (int i = 1; i <= colCount; i++) {
+ columnNames.add(rsmd.getColumnLabel(i)); // getColumnLabel ??
+ columnTypes.add(rsmd.getColumnTypeName(i));
+ } // for
+
+ while (rs.next() && size() < maxRowLimit) {
+// if(runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*(Globals.getMemoryThreshold()*2)/100) ) {
+// System.out.println("freeMemory " + runtime.freeMemory());
+// System.out.println("Max Memory " + runtime.maxMemory());
+// System.out.println("If Logic " + (runtime.freeMemory()/mb <= ((runtime.maxMemory()/mb)*(Globals.getMemoryThreshold()*2)/100)));
+// break;
+// }
+
+ Vector v = new Vector(colCount);
+ for (int i = 1; i <= colCount; i++)
+ v.add(rs.getString(i));
+ add(v);
+ } // while
+
+ if(rs!=null)
+ rs.close();
+ } // DataSet
+
+ public DataSet() {
+ columnNames = new Vector();
+ columnTypes = new Vector();
+ } // DataSet
+
+ public void insertRow(int rowIdx) {
+ if (rowIdx > size())
+ rowIdx = size();
+
+ Vector v = new Vector(columnNames.size());
+ for (int i = 0; i < columnNames.size(); i++)
+ v.add("");
+ add(rowIdx, v);
+ } // insertRow
+
+ public void insertColumn(int colIdx, String colName) {
+ insertColumn(colIdx, colName, "VARCHAR2");
+ } // insertColumn
+
+ public void insertColumn(int colIdx, String colName, String colType) {
+ if (colIdx > columnNames.size())
+ colIdx = columnNames.size();
+
+ columnNames.add(colIdx, colName);
+ columnTypes.add(colIdx, colType);
+
+ for (int i = 0; i < size(); i++)
+ ((Vector) get(i)).add(colIdx, "");
+ } // insertColumn
+
+ public void setValue(int rowIdx, int colIdx, String value) {
+ ((Vector) get(rowIdx)).set(colIdx, value);
+ } // setValue
+
+ public void setValue(int rowIdx, String colName, String value) {
+ ((Vector) get(rowIdx)).set(getColumnIndex(colName), value);
+ } // setValue
+
+ public void setString(int rowIdx, int colIdx, String value) {
+ setValue(rowIdx, colIdx, value);
+ } // setString
+
+ public void setString(int rowIdx, String colName, String value) {
+ setValue(rowIdx, colName, value);
+ } // setString
+
+ public int getRowCount() {
+ return size();
+ } // getRowCount()
+
+ public int getColumnCount() {
+ return columnNames.size();
+ } // getColumnCount
+
+ public String getColumnName(int colIdx) {
+ return ((String) columnNames.get(colIdx));
+ } // getColumnName
+
+ public String getColumnType(int colIdx) {
+ return ((String) columnTypes.get(colIdx));
+ } // getColumnType
+
+ public String getColumnType(String colName) {
+ return getColumnType(getColumnIndex(colName));
+ } // getColumnType
+
+ public int getColumnIndex(String colName) {
+ for (int i = 0; i < columnNames.size(); i++)
+ if (colName.equalsIgnoreCase((String) columnNames.get(i)))
+ return i;
+
+ return -1;
+ } // getColumnIndex
+
+ public String getString(int rowIdx, int colIdx) {
+ return nvl((String) ((Vector) get(rowIdx)).get(colIdx));
+ } // getString
+
+ public String getString(int rowIdx, String colName) {
+ return getString(rowIdx, getColumnIndex(colName));
+ } // getString
+
+ public int getInt(int rowIdx, int colIdx) {
+ return Integer.parseInt(getString(rowIdx, colIdx));
+ } // getString
+
+ public int getInt(int rowIdx, String colName) {
+ return getInt(rowIdx, getColumnIndex(colName));
+ } // getString
+
+ public String getItem(int rowIdx, int colIdx) {
+ return getString(rowIdx, colIdx);
+ } // getItem
+
+ public String getItem(int rowIdx, String colName) {
+ return getString(rowIdx, colName);
+ } // getItem
+
+ /** *********************************************************************** */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+} // DataSet
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/ExcelColorDef.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/ExcelColorDef.java
new file mode 100644
index 00000000..6a03354e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/ExcelColorDef.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.util;
+
+
+import java.util.HashMap;
+
+import org.apache.poi.hssf.util.HSSFColor;
+
+public class ExcelColorDef {
+
+ /**
+ * @param args
+ */
+ public static HashMap colors = new HashMap();
+
+ public static void initializeExcelColorDef() {
+ colors.put("#00FFFF",new Short(HSSFColor.AQUA.index));
+ colors.put("#000000",new Short(HSSFColor.BLACK.index));
+ colors.put("#0000FF",new Short(HSSFColor.BLUE.index));
+ colors.put("#FF00FF",new Short(HSSFColor.PINK.index));
+ colors.put("#808080",new Short(HSSFColor.GREY_40_PERCENT.index));
+ colors.put("#008000",new Short(HSSFColor.BRIGHT_GREEN.index));
+ colors.put("#00FF00",new Short(HSSFColor.LIME.index));
+ colors.put("#800000",new Short(HSSFColor.MAROON.index));
+ colors.put("#000080",new Short(HSSFColor.ROYAL_BLUE.index));
+ colors.put("#808000",new Short(HSSFColor.OLIVE_GREEN.index));
+ colors.put("#FF9900",new Short(HSSFColor.ORANGE.index));
+ colors.put("#800080",new Short(HSSFColor.VIOLET.index));
+ colors.put("#FF0000",new Short(HSSFColor.RED.index));
+ colors.put("#C0C0C0",new Short(HSSFColor.CORAL.index));
+ colors.put("#008080",new Short(HSSFColor.TEAL.index));
+ colors.put("#FFFFFF",new Short(HSSFColor.WHITE.index));
+ colors.put("#FFFF00",new Short(HSSFColor.YELLOW.index));
+
+ }
+
+ public static short getExcelColor( String color) {
+ if ((colors != null) && (colors.containsKey(color))) {
+ return ((Short) colors.get(color)).shortValue();
+ }
+
+ return new Short(HSSFColor.WHITE.index).shortValue();
+ }
+
+ public static void main(String[] args) {
+ // TODO Auto-generated method stub
+
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/HtmlStripper.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/HtmlStripper.java
new file mode 100644
index 00000000..c1ffa70f
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/HtmlStripper.java
@@ -0,0 +1,155 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class HtmlStripper extends RaptorObject// this function can be accessed publicly
+{
+
+ String filename;
+ final char TXT_END_TAG = '>';
+ final char TXT_START_TAG = '<';
+
+ public String stripSpecialCharacters (String s) {
+ s = nvl(s);
+ StringBuffer sbuf = new StringBuffer();
+ int c;
+ int prev_char = 0;
+ boolean inText = true;
+ for (int i = 0; i < s.length(); i++) {
+ // while c is not last character
+ c = s.charAt(i);
+ //System.out.println("444 Character " + (char)c + " int " + c);
+ if ((char) c == TXT_END_TAG) {
+ // if char == '>' text following
+ // it and not HTML tag
+ inText = true;
+ } else if ((char) c == TXT_START_TAG) {
+ // if char == '<' tag is
+ // following not text
+ inText = false;
+ } /*else if ((char)c == '\n') {
+ System.out.println("new line " + (char)c + " int " + c);
+ inText = false;
+ }*/ /*else if ((char) c == '&') {
+ // if char == '&' chars following
+ // are not text
+ inText = false;
+ }*/
+ else if (inText) {
+ // if text write char to "text.txt"
+ //System.out.println("444444 Adding " + (char)c + " int " + c);
+ if (c >= 32 && c <= 122) {
+ if(c==32 || (c>32 && c<=47) || ( c>=58 && c<=64 )) {
+ if (c == 45) {
+ prev_char = 0;
+ sbuf.append((char) 45);
+ }
+ else if(prev_char != 95) {
+ prev_char = 95;
+ sbuf.append((char) 95);
+ }
+ }
+ else {
+ prev_char=0;
+ sbuf.append((char) c);
+ }
+ }
+ }
+ }
+ //System.out.println("\n\nFinished processing: " + s + "\n\n");
+ //System.out.println("\n\nThe processed String : " + sbuf.toString() + "\n\n");
+ return sbuf.toString();
+ }
+
+ public String stripHtml(String s) {
+
+ //System.out.println("Starting to process: " + s + "\n\n"); // prints
+ s = nvl(s);
+ StringBuffer sbuf = new StringBuffer();
+ int c;
+ boolean inText = true;
+ for (int i = 0; i < s.length(); i++) {
+ // while c is not last character
+ c = s.charAt(i);
+ if ((char) c == TXT_END_TAG) {
+ // if char == '>' text following
+ // it and not HTML tag
+ inText = true;
+ } else if ((char) c == TXT_START_TAG) {
+ // if char == '<' tag is
+ // following not text
+ inText = false;
+ } /*else if ((char)c == '\n') {
+ System.out.println("new line " + (char)c + " int " + c);
+ inText = false;
+ }*/ /*else if ((char) c == '&') {
+ // if char == '&' chars following
+ // are not text
+ inText = false;
+ }*/
+ else if (inText) {
+ // if text write char to "text.txt"
+ if (c >= 32 && c <= 122) {
+ sbuf.append((char) c);
+ }
+ }
+ }
+ //System.out.println("\n\nFinished processing: " + s + "\n\n");
+ //System.out.println("\n\nThe processed String : " + sbuf.toString() + "\n\n");
+ int pos = 0 ;
+ while(sbuf.indexOf("&nbsp;")!=-1) {
+ pos = sbuf.indexOf("&nbsp;");
+ sbuf.replace(pos, pos+6, " ");
+ }
+
+ return sbuf.toString();
+ }
+
+
+ public String stripCSVHtml (String s) {
+ String s1 = stripHtml(s);
+ //s1 = Utils.replaceInString(s1, "\"", "\"\"");
+ s1 = s1.replaceAll("\"", "\"\"");
+ return s1;
+ }
+
+ public static void main(String[] args) {
+
+ String st = " Import: report name hello $ # " ;
+ System.out.println("hello " + new HtmlStripper().stripSpecialCharacters(st));
+ StringBuffer strBuf = new StringBuffer("");
+ strBuf.append("<table class=\"mTAB\" border=\"0\" width=\"60%\">\n<tr class=\"rowalt1\">\n");
+ strBuf.append(" <td>Charge To Account</td> <td>ABBZ2</td>\n");
+ strBuf.append("</tr>\n");
+ strBuf.append("<tr class=\"rowalt2\">");
+ strBuf.append("<td>dateMonth</td> <td> 04/30/2008 </td>");
+ strBuf.append("</tr>");
+ strBuf.append("<tr class=\"rowalt1\">");
+ strBuf.append("<td>Generated Date/Time</td> <td> 05/30/2008 06:15:16 PM GMT </td>");
+ strBuf.append("</tr>");
+ strBuf.append("<tr class=\"rowalt2\">");
+ strBuf.append("<td>Login Id:</td> <td> sundar </td>");
+ strBuf.append("</tr>");
+ strBuf.append("</table>");
+ new HtmlStripper().stripHtml(strBuf.toString());
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Log.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Log.java
new file mode 100644
index 00000000..3220eeb2
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Log.java
@@ -0,0 +1,40 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+public class Log {
+
+ public Log() {
+ }
+
+ public static void write(String info) {
+ System.out.println(info);
+ } // write
+
+ public static void write(String info, int debugLevel) {
+ if (debugLevel <= org.openecomp.portalsdk.analytics.system.Globals.getDebugLevel())
+ write(info);
+ } // write
+
+ public static void writeError(String info) {
+ System.err.println(info);
+ } // writeError
+
+} // Log
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/RemDbInfo.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/RemDbInfo.java
new file mode 100644
index 00000000..2d9bef42
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/RemDbInfo.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.util;
+
+import java.util.HashMap;
+
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+public class RemDbInfo {
+ private HashMap remDbMap = null;
+ private HashMap remDbTypeMap = null;
+
+ public RemDbInfo() throws Exception {
+ if (remDbMap == null) {
+ load();
+ }
+ }
+
+ public void load() throws Exception {
+ remDbMap = new HashMap();
+ remDbTypeMap = new HashMap();
+ try {
+ //String query = " SELECT a.SCHEMA_ID, a.SCHEMA_DESC, DATASOURCE_TYPE, rownum id FROM SCHEMA_INFO a " +
+ // " where schema_id = 'local' union " +
+ // " SELECT a.SCHEMA_ID, a.SCHEMA_DESC, DATASOURCE_TYPE, (rownum+1) id FROM SCHEMA_INFO a " +
+ // " where schema_id <> 'local' order by id ";
+ String query = Globals.getRemoteDbSchemaSql();
+ DataSet ds = null;
+ Globals.getDbUtils();
+ ds = DbUtils.executeQuery(query);
+
+ String prefix = "", desc = "", dbType = "";
+
+ if(ds.getRowCount() > 0) {
+ for (int i = 0; i < ds.getRowCount(); i++) {
+ prefix = ds.getItem(i, 0);
+ desc = ds.getItem(i, 1);
+ dbType = ds.getItem(i, 2);
+
+ remDbMap.put(prefix, desc);
+ remDbTypeMap.put(prefix, dbType);
+ }
+ } else {
+ remDbMap.put("local", "local");
+ remDbTypeMap.put("local", Globals.getDBType());
+ }
+ }
+ catch (Exception e) {}
+
+ }
+
+ public String getDesc(String prefix) {
+ if ((remDbMap != null) && (remDbMap.containsKey(prefix))) {
+ return (String) remDbMap.get(prefix);
+ }
+
+ return "";
+ }
+
+ public String getDBType(String prefix) {
+ if ((remDbTypeMap != null) && (remDbTypeMap.containsKey(prefix))) {
+ return (String) remDbTypeMap.get(prefix);
+ }
+
+ return "";
+ }
+
+ public HashMap getDbHash() {
+ return remDbMap;
+ }
+
+ public HashMap getDbTypeHash() {
+ return remDbTypeMap;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/SQLCorrector.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/SQLCorrector.java
new file mode 100644
index 00000000..15b4042a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/SQLCorrector.java
@@ -0,0 +1,343 @@
+/*-
+ * ================================================================================
+ * 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.util;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import org.openecomp.portalsdk.core.logging.logic.EELFLoggerDelegate;
+
+public class SQLCorrector {
+
+ static EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(SQLCorrector.class);
+
+
+ public String fixSQL(StringBuffer sql) {
+
+ int pos = 0;
+ //int pos_f_select_from = 0;
+ int pos_f_select_to = 0;
+ int pos_s_select_from = 0;
+ int pos_s_select_to = 0;
+ int pos_dup_select = 0;
+ int pos_dup_select1 = 0;
+ int pos_f_format = 0;
+ int pos_t_format = 0;
+ int pos_alias_format = 0;
+ int pos_alias = 0;
+ String format = "";
+ String alias = null;
+ String sql2 = Utils.replaceInString(sql.toString(), "\n", " ");
+ sql2 = Utils.replaceInString(sql2, "\t", " ");
+ sql = new StringBuffer(sql2);
+ if (sql.indexOf("FROM", 2) != -1) {
+ pos = sql.indexOf("FROM", 2);
+ pos_f_select_to = sql.indexOf("FROM", 2);
+ if (sql.indexOf("SELECT", pos)!=-1) {
+ pos = sql.indexOf("SELECT", pos);
+ pos_s_select_from = pos;
+ pos_dup_select1 = pos;
+ //System.out.println(pos);
+ if (sql.indexOf("FROM", pos)!=-1) {
+ pos = sql.indexOf("FROM", pos);
+ pos_dup_select = sql.lastIndexOf("SELECT",pos);
+ while(pos_dup_select > pos_dup_select1) {
+ pos_dup_select1 = pos_dup_select;
+ pos = sql.indexOf("FROM", pos + 2);
+ pos_dup_select = sql.lastIndexOf("SELECT",pos);
+ }
+ pos_s_select_to = pos;
+
+ }
+ }
+ }
+
+ String o_sql = sql.substring(0, pos_f_select_to-1);
+ String i_sql = sql.substring(pos_s_select_from, pos_s_select_to-1);
+ o_sql = o_sql.toUpperCase();
+ i_sql = i_sql.toUpperCase();
+ String outer_sql = o_sql.substring(o_sql.indexOf("SELECT")+7);
+ String inner_sql = i_sql.substring(i_sql.indexOf("SELECT")+7);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("|"+inner_sql+"|"));
+ String outer_cols[] = outer_sql.split(",");
+ //inner_sql = inner_sql.replaceAll(", '", ",'");
+
+ String inner_cols[] = inner_sql.split(", ");
+ inner_cols = removeExtraSpace(inner_cols);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("*******OuterCols ********"));
+ printArray(outer_cols);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("\n*******InnerCols********"));
+ printArray(inner_cols);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("\n********Replacing Elements*****"));
+ ArrayList elements = findSum(outer_cols);
+ logger.debug(EELFLoggerDelegate.debugLogger, ("In Fix SQL " + elements.size()));
+ printArrayList(elements);
+ HashMap elementFormatMap = matchAndGetFormatInInnerCol(elements, inner_cols);
+ ArrayList outerReplacedCols = replaceOuterCols(elementFormatMap, outer_cols);
+ String finalSql = generateSQL(outerReplacedCols, sql.toString());
+ return finalSql;
+ }
+ /**
+ * @param args
+ */
+ public static void main(String[] args) {
+
+ SQLCorrector s = new SQLCorrector();
+ StringBuffer strBuf = new StringBuffer();
+ strBuf.append("SELECT NULL TOTAL_BILLMONTH, NULL TOTAL_ACCOUNTNUMBER, NULL TOTAL_SECTORCODE, NULL TOTAL_BUSINESS_UNIT_CODE, NULL TOTAL_BILLINGSITEID, NULL TOTAL_SITEADDRESS, NULL TOTAL_SITECITY, NULL TOTAL_SITESTATE, NULL TOTAL_VENDORNAME, NULL TOTAL_INVOICENUMBER, NULL TOTAL_INVOICEDATE, NULL TOTAL_SERVICEDESCRIPTION, SUM(INVOICEAMOUNT) TOTAL_INVOICEAMOUNT FROM (SELECT '2006/09/16 - 2006/10/15' BillMonth, account_number AccountNumber, (select distinct sector_code FROM billing_site where business_unit_code = BU) SectorCode, BU||' - '||(select distinct business_unit_name FROM billing_site where business_unit_code = BU) Business_Unit_Code, Site_ID BillingSiteID, site_address1 SiteAddress, site_city SiteCity, site_state SiteState, Vendor_Site_Name VendorName, invoice_number InvoiceNumber, to_char(invoice_date,'YYYY/MM/DD') InvoiceDate, billing_service_description ServiceDescription, to_char(payment_amount,'9,999,999.99') InvoiceAmount");
+ strBuf.append(" FROM cis_gm_passthrough ");
+ strBuf.append(" where ");
+ strBuf.append(" BU = decode(upper('ALL'), 'ALL', BU, substr('ALL', 1, 3)) ");
+ strBuf.append(" and BU in (SELECT distinct business_unit_code FROM billing_site where ");
+ strBuf.append(" sector_code = decode('ALL', 'ALL', sector_code, 'ALL') ");
+ strBuf.append(" and CHECK_USER_SECURITY(10, 'BUSINESS_UNIT_CODE', business_unit_code)='Y') ");
+ strBuf.append(" and to_char(bill_cycle_start_date, 'YYYY/MM/DD') = substr('2006/09/16 - 2006/10/15', 1, 10) ");
+ strBuf.append(" and to_char(bill_cycle_end_date, 'YYYY/MM/DD') = substr('2006/09/16 - 2006/10/15', 14, 10)");
+ strBuf.append(" order by business_unit_code, sitecity, sitestate, invoicedate, servicedescription ) totalSQL ");
+ String sql = strBuf.toString();
+ String fix_sql = s.fixSQL(new StringBuffer(sql.toUpperCase()));
+ logger.debug(EELFLoggerDelegate.debugLogger, (fix_sql));
+ // TODO Auto-generated method stub
+
+ }
+
+ private String[] removeExtraSpace (String[] inner_cols) {
+ String [] fixed_cols = new String[inner_cols.length];
+ for (int i = 0; i < inner_cols.length; i++) {
+ fixed_cols[i] = inner_cols[i].replaceAll(", '", ",'");
+ }
+ return fixed_cols;
+ }
+
+ private void printArray (String[] arr) {
+ logger.debug(EELFLoggerDelegate.debugLogger, (""));
+ for (int i = 0; i < arr.length; i++) {
+ System.out.print(arr[i].trim());
+ if(i<arr.length-1)
+ logger.debug(EELFLoggerDelegate.debugLogger, (","));
+ }
+ }
+
+ private void printArrayList (ArrayList arrList) {
+ logger.debug(EELFLoggerDelegate.debugLogger, (" ArrayList "));
+ for (int i = 0; i < arrList.size(); i++) {
+ System.out.print(arrList.get(i));
+ if(i<arrList.size()-1)
+ logger.debug(EELFLoggerDelegate.debugLogger, (","));
+ }
+ }
+
+ private ArrayList findSum (String[] arr ) {
+ CharSequence inputString = null;
+ Pattern pattern = null;
+ Matcher matcher = null;
+ ArrayList elements = new ArrayList();
+ boolean b = false;
+ for (int i = 0; i < arr.length; i++) {
+ //System.out.print(arr[i].trim());
+ inputString = arr[i].trim();
+ //debugLogger.debug(inputString);
+ //String keyPattern = "/SUM(|AVG|COUNT|STDDEV/";
+ String keyPattern = "SUM\\(|AVG\\(|COUNT\\(|STDDEV\\(|VARIANCE\\(|SUM \\(|AVG \\(|COUNT \\(|STDDEV \\(|VARIANCE \\(";
+ pattern = Pattern.compile(keyPattern);
+ matcher = pattern.matcher(inputString);
+ b = matcher.find();
+ //debugLogger.debug(b);
+ if(b) {
+ elements.add(arr[i].trim());
+ }
+ }
+ //debugLogger.debug("In Find Sum " + elements.size());
+ return elements;
+
+ }
+
+
+ private HashMap matchAndGetFormatInInnerCol(ArrayList arrList, String[] inner_cols) {
+ HashMap elementFormat = new HashMap();
+ String totalElement = null;
+ String extractedElement = null;
+ String format = null;
+ int pos = 0;
+ //debugLogger.debug("arrList.size() " + arrList.size());
+ for (int i = 0; i < arrList.size(); i++) {
+ totalElement = (String) arrList.get(i);
+ //debugLogger.debug("\nTotalElement " + totalElement);
+ extractedElement = totalElement.substring(totalElement.indexOf("(")+1, totalElement.indexOf(")") );
+ for (int j = 0; j < inner_cols.length; j++) {
+ //debugLogger.debug("Format " + inner_cols[j] + " " + extractedElement);
+ if(inner_cols[j].lastIndexOf(extractedElement)!=-1) {
+ if(inner_cols[j].indexOf("999")!=-1 && inner_cols[j].indexOf("TO_CHAR")!=-1) {
+ pos = inner_cols[j].indexOf("TO_CHAR");
+ pos = inner_cols[j].lastIndexOf(",'");
+ if(pos == -1)
+ pos = inner_cols[j].lastIndexOf(", '");
+ //debugLogger.debug("Format before " + inner_cols[j] + "\n*** " + pos+ " " + (inner_cols[j].substring(pos+2, inner_cols[j].indexOf("'", pos+2))));
+ format = inner_cols[j].substring(pos+2, inner_cols[j].indexOf("'", pos+2));
+ }
+ }
+ }
+ if(format!=null) {
+ //debugLogger.debug("Match and Get Format In Inner " + totalElement + " " + format);
+ elementFormat.put(totalElement, format);
+
+ }
+ format = null;
+ }
+
+ return elementFormat;
+ }
+
+ private ArrayList replaceOuterCols (HashMap hashMap, String[] outer_cols) {
+ Set mapSet = hashMap.entrySet();
+ String element = "", value = "";
+ ArrayList finalElements = new ArrayList();
+ Map.Entry me;
+ int flag=0;
+ for (int i = 0; i < outer_cols.length; i++) {
+ flag = 0;
+ for (Iterator iter = mapSet.iterator(); iter.hasNext();) {
+ me=(Map.Entry)iter.next();
+ element = (String) me.getKey();
+ value = (String) me.getValue();
+ //debugLogger.debug("Replace Map entry " + element + " " + value);
+ //debugLogger.debug("Replace " + outer_cols[i] + " " + element);
+ if(outer_cols[i].trim().equals(element.trim())) {
+ flag = 1;
+ //debugLogger.debug("I am here " + element + " " + value );
+ finalElements.add(addFormat(element,value));
+ }
+ }
+ if(flag == 0)
+ finalElements.add(outer_cols[i]);
+ }
+ return finalElements;
+ }
+
+ private String addFormat (String element, String value) {
+ StringBuffer elementBuf = new StringBuffer (element);
+ StringBuffer finalElement = new StringBuffer("");
+ String extractedElement = elementBuf.substring(elementBuf.indexOf("(")+1,elementBuf.indexOf(")"));
+ String alias = elementBuf.substring(elementBuf.lastIndexOf(" ")+1);
+ String operation = elementBuf.substring(0,elementBuf.indexOf("("));
+ //debugLogger.debug("Add Format " + alias + " "+ extractedElement);
+ finalElement.append("TO_CHAR (")
+ .append(operation)
+ .append("(TO_NUMBER (")
+ .append(extractedElement)
+ .append(",'" + value +"'")
+ .append(")),'"+value + "') ")
+ .append(alias);
+/* elementBuf.insert(0, "TO_CHAR (");
+ elementBuf.insert(elementBuf.lastIndexOf(")")+1,value+"')");
+ debugLogger.debug("FORMAT " + element);
+ debugLogger.debug("FORMAT BUF " + elementBuf.toString());
+ debugLogger.debug("Format " + finalElement.toString());
+*/
+ //debugLogger.debug("Final Element " + finalElement.toString());
+ return finalElement.toString();
+ }
+
+ private String generateSQL( ArrayList outerSql, String sql) {
+
+ StringBuffer finalSql = new StringBuffer("SELECT ") ;
+
+ for (int i = 0; i < outerSql.size(); i++) {
+ finalSql.append(outerSql.get(i));
+ if ( i < outerSql.size()-1 )
+ finalSql.append(",");
+ }
+ finalSql.append(" "+sql.substring(sql.indexOf("FROM")));
+ logger.debug(EELFLoggerDelegate.debugLogger, (" ---" + finalSql.toString()));
+ return finalSql.toString();
+ }
+
+
+/* public String fixCrosstabSQL1(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);
+ debugLogger.debug("pos" + pos);
+ if(sql.indexOf("999",pos)!= -1) {
+ pos = sql.indexOf("999",pos);
+ pos_f_format = sql.lastIndexOf(", '", pos);
+ debugLogger.debug("pos_f_format" + pos_f_format);
+ 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
+*/
+
+
+}
+
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Scheduler.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Scheduler.java
new file mode 100644
index 00000000..731a50ee
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Scheduler.java
@@ -0,0 +1,91 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+import java.sql.SQLException;
+import java.util.Timer;
+import java.util.TimerTask;
+
+import org.openecomp.portalsdk.analytics.scheduler.SendNotifications;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+
+public class Scheduler extends TimerTask {
+ private Timer timer = new Timer(true);
+
+ private int timeInterval = 0;
+
+ public Scheduler(int timeInterval) {
+ super();
+
+ this.timeInterval = timeInterval;
+ start();
+ } // Scheduler
+
+ public void start() {
+ if (timeInterval > 0)
+ timer.schedule(this, 0, timeInterval * 1000);
+ }
+
+ public void stop() {
+ timer.cancel();
+ }
+
+ public void run() {
+
+ SendNotifications sendNotifications = null;
+
+ try {
+ Log.write("[Scheduler.run " + (new java.util.Date()).toString()
+ + "] Sending notifications...", 4);
+ //System.out.println("SMTP Server " + AppUtils.getSMTPServer());
+ //System.out.println("System Name " + Globals.getSystemName());
+ //System.out.println("DefaultEmailSender " + AppUtils.getDefaultEmailSender());
+ //System.out.println("DirectAccessURL " + AppUtils.getDirectAccessURL());
+ //System.out.println("timeInterval " + timeInterval);
+ /*
+ DbUtils.executeCall(
+ "BEGIN cr_raptor.send_notifications(" +
+ "'" + AppUtils.getSMTPServer() + "', " +
+ "'" + AppUtils.getDefaultEmailSender() + "', " +
+ "'" + Globals.getSystemName() + "', " +
+ "'" + AppUtils.getDirectAccessURL() + "', " +
+ timeInterval +
+ "); END;", false);
+ */
+ sendNotifications = new SendNotifications();
+ sendNotifications.send_notification(AppUtils.getSMTPServer(), AppUtils.getSMTPServer(), Globals.getSystemName() ,
+ AppUtils.getDirectAccessURL(), timeInterval);
+
+ } catch (Exception e) {
+ Log.write("[SYSTEM ERROR Scheduler.run] Exception: " + e.getMessage());
+ //e.printStackTrace();
+ }
+ finally {
+
+ try {
+ sendNotifications.deInit();
+ } catch (SQLException e) {
+ Log.write("[SYSTEM ERROR Scheduler.run] Could not close connection: " + e.getMessage());
+ }
+ }
+ } // run
+
+} // Scheduler
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Utils.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Utils.java
new file mode 100644
index 00000000..1995c567
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/Utils.java
@@ -0,0 +1,378 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+import java.io.File;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+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.base.IdNameValue;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.Globals;
+import org.openecomp.portalsdk.analytics.system.fusion.adapter.Item;
+
+
+public class Utils extends org.openecomp.portalsdk.analytics.RaptorObject {
+
+ public Utils() {
+ }
+
+ public static String getCurrentDateTime() {
+ return (new SimpleDateFormat(Globals.getJavaTimeFormat())).format(new Date());
+ } // getCurrentDateTime
+
+ public static String truncateDecimals(String value, int maxDecimals) {
+ return (maxDecimals < 0 || value == null || value.indexOf('.') < 0
+ || (value.indexOf('.') == value.length() - 1) || value.substring(
+ value.indexOf('.')).length() - 1 <= maxDecimals) ? value : value.substring(0,
+ value.indexOf('.') + maxDecimals + 1);
+ } // truncateDecimals
+
+ public static String truncateTotalDecimals(String value) {
+ return truncateDecimals(value, Globals.getMaxDecimalsOnTotals());
+ } // truncateTotalDecimals
+
+ public static String replaceInString(String replaceInStr, String replaceStr,
+ String replaceWithStr) {
+ if (replaceStr.equals(replaceWithStr))
+ return replaceInStr;
+
+ while (replaceInStr!=null && replaceInStr.indexOf(replaceStr) >= 0) {
+ int startIdx = replaceInStr.indexOf(replaceStr);
+ int endIdx = startIdx + replaceStr.length();
+
+ StringBuffer sb = new StringBuffer();
+ if (startIdx > 0)
+ sb.append(replaceInStr.substring(0, startIdx));
+ sb.append(nvls(replaceWithStr));
+ if (endIdx < replaceInStr.length())
+ sb.append(replaceInStr.substring(endIdx));
+ replaceInStr = sb.toString();
+ } // while
+
+ return replaceInStr;
+ } // replaceInString
+
+ public static String singleQuoteEncode(String value) {
+ value = value!=null?value:"";
+ value = Pattern.compile("[\']",Pattern.DOTALL).matcher(value).replaceAll("\\\\\\'");
+ return value;
+ }
+
+ public static String htmlEncode(String value) {
+ return replaceInString(replaceInString(value, "<", "&lt;"), ">", "&gt;");
+ } // htmlEncode
+
+ public static String excelEncode(String value) {
+ String replaceStr = replaceInString(replaceInString(value, "<", "&lt;"), ">", "&gt;");
+ String reg = "&(?!&#)";
+ Pattern p = Pattern.compile(reg);
+ String replaceStrAmpersand = p.matcher(replaceStr).replaceAll("&amp;");
+ return replaceStrAmpersand;
+ } // htmlEncode
+
+
+ public static String oracleSafe(String s) {
+ if (s == null)
+ return null;
+
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < s.length(); i++) {
+ char ch = s.charAt(i);
+ if (ch == '\''/* &&(i>=s.length()-1||s.charAt(i+1)!='\'') */)
+ sb.append('\'');
+ sb.append(ch);
+ } // for
+
+ return sb.toString();
+ } // oracleSafe
+
+
+ public static String javaSafe(String s) {
+ if (s == null)
+ return null;
+
+ StringBuffer sb = new StringBuffer();
+ for (int i = 0; i < s.length(); i++) {
+ char ch = s.charAt(i);
+ if (ch == '"')
+ sb.append('\\');
+ sb.append(ch);
+ } // for
+
+ return sb.toString();
+ } // javaSafe
+
+ public static Vector getUsersNotInList(List excludeValues, HttpServletRequest request)throws RaptorException {
+ HttpSession session = request.getSession();
+// String[] whereConditionAndSess = Globals.getWhereConditionForUserRole().split(",");
+// String whereCondition = "";
+// String conditionalValue = "";
+// for (int i = 0; i < whereConditionAndSess.length; i++) {
+// whereCondition = whereConditionAndSess[0];
+// }
+// for (int i = 1; i < whereConditionAndSess.length; i++) {
+// conditionalValue = whereConditionAndSess[1];
+// }
+// whereCondition = " where "+ whereCondition + "'" + (String)session.getAttribute(conditionalValue) + "'";
+
+// Vector allUsers = AppUtils.getAllUsers(whereCondition);
+ String query = Globals.getCustomizedScheduleQueryForUsers();
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ String userId = AppUtils.getUserID(request);
+ session.setAttribute("LOGGED_USERID", userId);
+ 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 allUsers = AppUtils.getAllUsers(query,param, isAdmin);
+ Vector result = new Vector(allUsers.size());
+
+ for (Iterator iter = allUsers.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+
+ boolean exclude = false;
+ for (Iterator iterE = excludeValues.iterator(); iterE.hasNext();)
+ if (((IdNameValue) iterE.next()).getId().equals(value.getId())) {
+ exclude = true;
+ break;
+ } // if
+
+ if (!exclude)
+ result.add(value);
+ } // for
+
+ return result;
+ } // getUsersNotInList
+
+ public static Vector getRolesNotInList(List excludeValues, HttpServletRequest request) throws RaptorException {
+ HttpSession session = request.getSession();
+ String query = Globals.getCustomizedScheduleQueryForRoles();
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ String userId = AppUtils.getUserID(request);
+ session.setAttribute("LOGGED_USERID", userId);
+ 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 result = new Vector(allRoles.size());
+
+ for (Iterator iter = allRoles.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+
+ boolean exclude = false;
+ for (Iterator iterE = excludeValues.iterator(); iterE.hasNext();)
+ if (((IdNameValue) iterE.next()).getId().equals(value.getId())) {
+ exclude = true;
+ break;
+ } // if
+
+ // Exclude the super role
+ if (value.getId().equals(AppUtils.getSuperRoleID()))
+ exclude = true;
+
+ if (!exclude)
+ result.add(value);
+ } // for
+
+ return result;
+ } // getRolesNotInList
+
+ public static List<Item> getUsersNotInListLatest(List excludeValues, HttpServletRequest request)throws RaptorException {
+ HttpSession session = request.getSession();
+ String query = Globals.getCustomizedScheduleQueryForUsers();
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ String userId = AppUtils.getUserID(request);
+ session.setAttribute("LOGGED_USERID", userId);
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String param = "";
+ for (int i = 0; i < sessionParameters.length; i++) {
+ param = (String)session.getAttribute(sessionParameters[i]);
+ 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 result = new Vector(allUsers.size());
+
+ List<Item> resultLatest = new ArrayList<Item>();
+
+ for (Iterator iter = allUsers.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+
+ boolean exclude = false;
+ for (Iterator iterE = excludeValues.iterator(); iterE.hasNext();)
+ if (((IdNameValue) iterE.next()).getId().equals(value.getId())) {
+ exclude = true;
+ break;
+ } // if
+
+ if (!exclude)
+ resultLatest.add(new Item(value.getId(), value.getName()));
+ } // for
+
+ return resultLatest;
+ } // getUsersNotInListLatest
+
+
+ public static List<Item> getRolesNotInListLatest(List excludeValues, HttpServletRequest request) throws RaptorException {
+ HttpSession session = request.getSession();
+ String query = Globals.getCustomizedScheduleQueryForRoles();
+ session.setAttribute("login_id", AppUtils.getUserBackdoorLoginId(request));
+ String userId = AppUtils.getUserID(request);
+ session.setAttribute("LOGGED_USERID", userId);
+ String[] sessionParameters = Globals.getSessionParams().split(",");
+ String param = "";
+ for (int i = 0; i < sessionParameters.length; i++) {
+ param = (String)session.getAttribute(sessionParameters[i]);
+ 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 result = new Vector(allRoles.size());
+
+ List<Item> resultLatest = new ArrayList<Item>();
+
+ for (Iterator iter = allRoles.iterator(); iter.hasNext();) {
+ IdNameValue value = (IdNameValue) iter.next();
+
+ boolean exclude = false;
+ for (Iterator iterE = excludeValues.iterator(); iterE.hasNext();)
+ if (((IdNameValue) iterE.next()).getId().equals(value.getId())) {
+ exclude = true;
+ break;
+ } // if
+
+ // Exclude the super role
+ if (value.getId().equals(AppUtils.getSuperRoleID()))
+ exclude = true;
+
+ if (!exclude)
+ resultLatest.add(new Item(value.getId(), value.getName()));
+ } // for
+
+ return resultLatest;
+ } // getRolesNotInList
+ /*
+ * public static String nvl(String s) { return (s==null)?"":s; } // nvl
+ *
+ * public static String nvl(String s, String sDefault) { return
+ * nvl(s).equals("")?sDefault:s; } // nvl
+ */
+
+ public static void _assert(boolean condition, String errMsg) {
+ if (org.openecomp.portalsdk.analytics.system.Globals.getDebugLevel() > 0)
+ if (!condition)
+ throw new RuntimeException(errMsg);
+ } // _assert
+
+ public static boolean isNull(String a) {
+ if ((a == null) || (a.length() == 0) || a.equalsIgnoreCase("null"))
+ return true;
+ else
+ return false;
+ }
+
+
+ public static boolean isDownloadFileExists(String fileNamePrefix) {
+ File f = new File (Globals.getShellScriptDir()+AppConstants.SHELL_DATA_DIR);
+ String[] fileNames = f.list();
+ //System.out.println("Util.boolean Prefix" + fileNamePrefix);
+ if(fileNames!=null) {
+ for (int i = 0; i < fileNames.length; i++) {
+ //System.out.println("Util.boolean " + fileNames[i]);
+ if(fileNames[i].startsWith(fileNamePrefix)) {
+ return true;
+ }
+ }
+ }
+ return false;
+
+ }
+
+ public static String getLatestDownloadableFile(String fileNamePrefix) {
+ File f = new File (Globals.getShellScriptDir()+AppConstants.SHELL_DATA_DIR);
+ String[] fileNames = f.list();
+ ArrayList matchingFiles = new ArrayList();
+ //System.out.println("Util.download Prefix" + fileNamePrefix);
+ for (int i = 0; i < fileNames.length; i++) {
+ //System.out.println("Util.download " + fileNames[i]);
+ if(fileNames[i].startsWith(fileNamePrefix)) {
+ matchingFiles.add(fileNames[i]);
+ }
+ }
+ //System.out.println("SIZE 1 " + matchingFiles.size());
+ String tmpFileName = "";
+ int numberOfTimesLooped = 0;
+ boolean isSorted = false;
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+ Date date1 = null, date2 = null;
+ Date currDate = new Date();
+ Object[] matchingfileNamesArr = matchingFiles.toArray();
+ //System.out.println("SIZE " + matchingFiles.size());
+ String fileName1 = "", fileName2 ="";
+ do {
+ isSorted = true;
+ for (int j = 1; j < matchingfileNamesArr.length - numberOfTimesLooped++; j++) {
+ fileName1 = (String) matchingfileNamesArr[j];
+ fileName2 = (String) matchingfileNamesArr[j-1];
+ try{
+ date1 = sdf.parse(fileName1.substring(fileName1.lastIndexOf("_")+1,fileName1.lastIndexOf(".")));
+ date2 = sdf.parse(fileName2.substring(fileName2.lastIndexOf("_")+1,fileName2.lastIndexOf(".")));
+ }
+ catch(ParseException ex) {
+ return null;
+ }
+
+ if ( (currDate.getTime()-date1.getTime()) < (currDate.getTime()-date2.getTime())) {
+ tmpFileName = fileName1;
+ matchingfileNamesArr[j] = fileName2;
+ matchingfileNamesArr[j-1] = tmpFileName;
+ isSorted = false;
+ }
+
+ }
+ } while (!isSorted);
+ if(matchingfileNamesArr.length>0)
+ return (String)matchingfileNamesArr[0];
+ else
+ return null;
+
+ }
+
+
+} // Utils
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/XSSFilter.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/XSSFilter.java
new file mode 100644
index 00000000..e6d01994
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/XSSFilter.java
@@ -0,0 +1,90 @@
+/*-
+ * ================================================================================
+ * 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.util;
+
+ /**
+ *
+ * This class is used to filter javascript tags to avoid XSS attacks.
+ */
+public class XSSFilter {
+
+ // private static String[] filterChars = { "<", ">", "<", ">", "\"", "\\", "0x" };
+// private static String[] replacementChars = { " ", " ", " ", " ", "'", "/", "0 x" };
+
+/* public static synchronized String filterRequest(String param) {
+ String value = param;
+
+ if (param != null) {
+
+ for (int i = 0; i < filterChars.length; i++) {
+ value = filterCharacters(filterChars[i], replacementChars[i],
+ value);
+ }
+
+ }
+
+ return value;
+
+ }
+*/
+
+ public static synchronized String filterRequestOnlyScript(String param) {
+ String value = "";
+ value = nvl(param);
+ value = value.replaceAll("<[\\s]*[sS][\\s]*[cC][\\s]*[rR][\\s]*[iI][\\s]*[pP][\\s]*[tT][\\s]*>", "");
+ value = value.replaceAll("</[\\s]*[sS][\\s]*[cC][\\s]*[rR][\\s]*[iI][\\s]*[pP][\\s]*[tT][\\s]*>", "");
+ value = value.replaceAll("[\\s]*[jJ][\\s]*[aA][\\s]*[vV][\\s]*[aA][\\s]*[sS][\\s]*[cC][\\s]*[rR][\\s]*[iI][\\s]*[pP][\\s]*[tT][\\s]*", "");
+ return value;
+ }
+ public static synchronized String filterRequest (String param) {
+ String value = "";
+ value = nvl(param);
+ value = value.replaceAll("<[\\s]*[sS][\\s]*[cC][\\s]*[rR][\\s]*[iI][\\s]*[pP][\\s]*[tT][\\s]*>", "");
+ value = value.replaceAll("</[\\s]*[sS][\\s]*[cC][\\s]*[rR][\\s]*[iI][\\s]*[pP][\\s]*[tT][\\s]*>", "");
+ value = value.replaceAll("[\\s]*[jJ][\\s]*[aA][\\s]*[vV][\\s]*[aA][\\s]*[sS][\\s]*[cC][\\s]*[rR][\\s]*[iI][\\s]*[pP][\\s]*[tT][\\s]*", "");
+ value = value.replaceAll("[\\s]*<", "");
+ value = value.replaceAll("[\\s]*>", "");
+
+ return value;
+ }
+
+// private static synchronized String filterCharacters(String originalChar, String newChar,
+// String param) {
+// StringBuffer sb = new StringBuffer(param);
+//
+// for (int position = param.toLowerCase().indexOf(originalChar); position >= 0;) {
+// sb.replace(position, position + originalChar.length(), newChar);
+// param = sb.toString();
+// position = param.toLowerCase().indexOf(originalChar);
+// }
+//
+// return sb.toString();
+// }
+
+ public static void main (String args[]) {
+ String value = XSSFilter.filterRequest("<s\nC\nr\nI\np\nT\n>\na\nl\ne\nr\nt\n('sundar');</SCRIPT>javascript:alert('Sundar');");
+ int i = Integer.parseInt("8989");
+ System.out.println(value);
+ }
+
+ private static String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/upgrade/SystemUpgrade.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/upgrade/SystemUpgrade.java
new file mode 100644
index 00000000..3c1f0dd4
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/util/upgrade/SystemUpgrade.java
@@ -0,0 +1,125 @@
+/*-
+ * ================================================================================
+ * 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.util.upgrade;
+
+import java.sql.Connection;
+import java.util.Iterator;
+import java.util.StringTokenizer;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.model.ReportLoader;
+import org.openecomp.portalsdk.analytics.model.base.ReportWrapper;
+import org.openecomp.portalsdk.analytics.model.definition.ReportDefinition;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.system.DbUtils;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+
+public class SystemUpgrade extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private static final String upgradeFromVersion = "1.x";
+ private static final String upgradeToVersion = "2.0";
+
+/* This script upgrades the Raptor database to a newer version
+ Make sure you execute the "upgrade_v0_to_v1_0_before_java.sql" before running this
+ and "upgrade_v0_to_v1_0_after_java.sql" afterwards
+
+ URL example: http://localhost:8082/databank/dispatcher?action=raptor&r_action=system_upgrade
+*/
+ public static String upgradeDB(HttpServletRequest request) {
+ request.setAttribute("system_message", "System upgrade disabled");
+ return "raptor/blank.jsp";
+
+/* try {
+ if(upgradeFromVersion.equals("1.x")&&upgradeToVersion.equals("2.0"))
+ upgrateFromV1ToV2_0(request);
+ else
+ throw new RuntimeException("Invalid version");
+
+ return "raptor/blank.jsp";
+ } catch(Exception e) {
+ return (new ErrorHandler()).processFatalError(request, e);
+ }*/
+ } // upgradeDB
+
+ private static void upgrateFromV1ToV2_0(HttpServletRequest request) throws Exception {
+ StringBuffer log = new StringBuffer();
+ log.append("Starting upgrade...<br>\n");
+
+ DataSet ds = DbUtils.executeQuery("SELECT cr.rep_id, cr.sched_mailto_user_ids FROM cr_report cr");
+ for(int i=0; i<ds.getRowCount(); i++) {
+ String repId = ds.getString(i, 0);
+ log.append("<li>Processing report ["+repId+"]: ");
+
+ Connection connection = DbUtils.startTransaction();
+ String emailIds = nvls(ds.getString(i, 1));
+ if(emailIds.length()>0)
+ try {
+ log.append("Converting emails ");
+ StringTokenizer st = new StringTokenizer(emailIds, ",");
+ while(st.hasMoreTokens()) {
+ String userId = nvls(st.nextToken());
+ log.append(userId);
+ if(userId.length()>0)
+ DbUtils.executeUpdate(connection, "INSERT INTO cr_report_schedule_users (rep_id, user_id) VALUES ("+repId+", "+userId+")");
+ log.append("-success, ");
+ } // while
+ log.append(" <font color=green>COMPLETED</font>; ");
+ } catch(Exception e) {
+ log.append("-<font color=red>FAILED</font>; ");
+ }
+
+ String reportXML = ReportLoader.loadCustomReportXML(repId);
+ ReportDefinition rdef = ReportDefinition.unmarshal(reportXML, repId, request);
+ ReportWrapper rw = new ReportWrapper(rdef.cloneCustomReport(), repId, null, null, null, null, null, null, false);
+
+ for(Iterator iter=rw.getAllColumns().iterator(); iter.hasNext(); ) {
+ DataColumnType col = (DataColumnType) iter.next();
+ String drillDownURL = nvls(col.getDrillDownURL());
+ if(drillDownURL.startsWith("dispatcher?action=custrep.run&c_master=")) {
+ drillDownURL = AppUtils.getReportExecuteActionURL()+drillDownURL.substring("dispatcher?action=custrep.run&c_master=".length());
+ log.append("Drill-down processed; ");
+ col.setDrillDownURL(drillDownURL);
+ }
+ } // for
+
+ reportXML = rw.marshal();
+
+ /*PrintWriter xmlOut = new PrintWriter(new BufferedWriter(new FileWriter(new File(AppUtils.getTempFolderPath()+AppUtils.getUserID(request)))));
+ xmlOut.println(reportXML);
+ xmlOut.close();*/
+
+ try {
+ ReportLoader.updateCustomReportRec(connection, rw, reportXML);
+ DbUtils.commitTransaction(connection);
+ log.append("<font color=green>REPORT UPDATED</font></li>\n");
+ } catch(Exception e) {
+ log.append("<font color=red>REPORT UPDATE FAILED</font></li>\n");
+ DbUtils.rollbackTransaction(connection);
+ } finally {
+ DbUtils.clearConnection(connection);
+ }
+ } // for
+
+ log.append("<br>\nSystem upgrade successfully completed...<br>\n");
+ request.setAttribute("system_message", log.toString());
+ } // upgrateFromV1ToV2_0
+
+} // SystemUpgrade
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeader.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeader.java
new file mode 100644
index 00000000..c52125e5
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeader.java
@@ -0,0 +1,239 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+public class ColumnHeader extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String columnTitle = "";
+
+ private String columnWidth = "";
+
+ private String alignment = "center";
+
+ private int rowSpan = 1;
+
+ private int actualColSpan = 1;
+
+ private int visibleColSpan = 1;
+
+ private String linkColId = null;
+
+ private int columnSort = 0;
+
+ private String colId = "";
+
+ private int groupLevel =0;
+
+ private int startGroup = 0;
+
+ private int colSpanGroup = 0;
+
+ private boolean sortable = false;
+
+
+ public ColumnHeader() {
+ super();
+ }
+
+ public ColumnHeader(String columnTitle) {
+ this();
+ setColumnTitle(columnTitle);
+ } // ColumnHeader
+
+ public ColumnHeader(String columnTitle, Integer columnSort) {
+ this();
+ setColumnTitle(columnTitle);
+ setColumnSort(columnSort.intValue());
+ } // ColumnHeader
+
+ public ColumnHeader(String columnTitle, String columnWidth) {
+ this(columnTitle);
+ setColumnWidth(columnWidth);
+ } // ColumnHeader
+
+ public ColumnHeader(String columnTitle, String columnWidth, int colSpan) {
+ this(columnTitle, columnWidth);
+ setColSpan(colSpan);
+ } // ColumnHeader
+
+ //public ColumnHeader(String columnTitle, String columnWidth, int colSpan, String linkColId) {
+ //this(columnTitle, columnWidth, colSpan);
+ //setLinkColId(linkColId);
+ //} // ColumnHeader
+
+ public ColumnHeader(String columnTitle, String columnWidth, String alignment, int colSpan, String linkColId) {
+ this(columnTitle, columnWidth, colSpan);
+ setAlignment(alignment);
+ setLinkColId(linkColId);
+ } // ColumnHeader
+
+ public ColumnHeader(String columnTitle, String columnWidth, int colSpan, int rowSpan) {
+ this(columnTitle, columnWidth, colSpan);
+ setRowSpan(rowSpan);
+ } // ColumnHeader
+
+ public String getColumnTitle() {
+ return columnTitle;
+ }
+
+ public String getColumnWidth() {
+ return columnWidth;
+ }
+
+ public int getRowSpan() {
+ return rowSpan;
+ }
+
+ public int getColSpan() {
+ return actualColSpan;
+ }
+
+ public boolean isVisible() {
+ return (visibleColSpan > 0) && (rowSpan > 0);
+ }
+
+ public String getLinkColId() {
+ return linkColId;
+ }
+
+ public void setColumnTitle(String columnTitle) {
+ this.columnTitle = nvl(columnTitle);
+ }
+
+ public void setColumnWidth(String columnWidth) {
+ this.columnWidth = columnWidth;
+ }
+
+ public void setLinkColId(String linkColId) {
+ this.linkColId = linkColId;
+ }
+
+ public void setRowSpan(int rowSpan) {
+ this.rowSpan = rowSpan;
+ }
+
+ public void setColSpan(int colSpan) {
+ this.visibleColSpan = colSpan;
+ this.actualColSpan = colSpan;
+ }
+
+ public void setVisible(boolean visible) {
+ if (visible) {
+ if (visibleColSpan < actualColSpan)
+ visibleColSpan++;
+ } else {
+ if (visibleColSpan > 0)
+ visibleColSpan--;
+ }
+ } // setVisible
+
+ public String getColumnWidthHtml() {
+ return (columnWidth.length() == 0) ? "" : (" width=" + columnWidth);
+ }
+
+ public String getRowSpanHtml() {
+ return (rowSpan == 1) ? "" : (" rowspan=" + rowSpan);
+ }
+
+ public String getColSpanHtml() {
+ return (visibleColSpan == 1) ? "" : (" colspan=" + visibleColSpan);
+ }
+
+ public String getColumnTitleHtml() {
+ if (linkColId == null)
+ return (columnTitle.length() == 0) ? "&nbsp;" : columnTitle;
+ else
+ return "<a href=\"javascript:performSortBy('" + linkColId
+ + "')\" title=\"Sort by column " + columnTitle + "\" class=rcolheader>"
+ + ((columnTitle.length() == 0) ? "[NULL]" : columnTitle) + "</a>";
+ } // getColumnTitleHtml
+
+ /**
+ * @return the columnSort
+ */
+ public int getColumnSort() {
+ return columnSort;
+ }
+
+ /**
+ * @param columnSort the columnSort to set
+ */
+ public void setColumnSort(int columnSort) {
+ this.columnSort = columnSort;
+ }
+
+ /**
+ * @return the colId
+ */
+ public String getColId() {
+ return colId;
+ }
+
+ /**
+ * @param colId the colId to set
+ */
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ public void setAlignment(String alignment) {
+ if(nvl(alignment).length()>0)
+ this.alignment = alignment;
+ }
+
+ public int getGroupLevel() {
+ return groupLevel;
+ }
+
+ public void setGroupLevel(int groupLevel) {
+ this.groupLevel = groupLevel;
+ }
+
+ public int getStartGroup() {
+ return startGroup;
+ }
+
+ public void setStartGroup(int startGroup) {
+ this.startGroup = startGroup;
+ }
+
+ public int getColSpanGroup() {
+ return colSpanGroup;
+ }
+
+ public void setColSpanGroup(int colSpanGroup) {
+ this.colSpanGroup = colSpanGroup;
+ }
+
+ public boolean isSortable() {
+ return sortable;
+ }
+
+ public void setSortable(boolean sortable) {
+ this.sortable = sortable;
+ }
+
+
+
+} // ColumnHeader
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeaderRow.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeaderRow.java
new file mode 100644
index 00000000..b1f581ed
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnHeaderRow.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.view;
+
+import java.util.Vector;
+
+public class ColumnHeaderRow extends Vector {
+ private String rowHeight = "";
+
+ private String displayWidth = "";
+
+ private String alignment = "center";
+
+ 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 ColumnHeader getNext() {
+ return hasNext() ? getColumnHeader(nextElemIdx++) : null;
+ } // getNext
+
+ public ColumnHeader getColumnHeader(int idx) {
+ return (ColumnHeader) get(idx);
+ } // getColumnHeader
+
+ public void addColumnHeader(ColumnHeader columnHeader) {
+ add(columnHeader);
+ } // addColumnHeader
+
+ public void addColumnHeader(int idx, ColumnHeader columnHeader) {
+ add(idx, columnHeader);
+ } // addColumnHeader
+
+ public String getRowHeightHtml() {
+ return (rowHeight.length() == 0) ? "" : (" height=" + rowHeight);
+ }
+
+ public String getRowHeight() {
+ return rowHeight;
+ }
+
+ public void setRowHeight(String rowHeight) {
+ this.rowHeight = nvl(rowHeight);
+ }
+
+ public void setDisplayWidth(String displayWidth) {
+ this.displayWidth = nvl(displayWidth);
+ }
+
+ public String getDisplayWidth() {
+ return this.displayWidth;
+ }
+ /** ************************************************************************************************* */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ public void setAlignment(String alignment) {
+ if(nvl(alignment).length()>0)
+ this.alignment = alignment;
+ }
+
+} // ColumnHeaderRow
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnVisual.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnVisual.java
new file mode 100644
index 00000000..5045cd58
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ColumnVisual.java
@@ -0,0 +1,74 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class ColumnVisual extends RaptorObject {
+ private String colId = null;
+
+ private String colDisplay = null;
+
+ private boolean visible = true;
+
+ private String sortType = null;
+
+ public ColumnVisual(String colId, String colDisplay, boolean visible, String sortType) {
+ super();
+
+ setColId(colId);
+ setColDisplay(colDisplay);
+ setVisible(visible);
+ setSortType(sortType);
+ } // ColumnVisual
+
+ public String getColId() {
+ return colId;
+ }
+
+ public String getColDisplay() {
+ return colDisplay;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public String getSortType() {
+ return sortType;
+ }
+
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+ public void setColDisplay(String colDisplay) {
+ this.colDisplay = colDisplay;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ public void setSortType(String sortType) {
+ this.sortType = sortType;
+ }
+
+} // ColumnVisual
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabColumnValues.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabColumnValues.java
new file mode 100644
index 00000000..34cc10d3
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabColumnValues.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.view;
+
+import java.util.Vector;
+
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.system.ConnectionUtils;
+import org.openecomp.portalsdk.analytics.util.DataSet;
+
+public class CrossTabColumnValues extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String colId = null;
+
+ private Vector columnValues = null;
+
+ public CrossTabColumnValues(String colId, String loadValuesSQL, String dbInfo)
+ throws RaptorException {
+ this.colId = colId;
+ DataSet ds = ConnectionUtils.getDataSet(loadValuesSQL, dbInfo);
+ // DataSet ds = DbUtils.executeQuery(loadValuesSQL);
+ columnValues = new Vector(ds.getRowCount());
+ for (int i = 0; i < ds.getRowCount(); i++)
+ columnValues.add(ds.getString(i, 0));
+ } // CrossTabColumnValues
+
+ public String getColId() {
+ return colId;
+ }
+
+ public Vector getColumnValues() {
+ return columnValues;
+ }
+
+ public int getValuesCount() {
+ return columnValues.size();
+ }
+
+ public String getValueAt(int idx) {
+ return (String) columnValues.get(idx);
+ }
+
+ public int getIndexOf(String value) {
+ for (int i = 0; i < getValuesCount(); i++)
+ if (value.equals(getValueAt(i)))
+ return i;
+
+ return -1;
+ } // getIndexOf
+
+ public int getIndexOf(int value) {
+ for (int i = 0; i < getValuesCount(); i++)
+ if (value == new Integer(getValueAt(i)).intValue())
+ return i;
+
+ return -1;
+ } // getIndexOf
+
+} // CrossTabColumnValues
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabOrderManager.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabOrderManager.java
new file mode 100644
index 00000000..55c2c757
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabOrderManager.java
@@ -0,0 +1,98 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.Iterator;
+import java.util.Vector;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+import org.openecomp.portalsdk.analytics.error.RaptorException;
+import org.openecomp.portalsdk.analytics.model.runtime.ReportRuntime;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType;
+
+public class CrossTabOrderManager extends RaptorObject {
+ private Vector colHeaderValues = null;
+
+ private Vector rowHeaderValues = null;
+
+
+ public CrossTabOrderManager(ReportRuntime rr, String userId,HttpServletRequest request) throws RaptorException {
+ colHeaderValues = new Vector();
+ rowHeaderValues = new Vector();
+
+ for (Iterator iter = rr.getAllColumns().iterator(); iter.hasNext();) {
+ DataColumnType dct = (DataColumnType) iter.next();
+ if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_COLUMN)) {
+ if(rr.getColumnById(dct.getColId()+"_sort")!=null) {
+ dct = rr.getColumnById(dct.getColId()+"_sort");
+ colHeaderValues.add(new CrossTabColumnValues(dct.getColId(), rr
+ .generateDistinctValuesSQL(dct, userId,request), rr.getDbInfo()));
+ } else
+ colHeaderValues.add(new CrossTabColumnValues(dct.getColId(), rr
+ .generateDistinctValuesSQL(dct, userId,request), rr.getDbInfo()));
+ }
+ else if (nvl(dct.getCrossTabValue()).equals(AppConstants.CV_ROW))
+ rowHeaderValues.add(new CrossTabColumnValues(dct.getColId(), rr
+ .generateDistinctValuesSQL(dct, userId,request), rr.getDbInfo()));
+ else if (nvl(dct.getCrossTabValue()).trim().length()<=0)
+ rowHeaderValues.add(new CrossTabColumnValues(dct.getColId(), rr
+ .generateDistinctValuesSQL(dct, userId,request), rr.getDbInfo()));
+ } // for
+ } // CrossTabOrderManager
+
+ public int getIndexOfColHeaderValue(int colIdx, String value) {
+ return ((CrossTabColumnValues) colHeaderValues.get(colIdx)).getIndexOf(value);
+ } // getIndexOfColHeaderValue
+
+ public int getIndexOfColHeaderValue(int colIdx, int value) {
+ return ((CrossTabColumnValues) colHeaderValues.get(colIdx)).getIndexOf(value);
+ } // getIndexOfColHeaderValue
+
+ public boolean isAfterColHeaderValue(int colIdx, String curValue, String newValue) {
+ return (getIndexOfColHeaderValue(colIdx, curValue) > getIndexOfColHeaderValue(colIdx,
+ newValue));
+ } // isBeforeColHeaderValue
+
+ public boolean isAfterColHeaderValue(int colIdx, int curValue, Integer newValue) {
+ return (getIndexOfColHeaderValue(colIdx, curValue) > getIndexOfColHeaderValue(colIdx,
+ newValue.intValue()));
+ } // isBeforeColHeaderValue
+
+ public int getIndexOfRowHeaderValue(int rowIdx, String value) {
+ return ((CrossTabColumnValues) rowHeaderValues.get(rowIdx)).getIndexOf(value);
+ } // getIndexOfRowHeaderValue
+
+ public boolean isAfterRowHeaderValue(int rowIdx, String curValue, String newValue) {
+ return (getIndexOfRowHeaderValue(rowIdx, curValue) > getIndexOfRowHeaderValue(rowIdx,
+ newValue));
+ } // isBeforeRowHeaderValue
+
+ public Vector getRowHeaderValues() {
+ return rowHeaderValues;
+ }
+
+ public void setRowHeaderValues(Vector rowHeaderValues) {
+ this.rowHeaderValues = rowHeaderValues;
+ }
+
+} // CrossTabOrderManager
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabTotalValue.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabTotalValue.java
new file mode 100644
index 00000000..bb5e9dc6
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/CrossTabTotalValue.java
@@ -0,0 +1,56 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.Vector;
+
+public class CrossTabTotalValue extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private Vector headerValues = null;
+
+ private String totalValue = null;
+
+ public CrossTabTotalValue() {
+ super();
+ }
+
+ public CrossTabTotalValue(Vector headerValues, String totalValue) {
+ this();
+
+ setHeaderValues(headerValues);
+ setTotalValue(totalValue);
+ } // CrossTabTotalValue
+
+ public Vector getHeaderValues() {
+ return headerValues;
+ }
+
+ public String getTotalValue() {
+ return totalValue;
+ }
+
+ public void setHeaderValues(Vector headerValues) {
+ this.headerValues = headerValues;
+ }
+
+ public void setTotalValue(String totalValue) {
+ this.totalValue = totalValue;
+ }
+
+} // CrossTabTotalValue
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataRow.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataRow.java
new file mode 100644
index 00000000..aa53be1d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataRow.java
@@ -0,0 +1,169 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.ArrayList;
+import java.util.Vector;
+
+public class DataRow/* extends Vector*/ {
+
+ private ArrayList dataValueList = new ArrayList();
+ private HtmlFormatter rowFormatter = null;
+
+ private int nextElemIdx = 0;
+
+ private boolean rowFormat = false;
+
+ private String formatId = null;
+
+ private int rowNum = -1;
+
+ private Vector<DataValue> rowValues;
+
+ /**
+ * @return the rowNum
+ */
+ public int getRowNum() {
+ return rowNum;
+ }
+
+
+ /**
+ * @param rowNum the rowNum to set
+ * Used for crosstab
+ */
+ public void setRowNum(int rowNum) {
+ this.rowNum = rowNum;
+ }
+
+
+ public String getFormatId() {
+ return formatId;
+ }
+
+
+ public void setFormatId(String formatId) {
+ this.formatId = formatId;
+ }
+
+
+ public void resetNext() {
+ resetNext(0);
+ } // resetNext
+
+ public void resetNext(int toPos) {
+ nextElemIdx = toPos;
+ } // resetNext
+
+ public boolean hasNext() {
+ return (nextElemIdx < dataValueList.size());
+ } // hasNext
+
+ public DataValue getNext() {
+ return hasNext() ? getDataValue(nextElemIdx++) : null;
+ } // getNext
+
+ public DataValue getDataValue(int idx) {
+ return (DataValue) dataValueList.get(idx);
+ } // getRowHeader
+
+ public void addDataValue(DataValue dataValue) {
+ if (rowFormatter != null)
+ dataValue.setRowFormatter(rowFormatter);
+ dataValueList.add(dataValue);
+ } // addDataValue
+
+ public void addDataValue(int idx, DataValue dataValue) {
+ if (rowFormatter != null)
+ dataValue.setRowFormatter(rowFormatter);
+ dataValueList.add(idx, dataValue);
+ } // addDataValue
+
+ public void setDataValue(int idx, DataValue dataValue) {
+ if (rowFormatter != null)
+ dataValue.setRowFormatter(rowFormatter);
+ dataValueList.set(idx, dataValue);
+ } // addDataValue
+
+ public HtmlFormatter getRowFormatter() {
+ return rowFormatter;
+ }
+
+ public void setRowFormat(boolean b) {
+ rowFormat = b;
+ }
+ public boolean isRowFormat() {
+ return rowFormat;
+ }
+
+ public void setRowFormatter(HtmlFormatter rowFormatter) {
+ this.rowFormatter = rowFormatter;
+
+ for (int i = 0; i < dataValueList.size(); i++)
+ ((DataValue) dataValueList.get(i)).setRowFormatter(rowFormatter);
+ } // setRowFormatter
+
+ public String getBgColorHtml() {
+ if (rowFormatter != null && rowFormatter.getBgColor().length() > 0)
+ return " bgcolor=" + rowFormatter.getBgColor();
+ else
+ return "";
+ } // getBgColorHtml
+
+ public String getDataValue(String colId) {
+ String v_ColId = "";
+ for (int i = 0; i < dataValueList.size(); i++) {
+ v_ColId = ((DataValue) dataValueList.get(i)).getColId();
+ if(v_ColId.equals(colId)) {
+ return ((DataValue) dataValueList.get(i)).getDisplayValue();
+ }
+ }
+ return null;
+
+ }
+
+
+ /**
+ * @return the dataValueList
+ */
+ public ArrayList getDataValueList() {
+ return dataValueList;
+ }
+
+
+ /**
+ * @param dataValueList the dataValueList to set
+ */
+ public void setDataValueList(ArrayList dataValueList) {
+ this.dataValueList = dataValueList;
+ }
+
+
+ public Vector<DataValue> getRowValues() {
+ return rowValues;
+ }
+
+
+ public void setRowValues(Vector<DataValue> rowValues) {
+ this.rowValues = rowValues;
+ }
+
+} // DataRow
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataValue.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataValue.java
new file mode 100644
index 00000000..605cb226
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/DataValue.java
@@ -0,0 +1,359 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+public class DataValue extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String displayValue = "";
+
+ private String displayCalculatedValue = "";
+
+ private String drillDownURL = null;
+
+ private boolean drillDowninPoPUp = false;
+
+ private String indentation = "";
+
+ private String alignment = "Left";
+
+ private boolean visible = true;
+
+ private boolean hidden = false;
+
+ private boolean bold = false;
+
+ private HtmlFormatter cellFormatter = null;
+
+ private HtmlFormatter rowFormatter = null;
+
+ private String formatId = null;
+
+ private boolean cellFormat = false;
+
+ private String colId = null;
+
+ private String displayTotal = null;
+
+ private String colName = null;
+
+ private String displayName = null;
+
+ private String nowrap = "False";
+
+ private String hyperlinkURL = "";
+
+ private String displayType = "";
+
+ private String actionImg = "";
+
+
+ public String getColName() {
+
+ return colName;
+ }
+
+
+ public void setColName(String colName) {
+
+ this.colName = colName;
+ }
+
+ public DataValue() {
+ super();
+ }
+
+ public String getFormatId() {
+ return formatId;
+ }
+
+
+ public void setFormatId(String formatId) {
+ this.formatId = formatId;
+ }
+
+ public void setCellFormat(boolean b) {
+ cellFormat = b;
+ }
+ public boolean isCellFormat() {
+ return cellFormat;
+ }
+
+ public String getDisplayValue() {
+ return displayValue;
+ }
+
+ public String getDrillDownURL() {
+ return drillDownURL;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public boolean isBold() {
+ return bold;
+ }
+
+ public HtmlFormatter getCellFormatter() {
+ return cellFormatter;
+ }
+
+ public HtmlFormatter getRowFormatter() {
+ return rowFormatter;
+ }
+
+ public void setDisplayValue(String displayValue) {
+ this.displayValue = nvl(displayValue);
+ }
+
+ public void setDrillDownURL(String drillDownURL) {
+ this.drillDownURL = drillDownURL;
+ }
+
+ public void setAlignment(String alignment) {
+ this.alignment = alignment;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ public void setBold(boolean bold) {
+ this.bold = bold;
+ }
+
+ public void setCellFormatter(HtmlFormatter cellFormatter) {
+ this.cellFormatter = cellFormatter;
+ }
+
+ public void setRowFormatter(HtmlFormatter rowFormatter) {
+ this.rowFormatter = rowFormatter;
+ }
+
+ private String getFormattedValue(String value) {
+ value = nvl(value.trim()).length()<=0 ? "&nbsp":value;
+ if (cellFormatter != null)
+ return cellFormatter.formatValue(value);
+ else if (rowFormatter != null)
+ return rowFormatter.formatValue(value);
+ else
+ return value;
+ } // getFormattedValue
+
+ private String getFormattedLink(String value) {
+ if (cellFormatter != null)
+ return cellFormatter.formatLink(value, drillDownURL, isDrillDowninPoPUp());
+ else if (rowFormatter != null)
+ return rowFormatter.formatLink(value, drillDownURL, isDrillDowninPoPUp());
+ else {
+ if(!isDrillDowninPoPUp()) {
+ return "<a href=\"" + drillDownURL + "\">" + value + "</a>";
+ } else {
+ return "<a href=\"#\" onClick=\"showDrillDownInPopup('" + drillDownURL + "&noFormFields=Y&isEmbedded=Y&show_back_btn=N"+ "')\">" + value + "</a>";
+ }
+
+ }
+ } // getFormattedValue
+
+ private String getValueHtml() {
+ return (nvl(displayValue).trim().length() == 0) ? "&nbsp;" : displayValue;
+ }
+
+ public String getDisplayValueHtml() {
+ return getFormattedValue(getValueHtml());
+ }
+
+ public String getDisplayValueLinkHtml() {
+ if (nvl(drillDownURL).length() == 0)
+ return getDisplayValueHtml();
+ else
+ return getFormattedLink(getValueHtml());
+ // return getFormattedValue("<a
+ // href=\""+drillDownURL+"\">"+getValueHtml()+"</a>");
+ } // getDisplayValueLinkHtml
+
+ public String getAlignmentHtml() {
+ if (cellFormatter != null && cellFormatter.getAlignment().length() > 0)
+ return " align=" + cellFormatter.getAlignment();
+ else if (rowFormatter != null && rowFormatter.getAlignment().length() > 0)
+ return " align=" + rowFormatter.getAlignment();
+ else
+ return (alignment.length() == 0) ? "" : (" align=" + alignment);
+ } // getAlignmentHtml
+
+ public String getBgColorHtml() {
+ if (cellFormatter != null && cellFormatter.getBgColor().length() > 0)
+ return " bgcolor=" + cellFormatter.getBgColor();
+ else if (rowFormatter != null && rowFormatter.getBgColor().length() > 0)
+ return " bgcolor=" + rowFormatter.getBgColor();
+ else
+ return "";
+ } // getBgColorHtml
+
+
+ public String getColId() {
+
+ return colId;
+ }
+
+
+ public void setColId(String colId) {
+
+ this.colId = colId;
+ }
+
+
+ public String getDisplayTotal() {
+
+ return displayTotal;
+ }
+
+
+ public void setDisplayTotal(String displayTotal) {
+
+ this.displayTotal = displayTotal;
+ }
+
+
+
+ public String getDisplayName() {
+
+ return displayName;
+ }
+
+
+
+ public void setDisplayName(String displayName) {
+
+ this.displayName = displayName;
+ }
+
+
+ public boolean isHidden() {
+ return hidden;
+ }
+
+
+ public void setHidden(boolean hidden) {
+ this.hidden = hidden;
+ }
+
+ public String getNowrap() {
+ return nowrap;
+ }
+
+
+ public void setNowrap(String nowrap) {
+ this.nowrap = nowrap;
+ }
+
+ public boolean isDrillDowninPoPUp() {
+ return drillDowninPoPUp;
+ }
+
+
+ public void setDrillDowninPoPUp(boolean drillDowninPoPUp) {
+ this.drillDowninPoPUp = drillDowninPoPUp;
+ }
+
+
+ /**
+ * @return the displayCalculatedValue
+ */
+ public String getDisplayCalculatedValue() {
+ return displayCalculatedValue;
+ }
+
+
+ /**
+ * @param displayCalculatedValue the displayCalculatedValue to set
+ */
+ public void setDisplayCalculatedValue(String displayCalculatedValue) {
+ this.displayCalculatedValue = displayCalculatedValue;
+ }
+
+
+ /**
+ * @return the indentation
+ */
+ public String getIndentation() {
+ return indentation;
+ }
+
+
+ /**
+ * @param indentation the indentation to set
+ */
+ public void setIndentation(String indentation) {
+ this.indentation = indentation;
+ }
+
+
+ /**
+ * @return the hyperlinkURL
+ */
+ public String getHyperlinkURL() {
+ return hyperlinkURL;
+ }
+
+
+ /**
+ * @param hyperlinkURL the hyperlinkURL to set
+ */
+ public void setHyperlinkURL(String hyperlinkURL) {
+ this.hyperlinkURL = hyperlinkURL;
+ }
+
+
+ /**
+ * @return the displayType
+ */
+ public String getDisplayType() {
+ return displayType;
+ }
+
+
+ /**
+ * @param displayType the displayType to set
+ */
+ public void setDisplayType(String displayType) {
+ this.displayType = displayType;
+ }
+
+
+ /**
+ * @return the actionImg
+ */
+ public String getActionImg() {
+ return actionImg;
+ }
+
+
+ /**
+ * @param actionImg the actionImg to set
+ */
+ public void setActionImg(String actionImg) {
+ this.actionImg = actionImg;
+ }
+
+} // DataValue
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/HtmlFormatter.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/HtmlFormatter.java
new file mode 100644
index 00000000..fa54a1d9
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/HtmlFormatter.java
@@ -0,0 +1,205 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import org.openecomp.portalsdk.analytics.RaptorObject;
+
+public class HtmlFormatter extends RaptorObject {
+ private boolean bold = false;
+
+ private boolean italic = false;
+
+ private boolean underline = false;
+
+ private String bgColor = "";
+
+ private String fontColor = "";
+
+ private String fontFace = "";
+
+ private String fontSize = "";
+
+ private String alignment = "";
+
+ private String formatId = "";
+
+ public HtmlFormatter() {
+ super();
+ }
+
+ public HtmlFormatter(boolean bold, boolean italic, boolean underline, String bgColor,
+ String fontColor, String fontFace, String fontSize) {
+ this();
+
+ setBold(bold);
+ setItalic(italic);
+ setUnderline(underline);
+ setBgColor(bgColor);
+ setFontColor(fontColor);
+ setFontFace(fontFace);
+ setFontSize(fontSize);
+ } // HtmlFormatter
+
+ public HtmlFormatter(boolean bold, boolean italic, boolean underline, String bgColor,
+ String fontColor, String fontFace, String fontSize, String alignment) {
+ this(bold, italic, underline, bgColor, fontColor, fontFace, fontSize);
+ setAlignment(alignment);
+ } // HtmlFormatter
+
+ public boolean isBold() {
+ return bold;
+ }
+
+ public boolean isItalic() {
+ return italic;
+ }
+
+ public boolean isUnderline() {
+ return underline;
+ }
+
+ public String getBgColor() {
+ return bgColor;
+ }
+
+ public String getFontColor() {
+ return fontColor;
+ }
+
+ public String getFontFace() {
+ return fontFace;
+ }
+
+ public String getFontSize() {
+ return fontSize;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ public void setBold(boolean bold) {
+ this.bold = bold;
+ }
+
+ public void setItalic(boolean italic) {
+ this.italic = italic;
+ }
+
+ public void setUnderline(boolean underline) {
+ this.underline = underline;
+ }
+
+ public void setBgColor(String bgColor) {
+ this.bgColor = nvl(bgColor);
+ }
+
+ public void setFontColor(String fontColor) {
+ this.fontColor = nvl(fontColor);
+ }
+
+ public void setFontFace(String fontFace) {
+ this.fontFace = nvl(fontFace);
+ }
+
+ public void setFontSize(String fontSize) {
+ this.fontSize = nvl(fontSize);
+ }
+
+ public void setAlignment(String alignment) {
+ this.alignment = nvl(alignment);
+ }
+
+ private String generateStyleHtml() {
+ StringBuffer sb = new StringBuffer();
+
+ if (isBold())
+ sb.append("font-weight:bold;");
+ if (isItalic())
+ sb.append("font-style:italic;");
+ if (isUnderline())
+ sb.append("text-decoration:underline;");
+ // if(getBgColor().length()>0)
+ // sb.append("background-color:"+getBgColor()+";");
+ if (getFontColor().length() > 0)
+ sb.append("color:" + getFontColor() + ";");
+ if (getFontFace().length() > 0)
+ sb.append("font-family:" + getFontFace() + ";");
+ if (getFontSize().length() > 0)
+ sb.append("font-size:" + getFontSize() + "px;");
+ if (getAlignment().length() > 0)
+ sb.append("text-align:" + getAlignment() + ";");
+
+ if (sb.length() > 0) {
+ sb.insert(0, " style=\"");
+ sb.append("\"");
+ } // if
+
+ return sb.toString();
+ } // generateStyleHtml
+
+ public String generateStyleForZK() {
+ StringBuffer sb = new StringBuffer();
+
+ if (isBold())
+ sb.append("font-weight:bold;");
+ if (isItalic())
+ sb.append("font-style:italic;");
+ if (isUnderline())
+ sb.append("text-decoration:underline;");
+ // if(getBgColor().length()>0)
+ // sb.append("background-color:"+getBgColor()+";");
+ if (getFontColor().length() > 0)
+ sb.append("color:" + getFontColor() + ";");
+ if (getFontFace().length() > 0)
+ sb.append("font-family:" + getFontFace() + ";");
+ if (getFontSize().length() > 0)
+ sb.append("font-size:" + getFontSize() + "px;");
+ if (getAlignment().length() > 0)
+ sb.append("text-align:" + getAlignment() + ";");
+
+ return sb.toString();
+ } // generateStyleHtml
+
+ public String formatValue(String value) {
+ String style = generateStyleHtml();
+ if (style.length() > 0)
+ return "<font" + style + ">" + value + "</font>";
+ else
+ return value;
+ } // formatValue
+
+ public String formatLink(String value, String url, boolean drillDowninPoPUp) {
+ if(!drillDowninPoPUp) {
+ return "<a href=\"" + url + "\"" + generateStyleHtml() + ">" + value + "</a>";
+ } else {
+ return "<a href=\"#\" onClick=\"showDrillDownInPopup('" + url + "&noFormFields=Y&isEmbedded=Y&show_back_btn=N"+ "')\"" + generateStyleHtml() + ">" + value + "</a>";
+ }
+ } // formatLink
+
+ public String getFormatId() {
+ return formatId;
+ }
+
+ public void setFormatId(String formatId) {
+ this.formatId = formatId;
+ }
+
+} // HtmlFormatter
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportColumnHeaderRows.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportColumnHeaderRows.java
new file mode 100644
index 00000000..6bbe0127
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportColumnHeaderRows.java
@@ -0,0 +1,71 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.Vector;
+
+public class ReportColumnHeaderRows extends Vector {
+ 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 ColumnHeaderRow getNext() {
+ return hasNext() ? getColumnHeaderRow(nextElemIdx++) : null;
+ } // getNext
+
+ public ColumnHeader getColumnHeader(int rowIdx, int colIdx) {
+ return getColumnHeaderRow(rowIdx).getColumnHeader(colIdx);
+ } // getColumnHeader
+
+ public ColumnHeaderRow getColumnHeaderRow(int idx) {
+ return (ColumnHeaderRow) get(idx);
+ } // getColumnHeaderRow
+
+ public void addColumnHeaderRow(ColumnHeaderRow columnHeaderRow) {
+ add(columnHeaderRow);
+ } // addColumnHeaderRow
+
+ public void addColumnHeaderRow(int idx, ColumnHeaderRow columnHeaderRow) {
+ add(idx, columnHeaderRow);
+ } // addColumnHeaderRow
+
+ public int getRowCount() {
+ return size();
+ } // getRowCount
+
+ public int getColumnCount() {
+ int cSize = 0;
+ if (getRowCount() > 0)
+ cSize = getColumnHeaderRow(getRowCount() - 1).size();
+
+ return cSize;
+ } // getColumnCount
+
+} // ReportColumnHeaderRows
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportData.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportData.java
new file mode 100644
index 00000000..5ef15dc4
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportData.java
@@ -0,0 +1,812 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.io.Serializable;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Vector;
+
+import org.openecomp.portalsdk.analytics.model.runtime.FormatProcessor;
+import org.openecomp.portalsdk.analytics.model.runtime.VisualManager;
+import org.openecomp.portalsdk.analytics.system.AppUtils;
+import org.openecomp.portalsdk.analytics.util.AppConstants;
+import org.openecomp.portalsdk.analytics.util.Utils;
+
+public class ReportData extends org.openecomp.portalsdk.analytics.RaptorObject implements Serializable {
+ // private static final boolean sortData = true; // sort cross-tab data by
+ // row/col name while being added
+ private static final int MAX_NUM_COLS = 150; // -1 => no restriction
+
+ private int pageNo = -1;
+
+ private int pageSetNo = -1;
+
+ public ReportColumnHeaderRows reportColumnHeaderRows = null;
+
+ public ReportRowHeaderCols reportRowHeaderCols = null;
+
+ public ReportDataRows reportDataRows = null;
+
+ public ReportDataRows reportDataTotalRow = null;
+
+ public ReportRowHeaderCols reportTotalRowHeaderCols = null;
+
+ public List reportDataList = null;
+
+ private boolean canSortAtRuntime = false;
+
+ private Vector columnVisuals = null; // Contains actual column Ids for
+ // linear or last header col values
+ // for cross-tab
+
+ public ReportData(int pageNo, boolean canSortAtRuntime) {
+ super();
+
+ this.pageNo = pageNo;
+ this.canSortAtRuntime = canSortAtRuntime;
+
+ reportColumnHeaderRows = new ReportColumnHeaderRows();
+ reportRowHeaderCols = new ReportRowHeaderCols();
+ reportDataRows = new ReportDataRows();
+
+ columnVisuals = new Vector();
+ } // ReportData
+
+ public int getPageNo() {
+ return pageNo;
+ } // pageNo
+
+ public int getPageSetNo() {
+ return pageSetNo;
+ } // pageSetNo
+
+ public int getHeaderRowCount() {
+ return reportColumnHeaderRows.getRowCount();
+ } // getHeaderRowCount
+
+ public int getDataRowCount() {
+ if(reportDataRows!=null && reportDataRows.getRowCount()>0)
+ return reportDataRows.getRowCount();
+ else if(getReportDataList()!=null)
+ return getReportDataList().size();
+ else
+ return 0;
+ } // getDataRowCount
+
+ public int getTotalRowCount() {
+ return getHeaderRowCount() + getDataRowCount();
+ } // getTotalRowCount
+
+ public int getHeaderColumnCount() {
+ return reportRowHeaderCols.getColumnCount();
+ } // getHeaderColumnCount
+
+ public int getDataColumnCount() {
+ int cCount = reportDataRows.getColumnCount();
+ if (cCount == 0)
+ cCount = reportColumnHeaderRows.getColumnCount();
+
+ return cCount;
+ } // getDataColumnCount
+
+ public int getTotalColumnCount() {
+ return getHeaderColumnCount() + getDataColumnCount();
+ } // getTotalColumnCount
+
+ // Cross-tab data section
+ private void insertColumn(int colIdx, Vector colNameValues, Vector colNameSortValues, List dataList, String alignment) {
+ int r = 0;
+ for (reportColumnHeaderRows.resetNext(); reportColumnHeaderRows.hasNext();) {
+ ColumnHeaderRow chr = reportColumnHeaderRows.getNext();
+ if(colNameSortValues!=null) {
+ ColumnHeader ch = new ColumnHeader(((DataValue) colNameValues.get(r)).getDisplayValue(), Integer.valueOf(((DataValue)colNameSortValues.get(r)).getDisplayValue()) );
+ ch.setColumnWidth(chr.getDisplayWidth());
+ ch.setAlignment(alignment);
+ chr.addColumnHeader(colIdx, ch);
+ }
+ else {
+ ColumnHeader ch = new ColumnHeader(((DataValue) colNameValues.get(r)).getDisplayValue());
+ ch.setColumnWidth(chr.getDisplayWidth());
+ ch.setAlignment(alignment);
+ chr.addColumnHeader(colIdx, ch);
+ }
+ r++;
+ } // for
+
+/* for (reportDataRows.resetNext(); reportDataRows.hasNext();) {
+ DataRow dr = reportDataRows.getNext();
+ dr.addDataValue(colIdx, new DataValue());
+ } // for
+ */
+ for(int j = 0; j < dataList.size(); j++) {
+ DataRow dr = (DataRow) dataList.get(j);
+ dr.addDataValue(colIdx, new DataValue());
+ }
+ } // insertColumn
+
+ private boolean prevColNamesChanged(int colIdx, Vector prevColNames) {
+ for (int k = 0; k < prevColNames.size(); k++)
+ if (!nvl((String) prevColNames.get(k)).equals(
+ reportColumnHeaderRows.getColumnHeader(k, colIdx).getColumnTitle()))
+ return true;
+
+ return false;
+ } // prevColNamesChanged
+
+ private int findColumnIdx(Vector colNameValues, Vector colNameSortValues, CrossTabOrderManager crossTabOrderManager,
+ boolean createIfMissing, List dataList) {
+ int colIdx = 0;
+ try {
+
+ boolean nameFound = false;
+ // String prevColName = null;
+ Vector prevColNames = new Vector();
+ int columnSort = -1;
+ for (int r = 0; r < colNameValues.size(); r++) {
+ //String colName = (String) colNameValues.get(r);
+ String colName = ((DataValue) colNameValues.get(r)).getDisplayValue();
+ Integer colSortName = null;
+ if(colNameSortValues!=null)
+ colSortName = Integer.valueOf(((DataValue)colNameSortValues.get(r)).getDisplayValue());
+ ColumnHeaderRow chr = reportColumnHeaderRows.getColumnHeaderRow(r);
+
+ chr.resetNext(colIdx);
+ nameFound = false;
+ boolean posFound = false;
+ while ((!nameFound) && (!posFound) && chr.hasNext()) {
+ ColumnHeader ch = chr.getNext();
+ columnSort = ch.getColumnSort();
+ if (colName.equals(ch.getColumnTitle())) {
+ if (prevColNamesChanged(colIdx, prevColNames))
+ posFound = true;
+ else
+ nameFound = true;
+ } else if (crossTabOrderManager != null) {
+ if( colNameSortValues!=null && crossTabOrderManager.isAfterColHeaderValue(r, columnSort,
+ colSortName))
+ posFound = true;
+ else if (colNameSortValues == null && crossTabOrderManager.isAfterColHeaderValue(r, ch.getColumnTitle(),
+ colName)) {
+ posFound = true;
+ }
+ }
+ else if (crossTabOrderManager == null) {
+ if( colNameSortValues!=null && colSortName.compareTo(ch.getColumnSort()) < 0)
+ posFound = true;
+ else if (colNameSortValues==null && colName.compareTo(ch.getColumnTitle()) < 0)
+ posFound = true;
+ }
+ else // if(prevColName!=null&&(!
+ // prevColName.equals(reportColumnHeaderRows.getColumnHeader(r-1,
+ // colIdx).getColumnTitle())))
+ if (prevColNamesChanged(colIdx, prevColNames))
+ posFound = true;
+
+ if ((!nameFound) && (!posFound))
+ colIdx++;
+ } // while
+
+ if (!nameFound)
+ if (createIfMissing && (MAX_NUM_COLS >= 0) && (colIdx <= MAX_NUM_COLS)) {
+ insertColumn(colIdx, colNameValues, colNameSortValues, dataList, chr.getAlignment());
+ return colIdx;
+ } else
+ return -1;
+
+ prevColNames.add(r, colName);
+ } // for
+ if (!nameFound)
+ if (createIfMissing && (MAX_NUM_COLS >= 0) && (colIdx <= MAX_NUM_COLS))
+ insertColumn(colIdx, colNameValues, colNameSortValues, dataList, "center");
+ else
+ return -1;
+ } catch (Exception ex) {ex.printStackTrace();}
+
+ return colIdx;
+ } // findColumnIdx
+
+ private void insertRow(int rowIdx, Vector rowNameValues, List dataList, CrossTabOrderManager crossTabOrderManager) {
+ int c = 0;
+ DataRow dr = new DataRow();
+ int dataRowIdx = 0;
+ for (reportRowHeaderCols.resetNext(); reportRowHeaderCols.hasNext();) {
+ if((c+1)==reportRowHeaderCols.size()) {
+ dataRowIdx = crossTabOrderManager.getIndexOfRowHeaderValue(c, ((DataValue) rowNameValues.get(c)).getDisplayValue());
+ }
+ RowHeaderCol rhc = reportRowHeaderCols.getNext();
+ rhc.addRowHeader(rowIdx, new RowHeader(((DataValue) rowNameValues.get(c)).getDisplayValue()));
+ c++;
+ } // for
+
+ dr.setRowNum(dataRowIdx);
+ for (c = 0; c < getDataColumnCount(); c++) {
+ dr.addDataValue(new DataValue());
+ }
+
+ //reportDataRows.addDataRow(rowIdx, dr);
+ //dr.setRowNum(dataList.size()==0?1:dataList.size());
+ dataList.add(rowIdx, dr);
+
+ } // insertRow
+
+ private boolean prevRowNamesChanged(int rowIdx, Vector prevRowNames) {
+ for (int k = 0; k < prevRowNames.size(); k++)
+ if (!nvl((String) prevRowNames.get(k)).equals(
+ reportRowHeaderCols.getRowHeader(k, rowIdx).getRowTitle()))
+ return true;
+
+ return false;
+ } // prevRowNamesChanged
+
+ private int findRowIdx(Vector rowNameValues, CrossTabOrderManager crossTabOrderManager,
+ boolean createIfMissing, List dataList) {
+ int rowIdx = 0;
+ boolean nameFound = false;
+ Vector prevRowNames = new Vector();
+ for (int c = 0; c < rowNameValues.size(); c++) {
+ //String rowName = (String) rowNameValues.get(c);
+ String rowName = ((DataValue) rowNameValues.get(c)).getDisplayValue();
+
+ RowHeaderCol rhc = reportRowHeaderCols.getRowHeaderCol(c);
+
+ rhc.resetNext(rowIdx);
+ nameFound = false;
+ boolean posFound = false;
+ while ((!nameFound) && (!posFound) && rhc.hasNext()) {
+ RowHeader rh = rhc.getNext();
+ if (rowName.equals(rh.getRowTitle())) {
+ if (prevRowNamesChanged(rowIdx, prevRowNames))
+ posFound = true;
+ else
+ nameFound = true;
+ } else if (crossTabOrderManager != null
+ && crossTabOrderManager.isAfterRowHeaderValue(c, rh.getRowTitle(),
+ rowName))
+ posFound = true;
+ else if (crossTabOrderManager == null
+ && rowName.compareTo(rh.getRowTitle()) < 0)
+ posFound = true;
+ else if (prevRowNamesChanged(rowIdx, prevRowNames))
+ posFound = true;
+
+ if ((!nameFound) && (!posFound))
+ rowIdx++;
+ } // while
+
+ if (!nameFound)
+ if (createIfMissing) {
+ insertRow(rowIdx, rowNameValues, dataList, crossTabOrderManager);
+ return rowIdx;
+ } else
+ return -1;
+
+ prevRowNames.add(c, rowName);
+ } // for
+ if (!nameFound)
+ if (createIfMissing)
+ insertRow(rowIdx, rowNameValues, dataList, crossTabOrderManager);
+ else
+ return -1;
+
+ return rowIdx;
+ } // findRowIdx
+
+ public void setDataValue(Vector rowNameValues, Vector colNameValues, Vector colNameSortValues, DataValue value,
+ FormatProcessor formatProcessor, CrossTabOrderManager crossTabOrderManager, List dataList) {
+ int rowIdx = findRowIdx(rowNameValues, crossTabOrderManager, true, dataList);
+ int colIdx = findColumnIdx(colNameValues, colNameSortValues, crossTabOrderManager, true, dataList);
+
+ if ((rowIdx >= 0) && (colIdx >= 0)) {
+ //DataRow dr = reportDataRows.getDataRow(rowIdx);
+ DataRow dr = (DataRow)dataList.get(rowIdx);
+ dr.setRowValues(rowNameValues);
+ dr.setDataValue(colIdx, value);
+ formatProcessor.setHtmlFormatters(value, dr, false);
+ } // if
+ } // setDataValue
+
+ public void consolidateColumnHeaders(VisualManager visualManager) {
+ // Setting column visuals
+ for (int i = 0; i < reportColumnHeaderRows.getColumnHeaderRow(
+ reportColumnHeaderRows.getRowCount() - 1).size(); i++) {
+ StringBuffer sb = new StringBuffer();
+
+ for (int ir = 0; ir < reportColumnHeaderRows.getRowCount(); ir++) {
+ ColumnHeader ch = reportColumnHeaderRows.getColumnHeaderRow(ir)
+ .getColumnHeader(i);
+ if (sb.length() > 0)
+ sb.append('|');
+ sb.append(Utils.replaceInString(ch.getColumnTitle(), "|", " "));
+ } // for
+
+ String colValue = sb.toString();
+ columnVisuals.add(new ColumnVisual(colValue, colValue, visualManager
+ .isColumnVisible(colValue), /* visualManager.getSortByColId().equals(colValue)?visualManager.getSortByAscDesc(): */
+ null));
+ } // for
+
+ // Consolidating column headers
+ for (int r = reportColumnHeaderRows.getRowCount() - 1; r >= 0; r--) {
+ ColumnHeaderRow chr = reportColumnHeaderRows.getColumnHeaderRow(r);
+
+ if (chr.size() > 0) {
+ ColumnHeader baseCH = chr.getColumnHeader(0);
+ int c = 1;
+ int c_shift = 0;
+ while (c < chr.size()) {
+ ColumnHeader ch = chr.getColumnHeader(c);
+
+ boolean performMerge = true;
+ for (int ir = r; ir >= 0; ir--) {
+ ColumnHeaderRow ichr = reportColumnHeaderRows.getColumnHeaderRow(ir);
+ ColumnHeader ch0 = ichr.getColumnHeader(c + ((ir == r) ? 0 : c_shift));
+ ColumnHeader ch1 = ichr.getColumnHeader(c + ((ir == r) ? 0 : c_shift)
+ - 1);
+ if (!ch0.getColumnTitle().equals(ch1.getColumnTitle()))
+ performMerge = false;
+ } // for
+
+ if (performMerge) {
+ c_shift++;
+ baseCH.setColSpan(baseCH.getColSpan() + 1);
+ chr.remove(c);
+ } else {
+ baseCH = ch;
+ c++;
+ }
+ } // while
+ } // if
+ } // for
+ } // consolidateColumnHeaders
+
+ public void consolidateRowHeaders() {
+ for (int c = reportRowHeaderCols.getColumnCount() - 1; c >= 0; c--) {
+ RowHeaderCol rhc = reportRowHeaderCols.getRowHeaderCol(c);
+
+ if (rhc.size() > 0) {
+ RowHeader baseRH = rhc.getRowHeader(0);
+ int r = 1;
+ while (r < rhc.size()) {
+ RowHeader rh = rhc.getRowHeader(r);
+
+ boolean performMerge = rh.getRowTitle().equals(baseRH.getRowTitle());
+ for (int ic = c - 1; ic >= 0; ic--) {
+ RowHeaderCol irhc = reportRowHeaderCols.getRowHeaderCol(ic);
+ RowHeader rh0 = irhc.getRowHeader(r);
+ RowHeader rh1 = irhc.getRowHeader(r - 1);
+ if (!rh0.getRowTitle().equals(rh1.getRowTitle()))
+ performMerge = false;
+ } // for
+
+ if (performMerge)
+ rh.setRowTitle(null);
+ else
+ baseRH = rh;
+
+ r++;
+ } // while
+ } // if
+ } // for
+ } // consolidateRowHeaders
+
+ public void addRowNumbers(int pageNo, List dataList) {
+ pageNo = 0;
+ //int startRowNum = ((pageNo < 0) ? 0 : pageNo) * pageSize + 1;
+ int startRowNum = 0;
+ RowHeaderCol rhc = new RowHeaderCol();
+ reportRowHeaderCols.addRowHeaderCol(0, rhc);
+ //rhc.setColumnWidth("5%");
+ for (int r = 0; r < dataList.size(); r++) {
+ rhc.add(new RowHeader(startRowNum + r+""));
+ ((DataRow)dataList.get(r)).setRowNum(r);
+ }
+ } // addRowNumbers
+
+ private void removeRow(int rowIdx) {
+ for (reportRowHeaderCols.resetNext(); reportRowHeaderCols.hasNext();) {
+ RowHeaderCol rhc = reportRowHeaderCols.getNext();
+ rhc.remove(rowIdx);
+ } // for
+
+ reportDataRows.remove(rowIdx);
+ } // removeRow
+
+ public void truncateData(int startRow, int endRow) {
+ if( endRow != -1){
+ for (int r = getDataRowCount() - 1; r > endRow; r--)
+ removeRow(r);
+ }
+
+ for (int r = startRow - 1; r >= 0; r--)
+ removeRow(r);
+ } // truncateData
+
+ /** *********************************************************************************** */
+
+ public void createColumn(String colId, String displayName, String displayWidthInPxls, String alignment,
+ boolean currentlyVisible, String currentSort, boolean isRuntimeColSortDisabled, int level, int start, int colspan, boolean sortable) {
+ ColumnHeaderRow chr = null;
+ if (getHeaderRowCount() > 0)
+ chr = reportColumnHeaderRows.getColumnHeaderRow(0);
+ else {
+ chr = new ColumnHeaderRow();
+ reportColumnHeaderRows.addColumnHeaderRow(chr);
+ chr.setRowHeight("30");
+ } // if
+ /*ColumnHeader ch = new ColumnHeader(displayName, (displayWidth > 100) ? "10%" : (""
+ + displayWidth + "%"), alignment, 1, isRuntimeColSortDisabled ? null : colId);
+ */
+ ColumnHeader ch = new ColumnHeader(displayName, displayWidthInPxls, alignment, 1, isRuntimeColSortDisabled ? null : colId);
+ ch.setGroupLevel(level);
+ ch.setStartGroup(start);
+ ch.setColSpanGroup(colspan);
+ ch.setColId(colId);
+ ch.setSortable(sortable);
+ //chr.addColumnHeader(new ColumnHeader(displayName, (displayWidth > 100) ? "10%" : (""
+ // + displayWidth + "%"), 1, isRuntimeColSortDisabled ? null : colId));
+ chr.addColumnHeader(ch);
+ columnVisuals.add(new ColumnVisual(colId, displayName, currentlyVisible, currentSort));
+ } // createColumn
+
+ public void columnVisualShowHide(String colId, boolean newVisible) {
+ for (int i = 0; i < columnVisuals.size(); i++) {
+ ColumnVisual col = (ColumnVisual) columnVisuals.get(i);
+ if (col.getColId().equals(colId)) {
+ col.setVisible(newVisible);
+ applyColumnVisibility(i, newVisible);
+ break;
+ } // if
+ } // for
+ } // columnVisualShowHide
+
+ private void applyColumnVisibility(int colIdx, boolean newVisible) {
+ boolean isLast = true;
+ for (int r = reportColumnHeaderRows.getRowCount() - 1; r >= 0; r--) {
+ ColumnHeaderRow chr = reportColumnHeaderRows.getColumnHeaderRow(r);
+
+ if (isLast) {
+ chr.getColumnHeader(colIdx).setVisible(newVisible);
+ isLast = false;
+ } else {
+ int curStartIdx = 0;
+ for (chr.resetNext(); chr.hasNext();) {
+ ColumnHeader ch = chr.getNext();
+ if (colIdx >= curStartIdx && colIdx <= curStartIdx + ch.getColSpan() - 1) {
+ ch.setVisible(newVisible);
+ break;
+ } else
+ curStartIdx += ch.getColSpan();
+ } // for
+ } // else
+ } // for
+ int row = 0;
+ for (reportDataRows.resetNext(); reportDataRows.hasNext();) {
+ //reportDataRows.getNext().getDataValue(colIdx).setVisible(newVisible);
+ DataRow dr = reportDataRows.getNext();
+ if(colIdx < dr.getDataValueList().size()) {
+ DataValue dv = dr.getDataValue(colIdx);
+ dr.getDataValueList().remove(colIdx);
+ if(!dv.isHidden())
+ dv.setVisible(newVisible);
+ else
+ dv.setVisible(false);
+ dr.addDataValue(colIdx, dv);
+ }
+ reportDataRows.removeElementAt(row);
+ reportDataRows.addDataRow(row, dr);
+ row++;
+ }
+ } // applyColumnVisibility
+
+ public void applyVisibility() {
+ for (int i = 0; i < columnVisuals.size(); i++)
+ applyColumnVisibility(i, ((ColumnVisual) columnVisuals.get(i)).isVisible());
+ } // applyVisibility
+
+ public void resetVisualSettings() {
+ // No need to reset sort - if sort exists, the report data is reloaded
+ for (int i = 0; i < columnVisuals.size(); i++)
+ ((ColumnVisual) columnVisuals.get(i)).setVisible(true);
+
+ applyVisibility();
+ } // resetVisualSettings
+
+ /** *********************************************************************************** */
+
+ private int nextVisualIdx = 0;
+
+ public void resetNextVisual() {
+ resetNextVisual(0);
+ } // resetNext
+
+ public void resetNextVisual(int toPos) {
+ nextVisualIdx = toPos;
+ } // resetNext
+
+ public boolean hasNextVisual() {
+ return (nextVisualIdx < columnVisuals.size());
+ } // hasNext
+
+ public String getNextHiddenColLinks(int toPos) {
+ resetNextVisual(toPos);
+ return getNextHiddenColLinks();
+ } // getNextHiddenColLinks
+
+ public String getNextHiddenColLinks() {
+ if (!hasNextVisual())
+ return "";
+
+ StringBuffer sb = new StringBuffer();
+ ColumnVisual col = (ColumnVisual) columnVisuals.get(nextVisualIdx);
+
+ while (!col.isVisible()) {
+ if(!col.getColDisplay().equals(AppConstants.HIDDEN)) {
+ sb.append("<input type=image border=0 src='");
+ sb.append(AppUtils.getImgFolderURL());
+ sb.append("plus.gif' alt=\"Show column ");
+ sb.append(col.getColDisplay());
+ sb.append("\" width=11 height=11 onClick=\"document.formd.");
+ sb.append(AppConstants.RI_VISUAL_ACTION);
+ sb.append(".value='");
+ sb.append(AppConstants.VA_SHOW);
+ sb.append("';document.formd.");
+ sb.append(AppConstants.RI_DETAIL_ID);
+ sb.append(".value='");
+ sb.append(col.getColId());
+ sb.append("';document.formd.submit();\">");
+ }
+
+ if (!(nextVisualIdx + 1 < columnVisuals.size()))
+ break;
+ col = (ColumnVisual) columnVisuals.get(++nextVisualIdx);
+ } // while
+
+ return sb.toString();
+ } // getNextHiddenColLinks
+
+ public String getNextVisual() {
+ if (!hasNextVisual())
+ return null;
+
+ ColumnVisual col = (ColumnVisual) columnVisuals.get(nextVisualIdx++);
+
+ StringBuffer sb = new StringBuffer();
+
+ if (!col.isVisible() || col.getColDisplay().equals(AppConstants.HIDDEN))
+ return null;
+
+ sb.append("\n\t\t\t<table width=100% border=0 cellspacing=0 cellpadding=0><tr>\n");
+ sb
+ .append("\t\t\t\t<td style=\"background:#ffffff;\" align=left valign=middle nowrap><input type=image border=0 src='");
+ sb.append(AppUtils.getImgFolderURL());
+ sb.append("minus.gif' alt=\"Hide column ");
+ sb.append(col.getColDisplay());
+ sb.append("\" width=11 height=11 onClick=\"document.formd.");
+ sb.append(AppConstants.RI_VISUAL_ACTION);
+ sb.append(".value='");
+ sb.append(AppConstants.VA_HIDE);
+ sb.append("';document.formd.");
+ sb.append(AppConstants.RI_DETAIL_ID);
+ sb.append(".value='");
+ sb.append(col.getColId());
+ sb.append("';document.formd.submit();");
+ sb.append("\"></td>\n");
+ sb.append("\t\t\t\t<td style=\"background:#ffffff;\" align=center valign=middle width=95% nowrap>");
+ if (col.getSortType() != null) {
+ sb.append("<img border=0 src='");
+ sb.append(AppUtils.getImgFolderURL());
+ if (col.getSortType().equals(AppConstants.SO_ASC))
+ sb.append("grnarrowdn.gif");
+ else
+ sb.append("grnarrowup.gif");
+ sb.append("' alt=\"Sorted by column ");
+ sb.append(col.getColDisplay());
+ if (col.getSortType().equals(AppConstants.SO_ASC))
+ sb.append(" ascending");
+ else
+ sb.append(" descending");
+ sb.append("\" width=13 height=11>");
+ }
+ sb.append("</td>\n");
+ sb.append("\t\t\t\t<td style=\"background:#ffffff;\" align=right valign=middle nowrap>");
+ sb.append(getNextHiddenColLinks());
+ sb.append("</td>\n");
+ sb.append("\t\t\t</tr></table>\n\t\t");
+
+ return sb.toString();
+ } // getNext
+
+ /** *********************************************************************************** */
+
+ public void setColumnDataTotalsLinear(DataRow colDataTotals, String colTotalLabel) {
+ //commented so that we could differentiate data rows with total rows
+ //reportDataRows.addDataRow(colDataTotals);
+ RowHeader rh = new RowHeader(colTotalLabel, "45", 1, reportRowHeaderCols.getColumnCount(),true);
+ if(reportRowHeaderCols.size()>0)
+ reportRowHeaderCols.getRowHeaderCol(0).add(rh);
+
+ reportDataTotalRow = new ReportDataRows();
+ reportDataTotalRow.addDataRow(colDataTotals);
+ RowHeaderCol rhc = new RowHeaderCol();
+ rhc.add(rh);
+ reportTotalRowHeaderCols = new ReportRowHeaderCols();
+ reportTotalRowHeaderCols.addRowHeaderCol(0, rhc);
+ } // setColumnDataTotalsLinear
+
+ public void setCrossTabColumnTotalLabel(String colTotalLabel) {
+ reportRowHeaderCols.getRowHeaderCol(0).getRowHeader(getDataRowCount() - 1)
+ .setRowTitle("");
+ reportRowHeaderCols.getRowHeaderCol(0).getRowHeader(getDataRowCount() - 1).setColSpan(
+ 0);
+ reportRowHeaderCols.getRowHeaderCol(1).set(
+ getDataRowCount() - 1,
+ new RowHeader(colTotalLabel, "45", 1, reportRowHeaderCols.getColumnCount(),
+ true));
+ } // setCrossTabColumnTotalLabel
+
+ public void setCrossTabColumnTotalLabel(int reportDataSize, String colTotalLabel) {
+
+ reportRowHeaderCols.getRowHeaderCol(0).getRowHeader(getDataRowCount() - 1)
+ .setRowTitle("");
+ reportRowHeaderCols.getRowHeaderCol(0).getRowHeader(getDataRowCount() - 1).setColSpan(
+ 0);
+ reportRowHeaderCols.getRowHeaderCol(1).set(
+ getDataRowCount() - 1,
+ new RowHeader(colTotalLabel, "45", 1, reportRowHeaderCols.getColumnCount(),
+ true));
+ } // setCrossTabColumnTotalLabel
+
+ public void setColumnDataTotalsCrossTab(Vector colDataTotals, String totalsAlignment,
+ String colDisplayTotal, CrossTabOrderManager crossTabOrderManager, List dataList) {
+ DataRow totalsDataRow = new DataRow();
+ for (int c = 0; c < getDataColumnCount(); c++)
+ totalsDataRow.addDataValue(new DataValue());
+
+ for (Iterator iter = colDataTotals.iterator(); iter.hasNext();) {
+ CrossTabTotalValue tVal = (CrossTabTotalValue) iter.next();
+
+ int colIdx = findColumnIdx(tVal.getHeaderValues(), null, crossTabOrderManager, false, dataList);
+ if (colIdx >= 0) {
+ DataValue dataValue = new DataValue();
+
+ String totalValue = tVal.getTotalValue();
+ // if(colDisplayTotal.length()>0&&(!
+ // colDisplayTotal.equals(AppConstants.TOTAL_SUM_ID)))
+ // totalValue =
+ // nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(colDisplayTotal))+":
+ // "+totalValue;
+ dataValue.setDisplayValue(totalValue);
+ //added below statement for displaying in excel as number
+ dataValue.setDisplayTotal("SUM(");
+ dataValue.setAlignment(totalsAlignment);
+ dataValue.setBold(true);
+ totalsDataRow.setDataValue(colIdx, dataValue);
+
+ //totalsDataRow.addDataValue(dataValue);
+
+ } // if
+ } // for
+
+ //reportDataRows.addDataRow(totalsDataRow);
+ //dr.setRowValues(rowNameValues);
+ Vector rowNameValues = new Vector();
+ for (int i=0; i < reportRowHeaderCols.size(); i++) {
+ if(i==0) {
+ DataValue dataValue = new DataValue();
+ dataValue.setBold(true);
+ dataValue.setAlignment("center");
+ dataValue.setDisplayValue("Total");
+ rowNameValues.add(dataValue);
+ //rowNameValues.add("Total");
+ } else {
+ //rowNameValues.add("");
+ DataValue dataValue = new DataValue();
+ dataValue.setDisplayValue("");
+ rowNameValues.add(dataValue);
+
+ }
+ }
+ totalsDataRow.setRowValues(rowNameValues);
+ totalsDataRow.setRowNum(dataList.size());
+ dataList.add(totalsDataRow);
+ //reportRowHeaderCols.getNext().addRowHeader(new RowHeader("", "30", 1, 0));
+ } // setColumnDataTotalsCrossTab
+
+ public void setRowDataTotalsCrossTab(Vector rowDataTotals, String totalsAlignment,
+ String rowDisplayTotal, CrossTabOrderManager crossTabOrderManager, List dataList) {
+ int colIdx = getDataColumnCount();
+
+ boolean isFirst = true;
+ for (reportColumnHeaderRows.resetNext(); reportColumnHeaderRows.hasNext();) {
+ ColumnHeaderRow chr = reportColumnHeaderRows.getNext();
+ if (isFirst) {
+ String totalLabel = "Total";
+ if (rowDisplayTotal.length() > 0
+ && (!rowDisplayTotal.equals(AppConstants.TOTAL_SUM_ID)))
+ totalLabel = nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(rowDisplayTotal));
+ chr.addColumnHeader(colIdx, new ColumnHeader(totalLabel, "", 1,
+ reportColumnHeaderRows.getRowCount()));
+ isFirst = false;
+ } else
+ chr.addColumnHeader(colIdx, new ColumnHeader("", "", 1, 0));
+ } // for
+
+ for (reportDataRows.resetNext(); reportDataRows.hasNext();) {
+ DataRow dr = reportDataRows.getNext();
+ dr.addDataValue(colIdx, new DataValue());
+ } // for
+
+ for (Iterator iter = rowDataTotals.iterator(); iter.hasNext();) {
+ CrossTabTotalValue tVal = (CrossTabTotalValue) iter.next();
+
+ int rowIdx = findRowIdx(tVal.getHeaderValues(), crossTabOrderManager, false, dataList);
+ if (rowIdx >= 0) {
+ DataValue dataValue = new DataValue();
+
+ String totalValue = tVal.getTotalValue();
+ // if(rowDisplayTotal.length()>0&&(!
+ // rowDisplayTotal.equals(AppConstants.TOTAL_SUM_ID)))
+ // totalValue =
+ // nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(rowDisplayTotal))+":
+ // "+totalValue;
+ dataValue.setDisplayValue(totalValue);
+ //added below statement for displaying in excel as number
+ dataValue.setDisplayTotal("SUM(");
+ dataValue.setAlignment(totalsAlignment);
+ dataValue.setBold(true);
+
+ //reportDataRows.getDataRow(rowIdx).getDataValueList().add(colIdx, dataValue);
+ ((DataRow)dataList.get(rowIdx)).addDataValue(colIdx, dataValue);
+ } // if
+ } // for
+ } // setRowDataTotalsCrossTab
+
+ public void setGrandTotalCrossTab(String totalValue, String totalAlignment,
+ String displayTotal, List dataList) {
+ DataValue dataValue = new DataValue();
+
+ // if(displayTotal.length()>0&&(!
+ // displayTotal.equals(AppConstants.TOTAL_SUM_ID)))
+ // totalValue =
+ // nvl(AppConstants.TOTAL_FUNCTIONS.getNameById(displayTotal))+":
+ // "+totalValue;
+ dataValue.setDisplayValue(totalValue);
+ //added below statement for displaying in excel as number
+ dataValue.setDisplayTotal("SUM(");
+ dataValue.setAlignment(totalAlignment);
+ dataValue.setBold(true);
+
+ //int colIdx = getDataColumnCount() - 1;
+ int rowIdx = getDataRowCount() - 1;
+ //reportDataRows.getDataRow(rowIdx).getDataValueList().add(colIdx, dataValue);
+ DataRow dr = (DataRow)dataList.get(rowIdx);
+ dr.addDataValue(dr.getDataValueList().size(), dataValue);
+ } // setGrandTotalCrossTab
+
+ public List getReportDataList() {
+ return reportDataList;
+ }
+
+ public void setReportDataList(List reportDataList) {
+ this.reportDataList = reportDataList;
+ }
+
+} // ReportData
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportDataRows.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportDataRows.java
new file mode 100644
index 00000000..e2c9a6e5
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportDataRows.java
@@ -0,0 +1,72 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.Vector;
+
+public class ReportDataRows extends Vector {
+ 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 DataRow getNext() {
+ return hasNext() ? getDataRow(nextElemIdx++) : null;
+ } // getNext
+
+ public DataValue getDataValue(int rowIdx, int colIdx) {
+ return getDataRow(rowIdx).getDataValue(colIdx);
+ } // getDataValue
+
+ public DataRow getDataRow(int idx) {
+ return (DataRow) get(idx);
+ } // getDataRow
+
+ public void addDataRow(DataRow dataRow) {
+ add(dataRow);
+ } // addDataRow
+
+ public void addDataRow(int idx, DataRow dataRow) {
+ add(idx, dataRow);
+ } // addDataRow
+
+ public int getRowCount() {
+ return size();
+ } // getRowCount
+
+ public int getColumnCount() {
+ int cSize = 0;
+ if (getRowCount() > 0)
+ cSize = getDataRow(0).getDataValueList().size();
+
+ return cSize;
+ } // getColumnCount
+
+} // ReportDataRows
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportRowHeaderCols.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportRowHeaderCols.java
new file mode 100644
index 00000000..e3e4f817
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/ReportRowHeaderCols.java
@@ -0,0 +1,71 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.Vector;
+
+public class ReportRowHeaderCols extends Vector {
+ 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 RowHeaderCol getNext() {
+ return hasNext() ? getRowHeaderCol(nextElemIdx++) : null;
+ } // getNext
+
+ public RowHeader getRowHeader(int colIdx, int rowIdx) {
+ return getRowHeaderCol(colIdx).getRowHeader(rowIdx);
+ } // getRowHeader
+
+ public RowHeaderCol getRowHeaderCol(int idx) {
+ return (RowHeaderCol) get(idx);
+ } // getRowHeaderCol
+
+ public void addRowHeaderCol(RowHeaderCol rowHeaderCol) {
+ add(rowHeaderCol);
+ } // addRowHeaderCol
+
+ public void addRowHeaderCol(int idx, RowHeaderCol rowHeaderCol) {
+ add(idx, rowHeaderCol);
+ } // addRowHeaderCol
+
+ public int getRowCount() {
+ int cSize = 0;
+ if (getColumnCount() > 0)
+ cSize = getRowHeaderCol(0).size();
+
+ return cSize;
+ } // getRowCount
+
+ public int getColumnCount() {
+ return size();
+ } // getColumnCount
+
+} // ReportRowHeaderCols
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeader.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeader.java
new file mode 100644
index 00000000..c4c6b1be
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeader.java
@@ -0,0 +1,119 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+public class RowHeader extends org.openecomp.portalsdk.analytics.RaptorObject {
+ private String rowTitle = "";
+
+ private String rowHeight = "";
+
+ private int rowSpan = 1;
+
+ private int colSpan = 1;
+
+ private boolean bold = false;
+
+ public RowHeader() {
+ super();
+ }
+
+ public RowHeader(String rowTitle) {
+ this();
+ setRowTitle(rowTitle);
+ } // RowHeader
+
+ public RowHeader(String rowTitle, String rowHeight) {
+ this(rowTitle);
+ setRowHeight(rowHeight);
+ } // RowHeader
+
+ public RowHeader(String rowTitle, String rowHeight, int rowSpan) {
+ this(rowTitle, rowHeight);
+ setRowSpan(rowSpan);
+ } // RowHeader
+
+ public RowHeader(String rowTitle, String rowHeight, int rowSpan, int colSpan) {
+ this(rowTitle, rowHeight, rowSpan);
+ setColSpan(colSpan);
+ } // RowHeader
+
+ public RowHeader(String rowTitle, String rowHeight, int rowSpan, int colSpan, boolean bold) {
+ this(rowTitle, rowHeight, rowSpan, colSpan);
+ setBold(bold);
+ } // RowHeader
+
+ public String getRowTitle() {
+ return rowTitle;
+ }
+
+ public String getRowHeight() {
+ return rowHeight;
+ }
+
+ public int getRowSpan() {
+ return rowSpan;
+ }
+
+ public int getColSpan() {
+ return colSpan;
+ }
+
+ public boolean isBold() {
+ return bold;
+ }
+
+ public void setRowTitle(String rowTitle) {
+ this.rowTitle = nvl(rowTitle);
+ }
+
+ public void setRowHeight(String rowHeight) {
+ this.rowHeight = rowHeight;
+ }
+
+ public void setRowSpan(int rowSpan) {
+ this.rowSpan = rowSpan;
+ }
+
+ public void setColSpan(int colSpan) {
+ this.colSpan = colSpan;
+ }
+
+ public void setBold(boolean bold) {
+ this.bold = bold;
+ }
+
+ public String getRowTitleHtml() {
+ return (rowTitle.length() == 0) ? "&nbsp;" : rowTitle;
+ }
+
+ public String getRowHeightHtml() {
+ return (rowHeight.length() == 0) ? "" : (" height=" + rowHeight);
+ }
+
+ public String getRowSpanHtml() {
+ return (rowSpan == 1) ? "" : (" rowspan=" + rowSpan);
+ }
+
+ public String getColSpanHtml() {
+ return (colSpan == 1) ? "" : (" colspan=" + colSpan);
+ }
+
+} // RowHeader
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeaderCol.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeaderCol.java
new file mode 100644
index 00000000..2b405e84
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/view/RowHeaderCol.java
@@ -0,0 +1,156 @@
+/*-
+ * ================================================================================
+ * 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.view;
+
+import java.util.Vector;
+
+public class RowHeaderCol extends Vector {
+ private String columnWidth = "";
+
+ private String columnTitle = "";
+
+ private String alignment = "";
+
+ private String displayHeaderAlignment = "";
+
+ private int nextElemIdx = 0;
+
+ private boolean visible = true;
+
+ private String colId = "";
+
+ private String nowrap = "False";
+
+ public void resetNext() {
+ resetNext(0);
+ } // resetNext
+
+ public void resetNext(int toPos) {
+ nextElemIdx = toPos;
+ } // resetNext
+
+ public boolean hasNext() {
+ return (nextElemIdx < size());
+ } // hasNext
+
+ public RowHeader getNext() {
+ return hasNext() ? getRowHeader(nextElemIdx++) : null;
+ } // getNext
+
+ public RowHeader getRowHeader(int idx) {
+ return (RowHeader) get(idx);
+ } // getRowHeader
+
+ public void addRowHeader(RowHeader rowHeader) {
+ add(rowHeader);
+ } // addRowHeader
+
+ public void addRowHeader(int idx, RowHeader rowHeader) {
+ add(idx, rowHeader);
+ } // addRowHeader
+
+ public String getColumnTitle() {
+ return columnTitle;
+ }
+
+ public String getColumnWidth() {
+ return columnWidth;
+ }
+
+ public String getAlignment() {
+ return alignment;
+ }
+
+ 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 String getColumnTitleHtml() {
+ return (columnTitle.length() == 0) ? "&nbsp;" : columnTitle;
+ }
+
+ public String getColumnWidthHtml() {
+ return (columnWidth.length() == 0) ? "" : (" width=" + columnWidth);
+ }
+
+ public String getAlignmentHtml() {
+ return " align=" + nvl(alignment, "center");
+ }
+
+ /** ************************************************************************************************* */
+
+ private String nvl(String s) {
+ return (s == null) ? "" : s;
+ }
+
+ private String nvl(String s, String sDefault) {
+ return nvl(s).equals("") ? sDefault : s;
+ }
+
+ public String getNowrap() {
+ return nowrap;
+ }
+
+ public void setNowrap(String nowrap) {
+ this.nowrap = nowrap;
+ }
+
+ public boolean isVisible() {
+ return visible;
+ }
+
+ public void setVisible(boolean visible) {
+ this.visible = visible;
+ }
+
+ /**
+ * @return the colId
+ */
+ public String getColId() {
+ return colId;
+ }
+
+ /**
+ * @param colId the colId to set
+ */
+ public void setColId(String colId) {
+ this.colId = colId;
+ }
+
+ public String getDisplayHeaderAlignment() {
+ return displayHeaderAlignment;
+ }
+
+ public void setDisplayHeaderAlignment(String displayHeaderAlignment) {
+ this.displayHeaderAlignment = displayHeaderAlignment;
+ }
+
+
+
+} // RowHeaderCol
+
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartAdditionalOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartAdditionalOptions.java
new file mode 100644
index 00000000..48ae70a8
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartAdditionalOptions.java
@@ -0,0 +1,1178 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ChartAdditionalOptions complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ChartAdditionalOptions">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="chartMultiplePieOrder" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartMultiplePieLabelDisplay" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartOrientation" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="secondaryChartRenderer" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartDisplay" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="hideToolTips" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="hidechartLegend" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="legendPosition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="labelAngle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="intervalFromdate" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="intervalTodate" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="intervalLabel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="lastSeriesALineChart" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="lastSeriesABarChart" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="maxLabelsInDomainAxis" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="linearRegression" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="linearRegressionColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="exponentialRegressionColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="maxRegression" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="rangeAxisUpperLimit" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="rangeAxisLowerLimit" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="overlayItemValueOnStackBar" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="animate" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="animateAnimatedChart" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="keepDomainAxisValueAsString" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="stacked" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="barControls" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="xAxisDateType" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="lessXaxisTickers" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="timeAxis" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="timeSeriesRender" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="multiSeries" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="showXAxisLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="addXAxisTickers" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="zoomIn" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="timeAxisType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="logScale" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="topMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="bottomMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="rightMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="leftMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ChartAdditionalOptions", propOrder = {
+ "chartMultiplePieOrder",
+ "chartMultiplePieLabelDisplay",
+ "chartOrientation",
+ "secondaryChartRenderer",
+ "chartDisplay",
+ "hideToolTips",
+ "hidechartLegend",
+ "legendPosition",
+ "labelAngle",
+ "intervalFromdate",
+ "intervalTodate",
+ "intervalLabel",
+ "lastSeriesALineChart",
+ "lastSeriesABarChart",
+ "maxLabelsInDomainAxis",
+ "linearRegression",
+ "linearRegressionColor",
+ "exponentialRegressionColor",
+ "maxRegression",
+ "rangeAxisUpperLimit",
+ "rangeAxisLowerLimit",
+ "overlayItemValueOnStackBar",
+ "animate",
+ "animateAnimatedChart",
+ "keepDomainAxisValueAsString",
+ "stacked",
+ "barControls",
+ "xAxisDateType",
+ "lessXaxisTickers",
+ "timeAxis",
+ "timeSeriesRender",
+ "multiSeries",
+ "showXAxisLabel",
+ "addXAxisTickers",
+ "zoomIn",
+ "timeAxisType",
+ "logScale",
+ "topMargin",
+ "bottomMargin",
+ "rightMargin",
+ "leftMargin"
+})
+public class ChartAdditionalOptions {
+
+ protected String chartMultiplePieOrder;
+ protected String chartMultiplePieLabelDisplay;
+ protected String chartOrientation;
+ protected String secondaryChartRenderer;
+ protected String chartDisplay;
+ protected String hideToolTips;
+ protected String hidechartLegend;
+ protected String legendPosition;
+ protected String labelAngle;
+ protected String intervalFromdate;
+ protected String intervalTodate;
+ protected String intervalLabel;
+ protected String lastSeriesALineChart;
+ protected String lastSeriesABarChart;
+ protected String maxLabelsInDomainAxis;
+ protected String linearRegression;
+ protected String linearRegressionColor;
+ protected String exponentialRegressionColor;
+ protected String maxRegression;
+ protected String rangeAxisUpperLimit;
+ protected String rangeAxisLowerLimit;
+ protected String overlayItemValueOnStackBar;
+ @XmlElement(defaultValue = "false")
+ protected Boolean animate;
+ @XmlElement(defaultValue = "true")
+ protected Boolean animateAnimatedChart;
+ protected String keepDomainAxisValueAsString;
+ @XmlElement(defaultValue = "false")
+ protected Boolean stacked;
+ @XmlElement(defaultValue = "false")
+ protected Boolean barControls;
+ @XmlElement(defaultValue = "false")
+ protected Boolean xAxisDateType;
+ @XmlElement(defaultValue = "false")
+ protected Boolean lessXaxisTickers;
+ @XmlElement(defaultValue = "true")
+ protected Boolean timeAxis;
+ protected String timeSeriesRender;
+ @XmlElement(defaultValue = "false")
+ protected Boolean multiSeries;
+ @XmlElement(defaultValue = "false")
+ protected Boolean showXAxisLabel;
+ @XmlElement(defaultValue = "false")
+ protected Boolean addXAxisTickers;
+ protected Integer zoomIn;
+ protected String timeAxisType;
+ @XmlElement(defaultValue = "false")
+ protected Boolean logScale;
+ protected Integer topMargin;
+ protected Integer bottomMargin;
+ protected Integer rightMargin;
+ protected Integer leftMargin;
+
+ /**
+ * Gets the value of the chartMultiplePieOrder property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartMultiplePieOrder() {
+ return chartMultiplePieOrder;
+ }
+
+ /**
+ * Sets the value of the chartMultiplePieOrder property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartMultiplePieOrder(String value) {
+ this.chartMultiplePieOrder = value;
+ }
+
+ /**
+ * Gets the value of the chartMultiplePieLabelDisplay property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartMultiplePieLabelDisplay() {
+ return chartMultiplePieLabelDisplay;
+ }
+
+ /**
+ * Sets the value of the chartMultiplePieLabelDisplay property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartMultiplePieLabelDisplay(String value) {
+ this.chartMultiplePieLabelDisplay = value;
+ }
+
+ /**
+ * Gets the value of the chartOrientation property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartOrientation() {
+ return chartOrientation;
+ }
+
+ /**
+ * Sets the value of the chartOrientation property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartOrientation(String value) {
+ this.chartOrientation = value;
+ }
+
+ /**
+ * Gets the value of the secondaryChartRenderer property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSecondaryChartRenderer() {
+ return secondaryChartRenderer;
+ }
+
+ /**
+ * Sets the value of the secondaryChartRenderer property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSecondaryChartRenderer(String value) {
+ this.secondaryChartRenderer = value;
+ }
+
+ /**
+ * Gets the value of the chartDisplay property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartDisplay() {
+ return chartDisplay;
+ }
+
+ /**
+ * Sets the value of the chartDisplay property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartDisplay(String value) {
+ this.chartDisplay = value;
+ }
+
+ /**
+ * Gets the value of the hideToolTips property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHideToolTips() {
+ return hideToolTips;
+ }
+
+ /**
+ * Sets the value of the hideToolTips property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHideToolTips(String value) {
+ this.hideToolTips = value;
+ }
+
+ /**
+ * Gets the value of the hidechartLegend property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHidechartLegend() {
+ return hidechartLegend;
+ }
+
+ /**
+ * Sets the value of the hidechartLegend property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHidechartLegend(String value) {
+ this.hidechartLegend = value;
+ }
+
+ /**
+ * Gets the value of the legendPosition property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLegendPosition() {
+ return legendPosition;
+ }
+
+ /**
+ * Sets the value of the legendPosition property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLegendPosition(String value) {
+ this.legendPosition = value;
+ }
+
+ /**
+ * Gets the value of the labelAngle property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLabelAngle() {
+ return labelAngle;
+ }
+
+ /**
+ * Sets the value of the labelAngle property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLabelAngle(String value) {
+ this.labelAngle = value;
+ }
+
+ /**
+ * Gets the value of the intervalFromdate property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIntervalFromdate() {
+ return intervalFromdate;
+ }
+
+ /**
+ * Sets the value of the intervalFromdate property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIntervalFromdate(String value) {
+ this.intervalFromdate = value;
+ }
+
+ /**
+ * Gets the value of the intervalTodate property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIntervalTodate() {
+ return intervalTodate;
+ }
+
+ /**
+ * Sets the value of the intervalTodate property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIntervalTodate(String value) {
+ this.intervalTodate = value;
+ }
+
+ /**
+ * Gets the value of the intervalLabel property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIntervalLabel() {
+ return intervalLabel;
+ }
+
+ /**
+ * Sets the value of the intervalLabel property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIntervalLabel(String value) {
+ this.intervalLabel = value;
+ }
+
+ /**
+ * Gets the value of the lastSeriesALineChart property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLastSeriesALineChart() {
+ return lastSeriesALineChart;
+ }
+
+ /**
+ * Sets the value of the lastSeriesALineChart property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLastSeriesALineChart(String value) {
+ this.lastSeriesALineChart = value;
+ }
+
+ /**
+ * Gets the value of the lastSeriesABarChart property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLastSeriesABarChart() {
+ return lastSeriesABarChart;
+ }
+
+ /**
+ * Sets the value of the lastSeriesABarChart property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLastSeriesABarChart(String value) {
+ this.lastSeriesABarChart = value;
+ }
+
+ /**
+ * Gets the value of the maxLabelsInDomainAxis property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMaxLabelsInDomainAxis() {
+ return maxLabelsInDomainAxis;
+ }
+
+ /**
+ * Sets the value of the maxLabelsInDomainAxis property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMaxLabelsInDomainAxis(String value) {
+ this.maxLabelsInDomainAxis = value;
+ }
+
+ /**
+ * Gets the value of the linearRegression property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLinearRegression() {
+ return linearRegression;
+ }
+
+ /**
+ * Sets the value of the linearRegression property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLinearRegression(String value) {
+ this.linearRegression = value;
+ }
+
+ /**
+ * Gets the value of the linearRegressionColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLinearRegressionColor() {
+ return linearRegressionColor;
+ }
+
+ /**
+ * Sets the value of the linearRegressionColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLinearRegressionColor(String value) {
+ this.linearRegressionColor = value;
+ }
+
+ /**
+ * Gets the value of the exponentialRegressionColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getExponentialRegressionColor() {
+ return exponentialRegressionColor;
+ }
+
+ /**
+ * Sets the value of the exponentialRegressionColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setExponentialRegressionColor(String value) {
+ this.exponentialRegressionColor = value;
+ }
+
+ /**
+ * Gets the value of the maxRegression property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMaxRegression() {
+ return maxRegression;
+ }
+
+ /**
+ * Sets the value of the maxRegression property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMaxRegression(String value) {
+ this.maxRegression = value;
+ }
+
+ /**
+ * Gets the value of the rangeAxisUpperLimit property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getRangeAxisUpperLimit() {
+ return rangeAxisUpperLimit;
+ }
+
+ /**
+ * Sets the value of the rangeAxisUpperLimit property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setRangeAxisUpperLimit(String value) {
+ this.rangeAxisUpperLimit = value;
+ }
+
+ /**
+ * Gets the value of the rangeAxisLowerLimit property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getRangeAxisLowerLimit() {
+ return rangeAxisLowerLimit;
+ }
+
+ /**
+ * Sets the value of the rangeAxisLowerLimit property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setRangeAxisLowerLimit(String value) {
+ this.rangeAxisLowerLimit = value;
+ }
+
+ /**
+ * Gets the value of the overlayItemValueOnStackBar property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getOverlayItemValueOnStackBar() {
+ return overlayItemValueOnStackBar;
+ }
+
+ /**
+ * Sets the value of the overlayItemValueOnStackBar property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setOverlayItemValueOnStackBar(String value) {
+ this.overlayItemValueOnStackBar = value;
+ }
+
+ /**
+ * Gets the value of the animate property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isAnimate() {
+ return animate;
+ }
+
+ /**
+ * Sets the value of the animate property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setAnimate(Boolean value) {
+ this.animate = value;
+ }
+
+ /**
+ * Gets the value of the animateAnimatedChart property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isAnimateAnimatedChart() {
+ return animateAnimatedChart;
+ }
+
+ /**
+ * Sets the value of the animateAnimatedChart property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setAnimateAnimatedChart(Boolean value) {
+ this.animateAnimatedChart = value;
+ }
+
+ /**
+ * Gets the value of the keepDomainAxisValueAsString property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getKeepDomainAxisValueAsString() {
+ return keepDomainAxisValueAsString;
+ }
+
+ /**
+ * Sets the value of the keepDomainAxisValueAsString property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setKeepDomainAxisValueAsString(String value) {
+ this.keepDomainAxisValueAsString = value;
+ }
+
+ /**
+ * Gets the value of the stacked property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isStacked() {
+ return stacked;
+ }
+
+ /**
+ * Sets the value of the stacked property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setStacked(Boolean value) {
+ this.stacked = value;
+ }
+
+ /**
+ * Gets the value of the barControls property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isBarControls() {
+ return barControls;
+ }
+
+ /**
+ * Sets the value of the barControls property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setBarControls(Boolean value) {
+ this.barControls = value;
+ }
+
+ /**
+ * Gets the value of the xAxisDateType property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isXAxisDateType() {
+ return xAxisDateType;
+ }
+
+ /**
+ * Sets the value of the xAxisDateType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setXAxisDateType(Boolean value) {
+ this.xAxisDateType = value;
+ }
+
+ /**
+ * Gets the value of the lessXaxisTickers property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isLessXaxisTickers() {
+ return lessXaxisTickers;
+ }
+
+ /**
+ * Sets the value of the lessXaxisTickers property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setLessXaxisTickers(Boolean value) {
+ this.lessXaxisTickers = value;
+ }
+
+ /**
+ * Gets the value of the timeAxis property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isTimeAxis() {
+ return timeAxis;
+ }
+
+ /**
+ * Sets the value of the timeAxis property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setTimeAxis(Boolean value) {
+ this.timeAxis = value;
+ }
+
+ /**
+ * Gets the value of the timeSeriesRender property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTimeSeriesRender() {
+ return timeSeriesRender;
+ }
+
+ /**
+ * Sets the value of the timeSeriesRender property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTimeSeriesRender(String value) {
+ this.timeSeriesRender = value;
+ }
+
+ /**
+ * Gets the value of the multiSeries property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isMultiSeries() {
+ return multiSeries;
+ }
+
+ /**
+ * Sets the value of the multiSeries property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setMultiSeries(Boolean value) {
+ this.multiSeries = value;
+ }
+
+ /**
+ * Gets the value of the showXAxisLabel property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isShowXAxisLabel() {
+ return showXAxisLabel;
+ }
+
+ /**
+ * Sets the value of the showXAxisLabel property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setShowXAxisLabel(Boolean value) {
+ this.showXAxisLabel = value;
+ }
+
+ /**
+ * Gets the value of the addXAxisTickers property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isAddXAxisTickers() {
+ return addXAxisTickers;
+ }
+
+ /**
+ * Sets the value of the addXAxisTickers property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setAddXAxisTickers(Boolean value) {
+ this.addXAxisTickers = value;
+ }
+
+ /**
+ * Gets the value of the zoomIn property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getZoomIn() {
+ return zoomIn;
+ }
+
+ /**
+ * Sets the value of the zoomIn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setZoomIn(Integer value) {
+ this.zoomIn = value;
+ }
+
+ /**
+ * Gets the value of the timeAxisType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTimeAxisType() {
+ return timeAxisType;
+ }
+
+ /**
+ * Sets the value of the timeAxisType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTimeAxisType(String value) {
+ this.timeAxisType = value;
+ }
+
+ /**
+ * Gets the value of the logScale property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isLogScale() {
+ return logScale;
+ }
+
+ /**
+ * Sets the value of the logScale property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setLogScale(Boolean value) {
+ this.logScale = value;
+ }
+
+ /**
+ * Gets the value of the topMargin property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getTopMargin() {
+ return topMargin;
+ }
+
+ /**
+ * Sets the value of the topMargin property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setTopMargin(Integer value) {
+ this.topMargin = value;
+ }
+
+ /**
+ * Gets the value of the bottomMargin property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getBottomMargin() {
+ return bottomMargin;
+ }
+
+ /**
+ * Sets the value of the bottomMargin property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setBottomMargin(Integer value) {
+ this.bottomMargin = value;
+ }
+
+ /**
+ * Gets the value of the rightMargin property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getRightMargin() {
+ return rightMargin;
+ }
+
+ /**
+ * Sets the value of the rightMargin property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setRightMargin(Integer value) {
+ this.rightMargin = value;
+ }
+
+ /**
+ * Gets the value of the leftMargin property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getLeftMargin() {
+ return leftMargin;
+ }
+
+ /**
+ * Sets the value of the leftMargin property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setLeftMargin(Integer value) {
+ this.leftMargin = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillFormfield.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillFormfield.java
new file mode 100644
index 00000000..f097f3fa
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillFormfield.java
@@ -0,0 +1,86 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ChartDrillFormfield complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ChartDrillFormfield">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="formfield" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ChartDrillFormfield", propOrder = {
+ "formfield"
+})
+public class ChartDrillFormfield {
+
+ protected String formfield;
+
+ /**
+ * Gets the value of the formfield property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFormfield() {
+ return formfield;
+ }
+
+ /**
+ * Sets the value of the formfield property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFormfield(String value) {
+ this.formfield = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillOptions.java
new file mode 100644
index 00000000..3fc3eec3
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ChartDrillOptions.java
@@ -0,0 +1,207 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ChartDrillOptions complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ChartDrillOptions">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="drill_reportId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="drill_xAxis_FormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="drill_yAxis_FormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="drill_series_FormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="targetFormfield" type="{}ChartDrillFormfield" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ChartDrillOptions", propOrder = {
+ "drillReportId",
+ "drillXAxisFormField",
+ "drillYAxisFormField",
+ "drillSeriesFormField",
+ "targetFormfield"
+})
+public class ChartDrillOptions {
+
+ @XmlElement(name = "drill_reportId")
+ protected String drillReportId;
+ @XmlElement(name = "drill_xAxis_FormField")
+ protected String drillXAxisFormField;
+ @XmlElement(name = "drill_yAxis_FormField")
+ protected String drillYAxisFormField;
+ @XmlElement(name = "drill_series_FormField")
+ protected String drillSeriesFormField;
+ protected List<ChartDrillFormfield> targetFormfield;
+
+ /**
+ * Gets the value of the drillReportId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillReportId() {
+ return drillReportId;
+ }
+
+ /**
+ * Sets the value of the drillReportId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillReportId(String value) {
+ this.drillReportId = value;
+ }
+
+ /**
+ * Gets the value of the drillXAxisFormField property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillXAxisFormField() {
+ return drillXAxisFormField;
+ }
+
+ /**
+ * Sets the value of the drillXAxisFormField property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillXAxisFormField(String value) {
+ this.drillXAxisFormField = value;
+ }
+
+ /**
+ * Gets the value of the drillYAxisFormField property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillYAxisFormField() {
+ return drillYAxisFormField;
+ }
+
+ /**
+ * Sets the value of the drillYAxisFormField property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillYAxisFormField(String value) {
+ this.drillYAxisFormField = value;
+ }
+
+ /**
+ * Gets the value of the drillSeriesFormField property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillSeriesFormField() {
+ return drillSeriesFormField;
+ }
+
+ /**
+ * Sets the value of the drillSeriesFormField property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillSeriesFormField(String value) {
+ this.drillSeriesFormField = value;
+ }
+
+ /**
+ * Gets the value of the targetFormfield property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the targetFormfield property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getTargetFormfield().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link ChartDrillFormfield }
+ *
+ *
+ */
+ public List<ChartDrillFormfield> getTargetFormfield() {
+ if (targetFormfield == null) {
+ targetFormfield = new ArrayList<ChartDrillFormfield>();
+ }
+ return this.targetFormfield;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterList.java
new file mode 100644
index 00000000..a429ae99
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterList.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ColFilterList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ColFilterList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="colFilter" type="{}ColFilterType" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ColFilterList", propOrder = {
+ "colFilter"
+})
+public class ColFilterList {
+
+ protected List<ColFilterType> colFilter;
+
+ /**
+ * Gets the value of the colFilter property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the colFilter property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getColFilter().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link ColFilterType }
+ *
+ *
+ */
+ public List<ColFilterType> getColFilter() {
+ if (colFilter == null) {
+ colFilter = new ArrayList<ColFilterType>();
+ }
+ return this.colFilter;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterType.java
new file mode 100644
index 00000000..4ba660ed
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ColFilterType.java
@@ -0,0 +1,298 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ColFilterType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ColFilterType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="colId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="filterSeq" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ * &lt;element name="joinCondition" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="openBrackets" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="expression" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="argType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="argValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="closeBrackets" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ColFilterType", propOrder = {
+ "colId",
+ "filterSeq",
+ "joinCondition",
+ "openBrackets",
+ "expression",
+ "argType",
+ "argValue",
+ "closeBrackets",
+ "comment"
+})
+public class ColFilterType {
+
+ @XmlElement(required = true)
+ protected String colId;
+ protected int filterSeq;
+ @XmlElement(required = true)
+ protected String joinCondition;
+ protected String openBrackets;
+ @XmlElement(required = true)
+ protected String expression;
+ protected String argType;
+ protected String argValue;
+ protected String closeBrackets;
+ protected String comment;
+
+ /**
+ * Gets the value of the colId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColId() {
+ return colId;
+ }
+
+ /**
+ * Sets the value of the colId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColId(String value) {
+ this.colId = value;
+ }
+
+ /**
+ * Gets the value of the filterSeq property.
+ *
+ */
+ public int getFilterSeq() {
+ return filterSeq;
+ }
+
+ /**
+ * Sets the value of the filterSeq property.
+ *
+ */
+ public void setFilterSeq(int value) {
+ this.filterSeq = value;
+ }
+
+ /**
+ * Gets the value of the joinCondition property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getJoinCondition() {
+ return joinCondition;
+ }
+
+ /**
+ * Sets the value of the joinCondition property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setJoinCondition(String value) {
+ this.joinCondition = value;
+ }
+
+ /**
+ * Gets the value of the openBrackets property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getOpenBrackets() {
+ return openBrackets;
+ }
+
+ /**
+ * Sets the value of the openBrackets property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setOpenBrackets(String value) {
+ this.openBrackets = value;
+ }
+
+ /**
+ * Gets the value of the expression property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getExpression() {
+ return expression;
+ }
+
+ /**
+ * Sets the value of the expression property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setExpression(String value) {
+ this.expression = value;
+ }
+
+ /**
+ * Gets the value of the argType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getArgType() {
+ return argType;
+ }
+
+ /**
+ * Sets the value of the argType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setArgType(String value) {
+ this.argType = value;
+ }
+
+ /**
+ * Gets the value of the argValue property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getArgValue() {
+ return argValue;
+ }
+
+ /**
+ * Sets the value of the argValue property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setArgValue(String value) {
+ this.argValue = value;
+ }
+
+ /**
+ * Gets the value of the closeBrackets property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCloseBrackets() {
+ return closeBrackets;
+ }
+
+ /**
+ * Sets the value of the closeBrackets property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCloseBrackets(String value) {
+ this.closeBrackets = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/CustomReportType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/CustomReportType.java
new file mode 100644
index 00000000..58c7e30d
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/CustomReportType.java
@@ -0,0 +1,2011 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * <p>Java class for CustomReportType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="CustomReportType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="reportName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="reportDescr" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="numDashCols" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dashboardLayoutHTML" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dbInfo" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dbType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartType" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="chartTypeFixed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartMultiSeries" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartLeftAxisLabel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartRightAxisLabel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartWidth" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartHeight" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="showChartTitle" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="public" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="hideFormFieldAfterRun" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="createId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="createDate" type="{http://www.w3.org/2001/XMLSchema}date"/>
+ * &lt;element name="reportSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="reportTitle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="reportSubTitle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="reportHeader" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="frozenColumns" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="pdfImgLogo" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="emptyMessage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="widthNoColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dataGridAlign" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="reportFooter" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="numFormCols" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="displayOptions" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="jumpTo" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="searchPageSize" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="navPosition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="toggleLayout" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="pageNav" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="showPageSize" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="showNavPos" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="showGotoOption" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="dataContainerHeight" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dataContainerWidth" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="allowSchedule" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="multiGroupColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="topDown" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="sizedByContent" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;element name="dataSourceList" type="{}DataSourceList" minOccurs="0"/>
+ * &lt;element name="formFieldList" type="{}FormFieldList" minOccurs="0"/>
+ * &lt;element name="javascriptList" type="{}JavascriptList" minOccurs="0"/>
+ * &lt;element name="semaphoreList" type="{}SemaphoreList" minOccurs="0"/>
+ * &lt;element name="dashboardOptions" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dashboardType" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="reportInNewWindow" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="displayFolderTree" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="maxRowsInExcelDownload" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="dashBoardReports" type="{}DashboardReports" minOccurs="0"/>
+ * &lt;element name="dashBoardReportsNew" type="{}DashboardReportsNew" minOccurs="0"/>
+ * &lt;element name="chartAdditionalOptions" type="{}ChartAdditionalOptions" minOccurs="0"/>
+ * &lt;element name="pdfAdditionalOptions" type="{}PDFAdditionalOptions" minOccurs="0"/>
+ * &lt;element name="chartDrillOptions" type="{}ChartDrillOptions" minOccurs="0"/>
+ * &lt;element name="dataminingOptions" type="{}DataminingOptions" minOccurs="0"/>
+ * &lt;element name="javascriptElement" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="folderId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="drillURLInPoPUpPresent" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="isOneTimeScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="isHourlyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="isDailyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="isDailyMFScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="isWeeklyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="isMonthlyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="reportMap" type="{}ReportMap" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="pageSize" type="{http://www.w3.org/2001/XMLSchema}int" />
+ * &lt;attribute name="reportType" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "CustomReportType", propOrder = {
+ "reportName",
+ "reportDescr",
+ "numDashCols",
+ "dashboardLayoutHTML",
+ "dbInfo",
+ "dbType",
+ "chartType",
+ "chartTypeFixed",
+ "chartMultiSeries",
+ "chartLeftAxisLabel",
+ "chartRightAxisLabel",
+ "chartWidth",
+ "chartHeight",
+ "showChartTitle",
+ "_public",
+ "hideFormFieldAfterRun",
+ "createId",
+ "createDate",
+ "reportSQL",
+ "reportTitle",
+ "reportSubTitle",
+ "reportHeader",
+ "frozenColumns",
+ "pdfImgLogo",
+ "emptyMessage",
+ "widthNoColumn",
+ "dataGridAlign",
+ "reportFooter",
+ "numFormCols",
+ "displayOptions",
+ "jumpTo",
+ "searchPageSize",
+ "navPosition",
+ "toggleLayout",
+ "pageNav",
+ "showPageSize",
+ "showNavPos",
+ "showGotoOption",
+ "dataContainerHeight",
+ "dataContainerWidth",
+ "allowSchedule",
+ "multiGroupColumn",
+ "topDown",
+ "sizedByContent",
+ "comment",
+ "dataSourceList",
+ "formFieldList",
+ "javascriptList",
+ "semaphoreList",
+ "dashboardOptions",
+ "dashboardType",
+ "reportInNewWindow",
+ "displayFolderTree",
+ "maxRowsInExcelDownload",
+ "dashBoardReports",
+ "dashBoardReportsNew",
+ "chartAdditionalOptions",
+ "pdfAdditionalOptions",
+ "chartDrillOptions",
+ "dataminingOptions",
+ "javascriptElement",
+ "folderId",
+ "drillURLInPoPUpPresent",
+ "isOneTimeScheduleAllowed",
+ "isHourlyScheduleAllowed",
+ "isDailyScheduleAllowed",
+ "isDailyMFScheduleAllowed",
+ "isWeeklyScheduleAllowed",
+ "isMonthlyScheduleAllowed",
+ "reportMap"
+})
+public class CustomReportType {
+
+ @XmlElement(required = true)
+ protected String reportName;
+ @XmlElement(required = true)
+ protected String reportDescr;
+ protected String numDashCols;
+ protected String dashboardLayoutHTML;
+ protected String dbInfo;
+ protected String dbType;
+ @XmlElement(required = true)
+ protected String chartType;
+ protected String chartTypeFixed;
+ protected String chartMultiSeries;
+ protected String chartLeftAxisLabel;
+ protected String chartRightAxisLabel;
+ protected String chartWidth;
+ protected String chartHeight;
+ @XmlElement(defaultValue = "false")
+ protected boolean showChartTitle;
+ @XmlElement(name = "public", defaultValue = "false")
+ protected boolean _public;
+ @XmlElement(defaultValue = "false")
+ protected Boolean hideFormFieldAfterRun;
+ @XmlElement(required = true)
+ protected String createId;
+ @XmlElement(required = true)
+ @XmlSchemaType(name = "date")
+ protected XMLGregorianCalendar createDate;
+ protected String reportSQL;
+ protected String reportTitle;
+ protected String reportSubTitle;
+ protected String reportHeader;
+ @XmlElement(defaultValue = "0")
+ protected Integer frozenColumns;
+ protected String pdfImgLogo;
+ protected String emptyMessage;
+ protected String widthNoColumn;
+ protected String dataGridAlign;
+ protected String reportFooter;
+ protected String numFormCols;
+ protected String displayOptions;
+ protected Integer jumpTo;
+ protected Integer searchPageSize;
+ protected String navPosition;
+ @XmlElement(defaultValue = "true")
+ protected Boolean toggleLayout;
+ @XmlElement(defaultValue = "true")
+ protected Boolean pageNav;
+ @XmlElement(defaultValue = "true")
+ protected Boolean showPageSize;
+ @XmlElement(defaultValue = "true")
+ protected Boolean showNavPos;
+ @XmlElement(defaultValue = "true")
+ protected Boolean showGotoOption;
+ protected String dataContainerHeight;
+ protected String dataContainerWidth;
+ protected String allowSchedule;
+ protected String multiGroupColumn;
+ protected String topDown;
+ protected String sizedByContent;
+ protected String comment;
+ protected DataSourceList dataSourceList;
+ protected FormFieldList formFieldList;
+ protected JavascriptList javascriptList;
+ protected SemaphoreList semaphoreList;
+ protected String dashboardOptions;
+ @XmlElement(defaultValue = "false")
+ protected Boolean dashboardType;
+ @XmlElement(defaultValue = "false")
+ protected Boolean reportInNewWindow;
+ @XmlElement(defaultValue = "false")
+ protected Boolean displayFolderTree;
+ protected Integer maxRowsInExcelDownload;
+ protected DashboardReports dashBoardReports;
+ protected DashboardReportsNew dashBoardReportsNew;
+ protected ChartAdditionalOptions chartAdditionalOptions;
+ protected PDFAdditionalOptions pdfAdditionalOptions;
+ protected ChartDrillOptions chartDrillOptions;
+ protected DataminingOptions dataminingOptions;
+ protected String javascriptElement;
+ @XmlElement(defaultValue = "0")
+ protected String folderId;
+ @XmlElement(defaultValue = "false")
+ protected Boolean drillURLInPoPUpPresent;
+ protected String isOneTimeScheduleAllowed;
+ protected String isHourlyScheduleAllowed;
+ protected String isDailyScheduleAllowed;
+ protected String isDailyMFScheduleAllowed;
+ protected String isWeeklyScheduleAllowed;
+ protected String isMonthlyScheduleAllowed;
+ protected ReportMap reportMap;
+ @XmlAttribute(name = "pageSize")
+ protected Integer pageSize;
+ @XmlAttribute(name = "reportType")
+ protected String reportType;
+
+ /**
+ * Gets the value of the reportName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportName() {
+ return reportName;
+ }
+
+ /**
+ * Sets the value of the reportName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportName(String value) {
+ this.reportName = value;
+ }
+
+ /**
+ * Gets the value of the reportDescr property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportDescr() {
+ return reportDescr;
+ }
+
+ /**
+ * Sets the value of the reportDescr property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportDescr(String value) {
+ this.reportDescr = value;
+ }
+
+ /**
+ * Gets the value of the numDashCols property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getNumDashCols() {
+ return numDashCols;
+ }
+
+ /**
+ * Sets the value of the numDashCols property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setNumDashCols(String value) {
+ this.numDashCols = value;
+ }
+
+ /**
+ * Gets the value of the dashboardLayoutHTML property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDashboardLayoutHTML() {
+ return dashboardLayoutHTML;
+ }
+
+ /**
+ * Sets the value of the dashboardLayoutHTML property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDashboardLayoutHTML(String value) {
+ this.dashboardLayoutHTML = value;
+ }
+
+ /**
+ * Gets the value of the dbInfo property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDbInfo() {
+ return dbInfo;
+ }
+
+ /**
+ * Sets the value of the dbInfo property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDbInfo(String value) {
+ this.dbInfo = value;
+ }
+
+ /**
+ * Gets the value of the dbType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDbType() {
+ return dbType;
+ }
+
+ /**
+ * Sets the value of the dbType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDbType(String value) {
+ this.dbType = value;
+ }
+
+ /**
+ * Gets the value of the chartType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartType() {
+ return chartType;
+ }
+
+ /**
+ * Sets the value of the chartType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartType(String value) {
+ this.chartType = value;
+ }
+
+ /**
+ * Gets the value of the chartTypeFixed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartTypeFixed() {
+ return chartTypeFixed;
+ }
+
+ /**
+ * Sets the value of the chartTypeFixed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartTypeFixed(String value) {
+ this.chartTypeFixed = value;
+ }
+
+ /**
+ * Gets the value of the chartMultiSeries property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartMultiSeries() {
+ return chartMultiSeries;
+ }
+
+ /**
+ * Sets the value of the chartMultiSeries property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartMultiSeries(String value) {
+ this.chartMultiSeries = value;
+ }
+
+ /**
+ * Gets the value of the chartLeftAxisLabel property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartLeftAxisLabel() {
+ return chartLeftAxisLabel;
+ }
+
+ /**
+ * Sets the value of the chartLeftAxisLabel property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartLeftAxisLabel(String value) {
+ this.chartLeftAxisLabel = value;
+ }
+
+ /**
+ * Gets the value of the chartRightAxisLabel property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartRightAxisLabel() {
+ return chartRightAxisLabel;
+ }
+
+ /**
+ * Sets the value of the chartRightAxisLabel property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartRightAxisLabel(String value) {
+ this.chartRightAxisLabel = value;
+ }
+
+ /**
+ * Gets the value of the chartWidth property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartWidth() {
+ return chartWidth;
+ }
+
+ /**
+ * Sets the value of the chartWidth property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartWidth(String value) {
+ this.chartWidth = value;
+ }
+
+ /**
+ * Gets the value of the chartHeight property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartHeight() {
+ return chartHeight;
+ }
+
+ /**
+ * Sets the value of the chartHeight property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartHeight(String value) {
+ this.chartHeight = value;
+ }
+
+ /**
+ * Gets the value of the showChartTitle property.
+ *
+ */
+ public boolean isShowChartTitle() {
+ return showChartTitle;
+ }
+
+ /**
+ * Sets the value of the showChartTitle property.
+ *
+ */
+ public void setShowChartTitle(boolean value) {
+ this.showChartTitle = value;
+ }
+
+ /**
+ * Gets the value of the public property.
+ *
+ */
+ public boolean isPublic() {
+ return _public;
+ }
+
+ /**
+ * Sets the value of the public property.
+ *
+ */
+ public void setPublic(boolean value) {
+ this._public = value;
+ }
+
+ /**
+ * Gets the value of the hideFormFieldAfterRun property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isHideFormFieldAfterRun() {
+ return hideFormFieldAfterRun;
+ }
+
+ /**
+ * Sets the value of the hideFormFieldAfterRun property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setHideFormFieldAfterRun(Boolean value) {
+ this.hideFormFieldAfterRun = value;
+ }
+
+ /**
+ * Gets the value of the createId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCreateId() {
+ return createId;
+ }
+
+ /**
+ * Sets the value of the createId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCreateId(String value) {
+ this.createId = value;
+ }
+
+ /**
+ * Gets the value of the createDate property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getCreateDate() {
+ return createDate;
+ }
+
+ /**
+ * Sets the value of the createDate property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setCreateDate(XMLGregorianCalendar value) {
+ this.createDate = value;
+ }
+
+ /**
+ * Gets the value of the reportSQL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportSQL() {
+ return reportSQL;
+ }
+
+ /**
+ * Sets the value of the reportSQL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportSQL(String value) {
+ this.reportSQL = value;
+ }
+
+ /**
+ * Gets the value of the reportTitle property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportTitle() {
+ return reportTitle;
+ }
+
+ /**
+ * Sets the value of the reportTitle property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportTitle(String value) {
+ this.reportTitle = value;
+ }
+
+ /**
+ * Gets the value of the reportSubTitle property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportSubTitle() {
+ return reportSubTitle;
+ }
+
+ /**
+ * Sets the value of the reportSubTitle property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportSubTitle(String value) {
+ this.reportSubTitle = value;
+ }
+
+ /**
+ * Gets the value of the reportHeader property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportHeader() {
+ return reportHeader;
+ }
+
+ /**
+ * Sets the value of the reportHeader property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportHeader(String value) {
+ this.reportHeader = value;
+ }
+
+ /**
+ * Gets the value of the frozenColumns property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getFrozenColumns() {
+ return frozenColumns;
+ }
+
+ /**
+ * Sets the value of the frozenColumns property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setFrozenColumns(Integer value) {
+ this.frozenColumns = value;
+ }
+
+ /**
+ * Gets the value of the pdfImgLogo property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPdfImgLogo() {
+ return pdfImgLogo;
+ }
+
+ /**
+ * Sets the value of the pdfImgLogo property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPdfImgLogo(String value) {
+ this.pdfImgLogo = value;
+ }
+
+ /**
+ * Gets the value of the emptyMessage property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getEmptyMessage() {
+ return emptyMessage;
+ }
+
+ /**
+ * Sets the value of the emptyMessage property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setEmptyMessage(String value) {
+ this.emptyMessage = value;
+ }
+
+ /**
+ * Gets the value of the widthNoColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getWidthNoColumn() {
+ return widthNoColumn;
+ }
+
+ /**
+ * Sets the value of the widthNoColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setWidthNoColumn(String value) {
+ this.widthNoColumn = value;
+ }
+
+ /**
+ * Gets the value of the dataGridAlign property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataGridAlign() {
+ return dataGridAlign;
+ }
+
+ /**
+ * Sets the value of the dataGridAlign property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataGridAlign(String value) {
+ this.dataGridAlign = value;
+ }
+
+ /**
+ * Gets the value of the reportFooter property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportFooter() {
+ return reportFooter;
+ }
+
+ /**
+ * Sets the value of the reportFooter property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportFooter(String value) {
+ this.reportFooter = value;
+ }
+
+ /**
+ * Gets the value of the numFormCols property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getNumFormCols() {
+ return numFormCols;
+ }
+
+ /**
+ * Sets the value of the numFormCols property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setNumFormCols(String value) {
+ this.numFormCols = value;
+ }
+
+ /**
+ * Gets the value of the displayOptions property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayOptions() {
+ return displayOptions;
+ }
+
+ /**
+ * Sets the value of the displayOptions property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayOptions(String value) {
+ this.displayOptions = value;
+ }
+
+ /**
+ * Gets the value of the jumpTo property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getJumpTo() {
+ return jumpTo;
+ }
+
+ /**
+ * Sets the value of the jumpTo property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setJumpTo(Integer value) {
+ this.jumpTo = value;
+ }
+
+ /**
+ * Gets the value of the searchPageSize property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getSearchPageSize() {
+ return searchPageSize;
+ }
+
+ /**
+ * Sets the value of the searchPageSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setSearchPageSize(Integer value) {
+ this.searchPageSize = value;
+ }
+
+ /**
+ * Gets the value of the navPosition property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getNavPosition() {
+ return navPosition;
+ }
+
+ /**
+ * Sets the value of the navPosition property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setNavPosition(String value) {
+ this.navPosition = value;
+ }
+
+ /**
+ * Gets the value of the toggleLayout property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isToggleLayout() {
+ return toggleLayout;
+ }
+
+ /**
+ * Sets the value of the toggleLayout property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setToggleLayout(Boolean value) {
+ this.toggleLayout = value;
+ }
+
+ /**
+ * Gets the value of the pageNav property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isPageNav() {
+ return pageNav;
+ }
+
+ /**
+ * Sets the value of the pageNav property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setPageNav(Boolean value) {
+ this.pageNav = value;
+ }
+
+ /**
+ * Gets the value of the showPageSize property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isShowPageSize() {
+ return showPageSize;
+ }
+
+ /**
+ * Sets the value of the showPageSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setShowPageSize(Boolean value) {
+ this.showPageSize = value;
+ }
+
+ /**
+ * Gets the value of the showNavPos property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isShowNavPos() {
+ return showNavPos;
+ }
+
+ /**
+ * Sets the value of the showNavPos property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setShowNavPos(Boolean value) {
+ this.showNavPos = value;
+ }
+
+ /**
+ * Gets the value of the showGotoOption property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isShowGotoOption() {
+ return showGotoOption;
+ }
+
+ /**
+ * Sets the value of the showGotoOption property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setShowGotoOption(Boolean value) {
+ this.showGotoOption = value;
+ }
+
+ /**
+ * Gets the value of the dataContainerHeight property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataContainerHeight() {
+ return dataContainerHeight;
+ }
+
+ /**
+ * Sets the value of the dataContainerHeight property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataContainerHeight(String value) {
+ this.dataContainerHeight = value;
+ }
+
+ /**
+ * Gets the value of the dataContainerWidth property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataContainerWidth() {
+ return dataContainerWidth;
+ }
+
+ /**
+ * Sets the value of the dataContainerWidth property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataContainerWidth(String value) {
+ this.dataContainerWidth = value;
+ }
+
+ /**
+ * Gets the value of the allowSchedule property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAllowSchedule() {
+ return allowSchedule;
+ }
+
+ /**
+ * Sets the value of the allowSchedule property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAllowSchedule(String value) {
+ this.allowSchedule = value;
+ }
+
+ /**
+ * Gets the value of the multiGroupColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMultiGroupColumn() {
+ return multiGroupColumn;
+ }
+
+ /**
+ * Sets the value of the multiGroupColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMultiGroupColumn(String value) {
+ this.multiGroupColumn = value;
+ }
+
+ /**
+ * Gets the value of the topDown property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTopDown() {
+ return topDown;
+ }
+
+ /**
+ * Sets the value of the topDown property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTopDown(String value) {
+ this.topDown = value;
+ }
+
+ /**
+ * Gets the value of the sizedByContent property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSizedByContent() {
+ return sizedByContent;
+ }
+
+ /**
+ * Sets the value of the sizedByContent property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSizedByContent(String value) {
+ this.sizedByContent = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+ /**
+ * Gets the value of the dataSourceList property.
+ *
+ * @return
+ * possible object is
+ * {@link DataSourceList }
+ *
+ */
+ public DataSourceList getDataSourceList() {
+ return dataSourceList;
+ }
+
+ /**
+ * Sets the value of the dataSourceList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link DataSourceList }
+ *
+ */
+ public void setDataSourceList(DataSourceList value) {
+ this.dataSourceList = value;
+ }
+
+ /**
+ * Gets the value of the formFieldList property.
+ *
+ * @return
+ * possible object is
+ * {@link FormFieldList }
+ *
+ */
+ public FormFieldList getFormFieldList() {
+ return formFieldList;
+ }
+
+ /**
+ * Sets the value of the formFieldList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link FormFieldList }
+ *
+ */
+ public void setFormFieldList(FormFieldList value) {
+ this.formFieldList = value;
+ }
+
+ /**
+ * Gets the value of the javascriptList property.
+ *
+ * @return
+ * possible object is
+ * {@link JavascriptList }
+ *
+ */
+ public JavascriptList getJavascriptList() {
+ return javascriptList;
+ }
+
+ /**
+ * Sets the value of the javascriptList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link JavascriptList }
+ *
+ */
+ public void setJavascriptList(JavascriptList value) {
+ this.javascriptList = value;
+ }
+
+ /**
+ * Gets the value of the semaphoreList property.
+ *
+ * @return
+ * possible object is
+ * {@link SemaphoreList }
+ *
+ */
+ public SemaphoreList getSemaphoreList() {
+ return semaphoreList;
+ }
+
+ /**
+ * Sets the value of the semaphoreList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link SemaphoreList }
+ *
+ */
+ public void setSemaphoreList(SemaphoreList value) {
+ this.semaphoreList = value;
+ }
+
+ /**
+ * Gets the value of the dashboardOptions property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDashboardOptions() {
+ return dashboardOptions;
+ }
+
+ /**
+ * Sets the value of the dashboardOptions property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDashboardOptions(String value) {
+ this.dashboardOptions = value;
+ }
+
+ /**
+ * Gets the value of the dashboardType property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isDashboardType() {
+ return dashboardType;
+ }
+
+ /**
+ * Sets the value of the dashboardType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setDashboardType(Boolean value) {
+ this.dashboardType = value;
+ }
+
+ /**
+ * Gets the value of the reportInNewWindow property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isReportInNewWindow() {
+ return reportInNewWindow;
+ }
+
+ /**
+ * Sets the value of the reportInNewWindow property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setReportInNewWindow(Boolean value) {
+ this.reportInNewWindow = value;
+ }
+
+ /**
+ * Gets the value of the displayFolderTree property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isDisplayFolderTree() {
+ return displayFolderTree;
+ }
+
+ /**
+ * Sets the value of the displayFolderTree property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setDisplayFolderTree(Boolean value) {
+ this.displayFolderTree = value;
+ }
+
+ /**
+ * Gets the value of the maxRowsInExcelDownload property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getMaxRowsInExcelDownload() {
+ return maxRowsInExcelDownload;
+ }
+
+ /**
+ * Sets the value of the maxRowsInExcelDownload property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setMaxRowsInExcelDownload(Integer value) {
+ this.maxRowsInExcelDownload = value;
+ }
+
+ /**
+ * Gets the value of the dashBoardReports property.
+ *
+ * @return
+ * possible object is
+ * {@link DashboardReports }
+ *
+ */
+ public DashboardReports getDashBoardReports() {
+ return dashBoardReports;
+ }
+
+ /**
+ * Sets the value of the dashBoardReports property.
+ *
+ * @param value
+ * allowed object is
+ * {@link DashboardReports }
+ *
+ */
+ public void setDashBoardReports(DashboardReports value) {
+ this.dashBoardReports = value;
+ }
+
+ /**
+ * Gets the value of the dashBoardReportsNew property.
+ *
+ * @return
+ * possible object is
+ * {@link DashboardReportsNew }
+ *
+ */
+ public DashboardReportsNew getDashBoardReportsNew() {
+ return dashBoardReportsNew;
+ }
+
+ /**
+ * Sets the value of the dashBoardReportsNew property.
+ *
+ * @param value
+ * allowed object is
+ * {@link DashboardReportsNew }
+ *
+ */
+ public void setDashBoardReportsNew(DashboardReportsNew value) {
+ this.dashBoardReportsNew = value;
+ }
+
+ /**
+ * Gets the value of the chartAdditionalOptions property.
+ *
+ * @return
+ * possible object is
+ * {@link ChartAdditionalOptions }
+ *
+ */
+ public ChartAdditionalOptions getChartAdditionalOptions() {
+ return chartAdditionalOptions;
+ }
+
+ /**
+ * Sets the value of the chartAdditionalOptions property.
+ *
+ * @param value
+ * allowed object is
+ * {@link ChartAdditionalOptions }
+ *
+ */
+ public void setChartAdditionalOptions(ChartAdditionalOptions value) {
+ this.chartAdditionalOptions = value;
+ }
+
+ /**
+ * Gets the value of the pdfAdditionalOptions property.
+ *
+ * @return
+ * possible object is
+ * {@link PDFAdditionalOptions }
+ *
+ */
+ public PDFAdditionalOptions getPdfAdditionalOptions() {
+ return pdfAdditionalOptions;
+ }
+
+ /**
+ * Sets the value of the pdfAdditionalOptions property.
+ *
+ * @param value
+ * allowed object is
+ * {@link PDFAdditionalOptions }
+ *
+ */
+ public void setPdfAdditionalOptions(PDFAdditionalOptions value) {
+ this.pdfAdditionalOptions = value;
+ }
+
+ /**
+ * Gets the value of the chartDrillOptions property.
+ *
+ * @return
+ * possible object is
+ * {@link ChartDrillOptions }
+ *
+ */
+ public ChartDrillOptions getChartDrillOptions() {
+ return chartDrillOptions;
+ }
+
+ /**
+ * Sets the value of the chartDrillOptions property.
+ *
+ * @param value
+ * allowed object is
+ * {@link ChartDrillOptions }
+ *
+ */
+ public void setChartDrillOptions(ChartDrillOptions value) {
+ this.chartDrillOptions = value;
+ }
+
+ /**
+ * Gets the value of the dataminingOptions property.
+ *
+ * @return
+ * possible object is
+ * {@link DataminingOptions }
+ *
+ */
+ public DataminingOptions getDataminingOptions() {
+ return dataminingOptions;
+ }
+
+ /**
+ * Sets the value of the dataminingOptions property.
+ *
+ * @param value
+ * allowed object is
+ * {@link DataminingOptions }
+ *
+ */
+ public void setDataminingOptions(DataminingOptions value) {
+ this.dataminingOptions = value;
+ }
+
+ /**
+ * Gets the value of the javascriptElement property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getJavascriptElement() {
+ return javascriptElement;
+ }
+
+ /**
+ * Sets the value of the javascriptElement property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setJavascriptElement(String value) {
+ this.javascriptElement = value;
+ }
+
+ /**
+ * Gets the value of the folderId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFolderId() {
+ return folderId;
+ }
+
+ /**
+ * Sets the value of the folderId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFolderId(String value) {
+ this.folderId = value;
+ }
+
+ /**
+ * Gets the value of the drillURLInPoPUpPresent property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isDrillURLInPoPUpPresent() {
+ return drillURLInPoPUpPresent;
+ }
+
+ /**
+ * Sets the value of the drillURLInPoPUpPresent property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setDrillURLInPoPUpPresent(Boolean value) {
+ this.drillURLInPoPUpPresent = value;
+ }
+
+ /**
+ * Gets the value of the isOneTimeScheduleAllowed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsOneTimeScheduleAllowed() {
+ return isOneTimeScheduleAllowed;
+ }
+
+ /**
+ * Sets the value of the isOneTimeScheduleAllowed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsOneTimeScheduleAllowed(String value) {
+ this.isOneTimeScheduleAllowed = value;
+ }
+
+ /**
+ * Gets the value of the isHourlyScheduleAllowed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsHourlyScheduleAllowed() {
+ return isHourlyScheduleAllowed;
+ }
+
+ /**
+ * Sets the value of the isHourlyScheduleAllowed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsHourlyScheduleAllowed(String value) {
+ this.isHourlyScheduleAllowed = value;
+ }
+
+ /**
+ * Gets the value of the isDailyScheduleAllowed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsDailyScheduleAllowed() {
+ return isDailyScheduleAllowed;
+ }
+
+ /**
+ * Sets the value of the isDailyScheduleAllowed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsDailyScheduleAllowed(String value) {
+ this.isDailyScheduleAllowed = value;
+ }
+
+ /**
+ * Gets the value of the isDailyMFScheduleAllowed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsDailyMFScheduleAllowed() {
+ return isDailyMFScheduleAllowed;
+ }
+
+ /**
+ * Sets the value of the isDailyMFScheduleAllowed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsDailyMFScheduleAllowed(String value) {
+ this.isDailyMFScheduleAllowed = value;
+ }
+
+ /**
+ * Gets the value of the isWeeklyScheduleAllowed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsWeeklyScheduleAllowed() {
+ return isWeeklyScheduleAllowed;
+ }
+
+ /**
+ * Sets the value of the isWeeklyScheduleAllowed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsWeeklyScheduleAllowed(String value) {
+ this.isWeeklyScheduleAllowed = value;
+ }
+
+ /**
+ * Gets the value of the isMonthlyScheduleAllowed property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsMonthlyScheduleAllowed() {
+ return isMonthlyScheduleAllowed;
+ }
+
+ /**
+ * Sets the value of the isMonthlyScheduleAllowed property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsMonthlyScheduleAllowed(String value) {
+ this.isMonthlyScheduleAllowed = value;
+ }
+
+ /**
+ * Gets the value of the reportMap property.
+ *
+ * @return
+ * possible object is
+ * {@link ReportMap }
+ *
+ */
+ public ReportMap getReportMap() {
+ return reportMap;
+ }
+
+ /**
+ * Sets the value of the reportMap property.
+ *
+ * @param value
+ * allowed object is
+ * {@link ReportMap }
+ *
+ */
+ public void setReportMap(ReportMap value) {
+ this.reportMap = value;
+ }
+
+ /**
+ * Gets the value of the pageSize property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getPageSize() {
+ return pageSize;
+ }
+
+ /**
+ * Sets the value of the pageSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setPageSize(Integer value) {
+ this.pageSize = value;
+ }
+
+ /**
+ * Gets the value of the reportType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportType() {
+ return reportType;
+ }
+
+ /**
+ * Sets the value of the reportType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportType(String value) {
+ this.reportType = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorList.java
new file mode 100644
index 00000000..4c3b483b
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorList.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DashboardEditorList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DashboardEditorList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="editorList" type="{}DashboardEditorReport" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DashboardEditorList", propOrder = {
+ "editorList"
+})
+public class DashboardEditorList {
+
+ protected List<DashboardEditorReport> editorList;
+
+ /**
+ * Gets the value of the editorList property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the editorList property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getEditorList().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link DashboardEditorReport }
+ *
+ *
+ */
+ public List<DashboardEditorReport> getEditorList() {
+ if (editorList == null) {
+ editorList = new ArrayList<DashboardEditorReport>();
+ }
+ return this.editorList;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorReport.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorReport.java
new file mode 100644
index 00000000..c6d17485
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardEditorReport.java
@@ -0,0 +1,172 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DashboardEditorReport complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DashboardEditorReport">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="reportId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="reportName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="dataType" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="position" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DashboardEditorReport", propOrder = {
+ "reportId",
+ "reportName",
+ "dataType",
+ "position"
+})
+public class DashboardEditorReport {
+
+ @XmlElement(required = true)
+ protected String reportId;
+ @XmlElement(required = true)
+ protected String reportName;
+ @XmlElement(required = true)
+ protected String dataType;
+ @XmlElement(required = true)
+ protected String position;
+
+ /**
+ * Gets the value of the reportId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportId() {
+ return reportId;
+ }
+
+ /**
+ * Sets the value of the reportId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportId(String value) {
+ this.reportId = value;
+ }
+
+ /**
+ * Gets the value of the reportName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportName() {
+ return reportName;
+ }
+
+ /**
+ * Sets the value of the reportName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportName(String value) {
+ this.reportName = value;
+ }
+
+ /**
+ * Gets the value of the dataType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataType() {
+ return dataType;
+ }
+
+ /**
+ * Sets the value of the dataType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataType(String value) {
+ this.dataType = value;
+ }
+
+ /**
+ * Gets the value of the position property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPosition() {
+ return position;
+ }
+
+ /**
+ * Sets the value of the position property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPosition(String value) {
+ this.position = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReports.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReports.java
new file mode 100644
index 00000000..8e44cfe1
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReports.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DashboardReports complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DashboardReports">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="reportsList" type="{}Reports" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DashboardReports", propOrder = {
+ "reportsList"
+})
+public class DashboardReports {
+
+ protected List<Reports> reportsList;
+
+ /**
+ * Gets the value of the reportsList property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the reportsList property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getReportsList().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link Reports }
+ *
+ *
+ */
+ public List<Reports> getReportsList() {
+ if (reportsList == null) {
+ reportsList = new ArrayList<Reports>();
+ }
+ return this.reportsList;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReportsNew.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReportsNew.java
new file mode 100644
index 00000000..1755e70e
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DashboardReportsNew.java
@@ -0,0 +1,148 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DashboardReportsNew complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DashboardReportsNew">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="reportsList" type="{}Reports" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;element name="dashboardEditor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dashboardEditorList" type="{}DashboardEditorList" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DashboardReportsNew", propOrder = {
+ "reportsList",
+ "dashboardEditor",
+ "dashboardEditorList"
+})
+public class DashboardReportsNew {
+
+ protected List<Reports> reportsList;
+ protected String dashboardEditor;
+ protected DashboardEditorList dashboardEditorList;
+
+ /**
+ * Gets the value of the reportsList property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the reportsList property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getReportsList().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link Reports }
+ *
+ *
+ */
+ public List<Reports> getReportsList() {
+ if (reportsList == null) {
+ reportsList = new ArrayList<Reports>();
+ }
+ return this.reportsList;
+ }
+
+ /**
+ * Gets the value of the dashboardEditor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDashboardEditor() {
+ return dashboardEditor;
+ }
+
+ /**
+ * Sets the value of the dashboardEditor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDashboardEditor(String value) {
+ this.dashboardEditor = value;
+ }
+
+ /**
+ * Gets the value of the dashboardEditorList property.
+ *
+ * @return
+ * possible object is
+ * {@link DashboardEditorList }
+ *
+ */
+ public DashboardEditorList getDashboardEditorList() {
+ return dashboardEditorList;
+ }
+
+ /**
+ * Sets the value of the dashboardEditorList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link DashboardEditorList }
+ *
+ */
+ public void setDashboardEditorList(DashboardEditorList value) {
+ this.dashboardEditorList = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnList.java
new file mode 100644
index 00000000..79e6e0b2
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnList.java
@@ -0,0 +1,96 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DataColumnList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DataColumnList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="dataColumn" type="{}DataColumnType" maxOccurs="unbounded"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DataColumnList", propOrder = {
+ "dataColumn"
+})
+public class DataColumnList {
+
+ @XmlElement(required = true)
+ protected List<DataColumnType> dataColumn;
+
+ /**
+ * Gets the value of the dataColumn property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the dataColumn property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getDataColumn().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link DataColumnType }
+ *
+ *
+ */
+ public List<DataColumnType> getDataColumn() {
+ if (dataColumn == null) {
+ dataColumn = new ArrayList<DataColumnType>();
+ }
+ return this.dataColumn;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnType.java
new file mode 100644
index 00000000..c710a1ea
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataColumnType.java
@@ -0,0 +1,1455 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DataColumnType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DataColumnType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="tableId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="dbColName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="crossTabValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="colName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="displayName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="displayWidth" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="displayWidthInPxls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="pdfDisplayWidthInPxls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="displayAlignment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="displayHeaderAlignment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="orderSeq" type="{http://www.w3.org/2001/XMLSchema}int"/>
+ * &lt;element name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="calculated" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="colType" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="hyperlinkURL" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="hyperlinkType" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="actionImg" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="groupByPos" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="subTotalCustomText" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="hideRepeatedKey" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="colFormat" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="groupBreak" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="orderBySeq" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="orderByAscDesc" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="displayTotal" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="colOnChart" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartSeq" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="chartColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartLineType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartSeries" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="isRangeAxisFilled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="isSortable" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="createInNewChart" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="drillDownType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="drillinPoPUp" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="drillDownURL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="drillDownParams" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;element name="colFilterList" type="{}ColFilterList" minOccurs="0"/>
+ * &lt;element name="semaphoreId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dbColType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="chartGroup" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="yAxis" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dependsOnFormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="nowrap" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="indentation" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="enhancedPagination" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="level" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="start" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="colspan" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="dataMiningCol" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="colId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DataColumnType", propOrder = {
+ "tableId",
+ "dbColName",
+ "crossTabValue",
+ "colName",
+ "displayName",
+ "displayWidth",
+ "displayWidthInPxls",
+ "pdfDisplayWidthInPxls",
+ "displayAlignment",
+ "displayHeaderAlignment",
+ "orderSeq",
+ "visible",
+ "calculated",
+ "colType",
+ "hyperlinkURL",
+ "hyperlinkType",
+ "actionImg",
+ "groupByPos",
+ "subTotalCustomText",
+ "hideRepeatedKey",
+ "colFormat",
+ "groupBreak",
+ "orderBySeq",
+ "orderByAscDesc",
+ "displayTotal",
+ "colOnChart",
+ "chartSeq",
+ "chartColor",
+ "chartLineType",
+ "chartSeries",
+ "isRangeAxisFilled",
+ "isSortable",
+ "createInNewChart",
+ "drillDownType",
+ "drillinPoPUp",
+ "drillDownURL",
+ "drillDownParams",
+ "comment",
+ "colFilterList",
+ "semaphoreId",
+ "dbColType",
+ "chartGroup",
+ "yAxis",
+ "dependsOnFormField",
+ "nowrap",
+ "indentation",
+ "enhancedPagination",
+ "level",
+ "start",
+ "colspan",
+ "dataMiningCol"
+})
+public class DataColumnType {
+
+ @XmlElement(required = true)
+ protected String tableId;
+ @XmlElement(required = true)
+ protected String dbColName;
+ protected String crossTabValue;
+ @XmlElement(required = true)
+ protected String colName;
+ @XmlElement(required = true)
+ protected String displayName;
+ protected Integer displayWidth;
+ protected String displayWidthInPxls;
+ protected String pdfDisplayWidthInPxls;
+ protected String displayAlignment;
+ protected String displayHeaderAlignment;
+ protected int orderSeq;
+ @XmlElement(defaultValue = "true")
+ protected boolean visible;
+ @XmlElement(defaultValue = "false")
+ protected boolean calculated;
+ @XmlElement(required = true)
+ protected String colType;
+ @XmlElement(required = true)
+ protected String hyperlinkURL;
+ @XmlElement(required = true)
+ protected String hyperlinkType;
+ @XmlElement(required = true)
+ protected String actionImg;
+ protected Integer groupByPos;
+ protected String subTotalCustomText;
+ @XmlElement(defaultValue = "false")
+ protected Boolean hideRepeatedKey;
+ protected String colFormat;
+ @XmlElement(defaultValue = "false")
+ protected boolean groupBreak;
+ protected Integer orderBySeq;
+ protected String orderByAscDesc;
+ protected String displayTotal;
+ protected String colOnChart;
+ protected Integer chartSeq;
+ protected String chartColor;
+ protected String chartLineType;
+ @XmlElement(defaultValue = "false")
+ protected Boolean chartSeries;
+ @XmlElement(defaultValue = "false")
+ protected Boolean isRangeAxisFilled;
+ @XmlElement(defaultValue = "false")
+ protected Boolean isSortable;
+ @XmlElement(defaultValue = "false")
+ protected Boolean createInNewChart;
+ protected String drillDownType;
+ @XmlElement(defaultValue = "false")
+ protected Boolean drillinPoPUp;
+ protected String drillDownURL;
+ protected String drillDownParams;
+ protected String comment;
+ protected ColFilterList colFilterList;
+ protected String semaphoreId;
+ protected String dbColType;
+ protected String chartGroup;
+ protected String yAxis;
+ protected String dependsOnFormField;
+ protected String nowrap;
+ @XmlElement(defaultValue = "0")
+ protected Integer indentation;
+ @XmlElement(defaultValue = "false")
+ protected Boolean enhancedPagination;
+ @XmlElement(defaultValue = "0")
+ protected Integer level;
+ @XmlElement(defaultValue = "0")
+ protected Integer start;
+ @XmlElement(defaultValue = "0")
+ protected Integer colspan;
+ protected String dataMiningCol;
+ @XmlAttribute(name = "colId")
+ protected String colId;
+
+ /**
+ * Gets the value of the tableId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTableId() {
+ return tableId;
+ }
+
+ /**
+ * Sets the value of the tableId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTableId(String value) {
+ this.tableId = value;
+ }
+
+ /**
+ * Gets the value of the dbColName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDbColName() {
+ return dbColName;
+ }
+
+ /**
+ * Sets the value of the dbColName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDbColName(String value) {
+ this.dbColName = value;
+ }
+
+ /**
+ * Gets the value of the crossTabValue property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCrossTabValue() {
+ return crossTabValue;
+ }
+
+ /**
+ * Sets the value of the crossTabValue property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCrossTabValue(String value) {
+ this.crossTabValue = value;
+ }
+
+ /**
+ * Gets the value of the colName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColName() {
+ return colName;
+ }
+
+ /**
+ * Sets the value of the colName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColName(String value) {
+ this.colName = value;
+ }
+
+ /**
+ * Gets the value of the displayName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ /**
+ * Sets the value of the displayName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayName(String value) {
+ this.displayName = value;
+ }
+
+ /**
+ * Gets the value of the displayWidth property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getDisplayWidth() {
+ return displayWidth;
+ }
+
+ /**
+ * Sets the value of the displayWidth property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setDisplayWidth(Integer value) {
+ this.displayWidth = value;
+ }
+
+ /**
+ * Gets the value of the displayWidthInPxls property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayWidthInPxls() {
+ return displayWidthInPxls;
+ }
+
+ /**
+ * Sets the value of the displayWidthInPxls property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayWidthInPxls(String value) {
+ this.displayWidthInPxls = value;
+ }
+
+ /**
+ * Gets the value of the pdfDisplayWidthInPxls property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPdfDisplayWidthInPxls() {
+ return pdfDisplayWidthInPxls;
+ }
+
+ /**
+ * Sets the value of the pdfDisplayWidthInPxls property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPdfDisplayWidthInPxls(String value) {
+ this.pdfDisplayWidthInPxls = value;
+ }
+
+ /**
+ * Gets the value of the displayAlignment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayAlignment() {
+ return displayAlignment;
+ }
+
+ /**
+ * Sets the value of the displayAlignment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayAlignment(String value) {
+ this.displayAlignment = value;
+ }
+
+ /**
+ * Gets the value of the displayHeaderAlignment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayHeaderAlignment() {
+ return displayHeaderAlignment;
+ }
+
+ /**
+ * Sets the value of the displayHeaderAlignment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayHeaderAlignment(String value) {
+ this.displayHeaderAlignment = value;
+ }
+
+ /**
+ * Gets the value of the orderSeq property.
+ *
+ */
+ public int getOrderSeq() {
+ return orderSeq;
+ }
+
+ /**
+ * Sets the value of the orderSeq property.
+ *
+ */
+ public void setOrderSeq(int value) {
+ this.orderSeq = value;
+ }
+
+ /**
+ * Gets the value of the visible property.
+ *
+ */
+ public boolean isVisible() {
+ return visible;
+ }
+
+ /**
+ * Sets the value of the visible property.
+ *
+ */
+ public void setVisible(boolean value) {
+ this.visible = value;
+ }
+
+ /**
+ * Gets the value of the calculated property.
+ *
+ */
+ public boolean isCalculated() {
+ return calculated;
+ }
+
+ /**
+ * Sets the value of the calculated property.
+ *
+ */
+ public void setCalculated(boolean value) {
+ this.calculated = value;
+ }
+
+ /**
+ * Gets the value of the colType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColType() {
+ return colType;
+ }
+
+ /**
+ * Sets the value of the colType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColType(String value) {
+ this.colType = value;
+ }
+
+ /**
+ * Gets the value of the hyperlinkURL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHyperlinkURL() {
+ return hyperlinkURL;
+ }
+
+ /**
+ * Sets the value of the hyperlinkURL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHyperlinkURL(String value) {
+ this.hyperlinkURL = value;
+ }
+
+ /**
+ * Gets the value of the hyperlinkType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHyperlinkType() {
+ return hyperlinkType;
+ }
+
+ /**
+ * Sets the value of the hyperlinkType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHyperlinkType(String value) {
+ this.hyperlinkType = value;
+ }
+
+ /**
+ * Gets the value of the actionImg property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getActionImg() {
+ return actionImg;
+ }
+
+ /**
+ * Sets the value of the actionImg property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setActionImg(String value) {
+ this.actionImg = value;
+ }
+
+ /**
+ * Gets the value of the groupByPos property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getGroupByPos() {
+ return groupByPos;
+ }
+
+ /**
+ * Sets the value of the groupByPos property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setGroupByPos(Integer value) {
+ this.groupByPos = value;
+ }
+
+ /**
+ * Gets the value of the subTotalCustomText property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSubTotalCustomText() {
+ return subTotalCustomText;
+ }
+
+ /**
+ * Sets the value of the subTotalCustomText property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSubTotalCustomText(String value) {
+ this.subTotalCustomText = value;
+ }
+
+ /**
+ * Gets the value of the hideRepeatedKey property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isHideRepeatedKey() {
+ return hideRepeatedKey;
+ }
+
+ /**
+ * Sets the value of the hideRepeatedKey property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setHideRepeatedKey(Boolean value) {
+ this.hideRepeatedKey = value;
+ }
+
+ /**
+ * Gets the value of the colFormat property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColFormat() {
+ return colFormat;
+ }
+
+ /**
+ * Sets the value of the colFormat property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColFormat(String value) {
+ this.colFormat = value;
+ }
+
+ /**
+ * Gets the value of the groupBreak property.
+ *
+ */
+ public boolean isGroupBreak() {
+ return groupBreak;
+ }
+
+ /**
+ * Sets the value of the groupBreak property.
+ *
+ */
+ public void setGroupBreak(boolean value) {
+ this.groupBreak = value;
+ }
+
+ /**
+ * Gets the value of the orderBySeq property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getOrderBySeq() {
+ return orderBySeq;
+ }
+
+ /**
+ * Sets the value of the orderBySeq property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setOrderBySeq(Integer value) {
+ this.orderBySeq = value;
+ }
+
+ /**
+ * Gets the value of the orderByAscDesc property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getOrderByAscDesc() {
+ return orderByAscDesc;
+ }
+
+ /**
+ * Sets the value of the orderByAscDesc property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setOrderByAscDesc(String value) {
+ this.orderByAscDesc = value;
+ }
+
+ /**
+ * Gets the value of the displayTotal property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayTotal() {
+ return displayTotal;
+ }
+
+ /**
+ * Sets the value of the displayTotal property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayTotal(String value) {
+ this.displayTotal = value;
+ }
+
+ /**
+ * Gets the value of the colOnChart property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColOnChart() {
+ return colOnChart;
+ }
+
+ /**
+ * Sets the value of the colOnChart property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColOnChart(String value) {
+ this.colOnChart = value;
+ }
+
+ /**
+ * Gets the value of the chartSeq property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getChartSeq() {
+ return chartSeq;
+ }
+
+ /**
+ * Sets the value of the chartSeq property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setChartSeq(Integer value) {
+ this.chartSeq = value;
+ }
+
+ /**
+ * Gets the value of the chartColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartColor() {
+ return chartColor;
+ }
+
+ /**
+ * Sets the value of the chartColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartColor(String value) {
+ this.chartColor = value;
+ }
+
+ /**
+ * Gets the value of the chartLineType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartLineType() {
+ return chartLineType;
+ }
+
+ /**
+ * Sets the value of the chartLineType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartLineType(String value) {
+ this.chartLineType = value;
+ }
+
+ /**
+ * Gets the value of the chartSeries property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isChartSeries() {
+ return chartSeries;
+ }
+
+ /**
+ * Sets the value of the chartSeries property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setChartSeries(Boolean value) {
+ this.chartSeries = value;
+ }
+
+ /**
+ * Gets the value of the isRangeAxisFilled property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isIsRangeAxisFilled() {
+ return isRangeAxisFilled;
+ }
+
+ /**
+ * Sets the value of the isRangeAxisFilled property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setIsRangeAxisFilled(Boolean value) {
+ this.isRangeAxisFilled = value;
+ }
+
+ /**
+ * Gets the value of the isSortable property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isIsSortable() {
+ return isSortable;
+ }
+
+ /**
+ * Sets the value of the isSortable property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setIsSortable(Boolean value) {
+ this.isSortable = value;
+ }
+
+ /**
+ * Gets the value of the createInNewChart property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isCreateInNewChart() {
+ return createInNewChart;
+ }
+
+ /**
+ * Sets the value of the createInNewChart property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setCreateInNewChart(Boolean value) {
+ this.createInNewChart = value;
+ }
+
+ /**
+ * Gets the value of the drillDownType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillDownType() {
+ return drillDownType;
+ }
+
+ /**
+ * Sets the value of the drillDownType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillDownType(String value) {
+ this.drillDownType = value;
+ }
+
+ /**
+ * Gets the value of the drillinPoPUp property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isDrillinPoPUp() {
+ return drillinPoPUp;
+ }
+
+ /**
+ * Sets the value of the drillinPoPUp property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setDrillinPoPUp(Boolean value) {
+ this.drillinPoPUp = value;
+ }
+
+ /**
+ * Gets the value of the drillDownURL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillDownURL() {
+ return drillDownURL;
+ }
+
+ /**
+ * Sets the value of the drillDownURL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillDownURL(String value) {
+ this.drillDownURL = value;
+ }
+
+ /**
+ * Gets the value of the drillDownParams property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDrillDownParams() {
+ return drillDownParams;
+ }
+
+ /**
+ * Sets the value of the drillDownParams property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDrillDownParams(String value) {
+ this.drillDownParams = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+ /**
+ * Gets the value of the colFilterList property.
+ *
+ * @return
+ * possible object is
+ * {@link ColFilterList }
+ *
+ */
+ public ColFilterList getColFilterList() {
+ return colFilterList;
+ }
+
+ /**
+ * Sets the value of the colFilterList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link ColFilterList }
+ *
+ */
+ public void setColFilterList(ColFilterList value) {
+ this.colFilterList = value;
+ }
+
+ /**
+ * Gets the value of the semaphoreId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSemaphoreId() {
+ return semaphoreId;
+ }
+
+ /**
+ * Sets the value of the semaphoreId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSemaphoreId(String value) {
+ this.semaphoreId = value;
+ }
+
+ /**
+ * Gets the value of the dbColType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDbColType() {
+ return dbColType;
+ }
+
+ /**
+ * Sets the value of the dbColType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDbColType(String value) {
+ this.dbColType = value;
+ }
+
+ /**
+ * Gets the value of the chartGroup property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getChartGroup() {
+ return chartGroup;
+ }
+
+ /**
+ * Sets the value of the chartGroup property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setChartGroup(String value) {
+ this.chartGroup = value;
+ }
+
+ /**
+ * Gets the value of the yAxis property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getYAxis() {
+ return yAxis;
+ }
+
+ /**
+ * Sets the value of the yAxis property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setYAxis(String value) {
+ this.yAxis = value;
+ }
+
+ /**
+ * Gets the value of the dependsOnFormField property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDependsOnFormField() {
+ return dependsOnFormField;
+ }
+
+ /**
+ * Sets the value of the dependsOnFormField property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDependsOnFormField(String value) {
+ this.dependsOnFormField = value;
+ }
+
+ /**
+ * Gets the value of the nowrap property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getNowrap() {
+ return nowrap;
+ }
+
+ /**
+ * Sets the value of the nowrap property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setNowrap(String value) {
+ this.nowrap = value;
+ }
+
+ /**
+ * Gets the value of the indentation property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getIndentation() {
+ return indentation;
+ }
+
+ /**
+ * Sets the value of the indentation property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setIndentation(Integer value) {
+ this.indentation = value;
+ }
+
+ /**
+ * Gets the value of the enhancedPagination property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isEnhancedPagination() {
+ return enhancedPagination;
+ }
+
+ /**
+ * Sets the value of the enhancedPagination property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setEnhancedPagination(Boolean value) {
+ this.enhancedPagination = value;
+ }
+
+ /**
+ * Gets the value of the level property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getLevel() {
+ return level;
+ }
+
+ /**
+ * Sets the value of the level property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setLevel(Integer value) {
+ this.level = value;
+ }
+
+ /**
+ * Gets the value of the start property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getStart() {
+ return start;
+ }
+
+ /**
+ * Sets the value of the start property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setStart(Integer value) {
+ this.start = value;
+ }
+
+ /**
+ * Gets the value of the colspan property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getColspan() {
+ return colspan;
+ }
+
+ /**
+ * Sets the value of the colspan property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setColspan(Integer value) {
+ this.colspan = value;
+ }
+
+ /**
+ * Gets the value of the dataMiningCol property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataMiningCol() {
+ return dataMiningCol;
+ }
+
+ /**
+ * Sets the value of the dataMiningCol property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataMiningCol(String value) {
+ this.dataMiningCol = value;
+ }
+
+ /**
+ * Gets the value of the colId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColId() {
+ return colId;
+ }
+
+ /**
+ * Sets the value of the colId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColId(String value) {
+ this.colId = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceList.java
new file mode 100644
index 00000000..1e39348a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceList.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DataSourceList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DataSourceList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="dataSource" type="{}DataSourceType" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DataSourceList", propOrder = {
+ "dataSource"
+})
+public class DataSourceList {
+
+ protected List<DataSourceType> dataSource;
+
+ /**
+ * Gets the value of the dataSource property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the dataSource property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getDataSource().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link DataSourceType }
+ *
+ *
+ */
+ public List<DataSourceType> getDataSource() {
+ if (dataSource == null) {
+ dataSource = new ArrayList<DataSourceType>();
+ }
+ return this.dataSource;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceType.java
new file mode 100644
index 00000000..08b066c8
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataSourceType.java
@@ -0,0 +1,281 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DataSourceType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DataSourceType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="tableName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="tablePK" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="displayName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="refTableId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="refDefinition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;element name="dataColumnList" type="{}DataColumnList"/>
+ * &lt;/sequence>
+ * &lt;attribute name="tableId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DataSourceType", propOrder = {
+ "tableName",
+ "tablePK",
+ "displayName",
+ "refTableId",
+ "refDefinition",
+ "comment",
+ "dataColumnList"
+})
+public class DataSourceType {
+
+ @XmlElement(required = true)
+ protected String tableName;
+ @XmlElement(required = true)
+ protected String tablePK;
+ @XmlElement(required = true)
+ protected String displayName;
+ protected String refTableId;
+ protected String refDefinition;
+ protected String comment;
+ @XmlElement(required = true)
+ protected DataColumnList dataColumnList;
+ @XmlAttribute(name = "tableId")
+ protected String tableId;
+
+ /**
+ * Gets the value of the tableName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTableName() {
+ return tableName;
+ }
+
+ /**
+ * Sets the value of the tableName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTableName(String value) {
+ this.tableName = value;
+ }
+
+ /**
+ * Gets the value of the tablePK property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTablePK() {
+ return tablePK;
+ }
+
+ /**
+ * Sets the value of the tablePK property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTablePK(String value) {
+ this.tablePK = value;
+ }
+
+ /**
+ * Gets the value of the displayName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDisplayName() {
+ return displayName;
+ }
+
+ /**
+ * Sets the value of the displayName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDisplayName(String value) {
+ this.displayName = value;
+ }
+
+ /**
+ * Gets the value of the refTableId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getRefTableId() {
+ return refTableId;
+ }
+
+ /**
+ * Sets the value of the refTableId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setRefTableId(String value) {
+ this.refTableId = value;
+ }
+
+ /**
+ * Gets the value of the refDefinition property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getRefDefinition() {
+ return refDefinition;
+ }
+
+ /**
+ * Sets the value of the refDefinition property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setRefDefinition(String value) {
+ this.refDefinition = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+ /**
+ * Gets the value of the dataColumnList property.
+ *
+ * @return
+ * possible object is
+ * {@link DataColumnList }
+ *
+ */
+ public DataColumnList getDataColumnList() {
+ return dataColumnList;
+ }
+
+ /**
+ * Sets the value of the dataColumnList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link DataColumnList }
+ *
+ */
+ public void setDataColumnList(DataColumnList value) {
+ this.dataColumnList = value;
+ }
+
+ /**
+ * Gets the value of the tableId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTableId() {
+ return tableId;
+ }
+
+ /**
+ * Sets the value of the tableId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTableId(String value) {
+ this.tableId = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataminingOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataminingOptions.java
new file mode 100644
index 00000000..c26bce7c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/DataminingOptions.java
@@ -0,0 +1,167 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for DataminingOptions complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="DataminingOptions">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="classifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="timeAttribute" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="timeformat" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="forecastingUnits" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "DataminingOptions", propOrder = {
+ "classifier",
+ "timeAttribute",
+ "timeformat",
+ "forecastingUnits"
+})
+public class DataminingOptions {
+
+ protected String classifier;
+ protected String timeAttribute;
+ protected String timeformat;
+ protected String forecastingUnits;
+
+ /**
+ * Gets the value of the classifier property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getClassifier() {
+ return classifier;
+ }
+
+ /**
+ * Sets the value of the classifier property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setClassifier(String value) {
+ this.classifier = value;
+ }
+
+ /**
+ * Gets the value of the timeAttribute property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTimeAttribute() {
+ return timeAttribute;
+ }
+
+ /**
+ * Sets the value of the timeAttribute property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTimeAttribute(String value) {
+ this.timeAttribute = value;
+ }
+
+ /**
+ * Gets the value of the timeformat property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTimeformat() {
+ return timeformat;
+ }
+
+ /**
+ * Sets the value of the timeformat property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTimeformat(String value) {
+ this.timeformat = value;
+ }
+
+ /**
+ * Gets the value of the forecastingUnits property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getForecastingUnits() {
+ return forecastingUnits;
+ }
+
+ /**
+ * Sets the value of the forecastingUnits property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setForecastingUnits(String value) {
+ this.forecastingUnits = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldList.java
new file mode 100644
index 00000000..104ee1c1
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldList.java
@@ -0,0 +1,121 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for FormFieldList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="FormFieldList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="formField" type="{}FormFieldType" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FormFieldList", propOrder = {
+ "formField",
+ "comment"
+})
+public class FormFieldList {
+
+ protected List<FormFieldType> formField;
+ protected String comment;
+
+ /**
+ * Gets the value of the formField property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the formField property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getFormField().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link FormFieldType }
+ *
+ *
+ */
+ public List<FormFieldType> getFormField() {
+ if (formField == null) {
+ formField = new ArrayList<FormFieldType>();
+ }
+ return this.formField;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldType.java
new file mode 100644
index 00000000..77922c7a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormFieldType.java
@@ -0,0 +1,610 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlSchemaType;
+import javax.xml.bind.annotation.XmlType;
+import javax.xml.datatype.XMLGregorianCalendar;
+
+
+/**
+ * <p>Java class for FormFieldType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="FormFieldType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="colId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="fieldName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="fieldType" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="visible" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="validationType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="mandatory" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="defaultValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="orderBySeq" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="fieldSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="fieldDefaultSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="rangeStartDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
+ * &lt;element name="rangeEndDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/>
+ * &lt;element name="rangeStartDateSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="rangeEndDateSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;element name="predefinedValueList" type="{}PredefinedValueList" minOccurs="0"/>
+ * &lt;element name="dependsOn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="groupFormField" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="multiSelectListSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="fieldId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FormFieldType", propOrder = {
+ "colId",
+ "fieldName",
+ "fieldType",
+ "visible",
+ "validationType",
+ "mandatory",
+ "defaultValue",
+ "orderBySeq",
+ "fieldSQL",
+ "fieldDefaultSQL",
+ "rangeStartDate",
+ "rangeEndDate",
+ "rangeStartDateSQL",
+ "rangeEndDateSQL",
+ "comment",
+ "predefinedValueList",
+ "dependsOn",
+ "groupFormField",
+ "multiSelectListSize"
+})
+public class FormFieldType {
+
+ @XmlElement(required = true)
+ protected String colId;
+ @XmlElement(required = true)
+ protected String fieldName;
+ @XmlElement(required = true)
+ protected String fieldType;
+ protected String visible;
+ protected String validationType;
+ protected String mandatory;
+ protected String defaultValue;
+ protected Integer orderBySeq;
+ protected String fieldSQL;
+ protected String fieldDefaultSQL;
+ @XmlSchemaType(name = "date")
+ protected XMLGregorianCalendar rangeStartDate;
+ @XmlSchemaType(name = "date")
+ protected XMLGregorianCalendar rangeEndDate;
+ protected String rangeStartDateSQL;
+ protected String rangeEndDateSQL;
+ protected String comment;
+ protected PredefinedValueList predefinedValueList;
+ protected String dependsOn;
+ @XmlElement(defaultValue = "false")
+ protected Boolean groupFormField;
+ @XmlElement(defaultValue = "4")
+ protected String multiSelectListSize;
+ @XmlAttribute(name = "fieldId")
+ protected String fieldId;
+
+ /**
+ * Gets the value of the colId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColId() {
+ return colId;
+ }
+
+ /**
+ * Sets the value of the colId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColId(String value) {
+ this.colId = value;
+ }
+
+ /**
+ * Gets the value of the fieldName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFieldName() {
+ return fieldName;
+ }
+
+ /**
+ * Sets the value of the fieldName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFieldName(String value) {
+ this.fieldName = value;
+ }
+
+ /**
+ * Gets the value of the fieldType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFieldType() {
+ return fieldType;
+ }
+
+ /**
+ * Sets the value of the fieldType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFieldType(String value) {
+ this.fieldType = value;
+ }
+
+ /**
+ * Gets the value of the visible property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getVisible() {
+ return visible;
+ }
+
+ /**
+ * Sets the value of the visible property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setVisible(String value) {
+ this.visible = value;
+ }
+
+ /**
+ * Gets the value of the validationType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getValidationType() {
+ return validationType;
+ }
+
+ /**
+ * Sets the value of the validationType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setValidationType(String value) {
+ this.validationType = value;
+ }
+
+ /**
+ * Gets the value of the mandatory property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMandatory() {
+ return mandatory;
+ }
+
+ /**
+ * Sets the value of the mandatory property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMandatory(String value) {
+ this.mandatory = value;
+ }
+
+ /**
+ * Gets the value of the defaultValue property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ /**
+ * Sets the value of the defaultValue property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDefaultValue(String value) {
+ this.defaultValue = value;
+ }
+
+ /**
+ * Gets the value of the orderBySeq property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getOrderBySeq() {
+ return orderBySeq;
+ }
+
+ /**
+ * Sets the value of the orderBySeq property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setOrderBySeq(Integer value) {
+ this.orderBySeq = value;
+ }
+
+ /**
+ * Gets the value of the fieldSQL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFieldSQL() {
+ return fieldSQL;
+ }
+
+ /**
+ * Sets the value of the fieldSQL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFieldSQL(String value) {
+ this.fieldSQL = value;
+ }
+
+ /**
+ * Gets the value of the fieldDefaultSQL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFieldDefaultSQL() {
+ return fieldDefaultSQL;
+ }
+
+ /**
+ * Sets the value of the fieldDefaultSQL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFieldDefaultSQL(String value) {
+ this.fieldDefaultSQL = value;
+ }
+
+ /**
+ * Gets the value of the rangeStartDate property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getRangeStartDate() {
+ return rangeStartDate;
+ }
+
+ /**
+ * Sets the value of the rangeStartDate property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setRangeStartDate(XMLGregorianCalendar value) {
+ this.rangeStartDate = value;
+ }
+
+ /**
+ * Gets the value of the rangeEndDate property.
+ *
+ * @return
+ * possible object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public XMLGregorianCalendar getRangeEndDate() {
+ return rangeEndDate;
+ }
+
+ /**
+ * Sets the value of the rangeEndDate property.
+ *
+ * @param value
+ * allowed object is
+ * {@link XMLGregorianCalendar }
+ *
+ */
+ public void setRangeEndDate(XMLGregorianCalendar value) {
+ this.rangeEndDate = value;
+ }
+
+ /**
+ * Gets the value of the rangeStartDateSQL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getRangeStartDateSQL() {
+ return rangeStartDateSQL;
+ }
+
+ /**
+ * Sets the value of the rangeStartDateSQL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setRangeStartDateSQL(String value) {
+ this.rangeStartDateSQL = value;
+ }
+
+ /**
+ * Gets the value of the rangeEndDateSQL property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getRangeEndDateSQL() {
+ return rangeEndDateSQL;
+ }
+
+ /**
+ * Sets the value of the rangeEndDateSQL property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setRangeEndDateSQL(String value) {
+ this.rangeEndDateSQL = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+ /**
+ * Gets the value of the predefinedValueList property.
+ *
+ * @return
+ * possible object is
+ * {@link PredefinedValueList }
+ *
+ */
+ public PredefinedValueList getPredefinedValueList() {
+ return predefinedValueList;
+ }
+
+ /**
+ * Sets the value of the predefinedValueList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link PredefinedValueList }
+ *
+ */
+ public void setPredefinedValueList(PredefinedValueList value) {
+ this.predefinedValueList = value;
+ }
+
+ /**
+ * Gets the value of the dependsOn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDependsOn() {
+ return dependsOn;
+ }
+
+ /**
+ * Sets the value of the dependsOn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDependsOn(String value) {
+ this.dependsOn = value;
+ }
+
+ /**
+ * Gets the value of the groupFormField property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isGroupFormField() {
+ return groupFormField;
+ }
+
+ /**
+ * Sets the value of the groupFormField property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setGroupFormField(Boolean value) {
+ this.groupFormField = value;
+ }
+
+ /**
+ * Gets the value of the multiSelectListSize property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMultiSelectListSize() {
+ return multiSelectListSize;
+ }
+
+ /**
+ * Sets the value of the multiSelectListSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMultiSelectListSize(String value) {
+ this.multiSelectListSize = value;
+ }
+
+ /**
+ * Gets the value of the fieldId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFieldId() {
+ return fieldId;
+ }
+
+ /**
+ * Sets the value of the fieldId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFieldId(String value) {
+ this.fieldId = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatList.java
new file mode 100644
index 00000000..aa49a81c
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatList.java
@@ -0,0 +1,96 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for FormatList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="FormatList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="format" type="{}FormatType" maxOccurs="unbounded"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FormatList", propOrder = {
+ "format"
+})
+public class FormatList {
+
+ @XmlElement(required = true)
+ protected List<FormatType> format;
+
+ /**
+ * Gets the value of the format property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the format property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getFormat().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link FormatType }
+ *
+ *
+ */
+ public List<FormatType> getFormat() {
+ if (format == null) {
+ format = new ArrayList<FormatType>();
+ }
+ return this.format;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatType.java
new file mode 100644
index 00000000..5c0abf8a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/FormatType.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.
+ * ================================================================================
+ */
+//
+// This file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for FormatType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="FormatType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="lessThanValue" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="expression" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="bold" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="italic" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="underline" type="{http://www.w3.org/2001/XMLSchema}boolean"/>
+ * &lt;element name="bgColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="fontColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="fontFace" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="fontSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="alignment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;attribute name="formatId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "FormatType", propOrder = {
+ "lessThanValue",
+ "expression",
+ "bold",
+ "italic",
+ "underline",
+ "bgColor",
+ "fontColor",
+ "fontFace",
+ "fontSize",
+ "alignment",
+ "comment"
+})
+public class FormatType {
+
+ @XmlElement(required = true)
+ protected String lessThanValue;
+ @XmlElement(required = true)
+ protected String expression;
+ @XmlElement(defaultValue = "false")
+ protected boolean bold;
+ @XmlElement(defaultValue = "false")
+ protected boolean italic;
+ @XmlElement(defaultValue = "false")
+ protected boolean underline;
+ protected String bgColor;
+ protected String fontColor;
+ protected String fontFace;
+ protected String fontSize;
+ protected String alignment;
+ protected String comment;
+ @XmlAttribute(name = "formatId")
+ protected String formatId;
+
+ /**
+ * Gets the value of the lessThanValue property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLessThanValue() {
+ return lessThanValue;
+ }
+
+ /**
+ * Sets the value of the lessThanValue property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLessThanValue(String value) {
+ this.lessThanValue = value;
+ }
+
+ /**
+ * Gets the value of the expression property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getExpression() {
+ return expression;
+ }
+
+ /**
+ * Sets the value of the expression property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setExpression(String value) {
+ this.expression = value;
+ }
+
+ /**
+ * Gets the value of the bold property.
+ *
+ */
+ public boolean isBold() {
+ return bold;
+ }
+
+ /**
+ * Sets the value of the bold property.
+ *
+ */
+ public void setBold(boolean value) {
+ this.bold = value;
+ }
+
+ /**
+ * Gets the value of the italic property.
+ *
+ */
+ public boolean isItalic() {
+ return italic;
+ }
+
+ /**
+ * Sets the value of the italic property.
+ *
+ */
+ public void setItalic(boolean value) {
+ this.italic = value;
+ }
+
+ /**
+ * Gets the value of the underline property.
+ *
+ */
+ public boolean isUnderline() {
+ return underline;
+ }
+
+ /**
+ * Sets the value of the underline property.
+ *
+ */
+ public void setUnderline(boolean value) {
+ this.underline = value;
+ }
+
+ /**
+ * Gets the value of the bgColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getBgColor() {
+ return bgColor;
+ }
+
+ /**
+ * Sets the value of the bgColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setBgColor(String value) {
+ this.bgColor = value;
+ }
+
+ /**
+ * Gets the value of the fontColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFontColor() {
+ return fontColor;
+ }
+
+ /**
+ * Sets the value of the fontColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFontColor(String value) {
+ this.fontColor = value;
+ }
+
+ /**
+ * Gets the value of the fontFace property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFontFace() {
+ return fontFace;
+ }
+
+ /**
+ * Sets the value of the fontFace property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFontFace(String value) {
+ this.fontFace = value;
+ }
+
+ /**
+ * Gets the value of the fontSize property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFontSize() {
+ return fontSize;
+ }
+
+ /**
+ * Sets the value of the fontSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFontSize(String value) {
+ this.fontSize = value;
+ }
+
+ /**
+ * Gets the value of the alignment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAlignment() {
+ return alignment;
+ }
+
+ /**
+ * Sets the value of the alignment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAlignment(String value) {
+ this.alignment = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+ /**
+ * Gets the value of the formatId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFormatId() {
+ return formatId;
+ }
+
+ /**
+ * Sets the value of the formatId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFormatId(String value) {
+ this.formatId = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptItemType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptItemType.java
new file mode 100644
index 00000000..102e3fc5
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptItemType.java
@@ -0,0 +1,144 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for JavascriptItemType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="JavascriptItemType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="fieldId" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="callText" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "JavascriptItemType", propOrder = {
+ "id",
+ "fieldId",
+ "callText"
+})
+public class JavascriptItemType {
+
+ @XmlElement(required = true)
+ protected String id;
+ @XmlElement(required = true)
+ protected String fieldId;
+ @XmlElement(required = true)
+ protected String callText;
+
+ /**
+ * Gets the value of the id property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getId() {
+ return id;
+ }
+
+ /**
+ * Sets the value of the id property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setId(String value) {
+ this.id = value;
+ }
+
+ /**
+ * Gets the value of the fieldId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getFieldId() {
+ return fieldId;
+ }
+
+ /**
+ * Sets the value of the fieldId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setFieldId(String value) {
+ this.fieldId = value;
+ }
+
+ /**
+ * Gets the value of the callText property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getCallText() {
+ return callText;
+ }
+
+ /**
+ * Sets the value of the callText property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setCallText(String value) {
+ this.callText = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptList.java
new file mode 100644
index 00000000..9c8cea79
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/JavascriptList.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for JavascriptList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="JavascriptList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="javascriptItem" type="{}JavascriptItemType" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "JavascriptList", propOrder = {
+ "javascriptItem"
+})
+public class JavascriptList {
+
+ protected List<JavascriptItemType> javascriptItem;
+
+ /**
+ * Gets the value of the javascriptItem property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the javascriptItem property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getJavascriptItem().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link JavascriptItemType }
+ *
+ *
+ */
+ public List<JavascriptItemType> getJavascriptItem() {
+ if (javascriptItem == null) {
+ javascriptItem = new ArrayList<JavascriptItemType>();
+ }
+ return this.javascriptItem;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Marker.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Marker.java
new file mode 100644
index 00000000..7c4d784a
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Marker.java
@@ -0,0 +1,167 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for Marker complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="Marker">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="markerColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dataHeader" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="addressColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dataColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "Marker", propOrder = {
+ "markerColor",
+ "dataHeader",
+ "addressColumn",
+ "dataColumn"
+})
+public class Marker {
+
+ protected String markerColor;
+ protected String dataHeader;
+ protected String addressColumn;
+ protected String dataColumn;
+
+ /**
+ * Gets the value of the markerColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMarkerColor() {
+ return markerColor;
+ }
+
+ /**
+ * Sets the value of the markerColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMarkerColor(String value) {
+ this.markerColor = value;
+ }
+
+ /**
+ * Gets the value of the dataHeader property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataHeader() {
+ return dataHeader;
+ }
+
+ /**
+ * Sets the value of the dataHeader property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataHeader(String value) {
+ this.dataHeader = value;
+ }
+
+ /**
+ * Gets the value of the addressColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAddressColumn() {
+ return addressColumn;
+ }
+
+ /**
+ * Sets the value of the addressColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAddressColumn(String value) {
+ this.addressColumn = value;
+ }
+
+ /**
+ * Gets the value of the dataColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataColumn() {
+ return dataColumn;
+ }
+
+ /**
+ * Sets the value of the dataColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataColumn(String value) {
+ this.dataColumn = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ObjectFactory.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ObjectFactory.java
new file mode 100644
index 00000000..5515cd23
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ObjectFactory.java
@@ -0,0 +1,305 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.annotation.XmlElementDecl;
+import javax.xml.bind.annotation.XmlRegistry;
+import javax.xml.namespace.QName;
+
+
+/**
+ * This object contains factory methods for each
+ * Java content interface and Java element interface
+ * generated in the org.openecomp.portalsdk.analytics.xmlobj package.
+ * <p>An ObjectFactory allows you to programatically
+ * construct new instances of the Java representation
+ * for XML content. The Java representation of XML
+ * content can consist of schema derived interfaces
+ * and classes representing the binding of schema
+ * type definitions, element declarations and model
+ * groups. Factory methods for each of these are
+ * provided in this class.
+ *
+ */
+@XmlRegistry
+public class ObjectFactory {
+
+ private final static QName _CustomReport_QNAME = new QName("", "customReport");
+ private final static QName _Comment_QNAME = new QName("", "comment");
+
+ /**
+ * Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: org.openecomp.portalsdk.analytics.xmlobj
+ *
+ */
+ public ObjectFactory() {
+ }
+
+ /**
+ * Create an instance of {@link CustomReportType }
+ *
+ */
+ public CustomReportType createCustomReportType() {
+ return new CustomReportType();
+ }
+
+ /**
+ * Create an instance of {@link ChartAdditionalOptions }
+ *
+ */
+ public ChartAdditionalOptions createChartAdditionalOptions() {
+ return new ChartAdditionalOptions();
+ }
+
+ /**
+ * Create an instance of {@link DataminingOptions }
+ *
+ */
+ public DataminingOptions createDataminingOptions() {
+ return new DataminingOptions();
+ }
+
+ /**
+ * Create an instance of {@link FormFieldType }
+ *
+ */
+ public FormFieldType createFormFieldType() {
+ return new FormFieldType();
+ }
+
+ /**
+ * Create an instance of {@link PredefinedValueList }
+ *
+ */
+ public PredefinedValueList createPredefinedValueList() {
+ return new PredefinedValueList();
+ }
+
+ /**
+ * Create an instance of {@link DashboardEditorReport }
+ *
+ */
+ public DashboardEditorReport createDashboardEditorReport() {
+ return new DashboardEditorReport();
+ }
+
+ /**
+ * Create an instance of {@link DataSourceList }
+ *
+ */
+ public DataSourceList createDataSourceList() {
+ return new DataSourceList();
+ }
+
+ /**
+ * Create an instance of {@link DashboardReports }
+ *
+ */
+ public DashboardReports createDashboardReports() {
+ return new DashboardReports();
+ }
+
+ /**
+ * Create an instance of {@link ReportMap }
+ *
+ */
+ public ReportMap createReportMap() {
+ return new ReportMap();
+ }
+
+ /**
+ * Create an instance of {@link FormatList }
+ *
+ */
+ public FormatList createFormatList() {
+ return new FormatList();
+ }
+
+ /**
+ * Create an instance of {@link JavascriptList }
+ *
+ */
+ public JavascriptList createJavascriptList() {
+ return new JavascriptList();
+ }
+
+ /**
+ * Create an instance of {@link JavascriptItemType }
+ *
+ */
+ public JavascriptItemType createJavascriptItemType() {
+ return new JavascriptItemType();
+ }
+
+ /**
+ * Create an instance of {@link DataColumnType }
+ *
+ */
+ public DataColumnType createDataColumnType() {
+ return new DataColumnType();
+ }
+
+ /**
+ * Create an instance of {@link DataSourceType }
+ *
+ */
+ public DataSourceType createDataSourceType() {
+ return new DataSourceType();
+ }
+
+ /**
+ * Create an instance of {@link DashboardEditorList }
+ *
+ */
+ public DashboardEditorList createDashboardEditorList() {
+ return new DashboardEditorList();
+ }
+
+ /**
+ * Create an instance of {@link SemaphoreList }
+ *
+ */
+ public SemaphoreList createSemaphoreList() {
+ return new SemaphoreList();
+ }
+
+ /**
+ * Create an instance of {@link ColFilterType }
+ *
+ */
+ public ColFilterType createColFilterType() {
+ return new ColFilterType();
+ }
+
+ /**
+ * Create an instance of {@link ChartDrillOptions }
+ *
+ */
+ public ChartDrillOptions createChartDrillOptions() {
+ return new ChartDrillOptions();
+ }
+
+ /**
+ * Create an instance of {@link DashboardReportsNew }
+ *
+ */
+ public DashboardReportsNew createDashboardReportsNew() {
+ return new DashboardReportsNew();
+ }
+
+ /**
+ * Create an instance of {@link ChartDrillFormfield }
+ *
+ */
+ public ChartDrillFormfield createChartDrillFormfield() {
+ return new ChartDrillFormfield();
+ }
+
+ /**
+ * Create an instance of {@link PDFAdditionalOptions }
+ *
+ */
+ public PDFAdditionalOptions createPDFAdditionalOptions() {
+ return new PDFAdditionalOptions();
+ }
+
+ /**
+ * Create an instance of {@link Reports }
+ *
+ */
+ public Reports createReports() {
+ return new Reports();
+ }
+
+ /**
+ * Create an instance of {@link Marker }
+ *
+ */
+ public Marker createMarker() {
+ return new Marker();
+ }
+
+ /**
+ * Create an instance of {@link FormatType }
+ *
+ */
+ public FormatType createFormatType() {
+ return new FormatType();
+ }
+
+ /**
+ * Create an instance of {@link DataColumnList }
+ *
+ */
+ public DataColumnList createDataColumnList() {
+ return new DataColumnList();
+ }
+
+ /**
+ * Create an instance of {@link FormFieldList }
+ *
+ */
+ public FormFieldList createFormFieldList() {
+ return new FormFieldList();
+ }
+
+ /**
+ * Create an instance of {@link SemaphoreType }
+ *
+ */
+ public SemaphoreType createSemaphoreType() {
+ return new SemaphoreType();
+ }
+
+ /**
+ * Create an instance of {@link ColFilterList }
+ *
+ */
+ public ColFilterList createColFilterList() {
+ return new ColFilterList();
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link CustomReportType }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "", name = "customReport")
+ public JAXBElement<CustomReportType> createCustomReport(CustomReportType value) {
+ return new JAXBElement<CustomReportType>(_CustomReport_QNAME, CustomReportType.class, null, value);
+ }
+
+ /**
+ * Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
+ *
+ */
+ @XmlElementDecl(namespace = "", name = "comment")
+ public JAXBElement<String> createComment(String value) {
+ return new JAXBElement<String>(_Comment_QNAME, String.class, null, value);
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PDFAdditionalOptions.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PDFAdditionalOptions.java
new file mode 100644
index 00000000..78d727c2
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PDFAdditionalOptions.java
@@ -0,0 +1,340 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for PDFAdditionalOptions complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="PDFAdditionalOptions">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="PDF_font" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="PDF_fontSize" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="PDF_orientation" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="PDF_logo1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="PDF_logo2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="PDF_logo1Size" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="PDF_logo2Size" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/>
+ * &lt;element name="PDF_coverPage" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/>
+ * &lt;element name="PDF_footer1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="PDF_footer2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PDFAdditionalOptions", propOrder = {
+ "pdfFont",
+ "pdfFontSize",
+ "pdfOrientation",
+ "pdfLogo1",
+ "pdfLogo2",
+ "pdfLogo1Size",
+ "pdfLogo2Size",
+ "pdfCoverPage",
+ "pdfFooter1",
+ "pdfFooter2"
+})
+public class PDFAdditionalOptions {
+
+ @XmlElement(name = "PDF_font")
+ protected String pdfFont;
+ @XmlElement(name = "PDF_fontSize")
+ protected Integer pdfFontSize;
+ @XmlElement(name = "PDF_orientation")
+ protected String pdfOrientation;
+ @XmlElement(name = "PDF_logo1")
+ protected String pdfLogo1;
+ @XmlElement(name = "PDF_logo2")
+ protected String pdfLogo2;
+ @XmlElement(name = "PDF_logo1Size")
+ protected Integer pdfLogo1Size;
+ @XmlElement(name = "PDF_logo2Size")
+ protected Integer pdfLogo2Size;
+ @XmlElement(name = "PDF_coverPage", defaultValue = "false")
+ protected Boolean pdfCoverPage;
+ @XmlElement(name = "PDF_footer1")
+ protected String pdfFooter1;
+ @XmlElement(name = "PDF_footer2")
+ protected String pdfFooter2;
+
+ /**
+ * Gets the value of the pdfFont property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPDFFont() {
+ return pdfFont;
+ }
+
+ /**
+ * Sets the value of the pdfFont property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPDFFont(String value) {
+ this.pdfFont = value;
+ }
+
+ /**
+ * Gets the value of the pdfFontSize property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getPDFFontSize() {
+ return pdfFontSize;
+ }
+
+ /**
+ * Sets the value of the pdfFontSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setPDFFontSize(Integer value) {
+ this.pdfFontSize = value;
+ }
+
+ /**
+ * Gets the value of the pdfOrientation property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPDFOrientation() {
+ return pdfOrientation;
+ }
+
+ /**
+ * Sets the value of the pdfOrientation property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPDFOrientation(String value) {
+ this.pdfOrientation = value;
+ }
+
+ /**
+ * Gets the value of the pdfLogo1 property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPDFLogo1() {
+ return pdfLogo1;
+ }
+
+ /**
+ * Sets the value of the pdfLogo1 property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPDFLogo1(String value) {
+ this.pdfLogo1 = value;
+ }
+
+ /**
+ * Gets the value of the pdfLogo2 property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPDFLogo2() {
+ return pdfLogo2;
+ }
+
+ /**
+ * Sets the value of the pdfLogo2 property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPDFLogo2(String value) {
+ this.pdfLogo2 = value;
+ }
+
+ /**
+ * Gets the value of the pdfLogo1Size property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getPDFLogo1Size() {
+ return pdfLogo1Size;
+ }
+
+ /**
+ * Sets the value of the pdfLogo1Size property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setPDFLogo1Size(Integer value) {
+ this.pdfLogo1Size = value;
+ }
+
+ /**
+ * Gets the value of the pdfLogo2Size property.
+ *
+ * @return
+ * possible object is
+ * {@link Integer }
+ *
+ */
+ public Integer getPDFLogo2Size() {
+ return pdfLogo2Size;
+ }
+
+ /**
+ * Sets the value of the pdfLogo2Size property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Integer }
+ *
+ */
+ public void setPDFLogo2Size(Integer value) {
+ this.pdfLogo2Size = value;
+ }
+
+ /**
+ * Gets the value of the pdfCoverPage property.
+ *
+ * @return
+ * possible object is
+ * {@link Boolean }
+ *
+ */
+ public Boolean isPDFCoverPage() {
+ return pdfCoverPage;
+ }
+
+ /**
+ * Sets the value of the pdfCoverPage property.
+ *
+ * @param value
+ * allowed object is
+ * {@link Boolean }
+ *
+ */
+ public void setPDFCoverPage(Boolean value) {
+ this.pdfCoverPage = value;
+ }
+
+ /**
+ * Gets the value of the pdfFooter1 property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPDFFooter1() {
+ return pdfFooter1;
+ }
+
+ /**
+ * Sets the value of the pdfFooter1 property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPDFFooter1(String value) {
+ this.pdfFooter1 = value;
+ }
+
+ /**
+ * Gets the value of the pdfFooter2 property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getPDFFooter2() {
+ return pdfFooter2;
+ }
+
+ /**
+ * Sets the value of the pdfFooter2 property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setPDFFooter2(String value) {
+ this.pdfFooter2 = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PredefinedValueList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PredefinedValueList.java
new file mode 100644
index 00000000..b008d566
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/PredefinedValueList.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for PredefinedValueList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="PredefinedValueList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="predefinedValue" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "PredefinedValueList", propOrder = {
+ "predefinedValue"
+})
+public class PredefinedValueList {
+
+ protected List<String> predefinedValue;
+
+ /**
+ * Gets the value of the predefinedValue property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the predefinedValue property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getPredefinedValue().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link String }
+ *
+ *
+ */
+ public List<String> getPredefinedValue() {
+ if (predefinedValue == null) {
+ predefinedValue = new ArrayList<String>();
+ }
+ return this.predefinedValue;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ReportMap.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ReportMap.java
new file mode 100644
index 00000000..c57ab581
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/ReportMap.java
@@ -0,0 +1,445 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for ReportMap complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="ReportMap">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="markerColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="useDefaultSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="height" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="width" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="isMapAllowedYN" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="addAddressInDataYN" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="addressColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="dataColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="defaultMapType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="latColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="longColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="colorColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="legendColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="markers" type="{}Marker" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "ReportMap", propOrder = {
+ "markerColor",
+ "useDefaultSize",
+ "height",
+ "width",
+ "isMapAllowedYN",
+ "addAddressInDataYN",
+ "addressColumn",
+ "dataColumn",
+ "defaultMapType",
+ "latColumn",
+ "longColumn",
+ "colorColumn",
+ "legendColumn",
+ "markers"
+})
+public class ReportMap {
+
+ protected String markerColor;
+ protected String useDefaultSize;
+ protected String height;
+ protected String width;
+ protected String isMapAllowedYN;
+ protected String addAddressInDataYN;
+ protected String addressColumn;
+ protected String dataColumn;
+ protected String defaultMapType;
+ protected String latColumn;
+ protected String longColumn;
+ protected String colorColumn;
+ protected String legendColumn;
+ protected List<Marker> markers;
+
+ /**
+ * Gets the value of the markerColor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getMarkerColor() {
+ return markerColor;
+ }
+
+ /**
+ * Sets the value of the markerColor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setMarkerColor(String value) {
+ this.markerColor = value;
+ }
+
+ /**
+ * Gets the value of the useDefaultSize property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getUseDefaultSize() {
+ return useDefaultSize;
+ }
+
+ /**
+ * Sets the value of the useDefaultSize property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setUseDefaultSize(String value) {
+ this.useDefaultSize = value;
+ }
+
+ /**
+ * Gets the value of the height property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getHeight() {
+ return height;
+ }
+
+ /**
+ * Sets the value of the height property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setHeight(String value) {
+ this.height = value;
+ }
+
+ /**
+ * Gets the value of the width property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getWidth() {
+ return width;
+ }
+
+ /**
+ * Sets the value of the width property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setWidth(String value) {
+ this.width = value;
+ }
+
+ /**
+ * Gets the value of the isMapAllowedYN property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getIsMapAllowedYN() {
+ return isMapAllowedYN;
+ }
+
+ /**
+ * Sets the value of the isMapAllowedYN property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setIsMapAllowedYN(String value) {
+ this.isMapAllowedYN = value;
+ }
+
+ /**
+ * Gets the value of the addAddressInDataYN property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAddAddressInDataYN() {
+ return addAddressInDataYN;
+ }
+
+ /**
+ * Sets the value of the addAddressInDataYN property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAddAddressInDataYN(String value) {
+ this.addAddressInDataYN = value;
+ }
+
+ /**
+ * Gets the value of the addressColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getAddressColumn() {
+ return addressColumn;
+ }
+
+ /**
+ * Sets the value of the addressColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setAddressColumn(String value) {
+ this.addressColumn = value;
+ }
+
+ /**
+ * Gets the value of the dataColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDataColumn() {
+ return dataColumn;
+ }
+
+ /**
+ * Sets the value of the dataColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDataColumn(String value) {
+ this.dataColumn = value;
+ }
+
+ /**
+ * Gets the value of the defaultMapType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getDefaultMapType() {
+ return defaultMapType;
+ }
+
+ /**
+ * Sets the value of the defaultMapType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setDefaultMapType(String value) {
+ this.defaultMapType = value;
+ }
+
+ /**
+ * Gets the value of the latColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLatColumn() {
+ return latColumn;
+ }
+
+ /**
+ * Sets the value of the latColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLatColumn(String value) {
+ this.latColumn = value;
+ }
+
+ /**
+ * Gets the value of the longColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLongColumn() {
+ return longColumn;
+ }
+
+ /**
+ * Sets the value of the longColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLongColumn(String value) {
+ this.longColumn = value;
+ }
+
+ /**
+ * Gets the value of the colorColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getColorColumn() {
+ return colorColumn;
+ }
+
+ /**
+ * Sets the value of the colorColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setColorColumn(String value) {
+ this.colorColumn = value;
+ }
+
+ /**
+ * Gets the value of the legendColumn property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getLegendColumn() {
+ return legendColumn;
+ }
+
+ /**
+ * Sets the value of the legendColumn property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setLegendColumn(String value) {
+ this.legendColumn = value;
+ }
+
+ /**
+ * Gets the value of the markers property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the markers property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getMarkers().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link Marker }
+ *
+ *
+ */
+ public List<Marker> getMarkers() {
+ if (markers == null) {
+ markers = new ArrayList<Marker>();
+ }
+ return this.markers;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Reports.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Reports.java
new file mode 100644
index 00000000..fdb833d0
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/Reports.java
@@ -0,0 +1,113 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for Reports complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="Reports">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="reportId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;element name="bgcolor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "Reports", propOrder = {
+ "reportId",
+ "bgcolor"
+})
+public class Reports {
+
+ protected String reportId;
+ protected String bgcolor;
+
+ /**
+ * Gets the value of the reportId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getReportId() {
+ return reportId;
+ }
+
+ /**
+ * Sets the value of the reportId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setReportId(String value) {
+ this.reportId = value;
+ }
+
+ /**
+ * Gets the value of the bgcolor property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getBgcolor() {
+ return bgcolor;
+ }
+
+ /**
+ * Sets the value of the bgcolor property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setBgcolor(String value) {
+ this.bgcolor = value;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreList.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreList.java
new file mode 100644
index 00000000..12c426d4
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreList.java
@@ -0,0 +1,94 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for SemaphoreList complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="SemaphoreList">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="semaphore" type="{}SemaphoreType" maxOccurs="unbounded" minOccurs="0"/>
+ * &lt;/sequence>
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SemaphoreList", propOrder = {
+ "semaphore"
+})
+public class SemaphoreList {
+
+ protected List<SemaphoreType> semaphore;
+
+ /**
+ * Gets the value of the semaphore property.
+ *
+ * <p>
+ * This accessor method returns a reference to the live list,
+ * not a snapshot. Therefore any modification you make to the
+ * returned list will be present inside the JAXB object.
+ * This is why there is not a <CODE>set</CODE> method for the semaphore property.
+ *
+ * <p>
+ * For example, to add a new item, do as follows:
+ * <pre>
+ * getSemaphore().add(newItem);
+ * </pre>
+ *
+ *
+ * <p>
+ * Objects of the following type(s) are allowed in the list
+ * {@link SemaphoreType }
+ *
+ *
+ */
+ public List<SemaphoreType> getSemaphore() {
+ if (semaphore == null) {
+ semaphore = new ArrayList<SemaphoreType>();
+ }
+ return this.semaphore;
+ }
+
+}
diff --git a/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreType.java b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreType.java
new file mode 100644
index 00000000..61323a58
--- /dev/null
+++ b/ecomp-sdk/sdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/xmlobj/SemaphoreType.java
@@ -0,0 +1,227 @@
+/*-
+ * ================================================================================
+ * 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 file was generated by the JavaTM Architecture for XML Binding(JAXB) Reference Implementation, v2.2.5-2
+// See <a href="http://java.sun.com/xml/jaxb">http://java.sun.com/xml/jaxb</a>
+// Any modifications to this file will be lost upon recompilation of the source schema.
+// Generated on: 2016.06.07 at 02:07:29 PM EDT
+//
+
+
+package org.openecomp.portalsdk.analytics.xmlobj;
+
+import javax.xml.bind.annotation.XmlAccessType;
+import javax.xml.bind.annotation.XmlAccessorType;
+import javax.xml.bind.annotation.XmlAttribute;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.bind.annotation.XmlType;
+
+
+/**
+ * <p>Java class for SemaphoreType complex type.
+ *
+ * <p>The following schema fragment specifies the expected content contained within this class.
+ *
+ * <pre>
+ * &lt;complexType name="SemaphoreType">
+ * &lt;complexContent>
+ * &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
+ * &lt;sequence>
+ * &lt;element name="semaphoreName" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="semaphoreType" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element ref="{}comment" minOccurs="0"/>
+ * &lt;element name="target" type="{http://www.w3.org/2001/XMLSchema}string"/>
+ * &lt;element name="formatList" type="{}FormatList"/>
+ * &lt;/sequence>
+ * &lt;attribute name="semaphoreId" type="{http://www.w3.org/2001/XMLSchema}string" />
+ * &lt;/restriction>
+ * &lt;/complexContent>
+ * &lt;/complexType>
+ * </pre>
+ *
+ *
+ */
+@XmlAccessorType(XmlAccessType.FIELD)
+@XmlType(name = "SemaphoreType", propOrder = {
+ "semaphoreName",
+ "semaphoreType",
+ "comment",
+ "target",
+ "formatList"
+})
+public class SemaphoreType {
+
+ @XmlElement(required = true)
+ protected String semaphoreName;
+ @XmlElement(required = true)
+ protected String semaphoreType;
+ protected String comment;
+ @XmlElement(required = true)
+ protected String target;
+ @XmlElement(required = true)
+ protected FormatList formatList;
+ @XmlAttribute(name = "semaphoreId")
+ protected String semaphoreId;
+
+ /**
+ * Gets the value of the semaphoreName property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSemaphoreName() {
+ return semaphoreName;
+ }
+
+ /**
+ * Sets the value of the semaphoreName property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSemaphoreName(String value) {
+ this.semaphoreName = value;
+ }
+
+ /**
+ * Gets the value of the semaphoreType property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSemaphoreType() {
+ return semaphoreType;
+ }
+
+ /**
+ * Sets the value of the semaphoreType property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSemaphoreType(String value) {
+ this.semaphoreType = value;
+ }
+
+ /**
+ * Gets the value of the comment property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getComment() {
+ return comment;
+ }
+
+ /**
+ * Sets the value of the comment property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setComment(String value) {
+ this.comment = value;
+ }
+
+ /**
+ * Gets the value of the target property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getTarget() {
+ return target;
+ }
+
+ /**
+ * Sets the value of the target property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setTarget(String value) {
+ this.target = value;
+ }
+
+ /**
+ * Gets the value of the formatList property.
+ *
+ * @return
+ * possible object is
+ * {@link FormatList }
+ *
+ */
+ public FormatList getFormatList() {
+ return formatList;
+ }
+
+ /**
+ * Sets the value of the formatList property.
+ *
+ * @param value
+ * allowed object is
+ * {@link FormatList }
+ *
+ */
+ public void setFormatList(FormatList value) {
+ this.formatList = value;
+ }
+
+ /**
+ * Gets the value of the semaphoreId property.
+ *
+ * @return
+ * possible object is
+ * {@link String }
+ *
+ */
+ public String getSemaphoreId() {
+ return semaphoreId;
+ }
+
+ /**
+ * Sets the value of the semaphoreId property.
+ *
+ * @param value
+ * allowed object is
+ * {@link String }
+ *
+ */
+ public void setSemaphoreId(String value) {
+ this.semaphoreId = value;
+ }
+
+}