/*
 * Data.java
 *
 * Created on June 9, 2006, 9:32 AM
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package usda.weru.util.table.test;

import com.klg.jclass.table.EditableTableDataModel;
import com.klg.jclass.table.data.AbstractDataSource;
import java.util.ArrayList;
import java.util.List;
import usda.weru.util.table.Column;
import usda.weru.util.table.WepsTableEnum;
import usda.weru.util.table.WepsTableMeta;


/**
 *
 * @author Joseph Levin
 */
public class Data extends AbstractDataSource implements EditableTableDataModel{
    private static final long serialVersionUID = 1L;
    
    private static final String[] c_wordList = {"hello", "world", "how", "now", "brown", "cow", "quick", "fox", "a really long phrase just for kicks", "", "some are blank", "a", "zz"};    
    private final List <String> c_keyMap;
    private final List <Object[]> c_data;
    private final WepsTableMeta c_meta;

	/**
	 *
	 * @param meta
	 */
	public Data(WepsTableMeta meta){
        c_meta = meta;
        c_keyMap = new ArrayList <String> ();
        for (Column column : c_meta.getColumns()){
            c_keyMap.add(column.getDataKey());
            column.getDataType();
        }
        c_data = new ArrayList <Object[]> ();
        populateData();
    }
    
    private void populateData(){        
        for (int i = 0; i < 50; i++){
            Object[] temp = new Object[getNumColumns()];            
            for (int j = 0; j < temp.length; j++){
                Column column = c_meta.getColumn(j);
                int type = column.getDataType();
                switch(type){
                    case WepsTableEnum.DATA_boolean:
                        temp[j] = randomBoolean();
                        break;
                    case WepsTableEnum.DATA_date:
                        break;
                    case WepsTableEnum.DATA_list:
                        break;
                    case WepsTableEnum.DATA_numeric:
                        temp[j] = randomNumber();
                        break;
                    case WepsTableEnum.DATA_text:
                        temp[j] = randomText();
                        break;   
                    default:
                        temp[j] = randomText();
                        break;
                }
                
            }
            c_data.add(temp);
        }      
    }
    
    
    private String randomText(){
        int index = (int) (Math.random() * c_wordList.length);
        return c_wordList[index];
    }
    
    private Double randomNumber(){
        return Math.random() * 500;
    }
    
    private final java.util.Random ran = new java.util.Random();
    
    private Boolean randomBoolean(){
//        int i = (int) (Math.random() * 2);
//        return i == 1;
        return ran.nextBoolean();
    }
    
    @Override
    public int getNumColumns(){
        return c_keyMap.size();
    }
    
    @Override
    public int getNumRows(){
        return c_data.size();
    }
    
    @Override
    public Object getTableColumnLabel(int columnIndex){
        return c_keyMap.get(columnIndex);
    }
    
    @Override
    public Object getTableDataItem(int rowIndex, int columnIndex){
        if (rowIndex < 0) return null;
        Object[] row = c_data.get(rowIndex);
        return row[columnIndex];
    }
    
    @Override
    public Object getTableRowLabel(int rowIndex){
        return rowIndex;
    }
    
    //Editing interface method
    @Override
    public boolean setTableDataItem(Object o, int rowIndex, int columnIndex){
        c_data.get(rowIndex)[columnIndex] = o;
        return true;
    }            

}
