Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java @ 4205:0dd8963cec9c
Set also the width of the GaugeTree when resizing the GaugePanel
GWT is no longer able to calculate and set the correct width of the GaugeTree since
the GaugeTree is added via a Canvas wrapper. Therefore set the width manually
when resizing the GaugeTree.
author | Björn Ricks <bjoern.ricks@intevation.de> |
---|---|
date | Mon, 22 Oct 2012 15:33:16 +0200 |
parents | b7867c03760a |
children |
line wrap: on
line source
package de.intevation.flys.exports; import javax.xml.xpath.XPathConstants; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.apache.log4j.Logger; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.artifactdatabase.state.DefaultSection; import de.intevation.artifactdatabase.state.DefaultSettings; import de.intevation.artifactdatabase.state.Section; /** * @author <a href="mailto:ingo.weinzierl@intevation.de">Ingo Weinzierl</a> */ public class ChartSettings extends DefaultSettings { private static final Logger logger = Logger.getLogger(ChartSettings.class); protected ChartSection chartSection; protected LegendSection legendSection; protected ExportSection exportSection; protected Section axesSection; public ChartSettings() { super(); axesSection = new DefaultSection("axes"); addSection(axesSection); } /** * Sets the chart section. Old chart sections are removed. * * @param chartSection A new Section that stores chart specific attributes. */ public void setChartSection(ChartSection chartSection) { ChartSection oldChartSection = getChartSection(); if (oldChartSection != null) { removeSection(oldChartSection); } this.chartSection = chartSection; addSection(chartSection); } /** * Returns the Section that stores chart specific attributes. * * @return the Section that stores chart specific attributes. */ public ChartSection getChartSection() { return chartSection; } /** * Sets the legend section. Old legend sections are removed. * * @param legendSection A new Section that stores legend specific * attributes. */ public void setLegendSection(LegendSection legendSection) { LegendSection oldLegendSection = getLegendSection(); if (oldLegendSection != null) { removeSection(oldLegendSection); } this.legendSection = legendSection; addSection(legendSection); } /** * Returns the Section that stores legend specific attributes. * * @return the Section that stores legend specific attributes. */ public LegendSection getLegendSection() { return legendSection; } /** * Sets the export section. Old export sections are removed. * * @param exportSection A new Section that stores export specific * attributes. */ public void setExportSection(ExportSection exportSection) { ExportSection oldExportSection = getExportSection(); if (oldExportSection != null) { removeSection(oldExportSection); } this.exportSection = exportSection; addSection(exportSection); } /** * Returns the Section that stores export specific attributes. * * @return the Section that stores export specific attributes. */ public ExportSection getExportSection() { return exportSection; } /** * Adds a Section for a new axis of the chart. * * @param axisSection The Section specific for a chart axis. */ public void addAxisSection(AxisSection axisSection) { if (axisSection != null) { axesSection.addSubsection(axisSection); } } /** * This method returns an AxisSection specified by <i>axisId</i> or null if * no AxisSection is existing with identifier <i>axisId</i>. * * @param axisId The identifier of the wanted AxisSection. * * @return the AxisSection specified by <i>axisId</i> or null. */ public AxisSection getAxisSection(String axisId) { for (int i = 0, n = axesSection.getSubsectionCount(); i < n; i++) { AxisSection as = (AxisSection) axesSection.getSubsection(i); String id = as.getIdentifier(); if (id != null && id.equals(axisId)) { return as; } } return null; } /** * Parses the settings from <i>settings</i>. The result is a new * ChartSettings instance. * * @param settings A <i>settings</i> node. * * @return a new <i>ChartSettings</i> instance. */ public static ChartSettings parse(Node settings) { if (settings == null) { logger.warn("Tried to parse ChartSettings from empty Node!"); return null; } ChartSettings chartSettings = new ChartSettings(); parseAxes(chartSettings, settings); parseChart(chartSettings, settings); parseLegend(chartSettings, settings); parseExport(chartSettings, settings); return chartSettings; } protected static void parseAxes(ChartSettings target, Node settings) { NodeList axesList = (NodeList) XMLUtils.xpath( settings, "axes/axis", XPathConstants.NODESET, null); int num = axesList != null ? axesList.getLength() : 0; if (num <= 0) { logger.debug("No axis sections found."); return; } for (int i = 0; i < num; i++) { parseAxis(target, axesList.item(i)); } } protected static void parseAxis(ChartSettings target, Node axis) { AxisSection section = new AxisSection(); String id = XMLUtils.xpathString(axis, "id", null); String label = XMLUtils.xpathString(axis, "label", null); String fSize = XMLUtils.xpathString(axis, "font-size", null); String fixation = XMLUtils.xpathString(axis, "fixation", null); String low = XMLUtils.xpathString(axis, "lower", null); String up = XMLUtils.xpathString(axis, "upper", null); if (logger.isDebugEnabled()) { logger.debug("Fount axis id: '" + id + "'"); logger.debug("Fount axis label: '" + label + "'"); logger.debug("Fount axis font size: '" + fSize + "'"); logger.debug("Fount axis fixation: '" + fixation + "'"); logger.debug("Fount axis lower: '" + low + "'"); logger.debug("Fount axis upper: '" + up + "'"); } section.setIdentifier(id); section.setLabel(label); section.setFontSize(Integer.parseInt(fSize.length() > 0 ? fSize : "-1")); section.setFixed(Boolean.valueOf(fixation)); section.setLowerRange(Double.parseDouble(low.length() > 0 ? low : "0")); section.setUpperRange(Double.parseDouble(up.length() > 0 ? up : "0")); target.addAxisSection(section); } /** * From document chart create ChartSection and populate it with attributes. * Give this object to target as chartsection. */ protected static void parseChart(ChartSettings target, Node chart) { ChartSection chartSection = new ChartSection(); String title = XMLUtils.xpathString(chart, "chart/title", null); String sub = XMLUtils.xpathString(chart, "chart/subtitle", null); String grid = XMLUtils.xpathString(chart, "chart/display-grid", null); String logo = XMLUtils.xpathString(chart, "chart/display-logo", null); String placeh = XMLUtils.xpathString(chart, "chart/logo-placeh", null); String placev = XMLUtils.xpathString(chart, "chart/logo-placev", null); if (logger.isDebugEnabled()) { logger.debug("Found chart title: '" + title + "'"); logger.debug("Found chart subtitle: '" + sub + "'"); logger.debug("Found chart grid: '" + grid + "'"); logger.debug("Found chart logo: '" + logo + "'"); logger.debug("Found chart logo placeh: '" + placeh + "'"); logger.debug("Found chart logo placev: '" + placev + "'"); } chartSection.setTitle(title); chartSection.setSubtitle(sub); chartSection.setDisplayGrid(Boolean.valueOf(grid)); chartSection.setDisplayLogo(logo); chartSection.setLogoHPlacement(placeh); chartSection.setLogoVPlacement(placev); target.setChartSection(chartSection); } protected static void parseLegend(ChartSettings target, Node legend) { LegendSection section = new LegendSection(); String vis = XMLUtils.xpathString(legend, "legend/visibility", null); String fSize = XMLUtils.xpathString(legend, "legend/font-size", null); String lthre = XMLUtils.xpathString(legend, "legend/aggregation-threshold", null); if (logger.isDebugEnabled()) { logger.debug("Found legend visibility: '" + vis + "'"); logger.debug("Found legend font size : '" + fSize + "'"); logger.debug("Found legend aggregation threshold : '" + lthre + "'"); } section.setVisibility(Boolean.valueOf(vis)); section.setFontSize(Integer.valueOf(fSize.length() > 0 ? fSize : "-1")); section.setAggregationThreshold(Integer.valueOf(lthre.length() >0 ? lthre : "-1")); target.setLegendSection(section); } protected static void parseExport(ChartSettings target, Node export) { ExportSection section = new ExportSection(); String width = XMLUtils.xpathString(export, "export/width", null); String height = XMLUtils.xpathString(export, "export/height", null); if (logger.isDebugEnabled()) { logger.debug("Found export width : '" + width + "'"); logger.debug("Found export height: '" + height + "'"); } section.setWidth(Integer.valueOf(width.length() > 0 ? width : "-1")); section.setHeight(Integer.valueOf(height.length() > 0 ? height : "-1")); target.setExportSection(section); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :