Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java @ 3313:1a9ab048573a
Prevent nasty NPE.
flys-artifacts/trunk@5002 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Fri, 13 Jul 2012 19:01:03 +0000 |
parents | 46b9391b122a |
children | b0ba96bbf01d |
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.valueOf(fSize.length() > 0 ? fSize : "-1")); section.setFixed(Boolean.valueOf(fixation)); section.setLowerRange(Double.valueOf(low.length() > 0 ? low : "0")); section.setUpperRange(Double.valueOf(up.length() > 0 ? up : "0")); target.addAxisSection(section); } 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); if (logger.isDebugEnabled()) { logger.debug("Found chart title: '" + title + "'"); logger.debug("Found chart subtitle: '" + sub + "'"); logger.debug("Found chart grid: '" + grid + "'"); } chartSection.setTitle(title); chartSection.setSubtitle(sub); chartSection.setDisplayGird(Boolean.valueOf(grid)); 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 :