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

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

/**

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 dialChart
*  * @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.awt.GradientPaint;
import java.awt.Point;
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.dial.ArcDialFrame;
import org.jfree.chart.plot.dial.DialBackground;
import org.jfree.chart.plot.dial.DialPlot;
import org.jfree.chart.plot.dial.DialPointer;
import org.jfree.chart.plot.dial.DialValueIndicator;
import org.jfree.chart.plot.dial.StandardDialRange;
import org.jfree.chart.plot.dial.StandardDialScale;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.general.Dataset;
import org.jfree.data.general.ValueDataset;
import org.jfree.ui.GradientPaintTransformType;
import org.jfree.ui.StandardGradientPaintTransformer;

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

public class SimpleDial extends DialCharts{

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

  double increment=0.0;
  int minorTickCount=0;
  Vector intervals;


  boolean horizontalView=false; //false is vertical, true is horizontal
  boolean horizontalViewConfigured=false;
  public static final String CHANGE_VIEW_HORIZONTAL="horizontal";

  public static final String CHANGE_VIEW_LABEL="Set View Orientation";
  public static final String CHANGE_VIEW_LABEL1="Set Vertical View";
  public static final String CHANGE_VIEW_LABEL2="Set Horizontal View";

  /** CONF PARAMETERS: */
  public static final String MINOR_TICK = "minor_tick";
  public static final String ORIENTATION = "orientation";
  public static final String INCREMENT = "increment";


  /**
   * Instantiates a new simple dial.
   */
  public SimpleDial() {
    super();
    intervals=new Vector();
  }

  /**
   * 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(INCREMENT)!=null){ 
        String increment=(String)confParameters.get(INCREMENT);
        setIncrement(Double.valueOf(increment).doubleValue());
      }
      else {
        logger.error("increment not defined");
        setIncrement(Double.valueOf(1.0).doubleValue());
      }
      if(confParameters.get(MINOR_TICK)!=null){ 
        String minorTickCount=(String)confParameters.get(MINOR_TICK);
        setMinorTickCount(Integer.valueOf(minorTickCount).intValue());
      }
      else {
        setMinorTickCount(10);
      }

      if(confParameters.get(ORIENTATION)!=null){ 
        String orientation=(String)confParameters.get(ORIENTATION);
        if(orientation.equalsIgnoreCase("vertical")){
          horizontalViewConfigured=true;
          horizontalView=false;
        }
        else if(orientation.equalsIgnoreCase("horizontal")){
          horizontalViewConfigured=true;
          horizontalView=true;
        }
      }


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

      if(intervalsAttrsList==null || intervalsAttrsList.isEmpty()){ // if intervals are not defined realize a single interval
        logger.warn("intervals not defined; default settings");
        /*KpiInterval interval=new KpiInterval();
        interval.setMin(getLower());
        interval.setMax(getUpper());
        interval.setColor(Color.white);
        addInterval(interval);*/
      }
      else

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

          KpiInterval interval=new KpiInterval();
          interval.setMin(Double.valueOf(min).doubleValue());
          interval.setMax(Double.valueOf(max).doubleValue());

          Color color=new Color(Integer.decode(col).intValue());
          if(color!=null){
            interval.setColor(color);}
          else{
            // sets default color
            interval.setColor(Color.white);
          }
          addInterval(interval);
        }
      }
    }

    else{
      String increment=(String)sbRow.getAttribute(INCREMENT);
      String minorTickCount=(String)sbRow.getAttribute(MINOR_TICK);

      String orientation="";
      if(sbRow.getAttribute(ORIENTATION)!=null){
        orientation=(String)sbRow.getAttribute(ORIENTATION);
        if(orientation.equalsIgnoreCase("vertical")){
          horizontalView=false;
          horizontalViewConfigured=true;
        }
        else if (orientation.equalsIgnoreCase("horizontal")){
          horizontalView=true;
          horizontalViewConfigured=true;
        }
      }


      setIncrement(Double.valueOf(increment).doubleValue());
      setMinorTickCount(Integer.valueOf(minorTickCount).intValue());     



      String intervalsNumber=(String)sbRow.getAttribute(INTERVALS_NUMBER);
      if(intervalsNumber==null || intervalsNumber.equals("") || intervalsNumber.equals("0")){ // if intervals are not specified
        /*KpiInterval interval=new KpiInterval();
      interval.setMin(getLower());
      interval.setMax(getUpper());
      interval.setColor(Color.WHITE);
      addInterval(interval);*/
      }
      else{
        for(int i=1;i<=Integer.valueOf(intervalsNumber).intValue();i++){
          KpiInterval interval=new KpiInterval();
          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());
          interval.setMin(Double.valueOf(min).doubleValue());
          interval.setMax(Double.valueOf(max).doubleValue());
          Color color=new Color(Integer.decode(col).intValue());
          interval.setColor(color);
          addInterval(interval);

        }
      }

    }
    logger.debug("out");
  }



  /**
   * Creates the chart .
   *
   * @param chartTitle  the chart title.
   * @param dataset  the dataset.
   *
   * @return A chart .
   */

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


    DialPlot plot = new DialPlot();
    plot.setDataset((ValueDataset)dataset);

    ArcDialFrame dialFrame=null;
    if(!horizontalView){
      plot.setView(0.78, 0.37, 0.22, 0.26);    
      dialFrame = new ArcDialFrame(-10.0, 20.0);
    }
    else{
      plot.setView(0.21, 0.0, 0.58, 0.30);
      dialFrame = new ArcDialFrame(60.0, 60.0);
    }

    dialFrame.setInnerRadius(0.65);
    dialFrame.setOuterRadius(0.90);
    dialFrame.setForegroundPaint(Color.darkGray);
    dialFrame.setStroke(new BasicStroke(3.0f));
    plot.setDialFrame(dialFrame);

    GradientPaint gp = new GradientPaint(new Point(),
        new Color(255, 255, 255), new Point(),
        new Color(240, 240, 240));
    DialBackground sdb = new DialBackground(gp);

    GradientPaintTransformType gradientPaintTransformType=GradientPaintTransformType.VERTICAL;
    if(horizontalView){
      gradientPaintTransformType=GradientPaintTransformType.HORIZONTAL;
    }

    sdb.setGradientPaintTransformer(new StandardGradientPaintTransformer(
        gradientPaintTransformType));
    plot.addLayer(sdb);

    if(! ( increment > 0) ){
      logger.warn("increment cannot be less than 0, put default to 0.1 ");
      increment=0.1;
    }


    StandardDialScale scale=null;
    if(!horizontalView){
      scale = new StandardDialScale(lower, upper, -8, 16.0,
          increment, minorTickCount);
    }
    else{
      scale = new StandardDialScale(lower, upper, 115.0,
          -50.0, increment, minorTickCount);
    }

    // sets intervals
    for (Iterator iterator = intervals.iterator(); iterator.hasNext();) {
      KpiInterval interval = (KpiInterval) iterator.next();
      StandardDialRange range = new StandardDialRange(interval.getMin(), interval.getMax(),
          interval.getColor());
      range.setInnerRadius(0.70);
      range.setOuterRadius(0.75);
      plot.addLayer(range);

    }

    scale.setTickRadius(0.88);
    scale.setTickLabelOffset(0.07);
    //set tick label style
    Font tickLabelsFont = new Font(labelsTickStyle.getFontName(), Font.PLAIN, labelsTickStyle.getSize());
    scale.setTickLabelFont(tickLabelsFont);
    scale.setTickLabelPaint(labelsTickStyle.getColor());
    //scale.setMajorTickIncrement(25.0);
    plot.addScale(0, scale);

    DialPointer needle = new DialPointer.Pin();
    needle.setRadius(0.82);
    plot.addLayer(needle);
    DialValueIndicator dvi = new DialValueIndicator(0);
    dvi.setFont(new Font(labelsValueStyle.getFontName(), Font.PLAIN, labelsValueStyle.getSize()));
    dvi.setPaint(labelsValueStyle.getColor());
    plot.addLayer(dvi);

    JFreeChart chart1 = new JFreeChart(plot);
    chart1.setBackgroundPaint(color);

    TextTitle title = setStyleTitle(name, styleTitle);
    chart1.setTitle(title);
    if(subName!= null && !subName.equals("")){
      TextTitle subTitle =setStyleTitle(subName, styleSubTitle);
      chart1.addSubtitle(subTitle);
    }


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




  /**
   * Gets the increment.
   *
   * @return the increment
   */
  public double getIncrement() {
    return increment;
  }



  /**
   * Sets the increment.
   *
   * @param increment the new increment
   */
  public void setIncrement(double increment) {
    this.increment = increment;
  }



  /**
   * Gets the minor tick count.
   *
   * @return the minor tick count
   */
  public int getMinorTickCount() {
    return minorTickCount;
  }



  /**
   * Sets the minor tick count.
   *
   * @param minorTickCount the new minor tick count
   */
  public void setMinorTickCount(int minorTickCount) {
    this.minorTickCount = minorTickCount;
  }

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

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




  /* (non-Javadoc)
   * @see it.eng.spagobi.engines.chart.bo.ChartImpl#isChangeableView()
   */
  public boolean isChangeableView() {
    return true;
  }



  /* (non-Javadoc)
   * @see it.eng.spagobi.engines.chart.bo.ChartImpl#getPossibleChangePars()
   */
  public List getPossibleChangePars() {
    List l=new Vector();
    if(!horizontalViewConfigured){
      l.add(CHANGE_VIEW_HORIZONTAL);}

    return l;
  }


  /* (non-Javadoc)
   * @see it.eng.spagobi.engines.chart.bo.ChartImpl#setChangeViewsParameter(java.lang.String, boolean)
   */
  public void setChangeViewsParameter(String changePar, boolean how) {
    if(changePar.equalsIgnoreCase(CHANGE_VIEW_HORIZONTAL)){
      horizontalView=how;
    }

  }

  /* (non-Javadoc)
   * @see it.eng.spagobi.engines.chart.bo.ChartImpl#getChangeViewParameter(java.lang.String)
   */
  public boolean getChangeViewParameter(String changePar) {
    boolean ret=false;
    if(changePar.equalsIgnoreCase(CHANGE_VIEW_HORIZONTAL)){
      ret=horizontalView;
    }
    return ret;
  }

  /* (non-Javadoc)
   * @see it.eng.spagobi.engines.chart.bo.ChartImpl#getChangeViewParameterLabel(java.lang.String, int)
   */
  public String getChangeViewParameterLabel(String changePar, int i) {
    String ret="";
    if(changePar.equalsIgnoreCase(CHANGE_VIEW_HORIZONTAL)){
      if(i==0
        ret=CHANGE_VIEW_LABEL;
      else if(i==1) ret=CHANGE_VIEW_LABEL1;
      else if(i==2) ret=CHANGE_VIEW_LABEL2;

    }
    return ret;
  }




}
TOP

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

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.