X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=webservices%2Fcompbio%2Fws%2Fclient%2FJws2Client.java;h=dbe999a464c67ee2455d7408c5217d3c5dd90ac1;hb=b2a2fdc2bd95a64b3908d8ea2f31270b6c7199d3;hp=152646dadffb1136f45571ee40bb819d2af977dd;hpb=535359a3d592ee41bda72e7356f0181f6cee9d07;p=jabaws.git diff --git a/webservices/compbio/ws/client/Jws2Client.java b/webservices/compbio/ws/client/Jws2Client.java index 152646d..dbe999a 100644 --- a/webservices/compbio/ws/client/Jws2Client.java +++ b/webservices/compbio/ws/client/Jws2Client.java @@ -1,6 +1,6 @@ -/* Copyright (c) 2009 Peter Troshin +/* Copyright (c) 2011 Peter Troshin * - * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 1.0 + * JAva Bioinformatics Analysis Web Services (JABAWS) @version: 2.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 @@ -18,20 +18,24 @@ package compbio.ws.client; -import java.io.BufferedReader; +import static compbio.ws.client.Constraints.inputkey; +import static compbio.ws.client.Constraints.outputkey; +import static compbio.ws.client.Constraints.paramFile; + import java.io.Closeable; import java.io.File; import java.io.FileInputStream; -import java.io.FileNotFoundException; import java.io.FileOutputStream; -import java.io.FileReader; import java.io.IOException; -import java.io.OutputStream; +import java.io.PrintWriter; +import java.io.Writer; +import java.net.ConnectException; import java.net.MalformedURLException; import java.net.URL; -import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; +import java.util.Set; import java.util.logging.Level; import java.util.logging.Logger; @@ -39,20 +43,26 @@ import javax.xml.namespace.QName; import javax.xml.ws.Service; import javax.xml.ws.WebServiceException; +import compbio.data.msa.JABAService; +import compbio.data.msa.Metadata; import compbio.data.msa.MsaWS; +import compbio.data.msa.RegistryWS; +import compbio.data.msa.SequenceAnnotation; import compbio.data.sequence.Alignment; -import compbio.data.sequence.ClustalAlignmentUtil; +import compbio.data.sequence.AlignmentMetadata; +import compbio.data.sequence.JpredAlignment; import compbio.data.sequence.FastaSequence; +import compbio.data.sequence.ScoreManager; import compbio.data.sequence.SequenceUtil; +import compbio.data.sequence.UnknownFileFormatException; import compbio.metadata.JobSubmissionException; -import compbio.metadata.Limit; -import compbio.metadata.LimitsManager; import compbio.metadata.Option; +import compbio.metadata.Limit; import compbio.metadata.Preset; import compbio.metadata.PresetManager; import compbio.metadata.ResultNotAvailableException; -import compbio.metadata.RunnerConfig; import compbio.metadata.WrongParameterException; +import compbio.util.FileUtil; /** * A command line client for JAva Bioinformatics Analysis Web Services @@ -62,659 +72,475 @@ import compbio.metadata.WrongParameterException; */ public class Jws2Client { - /* - * Use java.util.Logger instead of log4j logger to reduce the size of the - * client package - */ - private static final Logger log = Logger.getLogger(Jws2Client.class - .getCanonicalName()); - - final static String pseparator = "="; - - // Parameters for required command line options - final static String hostkey = "-h"; - final static String servicekey = "-s"; - - // Actions - final static String inputkey = "-i"; - - final static String paramList = "-parameters"; - final static String presetList = "-presets"; - final static String limitList = "-limits"; - - // Options - final static String paramFile = "-f"; - final static String outputkey = "-o"; - final static String parameterkey = "-p"; - final static String presetkey = "-r"; - - //JABAWS version 1.0 service name - static final String qualifiedServiceName = "http://msa.data.compbio/01/01/2010/"; - - /** - * Searches the command line keys in the array of parameters - * - * @param cmd - * command line options - * @return true is the list of Parameters is requested, false otherwise - */ - private boolean listParameters(String[] cmd) { - return keyFound(cmd, paramList); - } - - /** - * Check whether presetList is set in the command line - * - * @param cmd - * command line options - * @return true if presetList is found, false otherwise - */ - boolean listPresets(String[] cmd) { - return keyFound(cmd, presetList); - } - - /** - * Returns {@code Preset} by its name - * - * @see Preset - * @param - * @param msaws - * @param presetName - * @return Return a Preset by its optionName - */ - Preset getPreset(MsaWS msaws, String presetName) { - assert presetName != null; - PresetManager presets = getPresetList(msaws); - if (presets == null) { - System.out - .println("No presets are supported by the service! Ignoring -r directive!"); - return null; - } - Preset pre = presets.getPresetByName(presetName); - if (pre == null) { - System.out.println("Cannot find preset: " + presetName - + " WARN: ignoring -r directive!"); - } - return pre; - } - - /** - * Extracts preset name from the command line is any - * - * @param cmd - * command line options - * @return presetName or null if no presets is defined - */ - String getPresetName(String[] cmd) { - String preset = null; - for (int i = 0; i < cmd.length; i++) { - String presetPrm = cmd[i]; - if (presetPrm.trim().toLowerCase().startsWith( - presetkey + pseparator)) { - preset = presetPrm.substring(presetPrm.indexOf(pseparator) + 1); - break; - } - } - return preset; - } - - /** - * Checks whether limitList parameter is in the command line - * - * @param cmd - * - command line options - * @return true if it is, false otherwise - */ - boolean listLimits(String[] cmd) { - return keyFound(cmd, limitList); - } - - /** - * Checks whether the key is in the command line - * - * @param cmd - * @param key - * @return true if it is, false otherwise - */ - boolean keyFound(String[] cmd, String key) { - assert cmd != null && cmd.length > 0; - assert key != null; - for (int i = 0; i < cmd.length; i++) { - String listPresets = cmd[i]; - if (listPresets.trim().equalsIgnoreCase(key)) { + /** + * Use java.util.Logger instead of log4j logger to reduce the size of the client package + */ + private static final Logger log = Logger.getLogger(Jws2Client.class.getCanonicalName()); + + /** + * Attempt to construct the URL object from the string + * + * @param urlstr + * @return true if it succeed false otherwise + */ + public static boolean validURL(String urlstr) { + try { + if (urlstr == null || urlstr.trim().length() == 0) { + return false; + } + new URL(urlstr); + } catch (MalformedURLException e) { + return false; + } return true; - } - } - return false; - } - - /** - * Attempt to construct the URL object from the string - * - * @param urlstr - * @return true if it succeed false otherwise - */ - public static boolean validURL(String urlstr) { - try { - if (urlstr == null || urlstr.trim().length() == 0) { - return false; - } - new URL(urlstr); - } catch (MalformedURLException e) { - return false; } - return true; - } - - /** - * Extracts service name from the command line - * - * @param cmd - * command line options - * @return service name or null if it is not defined - */ - public static String getServiceName(String[] cmd) { - for (int i = 0; i < cmd.length; i++) { - String serv = cmd[i]; - if (serv.trim().toLowerCase().startsWith(servicekey + pseparator)) { - return serv.substring(serv.indexOf(pseparator) + 1); - } - } - return null; - } - - /** - * Extracts host name from the command line - * - * @param cmd - * command line options - * @return host name or null if it is not defined - */ - public static String getHost(String[] cmd) { - for (int i = 0; i < cmd.length; i++) { - String host = cmd[i]; - if (host.trim().toLowerCase().startsWith(hostkey + pseparator)) { - return host.substring(host.indexOf(pseparator) + 1); - } - } - return null; - } - - /** - * Checks -i options and return the File if one was provided, null otherwise - * - * @param cmd - * @param key - * @param mustExist - * @return - * @throws IOException - */ - File getFile(String[] cmd, String key, boolean mustExist) - throws IOException { - assert key != null && key.trim().length() != 0; - for (int i = 0; i < cmd.length; i++) { - String filename = cmd[i]; - filename = filename.trim(); - if (filename.toLowerCase().startsWith(key + pseparator)) { - filename = filename.substring((key + pseparator).length()); - File file = new File(filename); - if (mustExist && !file.exists()) { - System.out.println(key + " file " + file.getAbsolutePath() - + " does not exist"); - return null; + + /** + * Connects to the service and do the job as requested, if something goes + * wrong reports or/and prints usage help. + * + * @param + * web service type + * @param cmd + * command line options + * @throws IOException + */ + @SuppressWarnings("unchecked") + Jws2Client(String[] cmd) throws IOException { + + + String hostname = CmdHelper.getHost(cmd); + if (hostname == null) { + System.err.println("Host name is not provided!"); + System.out.println(Constraints.help_text); + System.exit(1); } - if (!mustExist && !file.exists()) { - file.createNewFile(); + + if (!validURL(hostname)) { + System.err.println("Host name is not valid!"); + System.out.println(Constraints.help_text); + System.exit(1); } - if (!file.canRead()) { - System.out.println("Cannot read " + key + " file " - + file.getAbsolutePath()); - return null; + + boolean listServices = CmdHelper.listServices(cmd); + if (listServices) { + listAllServices(hostname); + System.exit(0); } - return file; - } - } - return null; - } - - /** - * Connects to the service and do the job as requested, if something goes - * wrong reports or/and prints usage help. - * - * @param - * web service type - * @param cmd - * command line options - * @throws IOException - */ - Jws2Client(String[] cmd) throws IOException { - - String hostname = getHost(cmd); - if (hostname == null) { - System.out.println("Host name is not provided!"); - printUsage(1); - } - if (!validURL(hostname)) { - System.out.println("Host name is not valid!"); - printUsage(1); - } - String serviceName = getServiceName(cmd); - if (serviceName == null) { - System.out.println("Service name is no provided!"); - printUsage(1); - } - Services service = Services.getService(serviceName); - if (service == null) { - System.out.println("Service " + serviceName - + " is no supported! Valid values are: " - + Arrays.toString(Services.values())); - printUsage(1); - } - File inputFile = getFile(cmd, inputkey, true); - File outFile = getFile(cmd, outputkey, false); - File parametersFile = getFile(cmd, paramFile, true); - String presetName = getPresetName(cmd); - - MsaWS msaws = connect(hostname, service); - Preset preset = null; - if (presetName != null) { - preset = getPreset(msaws, presetName); - } - List> customOptions = null; - if (parametersFile != null) { - List prms = loadParameters(parametersFile); - customOptions = processParameters(prms, msaws.getRunnerOptions()); - } - Alignment alignment = null; - if (inputFile != null) { - alignment = align(inputFile, msaws, preset, customOptions); - OutputStream outStream = null; - if (outFile != null) { - outStream = getOutStream(outFile); - } else { - // this stream is going to be closed later which is fine as - // std.out will not be - outStream = System.out; - } - writeOut(outStream, alignment); - // stream is closed in the method no need to close it here + String serviceName = CmdHelper.getServiceName(cmd); + if (serviceName == null) { + System.err.println("Service name is no provided!"); + System.out.println(Constraints.help_text); + System.exit(1); + } + + Services service = Services.getService(serviceName); + if (service == null) { + String mess = "Service " + serviceName + " is no available! Valid values are: "; + System.err.println(mess + Arrays.toString(Services.values())); + System.out.println(Constraints.help_text); + System.exit(1); + } + + if (CmdHelper.testService(cmd)) { + testService(hostname, service, new PrintWriter(System.out, true)); + System.exit(0); + } + + Metadata thews = (Metadata) connect(hostname, service); + Preset preset = null; + if (null != CmdHelper.getPresetName(cmd)) { + preset = MetadataHelper.getPreset(thews, CmdHelper.getPresetName(cmd)); + } + + List> customOptions = null; + if (null != IOHelper.getFile(cmd, paramFile, true)) { + List prms = IOHelper.loadParameters(IOHelper.getFile(cmd, paramFile, true)); + customOptions = MetadataHelper.processParameters(prms, thews.getRunnerOptions()); + } + + if (null != IOHelper.getFile(cmd, inputkey, true)) { + File infile = IOHelper.getFile(cmd, inputkey, true); + File outfile = IOHelper.getFile(cmd, outputkey, false); + Writer writer = null; + if (outfile != null) { + writer = IOHelper.getWriter(outfile); + } else { + writer = new PrintWriter(System.out, true); + } + if (service.getServiceType() == SequenceAnnotation.class) { + ScoreManager result = analize(infile, ((SequenceAnnotation) thews), preset, customOptions); + IOHelper.writeOut(writer, result); + writer.close(); + } else if (service.getServiceType() == MsaWS.class) { + Alignment alignment = align(infile, (MsaWS) thews, preset, customOptions); + if (serviceName.equalsIgnoreCase("JpredWS")) { + writer.close(); + JpredAlignment jpred = (JpredAlignment)alignment; + if (outfile != null) { + FileOutputStream fout = new FileOutputStream(outfile); + SequenceUtil.writeFastaKeepTheStream(fout, jpred.getJpredSequences(), 60); + fout.close(); + } else { + SequenceUtil.writeFasta(System.out, jpred.getJpredSequences()); + } + } else { + IOHelper.writeOut(writer, alignment); + writer.close(); + } + AlignmentMetadata md = alignment.getMetadata(); + System.out.println("Output has been prepared with " + md.getProgram()); + } + } + + if (CmdHelper.listParameters(cmd)) { + List> opts = MetadataHelper.getParametersList(thews, hostname); + for (Option o : opts) { + System.out.println("##############################################################################\n" + o.toString()); + } + } + if (CmdHelper.listPresets(cmd)) { + PresetManager psm = MetadataHelper.getPresetList(thews); + if (null != psm) { + System.out.print(psm); + } else { + System.out.println("No presets are defined for the Web service"); + } + } + if (CmdHelper.listLimits(cmd)) { + List> lims = MetadataHelper.getLimits(thews); + for (Limit l : lims) { + System.out.println("##############################################################################\n" + l.toString()); + } + } + log.fine("Disconnecting..."); + ((Closeable) thews).close(); + log.fine("Disconnected successfully!"); } - boolean listParameters = listParameters(cmd); - if (listParameters) { - System.out.println(getParametersList(msaws)); + /** + * Connects to a web service by the host and the service name web service type + * + * @param host + * the fully qualified name of JABAWS server including JABAWS + * context name e.g + * http://nanna.cluster.lifesci.dundee.ac.uk:8080/jaba + * @param service + * the name of the JABAWS service to connect to + * @return JABAService + * @throws WebServiceException + * @throws ConnectException + * if fails to connect to the service on the host + */ + public static JABAService connect(String host, Services service) + throws WebServiceException, ConnectException { + URL url = null; + log.log(Level.FINE, "Attempting to connect with " + service.toString() + "..."); + System.out.println ("Attempting to connect with " + service.toString() + "..."); + try { + url = new URL(host + "/" + service.toString() + "?wsdl"); + } catch (MalformedURLException e) { + e.printStackTrace(); + // ignore as the host name is already verified + } + Service serv = null; + try { + serv = service.getService(url, service.getServiceNamespace()); + } catch (WebServiceException wse) { + wse.printStackTrace(); + } + if (serv == null) { + throw new ConnectException("Could not connect to " + url + ". Is the server down?"); + } + JABAService serviceIF = service.getInterface(serv); + log.log(Level.INFO, "Connected successfully!"); + + return serviceIF; } - boolean listPreset = listPresets(cmd); - if (listPreset) { - System.out.println(getPresetList(msaws)); + + /** + * Get a connection of JABAWS registry + * + * @param host + * the fully qualified name of JABAWS server including JABAWS + * context name e.g + * http://nanna.cluster.lifesci.dundee.ac.uk:8080/jaba + * @return compbio.data.msa.RegistryWS - instance of a RegistryWS web + * service + * @throws WebServiceException + * @throws ConnectException + */ + public static compbio.data.msa.RegistryWS connectToRegistry(String host) + throws WebServiceException, ConnectException { + URL url = null; + String service = "RegistryWS"; + log.log(Level.FINE, "Attempting to connect..."); + + try { + url = new URL(host + "/" + service + "?wsdl"); + } catch (MalformedURLException e) { + e.printStackTrace(); + // ignore as the host name is already verified + } + QName qname = new QName(JABAService.V2_SERVICE_NAMESPACE, service); + Service serv = Service.create(url, qname); + + if (serv == null) { + throw new ConnectException("Could not connect to " + url + ". Is the server down?"); + } + + QName portName = new QName(serv.getServiceName().getNamespaceURI(), service + "Port"); + compbio.data.msa.RegistryWS serviceIF = serv.getPort(portName, compbio.data.msa.RegistryWS.class); + log.log(Level.INFO, "Connected to " + service + " successfully!"); + + return serviceIF; } - boolean listLimits = listLimits(cmd); - if (listLimits) { - System.out.println(getLimits(msaws)); + + /** + * Asks registry to test the service on the host hostname + * + * @param hostname + * @param service + * @param writer + * @throws ConnectException + * @throws WebServiceException + */ + public static void testService(String hostname, Services service, PrintWriter writer) + throws ConnectException, WebServiceException { + RegistryWS registry = connectToRegistry(hostname); + if (registry != null) { + String message = registry.testService(service); + writer.println("Service " + service + " testing results: "); + writer.println(message); + FileUtil.closeSilently(((Closeable) registry)); + } + writer.flush(); } - log.fine("Disconnecting..."); - ((Closeable) msaws).close(); - log.fine("Disconnected successfully!"); - } - - /** - * Load parameters from file - * - * @throws IOException - */ - List loadParameters(File paramsfile) throws IOException { - assert paramsfile != null && paramsfile.exists(); - BufferedReader reader = new BufferedReader(new FileReader(paramsfile)); - String line = null; - ArrayList params = new ArrayList(); - while ((line = reader.readLine()) != null) { - line = line.trim(); - if (line.length() == 0) - continue; - params.add(line); + + private static void listAllServices(String hostname) throws WebServiceException, IOException { + RegistryWS registry = connectToRegistry(hostname); + Set func_services = Collections.emptySet(); + Set nonfunc_services = Collections.emptySet(); + if (registry != null) { + func_services = registry.getSupportedServices(); + nonfunc_services = registry.getNonoperatedServices(); + FileUtil.closeSilently(((Closeable) registry)); + } else { + System.out.println("Failed to connect to the registry! "); + return; + } + if (!func_services.isEmpty()) { + System.out.println("There are " + func_services.size() + " services at " + hostname + ":"); + String mess = "\n\rThe list:\n"; + System.out.println(mess + Services.toString(func_services)); + } + if (!nonfunc_services.isEmpty()) { + System.out.println("There are " + nonfunc_services.size() + " non-available services at " + hostname + ":"); + String mess = "The list (internal tests failed): "; + System.out.println(mess + Services.toString(nonfunc_services)); + } } - return params; - } - - /** - * Converts options supplied via parameters file into {@code Option} objects - * - * @param - * web service type - * @param params - * @param options - * @return List of Options of type T - */ - List> processParameters(List params, - RunnerConfig options) { - List> chosenOptions = new ArrayList>(); - for (String param : params) { - String oname = null; - if (isParameter(param)) { - oname = this.getParamName(param); - } else { - oname = param; - } - Option o = options.getArgumentByOptionName(oname); - if (o == null) { - System.out.println("WARN ignoring unsuppoted parameter: " - + oname); - continue; - } - if (isParameter(param)) { + + /** + * Calculate conservation for sequences loaded from a FASTA record list structure + * + * @param fastalist + * the list of FASTA records + * @param wsproxy + * a web service proxy + * @param preset + * Preset to use optional + * @param customOptions + * the list of options + * @return Set the conservation scores + * @throws UnknownFileFormatException + */ + static ScoreManager analize(List fastalist, SequenceAnnotation wsproxy, Preset preset, List> customOptions) { + ScoreManager scores = null; try { - o.setValue(getParamValue(param)); + String jobId = null; + if (customOptions != null && preset != null) { + System.out.println("WARN: Parameters (-f) are defined together with a preset (-r) ignoring preset!"); + } + if (customOptions != null) { + jobId = wsproxy.customAnalize(fastalist, customOptions); + } else if (preset != null) { + jobId = wsproxy.presetAnalize(fastalist, preset); + } else { + jobId = wsproxy.analize(fastalist); + } + System.out.println("\n\rcalling predictor........."); + Thread.sleep(100); + scores = wsproxy.getAnnotation(jobId); + } catch (JobSubmissionException e) { + System.err.println("Exception while submitting job to a web server. Exception details are below:"); + e.printStackTrace(); + } catch (ResultNotAvailableException e) { + System.err.println("Exception while waiting for results. Exception details are below:"); + e.printStackTrace(); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + System.err.println("Exception while waiting for results. Exception details are below:"); + e.printStackTrace(); } catch (WrongParameterException e) { - System.out - .println("Problem setting value for the parameter: " - + param); - e.printStackTrace(); + String mess = "Parsing the web method input parameters failed Exception details are below:"; + System.err.println(mess); + e.printStackTrace(); } - } - chosenOptions.add(o); - } - return chosenOptions; - } - - String getParamName(String fullName) { - assert isParameter(fullName); - return fullName.substring(0, fullName.indexOf(pseparator)); - } - - String getParamValue(String fullName) { - assert isParameter(fullName); - return fullName.substring(fullName.indexOf(pseparator) + 1); - } - - boolean isParameter(String param) { - return param.contains(pseparator); - } - - OutputStream getOutStream(File file) { - assert file != null && file.exists(); - try { - return new FileOutputStream(file); - } catch (FileNotFoundException e) { - e.printStackTrace(); + return scores; + } - return null; - } - - /** - * Outputs clustal formatted alignment into the file represented by the - * outStream - * - * @param outStream - * @param align - * the alignment to output - */ - void writeOut(OutputStream outStream, Alignment align) { - try { - ClustalAlignmentUtil.writeClustalAlignment(outStream, align); - } catch (IOException e) { - System.err - .println("Problems writing output file! Stack trace is below: "); - e.printStackTrace(); - } finally { - if (outStream != null) { + + /** + * Calculate conservation for sequences loaded from the file + * + * @param wsproxy + * a web service proxy + * @param file + * the file to read the results from + * @param preset + * Preset to use optional + * @param customOptions + * the list of options + * @return Set the conservation scores + * @throws IOException + * @throws UnknownFileFormatException + */ + static ScoreManager analize(File file, SequenceAnnotation wsproxy, Preset preset, List> customOptions) { + List fastalist = null; try { - outStream.close(); - } catch (IOException ignored) { - // e.printStackTrace(); + fastalist = SequenceUtil.openInputStream(file.getAbsolutePath()); + assert !fastalist.isEmpty() : "Input is empty!"; + } catch (IOException e) { + String mess = "Reading the input file failed. Check that the file contains a list of FASTA records!\n"; + System.err.println(mess + "Exception details are below:"); + e.printStackTrace(); + } catch (UnknownFileFormatException e) { + String mess = "Reading the input file failed. Exception details are below:"; + System.err.println(mess); + System.out.println(e.getMessage()); + e.printStackTrace(); } - } + return analize(fastalist, wsproxy, preset, customOptions); } - } - - /** - * Connects to a web service by the host and the service name - * - * @param - * web service type - * @param host - * @param service - * @return MsaWS - * @throws WebServiceException - */ - public static MsaWS connect(String host, Services service) - throws WebServiceException { - URL url = null; - log.log(Level.FINE, "Attempt to connect..."); - try { - url = new URL(host + "/" + service.toString() + "?wsdl"); - } catch (MalformedURLException e) { - e.printStackTrace(); - // ignore as the host name is already verified - } - QName qname = new QName(qualifiedServiceName, service.toString()); - Service serv = Service.create(url, qname); - MsaWS msaws = serv.getPort(new QName(qualifiedServiceName, service - + "Port"), MsaWS.class); - log.log(Level.FINE, "Connected successfully!"); - return msaws; - } - - /** - * Align sequences from the file using MsaWS - * - * @param - * web service type e.g. Clustal - * @param file - * to write the resulting alignment to - * @param msaws - * MsaWS required - * @param preset - * Preset to use optional - * @param customOptions - * file which contains new line separated list of options - * @return Alignment - */ - static Alignment align(File file, MsaWS msaws, Preset preset, - List> customOptions) { - FileInputStream instream = null; - List fastalist = null; - Alignment alignment = null; - try { - instream = new FileInputStream(file); - fastalist = SequenceUtil.readFasta(instream); - instream.close(); - String jobId = null; - if (customOptions != null && preset != null) { - System.out - .println("WARN: Parameters (-f) are defined together with a preset (-r) ignoring preset!"); - } - if (customOptions != null) { - jobId = msaws.customAlign(fastalist, customOptions); - } else if (preset != null) { - jobId = msaws.presetAlign(fastalist, preset); - } else { - jobId = msaws.align(fastalist); - } - Thread.sleep(1000); - alignment = msaws.getResult(jobId); - - } catch (IOException e) { - System.err - .println("Exception while reading the input file. " - + "Check that the input file contains a list of fasta formatted sequences! " - + "Exception details are below:"); - e.printStackTrace(); - } catch (JobSubmissionException e) { - System.err - .println("Exception while submitting job to a web server. " - + "Exception details are below:"); - e.printStackTrace(); - } catch (ResultNotAvailableException e) { - System.err.println("Exception while waiting for results. " - + "Exception details are below:"); - e.printStackTrace(); - } catch (InterruptedException ignored) { - // ignore and propagate an interruption - Thread.currentThread().interrupt(); - } catch (WrongParameterException e) { - e.printStackTrace(); - } finally { - if (instream != null) { + + /** + * Align sequences from the file using MsaWS + * + * @param + * web service type e.g. Clustal + * @param file + * to write the resulting alignment to + * @param msaws + * MsaWS required + * @param preset + * Preset to use optional + * @param customOptions + * file which contains new line separated list of options + * @return Alignment + */ + static Alignment align(File file, MsaWS msaws, Preset preset, + List> customOptions) { + FileInputStream instream = null; + Alignment alignment = null; try { - instream.close(); - } catch (IOException ignored) { - // ignore + instream = new FileInputStream(file); + List fastalist = SequenceUtil.readFasta(instream); + instream.close(); + String jobId = null; + if (customOptions != null && preset != null) { + System.out.println("WARN: Parameters (-f) are defined together with a preset (-r) ignoring preset!"); + } + if (customOptions != null) { + jobId = msaws.customAlign(fastalist, customOptions); + } else if (preset != null) { + jobId = msaws.presetAlign(fastalist, preset); + } else { + jobId = msaws.align(fastalist); + } + System.out.println("\ncalling program........."); + Thread.sleep(100); + alignment = msaws.getResult(jobId); + } catch (IOException e) { + System.err.println("Exception while reading the input file. Check that the input file is a FASTA file! " + + "Exception details are below:"); + e.printStackTrace(); + } catch (JobSubmissionException e) { + System.err.println("Exception while submitting job to a web server. Exception details are below:"); + e.printStackTrace(); + } catch (ResultNotAvailableException e) { + System.err.println("Exception while waiting for results. Exception details are below:"); + e.printStackTrace(); + } catch (InterruptedException ignored) { + // ignore and propagate an interruption + Thread.currentThread().interrupt(); + } catch (WrongParameterException e) { + e.printStackTrace(); + } finally { + if (instream != null) { + try { + instream.close(); + } catch (IOException ignored) { + // ignore + } + } } - } - } - return alignment; - } - - /** - * Returns a list of options supported by web service - * - * @param - * web service type - * @param msaws - * web service proxy - * @return List of options supported by a web service - */ - List> getParametersList(MsaWS msaws) { - assert msaws != null; - return msaws.getRunnerOptions().getArguments(); - } - - /** - * Returns an objects from which the list of presets supported by web - * service can be obtained - * - * @param - * web service type - * @param msaws - * web service proxy - * @return PresetManager, object which operates on presets - */ - PresetManager getPresetList(MsaWS msaws) { - assert msaws != null; - PresetManager presetman = msaws.getPresets(); - return presetman; - } - - /** - * Returns a list of limits supported by web service Each limit correspond - * to a particular preset. - * - * @param - * web service type - * @param msaws - * web service proxy - * @return List of limits supported by a web service - */ - List> getLimits(MsaWS msaws) { - assert msaws != null; - LimitsManager lmanger = msaws.getLimits(); - - return lmanger != null ? lmanger.getLimits() : null; - } - - /** - * Prints Jws2Client usage information to standard out - * - * @param exitStatus - */ - static void printUsage(int exitStatus) { - System.out.println(); - System.out.println("Usage: " + hostkey - + pseparator + "host_and_context " + servicekey + pseparator - + "serviceName ACTION [OPTIONS] "); - System.out.println(); - System.out - .println(hostkey - + pseparator - + " - a full URL to the JWS2 web server including context path e.g. http://10.31.1.159:8080/ws"); - System.out.println(servicekey + pseparator + " - one of " - + Arrays.toString(Services.values())); - System.out.println(); - System.out.println("ACTIONS: "); - System.out - .println(inputkey - + pseparator - + " - full path to fasta formatted sequence file, from which to align sequences"); - System.out.println(paramList - + " - lists parameters supported by web service"); - System.out.println(presetList - + " - lists presets supported by web service"); - System.out.println(limitList + " - lists web services limits"); - System.out - .println("Please note that if input file is specified other actions are ignored"); - - System.out.println(); - System.out.println("OPTIONS (only for use with -i action):"); - - System.out.println(presetkey + pseparator - + " - name of the preset to use"); - System.out - .println(outputkey - + pseparator - + " - full path to the file where to write an alignment"); - System.out - .println("-f= - the name of the file with the list of parameters to use."); - System.out - .println("Please note that -r and -f options cannot be used together. " - + "Alignment is done with either preset or a parameters from the file, but not both!"); - - System.exit(exitStatus); - } - - /** - * Starts command line client, if no parameter are supported print help. Two - * parameters are required for successfull call the JWS2 host name and a - * service name. - * - * @param args - * Usage: -h=host_and_context - * -s=serviceName ACTION [OPTIONS] - * - * -h= - a full URL to the JWS2 web server - * including context path e.g. http://10.31.1.159:8080/ws - * - * -s= - one of [MafftWS, MuscleWS, ClustalWS, - * TcoffeeWS, ProbconsWS] ACTIONS: - * - * -i= - full path to fasta formatted sequence file, - * from which to align sequences - * - * -parameters - lists parameters supported by web service - * - * -presets - lists presets supported by web service - * - * -limits - lists web services limits Please note that if input - * file is specified other actions are ignored - * - * OPTIONS: (only for use with -i action): - * - * -r= - name of the preset to use - * - * -o= - full path to the file where to write an - * alignment -f= - the name of the file with - * the list of parameters to use. Please note that -r and -f - * options cannot be used together. Alignment is done with either - * preset or a parameters from the file, but not both! - * - */ - public static void main(String[] args) { - - if (args == null) { - printUsage(1); + return alignment; } - if (args.length < 2) { - System.out.println("Host and service names are required!"); - printUsage(1); - } - - try { - new Jws2Client(args); - } catch (IOException e) { - log.log(Level.SEVERE, "IOException in client! " + e.getMessage(), e - .getCause()); - System.err.println("Cannot write output file! Stack trace: "); - e.printStackTrace(); + + /** + * Starts command line client, if no parameter are supported print help. Two + * parameters are required for successful call the JWS2 host name and a + * service name. + * + * @param args + * Usage: -h=host_and_context + * -s=serviceName ACTION [OPTIONS] + * + * -h= - a full URL to the JWS2 web server + * including context path e.g. http://10.31.1.159:8080/ws + * + * -s= - one of [MafftWS, MuscleWS, ClustalWS, + * TcoffeeWS, ProbconsWS] ACTIONS: + * + * -i= - full path to fasta formatted sequence file, + * from which to align sequences + * + * -parameters - lists parameters supported by web service + * + * -presets - lists presets supported by web service + * + * -limits - lists web services limits Please note that if input + * file is specified other actions are ignored + * + * OPTIONS: (only for use with -i action): + * + * -r= - name of the preset to use + * + * -o= - full path to the file where to write an + * alignment -f= - the name of the file with + * the list of parameters to use. Please note that -r and -f + * options cannot be used together. Alignment is done with either + * preset or a parameters from the file, but not both! + * + */ + public static void main(String[] args) { + if (args == null) { + System.out.println(Constraints.help_text); + System.exit(1); + } + if (args.length < 2) { + System.err.println("Host (-h=, e.g. -h=http://www.compbio.dundee.ac.uk/jabaws) and service (-s=, e.g. -s=Jpred) are required!"); + System.out.println(Constraints.help_text); + System.exit(1); + } + try { + new Jws2Client(args); + } catch (IOException e) { + log.log(Level.SEVERE, "IOException in client! " + e.getMessage(), e.getCause()); + System.err.println("Cannot write output file! Stack trace: "); + e.printStackTrace(); + } } - } }