001/*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2008-2012 SonarSource
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02
019 */
020package org.sonar.server.charts.deprecated;
021
022import org.jfree.chart.JFreeChart;
023import org.jfree.chart.renderer.AbstractRenderer;
024
025import java.awt.*;
026import java.util.Map;
027import java.util.StringTokenizer;
028
029public abstract class BaseChartWeb extends BaseChart {
030
031  // Chart types
032  public static final String BAR_CHART_HORIZONTAL = "hb";
033  public static final String BAR_CHART_VERTICAL = "vb";
034  public static final String BAR_CHART_VERTICAL_CUSTOM = "cvb";
035  public static final String STACKED_BAR_CHART = "sb";
036  public static final String PIE_CHART = "p";
037  public static final String SPARKLINES_CHART = "sl";
038
039  // Chart params
040  public static final String CHART_PARAM_TYPE = "cht";
041  public static final String CHART_PARAM_VALUES = "chv";
042  public static final String CHART_PARAM_COLORS = "chc";
043  public static final String CHART_PARAM_RANGEMAX = "chrm";
044  public static final String CHART_PARAM_TITLE = "chti";
045  public static final String CHART_PARAM_DIMENSIONS = "chdi";
046  public static final String CHART_PARAM_RANGEAXIS_VISIBLE = "chrav";
047  public static final String CHART_PARAM_CATEGORIES = "chca";
048  public static final String CHART_PARAM_CATEGORIES_AXISMARGIN_VISIBLE = "chcav";
049  public static final String CHART_PARAM_CATEGORIES_AXISMARGIN_UPPER = "chcaamu";
050  public static final String CHART_PARAM_CATEGORIES_AXISMARGIN_LOWER = "chcaaml";
051  public static final String CHART_PARAM_SERIES = "chse";
052  public static final String CHART_PARAM_SERIES_AXISMARGIN_UPPER = "chseamu";
053  public static final String CHART_PARAM_SERIES_AXISMARGIN_LOWER = "chseaml";
054  public static final String CHART_PARAM_SERIES_AXISMARGIN_TICKUNIT = "chsetu";
055  public static final String CHART_PARAM_INSETS = "chins";
056  public static final String CHART_PARAM_OUTLINE_VISIBLE = "chov";
057  public static final String CHART_PARAM_OUTLINE_RANGEGRIDLINES_VISIBLE = "chorgv";
058
059  // Default labels
060  public static final String DEFAULT_NAME_CATEGORY = "category";
061  public static final String DEFAULT_NAME_SERIE = "serie";
062  public static final String DEFAULT_MESSAGE_NODATA = "No data available";
063
064  // Default values
065  public static final double DEFAULT_CATEGORIES_AXISMARGIN = 0.0;
066  public static final double DEFAULT_SERIES_AXISMARGIN = 0.0;
067
068  // Default dimensions
069  public static final int DEFAULT_WIDTH = 60;
070  public static final int DEFAULT_HEIGHT = 20;
071
072  // Default font
073  public static final Font DEFAULT_FONT = new Font("SansSerif", Font.PLAIN, 13);
074
075  protected JFreeChart jfreechart = null;
076  protected Map<String, String> params = null;
077
078  public BaseChartWeb(Map<String, String> params) {
079    super(DEFAULT_WIDTH, DEFAULT_HEIGHT);
080    this.params = params;
081  }
082
083  protected boolean isParamValueValid(String paramValue) {
084    return paramValue != null && paramValue.length() > 0;
085  }
086
087  protected double convertParamToDouble(String paramValue) {
088    return convertParamToDouble(paramValue, 0.0);
089  }
090  
091  protected void configureColors(String colors, AbstractRenderer renderer) {
092    try {
093      if (colors != null && colors.length() > 0) {
094        StringTokenizer stringTokenizer = new StringTokenizer(colors, ",");
095        int i = 0;
096        while (stringTokenizer.hasMoreTokens()) {
097          renderer.setSeriesPaint(i, Color.decode("0x" + stringTokenizer.nextToken()));
098          i++;
099        }
100      } else {
101        configureDefaultColors(renderer);
102      }
103    }
104    catch (Exception e) {
105      configureDefaultColors(renderer);
106    }
107  }
108
109  protected void configureDefaultColors(AbstractRenderer renderer) {
110    for (int i=0 ; i<COLORS.length ; i++) {
111      renderer.setSeriesPaint(i, COLORS[i]);
112    }
113  }
114
115  protected double convertParamToDouble(String paramValue, double paramDefault) {
116    double result = paramDefault;
117    if (isParamValueValid(paramValue)) {
118      try {
119        result = Double.parseDouble(paramValue);
120      }
121      catch (NumberFormatException e) {
122        // ignore
123      }
124    }
125    return result;
126  }
127
128
129  protected void configureDimensions(String dimensions) {
130    try {
131      if (dimensions == null || dimensions.length() == 0) {
132        // Do nothing, default dimensions are already setted
133      } else if (dimensions.indexOf('x') == -1) {
134        int iDim = Integer.parseInt(dimensions);
135        setWidth(iDim);
136        setHeight(iDim);
137      } else {
138        StringTokenizer st = new StringTokenizer(dimensions, "x");
139        int iWidth = Integer.parseInt(st.nextToken());
140        int iHeight = iWidth;
141        if (st.hasMoreTokens()) {
142          iHeight = Integer.parseInt(st.nextToken());
143        }
144        setWidth(iWidth);
145        setHeight(iHeight);
146      }
147    }
148    catch (NumberFormatException e) {
149      // Do nothing, default dimensions are already setted
150    }
151  }
152
153  protected void applyCommonParams() {
154    configureChartTitle(jfreechart, params.get(BaseChartWeb.CHART_PARAM_TITLE));
155    configureDimensions(params.get(BaseChartWeb.CHART_PARAM_DIMENSIONS));
156  }
157
158}