# HG changeset patch # User Ingo Weinzierl # Date 1324029392 0 # Node ID 3e703d134bbeaf631ad78d269bc244e2c839dac2 # Parent 85132c9edd64fef305075575464948d31fd62f1e Parse the Settings of each Output during Collection's describe() operation. flys-artifacts/trunk@3431 c6561f87-3c4e-4783-a992-168aeb5c3f6f diff -r 85132c9edd64 -r 3e703d134bbe flys-artifacts/ChangeLog --- a/flys-artifacts/ChangeLog Fri Dec 16 09:19:11 2011 +0000 +++ b/flys-artifacts/ChangeLog Fri Dec 16 09:56:32 2011 +0000 @@ -1,3 +1,11 @@ +2011-12-16 Ingo Weinzierl + + * src/main/java/de/intevation/flys/exports/ChartSettings.java: Added new + functions that allow parsing a ChartSettings object from DOM Node. + + * src/main/java/de/intevation/flys/collections/AttributeParser.java: Parse + the Settings of each Output. + 2011-12-16 Ingo Weinzierl * src/main/java/de/intevation/flys/collections/CollectionAttribute.java: diff -r 85132c9edd64 -r 3e703d134bbe flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeParser.java --- a/flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeParser.java Fri Dec 16 09:19:11 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/collections/AttributeParser.java Fri Dec 16 09:56:32 2011 +0000 @@ -17,10 +17,12 @@ import de.intevation.artifactdatabase.state.DefaultOutput; import de.intevation.artifactdatabase.state.Facet; import de.intevation.artifactdatabase.state.Output; +import de.intevation.artifactdatabase.state.Settings; import de.intevation.artifacts.common.utils.XMLUtils; import de.intevation.flys.artifacts.model.ManagedDomFacet; +import de.intevation.flys.exports.ChartSettings; /** * Access parts of the Attribute parts of a FLYSCollections description @@ -115,10 +117,27 @@ attribute.addOutput(name, o); } + parseSettings(out, name); parseItems(out, name); } + protected void parseSettings(Node out, String outname) { + Node settingsNode = (Node) XMLUtils.xpath( + out, "settings", + XPathConstants.NODE, + null); + + if (settingsNode == null) { + logger.debug("No Settings found for Output '" + outname + "'"); + return; + } + + Settings settings = ChartSettings.parse(settingsNode); + attribute.setSettings(outname, settings); + } + + protected void parseItems(Node out, String outname) { NodeList themes = (NodeList) XMLUtils.xpath( out, "art:facet", diff -r 85132c9edd64 -r 3e703d134bbe flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java --- a/flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java Fri Dec 16 09:19:11 2011 +0000 +++ b/flys-artifacts/src/main/java/de/intevation/flys/exports/ChartSettings.java Fri Dec 16 09:56:32 2011 +0000 @@ -1,5 +1,14 @@ 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; @@ -10,6 +19,8 @@ */ public class ChartSettings extends DefaultSettings { + private static final Logger logger = Logger.getLogger(ChartSettings.class); + protected Section chartSection; protected Section legendSection; protected Section axesSection; @@ -88,5 +99,115 @@ axesSection.addSubsection(axisSection); } } + + + /** + * Parses the settings from settings. The result is a new + * ChartSettings instance. + * + * @param settings A settings node. + * + * @return a new ChartSettings 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 :