001    /*
002     * Sonar, open source software quality management tool.
003     * Copyright (C) 2008-2011 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          }
123        }
124        return result;
125      }
126    
127    
128      protected void configureDimensions(String dimensions) {
129        try {
130          if (dimensions == null || dimensions.length() == 0) {
131            // Do nothing, default dimensions are already setted
132          } else if (dimensions.indexOf('x') == -1) {
133            int iDim = Integer.parseInt(dimensions);
134            setWidth(iDim);
135            setHeight(iDim);
136          } else {
137            StringTokenizer st = new StringTokenizer(dimensions, "x");
138            int iWidth = Integer.parseInt(st.nextToken());
139            int iHeight = iWidth;
140            if (st.hasMoreTokens()) {
141              iHeight = Integer.parseInt(st.nextToken());
142            }
143            setWidth(iWidth);
144            setHeight(iHeight);
145          }
146        }
147        catch (NumberFormatException e) {
148          // Do nothing, default dimensions are already setted
149        }
150      }
151    
152      protected void applyCommonParams() {
153        configureChartTitle(jfreechart, params.get(BaseChartWeb.CHART_PARAM_TITLE));
154        configureDimensions(params.get(BaseChartWeb.CHART_PARAM_DIMENSIONS));
155      }
156    
157    }