Package eu.planets_project.pp.plato.services.characterisation.jhove

Source Code of eu.planets_project.pp.plato.services.characterisation.jhove.JHoveExecutor

/*******************************************************************************
* Copyright (c) 2006-2010 Vienna University of Technology,
* Department of Software Technology and Interactive Systems
*
* All rights reserved. This program and the accompanying
* materials are made available under the terms of the
* Apache License, Version 2.0 which accompanies
* this distribution, and is available at
* http://www.apache.org/licenses/LICENSE-2.0
*******************************************************************************/
package eu.planets_project.pp.plato.services.characterisation.jhove;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.URI;

import org.apache.commons.logging.Log;

import edu.harvard.hul.ois.jhove.App;
import edu.harvard.hul.ois.jhove.JhoveBase;
import edu.harvard.hul.ois.jhove.Module;
import edu.harvard.hul.ois.jhove.handler.XmlHandler;
import eu.planets_project.pp.plato.util.FileUtils;
import eu.planets_project.pp.plato.util.OS;
import eu.planets_project.pp.plato.util.PlatoLogger;

public class JHoveExecutor {
    private Log log = PlatoLogger.getLogger(JHoveExecutor.class);
   
    private static final int[] myDate = { 2008, 2, 21 };

    public void execute(String outputFile, String filePathName) {
        try {
       
            App app = new App("", "", myDate, "", "");
            String configFile = loadConfigFile();
            String saxClass = JhoveBase.getSaxClassFromProperties();
           
            JhoveBase jhove = new JhoveBase();
            jhove.setLogLevel("SEVERE");

            jhove.init(configFile, saxClass);
            jhove.setEncoding("utf-8");
            jhove.setTempDirectory(OS.getTmpPath());
           

            // load all module
            Module module = null;

            XmlHandler aboutHandler = new XmlHandler();
            OutputStream out = newOutputStream(new StringBuffer());
            aboutHandler.setWriter(new PrintWriter(out));
            String s = new File(filePathName).toURI().toString();
            String[] dirFileOrUri = new String[] { s };

            // execute jhove
            jhove.dispatch(app, module, aboutHandler, aboutHandler, outputFile,
                    dirFileOrUri);
        } catch (Exception e) {
            log.error("could not execute jhove: "+e.getMessage(),e);
        }
    }

    /**
     * Save the dynamic configuration in a file accessible from jhove if the
     * configuration is not present: else returns the configuration file path
     *
     * @return
     * @throws IOException
     */
    private String loadConfigFile() throws IOException {
        String confFile = "jhove.conf";
        File f = new File(OS.getTmpPath() + confFile);

            if (!f.exists()) {
                InputStream in = new BufferedInputStream(Thread.currentThread()
                        .getContextClassLoader().getResourceAsStream("jhove.conf"));

                OutputStream out = new FileOutputStream(f);
               
                FileUtils.writeToFile(in,out);
            }
        return f.getAbsolutePath();
    }

    // Returns an output stream for a ByteBuffer.
    // The write() methods use the relative ByteBuffer put() methods.
    public static OutputStream newOutputStream(final StringBuffer buf) {
        return new OutputStream() {
            public synchronized void write(int b) throws IOException {
                buf.append((byte) b);
            }

        };
    }

}
TOP

Related Classes of eu.planets_project.pp.plato.services.characterisation.jhove.JHoveExecutor

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.