/**
 * License Agreement.
 *
 * Rich Faces - Natural Ajax for Java Server Faces (JSF)
 *
 * Copyright (C) 2007 Exadel, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License version 2.1 as published by the Free Software Foundation.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301  USA
 */

package org.ajax4jsf.tests;

import java.io.IOException;

import javax.faces.context.FacesContext;

import org.ajax4jsf.model.DataVisitor;
import org.ajax4jsf.model.ExtendedDataModel;
import org.ajax4jsf.model.Range;
import org.ajax4jsf.model.SequenceRange;

/**
 * @author shura
 *
 */
public class MockDataModel extends ExtendedDataModel {
	
	public static final int ROWS = 10;
	
	private int rowIndex = 0;
	
	private int minRow = 0;
	
	private int maxRow = ROWS;

	private Object wrappedData;
	/**
	 * @return the maxRow
	 */
	public int getMaxRow() {
		return maxRow;
	}

	/**
	 * @param maxRow the maxRow to set
	 */
	public void setMaxRow(int maxRow) {
		this.maxRow = maxRow;
	}

	/**
	 * @return the minRow
	 */
	public int getMinRow() {
		return minRow;
	}

	/**
	 * @param minRow the minRow to set
	 */
	public void setMinRow(int minRow) {
		this.minRow = minRow;
	}

	
	public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) throws IOException {
		int first=0;
		int count=ROWS;
		if (range instanceof MockRange) {			
		 MockRange mockRange = (MockRange) range;
		 count = mockRange.getCount();
		} else if (range instanceof SequenceRange) {
			SequenceRange seqRange = (SequenceRange) range;
			first = seqRange.getFirstRow();
			int rows = seqRange.getRows();
			if(rows>0){
				count = rows+first;
			}
		}
		for(int row = first; row < count && row < ROWS;row++){
			visitor.process(context, new Integer(row), argument);
		}
		
	}

	/* (non-Javadoc)
	 * @see org.ajax4jsf.ajax.repeat.ExtendedDataModel#getRowKey()
	 */
	public Object getRowKey() {
		// TODO Auto-generated method stub
		return rowIndex<0?null:new Integer(rowIndex);
	}

	/* (non-Javadoc)
	 * @see org.ajax4jsf.ajax.repeat.ExtendedDataModel#setRowKey(java.lang.Object)
	 */
	public void setRowKey(Object key) {
		if(null == key){
			rowIndex = -1;
		} else {
			rowIndex = ((Integer) key).intValue();
		}
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#getRowCount()
	 */
	public int getRowCount() {
		// TODO Auto-generated method stub
		return getMaxRow();
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#getRowData()
	 */
	public Object getRowData() {
		// TODO Auto-generated method stub
		return isRowAvailable()?String.valueOf(rowIndex):null;
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#getRowIndex()
	 */
	public int getRowIndex() {
		// TODO Auto-generated method stub
		return rowIndex;
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#getWrappedData()
	 */
	public Object getWrappedData() {
		// TODO Auto-generated method stub
		return wrappedData;
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#isRowAvailable()
	 */
	public boolean isRowAvailable() {
		// TODO Auto-generated method stub
		return rowIndex>=getMinRow() && rowIndex<getMaxRow();
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#setRowIndex(int)
	 */
	public void setRowIndex(int rowIndex) {
		this.rowIndex = rowIndex;
	}

	/* (non-Javadoc)
	 * @see javax.faces.model.DataModel#setWrappedData(java.lang.Object)
	 */
	public void setWrappedData(Object data) {
		wrappedData = data;
	}

}
