1.5 annotation fix
[jalview.git] / src / jalview / gui / WsPreferences.java
1 package jalview.gui;
2
3 import java.awt.BorderLayout;
4 import java.awt.event.ActionEvent;
5 import java.net.URL;
6 import java.util.Vector;
7
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;
13
14 import jalview.bin.Cache;
15 import jalview.jbgui.GWsPreferences;
16
17 public class WsPreferences extends GWsPreferences
18 {
19
20   public WsPreferences()
21   {
22     super();
23     initFromPreferences();
24   }
25
26   Vector<String> wsUrls,oldUrls;
27   private boolean needWsMenuUpdate;
28   private boolean oldJws1,oldJws2,oldIndexByHost,oldIndexByType,oldEnfin;
29   private void initFromPreferences()
30   {
31
32     wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls();
33     if (wsUrls!=null) {
34       oldUrls = new Vector<String>(wsUrls);
35     } else {
36       oldUrls=null;
37       wsUrls=new Vector<String>();
38     }
39     updateList();
40     enableEnfinServices.setSelected(oldEnfin=Cache.getDefault(
41             "SHOW_ENFIN_SERVICES", true));
42     enableJws1Services.setSelected(oldJws1=Cache.getDefault("SHOW_JWS1_SERVICES",
43             true));
44     enableJws2Services.setSelected(oldJws2=Cache.getDefault("SHOW_JWS2_SERVICES",
45             true));
46     indexByHost.setSelected(oldIndexByHost=Cache.getDefault("WSMENU_BYHOST", true));
47     indexByType.setSelected(oldIndexByType=Cache.getDefault("WSMENU_BYTYPE", true));
48   }
49   private void updateList() {
50     wsList.setListData(wsUrls);
51   }
52   private void updateServiceList() {
53     jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls);
54   }
55   /* (non-Javadoc)
56    * @see jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event.ActionEvent)
57    */
58   @Override
59   protected void deleteWsUrl_actionPerformed(ActionEvent e)
60   {
61     int sel = wsList.getSelectedIndex();
62     if (sel>-1)
63     {
64       wsUrls.removeElementAt(sel);
65       updateList();
66     }
67   }
68
69   /* (non-Javadoc)
70    * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event.ActionEvent)
71    */
72   @Override
73   protected void editWsUrl_actionPerformed(ActionEvent e)
74   {
75     int sel = wsList.getSelectedIndex();
76     if (sel>-1)
77     {
78       String url=editUrl(wsUrls.elementAt(sel),"Edit JWS2 URL");
79       if (url!=null)
80       {
81         int present = wsUrls.indexOf(url);
82         if (present==-1)
83         {
84           wsUrls.setElementAt(url,sel);
85           updateList();
86         } else {
87           if (present!=sel)
88           {
89             wsUrls.removeElementAt(sel);
90             updateList();
91           }
92         }
93       }
94     }
95   }
96   
97   void updateWsMenuConfig(boolean old) {
98     if (old) {
99       wsUrls = (oldUrls==null) ? null : new Vector(oldUrls);
100     }
101     Cache.setProperty("SHOW_ENFIN_SERVICES", Boolean.valueOf(old ? oldEnfin : enableEnfinServices.isSelected()).toString());
102     Cache.setProperty("SHOW_JWS1_SERVICES", Boolean.valueOf(old ? oldJws1 : enableJws1Services.isSelected()).toString());
103     Cache.setProperty("SHOW_JWS2_SERVICES", Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected()).toString());
104     Cache.setProperty("WSMENU_BYHOST", Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected()).toString());
105     Cache.setProperty("WSMENU_BYTYPE", Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected()).toString());
106     updateServiceList();
107   }
108   
109   /* (non-Javadoc)
110    * @see jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event.ActionEvent)
111    */
112   @Override
113   protected void moveWsUrlDown_actionPerformed(ActionEvent e)
114   {
115     int p=wsList.getSelectedIndex();
116     if (p>-1 && p<wsUrls.size()-1)
117     {
118       String t = wsUrls.get(p+1);
119       wsUrls.setElementAt(wsUrls.elementAt(p), p+1);
120       wsUrls.setElementAt(t, p);
121       updateList();
122       wsList.setSelectedIndex(p+1);
123     }
124   }
125
126   /* (non-Javadoc)
127    * @see jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event.ActionEvent)
128    */
129   @Override
130   protected void moveWsUrlUp_actionPerformed(ActionEvent e)
131   {
132     int p=wsList.getSelectedIndex();
133     if (p>0)
134     {
135       String t = wsUrls.get(p-1);
136       wsUrls.setElementAt(wsUrls.elementAt(p), p-1);
137       wsUrls.setElementAt(t, p);
138       updateList();
139       wsList.setSelectedIndex(p-1);
140     }
141   }
142
143   private String editUrl(String initUrl, String title)
144   {
145     String url=initUrl;
146     URL foo=null;
147     if (url==null)
148     {
149       url = "";
150     }
151     JTextField urltf = new JTextField(url, 40);
152     JPanel panel = new JPanel(new BorderLayout());
153     JPanel pane12 = new JPanel(new BorderLayout());
154     pane12.add(new JLabel("URL: "), BorderLayout.CENTER);
155     pane12.add(urltf, BorderLayout.EAST);
156     panel.add(pane12, BorderLayout.NORTH);
157     boolean valid=false;
158     int resp=JOptionPane.CANCEL_OPTION;
159     while (!valid && (resp=JOptionPane.showInternalConfirmDialog(Desktop.desktop, panel, title, JOptionPane.OK_CANCEL_OPTION))==JOptionPane.OK_OPTION)
160     {
161       try {
162         // TODO: do a better job of checking that the url is a valid discovery URL for web services.
163         foo = new URL(urltf.getText().trim());
164         valid = true;
165       } catch (Exception e)
166       {
167         valid = false;
168         JOptionPane.showInternalMessageDialog(Desktop.desktop, "Invalid URL !");
169       }
170     }
171     if (valid && resp==JOptionPane.OK_OPTION)
172     {
173       int validate = JOptionPane.showInternalConfirmDialog(Desktop.desktop, null, "Validate JabaWS Server ?\n(Look in console output for results)", JOptionPane.YES_NO_OPTION);
174       if (validate == JOptionPane.OK_OPTION)
175       {
176         if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo)) 
177         {
178           return foo.toString();
179         }
180       }
181     }
182     return initUrl; 
183   }
184   /* (non-Javadoc)
185    * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.ActionEvent)
186    */
187   @Override
188   protected void newWsUrl_actionPerformed(ActionEvent e)
189   {
190     String url=editUrl(null,"Add new JWS2 URL");
191     if (url!=null)
192     {
193       if (!wsUrls.contains(url))
194       {
195         int selind = wsList.getSelectedIndex();
196         if (selind>-1)
197         {
198           wsUrls.insertElementAt(url, selind);
199         } else {
200           wsUrls.addElement(url);
201         }
202         updateList();
203       }
204     }
205   }
206
207   /* (non-Javadoc)
208    * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.ActionEvent)
209    */
210   @Override
211   protected void refreshWs_actionPerformed(ActionEvent e)
212   {
213     new Thread(new Runnable() {
214
215       public void run()
216       {
217         updateWsMenuConfig(false);
218         refreshWsMenu(true);
219       }      
220     }).start();
221     
222   }
223
224   protected void refreshWsMenu(boolean showProgress)
225   {
226     if (showProgress)
227     {
228       new Thread(new Runnable() {
229
230         public void run()
231         {
232           progressBar.setVisible(true);
233           validate();
234           progressBar.setIndeterminate(true);
235           Desktop.instance.startServiceDiscovery(true); // wait around for all threads to complete
236           progressBar.setIndeterminate(false);
237           progressBar.setVisible(false);
238           validate();
239         }      
240       }).start();
241       
242     } else {
243       new Thread(new Runnable() {
244
245         public void run()
246         {
247           Desktop.instance.startServiceDiscovery(false);
248         }
249         
250       }).start();
251     }
252   }
253
254   /* (non-Javadoc)
255    * @see jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent)
256    */
257   @Override
258   protected void resetWs_actionPerformed(ActionEvent e)
259   {
260     jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
261     wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); 
262     updateList();
263   }
264   protected void ok_ActionPerformed(ActionEvent e) {
265     updateWsMenuConfig(false);
266     // todo: work out if the ws list needs updating ?
267     updateServiceList();
268     refreshWsMenu(false);
269   }
270 }