package jalview.ws.slivkaws; import jalview.gui.WebserviceInfo; import jalview.ws.api.JalviewServiceEndpointProviderI; import jalview.ws.api.JalviewWebServiceI; import jalview.ws.api.ServiceWithParameters; import jalview.ws.gui.WsJob; import jalview.ws.params.ParamDatastoreI; import jalview.ws.params.ParamManager; import java.io.IOError; import java.io.IOException; import java.util.EnumMap; import uk.ac.dundee.compbio.slivkaclient.FormValidationException; import uk.ac.dundee.compbio.slivkaclient.JobState; import uk.ac.dundee.compbio.slivkaclient.SlivkaClient; import uk.ac.dundee.compbio.slivkaclient.SlivkaService; import uk.ac.dundee.compbio.slivkaclient.ValidationException; public abstract class SlivkaWSInstance extends ServiceWithParameters implements JalviewServiceEndpointProviderI, JalviewWebServiceI { protected final SlivkaClient client; protected final SlivkaService service; protected SlivkaDatastore store = null; protected static final EnumMap stateMap = new EnumMap<>(JobState.class); { stateMap.put(JobState.PENDING, 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.FAILED, WsJob.JobState.FAILED); stateMap.put(JobState.ERROR, WsJob.JobState.SERVERERROR); stateMap.put(JobState.UNKNOWN, WsJob.JobState.UNKNOWN); } public SlivkaWSInstance(SlivkaClient client, SlivkaService service, String action) { super(service.getLabel(), action, service.getName(), "Slivka", client.getUrl().toString()); this.client = client; this.service = service; } @Override public final void updateStatus(WsJob job) { try { job.setState(stateMap.get(client.getJobState(job.getJobId()))); } catch (IOException e) { throw new IOError(e); } } @Override public final boolean updateJobProgress(WsJob job) { return false; } @Override public final boolean handleSubmitError(Throwable _lex, WsJob j, WebserviceInfo wsInfo) { if (_lex instanceof FormValidationException) { FormValidationException formError = (FormValidationException) _lex; String[] messages = new String[formError.getErrors().size()]; int i = 0; for (ValidationException e : formError.getErrors()) { messages[i++] = String.format("%s: %s,", e.getField().getName(), e.getMessage()); } j.setState(WsJob.JobState.INVALID); j.setStatus(String.join(", ", messages)); return true; } return false; } @Override public final boolean handleCollectionException(Exception e, WsJob msjob, WebserviceInfo wsInfo) { // TODO return false; } final SlivkaService getService() { return service; } @Override public final Object getEndpoint() { return this; } @Override public final void initParamStore(ParamManager userParameterStore) { if (store == null) { try { store = new SlivkaDatastore(service); } catch (IOException e) { throw new IOError(e); } } } @Override public boolean hasParameters() { return true; } @Override public final ParamDatastoreI getParamStore() { if (store == null) { initParamStore(null); } return store; } }