use of org.jfree.chart.ChartRenderingInfo in project adempiere by adempiere.
the class WChartEditor method render.
private void render(JFreeChart chart) {
ChartRenderingInfo info = new ChartRenderingInfo();
int width = 400;
int height = chartModel.getWinHeight();
BufferedImage bi = chart.createBufferedImage(width, height, BufferedImage.TRANSLUCENT, info);
try {
byte[] bytes = EncoderUtil.encode(bi, ImageFormat.PNG, true);
AImage image = new AImage("", bytes);
Imagemap myImage = new Imagemap();
Panel panel = getComponent();
myImage.setContent(image);
if (panel.getPanelchildren() != null) {
panel.getPanelchildren().getChildren().clear();
panel.getPanelchildren().appendChild(myImage);
} else {
Panelchildren pc = new Panelchildren();
panel.appendChild(pc);
pc.appendChild(myImage);
}
int count = 0;
for (Iterator<?> it = info.getEntityCollection().getEntities().iterator(); it.hasNext(); ) {
ChartEntity entity = (ChartEntity) it.next();
String key = null;
String seriesName = null;
if (entity instanceof CategoryItemEntity) {
CategoryItemEntity item = ((CategoryItemEntity) entity);
Comparable<?> colKey = item.getColumnKey();
Comparable<?> rowKey = item.getRowKey();
if (colKey != null && rowKey != null) {
key = colKey.toString();
seriesName = rowKey.toString();
}
} else if (entity instanceof PieSectionEntity) {
Comparable<?> sectionKey = ((PieSectionEntity) entity).getSectionKey();
if (sectionKey != null) {
key = sectionKey.toString();
}
}
if (entity instanceof XYItemEntity) {
XYItemEntity item = ((XYItemEntity) entity);
if (item.getDataset() instanceof TimeSeriesCollection) {
TimeSeriesCollection data = (TimeSeriesCollection) item.getDataset();
TimeSeries series = data.getSeries(item.getSeriesIndex());
TimeSeriesDataItem dataitem = series.getDataItem(item.getItem());
seriesName = series.getKey().toString();
key = dataitem.getPeriod().toString();
}
}
if (key == null)
continue;
Area area = new Area();
myImage.appendChild(area);
area.setCoords(entity.getShapeCoords());
area.setShape(entity.getShapeType());
area.setTooltiptext(entity.getToolTipText());
area.setId(count + "_WG__" + seriesName + "__" + key);
count++;
}
myImage.addEventListener(Events.ON_CLICK, new EventListener() {
public void onEvent(Event event) throws Exception {
MouseEvent me = (MouseEvent) event;
String areaId = me.getArea();
if (areaId != null) {
String[] strs = areaId.split("__");
if (strs.length == 3) {
chartMouseClicked(strs[2], strs[1]);
}
}
}
});
} catch (Exception e) {
log.log(Level.SEVERE, "", e);
}
}
use of org.jfree.chart.ChartRenderingInfo in project adempiere by adempiere.
the class WGraph method render.
// loadData
private void render(JFreeChart chart) {
ChartRenderingInfo info = new ChartRenderingInfo();
int width = 560;
int height = 400;
if (zoomFactor > 0) {
width = width * zoomFactor / 100;
height = height * zoomFactor / 100;
}
if (m_hideTitle) {
chart.setTitle("");
}
BufferedImage bi = chart.createBufferedImage(width, height, BufferedImage.TRANSLUCENT, info);
try {
byte[] bytes = EncoderUtil.encode(bi, ImageFormat.PNG, true);
AImage image = new AImage("", bytes);
Imagemap myImage = new Imagemap();
myImage.setContent(image);
if (panel.getPanelchildren() != null) {
panel.getPanelchildren().getChildren().clear();
panel.getPanelchildren().appendChild(myImage);
} else {
Panelchildren pc = new Panelchildren();
panel.appendChild(pc);
pc.appendChild(myImage);
}
int count = 0;
for (Iterator<?> it = info.getEntityCollection().getEntities().iterator(); it.hasNext(); ) {
ChartEntity entity = (ChartEntity) it.next();
String key = null;
if (entity instanceof CategoryItemEntity) {
Comparable<?> colKey = ((CategoryItemEntity) entity).getColumnKey();
if (colKey != null) {
key = colKey.toString();
}
} else if (entity instanceof PieSectionEntity) {
Comparable<?> sectionKey = ((PieSectionEntity) entity).getSectionKey();
if (sectionKey != null) {
key = sectionKey.toString();
}
}
if (key == null) {
continue;
}
Area area = new Area();
myImage.appendChild(area);
area.setCoords(entity.getShapeCoords());
area.setShape(entity.getShapeType());
area.setTooltiptext(entity.getToolTipText());
area.setId(count + "_WG_" + key);
count++;
}
myImage.addEventListener(Events.ON_CLICK, new EventListener() {
public void onEvent(Event event) throws Exception {
MouseEvent me = (MouseEvent) event;
String areaId = me.getArea();
if (areaId != null) {
for (int i = 0; i < list.size(); i++) {
String s = "_WG_" + list.get(i).getLabel();
if (areaId.endsWith(s)) {
chartMouseClicked(i);
return;
}
}
}
}
});
} catch (Exception e) {
log.log(Level.SEVERE, "", e);
}
}
use of org.jfree.chart.ChartRenderingInfo in project processdash by dtuma.
the class CGIChartBase method writeContents.
/** Generate CGI chart output. */
@Override
protected void writeContents() throws IOException {
// get the data for display
buildData();
chromeless = (parameters.get("chromeless") != null);
JFreeChart chart = createChart();
int width = getIntSetting("width");
int height = getIntSetting("height");
Color initGradColor = getColorSetting("initGradColor");
Color finalGradColor = getColorSetting("finalGradColor");
chart.setBackgroundPaint(new GradientPaint(0, 0, initGradColor, width, height, finalGradColor));
if (parameters.get("hideOutline") != null)
chart.getPlot().setOutlinePaint(INVISIBLE);
String title = getSetting("title");
if (chromeless || title == null || title.length() == 0)
chart.setTitle((TextTitle) null);
else {
chart.setTitle(Translator.translate(title));
String titleFontSize = getSetting("titleFontSize");
if (titleFontSize != null)
try {
float fontSize = Float.parseFloat(titleFontSize);
TextTitle t = chart.getTitle();
t.setFont(t.getFont().deriveFont(fontSize));
} catch (Exception tfe) {
}
}
if (chromeless || parameters.get("hideLegend") != null)
chart.removeLegend();
else {
LegendTitle l = chart.getLegend();
String legendFontSize = getSetting("legendFontSize");
if (l != null && legendFontSize != null)
try {
float fontSize = Float.parseFloat(legendFontSize);
l.setItemFont(l.getItemFont().deriveFont(fontSize));
} catch (Exception lfe) {
}
}
chart.getPlot().setNoDataMessage(resources.getString("No_Data_Message"));
Axis xAxis = getHorizontalAxis(chart);
if (xAxis != null) {
if (parameters.get("hideTickLabels") != null || parameters.get("hideXTickLabels") != null) {
xAxis.setTickLabelsVisible(false);
} else if (parameters.get("tickLabelFontSize") != null || parameters.get("xTickLabelFontSize") != null) {
String tfs = getParameter("xTickLabelFontSize");
if (tfs == null)
tfs = getParameter("tickLabelFontSize");
float fontSize = Float.parseFloat(tfs);
xAxis.setTickLabelFont(xAxis.getTickLabelFont().deriveFont(fontSize));
}
}
Axis yAxis = getVerticalAxis(chart);
if (yAxis != null) {
if (parameters.get("hideTickLabels") != null || parameters.get("hideYTickLabels") != null) {
yAxis.setTickLabelsVisible(false);
} else if (parameters.get("tickLabelFontSize") != null || parameters.get("yTickLabelFontSize") != null) {
String tfs = getParameter("yTickLabelFontSize");
if (tfs == null)
tfs = getParameter("tickLabelFontSize");
float fontSize = Float.parseFloat(tfs);
yAxis.setTickLabelFont(yAxis.getTickLabelFont().deriveFont(fontSize));
}
}
String axisFontSize = getSetting("axisLabelFontSize");
if (axisFontSize != null)
try {
float fontSize = Float.parseFloat(axisFontSize);
if (xAxis != null)
xAxis.setLabelFont(xAxis.getLabelFont().deriveFont(fontSize));
if (yAxis != null)
yAxis.setLabelFont(yAxis.getLabelFont().deriveFont(fontSize));
} catch (Exception afs) {
}
ChartRenderingInfo info = (isHtmlMode() ? new ChartRenderingInfo() : null);
BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = img.createGraphics();
if ("auto".equals(getSetting("titleFontSize")))
maybeAdjustTitleFontSize(chart, g2, width);
chart.draw(g2, new Rectangle2D.Double(0, 0, width, height), info);
g2.dispose();
String outputFormat = getSetting("outputFormat");
OutputStream imgOut;
if (isHtmlMode()) {
imgOut = PngCache.getOutputStream();
} else {
imgOut = outStream;
}
ImageIO.write(img, outputFormat, imgOut);
imgOut.flush();
imgOut.close();
if (isHtmlMode())
writeImageHtml(width, height, imgOut.hashCode(), info);
}
use of org.jfree.chart.ChartRenderingInfo 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;
}
use of org.jfree.chart.ChartRenderingInfo 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;
}
Aggregations