view flys-artifacts/src/main/java/de/intevation/flys/exports/StyledAreaSeriesCollection.java @ 2047:0318fa6f0844

Make use of first attributes specified in the ChartSettings. NOTE: work is still in progress. flys-artifacts/trunk@3535 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Ingo Weinzierl <ingo.weinzierl@intevation.de>
date Fri, 23 Dec 2011 08:57:25 +0000
parents 5746c74c69cf
children ca8997aa683e
line wrap: on
line source
package de.intevation.flys.exports;

import java.awt.Color;
import java.awt.Paint;

import org.apache.log4j.Logger;

import org.w3c.dom.Document;

import org.jfree.data.xy.XYSeriesCollection;

import de.intevation.flys.utils.ThemeUtil;
import de.intevation.flys.jfree.StableXYDifferenceRenderer;


/**
 * One or more dataseries to draw a polygon (either "open up/downwards", or
 * the area between two curves), a theme-document and further display options.
 * The theme-document will later "style" the graphical representation.
 * The display options can be used to control the z-order and the axis of the 
 * dataset.
 */
public class StyledAreaSeriesCollection extends XYSeriesCollection {
    /** Mode, how to draw/which areas to fill. */
    public enum FILL_MODE {UNDER, ABOVE, BETWEEN};

    /** MODE in use. */
    protected FILL_MODE mode;

    /** The theme-document with attributes about actual visual representation. */
    protected Document theme;

    /** Own logger. */
    private static final Logger logger =
        Logger.getLogger(StyledAreaSeriesCollection.class);


    /**
     * @param theme the theme-document.
     */
    public StyledAreaSeriesCollection(Document theme) {
        this.theme = theme;
        this.mode = FILL_MODE.BETWEEN;
   }


    /** Gets the Fill mode. */
    public FILL_MODE getMode() {
        return this.mode;
    }


    /** Sets the Fill mode. */
    public void setMode(FILL_MODE fMode) {
        this.mode = fMode;
    }


    /**
     * Applies line color, size and type attributes to renderer, also
     * whether to draw lines and/or points.
     */
    public StableXYDifferenceRenderer applyTheme(
        StableXYDifferenceRenderer renderer
    ) {
        applyFillColor(renderer);
        applyShowShape(renderer);

        return renderer;
    }


    /**
     * Blindly (for now) apply the postiviepaint of renderer.
     */
    protected void applyFillColor(StableXYDifferenceRenderer renderer) {
        // Get color.
        Color paint = ThemeUtil.parseFillColorField(theme);
        // Get half-transparency flag.
        if (ThemeUtil.parseTransparency(theme)) {
            paint = new Color(paint.getRed(), paint.getGreen(), paint.getBlue(),
                128);
        }
        if (paint != null && this.getMode() == FILL_MODE.ABOVE) {
            renderer.setPositivePaint(paint);
            renderer.setNegativePaint(new Color(0,0,0,0));
        }
        else if (paint != null && this.getMode() == FILL_MODE.UNDER) {
            renderer.setNegativePaint(paint);
            renderer.setPositivePaint(new Color(0,0,0,0));
        }
        else {
            renderer.setPositivePaint(paint);
            renderer.setNegativePaint(paint);
        }
    }

    /**
     * Blindly (for now) apply the postiviepaint of renderer.
     */
    protected void applyShowShape(StableXYDifferenceRenderer renderer) {
        boolean show = ThemeUtil.parseShowBorder(theme);
        renderer.setShapesVisible(show);
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org