Revert "JAL-3070 JAL-3066 fix initialisation of slivka ServiceWithParameters"
[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.getName(), action, service.getLabel(), "Slivka", client.getUrl().toString());
44     this.client = client;
45     this.service = service;
46   }
47
48   @Override
49   public final void updateStatus(WsJob job)
50   {
51     try
52     {
53       job.setState(stateMap.get(client.getJobState(job.getJobId())));
54     } catch (IOException e)
55     {
56       throw new IOError(e);
57     }
58   }
59
60   @Override
61   public final boolean updateJobProgress(WsJob job)
62   {
63     return false;
64   }
65
66   @Override
67   public final boolean handleSubmitError(Throwable _lex, WsJob j, WebserviceInfo wsInfo)
68   {
69     if (_lex instanceof FormValidationException)
70     {
71       FormValidationException formError = (FormValidationException) _lex;
72       String[] messages = new String[formError.getErrors().size()];
73       int i = 0;
74       for (ValidationException e : formError.getErrors())
75       {
76         messages[i++] = String.format("%s: %s,", e.getField().getName(), e.getMessage());
77       }
78       j.setState(WsJob.JobState.INVALID);
79       j.setStatus(String.join(", ", messages));
80       return true;
81     }
82     return false;
83   }
84
85   @Override
86   public final boolean handleCollectionException(Exception e, WsJob msjob, WebserviceInfo wsInfo)
87   {
88     // TODO
89     return false;
90   }
91
92   final SlivkaService getService()
93   {
94     return service;
95   }
96
97   @Override
98   public final Object getEndpoint()
99   {
100     return this;
101   }
102
103   @Override
104   public final void initParamStore(ParamManager userParameterStore)
105   {
106     if (store == null)
107     {
108       try
109       {
110         store = new SlivkaDatastore(service);
111       } catch (IOException e)
112       {
113         throw new IOError(e);
114       }
115     }
116   }
117
118   @Override
119   public boolean hasParameters()
120   {
121     return true;
122   }
123
124   @Override
125   public final ParamDatastoreI getParamStore()
126   {
127     if (store == null)
128     {
129       initParamStore(null);
130     }
131     return store;
132   }
133
134 }