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

Source Code of eu.planets_project.pp.plato.services.characterisation.fits.FitsIntegration

/*******************************************************************************
* 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.fits;

import java.io.File;
import java.io.Serializable;

import org.apache.commons.logging.Log;
import org.dom4j.io.OutputFormat;

import eu.planets_project.pp.plato.services.PlatoServiceException;
import eu.planets_project.pp.plato.util.CommandExecutor;
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 FitsIntegration implements Serializable {
    /**
     *
     */
    private static final long serialVersionUID = 1L;

    private static final Log log = PlatoLogger.getLogger(FitsIntegration.class);

   // private static final long serialVersionUID = 5183122855613215086L;
    public static OutputFormat prettyFormat = new OutputFormat(" ", true,"ISO-8859-1"); //OutputFormat.createPrettyPrint();

    private static String FITS_HOME;
   
    private static String FITS_COMMAND = "%FITS_EXEC% -i %INPUT% -o %OUTPUT%";
   
    public FitsIntegration() throws PlatoServiceException{
        FITS_HOME = System.getenv("FITS_HOME");
        if (FITS_HOME == null) {
            FITS_HOME = "/home/kraxner/dev/fits-0.2.6/";
            if (! new File(FITS_HOME).exists()) {
                FITS_HOME = null;
            }
        }
        if (FITS_HOME == null) {
            throw new PlatoServiceException("FITS is not propertly configured - FITS_HOME is not defined.");
        }
    }
   
    public String characterise(File input) throws PlatoServiceException{
        CommandExecutor cmdExecutor = new CommandExecutor();
        cmdExecutor.setWorkingDirectory(FITS_HOME);
        String scriptExt;
        if ("Linux".equalsIgnoreCase(System.getProperty("os.name"))){
            scriptExt = "./fits.sh";
        } else {
            scriptExt = "cmd /c %FITS_HOME%/fits";
        }
        File output = new File(OS.getTmpPath() + "fits"+System.nanoTime()+".out");
        try {
            String commandLine = FITS_COMMAND.replace("%FITS_EXEC%", scriptExt)
                .replace("%INPUT%", input.getAbsolutePath())
                .replace("%OUTPUT%", output.getAbsolutePath());
           
            try {
                int exitcode = cmdExecutor.runCommand(commandLine);
                if (exitcode != 0) {
                    String cmdError = cmdExecutor.getCommandError();
                    throw new PlatoServiceException("FITS characterisation for file: " + input + " failed: " + cmdError);
                }
                if (!output.exists()) {
                    throw new PlatoServiceException("FITS characterisation for file: " + input + " failed: no output was written.");
                }
               
                return new String(FileUtils.getBytesFromFile(output));
            } catch (PlatoServiceException e) {
                throw e;
            } catch (Throwable t) {
                throw new PlatoServiceException("FITS characterisation for file: " + input + " failed: " + t.getMessage(), t);           
            }
        } finally {
            output.delete();
        }
    }
   
}
TOP

Related Classes of eu.planets_project.pp.plato.services.characterisation.fits.FitsIntegration

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.