/*
 * @(#)GraphDataFromCol.java
 *
 * Copyright 2001-2002 by Oracle Corporation,
 * 500 Oracle Parkway, Redwood Shores, California, 94065, U.S.A.
 * All rights reserved.
 *
 * This software is the confidential and proprietary information
 * of Oracle Corporation.
 */

package oracle.jbo.html.jsp.graph;


import oracle.jbo.RowSetIterator;
import oracle.jbo.Row;


public class GraphDataFromCol
{
    protected int  mNumberOfColumnValuesPerMarker;
    
    protected String mSeriesLabel;
	
    protected String mGroupLabelAttrName;    

    private final String  emptyString = "";

    private RowSetIterator rsi;

    public GraphDataFromCol(RowSetIterator iter, 
            int numberOfColumnValuesPerMarker,
            String seriesLabel,
	    String groupLabelAttrName)
    {
        setRowSetIterator(iter);

	this.mNumberOfColumnValuesPerMarker = numberOfColumnValuesPerMarker;

	this.mSeriesLabel = seriesLabel;

	this.mGroupLabelAttrName = groupLabelAttrName;

    }

    protected void setRowSetIterator(RowSetIterator rsi)
    {
	this.rsi = rsi;
    }

    protected RowSetIterator getRowSetIterator()
    {
	return rsi;
    }


    protected String getSeriesLabel()
    {
        return mSeriesLabel;
    }

    protected String getColumnLabel(int i)
    {
        int rowNumber = i/mNumberOfColumnValuesPerMarker;
        
        int rangeIndex = rowIndexToRangeIndex(rowNumber);

        Object val =  getAttributeFromRow(rangeIndex, mGroupLabelAttrName);

        return ((val == null) ? emptyString : val.toString());
    }

    protected int getColumnCount()
    {
        //int rc = mNumberOfColumnValuesPerMarker * (int) rsi.getEstimatedRowCount();
	int rc = mNumberOfColumnValuesPerMarker * (int) rsi.getRowCountInRange();

        return rc;
    }


    protected Object getColumnValue(int col)
    {
        int modifiedRowNumber = col / mNumberOfColumnValuesPerMarker;
        
        int modifiedColNumber = col % mNumberOfColumnValuesPerMarker;

        int rangeIndex = rowIndexToRangeIndex(modifiedRowNumber);
        
        Object val =  getAttributeFromRow(rangeIndex, modifiedColNumber);
        
        if (val == null)
            val = emptyString;
            
        if ( val instanceof oracle.jbo.domain.Number)
            val = ((oracle.jbo.domain.Number)val).getData();

        return val;
    }

    protected int rowIndexToRangeIndex(int rowIndex)
    {
         RowSetIterator iter = getRowSetIterator(); 

         if (iter != null)
         {
            int rangeStart = iter.getRangeStart();

            if (rangeStart <= 0)
            {
               return rowIndex;
            }
         
            return rowIndex - rangeStart;
         }
         else
         {
            return rowIndex;
         }
    }

    protected Object getAttributeFromRow(int rangeIndex, int attrIndex)
    {
	Row row = getRowSetIterator().getRowAtRangeIndex(rangeIndex);

	return row.getAttribute(attrIndex);
    }

    protected Object getAttributeFromRow(int rangeIndex, String attrName)
    {
	Row row = getRowSetIterator().getRowAtRangeIndex(rangeIndex);

	return row.getAttribute(attrName);
    }

}



