org.ajax4jsf.ajax.repeat.SequenceDataModel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ajax4jsf Show documentation
Show all versions of ajax4jsf Show documentation
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);
}
}