dnet-core/dnet-core-services/src/main/java/eu/dnetlib/enabling/resultset/push/TransientPushResultSetImpl....

100 lines
2.1 KiB
Java

package eu.dnetlib.enabling.resultset.push;
import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import eu.dnetlib.enabling.resultset.AbstractObservableResultset;
/**
* a push resultset which holds it's data in a transient cache.
*
* @author marko
*
*/
public class TransientPushResultSetImpl extends AbstractObservableResultset implements PushResultSet {
/**
* logger.
*/
private static final Log log = LogFactory.getLog(TransientPushResultSetImpl.class); // NOPMD by marko on 11/24/08 5:02 PM
/**
* dao.
*/
private final transient TransientPushResultSetDao dao;
/**
* rsId.
*/
private String identifier;
/**
* constructed by the transient push resultset factory.
*
* @param dao dao
*/
public TransientPushResultSetImpl(final TransientPushResultSetDao dao) {
super();
this.dao = dao;
setOpen(true);
}
/**
* {@inheritDoc}
*
* @see eu.dnetlib.enabling.resultset.push.PushResultSet#addElements(java.util.List)
*/
@Override
public void addElements(final List<String> elements) {
log.debug("adding to push RS: " + elements);
if (isOpen())
dao.addElements(getIdentifier(), elements);
else
throw new IllegalStateException("cannot write to a closed push resultset");
}
@Override
public int getNumberOfResults() {
return dao.getSize(getIdentifier());
}
/**
* {@inheritDoc}
*
* @see eu.dnetlib.enabling.resultset.ResultSet#getResults(int, int)
*/
@Override
public List<String> getResults(final int fromPosition, final int toPosition) {
final int size = getNumberOfResults();
int toPos = toPosition;
int fromPos = fromPosition;
if (fromPos > size)
fromPos = size;
if (toPos > size)
toPos = size;
log.debug("calling get elements: " + getIdentifier() + " from " + fromPos + " to " + toPos);
return dao.getElements(getIdentifier(), fromPos, toPos);
}
public TransientPushResultSetDao getDao() {
return dao;
}
@Override
public String getIdentifier() {
return identifier;
}
@Override
public void setIdentifier(final String identifier) {
this.identifier = identifier;
}
}