ingo@924: package de.intevation.flys.exports; ingo@924: ingo@924: import java.awt.BasicStroke; ingo@924: import java.awt.Color; ingo@924: ingo@924: import org.apache.log4j.Logger; ingo@924: ingo@924: import org.w3c.dom.Document; ingo@924: ingo@924: import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer; ingo@924: import org.jfree.data.xy.XYSeries; ingo@924: ingo@924: import de.intevation.artifacts.common.utils.XMLUtils; ingo@924: ingo@924: ingo@924: public class StyledXYSeries extends XYSeries { ingo@924: ingo@924: public static final String XPATH_LINE_COLOR = ingo@924: "/theme/field[@name='linecolor']/@default"; ingo@924: ingo@924: public static final String XPATH_LINE_SIZE = ingo@924: "/theme/field[@name='linesize']/@default"; ingo@924: ingo@924: ingo@924: protected Document theme; ingo@924: ingo@924: ingo@924: private static final Logger logger = Logger.getLogger(StyledXYSeries.class); ingo@924: ingo@924: ingo@924: ingo@924: public StyledXYSeries(String key, Document theme) { ingo@924: super(key); ingo@924: this.theme = theme; ingo@924: } ingo@924: ingo@924: ingo@924: public XYLineAndShapeRenderer applyTheme(XYLineAndShapeRenderer r, int idx){ ingo@924: applyLineColor(r, idx); ingo@924: applyLineSize(r, idx); ingo@924: ingo@924: r.setSeriesLinesVisible(idx, true); ingo@924: r.setSeriesShapesVisible(idx, false); ingo@924: ingo@924: return r; ingo@924: } ingo@924: ingo@924: ingo@924: protected void applyLineColor(XYLineAndShapeRenderer r, int idx) { ingo@924: String color = XMLUtils.xpathString(theme, XPATH_LINE_COLOR, null); ingo@924: ingo@924: if (color == null || color.length() == 0) { ingo@924: return; ingo@924: } ingo@924: ingo@924: String[] rgb = color.split(","); ingo@924: ingo@924: try { ingo@924: Color c = new Color( ingo@924: Integer.valueOf(rgb[0].trim()), ingo@924: Integer.valueOf(rgb[1].trim()), ingo@924: Integer.valueOf(rgb[2].trim())); ingo@924: ingo@924: logger.debug("Set series paint color: " + c.toString()); ingo@924: ingo@924: r.setSeriesPaint(idx, c); ingo@924: } ingo@924: catch (NumberFormatException nfe) { ingo@924: logger.warn("Unable to set color from string: '" + color + "'"); ingo@924: } ingo@924: } ingo@924: ingo@924: ingo@924: protected void applyLineSize(XYLineAndShapeRenderer r, int idx) { ingo@924: String size = XMLUtils.xpathString(theme, XPATH_LINE_SIZE, null); ingo@924: ingo@924: if (size == null || size.length() == 0) { ingo@924: return; ingo@924: } ingo@924: ingo@924: try { ingo@924: r.setSeriesStroke( ingo@924: idx, ingo@924: new BasicStroke(Integer.valueOf(size))); ingo@924: } ingo@924: catch (NumberFormatException nfe) { ingo@924: logger.warn("Unable to set line size from string: '" + size + "'"); ingo@924: } ingo@924: } ingo@924: } ingo@924: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :