From: Mateusz Warowny Date: Thu, 9 Jul 2020 13:23:51 +0000 (+0100) Subject: Merge branch 'feature/JAL-3686_slivka_client_js_update' into alpha/JAL-3066_Jalview_2... X-Git-Url: http://source.jalview.org/gitweb/?a=commitdiff_plain;h=5a6ac5b535856903629234ad43a71319a91ebee5;hp=-c;p=jalview.git Merge branch 'feature/JAL-3686_slivka_client_js_update' into alpha/JAL-3066_Jalview_212_slivka-integration --- 5a6ac5b535856903629234ad43a71319a91ebee5 diff --combined src/jalview/ws/slivkaws/SlivkaWSInstance.java index fd89a2e,33c1205..8a16edb --- a/src/jalview/ws/slivkaws/SlivkaWSInstance.java +++ b/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 args) throws Throwable { SlivkaForm form = service.getForm(); - Optional 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) { @@@ -122,7 -106,7 +122,7 @@@ } else { - form.insert(fieldName, field.valueOf(arg.getValue())); + form.insert(fieldName, arg.getValue()); } } } @@@ -146,44 -130,37 +146,37 @@@ { List files = client.getJobResults(job.getJobId()); Optional 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 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) {