Final fixing of Jpred problem with casting
[jabaws.git] / webservices / compbio / ws / client / Jws2Client.java
index 94854d4..666fa58 100644 (file)
@@ -25,6 +25,7 @@ import static compbio.ws.client.Constraints.paramFile;
 import java.io.Closeable;\r
 import java.io.File;\r
 import java.io.FileInputStream;\r
+import java.io.FileOutputStream;\r
 import java.io.IOException;\r
 import java.io.PrintWriter;\r
 import java.io.Writer;\r
@@ -48,6 +49,8 @@ import compbio.data.msa.MsaWS;
 import compbio.data.msa.RegistryWS;\r
 import compbio.data.msa.SequenceAnnotation;\r
 import compbio.data.sequence.Alignment;\r
+import compbio.data.sequence.AlignmentMetadata;\r
+import compbio.data.sequence.JpredAlignment;\r
 import compbio.data.sequence.FastaSequence;\r
 import compbio.data.sequence.ScoreManager;\r
 import compbio.data.sequence.SequenceUtil;\r
@@ -67,7 +70,7 @@ import compbio.util.FileUtil;
  */\r
 public class Jws2Client {\r
 \r
-       /*\r
+       /**\r
         * Use java.util.Logger instead of log4j logger to reduce the size of the client package\r
         */\r
        private static final Logger log = Logger.getLogger(Jws2Client.class.getCanonicalName());\r
@@ -100,7 +103,9 @@ public class Jws2Client {
         *            command line options\r
         * @throws IOException\r
         */\r
+       @SuppressWarnings("unchecked")\r
        <T> Jws2Client(String[] cmd) throws IOException {\r
+               \r
 \r
                String hostname = CmdHelper.getHost(cmd);\r
                if (hostname == null) {\r
@@ -160,17 +165,31 @@ public class Jws2Client {
                        if (outfile != null) {\r
                                writer = IOHelper.getWriter(outfile);\r
                        } else {\r
-                               // this stream is going to be closed later which is fine as std.out will not be\r
                                writer = new PrintWriter(System.out, true);\r
                        }\r
                        if (service.getServiceType() == SequenceAnnotation.class) {\r
                                ScoreManager result = analize(infile, ((SequenceAnnotation<T>) thews), preset, customOptions);\r
                                IOHelper.writeOut(writer, result);\r
+                               writer.close();\r
                        } else if (service.getServiceType() == MsaWS.class) {\r
                                Alignment alignment = align(infile, (MsaWS<T>) thews, preset, customOptions);\r
-                               IOHelper.writeOut(writer, alignment);\r
+                               if (serviceName.equalsIgnoreCase("JpredWS")) {\r
+                                       writer.close();\r
+                                       JpredAlignment jpred = (JpredAlignment)alignment;\r
+                                       if (outfile != null) {\r
+                                               FileOutputStream fout = new FileOutputStream(outfile);\r
+                                               SequenceUtil.writeFastaKeepTheStream(fout, jpred.getJpredSequences(), 60);\r
+                                               fout.close();\r
+                                       } else {\r
+                                               SequenceUtil.writeFasta(System.out, jpred.getJpredSequences());\r
+                                       }\r
+                               } else {\r
+                                       IOHelper.writeOut(writer, alignment);\r
+                                       writer.close();\r
+                               }\r
+                               AlignmentMetadata md = alignment.getMetadata();\r
+                               System.out.println("Output has been prepared with " + md.getProgram());\r
                        }\r
-                       writer.close();\r
                }\r
 \r
                if (CmdHelper.listParameters(cmd)) {\r
@@ -299,11 +318,13 @@ public class Jws2Client {
                        return;\r
                }\r
                if (!func_services.isEmpty()) {\r
-                       String mess = "\n\rAvailable services: ";\r
+                       System.out.println("There are " + func_services.size() + " services at " + hostname + ":");\r
+                       String mess = "\n\rThe list:\n";\r
                        System.out.println(mess + Services.toString(func_services));\r
                }\r
                if (!nonfunc_services.isEmpty()) {\r
-                       String mess = "Non-available services (internal tests failed): ";\r
+                       System.out.println("There are " + nonfunc_services.size() + " non-available services at " + hostname + ":");\r
+                       String mess = "The list (internal tests failed): ";\r
                        System.out.println(mess + Services.toString(nonfunc_services));\r
                }\r
        }\r
@@ -409,11 +430,10 @@ public class Jws2Client {
        static <T> Alignment align(File file, MsaWS<T> msaws, Preset<T> preset,\r
                        List<Option<T>> customOptions) {\r
                FileInputStream instream = null;\r
-               List<FastaSequence> fastalist = null;\r
                Alignment alignment = null;\r
                try {\r
                        instream = new FileInputStream(file);\r
-                       fastalist = SequenceUtil.readFasta(instream);\r
+                       List<FastaSequence> fastalist = SequenceUtil.readFasta(instream);\r
                        instream.close();\r
                        String jobId = null;\r
                        if (customOptions != null && preset != null) {\r
@@ -426,22 +446,18 @@ public class Jws2Client {
                        } else {\r
                                jobId = msaws.align(fastalist);\r
                        }\r
-                       System.out.println("\ncalling aligner.........");\r
-                       Thread.sleep(1000);\r
+                       System.out.println("\ncalling program.........");\r
+                       Thread.sleep(100);\r
                        alignment = msaws.getResult(jobId);\r
-\r
                } catch (IOException e) {\r
-                       System.err.println("Exception while reading the input file. "\r
-                                               + "Check that the input file contains a list of fasta formatted sequences! "\r
+                       System.err.println("Exception while reading the input file. Check that the input file is a FASTA file! "\r
                                                + "Exception details are below:");\r
                        e.printStackTrace();\r
                } catch (JobSubmissionException e) {\r
-                       System.err.println("Exception while submitting job to a web server. "\r
-                                               + "Exception details are below:");\r
+                       System.err.println("Exception while submitting job to a web server. Exception details are below:");\r
                        e.printStackTrace();\r
                } catch (ResultNotAvailableException e) {\r
-                       System.err.println("Exception while waiting for results. "\r
-                                       + "Exception details are below:");\r
+                       System.err.println("Exception while waiting for results. Exception details are below:");\r
                        e.printStackTrace();\r
                } catch (InterruptedException ignored) {\r
                        // ignore and propagate an interruption\r
@@ -459,7 +475,7 @@ public class Jws2Client {
                }\r
                return alignment;\r
        }\r
-\r
+       \r
        /**\r
         * Starts command line client, if no parameter are supported print help. Two\r
         * parameters are required for successful call the JWS2 host name and a\r
@@ -497,7 +513,6 @@ public class Jws2Client {
         * \r
         */\r
        public static void main(String[] args) {\r
-\r
                if (args == null) {\r
                        System.out.println(Constraints.help_text);\r
                        System.exit(1);\r
@@ -507,7 +522,6 @@ public class Jws2Client {
                        System.out.println(Constraints.help_text);\r
                        System.exit(1);\r
                }\r
-\r
                try {\r
                        new Jws2Client(args);\r
                } catch (IOException e) {\r