X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2Frest%2FRestClient.java;h=0d56e87d151f067eff977a92b0e77a0beea2e31c;hb=3af74d4f33154e113234aab32ef8d8c9b04892c8;hp=df9050b2488572ca4f591a6e315d8bd3f705a0c1;hpb=3b12b9d08114c5acef7f8186f0cf79d235fe3416;p=jalview.git diff --git a/src/jalview/ws/rest/RestClient.java b/src/jalview/ws/rest/RestClient.java index df9050b..0d56e87 100644 --- a/src/jalview/ws/rest/RestClient.java +++ b/src/jalview/ws/rest/RestClient.java @@ -5,6 +5,7 @@ package jalview.ws.rest; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.Collection; import java.util.Hashtable; import java.util.Vector; @@ -14,10 +15,8 @@ import javax.swing.JOptionPane; import javax.swing.event.MenuEvent; import javax.swing.event.MenuListener; -import com.sun.org.apache.bcel.internal.generic.ISHL; - +import jalview.bin.Cache; import jalview.datamodel.AlignmentView; -import jalview.datamodel.SequenceGroup; import jalview.gui.AlignFrame; import jalview.gui.AlignViewport; import jalview.gui.AlignmentPanel; @@ -200,10 +199,14 @@ public class RestClient extends WSClient implements WSClientI, */ jalview.io.packed.JalviewDataset jds; + /** + * informative name for results + */ + public String viewTitle; + protected void constructJob() { service.setInvolvesFlags(); - // record all aspects of alignment view so we can merge back or recreate // later undoredo = av.getUndoRedoHash(); @@ -214,7 +217,7 @@ public class RestClient extends WSClient implements WSClientI, */ boolean selExists = (av.getSelectionGroup() != null) && (av.getSelectionGroup().getSize() > 1); - // TODO: revise to full focus+context+dataset input data staging model + // TODO: JAL-715: refactor to alignViewport methods and revise to full focus+context+dataset input data staging model if (selExists) { if (service.partitiondata) @@ -228,6 +231,7 @@ public class RestClient extends WSClient implements WSClientI, av.hasHiddenColumns(), true, true); + viewTitle = "selected "+(av.hasHiddenColumns() ? "visible" : "") + " region of "+af.getTitle(); } else { @@ -239,7 +243,7 @@ public class RestClient extends WSClient implements WSClientI, false, true); } - // TODO: verify that some kind of partition can be constructed from input + viewTitle = "select and unselected "+(av.hasHiddenColumns() ? "visible" : "") + " regions from "+af.getTitle(); } else { @@ -250,6 +254,7 @@ public class RestClient extends WSClient implements WSClientI, av.hasHiddenColumns(), true, true); + viewTitle = "selected "+(av.hasHiddenColumns() ? "visible" : "") + " region of "+af.getTitle(); } } else { // standard alignment view without selection present @@ -259,6 +264,7 @@ public class RestClient extends WSClient implements WSClientI, av.hasHiddenColumns(), false, true); + viewTitle = ""+(av.hasHiddenColumns() ? "visible region of " : "") + af.getTitle(); } RestJobThread jobsthread = new RestJobThread(this); @@ -274,14 +280,14 @@ public class RestClient extends WSClient implements WSClientI, { // TODO: try to tell the user why the job couldn't be started. JOptionPane.showMessageDialog(Desktop.desktop, - "Unable to start web service analysis", - "Internal Jalview Error", JOptionPane.WARNING_MESSAGE); + (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); } } public static RestClient makeShmmrRestClient() { - String action = "Analyse", description = "Sequence Harmony and Multi-Relief (UNSTABLE!)", name = "Sequence Harmony"; + String action = "Analysis", description = "Sequence Harmony and Multi-Relief (UNSTABLE!)", name = "Sequence Harmony"; Hashtable iparams = new Hashtable(); jalview.ws.rest.params.JobConstant toolp; //toolp = new jalview.ws.rest.JobConstant("tool","jalview"); @@ -302,7 +308,8 @@ public class RestClient extends WSClient implements WSClientI, //aliinput.writeAsFile=true; iparams.put(aliinput.token, aliinput); jalview.ws.rest.params.SeqGroupIndexVector sgroups = new jalview.ws.rest.params.SeqGroupIndexVector(); - sgroups.minsize=2; + 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 = " "; @@ -336,4 +343,92 @@ 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; + } + + public RestServiceDescription getRestDescription() + { + 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); + } + } + }