com.xpn.xwiki.plugin.charts.params.ChartParams.java Source code

Java tutorial

Introduction

Here is the source code for com.xpn.xwiki.plugin.charts.params.ChartParams.java

Source

/*
 * See the NOTICE file distributed with this work for additional
 * information regarding copyright ownership.
 *
 * This is free software; you can redistribute it and/or modify it
 * under the terms of the GNU Lesser General Public License as
 * published by the Free Software Foundation; either version 2.1 of
 * the License, or (at your option) any later version.
 *
 * This software is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this software; if not, write to the Free
 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
 * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
 */
package com.xpn.xwiki.plugin.charts.params;

import java.awt.Color;
import java.awt.Font;
import java.awt.Shape;
import java.awt.Stroke;
import java.awt.geom.Point2D;
import java.security.InvalidParameterException;
import java.text.DateFormat;
import java.text.NumberFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.DateTickMarkPosition;
import org.jfree.chart.axis.DateTickUnit;
import org.jfree.chart.axis.NumberTickUnit;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.RangeType;
import org.jfree.ui.HorizontalAlignment;
import org.jfree.ui.RectangleAnchor;
import org.jfree.ui.RectangleEdge;
import org.jfree.ui.RectangleInsets;
import org.jfree.ui.VerticalAlignment;

import com.xpn.xwiki.plugin.charts.exceptions.MissingMandatoryParamException;
import com.xpn.xwiki.plugin.charts.exceptions.ParamException;

public class ChartParams {
    private Map paramMap = new HashMap(); // Map<String,ChartParam>

    private Map valueMap = new HashMap(); // Map<String,Object>

    private ChartParams parent;

    public static final String TYPE = "type";

    public static final String SOURCE = "source";

    public static final String SERIES = "series";

    public static final String HEIGHT = "height";

    public static final String WIDTH = "width";

    public static final String IMAGE_ATTRIBUTES = "image_attributes";

    public static final String LINK_ATTRIBUTES = "link_attributes";

    public static final String RENDERER = "renderer";

    public static final String RENDERER_COLOR = "renderer_color";

    public static final String RENDERER_STROKE = "renderer_stroke";

    public static final String RENDERER_SHAPE = "renderer_shape";

    public static final String RENDERER_FILL_COLOR = "renderer_fill_color";

    public static final String RENDERER_OUTLINE_COLOR = "renderer_outline_color";

    public static final String RENDERER_OUTLINE_STROKE = "renderer_outline_stroke";

    public static final String RENDERER_ITEM_LABEL_VISIBLE = "renderer_item_label_visible";

    public static final String RENDERER_ITEM_LABEL_COLOR = "renderer_item_label_color";

    public static final String RENDERER_ITEM_LABEL_FONT = "renderer_item_label_font";

    public static final String RENDERER_SERIES_VISIBLE = "series_visible";

    public static final String RENDERER_SERIES_VISIBLE_IN_LEGEND = "series_visible_in_legend";

    public static final String RENDERER_SERIES_COLORS = "series_colors";

    public static final String RENDERER_SERIES_STROKES = "series_strokes";

    public static final String RENDERER_SERIES_SHAPES = "series_shapes";

    public static final String RENDERER_SERIES_FILL_COLORS = "series_fill_colors";

    public static final String RENDERER_SERIES_OUTLINE_COLORS = "series_outline_colors";

    public static final String RENDERER_SERIES_OUTLINE_STROKES = "series_outline_strokes";

    public static final String RENDERER_SERIES_ITEM_LABEL_VISIBLES = "series_item_label_visibles";

    public static final String RENDERER_SERIES_ITEM_LABEL_COLORS = "series_item_label_colors";

    public static final String RENDERER_SERIES_ITEM_LABEL_FONTS = "series_item_label_fonts";

    public static final String BORDER_VISIBLE = "border_visible";

    public static final String BORDER_COLOR = "border_color";

    public static final String BORDER_STROKE = "border_stroke";

    public static final String TITLE_PREFIX = "title";

    public static final String SUBTITLE_PREFIX = "subtitle";

    public static final String TITLE_SUFFIX = "";

    public static final String TITLE_POSITION_SUFFIX = "_position";

    public static final String TITLE_HORIZONTAL_ALIGNMENT_SUFFIX = "_horizontal_alignment";

    public static final String TITLE_VERTICAL_ALIGNMENT_SUFFIX = "_vertical_alignment";

    public static final String TITLE_COLOR_SUFFIX = "_color";

    public static final String TITLE_BACKGROUND_COLOR_SUFFIX = "_background_color";

    public static final String TITLE_FONT_SUFFIX = "_font";

    public static final String TITLE_PADDING_SUFFIX = "_padding";

    public static final String TITLE_URL_SUFFIX = "_url";

    public static final String ANTI_ALIAS = "anti_alias";

    public static final String BACKGROUND_COLOR = "background_color";

    public static final String PLOT_BACKGROUND_COLOR = "plot_background_color";

    public static final String PLOT_BACKGROUND_ALPHA = "plot_background_alpha";

    public static final String PLOT_FOREGROUND_ALPHA = "plot_foreground_alpha";

    public static final String PLOT_INSERTS = "plot_inserts";

    public static final String PLOT_OUTLINE_COLOR = "plot_outline_color";

    public static final String PLOT_OUTLINE_STROKE = "plot_outline_stroke";

    public static final String XYPLOT_ORIENTATION = "plot_orientation";

    public static final String XYPLOT_QUADRANT_ORIGIN = "plot_quadrant_origin";

    public static final String XYPLOT_QUADRANT_COLORS = "plot_quadrant_colors";

    public static final String LEGEND_BACKGROUND_COLOR = "legend_background_color";

    public static final String LEGEND_ITEM_FONT = "legend_item_font";

    public static final String LEGEND_ITEM_LABEL_PADDING = "legend_item_label_padding";

    public static final String LEGEND_ITEM_GRAPHIC_ANCHOR = "legend_item_graphic_anchor";

    public static final String LEGEND_ITEM_GRAPHIC_EDGE = "legend_item_graphic_edge";

    public static final String LEGEND_ITEM_GRAPHIC_LOCATION = "legend_item_graphic_location";

    public static final String LEGEND_ITEM_GRAPHIC_PADDING = "legend_item_graphic_padding";

    public static final String AXIS_DOMAIN_PREFIX = "domain_axis_";

    public static final String AXIS_RANGE_PREFIX = "range_axis_";

    public static final String AXIS_VISIBLE_SUFIX = "visible";

    public static final String AXIS_LABEL_SUFFIX = "label";

    public static final String AXIS_LABEL_FONT_SUFFIX = "label_font";

    public static final String AXIS_LABEL_COLOR_SUFFIX = "label_color";

    public static final String AXIS_LABEL_INSERTS_SUFFIX = "label_inserts";

    public static final String AXIS_LINE_VISIBLE_SUFFIX = "line_visible";

    public static final String AXIS_LINE_COLOR_SUFFIX = "line_color";

    public static final String AXIS_LINE_STROKE_SUFFIX = "line_stroke";

    public static final String AXIS_TICK_LABEL_VISIBLE_SUFFIX = "tick_label_visible";

    public static final String AXIS_TICK_LABEL_FONT_SUFFIX = "tick_label_font";

    public static final String AXIS_TICK_LABEL_COLOR_SUFFIX = "tick_label_color";

    public static final String AXIS_TICK_LABEL_INSERTS_SUFFIX = "tick_label_inserts";

    public static final String AXIS_TICK_MARK_VISIBLE_SUFFIX = "tick_mark_visible";

    public static final String AXIS_TICK_MARK_INSIDE_LENGTH_SUFFIX = "tick_mark_inside_length";

    public static final String AXIS_TICK_MARK_OUTSIDE_LENGTH_SUFFIX = "tick_mark_outside_length";

    public static final String AXIS_TICK_MARK_COLOR_SUFFIX = "tick_mark_color";

    public static final String AXIS_TICK_MARK_STROKE_SUFFIX = "tick_mark_stroke";

    public static final String PLOTXY_AXIS_GRIDLINE_VISIBLE_SUFFIX = "gridline_visible";

    public static final String PLOTXY_AXIS_GRIDLINE_COLOR_SUFFIX = "gridline_color";

    public static final String PLOTXY_AXIS_GRIDLINE_STROKE_SUFFIX = "gridline_stroke";

    public static final String VALUE_AXIS_AUTO_RANGE_SUFFIX = "auto_range";

    public static final String VALUE_AXIS_AUTO_RANGE_MIN_SIZE_SUFFIX = "auto_range_min_size";

    public static final String VALUE_AXIS_AUTO_TICK_UNIT_SUFFIX = "auto_tick_unit";

    public static final String VALUE_AXIS_LOWER_BOUND_SUFFIX = "lower_bound";

    public static final String VALUE_AXIS_UPPER_BOUND_SUFFIX = "upper_bound";

    public static final String AXIS_LOWER_MARGIN_SUFFIX = "lower_margin";

    public static final String AXIS_UPPER_MARGIN_SUFFIX = "upper_margin";

    public static final String VALUE_AXIS_VERTICAL_TICK_LABELS_SUFFIX = "vertical_tick_labels";

    public static final String NUMBER_AXIS_AUTO_RANGE_INCLUDES_ZERO_SUFFIX = "auto_range_includes_zero";

    public static final String NUMBER_AXIS_AUTO_RANGE_STICKY_ZERO_SUFFIX = "auto_range_sticky_zero";

    public static final String NUMBER_AXIS_RANGE_TYPE_SUFFIX = "range_type";

    public static final String NUMBER_AXIS_NUMBER_TICK_UNIT_SUFFIX = "number_tick_unit";

    public static final String NUMBER_AXIS_NUMBER_FORMAT_OVERRIDE_SUFFIX = "number_format";

    public static final String DATE_AXIS_DATE_FORMAT_OVERRIDE_SUFFIX = "date_format_override";

    public static final String DATE_AXIS_UPPER_DATE_SUFFIX = "upper_date";

    public static final String DATE_AXIS_LOWER_DATE_SUFFIX = "lower_date";

    public static final String DATE_AXIS_DATE_TICK_MARK_POSITION_SUFFIX = "tick_mark_position";

    public static final String DATE_AXIS_DATE_TICK_UNIT_SUFFIX = "date_tick_unit";

    public static final String CATEGORY_AXIS_CATEGORY_MARGIN_SUFFIX = "category_margin";

    public static final String CATEGORY_AXIS_LABEL_POSITIONS_SUFFIX = "label_positions";

    public static final String CATEGORY_AXIS_LABEL_POSITION_OFFSET_SUFFIX = "label_position_offset";

    public static final String CATEGORY_AXIS_MAXIMUM_LABEL_LINES_SUFFIX = "maximum_label_lines";

    public static final String CATEGORY_AXIS_MAXIMUM_LABEL_WIDTH_RATIO_SUFFIX = "maximul_label_width_ratio";

    public static final String TIME_PERIOD_CLASS = "time_period";

    public static final String DATE_FORMAT = "date_format";

    public ChartParams() {
        this((ChartParams) null);
    }

    public ChartParams(Map map) throws ParamException {
        this(map, null, false);
    }

    public ChartParams(Map map, ChartParams parent) throws ParamException {
        this(map, parent, false);
    }

    public ChartParams(Map map, ChartParams parent, boolean discardNumbers) throws ParamException {
        this(parent);
        Iterator it = map.keySet().iterator();
        while (it.hasNext()) {
            String name = (String) it.next();
            String value = (String) map.get(name);
            if (discardNumbers) {
                try {
                    Integer.parseInt(name);
                } catch (NumberFormatException nfe) {
                    set(name.trim(), value.trim());
                }
            } else {
                set(name.trim(), value.trim());
            }
        }
    }

    public ChartParams(ChartParams parent) {
        this.parent = parent;
        addParam(new StringChartParam(TYPE, false));
        addParam(new MapChartParam(SOURCE, false));

        addParam(new IntegerChartParam(HEIGHT));
        addParam(new IntegerChartParam(WIDTH));
        addParam(new MapChartParam(LINK_ATTRIBUTES));
        addParam(new MapChartParam(IMAGE_ATTRIBUTES));

        addParam(new RendererClassChartParam(RENDERER));
        addParam(new ColorChartParam(RENDERER_COLOR));
        addParam(new StrokeChartParam(RENDERER_STROKE));
        addParam(new ShapeChartParam(RENDERER_SHAPE));
        addParam(new ColorChartParam(RENDERER_FILL_COLOR));
        addParam(new ColorChartParam(RENDERER_OUTLINE_COLOR));
        addParam(new StrokeChartParam(RENDERER_OUTLINE_STROKE));
        addParam(new BooleanChartParam(RENDERER_ITEM_LABEL_VISIBLE));
        addParam(new ColorChartParam(RENDERER_ITEM_LABEL_COLOR));
        addParam(new FontChartParam(RENDERER_ITEM_LABEL_FONT));
        addParam(new BooleanChartParam(RENDERER_SERIES_VISIBLE));
        addParam(new BooleanChartParam(RENDERER_SERIES_VISIBLE_IN_LEGEND));

        addParam(new ListChartParam(new ColorChartParam(RENDERER_SERIES_COLORS)));
        addParam(new ListChartParam(new StrokeChartParam(RENDERER_SERIES_STROKES)));
        addParam(new ListChartParam(new ShapeChartParam(RENDERER_SERIES_SHAPES)));
        addParam(new ListChartParam(new ColorChartParam(RENDERER_SERIES_FILL_COLORS)));
        addParam(new ListChartParam(new ColorChartParam(RENDERER_SERIES_OUTLINE_COLORS)));
        addParam(new ListChartParam(new StrokeChartParam(RENDERER_SERIES_OUTLINE_STROKES)));
        addParam(new ListChartParam(new BooleanChartParam(RENDERER_SERIES_ITEM_LABEL_VISIBLES)));
        addParam(new ListChartParam(new ColorChartParam(RENDERER_SERIES_ITEM_LABEL_COLORS)));
        addParam(new ListChartParam(new FontChartParam(RENDERER_SERIES_ITEM_LABEL_FONTS)));

        addParam(new BooleanChartParam(BORDER_VISIBLE));
        addParam(new ColorChartParam(BORDER_COLOR));
        addParam(new StrokeChartParam(BORDER_STROKE));

        addTitleParams(TITLE_PREFIX);
        addTitleParams(SUBTITLE_PREFIX);

        addParam(new BooleanChartParam(ANTI_ALIAS));
        addParam(new ColorChartParam(BACKGROUND_COLOR));

        addParam(new ColorChartParam(PLOT_BACKGROUND_COLOR));
        addParam(new FloatChartParam(PLOT_BACKGROUND_ALPHA));
        addParam(new FloatChartParam(PLOT_FOREGROUND_ALPHA));
        addParam(new RectangleInsetsChartParam(PLOT_INSERTS));
        addParam(new ColorChartParam(PLOT_OUTLINE_COLOR));
        addParam(new StrokeChartParam(PLOT_OUTLINE_STROKE));

        addParam(new PlotOrientationChartParam(XYPLOT_ORIENTATION));
        addParam(new Point2DChartParam(XYPLOT_QUADRANT_ORIGIN));
        addParam(new ListChartParam(new ColorChartParam(XYPLOT_QUADRANT_COLORS)));

        addParam(new ColorChartParam(LEGEND_BACKGROUND_COLOR));
        addParam(new FontChartParam(LEGEND_ITEM_FONT));
        addParam(new RectangleInsetsChartParam(LEGEND_ITEM_LABEL_PADDING));
        addParam(new RectangleAnchorChartParam(LEGEND_ITEM_GRAPHIC_ANCHOR));
        addParam(new RectangleEdgeChartParam(LEGEND_ITEM_GRAPHIC_EDGE));
        addParam(new RectangleAnchorChartParam(LEGEND_ITEM_GRAPHIC_LOCATION));
        addParam(new RectangleInsetsChartParam(LEGEND_ITEM_GRAPHIC_PADDING));

        addAxisParams(AXIS_DOMAIN_PREFIX);
        addAxisParams(AXIS_RANGE_PREFIX);

        addParam(new TimePeriodClassChartParam(TIME_PERIOD_CLASS));
        addParam(new DateFormatChartParam(DATE_FORMAT));
    }

    private void addAxisParams(String prefix) {
        addParam(new BooleanChartParam(prefix + AXIS_VISIBLE_SUFIX));

        addParam(new BooleanChartParam(prefix + AXIS_LINE_VISIBLE_SUFFIX));
        addParam(new ColorChartParam(prefix + AXIS_LINE_COLOR_SUFFIX));
        addParam(new StrokeChartParam(prefix + AXIS_LINE_STROKE_SUFFIX));

        addParam(new StringChartParam(prefix + AXIS_LABEL_SUFFIX));
        addParam(new FontChartParam(prefix + AXIS_LABEL_FONT_SUFFIX));
        addParam(new ColorChartParam(prefix + AXIS_LABEL_COLOR_SUFFIX));
        addParam(new RectangleInsetsChartParam(prefix + AXIS_LABEL_INSERTS_SUFFIX));

        addParam(new BooleanChartParam(prefix + AXIS_TICK_LABEL_VISIBLE_SUFFIX));
        addParam(new FontChartParam(prefix + AXIS_TICK_LABEL_FONT_SUFFIX));
        addParam(new ColorChartParam(prefix + AXIS_TICK_LABEL_COLOR_SUFFIX));
        addParam(new RectangleInsetsChartParam(prefix + AXIS_TICK_LABEL_INSERTS_SUFFIX));

        addParam(new BooleanChartParam(prefix + AXIS_TICK_MARK_VISIBLE_SUFFIX));
        addParam(new FloatChartParam(prefix + AXIS_TICK_MARK_INSIDE_LENGTH_SUFFIX));
        addParam(new FloatChartParam(prefix + AXIS_TICK_MARK_OUTSIDE_LENGTH_SUFFIX));
        addParam(new ColorChartParam(prefix + AXIS_TICK_MARK_COLOR_SUFFIX));
        addParam(new StrokeChartParam(prefix + AXIS_TICK_MARK_STROKE_SUFFIX));

        addParam(new BooleanChartParam(prefix + PLOTXY_AXIS_GRIDLINE_VISIBLE_SUFFIX));
        addParam(new ColorChartParam(prefix + PLOTXY_AXIS_GRIDLINE_COLOR_SUFFIX));
        addParam(new StrokeChartParam(prefix + PLOTXY_AXIS_GRIDLINE_STROKE_SUFFIX));

        addParam(new BooleanChartParam(prefix + VALUE_AXIS_AUTO_RANGE_SUFFIX));
        addParam(new DoubleChartParam(prefix + VALUE_AXIS_AUTO_RANGE_MIN_SIZE_SUFFIX));
        addParam(new BooleanChartParam(prefix + VALUE_AXIS_AUTO_TICK_UNIT_SUFFIX));
        addParam(new DoubleChartParam(prefix + VALUE_AXIS_LOWER_BOUND_SUFFIX));
        addParam(new DoubleChartParam(prefix + VALUE_AXIS_UPPER_BOUND_SUFFIX));
        addParam(new DoubleChartParam(prefix + AXIS_LOWER_MARGIN_SUFFIX));
        addParam(new DoubleChartParam(prefix + AXIS_UPPER_MARGIN_SUFFIX));
        addParam(new BooleanChartParam(prefix + VALUE_AXIS_VERTICAL_TICK_LABELS_SUFFIX));

        addParam(new BooleanChartParam(prefix + NUMBER_AXIS_AUTO_RANGE_INCLUDES_ZERO_SUFFIX));
        addParam(new BooleanChartParam(prefix + NUMBER_AXIS_AUTO_RANGE_STICKY_ZERO_SUFFIX));
        addParam(new RangeTypeChartParam(prefix + NUMBER_AXIS_RANGE_TYPE_SUFFIX));
        addParam(new NumberTickUnitChartParam(prefix + NUMBER_AXIS_NUMBER_TICK_UNIT_SUFFIX));
        addParam(new NumberFormatChartParam(prefix + NUMBER_AXIS_NUMBER_FORMAT_OVERRIDE_SUFFIX));

        addParam(new DateFormatChartParam(prefix + DATE_AXIS_DATE_FORMAT_OVERRIDE_SUFFIX));
        addParam(new DateChartParam(prefix + DATE_AXIS_LOWER_DATE_SUFFIX));
        addParam(new DateChartParam(prefix + DATE_AXIS_UPPER_DATE_SUFFIX));
        addParam(new DateTickMarkPositionChartParam(prefix + DATE_AXIS_DATE_TICK_MARK_POSITION_SUFFIX));
        addParam(new DateTickUnitChartParam(prefix + DATE_AXIS_DATE_TICK_UNIT_SUFFIX));

        addParam(new DoubleChartParam(prefix + CATEGORY_AXIS_CATEGORY_MARGIN_SUFFIX));
        addParam(new CategoryLabelPositionsChartParam(prefix + CATEGORY_AXIS_LABEL_POSITIONS_SUFFIX));
        addParam(new IntegerChartParam(prefix + CATEGORY_AXIS_LABEL_POSITION_OFFSET_SUFFIX));
        addParam(new IntegerChartParam(prefix + CATEGORY_AXIS_MAXIMUM_LABEL_LINES_SUFFIX));
        addParam(new FloatChartParam(prefix + CATEGORY_AXIS_MAXIMUM_LABEL_WIDTH_RATIO_SUFFIX));
    }

    private void addTitleParams(String prefix) {
        addParam(new StringChartParam(prefix + TITLE_SUFFIX));
        addParam(new ColorChartParam(prefix + TITLE_BACKGROUND_COLOR_SUFFIX));
        addParam(new RectangleEdgeChartParam(prefix + TITLE_POSITION_SUFFIX));
        addParam(new HorizontalAlignmentChartParam(prefix + TITLE_HORIZONTAL_ALIGNMENT_SUFFIX));
        addParam(new VerticalAlignmentChartParam(prefix + TITLE_VERTICAL_ALIGNMENT_SUFFIX));
        addParam(new ColorChartParam(prefix + TITLE_COLOR_SUFFIX));
        addParam(new FontChartParam(prefix + TITLE_FONT_SUFFIX));
        addParam(new RectangleInsetsChartParam(prefix + TITLE_PADDING_SUFFIX));
    }

    public void addParam(ChartParam param) {
        paramMap.put(param.getName(), param);
    }

    public void set(String name, String value) throws ParamException {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null) {
            valueMap.put(name, param.convert(value));
        } else {
            valueMap.put(name, value);
        }
    }

    protected void set(String name, Object obj) throws ParamException {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (obj == null || param.getType().isInstance(obj)) {
            valueMap.put(name, obj);
        } else {
            throw new InvalidParameterException(
                    "Invalid value type for parameter " + param.getName() + " ; expected type: " + param.getType());
        }
    }

    public void check() throws ParamException {
        Iterator it = paramMap.values().iterator();
        while (it.hasNext()) {
            ChartParam param = (ChartParam) it.next();
            if (!param.isOptional() && valueMap.get(param.getName()) == null) {
                throw new MissingMandatoryParamException(
                        "No value given for mandatory parameter " + param.getName());
            }
        }
    }

    public Object get(String name) {
        Object result = valueMap.get(name);
        if (result != null) {
            return result;
        } else if (parent != null) {
            return parent.get(name);
        } else {
            return null;
        }
    }

    public String getString(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param == null || param.getType() == String.class) {
            return (String) get(name);
        } else {
            return null;
        }
    }

    public Integer getInteger(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Integer.class) {
            return (Integer) get(name);
        } else {
            return null;
        }
    }

    public Float getFloat(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Float.class) {
            return (Float) get(name);
        } else {
            return null;
        }
    }

    public Double getDouble(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Double.class) {
            return (Double) get(name);
        } else {
            return null;
        }
    }

    public Boolean getBoolean(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Boolean.class) {
            return (Boolean) get(name);
        } else {
            return null;
        }
    }

    public Color getColor(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Color.class) {
            return (Color) get(name);
        } else {
            return null;
        }
    }

    public Stroke getStroke(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Stroke.class) {
            return (Stroke) get(name);
        } else {
            return null;
        }
    }

    public RectangleEdge getRectangleEdge(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == RectangleEdge.class) {
            return (RectangleEdge) get(name);
        } else {
            return null;
        }
    }

    public HorizontalAlignment getHorizontalAlignment(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == HorizontalAlignment.class) {
            return (HorizontalAlignment) get(name);
        } else {
            return null;
        }
    }

    public VerticalAlignment getVerticalAlignment(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == VerticalAlignment.class) {
            return (VerticalAlignment) get(name);
        } else {
            return null;
        }
    }

    public Font getFont(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Font.class) {
            return (Font) get(name);
        } else {
            return null;
        }
    }

    public RectangleInsets getRectangleInsets(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == RectangleInsets.class) {
            return (RectangleInsets) get(name);
        } else {
            return null;
        }
    }

    public RectangleAnchor getRectangleAnchor(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == RectangleAnchor.class) {
            return (RectangleAnchor) get(name);
        } else {
            return null;
        }
    }

    public PlotOrientation getPlotOrientation(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == PlotOrientation.class) {
            return (PlotOrientation) get(name);
        } else {
            return null;
        }
    }

    public Point2D getPoint2D(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Point2D.class) {
            return (Point2D) get(name);
        } else {
            return null;
        }
    }

    public Shape getShape(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Shape.class) {
            return (Shape) get(name);
        } else {
            return null;
        }
    }

    // public Range getRange(String name) {
    // ChartParam param = (ChartParam)paramMap.get(name);
    // if (param != null && param.getType() == Range.class) {
    // return (Range)get(name);
    // } else {
    // return null;
    // }
    // }

    public RangeType getRangeType(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == RangeType.class) {
            return (RangeType) get(name);
        } else {
            return null;
        }
    }

    public NumberTickUnit getNumberTickUnit(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == NumberTickUnit.class) {
            return (NumberTickUnit) get(name);
        } else {
            return null;
        }
    }

    public NumberFormat getNumberFormat(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == NumberFormat.class) {
            return (NumberFormat) get(name);
        } else {
            return null;
        }
    }

    public DateFormat getDateFormat(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == DateFormat.class) {
            return (DateFormat) get(name);
        } else {
            return null;
        }
    }

    public Date getDate(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Date.class) {
            return (Date) get(name);
        } else {
            return null;
        }
    }

    public DateTickMarkPosition getDateTickMarkPosition(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == DateTickMarkPosition.class) {
            return (DateTickMarkPosition) get(name);
        } else {
            return null;
        }
    }

    public DateTickUnit getDateTickUnit(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == DateTickUnit.class) {
            return (DateTickUnit) get(name);
        } else {
            return null;
        }
    }

    public Class getClass(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Class.class) {
            return (Class) get(name);
        } else {
            return null;
        }
    }

    public CategoryLabelPositions getCategoryLabelPositions(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == CategoryLabelPositions.class) {
            return (CategoryLabelPositions) get(name);
        } else {
            return null;
        }
    }

    public List getList(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == List.class) {
            return (List) get(name);
        } else {
            return null;
        }
    }

    public Map getMap(String name) {
        ChartParam param = (ChartParam) paramMap.get(name);
        if (param != null && param.getType() == Map.class) {
            return (Map) get(name);
        } else {
            return null;
        }
    }

    @Override
    public String toString() {
        StringBuffer sb = new StringBuffer();
        Iterator it = valueMap.keySet().iterator();
        while (it.hasNext()) {
            String name = (String) it.next();
            sb.append(name + "=");
            sb.append(valueMap.get(name).toString());
            sb.append("\n");
        }
        return sb.toString();
    }
}