X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Frest%2FRestClient.java;h=a5b68d70f7b246be1a50bbf9e1e19a8a45a551ee;hb=6200addf078b7f7ace90597dc056dafc7fc602c1;hp=061a3fa367704e2406f10a8434f9ea97ad40dee5;hpb=9ca446dd833ad5c2990c459593ed05e5bc9c33fc;p=jalview.git diff --git a/src/jalview/ws/rest/RestClient.java b/src/jalview/ws/rest/RestClient.java index 061a3fa..a5b68d7 100644 --- a/src/jalview/ws/rest/RestClient.java +++ b/src/jalview/ws/rest/RestClient.java @@ -1,58 +1,61 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8) - * Copyright (C) 2012 J Procter, AM Waterhouse, LM Lui, J Engelhardt, G Barton, M Clamp, S Searle + * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) + * Copyright (C) $$Year-Rel$$ The Jalview Authors * * 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. + * 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 . + * You should have received a copy of the GNU General Public License + * along with Jalview. If not, see . + * The Jalview Authors are detailed in the 'AUTHORS' file. */ package jalview.ws.rest; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.Hashtable; -import java.util.Vector; - -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.event.MenuEvent; -import javax.swing.event.MenuListener; - import jalview.bin.Cache; +import jalview.bin.ApplicationSingletonProvider; +import jalview.bin.ApplicationSingletonProvider.ApplicationSingletonI; import jalview.datamodel.AlignmentView; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; import jalview.gui.Desktop; +import jalview.gui.JvOptionPane; import jalview.gui.WebserviceInfo; import jalview.io.packed.DataProvider.JvDataType; +import jalview.util.MessageManager; import jalview.ws.WSClient; import jalview.ws.WSClientI; import jalview.ws.WSMenuEntryProviderI; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.util.Hashtable; +import java.util.Vector; + +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.event.MenuEvent; +import javax.swing.event.MenuListener; + /** * @author JimP * */ -public class RestClient extends WSClient implements WSClientI, - WSMenuEntryProviderI +public class RestClient extends WSClient + implements WSClientI, WSMenuEntryProviderI, ApplicationSingletonI { - RestServiceDescription service; + public static final String RSBS_SERVICES = "RSBS_SERVICES"; - public RestClient(RestServiceDescription rsd) - { - service = rsd; - } + RestServiceDescription service; /** * parent alignframe for this job @@ -64,6 +67,118 @@ public class RestClient extends WSClient implements WSClientI, */ AlignViewport av; + boolean headless = false; + + protected Vector services = null; + + private static RestClient getInstance() + { + return (RestClient) ApplicationSingletonProvider.getInstance(RestClient.class); + } + + public static RestClient makeShmmrRestClient() + { + String action = "Analysis", + description = "Sequence Harmony and Multi-Relief (Brandt et al. 2010)", + name = MessageManager.getString("label.multiharmony"); + Hashtable iparams = new Hashtable<>(); + // jalview.ws.rest.params.JobConstant toolp; + // toolp = new jalview.ws.rest.JobConstant("tool","jalview"); + // iparams.put(toolp.token, toolp); + // toolp = new jalview.ws.rest.params.JobConstant("mbjob[method]","shmr"); + // iparams.put(toolp.token, toolp); + // toolp = new + // jalview.ws.rest.params.JobConstant("mbjob[description]","step 1"); + // iparams.put(toolp.token, toolp); + // toolp = new jalview.ws.rest.params.JobConstant("start_search","1"); + // iparams.put(toolp.token, toolp); + // toolp = new jalview.ws.rest.params.JobConstant("blast","0"); + // iparams.put(toolp.token, toolp); + + jalview.ws.rest.params.Alignment aliinput = new jalview.ws.rest.params.Alignment(); + // SHMR server has a 65K limit for content pasted into the 'ali' parameter, + // so we always upload our files. + aliinput.token = "ali_file"; + aliinput.writeAsFile = true; + iparams.put(aliinput.token, aliinput); + jalview.ws.rest.params.SeqGroupIndexVector sgroups = new jalview.ws.rest.params.SeqGroupIndexVector(); + sgroups.setMinsize(2); + sgroups.min = 2;// need at least two group defined to make a partition + iparams.put("groups", sgroups); + sgroups.token = "groups"; + sgroups.sep = " "; + RestServiceDescription shmrService = new RestServiceDescription(action, + description, name, + "http://zeus.few.vu.nl/programs/shmrwww/index.php?tool=jalview", // ?tool=jalview&mbjob[method]=shmr&mbjob[description]=step1", + "?tool=jalview", iparams, true, false, '-'); + // a priori knowledge of the data returned from the service + shmrService.addResultDatatype(JvDataType.ANNOTATION); + return new RestClient(shmrService); + } + + public static RestClient[] getRestClients() + { + RestClient c = getInstance(); + + if (c.services == null) + { + c.services = new Vector<>(); + try + { + for (RestServiceDescription descr : RestServiceDescription + .parseDescriptions( + jalview.bin.Cache.getDefault(RSBS_SERVICES, + makeShmmrRestClient().service.toString()))) + { + c.services.add(descr.toString()); + } + } catch (Exception ex) + { + System.err.println( + "Serious - RSBS descriptions in user preferences are corrupt!"); + ex.printStackTrace(); + } + + } + RestClient[] lst = new RestClient[c.services.size()]; + int i = 0; + for (String svc : c.services) + { + lst[i++] = new RestClient(new RestServiceDescription(svc)); + } + return lst; + } + + public static Vector getRsbsDescriptions() + { + Vector rsbsDescrs = new Vector<>(); + for (RestClient rsbs : getRestClients()) + { + rsbsDescrs.add(rsbs.getRestDescription().toString()); + } + return rsbsDescrs; + } + + public static void setRsbsServices(Vector rsbsUrls) + { + if (rsbsUrls != null) + { + // TODO: consider validating services ? + RestClient c = getInstance(); + c.services = new Vector<>(rsbsUrls); + StringBuffer sprop = new StringBuffer(); + for (String s : c.services) + { + sprop.append(s); + } + Cache.setProperty(RSBS_SERVICES, sprop.toString()); + } + else + { + Cache.removeProperty(RSBS_SERVICES); + } + } + /** * get the alignFrame for the associated input data if it exists. * @@ -74,12 +189,23 @@ public class RestClient extends WSClient implements WSClientI, return jalview.gui.Desktop.getAlignFrameFor(av); } + private RestClient() + { + + } + + public RestClient(RestServiceDescription rsd) + { + service = rsd; + } + public RestClient(RestServiceDescription service2, AlignFrame alignFrame) { this(service2, alignFrame, false); } - boolean headless = false; - public RestClient(RestServiceDescription service2, AlignFrame alignFrame, boolean nogui) + + public RestClient(RestServiceDescription service2, AlignFrame alignFrame, + boolean nogui) { service = service2; af = alignFrame; @@ -90,8 +216,9 @@ public class RestClient extends WSClient implements WSClientI, public void setWebserviceInfo(boolean headless) { - WebServiceJobTitle = service.details.Action + " using " - + service.details.Name; + WebServiceJobTitle = MessageManager + .formatMessage("label.webservice_job_title", new String[] + { service.details.Action, service.details.Name }); WebServiceName = service.details.Name; WebServiceReference = "No reference - go to url for more info"; if (service.details.description != null) @@ -100,8 +227,8 @@ public class RestClient extends WSClient implements WSClientI, } if (!headless) { - wsInfo = new WebserviceInfo(WebServiceJobTitle, WebServiceName + "\n" - + WebServiceReference); + wsInfo = new WebserviceInfo(WebServiceJobTitle, + WebServiceName + "\n" + WebServiceReference, true); wsInfo.setRenderAsHtml(true); } @@ -134,8 +261,9 @@ public class RestClient extends WSClient implements WSClientI, final AlignFrame alignFrame) { JMenuItem submit = new JMenuItem(service.details.Name); - submit.setToolTipText(service.details.Action + " using " - + service.details.Name); + submit.setToolTipText(MessageManager + .formatMessage("label.rest_client_submit", new String[] + { service.details.Action, service.details.Name })); submit.addActionListener(new ActionListener() { @@ -250,40 +378,58 @@ public class RestClient extends WSClient implements WSClientI, { // intersect groups with selected region _input = new AlignmentView(av.getAlignment(), - av.getColumnSelection(), av.getSelectionGroup(), - av.hasHiddenColumns(), true, true); - viewTitle = "selected " - + (av.hasHiddenColumns() ? "visible" : "") - + " region of " + af.getTitle(); + av.getAlignment().getHiddenColumns(), + av.getSelectionGroup(), av.hasHiddenColumns(), true, + true); + viewTitle = MessageManager.formatMessage( + "label.select_visible_region_of", new String[] + { (av.hasHiddenColumns() + ? MessageManager.getString("label.visible") + : ""), + af.getTitle() }); } else { // use selected region to partition alignment _input = new AlignmentView(av.getAlignment(), - av.getColumnSelection(), av.getSelectionGroup(), - av.hasHiddenColumns(), false, true); + av.getAlignment().getHiddenColumns(), + av.getSelectionGroup(), av.hasHiddenColumns(), false, + true); } - viewTitle = "select and unselected " - + (av.hasHiddenColumns() ? "visible" : "") - + " regions from " + af.getTitle(); + viewTitle = MessageManager.formatMessage( + "label.select_unselect_visible_regions_from", new String[] + { (av.hasHiddenColumns() + ? MessageManager.getString("label.visible") + : ""), + af.getTitle() }); } else { // just take selected region intersection _input = new AlignmentView(av.getAlignment(), - av.getColumnSelection(), av.getSelectionGroup(), - av.hasHiddenColumns(), true, true); - viewTitle = "selected " + (av.hasHiddenColumns() ? "visible" : "") - + " region of " + af.getTitle(); + av.getAlignment().getHiddenColumns(), + av.getSelectionGroup(), av.hasHiddenColumns(), true, true); + viewTitle = MessageManager.formatMessage( + "label.select_visible_region_of", new String[] + { (av.hasHiddenColumns() + ? MessageManager.getString("label.visible") + : ""), + af.getTitle() }); } } else { // standard alignment view without selection present _input = new AlignmentView(av.getAlignment(), - av.getColumnSelection(), null, av.hasHiddenColumns(), false, - true); - viewTitle = "" + (av.hasHiddenColumns() ? "visible region of " : "") + av.getAlignment().getHiddenColumns(), null, + av.hasHiddenColumns(), false, true); + viewTitle = "" + + (av.hasHiddenColumns() + ? (new StringBuffer(" ") + .append(MessageManager + .getString("label.visible_region_of")) + .toString()) + : "") + af.getTitle(); } @@ -292,7 +438,8 @@ public class RestClient extends WSClient implements WSClientI, if (jobsthread.isValid()) { setWebserviceInfo(headless); - if (!headless) { + if (!headless) + { wsInfo.setthisService(this); jobsthread.setWebServiceInfo(wsInfo); } @@ -301,56 +448,16 @@ public class RestClient extends WSClient implements WSClientI, else { // TODO: try to tell the user why the job couldn't be started. - JOptionPane - .showMessageDialog( - Desktop.desktop, - (jobsthread.hasWarnings() ? jobsthread.getWarnings() - : "The Job couldn't be started. Please check your input, and the Jalview console for any warning messages."), - "Unable to start web service analysis", - JOptionPane.WARNING_MESSAGE); + JvOptionPane.showMessageDialog(Desktop.getDesktopPane(), + (jobsthread.hasWarnings() ? jobsthread.getWarnings() + : MessageManager.getString( + "label.job_couldnt_be_started_check_input")), + MessageManager + .getString("label.unable_start_web_service_analysis"), + JvOptionPane.WARNING_MESSAGE); } } - public static RestClient makeShmmrRestClient() - { - String action = "Analysis", description = "Sequence Harmony and Multi-Relief (Brandt et al. 2010)", name = "Multi-Harmony"; - Hashtable iparams = new Hashtable(); - jalview.ws.rest.params.JobConstant toolp; - // toolp = new jalview.ws.rest.JobConstant("tool","jalview"); - // iparams.put(toolp.token, toolp); - // toolp = new jalview.ws.rest.params.JobConstant("mbjob[method]","shmr"); - // iparams.put(toolp.token, toolp); - // toolp = new - // jalview.ws.rest.params.JobConstant("mbjob[description]","step 1"); - // iparams.put(toolp.token, toolp); - // toolp = new jalview.ws.rest.params.JobConstant("start_search","1"); - // iparams.put(toolp.token, toolp); - // toolp = new jalview.ws.rest.params.JobConstant("blast","0"); - // iparams.put(toolp.token, toolp); - - jalview.ws.rest.params.Alignment aliinput = new jalview.ws.rest.params.Alignment(); - // SHMR server has a 65K limit for content pasted into the 'ali' parameter, - // so we always upload our files. - aliinput.token = "ali_file"; - aliinput.writeAsFile = true; - iparams.put(aliinput.token, aliinput); - jalview.ws.rest.params.SeqGroupIndexVector sgroups = new jalview.ws.rest.params.SeqGroupIndexVector(); - sgroups.setMinsize(2); - sgroups.min = 2;// need at least two group defined to make a partition - iparams.put("groups", sgroups); - sgroups.token = "groups"; - sgroups.sep = " "; - RestServiceDescription shmrService = new RestServiceDescription( - action, - description, - name, - "http://zeus.few.vu.nl/programs/shmrwww/index.php?tool=jalview",// ?tool=jalview&mbjob[method]=shmr&mbjob[description]=step1", - "?tool=jalview", iparams, true, false, '-'); - // a priori knowledge of the data returned from the service - shmrService.addResultDatatype(JvDataType.ANNOTATION); - return new RestClient(shmrService); - } - public AlignmentPanel recoverAlignPanelForView() { AlignmentPanel[] aps = Desktop @@ -371,68 +478,6 @@ public class RestClient extends WSClient implements WSClientI, return true; } - protected static Vector services = null; - - public static final String RSBS_SERVICES = "RSBS_SERVICES"; - - public static RestClient[] getRestClients() - { - if (services == null) - { - services = new Vector(); - try - { - for (RestServiceDescription descr : RestServiceDescription - .parseDescriptions(jalview.bin.Cache.getDefault( - RSBS_SERVICES, - makeShmmrRestClient().service.toString()))) - { - services.add(descr.toString()); - } - } catch (Exception ex) - { - System.err - .println("Serious - RSBS descriptions in user preferences are corrupt!"); - ex.printStackTrace(); - } - - } - RestClient[] lst = new RestClient[services.size()]; - int i = 0; - for (String svc : services) - { - lst[i++] = new RestClient(new RestServiceDescription(svc)); - } - return lst; - } - - public static void main(String args[]) - { - try - { - RestClient[] clients = getRestClients(); - System.out.println("Got " + clients.length + " clients."); - int i = 0; - Vector urls = new Vector(); - for (RestClient cl : clients) - { - System.out.println("" + (++i) + ": " + cl.service.toString()); - urls.add(cl.service.toString()); - } - setRsbsServices(urls); - if (clients.length != getRestClients().length) - { - System.err - .println("Failed. Differing numbers of clients when stringified and parsed again."); - } - - } catch (Throwable x) - { - System.err.println("Failed. Unexpected exception."); - x.printStackTrace(); - } - } - public String getAction() { return service.details.Action; @@ -443,33 +488,4 @@ public class RestClient extends WSClient implements WSClientI, return service; } - public static Vector getRsbsDescriptions() - { - Vector rsbsDescrs = new Vector(); - for (RestClient rsbs : getRestClients()) - { - rsbsDescrs.add(rsbs.getRestDescription().toString()); - } - return rsbsDescrs; - } - - public static void setRsbsServices(Vector rsbsUrls) - { - if (rsbsUrls != null) - { - // TODO: consider validating services ? - services = new Vector(rsbsUrls); - StringBuffer sprop = new StringBuffer(); - for (String s : services) - { - sprop.append(s); - } - Cache.setProperty(RSBS_SERVICES, sprop.toString()); - } - else - { - Cache.removeProperty(RSBS_SERVICES); - } - } - }