[Castore-commits] ConverterThread.java NONE 1.1
Céline BENOIT
cbenoit at adullact1.hosting.cri74.org
Mer 22 Mar 14:19:16 CET 2006
Update of /cvsroot/castore/castore-core/src/java/fr/emn/castor/documents/metier/textes/retro
In directory adullact1:/tmp/cvs-serv21915/src/java/fr/emn/castor/documents/metier/textes/retro
Added Files:
ConverterThread.java
Log Message:
déplacement du fichier
adaptation du code aux médias
--- NEW FILE: ConverterThread.java ---
/*
* $Id: ConverterThread.java,v 1.1 2006/03/22 13:19:14 cbenoit Exp $
*
* Plateforme CASTORE
* CeCILL Copyright (C) 2005-2006 by EMN
* Made by Stéphane Bouchet, Olivier Grouhan, Vanessa Bergere
* Web site = http://www.emn.fr/castore
* Contact = Cédric Dumas, e-mail = Cedric.Dumas at emn.fr
*
* Version 1.0 (1er mars 2005)
*
* Ce logiciel est un programme informatique servant à créer une plateforme
* open-source de bibliothèque numérique XML pour Conserver, Valoriser et
* Diffuser le patrimoine documentaire de votre institut.
*
* Ce logiciel est régi par la licence CeCILL soumise au droit français et
* respectant les principes de diffusion des logiciels libres. Vous pouvez
* utiliser, modifier et/ou redistribuer ce programme sous les conditions de la
* licence CeCILL telle que diffusée par le CEA, le CNRS et l'INRIA sur le site
* "http://www.cecill.info". En contrepartie de l'accessibilité au code source
* et des droits de copie, de modification et de redistribution accordés par
* cette licence, il n'est offert aux utilisateurs qu'une garantie limitée. Pour
* les mêmes raisons, seule une responsabilité restreinte pèse sur l'auteur du
* programme, le titulaire des droits patrimoniaux et les concédants successifs.
* A cet égard l'attention de l'utilisateur est attirée sur les risques associés
* au chargement, à l'utilisation, à la modification et/ou au développement et à
* la reproduction du logiciel par l'utilisateur étant donné sa spécificité de
* logiciel libre, qui peut le rendre complexe à manipuler et qui le réserve
* donc à des développeurs et des professionnels avertis possédant des
* connaissances informatiques approfondies. Les utilisateurs sont donc invités
* à charger et tester l'adéquation du logiciel à leurs besoins dans des
* conditions permettant d'assurer la sécurité de leurs systèmes et ou de leurs
* données et, plus généralement, à l'utiliser et l'exploiter dans les mêmes
* conditions de sécurité. Le fait que vous puissiez accéder à cet en-tête
* signifie que vous avez pris connaissance de la licence CeCILL, et que vous en
* avez accepté les termes.
*
*/
package fr.emn.castor.documents.metier.textes.retro;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.BuildLogger;
import org.apache.tools.ant.DefaultLogger;
import org.apache.tools.ant.Main;
import org.apache.tools.ant.Project;
import org.apache.tools.ant.helper.ProjectHelperImpl;
import fr.emn.castor.common.Constants;
import fr.emn.castor.documents.DocumentsConstants;
import fr.emn.castor.documents.Fonds;
/**
* Classe representant le thread qui pilote la retro-conversion.
*
* @author $Author: cbenoit $
* @version $Revision: 1.1 $
*
*/
public final class ConverterThread extends Thread {
/** le logger. */
private static Log log = LogFactory.getLog(ConverterThread.class);
/** Le format d'entree pour OOO. */
private String inputFormat;
/** l'identifiant du document a retro-convertir. */
private String id;
/** le fonds. */
private Fonds fonds;
/** la feuille de style. */
private String fsFile;
/**
* Constructeur.
*
* @param idDoc l'identifiant du document.
* @param format le format du document.
* @param fsUsed la feuille de style a utiliser lors de la retro-convertion.
*/
public ConverterThread(final String idDoc, final String format,
final String fsUsed) {
super("ConverterThread-" + idDoc);
this.id = idDoc;
this.inputFormat = format;
this.fonds = Fonds.getInstance();
this.fsFile = fsUsed;
}
/**
* @see java.lang.Thread#run()
*/
public void run() {
// on lance la tache ant de conversion
// 5 parametres
// input.document le document d'entree
// format le format du doc en entree ( HTML, Word ou OpenOffice )
// output.document le document de sortie XML
// structure.rules.xslt la feuille de style a appliquer
// tmpdata.basedir le repertoire ou se deroulera la conversion
try {
Project project = new Project();
File buildFile = new File(Constants.CASTOR_RETRO_PATH
+ Constants.FILE_SEPARATOR + "build.xml");
project.setUserProperty("ant.file", buildFile.getAbsolutePath());
project.setUserProperty("input.document", this.fonds
.getPathSource(this.id));
project.setUserProperty(
"input.document.format", this.inputFormat);
project.setUserProperty(
"structure.rules.xslt", Constants.CASTOR_S4S_PATH
+ Constants.FILE_SEPARATOR
+ "stockOfStructurationFiles"
+ Constants.FILE_SEPARATOR + this.fsFile);
project.setUserProperty("output.document", this.fonds
.getPathForId(this.id)
+ Constants.FILE_SEPARATOR + "document.xml");
project.setUserProperty("tmpdata.basedir", this.fonds
.getPathForId(this.id));
project.setUserProperty("ant.version", Main.getAntVersion());
project.init();
ProjectHelperImpl helper = new ProjectHelperImpl();
project.addReference("ant.projectHelper", helper);
helper.parse(project, buildFile);
BuildLogger logger = new DefaultLogger();
if (log.isDebugEnabled()) {
logger.setMessageOutputLevel(Project.MSG_DEBUG);
} else {
logger.setMessageOutputLevel(Project.MSG_INFO);
}
FileOutputStream fOutOutputStream = new FileOutputStream(
this.fonds.getPathForId(this.id) + Constants.FILE_SEPARATOR
+ "out.log");
PrintStream outStream = new PrintStream(fOutOutputStream);
logger.setOutputPrintStream(outStream);
FileOutputStream fErrOutputStream = new FileOutputStream(
this.fonds.getPathForId(this.id) + Constants.FILE_SEPARATOR
+ "err.log");
PrintStream errStream = new PrintStream(fErrOutputStream);
logger.setErrorPrintStream(errStream);
project.addBuildListener(logger);
project.fireBuildStarted();
project.executeTarget(project.getDefaultTarget());
project.fireBuildFinished(null);
errStream.close();
outStream.close();
fErrOutputStream.close();
fOutOutputStream.close();
} catch (BuildException be) {
if (log.isFatalEnabled()) {
log.fatal(
"Une erreur est survenue lors de la retro-conversion : "
+ be.getMessage(), be);
}
this.fonds.setConvStatut(
this.id, DocumentsConstants.CONVERSION_ERROR);
return;
} catch (FileNotFoundException fnfe) {
if (log.isFatalEnabled()) {
log.fatal(
"Une erreur est survenue lors de la retro-conversion : "
+ fnfe.getMessage(), fnfe);
}
this.fonds.setConvStatut(
this.id, DocumentsConstants.CONVERSION_ERROR);
return;
} catch (IOException ioe) {
if (log.isFatalEnabled()) {
log.fatal(
"Une erreur est survenue lors de la retro-conversion : "
+ ioe.getMessage(), ioe);
}
this.fonds.setConvStatut(
this.id, DocumentsConstants.CONVERSION_ERROR);
return;
}
if (log.isDebugEnabled()) {
log.debug("Fin de la retro-conversion.");
}
this.fonds.setConvStatut(
this.id, DocumentsConstants.CONVERSION_ENDED);
if (Constants.CLEAN_AFTER_CONV.equals("true")) {
if (log.isDebugEnabled()) {
log.debug("Nettoyage demandé après conversion");
}
// on supprime le résultat de la conversion
ConverterXML converter = ConverterXML.getInstance();
boolean okClean = converter.cleanConv(this.id, false);
if (!okClean && log.isErrorEnabled()) {
log.error("Le nettoyage ne s'est pas correctement terminé.");
}
}
}
}
Plus d'informations sur la liste de diffusion Castore-commits