X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPopupMenu.java;fp=src%2Fjalview%2Fgui%2FPopupMenu.java;h=1e0772a672b2a5d25115ffd170bd7fc98486b809;hb=99d5f1d805e530f23a53dad4484d44ecd0fbfdf3;hp=ab8c398e6250a8dcb80fb5589709c002c183d228;hpb=e6134bccddc2c7faad28fad1a4e77ccd0ceb3d84;p=jalview.git diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index ab8c398..1e0772a 100644 --- a/src/jalview/gui/PopupMenu.java +++ b/src/jalview/gui/PopupMenu.java @@ -24,6 +24,7 @@ import jalview.analysis.AAFrequency; import jalview.analysis.AlignmentAnnotationUtils; import jalview.analysis.AlignmentUtils; import jalview.analysis.Conservation; +import jalview.bin.Cache; import jalview.commands.ChangeCaseCommand; import jalview.commands.EditCommand; import jalview.commands.EditCommand.Action; @@ -54,6 +55,7 @@ import jalview.schemes.TaylorColourScheme; import jalview.schemes.TurnColourScheme; import jalview.schemes.UserColourScheme; import jalview.schemes.ZappoColourScheme; +import jalview.util.DBRefUtils; import jalview.util.GroupUrlLink; import jalview.util.GroupUrlLink.UrlStringTooLongException; import jalview.util.MessageManager; @@ -62,6 +64,7 @@ import jalview.util.UrlLink; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Hashtable; @@ -90,8 +93,6 @@ public class PopupMenu extends JPopupMenu { private static final String ALL_ANNOTATIONS = "All"; - private static final String COMMA = ","; - JMenu groupMenu = new JMenu(); JMenuItem groupName = new JMenuItem(); @@ -216,7 +217,7 @@ public class PopupMenu extends JPopupMenu * @param seq * DOCUMENT ME! */ - public PopupMenu(final AlignmentPanel ap, Sequence seq, Vector links) + public PopupMenu(final AlignmentPanel ap, Sequence seq, List links) { this(ap, seq, links, null); } @@ -229,7 +230,7 @@ public class PopupMenu extends JPopupMenu * @param groupLinks */ public PopupMenu(final AlignmentPanel ap, final SequenceI seq, - Vector links, Vector groupLinks) + List links, List groupLinks) { // ///////////////////////////////////////////////////////// // If this is activated from the sequence panel, the user may want to @@ -608,124 +609,130 @@ public class PopupMenu extends JPopupMenu if (links != null && links.size() > 0) { + addFeatureLinks(seq, links); + } + } - JMenu linkMenu = new JMenu(MessageManager.getString("action.link")); - Vector linkset = new Vector(); - for (int i = 0; i < links.size(); i++) + /** + * Adds a 'Link' menu item with a sub-menu item for each hyperlink provided. + * + * @param seq + * @param links + */ + void addFeatureLinks(final SequenceI seq, List links) + { + JMenu linkMenu = new JMenu(MessageManager.getString("action.link")); + List linkset = new ArrayList(); + for (String link : links) + { + UrlLink urlLink = null; + try { - String link = links.elementAt(i).toString(); - UrlLink urlLink = null; - try - { - urlLink = new UrlLink(link); - } catch (Exception foo) - { - jalview.bin.Cache.log.error("Exception for URLLink '" + link - + "'", foo); - continue; - } - ; - if (!urlLink.isValid()) + urlLink = new UrlLink(link); + } catch (Exception foo) + { + Cache.log.error("Exception for URLLink '" + link + "'", foo); + continue; + } + ; + if (!urlLink.isValid()) + { + Cache.log.error(urlLink.getInvalidMessage()); + continue; + } + final String label = urlLink.getLabel(); + if (seq != null && urlLink.isDynamic()) + { + + // collect matching db-refs + DBRefEntry[] dbr = DBRefUtils.selectRefs(seq.getDBRefs(), + new String[] { urlLink.getTarget() }); + // collect id string too + String id = seq.getName(); + String descr = seq.getDescription(); + if (descr != null && descr.length() < 1) { - jalview.bin.Cache.log.error(urlLink.getInvalidMessage()); - continue; + descr = null; } - final String label = urlLink.getLabel(); - if (seq != null && urlLink.isDynamic()) - { - // collect matching db-refs - DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs( - seq.getDBRefs(), new String[] { urlLink.getTarget() }); - // collect id string too - String id = seq.getName(); - String descr = seq.getDescription(); - if (descr != null && descr.length() < 1) - { - descr = null; - } - - if (dbr != null) + if (dbr != null) + { + for (int r = 0; r < dbr.length; r++) { - for (int r = 0; r < dbr.length; r++) + if (id != null && dbr[r].getAccessionId().equals(id)) { - if (id != null && dbr[r].getAccessionId().equals(id)) - { - // suppress duplicate link creation for the bare sequence ID - // string with this link - id = null; - } - // create Bare ID link for this RUL - String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(), - true); - if (urls != null) - { - for (int u = 0; u < urls.length; u += 2) - { - if (!linkset.contains(urls[u] + "|" + urls[u + 1])) - { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label + "|" + urls[u], - urls[u + 1]); - } - } - } + // suppress duplicate link creation for the bare sequence ID + // string with this link + id = null; } - } - if (id != null) - { - // create Bare ID link for this RUL - String[] urls = urlLink.makeUrls(id, true); + // create Bare ID link for this URL + String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(), true); if (urls != null) { for (int u = 0; u < urls.length; u += 2) { if (!linkset.contains(urls[u] + "|" + urls[u + 1])) { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label, urls[u + 1]); + linkset.add(urls[u] + "|" + urls[u + 1]); + addshowLink(linkMenu, label + "|" + urls[u], urls[u + 1]); } } } } - // Create urls from description but only for URL links which are regex - // links - if (descr != null && urlLink.getRegexReplace() != null) + } + if (id != null) + { + // create Bare ID link for this URL + String[] urls = urlLink.makeUrls(id, true); + if (urls != null) { - // create link for this URL from description where regex matches - String[] urls = urlLink.makeUrls(descr, true); - if (urls != null) + for (int u = 0; u < urls.length; u += 2) { - for (int u = 0; u < urls.length; u += 2) + if (!linkset.contains(urls[u] + "|" + urls[u + 1])) { - if (!linkset.contains(urls[u] + "|" + urls[u + 1])) - { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label, urls[u + 1]); - } + linkset.add(urls[u] + "|" + urls[u + 1]); + addshowLink(linkMenu, label, urls[u + 1]); } } } } - else + // Create urls from description but only for URL links which are regex + // links + if (descr != null && urlLink.getRegexReplace() != null) { - if (!linkset.contains(label + "|" + urlLink.getUrl_prefix())) + // create link for this URL from description where regex matches + String[] urls = urlLink.makeUrls(descr, true); + if (urls != null) { - linkset.addElement(label + "|" + urlLink.getUrl_prefix()); - // Add a non-dynamic link - addshowLink(linkMenu, label, urlLink.getUrl_prefix()); + for (int u = 0; u < urls.length; u += 2) + { + if (!linkset.contains(urls[u] + "|" + urls[u + 1])) + { + linkset.add(urls[u] + "|" + urls[u + 1]); + addshowLink(linkMenu, label, urls[u + 1]); + } + } } } } - if (sequence != null) - { - sequenceMenu.add(linkMenu); - } else { - add(linkMenu); + if (!linkset.contains(label + "|" + urlLink.getUrl_prefix())) + { + linkset.add(label + "|" + urlLink.getUrl_prefix()); + // Add a non-dynamic link + addshowLink(linkMenu, label, urlLink.getUrl_prefix()); + } } } + if (sequence != null) + { + sequenceMenu.add(linkMenu); + } + else + { + add(linkMenu); + } } /** @@ -855,7 +862,7 @@ public class PopupMenu extends JPopupMenu showOrHideMenu.add(item); } - private void buildGroupURLMenu(SequenceGroup sg, Vector groupLinks) + private void buildGroupURLMenu(SequenceGroup sg, List groupLinks) { // TODO: usability: thread off the generation of group url content so root @@ -864,19 +871,15 @@ public class PopupMenu extends JPopupMenu // ID/regex match URLs groupLinksMenu = new JMenu( MessageManager.getString("action.group_link")); + // three types of url that might be created. JMenu[] linkMenus = new JMenu[] { null, new JMenu(MessageManager.getString("action.ids")), new JMenu(MessageManager.getString("action.sequences")), - new JMenu(MessageManager.getString("action.ids_sequences")) }; // three - // types - // of url - // that - // might - // be - // created. + new JMenu(MessageManager.getString("action.ids_sequences")) }; + SequenceI[] seqs = ap.av.getSelectionAsNewSequence(); String[][] idandseqs = GroupUrlLink.formStrings(seqs); - Hashtable commonDbrefs = new Hashtable(); + Hashtable commonDbrefs = new Hashtable(); for (int sq = 0; sq < seqs.length; sq++) { @@ -896,7 +899,7 @@ public class PopupMenu extends JPopupMenu for (int d = 0; d < dbr.length; d++) { String src = dbr[d].getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase(); - Object[] sarray = (Object[]) commonDbrefs.get(src); + Object[] sarray = commonDbrefs.get(src); if (sarray == null) { sarray = new Object[2]; @@ -921,30 +924,29 @@ public class PopupMenu extends JPopupMenu // now create group links for all distinct ID/sequence sets. boolean addMenu = false; // indicates if there are any group links to give // to user - for (int i = 0; i < groupLinks.size(); i++) + for (String link : groupLinks) { - String link = groupLinks.elementAt(i).toString(); GroupUrlLink urlLink = null; try { urlLink = new GroupUrlLink(link); } catch (Exception foo) { - jalview.bin.Cache.log.error("Exception for GroupURLLink '" + link + Cache.log.error("Exception for GroupURLLink '" + link + "'", foo); continue; } ; if (!urlLink.isValid()) { - jalview.bin.Cache.log.error(urlLink.getInvalidMessage()); + Cache.log.error(urlLink.getInvalidMessage()); continue; } final String label = urlLink.getLabel(); boolean usingNames = false; // Now see which parts of the group apply for this URL String ltarget = urlLink.getTarget(); // jalview.util.DBRefUtils.getCanonicalName(urlLink.getTarget()); - Object[] idset = (Object[]) commonDbrefs.get(ltarget.toUpperCase()); + Object[] idset = commonDbrefs.get(ltarget.toUpperCase()); String[] seqstr, ids; // input to makeUrl if (idset != null) { @@ -1062,7 +1064,7 @@ public class PopupMenu extends JPopupMenu new Object[] { urlgenerator.getUrl_prefix(), urlgenerator.getNumberInvolved(urlstub) })); // TODO: put in info about what is being sent. - item.addActionListener(new java.awt.event.ActionListener() + item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) @@ -1076,7 +1078,7 @@ public class PopupMenu extends JPopupMenu try { showLink(urlgenerator.constructFrom(urlstub)); - } catch (UrlStringTooLongException e) + } catch (UrlStringTooLongException e2) { } }