Final fixing of Jpred problem with casting
[jabaws.git] / webservices / compbio / ws / client / Jws2Client.java
index 0aa02c5..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
@@ -100,6 +103,7 @@ public class Jws2Client {
         *            command line options\r
         * @throws IOException\r
         */\r
+       @SuppressWarnings("unchecked")\r
        <T> Jws2Client(String[] cmd) throws IOException {\r
                \r
 \r
@@ -161,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
@@ -412,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
@@ -429,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
@@ -500,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
@@ -510,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