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

Source Code of it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.Thermometer

/**

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

**/

/** Configure and draw a thermomether chart
*  * @author Giulio Gavardi
*
*/

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


import it.eng.spago.base.SourceBean;
import it.eng.spago.base.SourceBeanAttribute;
import it.eng.spagobi.engines.chart.bo.charttypes.utils.KpiInterval;
import it.eng.spagobi.engines.chart.utils.DatasetMap;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.util.Iterator;
import java.util.List;
import java.util.Vector;

import org.apache.log4j.Logger;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.ThermometerPlot;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.ValueDataset;
import org.jfree.ui.RectangleInsets;

/**
*
* @author Giulio Gavardi
*
*/


public class Thermometer extends DialCharts{


  private static transient Logger logger=Logger.getLogger(Thermometer.class);

  private  Vector intervals=null;
  private String units="";

  /** CONF PARAMETERS: */
  public static final String UNIT = "unit";

  /** POSSIBLE VALUES TO SET FOR UNIT PARAMETER: */
  public static final String FAHRENHEIT = "FAHRENHEIT";
  public static final String CELCIUS = "CELCIUS";
  public static final String KELVIN = "KELVIN";

  /** VALUES TO SET LABEL FOR SUBRANGES */
  public static final String NORMAL = "NORMAL";
  public static final String WARNING = "WARNING";
  public static final String CRITICAL = "CRITICAL";


  /**
   * Instantiates a new thermometer.
   */
  public Thermometer() {
    super();
    intervals=new Vector();
  }


  /**
   * Creates a chart of type thermometer.
   *
   * @param chartTitle  the chart title.
   * @param dataset  the dataset.
   *
   * @return A chart thermometer.
   */


  public JFreeChart createChart(DatasetMap datasets) {
    logger.debug("IN");
    Dataset dataset=(Dataset)datasets.getDatasets().get("1");

    ThermometerPlot plot = new ThermometerPlot((ValueDataset)dataset);
    JFreeChart chart = new JFreeChart(name, JFreeChart.DEFAULT_TITLE_FONT,  plot, true);              
    chart.setBackgroundPaint(color);
 
    TextTitle title = setStyleTitle(name, styleTitle);
    chart.setTitle(title);
    if(subName!= null && !subName.equals("")){
      TextTitle subTitle =setStyleTitle(subName, styleSubTitle);
      chart.addSubtitle(subTitle);
    }

   
    plot.setInsets(new RectangleInsets(5.0, 5.0, 5.0, 5.0));
    plot.setPadding(new RectangleInsets(10.0, 10.0, 10.0, 10.0));
    plot.setThermometerStroke(new BasicStroke(2.0f));
    plot.setThermometerPaint(Color.lightGray);
    plot.setGap(3);
    plot.setValueLocation(3);
    plot.setValuePaint(labelsValueStyle.getColor());
    plot.setValueFont(new Font(labelsValueStyle.getFontName(), Font.PLAIN, labelsValueStyle.getSize()));

    plot.setRange(lower, upper);


    if(units.equalsIgnoreCase(FAHRENHEIT))plot.setUnits(ThermometerPlot.UNITS_FAHRENHEIT)
    else if(units.equalsIgnoreCase(CELCIUS)) plot.setUnits(ThermometerPlot.UNITS_CELCIUS)
    else if(units.equalsIgnoreCase(KELVIN)) plot.setUnits(ThermometerPlot.UNITS_KELVIN)
    else plot.setUnits(ThermometerPlot.UNITS_NONE);


    // set subranges 
    for (Iterator iterator = intervals.iterator(); iterator.hasNext();){
      KpiInterval subrange = (KpiInterval) iterator.next();
      int range=0;
      if(subrange.getLabel().equalsIgnoreCase(NORMAL))range=(ThermometerPlot.NORMAL);
      else if(subrange.getLabel().equalsIgnoreCase(WARNING))range=(ThermometerPlot.WARNING);
      else if(subrange.getLabel().equalsIgnoreCase(CRITICAL))range=(ThermometerPlot.CRITICAL);

      plot.setSubrange(range, subrange.getMin(), subrange.getMax());
      if(subrange.getColor()!=null){
        plot.setSubrangePaint(range, subrange.getColor());
      }
      //plot.setDisplayRange(subrange.getRange(), subrange.getLower(), subrange.getUpper()); 
    }
    //plot.setFollowDataInSubranges(true);
    logger.debug("OUT");

    return chart;      
  }




  /**
   * set parameters for the creation of the chart getting them from template or from LOV.
   *
   * @param content the content of the template.
   *
   * @return A chart that displays a value as a dial.
   */


  public void configureChart(SourceBean content) {
    logger.debug("IN");
    super.configureChart(content);

    if(!isLovConfDefined){

      if(confParameters.get(UNIT)!=null){ 
        String unit=(String)confParameters.get(UNIT);
        setUnits(unit);
      }
      else
        setUnits("");


      //reading intervals information
      SourceBean subrangesSB = (SourceBean)content.getAttribute("INTERVALS");
      if(subrangesSB==null){
        subrangesSB = (SourceBean)content.getAttribute("CONF.INTERVALS");
      }
      List subrangesAttrsList=null;
      if(subrangesSB!=null){
        subrangesAttrsList = subrangesSB.getContainedSourceBeanAttributes();
      }

      if(subrangesAttrsList==null || subrangesAttrsList.isEmpty()){ // if subranges are not defined
        logger.error("subranges not correctly defined");      }
      else

        Iterator subrangesAttrsIter = subrangesAttrsList.iterator();
        while(subrangesAttrsIter.hasNext()) {
          SourceBeanAttribute paramSBA = (SourceBeanAttribute)subrangesAttrsIter.next();
          SourceBean param = (SourceBean)paramSBA.getValue();
          String range= (String)param.getAttribute(LABEL_INTERVAL);
          String min= (String)param.getAttribute(MIN_INTERVAL);
          String max= (String)param.getAttribute(MAX_INTERVAL);
          String col= (String)param.getAttribute(COLOR_INTERVAL);

          KpiInterval subrange=new KpiInterval();

          subrange.setLabel(range);
          subrange.setMin(Double.valueOf(min).doubleValue());
          subrange.setMax(Double.valueOf(max).doubleValue());

          Color color=new Color(Integer.decode(col).intValue());
          if(color!=null){
            subrange.setColor(color);}
          else{
            subrange.setColor(Color.RED);
          }
          addIntervals(subrange);
        }
      }
    }
    else{

      String unit=(String)sbRow.getAttribute(UNIT);
      if(unit!=null)
        setUnits(unit);
      else
        setUnits("");

      String subranges=(String)sbRow.getAttribute("subranges");
      if(subranges!=null && subranges.equalsIgnoreCase("NO")){ // if intervals are not specified
        logger.warn("no subranges defined");
      }
      else{
        for(int i=1;i<=3;i++){
          KpiInterval subrange=new KpiInterval();
          String label=(String)sbRow.getAttribute("label"+(new Integer(i)).toString());
          String min=(String)sbRow.getAttribute("min"+(new Integer(i)).toString());
          String max=(String)sbRow.getAttribute("max"+(new Integer(i)).toString());
          String col=(String)sbRow.getAttribute("color"+(new Integer(i)).toString());

          subrange.setLabel(label);
          subrange.setMin(Double.valueOf(min).doubleValue());
          subrange.setMax(Double.valueOf(max).doubleValue());
          Color color=new Color(Integer.decode(col).intValue());
          subrange.setColor(color);
          addIntervals(subrange);

        }
      }
    }
    logger.debug("OUT");
  }




  /**
   * Gets the intervals.
   *
   * @return the intervals
   */
  public Vector getIntervals() {
    return intervals;
  }




  /**
   * Adds the intervals.
   *
   * @param subrange the subrange
   */
  public void addIntervals(KpiInterval subrange) {
    this.intervals.add(subrange);
  }




  /**
   * Gets the units.
   *
   * @return the units
   */
  public String getUnits() {
    return units;
  }




  /**
   * Sets the units.
   *
   * @param units the new units
   */
  public void setUnits(String units) {
    this.units = units;
  }


}
TOP

Related Classes of it.eng.spagobi.engines.chart.bo.charttypes.dialcharts.Thermometer

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.