All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.ajax4jsf.ajax.repeat.SequenceDataModel Maven / Gradle / Ivy

Go to download

Ajax4jsf is an open source extension to the JavaServer Faces standard that adds AJAX capability to JSF applications without requiring the writing of any JavaScript.

The newest version!
/**
 * 
 */
package org.ajax4jsf.ajax.repeat;

import java.io.IOException;

import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;

/**
 * @author shura
 *
 */
public class SequenceDataModel extends ExtendedDataModel {
	
	DataModel wrapped;

	/**
	 * @param wrapped
	 */
	public SequenceDataModel(DataModel wrapped) {
		super();
		this.wrapped = wrapped;
	}

	/* (non-Javadoc)
	 * @see org.ajax4jsf.ajax.repeat.ExtendedDataModel#dataIterator(org.ajax4jsf.ajax.repeat.Range)
	 */
/*	public Iterator dataIterator(Range range) {
		final SequenceRange seqRange = (SequenceRange) range;
		int rows = seqRange.getRows();
		int rowCount = wrapped.getRowCount();
		final int firstRow = seqRange.getFirstRow();
		if(rows > 0){
			rows += firstRow;
			if(rowCount >=0){
				rows = Math.min(rows, rowCount);
			}
		} else if(rowCount >=0 ){
			rows = rowCount;
		} 
		final int maxRow = rows;
		return new Iterator(){
			
			int rowIndex = firstRow;

			public boolean hasNext() {
				// TODO Auto-generated method stub
				return maxRow < 0 || rowIndex < maxRow;
			}

			public Object next() {
				// TODO Auto-generated method stub
				return new Integer(rowIndex++);
			}

			public void remove() {
				throw new IllegalStateException();				
			}
			
		};
	}
*/	
	public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) throws IOException {
		final SequenceRange seqRange = (SequenceRange) range;
		int rows = seqRange.getRows();
		int rowCount = wrapped.getRowCount();
		int currentRow = seqRange.getFirstRow();
		if(rows > 0){
			rows += currentRow;
			if(rowCount >=0){
				rows = Math.min(rows, rowCount);
			}
		} else if(rowCount >=0 ){
			rows = rowCount;
		} else {
			rows = -1;
		}
		while (rows < 0 || currentRow < rows) {
			wrapped.setRowIndex(currentRow);
			if(wrapped.isRowAvailable()){
				visitor.process(context, new Integer(currentRow), argument);
			} else {
				break;
			}
			currentRow++;
		}
		
	}

	/* (non-Javadoc)
	 * @see org.ajax4jsf.ajax.repeat.ExtendedDataModel#getRowKey()
	 */
	public Object getRowKey() {
		int index = wrapped.getRowIndex();
		if(index<0){
			return null;
		}
		return new Integer(index);
	}

	/* (non-Javadoc)
	 * @see org.ajax4jsf.ajax.repeat.ExtendedDataModel#getSerializableModel(org.ajax4jsf.ajax.repeat.Range)
	 */
	public ExtendedDataModel getSerializableModel(Range range) {
		// By default data not serializable
		return null;
	}

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

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

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

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

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

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

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

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

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy