Merge branch 'feature/JAL-3686_slivka_client_js_update' into alpha/JAL-3066_Jalview_2...
authorMateusz Warowny <mmzwarowny@dundee.ac.uk>
Thu, 9 Jul 2020 13:23:51 +0000 (14:23 +0100)
committerMateusz Warowny <mmzwarowny@dundee.ac.uk>
Thu, 9 Jul 2020 13:23:51 +0000 (14:23 +0100)
1  2 
src/jalview/ws/slivkaws/SlivkaWSInstance.java

@@@ -2,8 -2,6 +2,8 @@@ package jalview.ws.slivkaws
  
  import jalview.datamodel.SequenceI;
  import jalview.gui.WebserviceInfo;
 +import jalview.io.FileFormat;
 +import jalview.io.FormatAdapter;
  import jalview.ws.api.JalviewServiceEndpointProviderI;
  import jalview.ws.api.JalviewWebServiceI;
  import jalview.ws.api.JobId;
@@@ -15,10 -13,10 +15,10 @@@ import jalview.ws.params.ParamManager
  import jalview.ws.params.WsParamSetI;
  
  import java.io.ByteArrayInputStream;
+ import java.io.ByteArrayOutputStream;
  import java.io.IOError;
  import java.io.IOException;
  import java.io.InputStream;
- import java.io.InputStreamReader;
  import java.util.Arrays;
  import java.util.EnumMap;
  import java.util.HashSet;
@@@ -27,7 -25,6 +27,7 @@@ import java.util.Optional
  import java.util.Set;
  
  import uk.ac.dundee.compbio.slivkaclient.FieldType;
 +import uk.ac.dundee.compbio.slivkaclient.FileField;
  import uk.ac.dundee.compbio.slivkaclient.FormField;
  import uk.ac.dundee.compbio.slivkaclient.FormValidationException;
  import uk.ac.dundee.compbio.slivkaclient.JobState;
@@@ -76,34 -73,21 +76,34 @@@ public abstract class SlivkaWSInstance 
            WsParamSetI preset, List<ArgumentI> args) throws Throwable
    {
      SlivkaForm form = service.getForm();
 -    Optional<FormField> inputField = form.getFields().stream()
 -            .filter(f -> f.getType() == FieldType.FILE).findFirst();
 -    if (inputField.isPresent())
 +    for (FormField field : form.getFields())
      {
 -      StringBuilder builder = new StringBuilder();
 -      for (SequenceI seq : sequences)
 +      if (field.getType() == FieldType.FILE)
        {
 -        builder.append(">").append(seq.getName()).append("\n")
 -                .append(seq.getSequence()).append("\n");
 +        FormatAdapter fa = new FormatAdapter();
 +        fa.setNewlineString("\r\n");
 +        FileField fileField = (FileField) field;
 +        FileFormat format;
 +        switch (fileField.getMediaType())
 +        {
 +        case "application/pfam":
 +          format = FileFormat.Pfam;
 +          break;
 +        case "application/stockholm":
 +          format = FileFormat.Stockholm;
 +          break;
 +        default:
 +        case "application/fasta":
 +          format = FileFormat.Fasta;
 +          break;
 +        }
 +        InputStream stream = new ByteArrayInputStream(
 +            fa.formatSequences(format, sequences.toArray(new SequenceI[0]))
 +                .getBytes());
 +        RemoteFile rf = client.uploadFile(stream, "input",
 +            fileField.getMediaType());
 +        form.insert(field.getName(), rf);
        }
 -      InputStream stream = new ByteArrayInputStream(
 -              builder.toString().getBytes());
 -      RemoteFile file = client.uploadFile(stream, "input.fa",
 -              "application/fasta");
 -      form.insert(inputField.get().getName(), file);
      }
      if (args != null)
      {
          }
          else
          {
-           form.insert(fieldName, field.valueOf(arg.getValue()));
+           form.insert(fieldName, arg.getValue());
          }
        }
      }
    {
      List<RemoteFile> files = client.getJobResults(job.getJobId());
      Optional<RemoteFile> logFile = files.stream()
-         .filter(f -> f.getLabel().equals("log")).findFirst();
+             .filter(f -> f.getLabel().equals("log")).findFirst();
      boolean newContent = false;
      if (logFile.isPresent())
      {
-       InputStream stream = logFile.get().getContent();
-       long nextChunk = stream.skip(job.getNextChunk());
-       int len = appendJobStatus(job, stream);
-       job.setnextChunk(nextChunk + len);
-       newContent |= len > 0;
+       ByteArrayOutputStream output = new ByteArrayOutputStream();
+       logFile.get().writeTo(output);
+       if (output.size() > job.getNextChunk())
+       {
+         newContent = true;
+         job.setStatus(output.toString("UTF-8"));
+         job.setnextChunk(output.size());
+       }
      }
      if (failedStates.contains(job.getJobState()))
      {
        Optional<RemoteFile> errLogFile = files.stream()
-           .filter(f -> f.getLabel().equals("error-log")).findFirst();
+               .filter(f -> f.getLabel().equals("error-log")).findFirst();
        if (errLogFile.isPresent())
        {
-         newContent |= appendJobStatus(job, errLogFile.get().getContent()) > 0;
+         ByteArrayOutputStream output = new ByteArrayOutputStream();
+         errLogFile.get().writeTo(output);
+         if (output.size() > 0)
+         {
+           newContent = true;
+           job.setStatus(job.getStatus() + "\n" + output.toString("UTF-8"));
+         }
        }
      }
      return newContent;
    }
  
-   private int appendJobStatus(WsJob job, InputStream stream) throws IOException
-   {
-     StringBuilder builder = new StringBuilder(job.getStatus());
-     InputStreamReader reader = new InputStreamReader(stream);
-     char[] buffer = new char[4096];
-     int chunkLen = 0;
-     int len = 0;
-     while ((len = reader.read(buffer)) != -1)
-     {
-       chunkLen += len;
-       builder.append(buffer, 0, len);
-     }
-     job.setStatus(builder.toString());
-     return chunkLen;
-   }
    @Override
    public final boolean handleSubmitError(Throwable _lex, WsJob j, WebserviceInfo wsInfo)
    {