Package it.eng.spagobi.engines.chart.bo.charttypes.barcharts

Source Code of it.eng.spagobi.engines.chart.bo.charttypes.barcharts.BarCharts

/**

SpagoBI - The Business Intelligence Free Platform

Copyright (C) 2005-2008 Engineering Ingegneria Informatica S.p.A.

This library 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 library 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 library; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA

**/




package it.eng.spagobi.engines.chart.bo.charttypes.barcharts;

import it.eng.spago.base.SourceBean;
import it.eng.spago.base.SourceBeanAttribute;
import it.eng.spagobi.engines.chart.bo.ChartImpl;
import it.eng.spagobi.engines.chart.utils.DataSetAccessFunctions;
import it.eng.spagobi.engines.chart.utils.DatasetMap;
import it.eng.spagobi.engines.chart.utils.StyleLabel;

import java.awt.Color;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Vector;

import org.apache.log4j.Logger;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.Dataset;

/**   @author Giulio Gavardi
*     giulio.gavardi@eng.it
*/




public class BarCharts extends ChartImpl {

  Map confParameters;
  String categoryLabel="";
  String valueLabel="";
  Integer numberCatVisualization=null;
  Integer numberSerVisualization=null;
  boolean dynamicNumberCatVisualization=false;

  boolean rangeIntegerValues=false;

  // <PARAMETER name="enable_tooltips" value="true" />
  boolean enableToolTips=false

  /** mapping name_serie => color*/
  HashMap colorMap=null// keeps user selected colors// serie position - color
  /** Colors in order for series (override color Map)*/
  Vector<Color> orderColorVector = null;
  HashMap seriesNumber=null; //track serie name with number position (to preserve color)
  HashMap seriesCaptions=null;
  int categoriesNumber=0;
  HashMap categories;
  //int currentSerie=-1;
  Vector currentSeries=null;
  private static transient Logger logger=Logger.getLogger(BarCharts.class);
  Vector seriesNames=null;
  Vector hiddenSeries=null;

  // keep the order of the series in the datase
  ArrayList<String> seriesOrder=null;

  StyleLabel styleXaxesLabels;
  StyleLabel styleYaxesLabels;
  StyleLabel styleValueLabels;

  // three booleans that read from template if has to be filter series, cats groups and categories with slider
  boolean filterCatGroups=true;
  boolean filterSeries=true;
  boolean filterCategories=true;
  String filterStyle="";

  // store if specified the maximum bar width
  Double maxBarWidth=null;

  // Enable if true/Disable if false select all and unselect all buttons on filter series form
  boolean filterSeriesButtons=true;

  boolean showValueLabels=false;
  String valueLabelsPosition="inside";


  HashMap catGroups=null; // only if filterCatGroups is set to true, trace cat_name /cat_group_name
  Vector currentCatGroups=null;
  Vector catGroupNames=null;

  String rangeAxisLocation=null;

  Integer firstAxisUB = null;
  Integer firstAxisLB = null;
  Integer secondAxisUB = null;
  Integer secondAxisLB = null;

  // Parameters

  /** Label for category Axis */
  public static final String CATEGORY_LABEL = "category_label";
  /** Label for value Axis */
  public static final String VALUE_LABEL = "value_label";
  /** Number of categories visualization (both) */
  public static final String N_CAT_VISUALIZATION = "n_cat_visualization";
  public static final String N_VISUALIZATION = "n_visualization";
  /** If true enable dynamic choice of numbers of categories to view*/
  public static final String DYNAMIC_N_VISUALIZATION = "dynamic_n_visualization";
  /** Number of series visualization*/
  public static final String N_SER_VISUALIZATION = "n_ser_visualization";
  /** If true enables filtering of cat  Groups*/
  public static final String FILTER_CAT_GROUPS = "filter_cat_groups";
  /** If true enables filtering of series*/
  public static final String FILTER_SERIES = "filter_series";
  /** If true shows select all and deselect all buttons from serie filters*/
  public static final String FILTER_SERIES_BUTTONS = "filter_series_buttons";
  /** If true enables filtering of categories*/
  public static final String FILTER_CATEGORIES = "filter_categories";
  /** If true show value labels*/
  public static final String SHOW_VALUE_LABLES = "show_value_labels";
  /** value labels position: values inside and outside*/
  public static final String VALUE_LABELS_POSITION = "value_labels_position";
  /** If true enables tooltips*/
  public static final String ENABLE_TOOLTIPS = "enable_tooltips";
  /** the maximum bar width, which is specified as a percentage of the available space for all bars
   * For Example setting to 0.05 will ensure that the bars never exceed five per cent of the lenght of the axis
   * */
  public static final String MAXIMUM_BAR_WIDTH = "maximum_bar_width";
  /** Range Integer; If this string equals true on the range axis only int values appear
   * Possible Values: TRUE or FALSE (the same as null), Default is False*/
  public static final String RANGE_INTEGER_VALUES = "range_integer_values";

  /** the location of the range axis.
   * Possibe values:  BOTTOM_OR_LEFT, BOTTOM_OR_RIGHT, TOP_OR_RIGHT, TOP_OR_LEFT
   * This parameter is avalaible only for those charts with one single axis*/
  public static final String RANGE_AXIS_LOCATION = "range_axis_location";

  /** name of the tag that specifies color for series in order of apparition*/
  public static final String SERIES_ORDER_COLORS = "SERIES_ORDER_COLORS";

  /** name of the tag that specifies color for each serie name */
  public static final String SERIES_COLORS = "SERIES_COLORS";

  /** name of the tag that specifies color for each serie name */
  public static final String FIRST_AXIS_UB = "first_axis_ub";
  public static final String FIRST_AXIS_LB = "first_axis_lb";
  public static final String SECOND_AXIS_UB = "second_axis_ub";
  public static final String SECOND_AXIS_LB = "second_axis_lb";




  /**
   * Inherited by IChart: calculates chart value.
   *
   * @return the dataset
   *
   * @throws Exception the exception
   */

  public DatasetMap calculateValue() throws Exception {
    logger.debug("IN");
    String res=DataSetAccessFunctions.getDataSetResultFromId(profile, getData(),parametersObject);
    categories=new HashMap();
    seriesCaptions=new LinkedHashMap();

    DefaultCategoryDataset dataset = new DefaultCategoryDataset();

    SourceBean sbRows=SourceBean.fromXMLString(res);
    List listAtts=sbRows.getAttributeAsList("ROW");


    // run all categories (one for each row)
    categoriesNumber=0;
    seriesNames=new Vector();
    catGroupNames=new Vector();
    //categories.put(new Integer(0), "All Categories");

    if(filterCatGroups==true){
      catGroups=new HashMap();
    }


    boolean first=true;

    // run all dataset rows
    for (Iterator iterator = listAtts.iterator(); iterator.hasNext();) {
      SourceBean category = (SourceBean) iterator.next();
      List atts=category.getContainedAttributes();

      if(first){
        if (name.indexOf("$F{") >= 0){
          setTitleParameter(atts);
        }
        if (getSubName()!= null && getSubName().indexOf("$F") >= 0){
          setSubTitleParameter(atts);
        }
        first=false;
      }


      HashMap series=new HashMap();

      String catValue="";
      String cat_group_name="";

      String name="";
      String value="";



      int contSer = 0;
      //run all the attributes in a row, to define series pertaining to a category!
      for (Iterator iterator2 = atts.iterator(); iterator2.hasNext();) {
        SourceBeanAttribute object = (SourceBeanAttribute) iterator2.next();

        name=new String(object.getKey());
        value=new String((String)object.getValue());

        // the one targeted x is the category name
        if(name.equalsIgnoreCase("x"))
        {
          catValue=value;
          categoriesNumber=categoriesNumber+1;
          categories.put(new Integer(categoriesNumber),value);
        }
        else if(name.equalsIgnoreCase("cat_group")){
          cat_group_name=value;
        }
        else if (this.getNumberSerVisualization().intValue() > 0 && contSer < this.getNumberSerVisualization().intValue()){
          // map containing the series
          series.put(name, value);
          contSer++;
        }
        else if(seriesLabelsMap!=null){
          String serieLabel = (String)seriesLabelsMap.get(name);
          if (serieLabel != null){
            series.put(serieLabel,value);
            seriesCaptions.put(serieLabel,name);
          }
        }
        else
          series.put(name, value);

      }
      // if a category group was found add it
      if(!cat_group_name.equalsIgnoreCase("") && !catValue.equalsIgnoreCase("") && catGroups!=null)
      { 
        catGroups.put(catValue, cat_group_name);
        if(!(catGroupNames.contains(cat_group_name))){
          catGroupNames.add(cat_group_name);}
      }

      // add series to dataset only if not hidden
      for (Iterator iterator3 = series.keySet().iterator(); iterator3.hasNext();) {
        String nameS = (String) iterator3.next();
        String labelS = "";
        if(!hiddenSeries.contains(nameS)){
          if(seriesLabelsMap != null && (seriesCaptions != null && seriesCaptions.size()>0)){
            nameS = (String)(seriesCaptions.get(nameS));
            labelS = (String)seriesLabelsMap.get(nameS);
          }
          else
            labelS = nameS;

          String valueS=(String)series.get(labelS);
          if(labelS!=null && valueS!=null && !valueS.equals("null") && !valueS.equals("")){
            //orig dataset.addValue(Double.valueOf(valueS).doubleValue(), nameS, catValue);
            dataset.addValue(Double.valueOf(valueS).doubleValue(), labelS, catValue);
            /*orig if(!seriesNames.contains(nameS)){
              seriesNames.add(nameS);
            }*/
            if(!seriesNames.contains(labelS)){
              seriesNames.add(labelS);
            }
          }
        }
      }

    }
    if (listAtts.size() == 0){
      if (name.indexOf("$F{") >= 0){
        setTitleParameter("");
      }
      if (getSubName()!= null && getSubName().indexOf("$F") >= 0){
        setSubTitleParameter("");
      }
    }


    logger.debug("OUT");
    DatasetMap datasets=new DatasetMap();
    datasets.addDataset("1",dataset);
    return datasets;
  }


  /**
   * Calculates chart value;
   *
   *
   * public Dataset calculateValue(String cat, Map parameters) throws Exception {
   * logger.debug("IN");
   * String res=DataSetAccessFunctions.getDataSetResult(profile, getData(),parameters);
   *
   * DefaultCategoryDataset dataset = new DefaultCategoryDataset();
   *
   * SourceBean sbRows=SourceBean.fromXMLString(res);
   * List listAtts=sbRows.getAttributeAsList("ROW");
   *
   *
   * // run all categories (one for each row)
   * categoriesNumber=0;
   * for (Iterator iterator = listAtts.iterator(); iterator.hasNext();) {
   * SourceBean category = (SourceBean) iterator.next();
   * List atts=category.getContainedAttributes();
   *
   * HashMap series=new HashMap();
   * String catValue="";
   *
   * String name="";
   * String value="";
   *
   * //run all the attributes, to define series!
   * for (Iterator iterator2 = atts.iterator(); iterator2.hasNext();) {
   * SourceBeanAttribute object = (SourceBeanAttribute) iterator2.next();
   *
   * name=new String(object.getKey());
   * value=new String((String)object.getValue());
   * if(name.equalsIgnoreCase("x"))catValue=value;
   * else series.put(name, value);
   * }
   * for (Iterator iterator3 = series.keySet().iterator(); iterator3.hasNext();) {
   * String nameS = (String) iterator3.next();
   * String valueS=(String)series.get(nameS);
   * dataset.addValue(Double.valueOf(valueS).doubleValue(), nameS, catValue);
   * categoriesNumber=categoriesNumber+1;
   * }
   *
   * }
   * logger.debug("OUT");
   * return dataset;
   * }
   *
   * @param content the content
   */

  public void configureChart(SourceBean content) {
    logger.debug("IN");
    super.configureChart(content);
    confParameters = new HashMap();
    SourceBean confSB = (SourceBean)content.getAttribute("CONF");

    if(confSB==null) return;
    List confAttrsList = confSB.getAttributeAsList("PARAMETER");

    Iterator confAttrsIter = confAttrsList.iterator();
    while(confAttrsIter.hasNext()) {
      SourceBean param = (SourceBean)confAttrsIter.next();
      String nameParam = (String)param.getAttribute("name");
      String valueParam = (String)param.getAttribute("value");
      confParameters.put(nameParam, valueParam);
   

    if(confParameters.get("category_label")!=null){ 
      categoryLabel=(String)confParameters.get("category_label");
    }
    else
    {
      //categoryLabel="category";
      categoryLabel="";
    }

    if(confParameters.get(VALUE_LABEL)!=null){ 
      valueLabel=(String)confParameters.get(VALUE_LABEL);
      String tmpValueLabel = valueLabel;
      while (!tmpValueLabel.equals("")){
        if (tmpValueLabel.indexOf("$P{") >= 0){
          String parName = tmpValueLabel.substring(tmpValueLabel.indexOf("$P{")+3, tmpValueLabel.indexOf("}"));

          String parValue = (parametersObject.get(parName)==null)?"":(String)parametersObject.get(parName);
          parValue = parValue.replaceAll("\'", "");

          if(parValue.equals("%")) parValue = "";
          int pos = tmpValueLabel.indexOf("$P{"+parName+"}") + (parName.length()+4);
          valueLabel = valueLabel.replace("$P{" + parName + "}", parValue);
          tmpValueLabel = tmpValueLabel.substring(pos);
        }
        else
          tmpValueLabel = "";
      }
      setValueLabel(valueLabel);
    }
    else
    {
      //valueLabel="values";
      setValueLabel("");
    }

    if(confParameters.get(N_CAT_VISUALIZATION)!=null || confParameters.get(N_VISUALIZATION)!=null){   
      String nu=(String)confParameters.get(N_VISUALIZATION);
      if (nu == null) nu = (String)confParameters.get(N_CAT_VISUALIZATION);
      numberCatVisualization=Integer.valueOf(nu);
    }
    else
    {
      numberCatVisualization=new Integer(1);
    }

    dynamicNumberCatVisualization=false;
    if(confParameters.get(DYNAMIC_N_VISUALIZATION)!=null){   
      String dynamicS=(String)confParameters.get(DYNAMIC_N_VISUALIZATION);
      if(dynamicS.equalsIgnoreCase("true"))dynamicNumberCatVisualization=true;
    }



    if(confParameters.get(N_SER_VISUALIZATION)!=null){   
      String nu=(String)confParameters.get(N_SER_VISUALIZATION);
      numberSerVisualization=Integer.valueOf(nu);
    }
    else
    {
      numberSerVisualization=new Integer(0);
    }



    if(confParameters.get(FILTER_CAT_GROUPS)!=null){   
      String filterCatGroupsS=(String)confParameters.get(FILTER_CAT_GROUPS);
      if(filterCatGroupsS.equalsIgnoreCase("false"))filterCatGroups=false;
      else filterCatGroups=true;
    }
    else
    {
      filterCatGroups=true;
    }

    if(confParameters.get(FILTER_SERIES)!=null){   
      String filterSeriesS=(String)confParameters.get(FILTER_SERIES);
      if(filterSeriesS.equalsIgnoreCase("false"))filterSeries=false;
      else filterSeries=true;
    }
    else
    {
      filterSeries=true;
    }

    if(confParameters.get(FILTER_SERIES_BUTTONS)!=null){   
      String filterSeriesS=(String)confParameters.get(FILTER_SERIES_BUTTONS);
      if(filterSeriesS.equalsIgnoreCase("false"))filterSeriesButtons=false;
    }

    if(confParameters.get(FILTER_CATEGORIES)!=null){   
      String filterCategoriesS=(String)confParameters.get(FILTER_CATEGORIES);
      if(filterCategoriesS.equalsIgnoreCase("false"))filterCategories=false;
      else filterCategories=true;
    }
    else
    {
      filterCategories=true;
    }

    if(confParameters.get(SHOW_VALUE_LABLES)!=null){   
      String valueLabelsS=(String)confParameters.get(SHOW_VALUE_LABLES);
      if(valueLabelsS.equalsIgnoreCase("true"))showValueLabels=true;
    }

    valueLabelsPosition = "inside";
    if(confParameters.get(VALUE_LABELS_POSITION)!=null){   
      String valueLabelpos=(String)confParameters.get(VALUE_LABELS_POSITION);
      if(valueLabelpos.equalsIgnoreCase("outside"))
        valueLabelsPosition = "outside";
    }

    if(confParameters.get(ENABLE_TOOLTIPS)!=null){   
      String enableTooltipsS=(String)confParameters.get(ENABLE_TOOLTIPS);
      if(enableTooltipsS.equalsIgnoreCase("true"))enableToolTips=true;
    }

    if(confParameters.get(MAXIMUM_BAR_WIDTH)!=null){   
      String maxBarWidthS=(String)confParameters.get(MAXIMUM_BAR_WIDTH);
      try{
        maxBarWidth=Double.valueOf(maxBarWidthS);
      }
      catch (NumberFormatException e) {
        logger.error("error in defining parameter "+MAXIMUM_BAR_WIDTH+": should be a double, it will be ignored",e);
      }
    }

    if(confParameters.get(RANGE_INTEGER_VALUES)!=null){   
      String rangeIntegerValuesS=(String)confParameters.get(RANGE_INTEGER_VALUES);
      if(rangeIntegerValuesS.equalsIgnoreCase("true"))rangeIntegerValues=true;
    }


    if(confParameters.get(RANGE_AXIS_LOCATION)!=null){   
      //BOTTOM_OR_LEFT, BOTTOM_OR_RIGHT, TOP_OR_RIGHT, TOP_OR_LEFT
      String axisLocation=(String)confParameters.get(RANGE_AXIS_LOCATION);
      if(axisLocation.equalsIgnoreCase("BOTTOM_OR_LEFT") || axisLocation.equalsIgnoreCase("BOTTOM_OR_RIGHT") || axisLocation.equalsIgnoreCase("TOP_OR_LEFT") || axisLocation.equalsIgnoreCase("TOP_OR_RIGHT")){
        rangeAxisLocation=axisLocation;
      }
      else{
        logger.warn("Range Axis location specified: "+axisLocation+" not a valid value.");
      }
    }


    if(confParameters.get(FIRST_AXIS_LB)!=null){   
      String axis=confParameters.get(FIRST_AXIS_LB).toString();
      Integer axisInte = Integer.valueOf(axis);
      firstAxisLB = axisInte;
    }
   
    if(confParameters.get(FIRST_AXIS_UB)!=null){   
      String axis=confParameters.get(FIRST_AXIS_UB).toString();
      Integer axisInte = Integer.valueOf(axis);
      firstAxisUB = axisInte;
    }

    if(confParameters.get(SECOND_AXIS_LB)!=null){   
      String axis=confParameters.get(SECOND_AXIS_LB).toString();
      Integer axisInte = Integer.valueOf(axis);
      secondAxisLB = axisInte;
    }
   
    if(confParameters.get(SECOND_AXIS_UB)!=null){   
      String axis=confParameters.get(SECOND_AXIS_UB).toString();
      Integer axisInte = Integer.valueOf(axis);
      secondAxisUB = axisInte;
    }

    //reading series colors if present
    SourceBean colors = (SourceBean)content.getAttribute(SERIES_COLORS);
    if(colors==null){
      colors = (SourceBean)content.getAttribute("CONF.SERIES_COLORS");
    }
    if(colors!=null){
      colorMap=new HashMap();
      List atts=colors.getContainedAttributes();
      String colorNum="";
      String colorSerie="";
      String num="";
      for (Iterator iterator = atts.iterator(); iterator.hasNext();) {
        SourceBeanAttribute object = (SourceBeanAttribute) iterator.next();

        String serieName=new String(object.getKey());
        colorSerie=new String((String)object.getValue());
        Color col=new Color(Integer.decode(colorSerie).intValue());
        if(col!=null){
          colorMap.put(serieName,col);
        }
      }   

    }


    //reading series colors if present, if present this overrides series colors!!!
    SourceBean orderColors = (SourceBean)content.getAttribute(SERIES_ORDER_COLORS);
    if(orderColors==null){
      orderColors = (SourceBean)content.getAttribute("CONF."+SERIES_ORDER_COLORS);
    }
    if(orderColors!=null){
      orderColorVector=new Vector<Color>();
      List atts=orderColors.getContainedAttributes();
      String numSerie="";
      String colorSerie="";
      for (Iterator iterator = atts.iterator(); iterator.hasNext();) {
        SourceBeanAttribute object = (SourceBeanAttribute) iterator.next();
        numSerie=new String(object.getKey());
        colorSerie=new String((String)object.getValue());
        Color col=new Color(Integer.decode(colorSerie).intValue());
        if(col!=null){
          orderColorVector.add(col);
          //colorMap.put(numSerie,col);
        }
      }   

    }


    //reading filter style if present
    SourceBean sbSerieStyle = (SourceBean)content.getAttribute("STYLE_SLIDER_AREA");
    if(sbSerieStyle==null){
      sbSerieStyle = (SourceBean)content.getAttribute("CONF.STYLE_SLIDER_AREA");
    }
    if(sbSerieStyle!=null){
      List atts=sbSerieStyle.getContainedAttributes();
      String StyleValue = "";
      for (Iterator iterator = atts.iterator(); iterator.hasNext();) {
        SourceBeanAttribute object = (SourceBeanAttribute) iterator.next();
        String styleLabel=(String)object.getKey();
        StyleValue=new String((String)object.getValue());
        if(StyleValue!=null){
          if (styleLabel.equalsIgnoreCase("font")) styleLabel = "font-family";
          else if (styleLabel.equalsIgnoreCase("size")) styleLabel = "font-size";
          else if (styleLabel.equalsIgnoreCase("color")) styleLabel = "color";

          filterStyle += styleLabel +":"+StyleValue+";";
        }
      }   
    }

    // check if there is some serie to be hidden
    boolean moreHiddenSeries=true;
    int i=1;
    hiddenSeries=new Vector();
    while(moreHiddenSeries){
      String iS=new Integer(i).toString();
      if(confParameters.get("hidden_serie"+iS)!=null){
        String hiddenSerName=(String)confParameters.get("hidden_serie"+iS);
        hiddenSeries.add(hiddenSerName);
        i++;
      }
      else
        moreHiddenSeries=false;

    }

    // check if there is some info about additional labels style

    SourceBean styleXaxisLabelsSB = (SourceBean)content.getAttribute("STYLE_X_AXIS_LABELS");
    if(styleXaxisLabelsSB!=null){

      String fontS = (String)content.getAttribute("STYLE_X_AXIS_LABELS.font");
      if(fontS==null){
        fontS = defaultLabelsStyle.getFontName();
      }
      String sizeS = (String)content.getAttribute("STYLE_X_AXIS_LABELS.size");
      String colorS = (String)content.getAttribute("STYLE_X_AXIS_LABELS.color");
      String orientationS = (String)content.getAttribute("STYLE_X_AXIS_LABELS.orientation");
      if(orientationS==null){
        orientationS = "horizontal";
      }

      try{
        Color color= Color.BLACK;
        if(colorS!=null){
          color=Color.decode(colorS);
        }else{
          defaultLabelsStyle.getColor();
        }
        int size= 12;
        if(sizeS!=null){
          size=Integer.valueOf(sizeS).intValue();
        }else{
          size = defaultLabelsStyle.getSize();
        }

        styleXaxesLabels=new StyleLabel(fontS,size,color);

      }
      catch (Exception e) {
        logger.error("Wrong style labels settings, use default");
      }

    }else{
      styleXaxesLabels = defaultLabelsStyle;
    }

    SourceBean styleYaxisLabelsSB = (SourceBean)content.getAttribute("STYLE_Y_AXIS_LABELS");
    if(styleYaxisLabelsSB!=null){

      String fontS = (String)content.getAttribute("STYLE_Y_AXIS_LABELS.font");
      if(fontS==null){
        fontS = defaultLabelsStyle.getFontName();
      }
      String sizeS = (String)content.getAttribute("STYLE_Y_AXIS_LABELS.size");
      String colorS = (String)content.getAttribute("STYLE_Y_AXIS_LABELS.color");
      String orientationS = (String)content.getAttribute("STYLE_Y_AXIS_LABELS.orientation");
      if(orientationS==null){
        orientationS = "horizontal";
      }

      try{
        Color color= Color.BLACK;
        if(colorS!=null){
          color=Color.decode(colorS);
        }else{
          defaultLabelsStyle.getColor();
        }
        int size= 12;
        if(sizeS!=null){
          size=Integer.valueOf(sizeS).intValue();
        }else{
          size = defaultLabelsStyle.getSize();
        }

        styleYaxesLabels=new StyleLabel(fontS,size,color);

      }
      catch (Exception e) {
        logger.error("Wrong style labels settings, use default");
      }

    }else{
      styleYaxesLabels = defaultLabelsStyle;
    }

    SourceBean styleValueLabelsSB = (SourceBean)content.getAttribute("STYLE_VALUE_LABELS");
    if(styleValueLabelsSB!=null){

      String fontS = (String)content.getAttribute("STYLE_VALUE_LABELS.font");
      if(fontS==null){
        fontS = defaultLabelsStyle.getFontName();
      }
      String sizeS = (String)content.getAttribute("STYLE_VALUE_LABELS.size");
      String colorS = (String)content.getAttribute("STYLE_VALUE_LABELS.color");
      String orientationS = (String)content.getAttribute("STYLE_VALUE_LABELS.orientation");
      if(orientationS==null){
        orientationS = "horizontal";
      }

      try{
        Color color= Color.BLACK;
        if(colorS!=null){
          color=Color.decode(colorS);
        }else{
          defaultLabelsStyle.getColor();
        }
        int size= 12;
        if(sizeS!=null){
          size=Integer.valueOf(sizeS).intValue();
        }else{
          size = defaultLabelsStyle.getSize();
        }

        styleValueLabels=new StyleLabel(fontS,size,color,orientationS);

      }
      catch (Exception e) {
        logger.error("Wrong style labels settings, use default");
      }

    }
    else{
      styleValueLabels = defaultLabelsStyle;
    }

    seriesNumber=new HashMap();

    logger.debug("OUT");
  }


  /**
   * @return the filterStyle
   */
  public String getFilterStyle() {
    return filterStyle;
  }


  /**
   * @param filterStyle the filterStyle to set
   */
  public void setFilterStyle(String filterStyle) {
    this.filterStyle = filterStyle;
  }


  /**
   * Use for slider: limits the categories visualization from cat selected to cat selected+numberscatsVisualization.
   *
   * @param dataset the dataset
   * @param categories the categories
   * @param catSelected the cat selected
   * @param numberCatsVisualization the number cats visualization
   *
   * @return the dataset
   */

  public Dataset filterDataset(Dataset dataset, HashMap categories, int catSelected, int numberCatsVisualization) {
    logger.debug("IN");
    DefaultCategoryDataset catDataset=(DefaultCategoryDataset)dataset;

    int numCats=categories.size();
    Vector visCat=new Vector();
    // from the choice point to min(chose point+interval, end point)
    //int startPoint=((catSelected-1)*numberCatsVisualization)+1;
    int startPoint=catSelected;

    int endPoint;
    if((startPoint+numberCatsVisualization-1)<=(categories.size()))
      endPoint=startPoint+numberCatsVisualization-1;
    else
      endPoint=categories.size();

    for(int i=(startPoint);i<=endPoint;i++){
      String name=(String)categories.get(new Integer(i));
      visCat.add(name);
    }


    List columns=new Vector(catDataset.getColumnKeys());
    for (Iterator iterator = columns.iterator(); iterator.hasNext();) {
      String col = (String) iterator.next();
      if(!(visCat.contains(col))){
        catDataset.removeColumn(col);
      }     
    }
    logger.debug("OUT");

    return catDataset;

  }

  /**
   * Limits the dataset to a particular serie.
   *
   * @param dataset the dataset
   * @param serie the serie
   *
   * @return the dataset
   */

  public Dataset filterDatasetSeries(Dataset dataset, Vector series) {
    logger.debug("IN");
    DefaultCategoryDataset catDataset=(DefaultCategoryDataset)dataset;

    //keeps track of wich series has to be shown
    currentSeries=series;

    //List rowKeys=new Vector();

    List rowKeys=new Vector(catDataset.getRowKeys());

    for (Iterator iterator = rowKeys.iterator(); iterator.hasNext();) {
      String row = (String) iterator.next();
      if(!(series.contains(row))){
        catDataset.removeRow(row)
        seriesNames.remove(row);
      }     
    }

    logger.debug("OUT");
    return catDataset;

  }


  public Dataset filterDatasetCatGroups(Dataset dataset, Vector groups) {
    logger.debug("IN");
    DefaultCategoryDataset catDataset=(DefaultCategoryDataset)dataset;

    //keeps track of wich series has to be shown
    currentCatGroups=groups;
    String catGroup="";
    //List rowKeys=new Vector();

    //List rowKeys=new Vector(catDataset.getRowKeys());
    List colKeys=new Vector(catDataset.getColumnKeys());

    for (Iterator iterator = colKeys.iterator(); iterator.hasNext();) {
      String col = (String) iterator.next();
      // iterate on cols, get their group and see if it has to be kept
      catGroup=(String)catGroups.get(col);
      if(!(groups.contains(catGroup))){
        catDataset.removeColumn(col)
        catGroupNames.remove(col);
      }     
    }

    logger.debug("OUT");
    return catDataset;

  }





  /**
   * Gets the conf parameters.
   *
   * @return the conf parameters
   */
  public Map getConfParameters() {
    return confParameters;
  }

  /**
   * Sets the conf parameters.
   *
   * @param confParameters the new conf parameters
   */
  public void setConfParameters(Map confParameters) {
    this.confParameters = confParameters;
  }

  /* (non-Javadoc)
   * @see it.eng.spagobi.engines.chart.bo.ChartImpl#createChart(java.lang.String, org.jfree.data.general.Dataset)
   */
  public JFreeChart createChart(DatasetMap dataset) {
    // TODO Auto-generated method stub
    return super.createChart(dataset);
  }

  /**
   * Gets the category label.
   *
   * @return the category label
   */
  public String getCategoryLabel() {
    return categoryLabel;
  }

  /**
   * Sets the category label.
   *
   * @param categoryLabel the new category label
   */
  public void setCategoryLabel(String categoryLabel) {
    this.categoryLabel = categoryLabel;
  }

  /**
   * Gets the value label.
   *
   * @return the value label
   */
  public String getValueLabel() {
    return valueLabel;
  }

  /**
   * Sets the value label.
   *
   * @param valueLabel the new value label
   */
  public void setValueLabel(String valueLabel) {
    this.valueLabel = valueLabel;
  }

  /**
   * Gets the categories number.
   *
   * @return the categories number
   */
  public int getCategoriesNumber() {
    return categoriesNumber;
  }

  /**
   * Sets the categories number.
   *
   * @param categoriesNumber the new categories number
   */
  public void setCategoriesNumber(int categoriesNumber) {
    this.categoriesNumber = categoriesNumber;
  }

  /**
   * Gets the categories.
   *
   * @return the categories
   */
  public Map getCategories() {
    return categories;
  }



  /**
   * Gets the number cat visualization.
   *
   * @return the number cat visualization
   */
  public Integer getNumberCatVisualization() {
    return numberCatVisualization;
  }

  /**
   * Sets the number cat visualization.
   *
   * @param numberCatVisualization the new number cat visualization
   */
  public void setNumberCatVisualization(Integer numberCatVisualization) {
    this.numberCatVisualization = numberCatVisualization;
  }




  public Vector getCurrentSeries() {
    return currentSeries;
  }


  public void setCurrentSeries(Vector currentSeries) {
    this.currentSeries = currentSeries;
  }


  public HashMap getSeriesNumber() {
    return seriesNumber;
  }


  public void putSeriesNumber(String name, int index) {
    this.seriesNumber.put(name, new Integer(index));
  }


  public Vector getSeriesNames() {
    return seriesNames;
  }


  public void setSeriesNames(Vector seriesNames) {
    this.seriesNames = seriesNames;
  }


  public boolean isFilterCatGroups() {
    return filterCatGroups;
  }


  public void setFilterCatGroups(boolean filterCatGroups) {
    this.filterCatGroups = filterCatGroups;
  }


  public HashMap getCatGroups() {
    return catGroups;
  }


  public void setCatGroups(HashMap catGroups) {
    this.catGroups = catGroups;
  }


  public Vector getCurrentCatGroups() {
    return currentCatGroups;
  }


  public void setCurrentCatGroups(Vector currentCatGroups) {
    this.currentCatGroups = currentCatGroups;
  }


  public Vector getCatGroupNames() {
    return catGroupNames;
  }


  public void setCatGroupNames(Vector catGroupNames) {
    this.catGroupNames = catGroupNames;
  }


  public boolean isFilterSeries() {
    return filterSeries;
  }


  public void setFilterSeries(boolean filterSeries) {
    this.filterSeries = filterSeries;
  }


  public boolean isFilterCategories() {
    return filterCategories;
  }


  public void setFilterCategories(boolean filterCategories) {
    this.filterCategories = filterCategories;
  }


  /**
   * @return the numberSerVisualization
   */
  public Integer getNumberSerVisualization() {
    if (numberSerVisualization == null) numberSerVisualization = new Integer(0);
    return numberSerVisualization;
  }


  /**
   * @param numberSerVisualization the numberSerVisualization to set
   */
  public void setNumberSerVisualization(Integer numberSerVisualization) {
    this.numberSerVisualization = numberSerVisualization;
  }


  public boolean isDynamicNumberCatVisualization() {
    return dynamicNumberCatVisualization;
  }


  public void setDynamicNumberCatVisualization(
      boolean dynamicNumberCatVisualization) {
    this.dynamicNumberCatVisualization = dynamicNumberCatVisualization;
  }


  public boolean isFilterSeriesButtons() {
    return filterSeriesButtons;
  }


  public void setFilterSeriesButtons(boolean filterSeriesButtons) {
    this.filterSeriesButtons = filterSeriesButtons;
  }


  public ArrayList<String> getSeriesOrder() {
    return seriesOrder;
  }


  public void setSeriesOrder(ArrayList<String> seriesOrder) {
    this.seriesOrder = seriesOrder;
  }





}
TOP

Related Classes of it.eng.spagobi.engines.chart.bo.charttypes.barcharts.BarCharts

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.