Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java @ 2024:2bb160b2768e
New facet, will ease converting other facets to be able to contribute to area computations.
flys-artifacts/trunk@3481 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Felix Wolfsteller <felix.wolfsteller@intevation.de> |
---|---|
date | Tue, 20 Dec 2011 09:00:51 +0000 |
parents | 3e703d134bbe |
children | 2ae0627f956e |
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 Section chartSection; protected Section legendSection; 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(Section chartSection) { Section 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 Section 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(Section legendSection) { Section 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 Section getLegendSection() { return legendSection; } /** * Adds a Section for a new axis of the chart. * * @param axisSection The Section specific for a chart axis. */ public void addAxisSection(Section axisSection) { if (axisSection != null) { axesSection.addSubsection(axisSection); } } /** * 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); 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); if (logger.isDebugEnabled()) { logger.debug("Found legend visibility: '" + vis + "'"); logger.debug("Found legend font size : '" + fSize + "'"); } section.setVisibility(Boolean.valueOf(vis)); section.setFontSize(Integer.valueOf(fSize.length() > 0 ? fSize : "-1")); target.setLegendSection(section); } } // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :