3 import java.awt.BorderLayout;
4 import java.awt.event.ActionEvent;
6 import java.util.Vector;
8 import javax.swing.JCheckBox;
9 import javax.swing.JLabel;
10 import javax.swing.JOptionPane;
11 import javax.swing.JPanel;
12 import javax.swing.JTextField;
14 import jalview.bin.Cache;
15 import jalview.jbgui.GWsPreferences;
17 public class WsPreferences extends GWsPreferences
20 public WsPreferences()
23 initFromPreferences();
26 Vector<String> wsUrls,oldUrls;
27 private boolean needWsMenuUpdate;
28 private boolean oldJws1,oldJws2,oldIndexByHost,oldIndexByType,oldEnfin;
29 private void initFromPreferences()
32 wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
34 oldUrls = new Vector<String>(wsUrls);
37 wsUrls=new Vector<String>();
40 enableEnfinServices.setSelected(oldEnfin=Cache.getDefault(
41 "SHOW_ENFIN_SERVICES", true));
42 enableJws1Services.setSelected(oldJws1=Cache.getDefault("SHOW_JWS1_SERVICES",
44 enableJws2Services.setSelected(oldJws2=Cache.getDefault("SHOW_JWS2_SERVICES",
46 indexByHost.setSelected(oldIndexByHost=Cache.getDefault("WSMENU_BYHOST", true));
47 indexByType.setSelected(oldIndexByType=Cache.getDefault("WSMENU_BYTYPE", true));
49 private void updateList() {
50 wsList.setListData(wsUrls);
52 private void updateServiceList() {
53 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls);
56 * @see jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event.ActionEvent)
59 protected void deleteWsUrl_actionPerformed(ActionEvent e)
61 int sel = wsList.getSelectedIndex();
64 wsUrls.removeElementAt(sel);
70 * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event.ActionEvent)
73 protected void editWsUrl_actionPerformed(ActionEvent e)
75 int sel = wsList.getSelectedIndex();
78 String url=editUrl(wsUrls.elementAt(sel),"Edit JWS2 URL");
81 int present = wsUrls.indexOf(url);
84 wsUrls.setElementAt(url,sel);
89 wsUrls.removeElementAt(sel);
97 void updateWsMenuConfig(boolean old) {
99 wsUrls = (oldUrls==null) ? null : new Vector(oldUrls);
103 Cache.setProperty("SHOW_ENFIN_SERVICES", Boolean.valueOf(old ? oldEnfin : enableEnfinServices.isSelected()).toString());
104 Cache.setProperty("SHOW_JWS1_SERVICES", Boolean.valueOf(old ? oldJws1 : enableJws1Services.isSelected()).toString());
105 Cache.setProperty("SHOW_JWS2_SERVICES", Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected()).toString());
106 Cache.setProperty("WSMENU_BYHOST", Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected()).toString());
107 Cache.setProperty("WSMENU_BYTYPE", Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected()).toString());
112 * @see jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event.ActionEvent)
115 protected void moveWsUrlDown_actionPerformed(ActionEvent e)
117 int p=wsList.getSelectedIndex();
118 if (p>-1 && p<wsUrls.size()-1)
120 String t = wsUrls.get(p+1);
121 wsUrls.setElementAt(wsUrls.elementAt(p), p+1);
122 wsUrls.setElementAt(t, p);
124 wsList.setSelectedIndex(p+1);
129 * @see jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event.ActionEvent)
132 protected void moveWsUrlUp_actionPerformed(ActionEvent e)
134 int p=wsList.getSelectedIndex();
137 String t = wsUrls.get(p-1);
138 wsUrls.setElementAt(wsUrls.elementAt(p), p-1);
139 wsUrls.setElementAt(t, p);
141 wsList.setSelectedIndex(p-1);
145 private String editUrl(String initUrl, String title)
153 JTextField urltf = new JTextField(url, 40);
154 JPanel panel = new JPanel(new BorderLayout());
155 JPanel pane12 = new JPanel(new BorderLayout());
156 pane12.add(new JLabel("URL: "), BorderLayout.CENTER);
157 pane12.add(urltf, BorderLayout.EAST);
158 panel.add(pane12, BorderLayout.NORTH);
160 int resp=JOptionPane.CANCEL_OPTION;
161 while (!valid && (resp=JOptionPane.showInternalConfirmDialog(Desktop.desktop, panel, title, JOptionPane.OK_CANCEL_OPTION))==JOptionPane.OK_OPTION)
164 // TODO: do a better job of checking that the url is a valid discovery URL for web services.
165 foo = new URL(urltf.getText().trim());
167 } catch (Exception e)
170 JOptionPane.showInternalMessageDialog(Desktop.desktop, "Invalid URL !");
173 if (valid && resp==JOptionPane.OK_OPTION)
175 int validate = JOptionPane.showInternalConfirmDialog(Desktop.desktop, "Validate JabaWS Server ?\n(Look in console output for results)", "Test Server?", JOptionPane.YES_NO_OPTION);
176 if (validate == JOptionPane.OK_OPTION)
178 if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo))
180 return foo.toString();
182 JOptionPane.showInternalMessageDialog(Desktop.desktop, "Service did not pass validation.\nCheck the Jalview Console for more details.");
185 // just return the URL anyway
186 return foo.toString();
192 * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.ActionEvent)
195 protected void newWsUrl_actionPerformed(ActionEvent e)
197 String url=editUrl(null,"Add new JWS2 URL");
200 if (!wsUrls.contains(url))
202 int selind = wsList.getSelectedIndex();
205 wsUrls.insertElementAt(url, selind);
207 wsUrls.addElement(url);
215 * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.ActionEvent)
218 protected void refreshWs_actionPerformed(ActionEvent e)
220 new Thread(new Runnable() {
224 updateWsMenuConfig(false);
232 * @param showProgress show progress in dialog or on desktop
234 protected void refreshWsMenu(boolean showProgress)
238 new Thread(new Runnable() {
242 progressBar.setVisible(true);
244 progressBar.setIndeterminate(true);
245 Desktop.instance.startServiceDiscovery(true); // wait around for all threads to complete
246 progressBar.setIndeterminate(false);
247 progressBar.setVisible(false);
253 new Thread(new Runnable() {
257 long ct = System.currentTimeMillis();
258 Desktop.instance.setProgressBar("Refreshing Web Service Menus", ct);
259 Desktop.instance.startServiceDiscovery(true);
260 Desktop.instance.setProgressBar("Refreshing Web Service Menus", ct);
268 * @see jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent)
271 protected void resetWs_actionPerformed(ActionEvent e)
273 jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
274 wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
277 protected void ok_ActionPerformed(ActionEvent e) {
278 // update everything regardless.
279 updateAndRefreshWsMenuConfig(false);
281 public void updateAndRefreshWsMenuConfig(final boolean showProgressInDialog)
283 new Thread(new Runnable() {
287 updateWsMenuConfig(false);
288 refreshWsMenu(showProgressInDialog);