X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FWsPreferences.java;h=e2482f6c3391f1ee3cd6c99730d38b0d04fb38d3;hb=a45774ee31d9f35d4eff46d54d7deab719afb092;hp=8ddd28f1903fed436ee43952eadd7ecdc0662274;hpb=ad2bc87d7b8ded21b39a817f1750f2b525c5cac0;p=jalview.git diff --git a/src/jalview/gui/WsPreferences.java b/src/jalview/gui/WsPreferences.java index 8ddd28f..e2482f6 100644 --- a/src/jalview/gui/WsPreferences.java +++ b/src/jalview/gui/WsPreferences.java @@ -1,7 +1,25 @@ +/* + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.7) + * Copyright (C) 2011 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle + * + * This file is part of Jalview. + * + * Jalview is free software: you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * Jalview is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty + * of MERCHANTABILITY or FITNESS FOR A PARTICULAR + * PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with Jalview. If not, see . + */ package jalview.gui; import java.awt.BorderLayout; import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.net.URL; import java.util.Vector; @@ -13,6 +31,7 @@ import javax.swing.JTextField; import jalview.bin.Cache; import jalview.jbgui.GWsPreferences; +import jalview.ws.rest.RestServiceDescription; public class WsPreferences extends GWsPreferences { @@ -23,68 +42,129 @@ public class WsPreferences extends GWsPreferences initFromPreferences(); } - Vector wsUrls,oldUrls; + Vector wsUrls, oldUrls,rsbsUrls,oldRsbsUrls; + private boolean needWsMenuUpdate; - private boolean oldJws1,oldJws2,oldIndexByHost,oldIndexByType,oldEnfin; + + private boolean oldJws1, oldJws2, oldIndexByHost, oldIndexByType, + oldEnfin, oldWsWarning; + private void initFromPreferences() { wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); - if (wsUrls!=null) { + if (wsUrls != null) + { oldUrls = new Vector(wsUrls); - } else { - oldUrls=null; - wsUrls=new Vector(); + } + else + { + oldUrls = null; + wsUrls = new Vector(); } updateList(); - enableEnfinServices.setSelected(oldEnfin=Cache.getDefault( + rsbsUrls = jalview.ws.rest.RestClient.getRsbsDescriptions(); + if (rsbsUrls != null) + { + oldRsbsUrls = new Vector(rsbsUrls); + } + else + { + oldRsbsUrls = null; + rsbsUrls = new Vector(); + } + updateRsbsList(); + enableEnfinServices.setSelected(oldEnfin = Cache.getDefault( "SHOW_ENFIN_SERVICES", true)); - enableJws1Services.setSelected(oldJws1=Cache.getDefault("SHOW_JWS1_SERVICES", - true)); - enableJws2Services.setSelected(oldJws2=Cache.getDefault("SHOW_JWS2_SERVICES", - true)); - indexByHost.setSelected(oldIndexByHost=Cache.getDefault("WSMENU_BYHOST", true)); - indexByType.setSelected(oldIndexByType=Cache.getDefault("WSMENU_BYTYPE", true)); + enableEnfinServices.addActionListener(updateAction); + enableJws2Services.setSelected(oldJws2 = Cache.getDefault( + "SHOW_JWS2_SERVICES", true)); + enableJws2Services.addActionListener(updateAction); + indexByHost.setSelected(oldIndexByHost = Cache.getDefault( + "WSMENU_BYHOST", false)); + indexByHost.addActionListener(updateAction); + indexByType.setSelected(oldIndexByType = Cache.getDefault( + "WSMENU_BYTYPE", false)); + indexByType.addActionListener(updateAction); + displayWsWarning.setSelected(oldWsWarning = Cache.getDefault( + "SHOW_WSDISCOVERY_ERRORS", true)); } - private void updateList() { + + ActionListener updateAction = new ActionListener() + { + + @Override + public void actionPerformed(ActionEvent e) + { + update++; + } + + }; + + private void updateList() + { wsList.setListData(wsUrls); } - private void updateServiceList() { + + private void updateRsbsList() + { + sbrsList.setListData(rsbsUrls); + } + + private void updateServiceList() + { jalview.ws.jws2.Jws2Discoverer.setServiceUrls(wsUrls); } - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event.ActionEvent) + + private void updateRsbsServiceList() + { + jalview.ws.rest.RestClient.setRsbsServices(rsbsUrls); + } + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GWsPreferences#deleteWsUrl_actionPerformed(java.awt.event + * .ActionEvent) */ @Override protected void deleteWsUrl_actionPerformed(ActionEvent e) { int sel = wsList.getSelectedIndex(); - if (sel>-1) + if (sel > -1) { wsUrls.removeElementAt(sel); + update++; updateList(); } } - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event.ActionEvent) + /* + * (non-Javadoc) + * + * @see jalview.jbgui.GWsPreferences#editWsUrl_actionPerformed(java.awt.event. + * ActionEvent) */ @Override protected void editWsUrl_actionPerformed(ActionEvent e) { int sel = wsList.getSelectedIndex(); - if (sel>-1) + if (sel > -1) { - String url=editUrl(wsUrls.elementAt(sel),"Edit JWS2 URL"); - if (url!=null) + String url = editUrl(wsUrls.elementAt(sel), "Edit JABAWS URL"); + if (url != null) { int present = wsUrls.indexOf(url); - if (present==-1) + if (present == -1) { - wsUrls.setElementAt(url,sel); + update++; + wsUrls.setElementAt(url, sel); updateList(); - } else { - if (present!=sel) + } + else + { + if (present != sel) { wsUrls.removeElementAt(sel); updateList(); @@ -93,60 +173,138 @@ public class WsPreferences extends GWsPreferences } } } + @Override + protected void newSbrsUrl_actionPerformed(ActionEvent e) + { + RestServiceEditorPane rse = new RestServiceEditorPane(); + rse.showDialog("Add a new Simple Bioinformatics Rest Service"); + String rservice = rse.getEditedRestService(); + if (rservice!=null && !rsbsUrls.contains(rservice)) + { + rsbsUrls.add(rservice); + update++; + updateRsbsList(); + } + } + @Override + protected void editSbrsUrl_actionPerformed(ActionEvent e) + { + int sel = sbrsList.getSelectedIndex(); + if (sel > -1) + { + RestServiceEditorPane rse = new RestServiceEditorPane(new RestServiceDescription(rsbsUrls.elementAt(sel))); + rse.showDialog("Edit Simple Bioinformatics Rest Service entry"); + String rservice = rse.getEditedRestService(); + if (rservice!=null) + { + int present = rsbsUrls.indexOf(rservice); + if (present==-1) { + update++; + rsbsUrls.setElementAt(rservice,sel); + updateRsbsList(); + } else { + if (present!=sel) { + rsbsUrls.removeElementAt(sel); + update++; + updateRsbsList(); + } + } + } + } + } - void updateWsMenuConfig(boolean old) { - if (old) { - wsUrls = (oldUrls==null) ? null : new Vector(oldUrls); - } else { - + void updateWsMenuConfig(boolean old) + { + if (old) + { + if (oldUrls!=wsUrls || (wsUrls!=null && oldUrls!=null && !wsUrls.equals(oldUrls))) + { + update++; + } + wsUrls = (oldUrls == null) ? null : new Vector(oldUrls); + if (oldRsbsUrls!=rsbsUrls || (rsbsUrls!=null && oldRsbsUrls!=null && !oldRsbsUrls.equals(rsbsUrls))) + { + update++; + } + oldRsbsUrls = (oldRsbsUrls == null) ? null : new Vector(oldRsbsUrls); + } + else + { + } - Cache.setProperty("SHOW_ENFIN_SERVICES", Boolean.valueOf(old ? oldEnfin : enableEnfinServices.isSelected()).toString()); - Cache.setProperty("SHOW_JWS1_SERVICES", Boolean.valueOf(old ? oldJws1 : enableJws1Services.isSelected()).toString()); - Cache.setProperty("SHOW_JWS2_SERVICES", Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected()).toString()); - Cache.setProperty("WSMENU_BYHOST", Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected()).toString()); - Cache.setProperty("WSMENU_BYTYPE", Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected()).toString()); + Cache.setProperty( + "SHOW_ENFIN_SERVICES", + Boolean.valueOf( + old ? oldEnfin : enableEnfinServices.isSelected()) + .toString()); + Cache.setProperty( + "SHOW_JWS2_SERVICES", + Boolean.valueOf(old ? oldJws2 : enableJws2Services.isSelected()) + .toString()); + Cache.setProperty( + "WSMENU_BYHOST", + Boolean.valueOf(old ? oldIndexByHost : indexByHost.isSelected()) + .toString()); + Cache.setProperty( + "WSMENU_BYTYPE", + Boolean.valueOf(old ? oldIndexByType : indexByType.isSelected()) + .toString()); + + Cache.setProperty("SHOW_WSDISCOVERY_ERRORS", + Boolean.valueOf(old ? oldWsWarning : displayWsWarning.isSelected()).toString()); updateServiceList(); + updateRsbsServiceList(); } - - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event.ActionEvent) + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GWsPreferences#moveWsUrlDown_actionPerformed(java.awt.event + * .ActionEvent) */ @Override protected void moveWsUrlDown_actionPerformed(ActionEvent e) { - int p=wsList.getSelectedIndex(); - if (p>-1 && p -1 && p < wsUrls.size() - 1) { - String t = wsUrls.get(p+1); - wsUrls.setElementAt(wsUrls.elementAt(p), p+1); + String t = wsUrls.get(p + 1); + wsUrls.setElementAt(wsUrls.elementAt(p), p + 1); wsUrls.setElementAt(t, p); updateList(); - wsList.setSelectedIndex(p+1); + wsList.setSelectedIndex(p + 1); + update++; } } - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event.ActionEvent) + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GWsPreferences#moveWsUrlUp_actionPerformed(java.awt.event + * .ActionEvent) */ @Override protected void moveWsUrlUp_actionPerformed(ActionEvent e) { - int p=wsList.getSelectedIndex(); - if (p>0) + int p = wsList.getSelectedIndex(); + if (p > 0) { - String t = wsUrls.get(p-1); - wsUrls.setElementAt(wsUrls.elementAt(p), p-1); + String t = wsUrls.get(p - 1); + wsUrls.setElementAt(wsUrls.elementAt(p), p - 1); wsUrls.setElementAt(t, p); updateList(); - wsList.setSelectedIndex(p-1); + wsList.setSelectedIndex(p - 1); + update++; } } private String editUrl(String initUrl, String title) { - String url=initUrl; - URL foo=null; - if (url==null) + String url = initUrl; + URL foo = null; + if (url == null) { url = ""; } @@ -156,138 +314,212 @@ public class WsPreferences extends GWsPreferences pane12.add(new JLabel("URL: "), BorderLayout.CENTER); pane12.add(urltf, BorderLayout.EAST); panel.add(pane12, BorderLayout.NORTH); - boolean valid=false; - int resp=JOptionPane.CANCEL_OPTION; - while (!valid && (resp=JOptionPane.showInternalConfirmDialog(Desktop.desktop, panel, title, JOptionPane.OK_CANCEL_OPTION))==JOptionPane.OK_OPTION) + boolean valid = false; + int resp = JOptionPane.CANCEL_OPTION; + while (!valid + && (resp = JOptionPane.showInternalConfirmDialog( + Desktop.desktop, panel, title, + JOptionPane.OK_CANCEL_OPTION)) == JOptionPane.OK_OPTION) { - try { - // TODO: do a better job of checking that the url is a valid discovery URL for web services. - foo = new URL(urltf.getText().trim()); + try + { + // TODO: do a better job of checking that the url is a valid discovery + // URL for web services. + String tx = urltf.getText().trim(); + while (tx.length()>0 && tx.lastIndexOf('/')==tx.length()-1) + { + tx = tx.substring(0, tx.length()-1); + } + foo = new URL(tx); valid = true; + urltf.setText(tx); } catch (Exception e) { valid = false; - JOptionPane.showInternalMessageDialog(Desktop.desktop, "Invalid URL !"); + JOptionPane.showInternalMessageDialog(Desktop.desktop, + "Invalid URL !"); } } - if (valid && resp==JOptionPane.OK_OPTION) + if (valid && resp == JOptionPane.OK_OPTION) { - int validate = JOptionPane.showInternalConfirmDialog(Desktop.desktop, "Validate JabaWS Server ?\n(Look in console output for results)", "Test Server?", JOptionPane.YES_NO_OPTION); + int validate = JOptionPane + .showInternalConfirmDialog( + Desktop.desktop, + "Validate JabaWS Server ?\n(Look in console output for results)", + "Test Server?", JOptionPane.YES_NO_OPTION); if (validate == JOptionPane.OK_OPTION) { - if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo)) + if (jalview.ws.jws2.Jws2Discoverer.testServiceUrl(foo)) { return foo.toString(); - } else { - JOptionPane.showInternalMessageDialog(Desktop.desktop, "Service did not pass validation.\nCheck the Jalview Console for more details."); } - } else { + else + { + JOptionPane + .showInternalMessageDialog( + Desktop.desktop, + "Service did not pass validation.\nCheck the Jalview Console for more details."); + } + } + else + { // just return the URL anyway return foo.toString(); } } - return initUrl; + return initUrl; } - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event.ActionEvent) + + /* + * (non-Javadoc) + * + * @see jalview.jbgui.GWsPreferences#newWsUrl_actionPerformed(java.awt.event. + * ActionEvent) */ @Override protected void newWsUrl_actionPerformed(ActionEvent e) { - String url=editUrl(null,"Add new JWS2 URL"); - if (url!=null) + String url = editUrl(null, "Add new JABAWS URL"); + if (url != null) { if (!wsUrls.contains(url)) { int selind = wsList.getSelectedIndex(); - if (selind>-1) + if (selind > -1) { wsUrls.insertElementAt(url, selind); - } else { + } + else + { wsUrls.addElement(url); } + update++; updateList(); } } } - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event.ActionEvent) + /* + * (non-Javadoc) + * + * @see jalview.jbgui.GWsPreferences#refreshWs_actionPerformed(java.awt.event. + * ActionEvent) */ @Override protected void refreshWs_actionPerformed(ActionEvent e) { - new Thread(new Runnable() { + new Thread(new Runnable() + { public void run() { + // force a refresh. + lastrefresh = update - 1; updateWsMenuConfig(false); refreshWsMenu(true); - } + } }).start(); - + } + /** + * Refresh the web services menus - but only if there has been a change in the + * configuration (indicated by update!=lastrefresh) * - * @param showProgress show progress in dialog or on desktop + * @param showProgress + * show progress in dialog or on desktop */ protected void refreshWsMenu(boolean showProgress) { if (showProgress) { - new Thread(new Runnable() { + new Thread(new Runnable() + { public void run() { progressBar.setVisible(true); validate(); progressBar.setIndeterminate(true); - Desktop.instance.startServiceDiscovery(true); // wait around for all threads to complete + if (lastrefresh != update) + { + lastrefresh = update; + Desktop.instance.startServiceDiscovery(true); // wait around for all + // threads to complete + } progressBar.setIndeterminate(false); progressBar.setVisible(false); validate(); - } + } }).start(); - - } else { - new Thread(new Runnable() { + + } + else + { + new Thread(new Runnable() + { public void run() { long ct = System.currentTimeMillis(); - Desktop.instance.setProgressBar("Refreshing Web Service Menus", ct); - Desktop.instance.startServiceDiscovery(true); - Desktop.instance.setProgressBar("Refreshing Web Service Menus", ct); + Desktop.instance.setProgressBar("Refreshing Web Service Menus", + ct); + if (lastrefresh != update) + { + lastrefresh = update; + Desktop.instance.startServiceDiscovery(true); + } + Desktop.instance.setProgressBar(null, ct); } - + }).start(); } } - /* (non-Javadoc) - * @see jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent) + /** + * state counters for ensuring that updates only happen if config has changed. + */ + private long update = 0, lastrefresh = 0; + + /* + * (non-Javadoc) + * + * @see + * jalview.jbgui.GWsPreferences#resetWs_actionPerformed(java.awt.event.ActionEvent + * ) */ @Override protected void resetWs_actionPerformed(ActionEvent e) { jalview.ws.jws2.Jws2Discoverer.setServiceUrls(null); - wsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); + Vector nwsUrls = jalview.ws.jws2.Jws2Discoverer.getServiceUrls(); + if (!wsUrls.equals(nwsUrls)) { + update++; + } + wsUrls=nwsUrls; updateList(); + + updateAndRefreshWsMenuConfig(true); } - protected void ok_ActionPerformed(ActionEvent e) { + + protected void ok_ActionPerformed(ActionEvent e) + { // update everything regardless. updateAndRefreshWsMenuConfig(false); } - public void updateAndRefreshWsMenuConfig(final boolean showProgressInDialog) + + public void updateAndRefreshWsMenuConfig( + final boolean showProgressInDialog) { - new Thread(new Runnable() { + new Thread(new Runnable() + { public void run() { updateWsMenuConfig(false); refreshWsMenu(showProgressInDialog); - } + } }).start(); - + } }