J’ai créé un Adaptateur de type LineBasedAdapter pour importer des données en base et je voudrais effectuer des opérations APRES que les données aient été physiquement écrites en BDD.
Je pensais ajouter mon code dans la méthode postProcess() mais je me suis rendu compte que celle-ci était appelée avant l’écriture en BDD…
Est-il possible de forcer l’import du fichier XML généré par l’adaptateur avant d’appeler la méthode postProcess ?
Merci de votre réponse.
Je ne suis pas la personne ayant initié le développement de cet adaptateur mais voici en gros (car j’ai supprimé tous les traitements de l’extrait de code) comment cette dernière a procédé :
public class MyAdapter extends LineBasedAdapter {
public static String toXmlUpsert(ObjectDB obj,String[] vals,List<String> header,Hashtable<String,String> transcodage,DataXML datas)
{
ObjectXML objectXml = new ObjectXML(obj.getName(), ObjectXML.ACTION_UPSERT);
...
objectXml.addData(datas);
return objectXml.toString();
}
String traitementLigne(String[] vals)
{
return toXmlUpsert(....);
}
@Override
public String preProcess() {
...
}
@Override
public String processLine(long lineNumber, String line)
{
append(traitementLigne(vals));
return "";
}
@Override
public void postProcess() {
...
}
}
En effet, j’ai développé d’autres adaptateurs en écrivant directement les objets en BDD mais dans ce cas de figure, je ne voulais pas réécrire intégralement l’adaptateur et m’appuyer sur le travail fait par mon collègue.
Dans mon cas, j’importe les données en cliquant sur l’Import XML, en sélectionnant un fichier et l’adaptateur correspondant.
Aujourd’hui, je veux MAJ une table d’utilisateurs à partir d’un fichier, et nettoyer cette même table une fois l’import effectué.
Le nettoyage consiste à supprimer tous les utilisateurs encore en BDD qui n’étaient pas présent dans le fichier.
Pour se faire, j’ai un champ dans la table qui sert de flag que je positionne à 0 lorsque j’importe chaque ligne, puis je supprime tous les utilisateurs qui ont ce flag à autre chose que 0… Sauf qu’au moment du postProcess, tous les utilisateurs ont un flag différent de 0. Donc l’import me recrée tous les utilisateurs au lieu de faire des update… ce qui pose problème puisque les row_id ne sont plus les mêmes…
Bref, ma question était de savoir s’il y avait possibilité de forcer l’écriture en base du fichier XML avant l’appel de postProcess.
J’ai trouvé la méthode directProcess dans l’adapter mais je ne sais pas à quoi elle sert…
Je ferais une méthode qui supprime les utilisateurs dont le flag est différent de 0.
La méthode serait appelée depuis une action de l’utilisateur ou une tâche planifiée.
Oui j’y ai pensé… mais le soucis, c’est qu’entre le moment de l’import et le moment du passage de la tâche planifiée, il restera des utilisateurs qui ne devraient plus être là…
Donc pour résumer, si je veux que la suppression des utilisateurs se fasse au moment de l’import, il va bien falloir que réécrive l’adaptateur ?