package in.partake.model.dao.postgres9;
import in.partake.model.dao.DAOException;
import in.partake.model.dao.DataIterator;
import in.partake.model.dao.DataMapper;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.NoSuchElementException;
public class Postgres9EntityIterator extends DataIterator<Postgres9Entity> {
private Postgres9StatementAndResultSet sars;
private Postgres9EntityDao entityDao;
private Postgres9Connection pcon;
private DataMapper<ResultSet, Postgres9Entity> mapper;
private Postgres9Entity next;
private Postgres9Entity current;
public Postgres9EntityIterator(DataMapper<ResultSet, Postgres9Entity> mapper, Postgres9EntityDao entityDao, Postgres9Connection pcon, Postgres9StatementAndResultSet sars) {
this.mapper = mapper;
this.entityDao = entityDao;
this.pcon = pcon;
this.sars = sars;
}
@Override
public boolean hasNext() throws DAOException {
if (next != null)
return true;
try {
if (!sars.getResultSet().next())
return false;
next = mapper.map(sars.getResultSet());
return true;
} catch (SQLException e) {
throw new DAOException(e);
}
}
@Override
public Postgres9Entity next() throws DAOException {
if (hasNext()) {
current = next;
next = null;
return current;
}
assert next == null;
current = null;
throw new NoSuchElementException();
}
@Override
public void close() {
sars.close();
}
@Override
public void remove() throws DAOException, UnsupportedOperationException {
entityDao.remove(pcon, current.getId());
}
@Override
public void update(Postgres9Entity entity) throws DAOException, UnsupportedOperationException {
entityDao.update(pcon, entity);
}
}