org.ajax4jsf.model.SequenceDataModel Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of richfaces-core Show documentation
Show all versions of richfaces-core Show documentation
The RichFaces core framework.
The newest version!
/*
* JBoss, Home of Professional Open Source
* Copyright 2013, Red Hat, Inc. and individual contributors
* by the @authors tag. See the copyright.txt in the distribution for a
* full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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 software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.ajax4jsf.model;
import javax.faces.context.FacesContext;
import javax.faces.model.DataModel;
/**
* @author shura
*
*/
public class SequenceDataModel extends ExtendedDataModel {
private DataModel wrappedModel;
/**
* @param wrapped
*/
public SequenceDataModel(DataModel wrapped) {
super();
this.wrappedModel = wrapped;
}
public void walk(FacesContext context, DataVisitor visitor, Range range, Object argument) {
final SequenceRange seqRange = (SequenceRange) range;
int rows = seqRange.getRows();
int rowCount = wrappedModel.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;
}
DataVisitResult visitResult = null;
while (rows < 0 || currentRow < rows) {
wrappedModel.setRowIndex(currentRow);
if (wrappedModel.isRowAvailable()) {
visitResult = visitor.process(context, new Integer(currentRow), argument);
if (DataVisitResult.STOP.equals(visitResult)) {
break;
}
} else {
break;
}
currentRow++;
}
}
/*
* (non-Javadoc)
*
* @see org.richfaces.model.ExtendedDataModel#getRowKey()
*/
public Object getRowKey() {
int index = wrappedModel.getRowIndex();
if (index < 0) {
return null;
}
return new Integer(index);
}
/*
* (non-Javadoc)
*
* @see org.richfaces.model.ExtendedDataModel#setRowKey(java.lang.Object)
*/
public void setRowKey(Object key) {
if (null == key) {
wrappedModel.setRowIndex(-1);
} else {
Integer index = (Integer) key;
wrappedModel.setRowIndex(index.intValue());
}
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#getRowCount()
*/
public int getRowCount() {
return wrappedModel.getRowCount();
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#getRowData()
*/
public E getRowData() {
return wrappedModel.getRowData();
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#getRowIndex()
*/
public int getRowIndex() {
return wrappedModel.getRowIndex();
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#getWrappedData()
*/
public Object getWrappedData() {
return wrappedModel.getWrappedData();
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#isRowAvailable()
*/
public boolean isRowAvailable() {
return wrappedModel.isRowAvailable();
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#setRowIndex(int)
*/
public void setRowIndex(int rowIndex) {
wrappedModel.setRowIndex(rowIndex);
}
/*
* (non-Javadoc)
*
* @see javax.faces.model.DataModel#setWrappedData(java.lang.Object)
*/
public void setWrappedData(Object data) {
wrappedModel.setWrappedData(data);
}
/**
* @return the wrappedModel
*/
protected DataModel getWrappedModel() {
return this.wrappedModel;
}
/**
* @param wrappedModel the wrappedModel to set
*/
protected void setWrappedModel(DataModel wrappedModel) {
this.wrappedModel = wrappedModel;
}
}