/*
 * JELTupleProvider.java
 *
 * Created on October 21, 2002, 1:24 PM
 */

package hep.aida.ref.tuple;

import hep.aida.*;
import hep.aida.ref.*;
import gnu.jel.*;

/**
 * Serves as a Resolver and ValueProvider for JEL-based
 * Evaluator and Filter
 * @author  The AIDA team @ SLAC.
 *
 */
public class JELTupleProvider extends DVMap {

    private ITuple tuple;

    public JELTupleProvider(ITuple tuple) {
	this.tuple = tuple;
    }

    public ITuple getTuple() { return tuple; }

    public String getTypeName(String name) {
	int index = -1;
	try {
	    index = tuple.findColumn(name);
	} catch (IllegalArgumentException e) { return null; }
	if (index < 0 )  return null;
     
        Class colType = tuple.columnType( index );
        if ( colType == Integer.TYPE ) {
            return "Int";
        } else if ( colType == Short.TYPE ) {
            return "Short";
        } else if ( colType == Long.TYPE ) {
            return "Long";
        } else if ( colType == Float.TYPE ) {
            return "Float";
        } else if ( colType == Double.TYPE ) {
            return "Double";
        } else if ( colType == Boolean.TYPE ) {
            return "Boolean";
        } else if ( colType == Byte.TYPE ) {
            return "Byte";
        } else if ( colType == Character.TYPE ) {
            return "Char";
        } else if ( colType == String.class ) {
            return "String";
        } else if ( colType == Object.class ) {
            return "Double.NaN";
        } else return "Double.NaN";
    }

    public Object translate(String name) {
	int index = -1;
	try {
	    index = tuple.findColumn(name);
	} catch (IllegalArgumentException e) { return null; }
	if (index < 0 )  return null;
	return new Integer(index);
    }

    public int getIntProperty(int i) {
	return tuple.getInt(i);
    }
    public short getShortProperty(int i) {
	return tuple.getShort(i);
    }
    public long getLongProperty(int i) {
	return tuple.getLong(i);
    }
    public float getFloatProperty(int i) {
	return tuple.getFloat(i);
    }
    public double getDoubleProperty(int i) {
	return tuple.getDouble(i);
    }
    public boolean getBooleanProperty(int i) {
	return tuple.getBoolean(i);
    }
    public byte getByteProperty(int i) {
	return tuple.getByte(i);
    }
    public char getCharProperty(int i) {
	return tuple.getChar(i);
    }
    public String getStringProperty(int i) {
	return tuple.getString(i);
    }


}
