diff options
author | TATTAVARADA <statta@research.att.com> | 2017-04-27 07:53:18 -0400 |
---|---|---|
committer | st782s <statta@research.att.com> | 2017-04-27 08:31:27 -0400 |
commit | 6beb446925c967aca92f5513adf36c5db77c00d6 (patch) | |
tree | 9392057ed0739de2445c5b2a2a8bee6dcdacbcf7 /ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime | |
parent | 246b225194e3e8dc1926294de591a94fd9787fa7 (diff) |
[PORTAL-7] Rebase
This rebasing includes common libraries and common overlays projects
abstraction of components
Change-Id: Ia1efa4deacdc5701e6205104ac021a6c80ed60ba
Signed-off-by: st782s <statta@research.att.com>
Diffstat (limited to 'ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime')
22 files changed, 15062 insertions, 0 deletions
diff --git a/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/BarChartOptions.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/BarChartOptions.java new file mode 100644 index 0000000..7e99dc6 --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CategoryAxisJSON.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CategoryAxisJSON.java new file mode 100644 index 0000000..93fab6e --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java new file mode 100644 index 0000000..18d3127 --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartD3Helper.java @@ -0,0 +1,4073 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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 + + boolean isEmbedded = false; + if(request.getParameter("embedded")!=null) { + isEmbedded = true; + } + 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); + + String chartScriptsPath = (isEmbedded?AppUtils.getChartScriptsPath(""):AppUtils.getChartScriptsPath()); + + 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=\""+ chartScriptsPath +"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=\""+ chartScriptsPath +"d3/js/d3.v3.min.js\"></script>"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/nv.d3.min.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/tooltip.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/utils.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"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=\""+ chartScriptsPath +"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==MINFLAG) + date1 = DateUtils.addMinutes(date1, 30); + 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=\""+ chartScriptsPath +"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=\""+ chartScriptsPath +"d3/js/d3.v3.min.js\"></script>\n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/nv.d3.min.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"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==DAYFLAG) + wholeScript.append(" return d3.time.format('%m/%d/%Y')(new Date(d)) }); \n"); + else 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=\""+ chartScriptsPath +"d3/js/d3.v3.min.js\"></script>\n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/nv.d3.min.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/legend.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/pie.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/pieChart.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"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=\""+ chartScriptsPath +"dy3/js/dygraph-combined.js\"></script>\n"); + wholeScript.append("<script type=\"text/javascript\" src=\""+ chartScriptsPath +"dy3/js/moment.min.js\"></script>\n"); + wholeScript.append("<script type=\"text/javascript\" src=\""+ chartScriptsPath +"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=\""+ chartScriptsPath +"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=\""+ chartScriptsPath +"d3/js/d3.v2.js\"></script>\n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/nv.d3.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/tooltip.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/utils.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/legend.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/axis.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/distribution.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"d3/js/models/scatter.js\"></script> \n"); + wholeScript.append("<script src=\""+ chartScriptsPath +"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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java new file mode 100644 index 0000000..c03fb7a --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSON.java @@ -0,0 +1,451 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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.Map; + +import org.openecomp.portalsdk.analytics.view.ColumnHeader; + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSONHelper.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartJSONHelper.java new file mode 100644 index 0000000..d08626c --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java new file mode 100644 index 0000000..b035187 --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ChartWebRuntime.java @@ -0,0 +1,423 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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.model.runtime.ReportRuntime; +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; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; + + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CommonChartOptions.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/CommonChartOptions.java new file mode 100644 index 0000000..e3e9fc6 --- /dev/null +++ b/ecomp-sdk/epsdk-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; + } +}
\ No newline at end of file diff --git a/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java new file mode 100644 index 0000000..04068ef --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ErrorJSONRuntime.java @@ -0,0 +1,58 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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 javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; + +import org.json.JSONObject; +import org.openecomp.portalsdk.analytics.model.base.IdNameValue; +import org.openecomp.portalsdk.analytics.view.ColumnHeader; +import org.openecomp.portalsdk.analytics.view.DataValue; +import org.openecomp.portalsdk.analytics.xmlobj.ColFilterList; +import org.openecomp.portalsdk.analytics.xmlobj.DataColumnList; +import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType; + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FlexTimeSeriesChartOptions.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FlexTimeSeriesChartOptions.java new file mode 100644 index 0000000..3b3060b --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java new file mode 100644 index 0000000..6d9730a --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormField.java @@ -0,0 +1,2103 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT 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.*; +import java.util.Map.Entry; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import javax.swing.text.html.HTMLDocument.HTMLReader.HiddenAction; + +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.base.*; +import org.openecomp.portalsdk.analytics.system.*; +import org.openecomp.portalsdk.analytics.util.*; +import org.openecomp.portalsdk.analytics.xmlobj.*; + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.java new file mode 100644 index 0000000..410c0cd --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/FormatProcessor.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.model.runtime; + +import java.util.*; + +import org.openecomp.portalsdk.analytics.*; +import org.openecomp.portalsdk.analytics.system.*; +import org.openecomp.portalsdk.analytics.util.*; +import org.openecomp.portalsdk.analytics.view.*; +import org.openecomp.portalsdk.analytics.xmlobj.*; + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/Item.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/Item.java new file mode 100644 index 0000000..1bc3bbb --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/LookupDBInfo.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/LookupDBInfo.java new file mode 100644 index 0000000..118356a --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/RangeAxisJSON.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/RangeAxisJSON.java new file mode 100644 index 0000000..9b5bf8d --- /dev/null +++ b/ecomp-sdk/epsdk-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 ""; + } + +}
\ No newline at end of file diff --git a/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java new file mode 100644 index 0000000..bce35a6 --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportFormFields.java @@ -0,0 +1,356 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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.*; +import javax.servlet.http.*; + +import org.openecomp.portalsdk.analytics.error.RaptorException; +import org.openecomp.portalsdk.analytics.model.*; +import org.openecomp.portalsdk.analytics.model.base.*; +import org.openecomp.portalsdk.analytics.model.definition.*; +import org.openecomp.portalsdk.analytics.system.*; +import org.openecomp.portalsdk.analytics.util.*; +import org.openecomp.portalsdk.analytics.xmlobj.*; + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java new file mode 100644 index 0000000..78f413a --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportJSONRuntime.java @@ -0,0 +1,709 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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 javax.xml.bind.annotation.XmlAttribute; +import javax.xml.bind.annotation.XmlElement; + +import org.json.JSONObject; +import org.openecomp.portalsdk.analytics.model.base.IdNameValue; +import org.openecomp.portalsdk.analytics.view.ColumnHeader; +import org.openecomp.portalsdk.analytics.view.DataValue; +import org.openecomp.portalsdk.analytics.xmlobj.ColFilterList; +import org.openecomp.portalsdk.analytics.xmlobj.DataColumnList; +import org.openecomp.portalsdk.analytics.xmlobj.DataColumnType; + +/*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; + private boolean hideFormFieldsAfterRun; + + + 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; + } + public boolean isHideFormFieldsAfterRun() { + return hideFormFieldsAfterRun; + } + public void setHideFormFieldsAfterRun(boolean hideFormFieldsAfterRun) { + this.hideFormFieldsAfterRun = hideFormFieldsAfterRun; + } + + + + +} diff --git a/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.java new file mode 100644 index 0000000..30c76cd --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamDateValueParser.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.model.runtime; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.*; +import javax.servlet.http.*; + +import org.openecomp.portalsdk.analytics.model.base.*; +import org.openecomp.portalsdk.analytics.system.Globals; +import org.openecomp.portalsdk.analytics.util.*; +import org.openecomp.portalsdk.analytics.xmlobj.*; + +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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.java new file mode 100644 index 0000000..ebc103d --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValues.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.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.logging.logic.EELFLoggerDelegate; + +public class ReportParamValues extends Hashtable { + EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(ReportParamValues.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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValuesForPDFExcel.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportParamValuesForPDFExcel.java new file mode 100644 index 0000000..f4bb980 --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java new file mode 100644 index 0000000..78097d6 --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/ReportRuntime.java @@ -0,0 +1,3401 @@ +/*- + * ================================================================================ + * eCOMP Portal SDK + * ================================================================================ + * Copyright (C) 2017 AT&T Intellectual Property + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY 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 = ""; + 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 (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); + cachedSQL = reportSQL; + wholeSQL = reportSQL; + 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); + + 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(), + true, 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(), "", dc.getDisplayWidthInPxls(), dc.getDisplayHeaderAlignment(), + true, 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 synchronized Object clone() { + try { + return super.clone(); + } catch (CloneNotSupportedException e) { + // this shouldn't happen, since we are Cloneable + throw new InternalError("Cloning throws error."); + } + } + + public VisualManager getVisualManager() { + return visualManager; + } + + public String getReportSQLWithRowNum(String _orderBy, boolean asc) { + String sql = getWholeSQL(); + int closeBracketPos = 0; + // 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; + String userId = AppUtils.getUserID(request); + try { + if( AppUtils.isAdminUser(request) || AppUtils.isSuperUser(request) ) { + allowEdit = true; + } else { + if(getOwnerID().equals(userId)) allowEdit = true; + else allowEdit = false; + } + } 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.setReportSubTitle(getReportSubTitle()); + 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.setHideFormFieldsAfterRun(isHideFormFieldAfterRun()); + 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>(); + 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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/TimeSeriesChartOptions.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/TimeSeriesChartOptions.java new file mode 100644 index 0000000..9e6f657 --- /dev/null +++ b/ecomp-sdk/epsdk-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/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.java b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.java new file mode 100644 index 0000000..07929ea --- /dev/null +++ b/ecomp-sdk/epsdk-analytics/src/main/java/org/openecomp/portalsdk/analytics/model/runtime/VisualManager.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.model.runtime; + +import java.util.*; + +import org.openecomp.portalsdk.analytics.*; +import org.openecomp.portalsdk.analytics.system.*; +import org.openecomp.portalsdk.analytics.util.*; + +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 |