Salut, Que pensez-vous de ca ? avez-vous des idées contre, des améliorations ? une lib de log/surveillance de tache, qui permet a des listener de s'enregistrer pour connaitre les taches en cours, leur longueur, leur statut actuel, ... les methodes prenant du temps utilisent cette lib pour indiquer leur statut et la lib informe les listeners. pour le log ou s'appuie sur commons-logging Dans le jar de lutinutil le fichier META-INF/services/org.apache.commons.logging.LogFactory contient org.codelutin.util.LutinLogFactory lorsque l'on demande a LutinLogFactory un log il retourne un LutinLog avec en parametre du constructeur le vrai Log commons-logging sur lequel deleguer les appels. Pour cela LutinLogFactory a instancier un org.apache.commons.logging.impl.LogFactoryImpl, sur lequel il appelle le getInstance(...) De cette facon, les libs qui utilisent commons-logging seront automatiquement modifier pour utiliser LutinLog et elle continuront a fonctionner sauf qu'elles leveront des event en plus. Et les applis qui utiliseront explicitement LutinLog pourront utiliser le mecanisme de suivi des taches. Et de la modif du text utilisateur. Il faudra penser a modifier ApplicationMonitor pour qu'il utilise ce nouveau mecanisme. On peut avec cette nouvelle lib a tout moment monitorer le travaille d'un thread avec getMetaLutinLogThread pour par exemple le splash de demarrage, un thread de simulation, ... En plus de cette lib, il faut ecrire un ReaderMonitor, InputStreamMonitor, qui permettent de suivre l'avancement de la lecture de flux (voir javax.swing.ProgressMonitorInputStream comme exemple d'interception) a priori sur le reader, on ne sait pas combien de données il y a a lire, donc peut-etre force quelque chose comme ca Reader r = new InputStreamReader(new InputStreamMonitor(new FileInputStream(f))); peut-etre avoir ca encapsule: IOUtil.getReader(File or String or byte[] or ...) une method pour chaque type IOUtil.getInputStream(File or String or byte[] or ...) une method pour chaque type ces methodes ajoute automatiquement un InputStreamMonitor dans la boucle. faire un equivalent de javax.swing.ProgressMonitor qui s'ouvre apres un start si ActivateProgressMonitorTime est > 0. Ce progress est listener du LutinLog qui le contient pour modifier la progression et si ca method cancel est appelé alors appel le setAskStopTask Pour ce composant peut-etre permettre l'incorporation d'un widget pour par exemple mettre une image ou autre. +----------------------------+ | | | [user widget] | | | | <user message> | | Completed 434 out of 1000 | | |================== | | | | | +-----+ +-------------+ | | |Close| |Cancel action| | | +-----+ +-------------+ | +----------------------------+ Les classes LutinLogFactory extends org.apache.commons.logging.LogFactory ------------------------------------------------------------- getLog(Class): LutinLog // recupere un certain LutinLog getLog(String: LutinLog // recupere un certain LutinLog addLutinLogListener(LutinLogListener l); // ajout l comme listener de tous les LutinLog removeLutinLogListener(LutinLogListener l); addLutinLogListener(LutinLogListener l, LutinLog log); // ajout l comme listener d'un LutinLog specifique removeLutinLogListener(LutinLogListener l, LutinLog log); getDefaultTimeout(): long; // temps max qu'une tache est gardée, apres ce temps on considere qu'elle s'est terminé sans le dire setDefaultTimeout(long time); // modifie le temps ou taskWatch conserve la tache getStartedLutinLog(): List<LutinLog>; // retourne tous les LutinLog en cours (start appelé) (timeout non depassé) getStartedLutinLogThread(Thread thread): List<LutinLog> // retourne tous les LutinLog en cours pour le thread getStartedLutinLogCurrentThread(): List<LutinLog> // retourne tous les LutinLog en cours pour le thread courant getMetaLutinLog(): LutinLog; // retourne une encapsulation de tous les LutinLog getMetaLutinLogThread(Thread thread): LutinLog; // retourne une encapsulation de tous les LutinLog du thread. getMetaLutinLogCurrentThread(): LutinLog; // retourne une encapsulation de tous les LutinLog du thread. setDefaultActivateProgressMonitorTime(long time); // apres un start le temps avant de mettre le progress en marche (<=0 pour jamais) LutinLog extends org.apache.commons.logging.Log ----------------------------------------------- getName():String setActivateProgressMonitorTime(long time); // apres un start le temps avant de mettre le progress en marche (<=0 pour jamais) start(); // une tache indique son debut getTimeout(): long; // donne le timeout particulier pour une tache setTimeout(long time); // modifie le temps specifiquement pour une tache getMin(): int; setMin(int value); // une tache indique le min que peut prendre value getMax(): int; setMax(int value); // une tache indique le max que peut prendre value getValue(): int; setValue(int value); // la valeur courante pour la tache, -1 indique l'indetermination de la valeur getText(): String; setText(String text); // le text courant a afficher a l'utilisateur isAskStopTask(); // si on a demande a ce que la tache soit arretee setAskStopTask(boolean v); // demande ou annule la demande de fin de tache end(); // indique la fin complete d'une tache //pour toutes les methodes de org.apache.commons.logging.Log on delegue apres avoir fait le fire MetaLutinLog implements LutinLog -------------------------------- // leve une exception pour les methods trace, debug, info, warn, error, set*, start, end, getTimeout // pour getMin, getMax, getValue, retourne la somme de chaque LutinLog encapsulé // pour getText retourne le dernier getText appelé sur un des LutinLog encapsulé // pour isAskStopTask vrai si chaque LutinLog repond vrai // pour setAskStopTask appel la methode sur chaque LutinLog encapsulé LutinLogListener ----------------- eventTask(LutinLogEvent e); // pour tous les events de type suivi de tache eventLog(LutinLogEvent e); // pour tous les events de type suivi de log LutinLogEvent --------- getLutinLog(): LutinLog getType(): enum changeType(log, min, max, value, text, askStop, start, end) getMessage():String; // retourne pour log et setText, le message getThrowable(): Throwable; // retourne pour log l'exception getMessageType(): enum MessageType(trace, debug, ..., user) -- Benjamin -------------------- tél: +33 (0) 2 40 50 29 28 email: poussin@codelutin.com () campagne du ruban ascii http://www.codelutin.com /\ pour les mails en ascii