/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.operation.treatment;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* Permet la detection d'une rupture dans un jeux d'enregistrements.
*
* <p>
* Note: un enregistrement unique dans le jeux ou le dernier appel ne retourne pas une
* rupture.
* </p>
*
* @author $Author: marcona $
* @version $Revision: 1.4 $
*
*/
public class BreakDetector {
private String oldLine = null;
private String[] listPk = null;
private boolean isAggregate = false;
/**
* Constructeur pour un detecteur de rupture en mode ligne a ligne.
*/
public BreakDetector() {
this(null);
}
/**
* Constructeur pour un detecteur de rupture en mode agregation.
*
* @param pk La liste des champs cle sur lesquelles la methode
* <code>isBreakPoint</code> detecte une rupture.
*/
public BreakDetector(String[] pk) {
if (pk == null) {
isAggregate = false;
}
else {
listPk = pk;
isAggregate = true;
}
}
/**
* Appele a chaque ligne d'un jeux d'enregistrements, permet la detection d'une
* rupture en fonction du mode de rupture.
*
* @param rs Le ResultSet pour la detection de la rupture.
*
* @return True si rupture
*
* @exception SQLException -
*/
public boolean isBreakPoint(ResultSet rs) throws SQLException {
if (isAggregate) {
boolean returnBreakPoint = false;
String newLine = "";
for (int i = 0; i < listPk.length; i++) {
newLine = newLine + rs.getObject(listPk[i]);
}
if (oldLine == null) {
oldLine = newLine;
}
returnBreakPoint = !newLine.equals(oldLine);
oldLine = newLine;
return returnBreakPoint;
}
else {
if (oldLine == null) {
oldLine = "";
return false;
}
else {
return true;
}
}
}
/**
* Reinitialise le pointeur de rupture.
*/
public void clear() {
oldLine = null;
}
/**
* DOCUMENT ME!
*
* @return
*/
public String toString() {
return "BreakDetector(aggregation = " + isAggregate + " , breakKeys = "
+ ((listPk != null) ? java.util.Arrays.asList(listPk).toString() : "None");
}
}