b9f375fa6e76b962f1fbe433b6f63bfe228e84bc
[jalview.git] / src / jalview / ws / slivkaws / SlivkaWSInstance.java
1 package jalview.ws.slivkaws;
2
3 import jalview.gui.WebserviceInfo;
4 import jalview.ws.api.JalviewServiceEndpointProviderI;
5 import jalview.ws.api.JalviewWebServiceI;
6 import jalview.ws.api.ServiceWithParameters;
7 import jalview.ws.gui.WsJob;
8 import jalview.ws.params.ParamDatastoreI;
9 import jalview.ws.params.ParamManager;
10
11 import java.io.IOError;
12 import java.io.IOException;
13 import java.util.EnumMap;
14
15 import uk.ac.dundee.compbio.slivkaclient.FormValidationException;
16 import uk.ac.dundee.compbio.slivkaclient.JobState;
17 import uk.ac.dundee.compbio.slivkaclient.SlivkaClient;
18 import uk.ac.dundee.compbio.slivkaclient.SlivkaService;
19 import uk.ac.dundee.compbio.slivkaclient.ValidationException;
20
21 public abstract class SlivkaWSInstance extends ServiceWithParameters
22     implements JalviewServiceEndpointProviderI, JalviewWebServiceI
23 {
24   protected final SlivkaClient client;
25
26   protected final SlivkaService service;
27
28   protected SlivkaDatastore store = null;
29
30   protected static final EnumMap<JobState, WsJob.JobState> stateMap = new EnumMap<>(JobState.class);
31   {
32     stateMap.put(JobState.PENDING, WsJob.JobState.QUEUED);
33     stateMap.put(JobState.QUEUED, WsJob.JobState.QUEUED);
34     stateMap.put(JobState.RUNNING, WsJob.JobState.RUNNING);
35     stateMap.put(JobState.COMPLETED, WsJob.JobState.FINISHED);
36     stateMap.put(JobState.FAILED, WsJob.JobState.FAILED);
37     stateMap.put(JobState.ERROR, WsJob.JobState.SERVERERROR);
38     stateMap.put(JobState.UNKNOWN, WsJob.JobState.UNKNOWN);
39   }
40
41   public SlivkaWSInstance(SlivkaClient client, SlivkaService service, String action)
42   {
43     super(service.getLabel(), action, service.getName(), "Slivka",
44             client.getUrl().toString());
45     this.client = client;
46     this.service = service;
47   }
48
49   @Override
50   public final void updateStatus(WsJob job)
51   {
52     try
53     {
54       job.setState(stateMap.get(client.getJobState(job.getJobId())));
55     } catch (IOException e)
56     {
57       throw new IOError(e);
58     }
59   }
60
61   @Override
62   public final boolean updateJobProgress(WsJob job)
63   {
64     return false;
65   }
66
67   @Override
68   public final boolean handleSubmitError(Throwable _lex, WsJob j, WebserviceInfo wsInfo)
69   {
70     if (_lex instanceof FormValidationException)
71     {
72       FormValidationException formError = (FormValidationException) _lex;
73       String[] messages = new String[formError.getErrors().size()];
74       int i = 0;
75       for (ValidationException e : formError.getErrors())
76       {
77         messages[i++] = String.format("%s: %s,", e.getField().getName(), e.getMessage());
78       }
79       j.setState(WsJob.JobState.INVALID);
80       j.setStatus(String.join(", ", messages));
81       return true;
82     }
83     return false;
84   }
85
86   @Override
87   public final boolean handleCollectionException(Exception e, WsJob msjob, WebserviceInfo wsInfo)
88   {
89     // TODO
90     return false;
91   }
92
93   final SlivkaService getService()
94   {
95     return service;
96   }
97
98   @Override
99   public final Object getEndpoint()
100   {
101     return this;
102   }
103
104   @Override
105   public final void initParamStore(ParamManager userParameterStore)
106   {
107     if (store == null)
108     {
109       try
110       {
111         store = new SlivkaDatastore(service);
112       } catch (IOException e)
113       {
114         throw new IOError(e);
115       }
116     }
117   }
118
119   @Override
120   public boolean hasParameters()
121   {
122     return true;
123   }
124
125   @Override
126   public final ParamDatastoreI getParamStore()
127   {
128     if (store == null)
129     {
130       initParamStore(null);
131     }
132     return store;
133   }
134
135 }