3 import jalview.bin.Cache;
4 import jalview.io.packed.DataProvider.JvDataType;
5 import jalview.jbgui.*;
6 import jalview.ws.rest.InputType;
7 import jalview.ws.rest.RestServiceDescription;
10 import java.awt.event.ComponentEvent;
11 import java.awt.event.ComponentListener;
12 import java.awt.event.ContainerEvent;
13 import java.awt.event.ContainerListener;
14 import java.awt.event.KeyEvent;
15 import java.awt.event.KeyListener;
16 import java.awt.event.WindowEvent;
17 import java.awt.event.WindowListener;
18 import java.awt.event.WindowStateListener;
19 import java.util.ArrayList;
20 import java.util.HashMap;
22 import java.util.Vector;
23 import java.util.regex.Matcher;
24 import java.util.regex.Pattern;
27 import javax.swing.event.CaretEvent;
28 import javax.swing.event.DocumentEvent;
29 import javax.swing.event.DocumentListener;
30 import javax.swing.text.GapContent;
32 import org.apache.log4j.lf5.LogLevel;
34 public class RestServiceEditorPane extends GRestServiceEditorPane
37 * the latest version of the service definition.
39 jalview.ws.rest.RestServiceDescription currentservice = null;
42 * original service passed to editor if we are modifying an existing service
45 jalview.ws.rest.RestServiceDescription oldservice = null;
47 public RestServiceEditorPane()
50 // begin with initial text description box enabled.
51 urldesc.addKeyListener(new KeyListener()
57 public void keyTyped(KeyEvent e)
59 refreshCutnPaste(true);
63 public void keyReleased(KeyEvent e)
65 // TODO Auto-generated method stub
70 public void keyPressed(KeyEvent e)
72 // TODO Auto-generated method stub
76 paste.addComponentListener(new ComponentListener()
80 public void componentShown(ComponentEvent e)
82 updateServiceFromGui();
83 refreshCutnPaste(false);
88 public void componentResized(ComponentEvent e)
93 public void componentMoved(ComponentEvent e)
99 public void componentHidden(ComponentEvent e)
101 // TODO Auto-generated method stub
107 public RestServiceEditorPane(RestServiceDescription toedit)
111 currentservice = new RestServiceDescription(toedit);
112 initGuiWith(currentservice);
113 refreshCutnPaste(false);
118 * refresh the buttons based on model state
120 public void updateButtons()
122 cancelButton.setEnabled(oldservice != null);
123 okButton.setEnabled(currentservice != null && currentservice.isValid());
127 Vector<String> _iparam = new Vector<String>();
129 Vector<String> _rparam = new Vector<String>();
132 * generate an editable URL service string and parameter list using the
135 * @param currentservice2
137 private void initGuiWith(RestServiceDescription currentservice)
139 name.setText(currentservice.getName());
140 descr.setText(currentservice.getDescription());
141 url.setText(currentservice.getPostUrl());
142 urlsuff.setText(currentservice.getUrlSuffix());
145 for (Map.Entry<String, InputType> inparam : currentservice
146 .getInputParams().entrySet())
148 _iparam.add(inparam.getKey() + " "
149 + inparam.getValue().getURLtokenPrefix() + ":"
150 + inparam.getValue().getURLEncodedParameter().toString());
152 for (JvDataType oparam : currentservice.getResultDataTypes())
154 _rparam.add((oparam.name()));
156 iprms.setListData(_iparam);
157 rdata.setListData(_rparam);
159 action.removeAllItems();
160 action.addItem("Alignment");
161 action.addItem("Analysis");
162 // action.addItem("Analysis");
163 action.setSelectedItem(currentservice.getAction());
167 private boolean updateServiceFromGui() {
169 Map<String,InputType>inputTypes = new HashMap<String, InputType>();
170 StringBuffer warnings=new StringBuffer();
171 for (String its:_iparam)
173 Matcher mtch = Pattern.compile("(\\S+)\\s(\\S+):\\[(.+)]").matcher(its);
175 if (!RestServiceDescription.parseTypeString(mtch.group(2)+":"+mtch.group(3), mtch.group(1), mtch.group(2),mtch.group(3), inputTypes, warnings))
177 System.err.println("IMPLEMENTATION PROBLEM: Cannot parse RestService input parameter string '"+its+"'"+"\n"+warnings);
181 char gc = gapChar.getSelectedItem()==null ? ' ' : ((String)gapChar.getSelectedItem()).charAt(0);
182 RestServiceDescription newService = new RestServiceDescription((String) action.getSelectedItem(),
183 descr.getText().trim(), name.getText().trim(), url.getText().trim(), urlsuff.getText().trim(), inputTypes, hSeparable.isSelected(), vSeparable.isSelected(), gc);
185 if (newService.isValid())
187 for (String its:_rparam)
191 dtype = JvDataType.valueOf(its);
192 newService.addResultDatatype(dtype);
197 System.err.println("IMPLEMENTATION PROBLEM: Cannot parse RestService output parameter string '"+its+"'"+"\n"+warnings);
200 currentservice = newService;
203 System.err.println("IMPLEMENTATION PROBLEM: Restservice generated from GUI is invalid\n"+warnings);
208 protected void refreshCutnPaste(boolean reparse)
210 if (!reparse && currentservice.isValid())
212 urldesc.setText(currentservice.toString());
213 parseWarnings.setVisible(false);
219 String txt = urldesc.getText().trim();
220 StringBuffer warnings;
221 if (txt.length() > 0)
223 RestServiceDescription rsd = null;
226 rsd = new RestServiceDescription(txt);
229 parseWarnings.setVisible(false);
230 initGuiWith(currentservice=rsd);
234 parseRes.setText("Parsing failed. Syntax errors shown below\n"
235 + rsd.getInvalidMessage());
236 parseWarnings.setVisible(true);
238 } catch (Throwable e)
240 parseRes.setText("\nParsing failed. An unrecoverable exception was thrown:\n"
242 parseWarnings.setVisible(true);
250 public static void main(String[] args)
252 if (args.length == 0)
254 new Thread(new Runnable()
256 boolean visible = true;
262 final Thread runner = Thread.currentThread();
263 JFrame df = new JFrame();
264 df.getContentPane().setLayout(new BorderLayout());
265 df.getContentPane().add(
266 new RestServiceEditorPane(jalview.ws.rest.RestClient
267 .makeShmmrRestClient().getRestDescription()),
268 BorderLayout.CENTER);
269 df.setBounds(100, 100, 400, 600);
270 df.addComponentListener(new ComponentListener()
274 public void componentShown(ComponentEvent e)
276 // TODO Auto-generated method stub
281 public void componentResized(ComponentEvent e)
283 // TODO Auto-generated method stub
288 public void componentMoved(ComponentEvent e)
290 // TODO Auto-generated method stub
295 public void componentHidden(ComponentEvent e)
308 } catch (Exception x)