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     */
020    package org.sonar.server.charts.deprecated;
021    
022    import org.jfree.chart.JFreeChart;
023    import org.jfree.chart.renderer.AbstractRenderer;
024    
025    import java.awt.*;
026    import java.util.Map;
027    import java.util.StringTokenizer;
028    
029    public 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    }