X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fws%2FEnfinEnvision2OneWay.java;h=f40831ca2041c7ac2f9ac8f33916fc8365b05a04;hb=153dd62dc91da13ae732600e6ea55ddbe15eab39;hp=53d5b4aaec081ad411fa5e7e31f3873b92a39175;hpb=d423f22792e47dbc800ae220a58677f988971d06;p=jalview.git diff --git a/src/jalview/ws/EnfinEnvision2OneWay.java b/src/jalview/ws/EnfinEnvision2OneWay.java index 53d5b4a..f40831c 100644 --- a/src/jalview/ws/EnfinEnvision2OneWay.java +++ b/src/jalview/ws/EnfinEnvision2OneWay.java @@ -1,5 +1,5 @@ /* - * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5) + * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6) * Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle * * This file is part of Jalview. @@ -23,7 +23,9 @@ import jalview.datamodel.SequenceGroup; import jalview.datamodel.SequenceI; import jalview.gui.AlignFrame; import jalview.gui.Desktop; +import jalview.gui.JvSwingUtils; import jalview.util.GroupUrlLink; +import jalview.util.GroupUrlLink.UrlStringTooLongException; import java.awt.Component; import java.awt.Cursor; @@ -35,6 +37,7 @@ import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.util.Hashtable; +import java.util.Map; import java.util.Vector; import javax.swing.JMenu; @@ -281,7 +284,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements * Object array returned from the makeUrlStubs function. */ private void addshowLink(JMenu linkMenu, String label, String descr, - final GroupUrlLink urlgenerator, final Object[] urlstub) + String dbname, final GroupUrlLink urlgenerator, final Object[] urlstub) { Component[] jmi = linkMenu.getMenuComponents(); for (int i = 0; i < jmi.length; i++) @@ -293,10 +296,20 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements return; } } + boolean seqsorids = (urlgenerator.getGroupURLType() & urlgenerator.SEQUENCEIDS) == 0; + int i = urlgenerator.getNumberInvolved(urlstub); JMenuItem item = new JMenuItem(label); - item.setToolTipText("Submit (" - + urlgenerator.getNumberInvolved(urlstub) - + " seqs) to workflow: " + descr); + // + if (dbname==null || dbname.trim().length()==0) + { + dbname = ""; + } + item.setToolTipText("" + + JvSwingUtils.wrapTooltip("Submit " + i + " " + + dbname +" " + + (seqsorids ? "sequence" : "sequence id") + (i > 1 ? "s" : "") + + + " to
" + descr) + ""); item.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(ActionEvent e) @@ -306,7 +319,12 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements public void run() { - showLink(urlgenerator.constructFrom(urlstub)); + try { + showLink(urlgenerator.constructFrom(urlstub)); + } catch (UrlStringTooLongException ex) + { + Cache.log.warn("Not showing link: URL is too long!", ex); + } } }).start(); @@ -348,6 +366,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements private void buildGroupLinkMenu(JMenu enfinServiceMenu, AlignFrame alignFrame) { + if (running || !started) + { + return; + } SequenceI[] seqs = alignFrame.getViewport().getSelectionAsNewSequence(); SequenceGroup sg = alignFrame.getViewport().getSelectionGroup(); if (sg == null) @@ -382,16 +404,13 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements */ private JMenu buildGroupURLMenu(SequenceI[] seqs, SequenceGroup sg) { - + if (groupURLdescr==null || groupURLLinks==null) + return null; // TODO: usability: thread off the generation of group url content so root // menu appears asap // sequence only URLs // ID/regex match URLs JMenu groupLinksMenu = new JMenu("Group Link"); - JMenu[] linkMenus = new JMenu[] - { null, new JMenu("IDS"), new JMenu("Sequences"), - new JMenu("IDS and Sequences") }; // three types of url that might be - // created. String[][] idandseqs = GroupUrlLink.formStrings(seqs); Hashtable commonDbrefs = new Hashtable(); for (int sq = 0; sq < seqs.length; sq++) @@ -453,12 +472,16 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements } } // now create group links for all distinct ID/sequence sets. - boolean addMenu = false; // indicates if there are any group links to give - // to user + Hashtable gurlMenus = new Hashtable(); + /** + * last number of sequences where URL generation failed + */ + int[] nsqtype = new int[] { 0,0,0,0,0,0,0,0,0,0}; for (int i = 0; i < groupURLLinks.size(); i++) { - String link = groupURLLinks.elementAt(i).toString(); - String descr = groupURLdescr.elementAt(i).toString(); + String link = (String) groupURLLinks.elementAt(i); + String descr = (String) groupURLdescr.elementAt(i); + // boolean specialCase = // additionalPar.elementAt(i).toString().equals(BACKGROUND); GroupUrlLink urlLink = null; @@ -478,6 +501,18 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements continue; } final String label = urlLink.getLabel(); + // create/recover the sub menus that might be populated for this link. + JMenu[] wflinkMenus = gurlMenus.get(label); + if (wflinkMenus == null) + { + // three types of url that might be + // created. + wflinkMenus = new JMenu[] + { null, new JMenu("IDS"), new JMenu("Sequences"), + new JMenu("IDS and Sequences") }; + gurlMenus.put(label, wflinkMenus); + } + boolean usingNames = false; // Now see which parts of the group apply for this URL String ltarget; @@ -492,6 +527,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements String[] allids = ((String[]) idset[1]); seqstr = new String[numinput]; ids = new String[numinput]; + if (nsqtype[urlLink.getGroupURLType()]>0 && numinput>=nsqtype[urlLink.getGroupURLType()]) + { + continue; + } for (int sq = 0, idcount = 0; sq < seqs.length; sq++) { if (allids[sq] != null) @@ -500,30 +539,48 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements seqstr[idcount++] = idandseqs[1][sq]; } } - addMenu = addMenu - | createAndAddLinks(linkMenus, false, urlLink, label, - ltarget, descr, ids, seqstr); + try {createAndAddLinks(wflinkMenus, false, urlLink, ltarget, null, + descr, ids, seqstr); + } catch (UrlStringTooLongException ex) + { + nsqtype[urlLink.getGroupURLType()] = numinput; + } } } // also do names only. seqstr = idandseqs[1]; ids = idandseqs[0]; - addMenu = addMenu - | createAndAddLinks(linkMenus, true, urlLink, label, "Names", - descr, ids, seqstr); + if (nsqtype[urlLink.getGroupURLType()]>0 && idandseqs[0].length>=nsqtype[urlLink.getGroupURLType()]) + { + continue; + } + + try {createAndAddLinks(wflinkMenus, true, urlLink, "Any", null, descr, + ids, seqstr); + }catch (UrlStringTooLongException ex) + { + nsqtype[urlLink.getGroupURLType()] = idandseqs[0].length; + } } - if (addMenu) + boolean anyadded = false; // indicates if there are any group links to give + // to user + for (Map.Entry menues : gurlMenus.entrySet()) { - groupLinksMenu = new JMenu("Group Links"); - for (int m = 0; m < linkMenus.length; m++) + JMenu grouplinkset = new JMenu(menues.getKey()); + JMenu[] wflinkMenus = menues.getValue(); + for (int m = 0; m < wflinkMenus.length; m++) { - if (linkMenus[m] != null - && linkMenus[m].getMenuComponentCount() > 0) + if (wflinkMenus[m] != null + && wflinkMenus[m].getMenuComponentCount() > 0) { - groupLinksMenu.add(linkMenus[m]); + anyadded = true; + grouplinkset.add(wflinkMenus[m]); } } - + groupLinksMenu.add(grouplinkset); + } + if (anyadded) + { return groupLinksMenu; } return null; @@ -531,10 +588,11 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements private boolean createAndAddLinks(JMenu[] linkMenus, boolean usingNames, GroupUrlLink urlLink, String label, String ltarget, String descr, - String[] ids, String[] seqstr) + String[] ids, String[] seqstr) throws UrlStringTooLongException { - Object[] urlset = urlLink.makeUrlStubs(ids, seqstr, "FromJalview" + Object[] urlset= urlLink.makeUrlStubs(ids, seqstr, "FromJalview" + System.currentTimeMillis(), false); + if (urlset != null) { int type = urlLink.getGroupURLType() & 3; @@ -542,15 +600,21 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements // +" "+((String[])urlset[3])[0]); // first two bits ofurlLink type bitfield are sequenceids and sequences // TODO: FUTURE: ensure the groupURL menu structure can be generalised - addshowLink(linkMenus[type], label - + " " - + (usingNames ? (((type & 1) == 1) ? "(Names)" : "") : ("(" - + ltarget + ")")), descr, urlLink, urlset); + addshowLink( + linkMenus[type], + label + + " " + + (ltarget == null ? (((type & 1) == 1 ? "ID" + : "Sequence") + (urlLink + .getNumberInvolved(urlset) > 1 ? "s" : "")) + : (usingNames ? (((type & 1) == 1) ? "(Names)" + : "") + : ("(" + ltarget + ")"))), descr, + usingNames ? null : label, urlLink, urlset); return true; } return false; } - // / end of stuff copied from popupmenu public void attachWSMenuEntry(final JMenu wsmenu, final AlignFrame alignFrame) @@ -577,8 +641,10 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements public void menuSelected(MenuEvent e) { - if (refresh) + if (refresh && !isRunning()) { + new Thread(new Runnable() { + public void run() { try { buildGroupLinkMenu(enfinServiceMenu, alignFrame); @@ -589,6 +655,7 @@ public class EnfinEnvision2OneWay extends DefaultHandler implements ex); enfinServiceMenu.setEnabled(false); } + }}).start(); refresh = false; } }