/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.control.common.util;
import net.codjo.control.common.UnexpectedControlException;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
/**
* Iterateur sur les entit� d�finit dans la table des controles.
*
* <p> Exemple d'utilisation :
* <pre>
* while (iterator.hasNext()) {
* Dividend div = (Dividend)iterator.next();
* div.setLabel("update");
* iterator.update(div);
* }
* iterator.close();
* </pre>
* </p>
*
* @author $Author: gonnot $
* @version $Revision: 1.4 $
*/
class EntityIteratorImpl implements EntityIterator {
private boolean hasNext = false;
private boolean loaded = false;
private Object currentObject;
private EntityHelper entityHelper;
private ResultSet rs;
private Statement stmt;
EntityIteratorImpl(EntityHelper entityHelper, ResultSet rs, Statement stmt) {
if (entityHelper == null || rs == null) {
throw new IllegalArgumentException("EntityIterator mal initialis�.");
}
this.entityHelper = entityHelper;
this.rs = rs;
this.stmt = stmt;
}
public void close() {
try {
stmt.close();
}
catch (SQLException ex) {
throw new UnexpectedControlException(ex);
}
}
public boolean hasNext() {
if (!loaded) {
loadNextObject();
}
return hasNext;
}
public Object next() {
if (!hasNext) {
throw new IllegalArgumentException("plus d'enregistrement");
}
Object obj = currentObject;
loaded = false;
return obj;
}
public void remove() {
throw new java.lang.UnsupportedOperationException(
"La m�thode remove() n'est pas encore impl�ment�e.");
}
public void update(Object obj, EntityResultState controlError) {
if (obj != currentObject) {
throw new IllegalStateException(
"Tentative de mise-�-jours de la mauvaise ligne");
}
try {
entityHelper.updateResultSet(rs, obj, controlError);
rs.updateRow();
}
catch (Exception ex) {
throw new UnexpectedControlException(ex);
}
}
private void loadNextObject() {
loaded = true;
try {
if (rs.next()) {
hasNext = true;
currentObject = entityHelper.newObjectFrom(rs);
}
else {
hasNext = false;
currentObject = null;
}
}
catch (Exception ex) {
throw new UnexpectedControlException(ex);
}
}
}