X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2Fjalview%2Fws%2Fslivkaws%2FSlivkaWSInstance.java;h=952aab659c2da51b646ca5698f90f8514dfd162a;hb=c794c5033adeee182b03a5ea92c0a7495a29661f;hp=a5c809faff8041b3c6a1aa9b6eec2abd8ee567d6;hpb=736815bebc732aa97efaad70a7c2b3b4f4e77941;p=jalview.git diff --git a/src/jalview/ws/slivkaws/SlivkaWSInstance.java b/src/jalview/ws/slivkaws/SlivkaWSInstance.java index a5c809f..952aab6 100644 --- a/src/jalview/ws/slivkaws/SlivkaWSInstance.java +++ b/src/jalview/ws/slivkaws/SlivkaWSInstance.java @@ -1,13 +1,18 @@ package jalview.ws.slivkaws; +import jalview.datamodel.SequenceI; import jalview.gui.WebserviceInfo; import jalview.ws.api.JalviewServiceEndpointProviderI; import jalview.ws.api.JalviewWebServiceI; +import jalview.ws.api.JobId; import jalview.ws.api.ServiceWithParameters; import jalview.ws.gui.WsJob; +import jalview.ws.params.ArgumentI; import jalview.ws.params.ParamDatastoreI; import jalview.ws.params.ParamManager; +import jalview.ws.params.WsParamSetI; +import java.io.ByteArrayInputStream; import java.io.IOError; import java.io.IOException; import java.io.InputStream; @@ -19,10 +24,13 @@ import java.util.List; import java.util.Optional; import java.util.Set; +import uk.ac.dundee.compbio.slivkaclient.FieldType; +import uk.ac.dundee.compbio.slivkaclient.FormField; import uk.ac.dundee.compbio.slivkaclient.FormValidationException; import uk.ac.dundee.compbio.slivkaclient.JobState; import uk.ac.dundee.compbio.slivkaclient.RemoteFile; import uk.ac.dundee.compbio.slivkaclient.SlivkaClient; +import uk.ac.dundee.compbio.slivkaclient.SlivkaForm; import uk.ac.dundee.compbio.slivkaclient.SlivkaService; import uk.ac.dundee.compbio.slivkaclient.ValidationException; @@ -38,9 +46,13 @@ public abstract class SlivkaWSInstance extends ServiceWithParameters protected static final EnumMap stateMap = new EnumMap<>(JobState.class); { stateMap.put(JobState.PENDING, WsJob.JobState.QUEUED); + stateMap.put(JobState.REJECTED, WsJob.JobState.INVALID); + stateMap.put(JobState.ACCEPTED, WsJob.JobState.QUEUED); stateMap.put(JobState.QUEUED, WsJob.JobState.QUEUED); stateMap.put(JobState.RUNNING, WsJob.JobState.RUNNING); stateMap.put(JobState.COMPLETED, WsJob.JobState.FINISHED); + stateMap.put(JobState.INTERRUPED, WsJob.JobState.CANCELLED); + stateMap.put(JobState.DELETED, WsJob.JobState.CANCELLED); stateMap.put(JobState.FAILED, WsJob.JobState.FAILED); stateMap.put(JobState.ERROR, WsJob.JobState.SERVERERROR); stateMap.put(JobState.UNKNOWN, WsJob.JobState.UNKNOWN); @@ -57,6 +69,50 @@ public abstract class SlivkaWSInstance extends ServiceWithParameters this.service = service; } + protected final JobId submit(List sequences, + 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()) + { + StringBuilder builder = new StringBuilder(); + for (SequenceI seq : sequences) + { + builder.append(">").append(seq.getName()).append("\n") + .append(seq.getSequence()).append("\n"); + } + 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) + { + for (ArgumentI arg : args) + { + // multiple choice field names are name$number to avoid duplications + // the number is stripped here + String fieldName = arg.getName().split("\\$", 2)[0]; + FormField field = form.getField(fieldName); + if (field.getType() == FieldType.BOOLEAN) + { + form.insert(fieldName, + (arg.getValue() != null && !arg.getValue().isBlank()) + ? true + : false); + } + else + { + form.insert(fieldName, field.valueOf(arg.getValue())); + } + } + } + return new JobId(service.getName(), service.getName(), form.submit()); + } + @Override public final void updateStatus(WsJob job) {