diff options
author | talasila <talasila@research.att.com> | 2017-02-07 11:47:55 -0500 |
---|---|---|
committer | talasila <talasila@research.att.com> | 2017-02-07 12:51:32 -0500 |
commit | 1faf201e8608dfa4d7af3460fd3d1fc7ebec398b (patch) | |
tree | 2208f76271cc6b1a81dbfb9143cd7118b071a909 /ecomp-sdk/sdk-analytics/src/main | |
parent | ca23569858b8cc9f60010e193b7041feb2d3227b (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/main')
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(" "); + 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(" "); + 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("&", "&"), 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("&", "&"), styleDefaultCell.getIndex()); + sw.endRow(); + rowNum += 1; + sw.insertRow(rowNum); + cellNum = 0; + sw.createCell(cellNum, org.openecomp.portalsdk.analytics.system.Globals.getFooterSecondLine().replaceAll("&", "&"), 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("&", "&"), 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("&", "&"), styleDefaultCell.getIndex()); + sw.endRow(); + rowNum += 1; + sw.insertRow(rowNum); + cellNum = 0; + sw.createCell(cellNum, org.openecomp.portalsdk.analytics.system.Globals.getFooterSecondLine().replaceAll("&", "&"), 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\"> </TD></TR>"); + csvOut.println("<TR><TD COLSPAN=\"2\"> </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> "; + + 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>" + " "+ 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> "; + + 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() + " " + + 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 += \" : \" + 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 += \" : \" + 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 \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 </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 </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 </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(" "); + 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"," 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(" Schedule ", "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")); + } // 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(" Schedule ", "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) ? " " : 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) ? " " : 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(" ")!=-1) { + pos = sbuf.indexOf(" "); + 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, "<", "<"), ">", ">"); + } // htmlEncode + + public static String excelEncode(String value) { + String replaceStr = replaceInString(replaceInString(value, "<", "<"), ">", ">"); + String reg = "&(?!&#)"; + Pattern p = Pattern.compile(reg); + String replaceStrAmpersand = p.matcher(replaceStr).replaceAll("&"); + 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) ? " " : 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 ? " ":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) ? " " : 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) ? " " : 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) ? " " : 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> + * <complexType name="ChartAdditionalOptions"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="chartMultiplePieOrder" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartMultiplePieLabelDisplay" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartOrientation" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="secondaryChartRenderer" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartDisplay" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="hideToolTips" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="hidechartLegend" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="legendPosition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="labelAngle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="intervalFromdate" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="intervalTodate" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="intervalLabel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="lastSeriesALineChart" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="lastSeriesABarChart" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="maxLabelsInDomainAxis" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="linearRegression" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="linearRegressionColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="exponentialRegressionColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="maxRegression" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="rangeAxisUpperLimit" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="rangeAxisLowerLimit" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="overlayItemValueOnStackBar" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="animate" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="animateAnimatedChart" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="keepDomainAxisValueAsString" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="stacked" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="barControls" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="xAxisDateType" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="lessXaxisTickers" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="timeAxis" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="timeSeriesRender" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="multiSeries" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="showXAxisLabel" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="addXAxisTickers" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="zoomIn" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="timeAxisType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="logScale" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="topMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="bottomMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="rightMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="leftMargin" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="ChartDrillFormfield"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="formfield" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="ChartDrillOptions"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="drill_reportId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="drill_xAxis_FormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="drill_yAxis_FormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="drill_series_FormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="targetFormfield" type="{}ChartDrillFormfield" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="ColFilterList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="colFilter" type="{}ColFilterType" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="ColFilterType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="colId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="filterSeq" type="{http://www.w3.org/2001/XMLSchema}int"/> + * <element name="joinCondition" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="openBrackets" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="expression" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="argType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="argValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="closeBrackets" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="CustomReportType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="reportName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="reportDescr" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="numDashCols" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dashboardLayoutHTML" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dbInfo" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dbType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartType" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="chartTypeFixed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartMultiSeries" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartLeftAxisLabel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartRightAxisLabel" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartWidth" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartHeight" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="showChartTitle" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="public" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="hideFormFieldAfterRun" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="createId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="createDate" type="{http://www.w3.org/2001/XMLSchema}date"/> + * <element name="reportSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="reportTitle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="reportSubTitle" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="reportHeader" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="frozenColumns" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="pdfImgLogo" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="emptyMessage" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="widthNoColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dataGridAlign" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="reportFooter" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="numFormCols" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="displayOptions" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="jumpTo" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="searchPageSize" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="navPosition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="toggleLayout" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="pageNav" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="showPageSize" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="showNavPos" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="showGotoOption" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="dataContainerHeight" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dataContainerWidth" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="allowSchedule" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="multiGroupColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="topDown" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="sizedByContent" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * <element name="dataSourceList" type="{}DataSourceList" minOccurs="0"/> + * <element name="formFieldList" type="{}FormFieldList" minOccurs="0"/> + * <element name="javascriptList" type="{}JavascriptList" minOccurs="0"/> + * <element name="semaphoreList" type="{}SemaphoreList" minOccurs="0"/> + * <element name="dashboardOptions" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dashboardType" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="reportInNewWindow" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="displayFolderTree" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="maxRowsInExcelDownload" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="dashBoardReports" type="{}DashboardReports" minOccurs="0"/> + * <element name="dashBoardReportsNew" type="{}DashboardReportsNew" minOccurs="0"/> + * <element name="chartAdditionalOptions" type="{}ChartAdditionalOptions" minOccurs="0"/> + * <element name="pdfAdditionalOptions" type="{}PDFAdditionalOptions" minOccurs="0"/> + * <element name="chartDrillOptions" type="{}ChartDrillOptions" minOccurs="0"/> + * <element name="dataminingOptions" type="{}DataminingOptions" minOccurs="0"/> + * <element name="javascriptElement" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="folderId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="drillURLInPoPUpPresent" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="isOneTimeScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="isHourlyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="isDailyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="isDailyMFScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="isWeeklyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="isMonthlyScheduleAllowed" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="reportMap" type="{}ReportMap" minOccurs="0"/> + * </sequence> + * <attribute name="pageSize" type="{http://www.w3.org/2001/XMLSchema}int" /> + * <attribute name="reportType" type="{http://www.w3.org/2001/XMLSchema}string" /> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DashboardEditorList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="editorList" type="{}DashboardEditorReport" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DashboardEditorReport"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="reportId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="reportName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="dataType" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="position" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DashboardReports"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="reportsList" type="{}Reports" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DashboardReportsNew"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="reportsList" type="{}Reports" maxOccurs="unbounded" minOccurs="0"/> + * <element name="dashboardEditor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dashboardEditorList" type="{}DashboardEditorList" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DataColumnList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="dataColumn" type="{}DataColumnType" maxOccurs="unbounded"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DataColumnType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="tableId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="dbColName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="crossTabValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="colName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="displayName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="displayWidth" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="displayWidthInPxls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="pdfDisplayWidthInPxls" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="displayAlignment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="displayHeaderAlignment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="orderSeq" type="{http://www.w3.org/2001/XMLSchema}int"/> + * <element name="visible" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="calculated" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="colType" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="hyperlinkURL" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="hyperlinkType" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="actionImg" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="groupByPos" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="subTotalCustomText" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="hideRepeatedKey" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="colFormat" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="groupBreak" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="orderBySeq" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="orderByAscDesc" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="displayTotal" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="colOnChart" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartSeq" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="chartColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartLineType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartSeries" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="isRangeAxisFilled" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="isSortable" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="createInNewChart" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="drillDownType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="drillinPoPUp" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="drillDownURL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="drillDownParams" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * <element name="colFilterList" type="{}ColFilterList" minOccurs="0"/> + * <element name="semaphoreId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dbColType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="chartGroup" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="yAxis" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dependsOnFormField" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="nowrap" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="indentation" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="enhancedPagination" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="level" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="start" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="colspan" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="dataMiningCol" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * <attribute name="colId" type="{http://www.w3.org/2001/XMLSchema}string" /> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DataSourceList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="dataSource" type="{}DataSourceType" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DataSourceType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="tableName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="tablePK" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="displayName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="refTableId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="refDefinition" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * <element name="dataColumnList" type="{}DataColumnList"/> + * </sequence> + * <attribute name="tableId" type="{http://www.w3.org/2001/XMLSchema}string" /> + * </restriction> + * </complexContent> + * </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> + * <complexType name="DataminingOptions"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="classifier" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="timeAttribute" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="timeformat" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="forecastingUnits" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="FormFieldList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="formField" type="{}FormFieldType" maxOccurs="unbounded" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="FormFieldType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="colId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="fieldName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="fieldType" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="visible" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="validationType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="mandatory" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="defaultValue" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="orderBySeq" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="fieldSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="fieldDefaultSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="rangeStartDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/> + * <element name="rangeEndDate" type="{http://www.w3.org/2001/XMLSchema}date" minOccurs="0"/> + * <element name="rangeStartDateSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="rangeEndDateSQL" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * <element name="predefinedValueList" type="{}PredefinedValueList" minOccurs="0"/> + * <element name="dependsOn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="groupFormField" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="multiSelectListSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * <attribute name="fieldId" type="{http://www.w3.org/2001/XMLSchema}string" /> + * </restriction> + * </complexContent> + * </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> + * <complexType name="FormatList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="format" type="{}FormatType" maxOccurs="unbounded"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="FormatType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="lessThanValue" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="expression" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="bold" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="italic" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="underline" type="{http://www.w3.org/2001/XMLSchema}boolean"/> + * <element name="bgColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="fontColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="fontFace" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="fontSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="alignment" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element ref="{}comment" minOccurs="0"/> + * </sequence> + * <attribute name="formatId" type="{http://www.w3.org/2001/XMLSchema}string" /> + * </restriction> + * </complexContent> + * </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> + * <complexType name="JavascriptItemType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="id" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="fieldId" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="callText" type="{http://www.w3.org/2001/XMLSchema}string"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="JavascriptList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="javascriptItem" type="{}JavascriptItemType" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="Marker"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="markerColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dataHeader" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="addressColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dataColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="PDFAdditionalOptions"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="PDF_font" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="PDF_fontSize" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="PDF_orientation" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="PDF_logo1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="PDF_logo2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="PDF_logo1Size" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="PDF_logo2Size" type="{http://www.w3.org/2001/XMLSchema}int" minOccurs="0"/> + * <element name="PDF_coverPage" type="{http://www.w3.org/2001/XMLSchema}boolean" minOccurs="0"/> + * <element name="PDF_footer1" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="PDF_footer2" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="PredefinedValueList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="predefinedValue" type="{http://www.w3.org/2001/XMLSchema}string" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="ReportMap"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="markerColor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="useDefaultSize" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="height" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="width" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="isMapAllowedYN" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="addAddressInDataYN" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="addressColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="dataColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="defaultMapType" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="latColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="longColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="colorColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="legendColumn" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="markers" type="{}Marker" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="Reports"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="reportId" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * <element name="bgcolor" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="SemaphoreList"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="semaphore" type="{}SemaphoreType" maxOccurs="unbounded" minOccurs="0"/> + * </sequence> + * </restriction> + * </complexContent> + * </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> + * <complexType name="SemaphoreType"> + * <complexContent> + * <restriction base="{http://www.w3.org/2001/XMLSchema}anyType"> + * <sequence> + * <element name="semaphoreName" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="semaphoreType" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element ref="{}comment" minOccurs="0"/> + * <element name="target" type="{http://www.w3.org/2001/XMLSchema}string"/> + * <element name="formatList" type="{}FormatList"/> + * </sequence> + * <attribute name="semaphoreId" type="{http://www.w3.org/2001/XMLSchema}string" /> + * </restriction> + * </complexContent> + * </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; + } + +} |