X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FPopupMenu.java;h=aa3cad49ba9e45d6976f869e4e11d6d399854603;hb=bb90751010ab798f54dabddb8cfb6f51e847072c;hp=e86b2c5c69e4b0ea838cfa9d1d043346f7441143;hpb=7f8ddabd82dcf91860e0a8dc972cfd1ab6c59fc5;p=jalview.git diff --git a/src/jalview/gui/PopupMenu.java b/src/jalview/gui/PopupMenu.java index e86b2c5..aa3cad4 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; @@ -48,7 +49,6 @@ import jalview.schemes.HydrophobicColourScheme; import jalview.schemes.NucleotideColourScheme; import jalview.schemes.PIDColourScheme; import jalview.schemes.PurinePyrimidineColourScheme; -import jalview.schemes.ResidueProperties; import jalview.schemes.StrandColourScheme; import jalview.schemes.TaylorColourScheme; import jalview.schemes.TurnColourScheme; @@ -63,6 +63,7 @@ import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.Hashtable; import java.util.LinkedHashMap; @@ -88,10 +89,6 @@ import javax.swing.JRadioButtonMenuItem; */ 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(); @@ -176,12 +173,6 @@ public class PopupMenu extends JPopupMenu JMenu pdbMenu = new JMenu(); - JMenuItem pdbFromFile = new JMenuItem(); - - JMenuItem enterPDB = new JMenuItem(); - - JMenuItem discoverPDB = new JMenuItem(); - JMenu outputMenu = new JMenu(); JMenu seqShowAnnotationsMenu = new JMenu(); @@ -222,7 +213,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); } @@ -235,7 +226,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 @@ -483,8 +474,6 @@ public class PopupMenu extends JPopupMenu if (sg != null && sg.getSize() > 0) { - groupName.setText(MessageManager.formatMessage("label.name_param", - new Object[] { sg.getName() })); groupName.setText(MessageManager .getString("label.edit_name_and_description_current_group")); @@ -614,126 +603,56 @@ 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++) - { - 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()) - { - jalview.bin.Cache.log.error(urlLink.getInvalidMessage()); - continue; - } - 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; - } + /** + * 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")); + Map linkset = new LinkedHashMap(); - if (dbr != null) - { - for (int r = 0; r < dbr.length; r++) - { - 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]); - } - } - } - } - } - if (id != null) - { - // create Bare ID link for this RUL - String[] urls = urlLink.makeUrls(id, 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]); - } - } - } - } - // Create urls from description but only for URL links which are regex - // links - if (descr != null && urlLink.getRegexReplace() != 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) - { - if (!linkset.contains(urls[u] + "|" + urls[u + 1])) - { - linkset.addElement(urls[u] + "|" + urls[u + 1]); - addshowLink(linkMenu, label, urls[u + 1]); - } - } - } - } - } - else - { - if (!linkset.contains(label + "|" + urlLink.getUrl_prefix())) - { - linkset.addElement(label + "|" + urlLink.getUrl_prefix()); - // Add a non-dynamic link - addshowLink(linkMenu, label, urlLink.getUrl_prefix()); - } - } - } - if (sequence != null) + for (String link : links) + { + UrlLink urlLink = null; + try { - sequenceMenu.add(linkMenu); + urlLink = new UrlLink(link); + } catch (Exception foo) + { + Cache.log.error("Exception for URLLink '" + link + "'", foo); + continue; } - else + + if (!urlLink.isValid()) { - add(linkMenu); + Cache.log.error(urlLink.getInvalidMessage()); + continue; } + + urlLink.createLinksFromSeq(seq, linkset); + } + + addshowLinks(linkMenu, linkset.values()); + + if (sequence != null) + { + sequenceMenu.add(linkMenu); + } + else + { + add(linkMenu); } } + + /** * Add annotation types to 'Show annotations' and/or 'Hide annotations' menus. * "All" is added first, followed by a separator. Then add any annotation @@ -755,7 +674,8 @@ public class PopupMenu extends JPopupMenu showMenu.removeAll(); hideMenu.removeAll(); - final List all = Arrays.asList(ALL_ANNOTATIONS); + final List all = Arrays.asList(new String[] { MessageManager + .getString("label.all") }); addAnnotationTypeToShowHide(showMenu, forSequences, "", all, true, true); addAnnotationTypeToShowHide(hideMenu, forSequences, "", all, true, false); @@ -861,7 +781,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 @@ -870,19 +790,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++) { @@ -902,7 +818,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]; @@ -927,30 +843,28 @@ 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 - + "'", foo); + 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) { @@ -1013,6 +927,15 @@ public class PopupMenu extends JPopupMenu } } + private void addshowLinks(JMenu linkMenu, Collection linkset) + { + for (String[] linkstrset : linkset) + { + // split linkstr into label and url + addshowLink(linkMenu, linkstrset[1], linkstrset[3]); + } + } + /** * add a show URL menu item to the given linkMenu * @@ -1068,7 +991,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) @@ -1082,7 +1005,7 @@ public class PopupMenu extends JPopupMenu try { showLink(urlgenerator.constructFrom(urlstub)); - } catch (UrlStringTooLongException e) + } catch (UrlStringTooLongException e2) { } } @@ -1102,7 +1025,6 @@ public class PopupMenu extends JPopupMenu */ private void jbInit() throws Exception { - groupMenu.setText(MessageManager.getString("label.group")); groupMenu.setText(MessageManager.getString("label.selection")); groupName.setText(MessageManager.getString("label.name")); groupName.addActionListener(new java.awt.event.ActionListener() @@ -1284,36 +1206,6 @@ public class PopupMenu extends JPopupMenu changeCase(e); } }); - pdbMenu.setText(MessageManager - .getString("label.associate_structure_with_sequence")); - pdbFromFile.setText(MessageManager.getString("label.from_file")); - pdbFromFile.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - pdbFromFile_actionPerformed(); - } - }); - - enterPDB.setText(MessageManager.getString("label.enter_pdb_id")); - enterPDB.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - enterPDB_actionPerformed(); - } - }); - discoverPDB.setText(MessageManager.getString("label.discover_pdb_ids")); - discoverPDB.addActionListener(new ActionListener() - { - @Override - public void actionPerformed(ActionEvent e) - { - discoverPDB_actionPerformed(); - } - }); outputMenu.setText(MessageManager.getString("label.out_to_textbox") + "..."); seqShowAnnotationsMenu.setText(MessageManager @@ -1483,13 +1375,10 @@ public class PopupMenu extends JPopupMenu editMenu.add(upperCase); editMenu.add(lowerCase); editMenu.add(toggle); - pdbMenu.add(pdbFromFile); // JBPNote: These shouldn't be added here - should appear in a generic // 'apply web service to this sequence menu' // pdbMenu.add(RNAFold); // pdbMenu.add(ContraFold); - pdbMenu.add(enterPDB); - pdbMenu.add(discoverPDB); jMenu1.add(groupName); jMenu1.add(colourMenu); jMenu1.add(showBoxes); @@ -2080,9 +1969,8 @@ public class PopupMenu extends JPopupMenu if (conservationMenuItem.isSelected()) { // JBPNote: Conservation name shouldn't be i18n translated - Conservation c = new Conservation("Group", - ResidueProperties.propHash, 3, sg.getSequences(ap.av - .getHiddenRepSequences()), sg.getStartRes(), + Conservation c = new Conservation("Group", 3, sg.getSequences(ap.av + .getHiddenRepSequences()), sg.getStartRes(), sg.getEndRes() + 1); c.calculate(); @@ -2307,28 +2195,7 @@ public class PopupMenu extends JPopupMenu void hideSequences(boolean representGroup) { - SequenceGroup sg = ap.av.getSelectionGroup(); - if (sg == null || sg.getSize() < 1) - { - ap.av.hideSequence(new SequenceI[] { sequence }); - return; - } - - ap.av.setSelectionGroup(null); - - if (representGroup) - { - ap.av.hideRepSequences(sequence, sg); - - return; - } - - int gsize = sg.getSize(); - SequenceI[] hseqs = sg.getSequences().toArray(new SequenceI[gsize]); - - ap.av.hideSequence(hseqs); - // refresh(); TODO: ? needed ? - ap.av.sendSelection(); + ap.av.hideSequences(sequence, representGroup); } public void copy_actionPerformed() @@ -2400,70 +2267,6 @@ public class PopupMenu extends JPopupMenu ap, true)); } - public void pdbFromFile_actionPerformed() - { - jalview.io.JalviewFileChooser chooser = new jalview.io.JalviewFileChooser( - jalview.bin.Cache.getProperty("LAST_DIRECTORY")); - chooser.setFileView(new jalview.io.JalviewFileView()); - chooser.setDialogTitle(MessageManager.formatMessage( - "label.select_pdb_file_for", - new Object[] { sequence.getDisplayId(false) })); - chooser.setToolTipText(MessageManager.formatMessage( - "label.load_pdb_file_associate_with_sequence", - new Object[] { sequence.getDisplayId(false) })); - - int value = chooser.showOpenDialog(null); - - if (value == jalview.io.JalviewFileChooser.APPROVE_OPTION) - { - String choice = chooser.getSelectedFile().getPath(); - jalview.bin.Cache.setProperty("LAST_DIRECTORY", choice); - new AssociatePdbFileWithSeq().associatePdbWithSeq(choice, - jalview.io.AppletFormatAdapter.FILE, sequence, true, - Desktop.instance); - } - - } - - public void enterPDB_actionPerformed() - { - String id = JOptionPane.showInternalInputDialog(Desktop.desktop, - MessageManager.getString("label.enter_pdb_id"), - MessageManager.getString("label.enter_pdb_id"), - JOptionPane.QUESTION_MESSAGE); - - if (id != null && id.length() > 0) - { - PDBEntry entry = new PDBEntry(); - entry.setId(id.toUpperCase()); - sequence.getDatasetSequence().addPDBId(entry); - } - } - - public void discoverPDB_actionPerformed() - { - - final SequenceI[] sequences = ((ap.av.getSelectionGroup() == null) ? new SequenceI[] - { sequence } - : ap.av.getSequenceSelection()); - Thread discpdb = new Thread(new Runnable() - { - @Override - public void run() - { - boolean isNuclueotide = ap.alignFrame.getViewport().getAlignment() - .isNucleotide(); - - new jalview.ws.DBRefFetcher(sequences, ap.alignFrame, null, - ap.alignFrame.featureSettings, isNuclueotide) - .fetchDBRefs(false); - - } - - }); - discpdb.start(); - } - public void sequenceFeature_actionPerformed() { SequenceGroup sg = ap.av.getSelectionGroup();