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.ChangeEvent;
29 import javax.swing.event.ChangeListener;
30 import javax.swing.event.DocumentEvent;
31 import javax.swing.event.DocumentListener;
32 import javax.swing.text.GapContent;
34 import org.apache.log4j.lf5.LogLevel;
36 public class RestServiceEditorPane extends GRestServiceEditorPane
39 * the latest version of the service definition.
41 jalview.ws.rest.RestServiceDescription currentservice = null;
44 * original service passed to editor if we are modifying an existing service
47 jalview.ws.rest.RestServiceDescription oldservice = null;
49 public RestServiceEditorPane()
52 // begin with initial text description box enabled.
53 urldesc.addKeyListener(new KeyListener()
59 public void keyTyped(KeyEvent e)
64 public void keyReleased(KeyEvent e)
66 refreshCutnPaste(true);
70 public void keyPressed(KeyEvent e)
72 // TODO Auto-generated method stub
76 panels.addChangeListener(new ChangeListener()
80 public void stateChanged(ChangeEvent e)
82 if (lastComp!=paste) {
83 updateServiceFromGui();
84 refreshCutnPaste(false);
86 refreshCutnPaste(true);
88 lastComp = panels.getSelectedComponent();
94 public RestServiceEditorPane(RestServiceDescription toedit)
98 currentservice = new RestServiceDescription(toedit);
99 initGuiWith(currentservice);
100 refreshCutnPaste(false);
105 * refresh the buttons based on model state
107 public void updateButtons()
109 cancelButton.setEnabled(oldservice != null);
110 okButton.setEnabled(currentservice != null && currentservice.isValid());
114 Vector<String> _iparam = new Vector<String>();
116 Vector<String> _rparam = new Vector<String>();
119 * generate an editable URL service string and parameter list using the
122 * @param currentservice2
124 private void initGuiWith(RestServiceDescription currentservice)
126 name.setText(currentservice.getName());
127 descr.setText(currentservice.getDescription());
128 url.setText(currentservice.getPostUrl());
129 urlsuff.setText(currentservice.getUrlSuffix());
132 for (Map.Entry<String, InputType> inparam : currentservice
133 .getInputParams().entrySet())
135 _iparam.add(inparam.getKey() + " "
136 + inparam.getValue().getURLtokenPrefix() + ":"
137 + inparam.getValue().getURLEncodedParameter().toString());
139 for (JvDataType oparam : currentservice.getResultDataTypes())
141 _rparam.add((oparam.name()));
143 iprms.setListData(_iparam);
144 rdata.setListData(_rparam);
146 action.removeAllItems();
147 action.addItem("Alignment");
148 action.addItem("Analysis");
149 // action.addItem("Analysis");
150 action.setSelectedItem(currentservice.getAction());
154 private boolean updateServiceFromGui() {
156 Map<String,InputType>inputTypes = new HashMap<String, InputType>();
157 StringBuffer warnings=new StringBuffer();
158 for (String its:_iparam)
160 Matcher mtch = Pattern.compile("(\\S+)\\s(\\S+):\\[(.+)]").matcher(its);
162 if (!RestServiceDescription.parseTypeString(mtch.group(2)+":"+mtch.group(3), mtch.group(1), mtch.group(2),mtch.group(3), inputTypes, warnings))
164 System.err.println("IMPLEMENTATION PROBLEM: Cannot parse RestService input parameter string '"+its+"'"+"\n"+warnings);
168 char gc = gapChar.getSelectedItem()==null ? ' ' : ((String)gapChar.getSelectedItem()).charAt(0);
169 RestServiceDescription newService = new RestServiceDescription((String) action.getSelectedItem(),
170 descr.getText().trim(), name.getText().trim(), url.getText().trim(), urlsuff.getText().trim(), inputTypes, hSeparable.isSelected(), vSeparable.isSelected(), gc);
172 if (newService.isValid())
174 for (String its:_rparam)
178 dtype = JvDataType.valueOf(its);
179 newService.addResultDatatype(dtype);
184 System.err.println("IMPLEMENTATION PROBLEM: Cannot parse RestService output parameter string '"+its+"'"+"\n"+warnings);
187 currentservice = newService;
190 System.err.println("IMPLEMENTATION PROBLEM: Restservice generated from GUI is invalid\n"+warnings);
195 protected void refreshCutnPaste(boolean reparse)
197 if (!reparse && currentservice.isValid())
199 urldesc.setText(currentservice.toString());
200 parseWarnings.setVisible(false);
206 String txt = urldesc.getText().trim();
207 if (txt.length() > 0)
209 RestServiceDescription rsd = null;
212 rsd = new RestServiceDescription(txt);
215 parseWarnings.setVisible(false);
216 parseRes.setText("");
217 initGuiWith(currentservice=rsd);
221 parseRes.setText("Parsing failed. Syntax errors shown below\n"
222 + rsd.getInvalidMessage());
223 parseWarnings.setVisible(true);
225 } catch (Throwable e)
228 parseRes.setText("\nParsing failed. An unrecoverable exception was thrown:\n"
230 parseWarnings.setVisible(true);
239 public static void main(String[] args)
241 if (args.length == 0)
243 new Thread(new Runnable()
245 boolean visible = true;
251 final Thread runner = Thread.currentThread();
252 JFrame df = new JFrame();
253 df.getContentPane().setLayout(new BorderLayout());
254 df.getContentPane().add(
255 new RestServiceEditorPane(jalview.ws.rest.RestClient
256 .makeShmmrRestClient().getRestDescription()),
257 BorderLayout.CENTER);
258 df.setBounds(100, 100, 400, 600);
259 df.addComponentListener(new ComponentListener()
263 public void componentShown(ComponentEvent e)
265 // TODO Auto-generated method stub
270 public void componentResized(ComponentEvent e)
272 // TODO Auto-generated method stub
277 public void componentMoved(ComponentEvent e)
279 // TODO Auto-generated method stub
284 public void componentHidden(ComponentEvent e)
297 } catch (Exception x)