Mercurial > dive4elements > river
view flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java @ 2089:0da8874bd378
Added initial state to map artifact to be able to advance and step back.
The map artifact overrides describe() to have the complete UI information in the
describe response document.
flys-artifacts/trunk@3613 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Raimund Renkert <raimund.renkert@intevation.de> |
---|---|
date | Fri, 06 Jan 2012 12:02:10 +0000 |
parents | 76eeb3b4358e |
children | 46b9391b122a |
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); 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); } 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 :