/*
* codjo.net
*
* Common Apache License 2.0
*/
package net.codjo.operation;
import net.codjo.model.Table;
import net.codjo.persistent.AbstractPersistent;
import net.codjo.persistent.PersistenceException;
import net.codjo.persistent.Reference;
import net.codjo.utils.ConnectionManager;
/**
* Classe de base pour tous les comportements.
*
* @author $Author: blazart $
* @version $Revision: 1.2 $
*
*/
public abstract class Behavior extends AbstractPersistent {
private transient int lengthOfTask = 0;
private transient int currentOfTask = 0;
private transient ConnectionManager connectionManager;
private Reference destTableRef;
private Reference sourceTableRef;
/**
* Constructor for the Behavior object.
*
* @param selfRef La reference de ce comportement
* @param sourceTable
* @param destTable
*/
protected Behavior(Reference selfRef, Table sourceTable, Table destTable) {
super(selfRef);
initTable(sourceTable, destTable);
}
/**
* Constructor pour les tests.
*
* @param sourceTable
* @param destTable
*/
protected Behavior(Table sourceTable, Table destTable) {
initTable(sourceTable, destTable);
}
/**
* Positionne le manager de connection de la tache.
*
* @param newConnectionManager The new ConnectionManager value
*
* @throws IllegalArgumentException TODO
*/
public final void setConnectionManager(ConnectionManager newConnectionManager) {
if (newConnectionManager == null) {
throw new IllegalArgumentException();
}
connectionManager = newConnectionManager;
}
/**
* Retourne la table de destination
*
* @return The DestTable value
*/
public final Table getDestTable() {
if (destTableRef != null) {
return (Table)destTableRef.getLoadedObject();
}
else {
return null;
}
}
/**
* Retourne la table source.
*
* @return The SourceTable value
*/
public final Table getSourceTable() {
if (sourceTableRef != null) {
return (Table)sourceTableRef.getLoadedObject();
}
else {
return null;
}
}
/**
* Retourne La taille totale de la tache. Cette valeur est initialise par la methode
* determineLengthOfTask.
*
* @return The LengthOfTask value
*
* @see #determineLengthOfTask
*/
public int getLengthOfTask() {
return lengthOfTask;
}
/**
* Retourne le compteur courant de la tache.
*
* @return The CurrentOfTask value
*/
public int getCurrentOfTask() {
return currentOfTask;
}
/**
* Prepare l'execution de l'operation du comportement. Cette methode doit s'assurer
* que tout les elements dont a besoins le comportement sont en memoire.
*
* @exception PersistenceException
*/
public abstract void prepareProceed() throws PersistenceException;
/**
* Determine la longueur de l'op�ration � effectuer (ex : Nb de lignes du fichier �
* importer).
*
* <p>
* <b>Attention</b> : La methode met a jour l'attribut lengthOfTask.
* </p>
*
* @param ope Description of Parameter
*
* @exception Exception Description of Exception
*/
public abstract void determineLengthOfTask(Operation ope)
throws Exception;
/**
* Lance le traitement attache a l'operation.
*
* <p>
* Il est fortement deconseille d'appeler cette methode directement. Pour effectuer
* le traitement il est preferable de passer par l'Operation.
* </p>
*
* @param ope L'operation qui lance le comportement
*
* @exception Exception -
*
* @see net.codjo.operation.Operation#proceed
*/
public abstract void proceed(Operation ope) throws Exception;
/**
* Positionne la taille totale de la tache.
*
* @param n The new LengthOfTask value
*/
public void setLengthOfTask(int n) {
lengthOfTask = n;
}
/**
* Positionne la taille totale de la tache.
*
* @param newCurrentOfTask The new CurrentOfTask value
*/
protected void setCurrentOfTask(int newCurrentOfTask) {
currentOfTask = newCurrentOfTask;
}
/**
* Retourne le ConnectionManager de ce traitement
*
* @return The ConnectionManager value
*/
protected final ConnectionManager getConnectionManager() {
return connectionManager;
}
/**
* Incremente le compteur courant de la tache.
*/
public final void incrementCurrentOfTask() {
currentOfTask++;
}
/**
* Init.
*
* @param sourceTable
* @param destTable
*/
private void initTable(Table sourceTable, Table destTable) {
if (destTable != null) {
this.destTableRef = destTable.getReference();
}
if (sourceTable != null) {
this.sourceTableRef = sourceTable.getReference();
}
}
}