Search in sources :

Example 1 with StandardEntityCollection

use of org.jfree.chart.entity.StandardEntityCollection in project processdash by dtuma.

the class CGIChartBase method writeImageHtml.

private void writeImageHtml(int width, int height, int imgID, ChartRenderingInfo info) throws IOException {
    String tooltip = getParameter("tooltip");
    if (!StringUtils.hasValue(tooltip))
        tooltip = resources.getHTML("More_Detail_Here_Instruction");
    String href = getParameter("href");
    if (StringUtils.hasValue(href)) {
        // create a copy of the entity collection, and place an entity for
        // the entire chart at the beginning of the list.  This will
        // make it appear last in the image map (which is important,
        // because browsers process the image map areas in the order that
        // they appear; having the entire chart area listed first would
        // obscure all of the other image map areas).
        EntityCollection entities = new StandardEntityCollection();
        entities.add(new ChartEntity(info.getChartArea(), tooltip, href));
        if (info.getEntityCollection() != null)
            entities.addAll(info.getEntityCollection());
        // area in the chart.
        for (Iterator i = entities.iterator(); i.hasNext(); ) {
            ChartEntity ce = (ChartEntity) i.next();
            // image map anyway, so they don't need to be adjusted
            if (ce.getToolTipText() == null && ce.getURLText() == null)
                continue;
            // for other entities, add a tooltip and a URL as needed.
            if (!StringUtils.hasValue(ce.getToolTipText()))
                ce.setToolTipText(tooltip);
            if (!StringUtils.hasValue(ce.getURLText()))
                ce.setURLText(href);
        }
        // install our modified version of the entity collection into
        // the chart info object, so it will be used when generating
        // the image map later.
        info.setEntityCollection(entities);
    }
    // write the image tag
    out.write("<img width=\"" + width + "\" height=\"" + height + "\" src=\"/reports/pngCache?id=" + imgID + "\" usemap=\"#IMG" + imgID + '"');
    // have a URL we're pointing to.  Turn that border off.
    if (!StringUtils.hasValue(href) || parameters.containsKey("noBorder"))
        out.write(" border=\"0\"");
    // starting with the prefix "img", and copy them into the tag.
    for (Iterator i = parameters.entrySet().iterator(); i.hasNext(); ) {
        Map.Entry e = (Map.Entry) i.next();
        String attrName = (String) e.getKey();
        if (attrName.startsWith("img") && !attrName.endsWith("_ALL")) {
            out.write(" " + attrName.substring(3) + "=\"");
            out.write(HTMLUtils.escapeEntities(e.getValue().toString()));
            out.write('"');
        }
    }
    out.write(">");
    // finally, write the image map.  Note that we have to strip line
    // break characters from the resulting HTML, otherwise firefox seems
    // to decide that the <map> tag actually takes up space on the page
    String imageMapHtml = ImageMapUtilities.getImageMap("IMG" + imgID, info, getToolTipGenerator(tooltip), new StandardURLTagFragmentGenerator());
    for (int i = 0; i < imageMapHtml.length(); i++) {
        char c = imageMapHtml.charAt(i);
        if (c != '\r' && c != '\n')
            out.write(c);
    }
    out.flush();
}
Also used : StandardEntityCollection(org.jfree.chart.entity.StandardEntityCollection) StandardEntityCollection(org.jfree.chart.entity.StandardEntityCollection) EntityCollection(org.jfree.chart.entity.EntityCollection) Iterator(java.util.Iterator) ChartEntity(org.jfree.chart.entity.ChartEntity) StandardURLTagFragmentGenerator(org.jfree.chart.imagemap.StandardURLTagFragmentGenerator) Map(java.util.Map) GradientPaint(java.awt.GradientPaint)

Example 2 with StandardEntityCollection

use of org.jfree.chart.entity.StandardEntityCollection in project pentaho-platform by pentaho.

the class ChartComponent method executeAction.

@Override
protected boolean executeAction() {
    int height = -1;
    int width = -1;
    // $NON-NLS-1$
    String title = "";
    Node chartDocument = null;
    IPentahoResultSet data = (IPentahoResultSet) getInputValue(ChartComponent.CHART_DATA_PROP);
    if (!data.isScrollable()) {
        // $NON-NLS-1$
        getLogger().debug("ResultSet is not scrollable. Copying into memory");
        IPentahoResultSet memSet = data.memoryCopy();
        data.close();
        data = memSet;
    }
    String urlTemplate = (String) getInputValue(ChartComponent.URL_TEMPLATE);
    Node chartAttributes = null;
    String chartAttributeString = null;
    if (getInputNames().contains(ChartComponent.CHART_ATTRIBUTES_PROP)) {
        chartAttributeString = getInputStringValue(ChartComponent.CHART_ATTRIBUTES_PROP);
    } else if (isDefinedResource(ChartComponent.CHART_ATTRIBUTES_PROP)) {
        IActionSequenceResource resource = getResource(ChartComponent.CHART_ATTRIBUTES_PROP);
        chartAttributeString = getResourceAsString(resource);
    }
    // Realize chart attributes as an XML document
    if (chartAttributeString != null) {
        try {
            chartDocument = XmlDom4JHelper.getDocFromString(chartAttributeString, new PentahoEntityResolver());
        } catch (XmlParseException e) {
            getLogger().error(Messages.getInstance().getString("ChartComponent.ERROR_0005_CANT_DOCUMENT_FROM_STRING"), // $NON-NLS-1$
            e);
            return false;
        }
        chartAttributes = chartDocument.selectSingleNode(ChartComponent.CHART_ATTRIBUTES_PROP);
        if (chartAttributes == null) {
            chartAttributes = chartDocument.selectSingleNode(ChartComponent.ALTERNATIVE_CHART_ATTRIBUTES_PROP);
        }
    }
    // Default chart attributes are in the component-definition section of the action definition.
    if (chartAttributes == null) {
        chartAttributes = getComponentDefinition(true).selectSingleNode(ChartComponent.CHART_ATTRIBUTES_PROP);
    }
    // have an urlTemplate attribute
    if ((urlTemplate == null) || (urlTemplate.length() == 0)) {
        if (chartAttributes.selectSingleNode(ChartComponent.URL_TEMPLATE) != null) {
            urlTemplate = chartAttributes.selectSingleNode(ChartComponent.URL_TEMPLATE).getText();
        }
    }
    // These parameters are replacement variables parsed into the
    // urlTemplate specifically when we have a URL that is a drill-through
    // link in a chart intended to drill down into the chart data.
    String parameterName = (String) getInputValue(ChartComponent.PARAMETER_NAME);
    if ((parameterName == null) || (parameterName.length() == 0)) {
        if (chartAttributes.selectSingleNode(ChartComponent.PARAMETER_NAME) != null) {
            parameterName = chartAttributes.selectSingleNode(ChartComponent.PARAMETER_NAME).getText();
        }
    }
    // These parameters are replacement variables parsed into the
    // urlTemplate specifically when we have a URL that is a drill-through
    // link in a chart intended to drill down into the chart data.
    String outerParameterName = (String) getInputValue(ChartComponent.OUTER_PARAMETER_NAME);
    if ((outerParameterName == null) || (outerParameterName.length() == 0)) {
        if (chartAttributes.selectSingleNode(ChartComponent.OUTER_PARAMETER_NAME) != null) {
            outerParameterName = chartAttributes.selectSingleNode(ChartComponent.OUTER_PARAMETER_NAME).getText();
        }
    }
    String chartType = chartAttributes.selectSingleNode(ChartDefinition.TYPE_NODE_NAME).getText();
    // --------------- This code allows inputs to override the chartAttributes
    // of width, height, and title
    Object widthObj = getInputValue(ChartDefinition.WIDTH_NODE_NAME);
    if (widthObj != null) {
        width = Integer.parseInt(widthObj.toString());
        if (width != -1) {
            if (chartAttributes.selectSingleNode(ChartDefinition.WIDTH_NODE_NAME) == null) {
                ((Element) chartAttributes).addElement(ChartDefinition.WIDTH_NODE_NAME);
            }
            chartAttributes.selectSingleNode(ChartDefinition.WIDTH_NODE_NAME).setText(Integer.toString(width));
        }
    }
    Object heightObj = getInputValue(ChartDefinition.HEIGHT_NODE_NAME);
    if (heightObj != null) {
        height = Integer.parseInt(heightObj.toString());
        if (height != -1) {
            if (chartAttributes.selectSingleNode(ChartDefinition.HEIGHT_NODE_NAME) == null) {
                ((Element) chartAttributes).addElement(ChartDefinition.HEIGHT_NODE_NAME);
            }
            chartAttributes.selectSingleNode(ChartDefinition.HEIGHT_NODE_NAME).setText(Integer.toString(height));
        }
    }
    Object titleObj = getInputValue(ChartDefinition.TITLE_NODE_NAME);
    if (titleObj != null) {
        if (chartAttributes.selectSingleNode(ChartDefinition.TITLE_NODE_NAME) == null) {
            ((Element) chartAttributes).addElement(ChartDefinition.TITLE_NODE_NAME);
        }
        chartAttributes.selectSingleNode(ChartDefinition.TITLE_NODE_NAME).setText(titleObj.toString());
    }
    // ----------------End of Override
    // ---------------Feed the Title and Subtitle information through the input substitution
    Node titleNode = chartAttributes.selectSingleNode(ChartDefinition.TITLE_NODE_NAME);
    if (titleNode != null) {
        String titleStr = titleNode.getText();
        if (titleStr != null) {
            title = titleStr;
            String newTitle = applyInputsToFormat(titleStr);
            titleNode.setText(newTitle);
        }
    }
    List subtitles = chartAttributes.selectNodes(ChartDefinition.SUBTITLE_NODE_NAME);
    if ((subtitles == null) || (subtitles.isEmpty())) {
        Node subTitlesNode = chartAttributes.selectSingleNode(ChartDefinition.SUBTITLES_NODE_NAME);
        if (subTitlesNode != null) {
            subtitles = chartAttributes.selectNodes(ChartDefinition.SUBTITLE_NODE_NAME);
        }
    } else {
        // log a deprecation warning for this property...
        getLogger().warn(Messages.getInstance().getString("CHART.WARN_DEPRECATED_CHILD", ChartDefinition.SUBTITLE_NODE_NAME, // $NON-NLS-1$
        ChartDefinition.SUBTITLES_NODE_NAME));
        getLogger().warn(Messages.getInstance().getString("CHART.WARN_PROPERTY_WILL_NOT_VALIDATE", // $NON-NLS-1$
        ChartDefinition.SUBTITLE_NODE_NAME));
    }
    if (subtitles != null) {
        for (Iterator iter = subtitles.iterator(); iter.hasNext(); ) {
            Node subtitleNode = (Node) iter.next();
            if (subtitleNode != null) {
                String subtitleStr = subtitleNode.getText();
                if (subtitleStr != null) {
                    String newSubtitle = applyInputsToFormat(subtitleStr);
                    subtitleNode.setText(newSubtitle);
                }
            }
        }
    }
    // ----------------End of Format
    // Determine if we are going to read the chart data set by row or by column
    boolean byRow = false;
    if (getInputStringValue(ChartComponent.BY_ROW_PROP) != null) {
        byRow = Boolean.valueOf(getInputStringValue(ChartComponent.BY_ROW_PROP)).booleanValue();
    }
    if (height == -1) {
        height = // $NON-NLS-1$
        (int) getInputLongValue(ChartComponent.CHART_ATTRIBUTES_PROP + "/" + ChartDefinition.HEIGHT_NODE_NAME, 50);
    }
    if (width == -1) {
        width = // $NON-NLS-1$
        (int) getInputLongValue(ChartComponent.CHART_ATTRIBUTES_PROP + "/" + ChartDefinition.WIDTH_NODE_NAME, 100);
    }
    if (title.length() <= 0) {
        // $NON-NLS-1$
        title = getInputStringValue(ChartComponent.CHART_ATTRIBUTES_PROP + "/" + ChartDefinition.TITLE_NODE_NAME);
    }
    // Select the right dataset to use based on the chart type
    // Default to category dataset
    String datasetType = ChartDefinition.CATEGORY_DATASET_STR;
    boolean isStacked = false;
    Node datasetTypeNode = chartAttributes.selectSingleNode(ChartDefinition.DATASET_TYPE_NODE_NAME);
    if (datasetTypeNode != null) {
        datasetType = datasetTypeNode.getText();
    }
    Dataset dataDefinition = null;
    if (ChartDefinition.XY_SERIES_COLLECTION_STR.equalsIgnoreCase(datasetType)) {
        dataDefinition = new XYSeriesCollectionChartDefinition(data, byRow, chartAttributes, getSession());
    } else if (ChartDefinition.TIME_SERIES_COLLECTION_STR.equalsIgnoreCase(datasetType)) {
        Node stackedNode = chartAttributes.selectSingleNode(ChartDefinition.STACKED_NODE_NAME);
        if (stackedNode != null) {
            isStacked = Boolean.valueOf(stackedNode.getText()).booleanValue();
        }
        if ((isStacked) && (ChartDefinition.AREA_CHART_STR.equalsIgnoreCase(chartType))) {
            dataDefinition = new TimeTableXYDatasetChartDefinition(data, byRow, chartAttributes, getSession());
        } else {
            dataDefinition = new TimeSeriesCollectionChartDefinition(data, byRow, chartAttributes, getSession());
        }
    } else if (ChartDefinition.PIE_CHART_STR.equalsIgnoreCase(chartType)) {
        dataDefinition = new PieDatasetChartDefinition(data, byRow, chartAttributes, getSession());
    } else if (ChartDefinition.DIAL_CHART_STR.equalsIgnoreCase(chartType)) {
        dataDefinition = new DialWidgetDefinition(data, byRow, chartAttributes, width, height, getSession());
    } else if (ChartDefinition.BAR_LINE_CHART_STR.equalsIgnoreCase(chartType)) {
        dataDefinition = new BarLineChartDefinition(data, byRow, chartAttributes, getSession());
    } else if (ChartDefinition.BUBBLE_CHART_STR.equalsIgnoreCase(chartType)) {
        dataDefinition = new XYZSeriesCollectionChartDefinition(data, byRow, chartAttributes, getSession());
    } else {
        dataDefinition = new CategoryDatasetChartDefinition(data, byRow, chartAttributes, getSession());
    }
    // Determine what we are sending back - Default to OUTPUT_PNG output
    // OUTPUT_PNG = the chart gets written to a file in .png format
    // OUTPUT_SVG = the chart gets written to a file in .svg (XML) format
    // OUTPUT_CHART = the chart in a byte stream gets stored as as an IContentItem
    // OUTPUT_PNG_BYTES = the chart gets sent as a byte stream in .png format
    int outputType = JFreeChartEngine.OUTPUT_PNG;
    if (getInputStringValue(ChartComponent.OUTPUT_TYPE_PROP) != null) {
        if (ChartComponent.SVG_TYPE.equalsIgnoreCase(getInputStringValue(ChartComponent.OUTPUT_TYPE_PROP))) {
            outputType = JFreeChartEngine.OUTPUT_SVG;
        } else if (ChartComponent.CHART_TYPE.equalsIgnoreCase(getInputStringValue(ChartComponent.OUTPUT_TYPE_PROP))) {
            outputType = JFreeChartEngine.OUTPUT_CHART;
        } else if (ChartComponent.PNG_BYTES_TYPE.equalsIgnoreCase(getInputStringValue(ChartComponent.OUTPUT_TYPE_PROP))) {
            outputType = JFreeChartEngine.OUTPUT_PNG_BYTES;
        }
    }
    boolean keepTempFile = false;
    if (isDefinedInput(KEEP_TEMP_FILE_PROP)) {
        keepTempFile = getInputBooleanValue(KEEP_TEMP_FILE_PROP, false);
    }
    JFreeChart chart = null;
    switch(outputType) {
        /**
         ************************** OUTPUT_PNG_BYTES ********************************************
         */
        case JFreeChartEngine.OUTPUT_PNG_BYTES:
            // $NON-NLS-1$
            chart = JFreeChartEngine.getChart(dataDefinition, title, "", width, height, this);
            // TODO Shouldn't the mime types and other strings here be constant somewhere? Where do we
            // put this type of general info ?
            // $NON-NLS-1$
            String mimeType = "image/png";
            // $NON-NLS-1$ //$NON-NLS-2$
            IContentItem contentItem = getOutputItem("chartdata", mimeType, ".png");
            contentItem.setMimeType(mimeType);
            try {
                OutputStream output = contentItem.getOutputStream(getActionName());
                ChartUtilities.writeChartAsPNG(output, chart, width, height);
            } catch (Exception e) {
                // $NON-NLS-1$
                error(Messages.getInstance().getErrorString("ChartComponent.ERROR_0004_CANT_CREATE_IMAGE"), e);
                return false;
            }
            break;
        /**
         ************************** OUTPUT_SVG && OUTPUT_PNG ************************************
         */
        case JFreeChartEngine.OUTPUT_SVG:
        case JFreeChartEngine.OUTPUT_PNG:
            // Don't include the map in a file if HTML_MAPPING_HTML is specified, as that
            // param sends the map back on the outputstream as a string
            boolean createMapFile = !isDefinedOutput(ChartComponent.HTML_MAPPING_HTML);
            boolean hasTemplate = urlTemplate != null && urlTemplate.length() > 0;
            File[] fileResults = createTempFile(outputType, hasTemplate, !keepTempFile);
            if (fileResults == null) {
                // $NON-NLS-1$
                error(Messages.getInstance().getErrorString("ChartComponent.ERROR_0003_CANT_CREATE_TEMP_FILES"));
                return false;
            }
            String chartId = fileResults[ChartComponent.FILE_NAME].getName().substring(0, fileResults[ChartComponent.FILE_NAME].getName().indexOf('.'));
            String filePathWithoutExtension = ChartComponent.TEMP_DIRECTORY + chartId;
            PrintWriter printWriter = new PrintWriter(new StringWriter());
            ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
            JFreeChartEngine.saveChart(dataDefinition, title, "", filePathWithoutExtension, width, height, outputType, printWriter, info, // $NON-NLS-1$
            this);
            // Creating the image map
            boolean useBaseUrl = true;
            // $NON-NLS-1$
            String urlTarget = "pentaho_popup";
            // Prepend the base url to the front of every drill through link
            if (chartAttributes.selectSingleNode(ChartComponent.USE_BASE_URL_TAG) != null) {
                Boolean booleanValue = new Boolean(chartAttributes.selectSingleNode(ChartComponent.USE_BASE_URL_TAG).getText());
                useBaseUrl = booleanValue.booleanValue();
            }
            // What target for link? _parent, _blank, etc.
            if (chartAttributes.selectSingleNode(ChartComponent.URL_TARGET_TAG) != null) {
                urlTarget = chartAttributes.selectSingleNode(ChartComponent.URL_TARGET_TAG).getText();
            }
            String mapString = null;
            if (hasTemplate) {
                try {
                    String mapId = fileResults[ChartComponent.MAP_NAME].getName().substring(0, fileResults[ChartComponent.MAP_NAME].getName().indexOf('.'));
                    mapString = ImageMapUtilities.getImageMap(mapId, info, new StandardToolTipTagFragmentGenerator(), new PentahoChartURLTagFragmentGenerator(urlTemplate, urlTarget, useBaseUrl, dataDefinition, parameterName, outerParameterName));
                    if (createMapFile) {
                        BufferedWriter out = new BufferedWriter(new FileWriter(fileResults[ChartComponent.MAP_NAME]));
                        out.write(mapString);
                        out.flush();
                        out.close();
                    }
                } catch (IOException e) {
                    error(Messages.getInstance().getErrorString("ChartComponent.ERROR_0001_CANT_WRITE_MAP", // $NON-NLS-1$
                    fileResults[ChartComponent.MAP_NAME].getPath()));
                    return false;
                } catch (Exception e) {
                    error(e.getLocalizedMessage(), e);
                    return false;
                }
            }
            /**
             *****************************************************************************************************
             * Legitimate outputs for the ChartComponent in an action sequence:
             *
             * CHART_OUTPUT (chart-output) Stores the chart in the content repository as an IContentItem.
             *
             * CHART_FILE_NAME_OUTPUT (chart-filename) Returns the name of the chart file, including the file extension
             * (with no path information) as a String.
             *
             * HTML_MAPPING_OUTPUT (chart-mapping) Returns the name of the file that the map has been saved to, including
             * the file extension (with no path information) as a String. Will be empty if url-template is undefined
             *
             * HTML_MAPPING_HTML (chart-map-html) Returns the chart image map HTML as a String. Will be empty if
             * url-template is undefined
             *
             * BASE_URL_OUTPUT (base-url) Returns the web app's base URL (ie., http://localhost:8080/pentaho) as a String.
             *
             * HTML_IMG_TAG (image-tag) Returns the HTML snippet including the image map, image (<IMG />) tag for the chart
             * image with src, width, height and usemap attributes defined. Usemap will not be included if url-template is
             * undefined.
             *
             ******************************************************************************************************
             */
            // Now set the outputs
            Set outputs = getOutputNames();
            if ((outputs != null) && (outputs.size() > 0)) {
                Iterator iter = outputs.iterator();
                while (iter.hasNext()) {
                    String outputName = (String) iter.next();
                    String outputValue = null;
                    if (outputName.equals(ChartComponent.CHART_FILE_NAME_OUTPUT)) {
                        outputValue = fileResults[ChartComponent.FILE_NAME].getName();
                    } else if (outputName.equals(ChartComponent.HTML_MAPPING_OUTPUT)) {
                        if (hasTemplate) {
                            outputValue = fileResults[ChartComponent.MAP_NAME].getName();
                        }
                    } else if (outputName.equals(ChartComponent.HTML_MAPPING_HTML)) {
                        outputValue = mapString;
                    } else if (outputName.equals(ChartComponent.BASE_URL_OUTPUT)) {
                        IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
                        outputValue = requestContext.getContextPath();
                    } else if (outputName.equals(ChartComponent.CONTEXT_PATH_OUTPUT)) {
                        IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
                        outputValue = requestContext.getContextPath();
                    } else if (outputName.equals(ChartComponent.FULLY_QUALIFIED_SERVER_URL_OUTPUT)) {
                        IApplicationContext applicationContext = PentahoSystem.getApplicationContext();
                        if (applicationContext != null) {
                            outputValue = applicationContext.getFullyQualifiedServerURL();
                        } else {
                            IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
                            outputValue = requestContext.getContextPath();
                        }
                    } else if (outputName.equals(ChartComponent.HTML_IMG_TAG)) {
                        // $NON-NLS-1$
                        outputValue = hasTemplate ? mapString : "";
                        // $NON-NLS-1$
                        outputValue += "<img border=\"0\" ";
                        // $NON-NLS-1$//$NON-NLS-2$
                        outputValue += "width=\"" + width + "\" ";
                        // $NON-NLS-1$//$NON-NLS-2$
                        outputValue += "height=\"" + height + "\" ";
                        if (hasTemplate) {
                            outputValue += "usemap=\"#" + fileResults[ChartComponent.MAP_NAME].getName().substring(0, fileResults[ChartComponent.MAP_NAME].getName().indexOf('.')) + // $NON-NLS-1$//$NON-NLS-2$
                            "\" ";
                        }
                        IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
                        String contextPath = requestContext.getContextPath();
                        outputValue += // $NON-NLS-1$//$NON-NLS-2$ //$NON-NLS-3$
                        "src=\"" + contextPath + "getImage?image=" + fileResults[ChartComponent.FILE_NAME].getName() + "\"/>";
                    }
                    if (outputValue != null) {
                        setOutputValue(outputName, outputValue);
                    }
                }
            }
            break;
        /**
         ************************ OUTPUT_CHART && DEFAULT ************************************
         */
        case JFreeChartEngine.OUTPUT_CHART:
        default:
            String chartName = ChartComponent.CHART_OUTPUT;
            if (isDefinedInput(ChartComponent.CHART_NAME_PROP)) {
                chartName = getInputStringValue(ChartComponent.CHART_NAME_PROP);
            }
            // $NON-NLS-1$
            chart = JFreeChartEngine.getChart(dataDefinition, title, "", width, height, this);
            setOutputValue(chartName, chart);
            break;
    }
    return true;
}
Also used : StandardToolTipTagFragmentGenerator(org.jfree.chart.imagemap.StandardToolTipTagFragmentGenerator) CategoryDatasetChartDefinition(org.pentaho.platform.uifoundation.chart.CategoryDatasetChartDefinition) XYZSeriesCollectionChartDefinition(org.pentaho.platform.uifoundation.chart.XYZSeriesCollectionChartDefinition) Set(java.util.Set) IPentahoResultSet(org.pentaho.commons.connection.IPentahoResultSet) Node(org.dom4j.Node) Element(org.dom4j.Element) OutputStream(java.io.OutputStream) FileWriter(java.io.FileWriter) IApplicationContext(org.pentaho.platform.api.engine.IApplicationContext) IActionSequenceResource(org.pentaho.platform.api.engine.IActionSequenceResource) BufferedWriter(java.io.BufferedWriter) PieDatasetChartDefinition(org.pentaho.platform.uifoundation.chart.PieDatasetChartDefinition) PentahoChartURLTagFragmentGenerator(org.pentaho.platform.uifoundation.chart.PentahoChartURLTagFragmentGenerator) StringWriter(java.io.StringWriter) Iterator(java.util.Iterator) ChartRenderingInfo(org.jfree.chart.ChartRenderingInfo) List(java.util.List) PrintWriter(java.io.PrintWriter) Dataset(org.jfree.data.general.Dataset) TimeSeriesCollectionChartDefinition(org.pentaho.platform.uifoundation.chart.TimeSeriesCollectionChartDefinition) TimeTableXYDatasetChartDefinition(org.pentaho.platform.uifoundation.chart.TimeTableXYDatasetChartDefinition) DialWidgetDefinition(org.pentaho.platform.uifoundation.chart.DialWidgetDefinition) XmlParseException(org.pentaho.platform.api.util.XmlParseException) IOException(java.io.IOException) PentahoEntityResolver(org.pentaho.platform.engine.services.solution.PentahoEntityResolver) JFreeChart(org.jfree.chart.JFreeChart) IOException(java.io.IOException) XmlParseException(org.pentaho.platform.api.util.XmlParseException) IPentahoResultSet(org.pentaho.commons.connection.IPentahoResultSet) StandardEntityCollection(org.jfree.chart.entity.StandardEntityCollection) IPentahoRequestContext(org.pentaho.platform.api.engine.IPentahoRequestContext) BarLineChartDefinition(org.pentaho.platform.uifoundation.chart.BarLineChartDefinition) XYSeriesCollectionChartDefinition(org.pentaho.platform.uifoundation.chart.XYSeriesCollectionChartDefinition) IContentItem(org.pentaho.platform.api.repository.IContentItem) File(java.io.File)

Example 3 with StandardEntityCollection

use of org.jfree.chart.entity.StandardEntityCollection in project pentaho-platform by pentaho.

the class PieDatasetChartComponent method getXmlContent.

@Override
public Document getXmlContent() {
    // Create a document that describes the result
    Document result = DocumentHelper.createDocument();
    IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
    // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    setXslProperty("baseUrl", requestContext.getContextPath());
    // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    setXslProperty("fullyQualifiedServerUrl", PentahoSystem.getApplicationContext().getFullyQualifiedServerURL());
    // $NON-NLS-1$
    String mapName = "chart" + AbstractChartComponent.chartCount++;
    Document chartDefinition = jcrHelper.getSolutionDocument(definitionPath, RepositoryFilePermission.READ);
    if (chartDefinition == null) {
        // $NON-NLS-1$
        Element errorElement = result.addElement("error");
        errorElement.addElement("title").setText(// $NON-NLS-1$ //$NON-NLS-2$
        Messages.getInstance().getString("ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART"));
        // $NON-NLS-1$
        String message = Messages.getInstance().getString("CHARTS.ERROR_0001_CHART_DEFINIION_MISSING", definitionPath);
        // $NON-NLS-1$
        errorElement.addElement("message").setText(message);
        error(message);
        return result;
    }
    // create a pie definition from the XML definition
    dataDefinition = createChart(chartDefinition);
    if (dataDefinition == null) {
        // $NON-NLS-1$
        Element errorElement = result.addElement("error");
        errorElement.addElement("title").setText(// $NON-NLS-1$ //$NON-NLS-2$
        Messages.getInstance().getString("ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART"));
        // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        String message = Messages.getInstance().getString("CHARTS.ERROR_0002_CHART_DATA_MISSING", actionPath);
        // $NON-NLS-1$
        errorElement.addElement("message").setText(message);
        // System .out.println( result.asXML() );
        return result;
    }
    // create an image for the dial using the JFreeChart engine
    PrintWriter printWriter = new PrintWriter(new StringWriter());
    // we'll dispay the title in HTML so that the dial image does not have
    // to
    // accommodate it
    // $NON-NLS-1$
    String chartTitle = "";
    try {
        if (height == -1) {
            // $NON-NLS-1$
            height = Integer.parseInt(chartDefinition.selectSingleNode("/chart/height").getText());
        }
        if (width == -1) {
            // $NON-NLS-1$
            width = Integer.parseInt(chartDefinition.selectSingleNode("/chart/width").getText());
        }
    } catch (Exception e) {
    // go with the default
    }
    if (chartDefinition.selectSingleNode("/chart/urlTemplate") != null) {
        // $NON-NLS-1$
        // $NON-NLS-1$
        urlTemplate = chartDefinition.selectSingleNode("/chart/urlTemplate").getText();
    }
    if (chartDefinition.selectSingleNode("/chart/paramName") != null) {
        // $NON-NLS-1$
        // $NON-NLS-1$
        paramName = chartDefinition.selectSingleNode("/chart/paramName").getText();
    }
    // $NON-NLS-1$
    Element root = result.addElement("charts");
    DefaultPieDataset chartDataDefinition = (DefaultPieDataset) dataDefinition;
    // if (chartDataDefinition.getRowCount() > 0) {
    // create temporary file names
    String[] tempFileInfo = createTempFile();
    String fileName = tempFileInfo[AbstractChartComponent.FILENAME_INDEX];
    String filePathWithoutExtension = tempFileInfo[AbstractChartComponent.FILENAME_WITHOUT_EXTENSION_INDEX];
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    JFreeChartEngine.saveChart(chartDataDefinition, chartTitle, "", filePathWithoutExtension, width, height, JFreeChartEngine.OUTPUT_PNG, printWriter, info, // $NON-NLS-1$
    this);
    applyOuterURLTemplateParam();
    populateInfo(info);
    // $NON-NLS-1$
    Element chartElement = root.addElement("chart");
    // $NON-NLS-1$
    chartElement.addElement("mapName").setText(mapName);
    // $NON-NLS-1$
    chartElement.addElement("width").setText(Integer.toString(width));
    // $NON-NLS-1$
    chartElement.addElement("height").setText(Integer.toString(height));
    // for (int row = 0; row < chartDataDefinition.getRowCount(); row++) {
    // for (int column = 0; column < chartDataDefinition.getColumnCount();
    // column++) {
    // Number value = chartDataDefinition.getValue(row, column);
    // Comparable rowKey = chartDataDefinition.getRowKey(row);
    // Comparable columnKey = chartDataDefinition.getColumnKey(column);
    // Element valueElement = chartElement.addElement("value2D");
    // //$NON-NLS-1$
    // valueElement.addElement("value").setText(value.toString());
    // //$NON-NLS-1$
    // valueElement.addElement("row-key").setText(rowKey.toString());
    // //$NON-NLS-1$
    // valueElement.addElement("column-key").setText(columnKey.toString());
    // //$NON-NLS-1$
    // }
    // }
    String mapString = ImageMapUtilities.getImageMap(mapName, info);
    // $NON-NLS-1$
    chartElement.addElement("imageMap").setText(mapString);
    // $NON-NLS-1$
    chartElement.addElement("image").setText(fileName);
    // }
    return result;
}
Also used : IPentahoRequestContext(org.pentaho.platform.api.engine.IPentahoRequestContext) DefaultPieDataset(org.jfree.data.general.DefaultPieDataset) StandardEntityCollection(org.jfree.chart.entity.StandardEntityCollection) StringWriter(java.io.StringWriter) Element(org.dom4j.Element) ChartRenderingInfo(org.jfree.chart.ChartRenderingInfo) Document(org.dom4j.Document) UnsupportedEncodingException(java.io.UnsupportedEncodingException) PrintWriter(java.io.PrintWriter)

Example 4 with StandardEntityCollection

use of org.jfree.chart.entity.StandardEntityCollection in project pentaho-platform by pentaho.

the class CategoryDatasetChartComponent method getXmlContent.

@Override
public Document getXmlContent() {
    // Create a document that describes the result
    Document result = DocumentHelper.createDocument();
    IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
    // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    setXslProperty("baseUrl", requestContext.getContextPath());
    // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    setXslProperty("fullyQualifiedServerUrl", PentahoSystem.getApplicationContext().getFullyQualifiedServerURL());
    // $NON-NLS-1$
    String mapName = "chart" + AbstractChartComponent.chartCount++;
    Document chartDefinition = jcrHelper.getSolutionDocument(definitionPath, RepositoryFilePermission.READ);
    if (chartDefinition == null) {
        // $NON-NLS-1$
        Element errorElement = result.addElement("error");
        errorElement.addElement("title").setText(// $NON-NLS-1$ //$NON-NLS-2$
        Messages.getInstance().getString("ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART"));
        // $NON-NLS-1$
        String message = Messages.getInstance().getString("CHARTS.ERROR_0001_CHART_DEFINIION_MISSING", definitionPath);
        // $NON-NLS-1$
        errorElement.addElement("message").setText(message);
        error(message);
        return result;
    }
    // create a pie definition from the XML definition
    dataDefinition = createChart(chartDefinition);
    if (dataDefinition == null) {
        // $NON-NLS-1$
        Element errorElement = result.addElement("error");
        errorElement.addElement("title").setText(// $NON-NLS-1$ //$NON-NLS-2$
        Messages.getInstance().getString("ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART"));
        // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        String message = Messages.getInstance().getString("CHARTS.ERROR_0002_CHART_DATA_MISSING", actionPath);
        // $NON-NLS-1$
        errorElement.addElement("message").setText(message);
        // System .out.println( result.asXML() );
        return result;
    }
    // create an image for the dial using the JFreeChart engine
    PrintWriter printWriter = new PrintWriter(new StringWriter());
    // we'll dispay the title in HTML so that the dial image does not have
    // to
    // accommodate it
    // $NON-NLS-1$
    String chartTitle = "";
    try {
        if (width == -1) {
            // $NON-NLS-1$
            width = Integer.parseInt(chartDefinition.selectSingleNode("/chart/width").getText());
        }
    } catch (NumberFormatException ignored) {
    // go with the default
    }
    try {
        if (height == -1) {
            // $NON-NLS-1$
            height = Integer.parseInt(chartDefinition.selectSingleNode("/chart/height").getText());
        }
    } catch (NumberFormatException ignored) {
    // go with the default
    }
    if (chartDefinition.selectSingleNode("/chart/" + AbstractChartComponent.URLTEMPLATE_NODE_NAME) != null) {
        // $NON-NLS-1$
        urlTemplate = // $NON-NLS-1$
        chartDefinition.selectSingleNode("/chart/" + AbstractChartComponent.URLTEMPLATE_NODE_NAME).getText();
    }
    if (chartDefinition.selectSingleNode("/chart/paramName") != null) {
        // $NON-NLS-1$
        // $NON-NLS-1$
        paramName = chartDefinition.selectSingleNode("/chart/paramName").getText();
    }
    // $NON-NLS-1$
    Element root = result.addElement("charts");
    DefaultCategoryDataset chartDataDefinition = (DefaultCategoryDataset) dataDefinition;
    if (chartDataDefinition.getRowCount() > 0) {
        // create temporary file names
        String[] tempFileInfo = createTempFile();
        String fileName = tempFileInfo[AbstractChartComponent.FILENAME_INDEX];
        String filePathWithoutExtension = tempFileInfo[AbstractChartComponent.FILENAME_WITHOUT_EXTENSION_INDEX];
        ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
        JFreeChartEngine.saveChart(chartDataDefinition, chartTitle, "", filePathWithoutExtension, width, height, JFreeChartEngine.OUTPUT_PNG, printWriter, info, // $NON-NLS-1$
        this);
        applyOuterURLTemplateParam();
        populateInfo(info);
        // $NON-NLS-1$
        Element chartElement = root.addElement("chart");
        // $NON-NLS-1$
        chartElement.addElement("mapName").setText(mapName);
        // $NON-NLS-1$
        chartElement.addElement("width").setText(Integer.toString(width));
        // $NON-NLS-1$
        chartElement.addElement("height").setText(Integer.toString(height));
        for (int row = 0; row < chartDataDefinition.getRowCount(); row++) {
            for (int column = 0; column < chartDataDefinition.getColumnCount(); column++) {
                Number value = chartDataDefinition.getValue(row, column);
                Comparable rowKey = chartDataDefinition.getRowKey(row);
                Comparable columnKey = chartDataDefinition.getColumnKey(column);
                // $NON-NLS-1$
                Element valueElement = chartElement.addElement("value2D");
                // $NON-NLS-1$
                valueElement.addElement("value").setText(value.toString());
                // $NON-NLS-1$
                valueElement.addElement("row-key").setText(rowKey.toString());
                // $NON-NLS-1$
                valueElement.addElement("column-key").setText(columnKey.toString());
            }
        }
        String mapString = ImageMapUtilities.getImageMap(mapName, info);
        // $NON-NLS-1$
        chartElement.addElement("imageMap").setText(mapString);
        // $NON-NLS-1$
        chartElement.addElement("image").setText(fileName);
    }
    return result;
}
Also used : Element(org.dom4j.Element) Document(org.dom4j.Document) IPentahoRequestContext(org.pentaho.platform.api.engine.IPentahoRequestContext) StandardEntityCollection(org.jfree.chart.entity.StandardEntityCollection) StringWriter(java.io.StringWriter) ChartRenderingInfo(org.jfree.chart.ChartRenderingInfo) DefaultCategoryDataset(org.jfree.data.category.DefaultCategoryDataset) PrintWriter(java.io.PrintWriter)

Example 5 with StandardEntityCollection

use of org.jfree.chart.entity.StandardEntityCollection in project pentaho-platform by pentaho.

the class DialChartComponent method getXmlContent.

@Override
public Document getXmlContent() {
    // Create a document that describes the result
    Document result = DocumentHelper.createDocument();
    IPentahoRequestContext requestContext = PentahoRequestContextHolder.getRequestContext();
    // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    setXslProperty("baseUrl", requestContext.getContextPath());
    // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
    setXslProperty("fullyQualifiedServerUrl", PentahoSystem.getApplicationContext().getFullyQualifiedServerURL());
    // $NON-NLS-1$
    String mapName = "chart" + AbstractChartComponent.chartCount++;
    Document chartDefinition = jcrHelper.getSolutionDocument(definitionPath, RepositoryFilePermission.READ);
    if (chartDefinition == null) {
        // $NON-NLS-1$
        Element errorElement = result.addElement("error");
        errorElement.addElement("title").setText(// $NON-NLS-1$ //$NON-NLS-2$
        Messages.getInstance().getString("ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART"));
        // $NON-NLS-1$
        String message = Messages.getInstance().getString("CHARTS.ERROR_0001_CHART_DEFINIION_MISSING", definitionPath);
        // $NON-NLS-1$
        errorElement.addElement("message").setText(message);
        error(message);
        return result;
    }
    dataDefinition = createChart(chartDefinition);
    if (dataDefinition == null) {
        // $NON-NLS-1$
        Element errorElement = result.addElement("error");
        errorElement.addElement("title").setText(// $NON-NLS-1$ //$NON-NLS-2$
        Messages.getInstance().getString("ABSTRACTCHARTEXPRESSION.ERROR_0001_ERROR_GENERATING_CHART"));
        // $NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
        String message = Messages.getInstance().getString("CHARTS.ERROR_0002_CHART_DATA_MISSING", actionPath);
        // $NON-NLS-1$
        errorElement.addElement("message").setText(message);
        // System .out.println( result.asXML() );
        return result;
    }
    // create an image for the dial using the JFreeChart engine
    PrintWriter printWriter = new PrintWriter(new StringWriter());
    // we'll dispay the title in HTML so that the dial image does not have
    // to
    // accommodate it
    // $NON-NLS-1$
    String chartTitle = "";
    try {
        if (width == -1) {
            // $NON-NLS-1$
            width = Integer.parseInt(chartDefinition.selectSingleNode("/chart/width").getText());
        }
        if (height == -1) {
            // $NON-NLS-1$
            height = Integer.parseInt(chartDefinition.selectSingleNode("/chart/height").getText());
        }
    } catch (Exception e) {
    // go with the default
    }
    if (chartDefinition.selectSingleNode("/chart/" + AbstractChartComponent.URLTEMPLATE_NODE_NAME) != null) {
        // $NON-NLS-1$
        urlTemplate = // $NON-NLS-1$
        chartDefinition.selectSingleNode("/chart/" + AbstractChartComponent.URLTEMPLATE_NODE_NAME).getText();
    }
    if (chartDefinition.selectSingleNode("/chart/paramName") != null) {
        // $NON-NLS-1$
        // $NON-NLS-1$
        paramName = chartDefinition.selectSingleNode("/chart/paramName").getText();
    }
    // $NON-NLS-1$
    Element root = result.addElement("charts");
    DefaultValueDataset chartDataDefinition = (DefaultValueDataset) dataDefinition;
    // if (dataDefinition.getRowCount() > 0) {
    // create temporary file names
    String[] tempFileInfo = createTempFile();
    String fileName = tempFileInfo[AbstractChartComponent.FILENAME_INDEX];
    String filePathWithoutExtension = tempFileInfo[AbstractChartComponent.FILENAME_WITHOUT_EXTENSION_INDEX];
    ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
    JFreeChartEngine.saveChart(chartDataDefinition, chartTitle, "", filePathWithoutExtension, width, height, JFreeChartEngine.OUTPUT_PNG, printWriter, info, // $NON-NLS-1$
    this);
    applyOuterURLTemplateParam();
    populateInfo(info);
    // $NON-NLS-1$
    Element chartElement = root.addElement("chart");
    // $NON-NLS-1$
    chartElement.addElement("mapName").setText(mapName);
    // $NON-NLS-1$
    chartElement.addElement("width").setText(Integer.toString(width));
    // $NON-NLS-1$
    chartElement.addElement("height").setText(Integer.toString(height));
    // for (int row = 0; row < chartDataDefinition.getRowCount(); row++) {
    // for (int column = 0; column < chartDataDefinition.getColumnCount(); column++) {
    // Number value = chartDataDefinition.getValue(row, column);
    // Comparable rowKey = chartDataDefinition.getRowKey(row);
    // Comparable columnKey = chartDataDefinition.getColumnKey(column);
    // Element valueElement = chartElement.addElement("value2D"); //$NON-NLS-1$
    // valueElement.addElement("value").setText(value.toString()); //$NON-NLS-1$
    // valueElement.addElement("row-key").setText(rowKey.toString()); //$NON-NLS-1$
    // valueElement.addElement("column-key").setText(columnKey.toString()); //$NON-NLS-1$
    // }
    // }
    String mapString = ImageMapUtilities.getImageMap(mapName, info);
    // $NON-NLS-1$
    chartElement.addElement("imageMap").setText(mapString);
    // $NON-NLS-1$
    chartElement.addElement("image").setText(fileName);
    // }
    return result;
}
Also used : DefaultValueDataset(org.jfree.data.general.DefaultValueDataset) IPentahoRequestContext(org.pentaho.platform.api.engine.IPentahoRequestContext) StandardEntityCollection(org.jfree.chart.entity.StandardEntityCollection) StringWriter(java.io.StringWriter) Element(org.dom4j.Element) ChartRenderingInfo(org.jfree.chart.ChartRenderingInfo) Document(org.dom4j.Document) PrintWriter(java.io.PrintWriter)

Aggregations

StandardEntityCollection (org.jfree.chart.entity.StandardEntityCollection)15 ChartRenderingInfo (org.jfree.chart.ChartRenderingInfo)8 PrintWriter (java.io.PrintWriter)7 StringWriter (java.io.StringWriter)7 Element (org.dom4j.Element)7 IPentahoRequestContext (org.pentaho.platform.api.engine.IPentahoRequestContext)7 Document (org.dom4j.Document)6 UnsupportedEncodingException (java.io.UnsupportedEncodingException)4 ChartEntity (org.jfree.chart.entity.ChartEntity)4 EntityCollection (org.jfree.chart.entity.EntityCollection)4 Rectangle2D (java.awt.geom.Rectangle2D)3 Iterator (java.util.Iterator)3 BlockResult (org.jfree.chart.block.BlockResult)3 EntityBlockParams (org.jfree.chart.block.EntityBlockParams)3 File (java.io.File)2 IOException (java.io.IOException)2 TitleEntity (org.jfree.chart.entity.TitleEntity)2 GradientPaint (java.awt.GradientPaint)1 Rectangle (java.awt.Rectangle)1 Shape (java.awt.Shape)1