wrong config string
[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;
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       return urltf.getText().trim();
174     }
175     return initUrl; 
176   }
177   /* (non-Javadoc)
178    * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.ActionEvent)
179    */
180   @Override
181   protected void newWsUrl_actionPerformed(ActionEvent e)
182   {
183     String url=editUrl(null,"Add new JWS2 URL");
184     if (url!=null)
185     {
186       if (!wsUrls.contains(url))
187       {
188         int selind = wsList.getSelectedIndex();
189         if (selind>-1)
190         {
191           wsUrls.insertElementAt(url, selind);
192         } else {
193           wsUrls.addElement(url);
194         }
195         updateList();
196       }
197     }
198   }
199
200   /* (non-Javadoc)
201    * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.ActionEvent)
202    */
203   @Override
204   protected void refreshWs_actionPerformed(ActionEvent e)
205   {
206     new Thread(new Runnable() {
207
208       @Override
209       public void run()
210       {
211         updateWsMenuConfig(false);
212         refreshWsMenu(true);
213       }      
214     }).start();
215     
216   }
217
218   protected void refreshWsMenu(boolean showProgress)
219   {
220     if (showProgress)
221     {
222       new Thread(new Runnable() {
223
224         @Override
225         public void run()
226         {
227           progressBar.setVisible(true);
228           validate();
229           progressBar.setIndeterminate(true);
230           Desktop.instance.startServiceDiscovery(true); // wait around for all threads to complete
231           progressBar.setIndeterminate(false);
232           progressBar.setVisible(false);
233           validate();
234         }      
235       }).start();
236       
237     } else {
238       new Thread(new Runnable() {
239
240         @Override
241         public void run()
242         {
243           Desktop.instance.startServiceDiscovery(false);
244         }
245         
246       }).start();
247     }
248   }
249
250   /* (non-Javadoc)
251    * @see jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent)
252    */
253   @Override
254   protected void resetWs_actionPerformed(ActionEvent e)
255   {
256     jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null);
257     wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); 
258     updateList();
259   }
260   protected void ok_ActionPerformed(ActionEvent e) {
261     updateWsMenuConfig(false);
262     // todo: work out if the ws list needs updating ?
263     updateServiceList();
264     refreshWsMenu(false);
265   }
266 }