[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