package hep.aida.ref.hbook;

import hep.io.hbook.*;
import hep.tuple.interfaces.*;
import org.freehep.util.Value;
import java.util.StringTokenizer;

/**
 * An implementation of FTupleColumn backed by PAW columns
 * @author The FreeHEP team @ SLAC.
 */   

public class HBookColumnwiseTupleColumn implements FTupleColumn {

    private ColumnwiseTupleColumn column;
    private ColumnwiseTuple tuple;
    private Class type;
    
    HBookColumnwiseTupleColumn(ColumnwiseTupleColumn column, ColumnwiseTuple tuple) {
        this.column = column;
        this.tuple = tuple;
        this.type = column.getColumnClass();
    }

    public String name() {
        return column.getName();
    }

    public Class type() {
        return type;
    }

    public void minValue(Value value) {
        value.set( column.getMin() );
    }
   
    public void maxValue(Value value) {
        value.set( column.getMax() );
    }
    
    public void meanValue(Value value) {
        value.set( Double.NaN );
    }

    public void rmsValue(Value value) {
        value.set( Double.NaN );
    }

    public void defaultValue(Value value) {
    }
    
    public boolean hasDefaultValue() {
        return false;
    }

    public void value(FTupleCursor cursor, Value value) {
        tuple.setCurrentRow( cursor.row() + 1 );
        if ( type == Integer.TYPE ) value.set( column.getInt() );
        else if ( type == Double.TYPE ) value.set( column.getDouble() );
        else if ( type == Boolean.TYPE ) value.set( column.getBoolean() );
        else if ( type == String.class ) value.set( column.getString() );
        else value.set( column.getObject() );
    }
    
    public void setValue(int index, Value value) {
        throw new UnsupportedOperationException("This operation is not supported");
    }
    
}
   