/* * * @(#)InputParameters.java 1.0 September 2009 * * Copyright (c) 2009 Peter Troshin * * BioJava development code * * This code may be freely distributed and modified under the * terms of the GNU Lesser General Public Licence. This should * be distributed with the code. If you do not have a copy, * see: * * http://www.gnu.org/copyleft/lesser.html * * Copyright for this code is held jointly by the individual * authors. These should be listed in @author doc comments. * * For more information on the BioJava project and its aims, * or to join the biojava-l mailing list, visit the home page * at: * * http://www.biojava.org/ * */ package org.biojava.nbio.ronn; import org.biojava.nbio.ronn.ORonn.ResultLayout; import java.io.*; /** * Holder for input parameters of the {@link ORonn} class * * @author Peter Troshin * @version 1.0 * @since 3.0.2 */ final class InputParameters { static final String inputKey = "-i="; static final String outputKey = "-o="; static final String statKey = "-s="; static final String disorderKey = "-d="; static final String formatKey = "-f="; static final String threadKey = "-n="; private File input; private File output; private File statistics; private ResultLayout format; private float disorder; private int threadNum; private volatile PrintWriter outWriter; private volatile PrintWriter statWriter; InputParameters() { threadNum = Runtime.getRuntime().availableProcessors(); disorder = RonnConstraint.DEFAULT_DISORDER; } File setFilePrm(String filename, final String key) throws IOException { File file = null; if (filename == null) { throw new IllegalArgumentException("File name is not provided! "); } filename = filename.trim(); if (filename.toLowerCase().startsWith(key)) { file = new File(filename.substring(key.length())); if (!file.exists()) { file.createNewFile(); } if (key.equals(InputParameters.inputKey)) { input = file; } if (key.equals(InputParameters.outputKey)) { output = file; } if (key.equals(InputParameters.statKey)) { statistics = file; } } return file; } PrintWriter getOutputWriter() throws FileNotFoundException { if (outWriter == null) { synchronized (this) { if (outWriter == null) { if (output != null) { outWriter = new PrintWriter(output); } else { outWriter = new PrintWriter(System.out); } } } } return outWriter; } ResultLayout parseFormat(String format) { // default layout if (format == null) { return ResultLayout.VERTICAL; } format = format.trim().substring(InputParameters.formatKey.length()); if ("V".equalsIgnoreCase(format)) { return ResultLayout.VERTICAL; } if ("H".equalsIgnoreCase(format)) { return ResultLayout.HORIZONTAL; } throw new IllegalArgumentException("Unrecognised format: '" + format + "' Output format for results must be either H or V."); } /** * * @param key * @return * @throws NumberFormatException */ int parseThreadNum(String key) { key = key.trim().substring(InputParameters.threadKey.length()); final int nthreads = Integer.parseInt(key); return nthreads; } @Override public String toString() { final String def = " [default]"; final String newLine = System.getProperty("line.separator"); String value = "input=" + input + newLine; if (output != null) { value += "output=" + output + newLine; } else { value += "output= standard out" + newLine; } if (statistics != null) { value += "statistics=" + statistics + newLine; } else { value += "statistics= not kept" + newLine; } value += "disorder=" + getDisorder(); if (disorder == RonnConstraint.DEFAULT_DISORDER) { value += def; } value += newLine; value += "thread number=" + getThreadNum() + newLine; value += "format=" + getFormat(); if (format == null) { value += def; } // value += newLine ; return value; } ResultLayout getFormat() { return format == null ? ResultLayout.VERTICAL : format; } float getDisorder() { return disorder; } void setDisorder(final String prm) { final float disorder = Float.parseFloat(prm .substring(InputParameters.disorderKey.length())); // do not set disorder values if it is invalid // default disorder set in the constructor if ((disorder > 0) || (disorder <= 1)) { this.disorder = disorder; } } void setFormat(final String prm) { format = parseFormat(prm); } void setThreadNum(final String prm) { // default number of threads are set in the constructor and // equals to the number of cores final int procNum = threadNum; final int tnum = parseThreadNum(prm); if (tnum != 0) { if ((tnum < 1) || (tnum > procNum * 2)) { throw new IllegalArgumentException( "Number of threads must be between 1 " + "and 2 x number of cores available on the executing machine"); } threadNum = tnum; } } private void initStatWriter() throws IOException { if (statistics != null) { statWriter = new PrintWriter(new FileWriter(statistics), true); } else { statWriter = new PrintWriter(new NullOutputStream()); } } public PrintWriter getStatWriter() throws IOException { if (statWriter == null) { synchronized (this) { if (statWriter == null) { initStatWriter(); } } } return statWriter; } File getInput() { return input; } int getThreadNum() { return threadNum; } }