/* Copyright (c) 2009 Peter Troshin * * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0 * * This library is free software; you can redistribute it and/or modify it under the terms of the * Apache License version 2 as published by the Apache Software Foundation * * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Apache * License for more details. * * A copy of the license is in apache_license.txt. It is also available here: * @see: http://www.apache.org/licenses/LICENSE-2.0.txt * * Any republication or derived work distributed in source code form * must include this copyright and license notice. */ package compbio.runner; import java.io.File; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import compbio.data.sequence.Alignment; import compbio.data.sequence.ClustalAlignmentUtil; import compbio.data.sequence.FastaSequence; import compbio.data.sequence.Score; import compbio.data.sequence.SequenceUtil; import compbio.data.sequence.UnknownFileFormatException; import compbio.engine.client.ConfExecutable; import compbio.engine.client.ConfiguredExecutable; import compbio.engine.client.Executable; import compbio.engine.conf.PropertyHelperManager; import compbio.metadata.LimitsManager; import compbio.metadata.PresetManager; import compbio.metadata.RunnerConfig; import compbio.util.PropertyHelper; public final class Util { private static Logger log = Logger.getLogger(Util.class); private static final PropertyHelper ph = PropertyHelperManager .getPropertyHelper(); public static final String SPACE = " "; /** * For now just assume that all parameters which came in needs setting it * will be a client responsibility to prepare RunnerConfig object then * * @param rconfig * @return * * public static List toOptionString(RunnerConfig * rconfig) { String option = ""; List options = new * ArrayList(); for (Parameter par : * rconfig.getParameters()) { if (par.getPossibleValues().isEmpty()) * { option = par.getOptionName(); } else { option = * par.getOptionName() + "=" + par.getPossibleValues().get(0); } // * separate options options.add(option); } return options; } */ public static LimitsManager getLimits(Class> clazz) { LimitsManager limits = null; try { limits = ConfExecutable.getRunnerLimits(clazz); } catch (FileNotFoundException e) { log.warn( "No limits are found for " + clazz + " executable! " + e.getLocalizedMessage(), e.getCause()); // its ok, limit may not be initialized } catch (IOException e) { log.warn("IO exception while attempting to read limits for " + clazz + " executable! " + e.getLocalizedMessage(), e.getCause()); } return limits; } public static synchronized RunnerConfig getSupportedOptions( Class> clazz) { try { return ConfExecutable.getRunnerOptions(clazz); } catch (FileNotFoundException e) { log.error( "Could not load " + clazz + " Parameters !" + e.getMessage(), e.getCause()); } catch (IOException e) { log.error("IO exception while reading " + clazz + " Parameters !" + e.getMessage(), e.getCause()); } return null; } public static PresetManager getPresets( Class> clazz) { try { return ConfExecutable.getRunnerPresets(clazz); } catch (FileNotFoundException e) { log.warn( "No presets are found for " + clazz + " executable! " + e.getLocalizedMessage(), e.getCause()); } catch (IOException e) { log.warn("IO exception while reading presents! for " + clazz + " executable! " + e.getLocalizedMessage(), e.getCause()); } return null; } public static final Alignment readClustalFile(String workDirectory, String clustFile) throws UnknownFileFormatException, IOException, FileNotFoundException, NullPointerException { assert !compbio.util.Util.isEmpty(workDirectory); assert !compbio.util.Util.isEmpty(clustFile); File cfile = new File(compbio.engine.client.Util.getFullPath( workDirectory, clustFile)); log.trace("CLUSTAL OUTPUT FILE PATH: " + cfile.getAbsolutePath()); if (!(cfile.exists() && cfile.length() > 0)) { throw new FileNotFoundException("Result for the jobId " + workDirectory + " with file name " + clustFile + " is not found!"); } return ClustalAlignmentUtil.readClustalFile(cfile); } public static final Map readJronnFile(String workDirectory, String clustFile) throws UnknownFileFormatException, IOException, FileNotFoundException, NullPointerException { assert !compbio.util.Util.isEmpty(workDirectory); assert !compbio.util.Util.isEmpty(clustFile); File cfile = new File(compbio.engine.client.Util.getFullPath( workDirectory, clustFile)); log.trace("Jronn OUTPUT FILE PATH: " + cfile.getAbsolutePath()); if (!(cfile.exists() && cfile.length() > 0)) { throw new FileNotFoundException("Result for the jobId " + workDirectory + " with file name " + clustFile + " is not found!"); } return SequenceUtil.readJRonn(cfile); } public static void writeInput(List sequences, ConfiguredExecutable exec) { File filein = new File(exec.getInput()); try { FileOutputStream fout = new FileOutputStream(filein); log.debug("File path: " + filein.getAbsolutePath()); SequenceUtil.writeFasta(fout, sequences); fout.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } }