/*
 * ChartBuilder.java
 *
 * Created on 4 de febrero de 2005, 05:38 PM
 */

package co.com.ddt.views;

import java.util.Vector;

import co.com.ddt.chart.ChartBuilder;
import co.com.ddt.chart.ChartInfo;

import javax.servlet.http.HttpServletRequest;
import co.com.ddt.chart.line.LineChartSerie;
import co.com.ddt.chart.bar.BarChartInfo;
import co.com.ddt.chart.line.LineChartInfo;
import co.com.ddt.chart.bar.BarChartSerie;
import co.com.ddt.chart.pie.PieChartSerie;
import co.com.ddt.chart.pie.PieChartInfo; 
/**
 *
 * @author  Mario Linares Vásquez
 */
public class ViewBuilder {
    
    
    private ViewBuilder() {
    }
    
    public static View buildView(int type,String title,Vector header, Vector labels, Vector data, HttpServletRequest request){
        
        View view = null;
        if(type == View.TABLE){
            view = ViewBuilder.buildTableView(header, labels, data );           
            
        }
        else {
            view = ViewBuilder.buildChartView(type,title,header,labels,data,request);
        }
        
        view.setTitle(title);
        return view;
    }
    
    
    private static TableView buildTableView(Vector header, Vector labels, Vector data){
        
        int size = data.size();
        int i = 0;
        
        for(i = 0; i < size-1; i++){
            Vector row = (Vector)data.elementAt(i);
            row.add(0, (String)labels.elementAt(i));
        }        
         
        ((Vector)data.elementAt(i)).add(0, "Total");
       
        TableView view = new TableView(data);
        view.setHeader(header);
        
        Vector total = new Vector();
        total = (Vector)data.elementAt(i);
        
        data.removeElementAt(data.size()-1);
        view.setTotal(total);       
                
         
        return  view;
    
    }
    
    
    private static ChartView buildChartView(int type, String title,Vector header, Vector labels, Vector data, HttpServletRequest request){
        
        ChartInfo info = null;
        int size = data.size();
        if(type == View.LINE_CHART){
            
            info = new LineChartInfo();
            for(int i = 0; i < size; i++){
                Vector row = (Vector)data.elementAt(i);
                LineChartSerie serie = new LineChartSerie((String)labels.elementAt(i));
                for(int j = 0; j < row.size(); j++){
	                serie.addValue((String)header.elementAt(j), (Double)row.elementAt(j));
                }
                info.addSerie(serie);
            }
            
            
            
        }
        else if(type == View.BAR_CHART){
            info = new BarChartInfo();
            for(int i = 0; i < header.size(); i++){
               ((BarChartInfo)info).addCategoryName((String)header.elementAt(i)); 
            }
            
            for(int i = 0; i < size; i++){
                Vector row = (Vector)data.elementAt(i);
                BarChartSerie serie = new BarChartSerie((String)labels.elementAt(i));                
                for(int j = 0; j < row.size(); j++){
                    serie.addValue((Double)row.elementAt(j));
                
                }
                info.addSerie(serie);
            }
            
        }
        else if(type == View.PIE_CHART){
            info = new PieChartInfo();
            for(int i = 0; i < header.size(); i++){
               ((PieChartInfo)info).addCategoryName((String)header.elementAt(i)); 
            }
            
            for(int i = 0; i < size; i++){
                Vector row = (Vector)data.elementAt(i);
                PieChartSerie serie = new PieChartSerie((String)labels.elementAt(i));                
                for(int j = 0; j < row.size(); j++){
                    serie.addValue((Double)row.elementAt(j));
              
                }
                info.addSerie(serie);
            }
            
        }
        
        info.setTitle(title);
        info.setLegend(true);
        info.setHeight(600);
        info.setWidth(800);
        info.setChart3D(true);
        
        String path = ChartBuilder.buildChartAndSaveJPEG(info,request);
        
        Vector temp =  new Vector();
        temp.add(path);
        Vector row = new Vector();
        row.add( temp );
      
        return  new ChartView(row,type);
    }
}
// “Copyright (C) <2008> Multilateral Investment Fund of the Inter-American Development Bank.
// Este archivo es parte de <ICT4BUS-PVL>
// < ICT4BUS-PVL > es software libre: usted puede redistribuirlo y/o modificarlo bajo los términos de la Licencia Pública General GNU publicada por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia, o (a su elección) cualquier versión posterior.
// < ICT4BUS-PVL > se distribuye con la esperanza de que sea útil, pero SIN GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD PARA UN PROPÓSITO DETERMINADO. 
// Consulte los detalles de la Licencia Pública General GNU para obtener una información más detallada. 
// Debería haber recibido una copia de la Licencia Pública General GNU junto a este programa. En caso contrario, consulte http://www.gnu.org/licenses/.”