+ else if (sg.cs instanceof HydrophobicColourScheme)\r
+ {\r
+ hydrophobicityColour.setSelected(true);\r
+ }\r
+ else if (sg.cs instanceof HelixColourScheme)\r
+ {\r
+ helixColour.setSelected(true);\r
+ }\r
+ else if (sg.cs instanceof StrandColourScheme)\r
+ {\r
+ strandColour.setSelected(true);\r
+ }\r
+ else if (sg.cs instanceof TurnColourScheme)\r
+ {\r
+ turnColour.setSelected(true);\r
+ }\r
+ else if (sg.cs instanceof BuriedColourScheme)\r
+ {\r
+ buriedColour.setSelected(true);\r
+ }\r
+ else if (sg.cs instanceof ClustalxColourScheme)\r
+ {\r
+ clustalColour.setSelected(true);\r
+ }\r
+ else if (sg.cs instanceof PurinePyrimidineColourScheme)\r
+ {\r
+ purinePyrimidineColour.setSelected(true);\r
+ }\r
+ /*\r
+ * else if (sg.cs instanceof CovariationColourScheme) {\r
+ * covariationColour.setSelected(true); }\r
+ */\r
+ else\r
+ {\r
+ noColourmenuItem.setSelected(true);\r
+ }\r
+\r
+ if (sg.cs != null && sg.cs.conservationApplied())\r
+ {\r
+ conservationMenuItem.setSelected(true);\r
+ }\r
+ displayNonconserved.setSelected(sg.getShowNonconserved());\r
+ showText.setSelected(sg.getDisplayText());\r
+ showColourText.setSelected(sg.getColourText());\r
+ showBoxes.setSelected(sg.getDisplayBoxes());\r
+ // add any groupURLs to the groupURL submenu and make it visible\r
+ if (groupLinks != null && groupLinks.size() > 0)\r
+ {\r
+ buildGroupURLMenu(sg, groupLinks);\r
+ }\r
+ // Add a 'show all structures' for the current selection\r
+ Hashtable<String, PDBEntry> pdbe = new Hashtable<String, PDBEntry>();\r
+ SequenceI sqass = null;\r
+ for (SequenceI sq : ap.av.getSequenceSelection())\r
+ {\r
+ Vector<PDBEntry> pes = (Vector<PDBEntry>) sq.getDatasetSequence()\r
+ .getPDBId();\r
+ if (pes != null)\r
+ {\r
+ for (PDBEntry pe : pes)\r
+ {\r
+ pdbe.put(pe.getId(), pe);\r
+ if (sqass == null)\r
+ {\r
+ sqass = sq;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (pdbe.size() > 0)\r
+ {\r
+ final PDBEntry[] pe = pdbe.values().toArray(\r
+ new PDBEntry[pdbe.size()]);\r
+ final JMenuItem gpdbview;\r
+ if (pdbe.size() == 1)\r
+ {\r
+ structureMenu.add(gpdbview = new JMenuItem(MessageManager.formatMessage("label.view_structure_for", new String[]{sqass.getDisplayId(false)})));\r
+ }\r
+ else\r
+ {\r
+ structureMenu.add(gpdbview = new JMenuItem(MessageManager.formatMessage("label.view_all_structures", new String[]{new Integer(pdbe.size()).toString()})));\r
+ }\r
+ gpdbview.setToolTipText(MessageManager.getString("label.open_new_jmol_view_with_all_structures_associated_current_selection_superimpose_using_alignment"));\r
+ gpdbview.addActionListener(new ActionListener()\r
+ {\r
+\r
+ @Override\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ new AppJmol(ap, pe, ap.av.collateForPDB(pe));\r
+ }\r
+ });\r
+ }\r
+ }\r
+ else\r
+ {\r
+ groupMenu.setVisible(false);\r
+ editMenu.setVisible(false);\r
+ }\r
+\r
+ if (!isDefinedGroup)\r
+ {\r
+ createGroupMenuItem.setVisible(true);\r
+ unGroupMenuItem.setVisible(false);\r
+ jMenu1.setText(MessageManager.getString("action.edit_new_group"));\r
+ } else {\r
+ createGroupMenuItem.setVisible(false);\r
+ unGroupMenuItem.setVisible(true);\r
+ jMenu1.setText(MessageManager.getString("action.edit_group"));\r
+ }\r
+\r
+ if (seq == null)\r
+ {\r
+ sequenceMenu.setVisible(false);\r
+ structureMenu.setVisible(false);\r
+ }\r
+\r
+ if (links != null && links.size() > 0)\r
+ {\r
+\r
+ JMenu linkMenu = new JMenu(MessageManager.getString("action.link"));\r
+ Vector linkset = new Vector();\r
+ for (int i = 0; i < links.size(); i++)\r
+ {\r
+ String link = links.elementAt(i).toString();\r
+ UrlLink urlLink = null;\r
+ try\r
+ {\r
+ urlLink = new UrlLink(link);\r
+ } catch (Exception foo)\r
+ {\r
+ jalview.bin.Cache.log.error("Exception for URLLink '" + link\r
+ + "'", foo);\r
+ continue;\r
+ }\r
+ ;\r
+ if (!urlLink.isValid())\r
+ {\r
+ jalview.bin.Cache.log.error(urlLink.getInvalidMessage());\r
+ continue;\r
+ }\r
+ final String label = urlLink.getLabel();\r
+ if (seq != null && urlLink.isDynamic())\r
+ {\r
+\r
+ // collect matching db-refs\r
+ DBRefEntry[] dbr = jalview.util.DBRefUtils.selectRefs(\r
+ seq.getDBRef(), new String[]\r
+ { urlLink.getTarget() });\r
+ // collect id string too\r
+ String id = seq.getName();\r
+ String descr = seq.getDescription();\r
+ if (descr != null && descr.length() < 1)\r
+ {\r
+ descr = null;\r
+ }\r
+\r
+ if (dbr != null)\r
+ {\r
+ for (int r = 0; r < dbr.length; r++)\r
+ {\r
+ if (id != null && dbr[r].getAccessionId().equals(id))\r
+ {\r
+ // suppress duplicate link creation for the bare sequence ID\r
+ // string with this link\r
+ id = null;\r
+ }\r
+ // create Bare ID link for this RUL\r
+ String[] urls = urlLink.makeUrls(dbr[r].getAccessionId(),\r
+ true);\r
+ if (urls != null)\r
+ {\r
+ for (int u = 0; u < urls.length; u += 2)\r
+ {\r
+ if (!linkset.contains(urls[u] + "|" + urls[u + 1]))\r
+ {\r
+ linkset.addElement(urls[u] + "|" + urls[u + 1]);\r
+ addshowLink(linkMenu, label + "|" + urls[u],\r
+ urls[u + 1]);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ if (id != null)\r
+ {\r
+ // create Bare ID link for this RUL\r
+ String[] urls = urlLink.makeUrls(id, true);\r
+ if (urls != null)\r
+ {\r
+ for (int u = 0; u < urls.length; u += 2)\r
+ {\r
+ if (!linkset.contains(urls[u] + "|" + urls[u + 1]))\r
+ {\r
+ linkset.addElement(urls[u] + "|" + urls[u + 1]);\r
+ addshowLink(linkMenu, label, urls[u + 1]);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ // Create urls from description but only for URL links which are regex\r
+ // links\r
+ if (descr != null && urlLink.getRegexReplace() != null)\r
+ {\r
+ // create link for this URL from description where regex matches\r
+ String[] urls = urlLink.makeUrls(descr, true);\r
+ if (urls != null)\r
+ {\r
+ for (int u = 0; u < urls.length; u += 2)\r
+ {\r
+ if (!linkset.contains(urls[u] + "|" + urls[u + 1]))\r
+ {\r
+ linkset.addElement(urls[u] + "|" + urls[u + 1]);\r
+ addshowLink(linkMenu, label, urls[u + 1]);\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ if (!linkset.contains(label + "|" + urlLink.getUrl_prefix()))\r
+ {\r
+ linkset.addElement(label + "|" + urlLink.getUrl_prefix());\r
+ // Add a non-dynamic link\r
+ addshowLink(linkMenu, label, urlLink.getUrl_prefix());\r
+ }\r
+ }\r
+ }\r
+ if (sequence != null)\r
+ {\r
+ sequenceMenu.add(linkMenu);\r
+ }\r
+ else\r
+ {\r
+ add(linkMenu);\r
+ }\r
+ }\r
+ }\r
+\r
+ private void buildGroupURLMenu(SequenceGroup sg, Vector groupLinks)\r
+ {\r
+\r
+ // TODO: usability: thread off the generation of group url content so root\r
+ // menu appears asap\r
+ // sequence only URLs\r
+ // ID/regex match URLs\r
+ groupLinksMenu = new JMenu(MessageManager.getString("action.group_link"));\r
+ JMenu[] linkMenus = new JMenu[]\r
+ { null, new JMenu(MessageManager.getString("action.ids")), new JMenu(MessageManager.getString("action.sequences")),\r
+ new JMenu(MessageManager.getString("action.ids_sequences")) }; // three types of url that might be\r
+ // created.\r
+ SequenceI[] seqs = ap.av.getSelectionAsNewSequence();\r
+ String[][] idandseqs = GroupUrlLink.formStrings(seqs);\r
+ Hashtable commonDbrefs = new Hashtable();\r
+ for (int sq = 0; sq < seqs.length; sq++)\r
+ {\r
+\r
+ int start = seqs[sq].findPosition(sg.getStartRes()), end = seqs[sq]\r
+ .findPosition(sg.getEndRes());\r
+ // just collect ids from dataset sequence\r
+ // TODO: check if IDs collected from selecton group intersects with the\r
+ // current selection, too\r
+ SequenceI sqi = seqs[sq];\r
+ while (sqi.getDatasetSequence() != null)\r
+ {\r
+ sqi = sqi.getDatasetSequence();\r
+ }\r
+ DBRefEntry[] dbr = sqi.getDBRef();\r
+ if (dbr != null && dbr.length > 0)\r
+ {\r
+ for (int d = 0; d < dbr.length; d++)\r
+ {\r
+ String src = dbr[d].getSource(); // jalview.util.DBRefUtils.getCanonicalName(dbr[d].getSource()).toUpperCase();\r
+ Object[] sarray = (Object[]) commonDbrefs.get(src);\r
+ if (sarray == null)\r
+ {\r
+ sarray = new Object[2];\r
+ sarray[0] = new int[]\r
+ { 0 };\r
+ sarray[1] = new String[seqs.length];\r
+\r
+ commonDbrefs.put(src, sarray);\r
+ }\r
+\r
+ if (((String[]) sarray[1])[sq] == null)\r
+ {\r
+ if (!dbr[d].hasMap()\r
+ || (dbr[d].getMap().locateMappedRange(start, end) != null))\r
+ {\r
+ ((String[]) sarray[1])[sq] = dbr[d].getAccessionId();\r
+ ((int[]) sarray[0])[0]++;\r
+ }\r
+ }\r
+ }\r
+ }\r
+ }\r
+ // now create group links for all distinct ID/sequence sets.\r
+ boolean addMenu = false; // indicates if there are any group links to give\r
+ // to user\r
+ for (int i = 0; i < groupLinks.size(); i++)\r
+ {\r
+ String link = groupLinks.elementAt(i).toString();\r
+ GroupUrlLink urlLink = null;\r
+ try\r
+ {\r
+ urlLink = new GroupUrlLink(link);\r
+ } catch (Exception foo)\r
+ {\r
+ jalview.bin.Cache.log.error("Exception for GroupURLLink '" + link\r
+ + "'", foo);\r
+ continue;\r
+ }\r
+ ;\r
+ if (!urlLink.isValid())\r
+ {\r
+ jalview.bin.Cache.log.error(urlLink.getInvalidMessage());\r
+ continue;\r
+ }\r
+ final String label = urlLink.getLabel();\r
+ boolean usingNames = false;\r
+ // Now see which parts of the group apply for this URL\r
+ String ltarget = urlLink.getTarget(); // jalview.util.DBRefUtils.getCanonicalName(urlLink.getTarget());\r
+ Object[] idset = (Object[]) commonDbrefs.get(ltarget.toUpperCase());\r
+ String[] seqstr, ids; // input to makeUrl\r
+ if (idset != null)\r
+ {\r
+ int numinput = ((int[]) idset[0])[0];\r
+ String[] allids = ((String[]) idset[1]);\r
+ seqstr = new String[numinput];\r
+ ids = new String[numinput];\r
+ for (int sq = 0, idcount = 0; sq < seqs.length; sq++)\r
+ {\r
+ if (allids[sq] != null)\r
+ {\r
+ ids[idcount] = allids[sq];\r
+ seqstr[idcount++] = idandseqs[1][sq];\r
+ }\r
+ }\r
+ }\r
+ else\r
+ {\r
+ // just use the id/seq set\r
+ seqstr = idandseqs[1];\r
+ ids = idandseqs[0];\r
+ usingNames = true;\r
+ }\r
+ // and try and make the groupURL!\r
+\r
+ Object[] urlset = null;\r
+ try\r
+ {\r
+ urlset = urlLink.makeUrlStubs(ids, seqstr,\r
+ "FromJalview" + System.currentTimeMillis(), false);\r
+ } catch (UrlStringTooLongException e)\r
+ {\r
+ }\r
+ if (urlset != null)\r
+ {\r
+ int type = urlLink.getGroupURLType() & 3;\r
+ // System.out.println(urlLink.getGroupURLType()\r
+ // +" "+((String[])urlset[3])[0]);\r
+ // first two bits ofurlLink type bitfield are sequenceids and sequences\r
+ // TODO: FUTURE: ensure the groupURL menu structure can be generalised\r
+ addshowLink(linkMenus[type], label\r
+ + (((type & 1) == 1) ? ("("\r
+ + (usingNames ? "Names" : ltarget) + ")") : ""),\r
+ urlLink, urlset);\r
+ addMenu = true;\r
+ }\r
+ }\r
+ if (addMenu)\r
+ {\r
+ groupLinksMenu = new JMenu(MessageManager.getString("action.group_link"));\r
+ for (int m = 0; m < linkMenus.length; m++)\r
+ {\r
+ if (linkMenus[m] != null\r
+ && linkMenus[m].getMenuComponentCount() > 0)\r
+ {\r
+ groupLinksMenu.add(linkMenus[m]);\r
+ }\r
+ }\r
+\r
+ groupMenu.add(groupLinksMenu);\r
+ }\r
+ }\r
+\r
+ /**\r
+ * add a show URL menu item to the given linkMenu\r
+ * \r
+ * @param linkMenu\r
+ * @param label\r
+ * - menu label string\r
+ * @param url\r
+ * - url to open\r
+ */\r
+ private void addshowLink(JMenu linkMenu, String label, final String url)\r
+ {\r
+ JMenuItem item = new JMenuItem(label);\r
+ item.setToolTipText(MessageManager.formatMessage("label.open_url_param", new String[]{url}));\r
+ item.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ new Thread(new Runnable()\r
+ {\r
+\r
+ public void run()\r
+ {\r
+ showLink(url);\r
+ }\r
+\r
+ }).start();\r
+ }\r
+ });\r
+\r
+ linkMenu.add(item);\r
+ }\r
+\r
+ /**\r
+ * add a late bound groupURL item to the given linkMenu\r
+ * \r
+ * @param linkMenu\r
+ * @param label\r
+ * - menu label string\r
+ * @param urlgenerator\r
+ * GroupURLLink used to generate URL\r
+ * @param urlstub\r
+ * Object array returned from the makeUrlStubs function.\r
+ */\r
+ private void addshowLink(JMenu linkMenu, String label,\r
+ final GroupUrlLink urlgenerator, final Object[] urlstub)\r
+ {\r
+ JMenuItem item = new JMenuItem(label);\r
+ item.setToolTipText(MessageManager.formatMessage("label.open_url_seqs_param", new Object[]{urlgenerator.getUrl_prefix(),urlgenerator.getNumberInvolved(urlstub)}));\r
+ // TODO: put in info about what is being sent.\r
+ item.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ new Thread(new Runnable()\r
+ {\r
+\r
+ public void run()\r
+ {\r
+ try\r
+ {\r
+ showLink(urlgenerator.constructFrom(urlstub));\r
+ } catch (UrlStringTooLongException e)\r
+ {\r
+ }\r
+ }\r
+\r
+ }).start();\r
+ }\r
+ });\r
+\r
+ linkMenu.add(item);\r
+ }\r
+\r
+ /**\r
+ * DOCUMENT ME!\r
+ * \r
+ * @throws Exception\r
+ * DOCUMENT ME!\r
+ */\r
+ private void jbInit() throws Exception\r
+ {\r
+ groupMenu.setText(MessageManager.getString("label.group"));\r
+ groupMenu.setText(MessageManager.getString("label.selection"));\r
+ groupName.setText(MessageManager.getString("label.name"));\r
+ groupName.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ groupName_actionPerformed();\r
+ }\r
+ });\r
+ sequenceMenu.setText(MessageManager.getString("label.sequence"));\r
+ sequenceName.setText(MessageManager.getString("label.edit_name_description"));\r
+ sequenceName.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sequenceName_actionPerformed();\r
+ }\r
+ });\r
+ sequenceDetails.setText(MessageManager.getString("label.sequence_details") + "...");\r
+ sequenceDetails.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sequenceDetails_actionPerformed();\r
+ }\r
+ });\r
+ sequenceSelDetails.setText(MessageManager.getString("label.sequence_details") + "...");\r
+ sequenceSelDetails\r
+ .addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ sequenceSelectionDetails_actionPerformed();\r
+ }\r
+ });\r
+ PIDColour.setFocusPainted(false);\r
+ unGroupMenuItem.setText(MessageManager.getString("action.remove_group"));\r
+ unGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ unGroupMenuItem_actionPerformed();\r
+ }\r
+ });\r
+ createGroupMenuItem.setText(MessageManager.getString("action.create_group"));\r
+ createGroupMenuItem.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ createGroupMenuItem_actionPerformed();\r
+ }\r
+ });\r
+\r
+ outline.setText(MessageManager.getString("action.border_colour"));\r
+ outline.addActionListener(new java.awt.event.ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ outline_actionPerformed();\r
+ }\r
+ });\r
+ nucleotideMenuItem.setText(MessageManager.getString("label.nucleotide"));\r
+ nucleotideMenuItem.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ nucleotideMenuItem_actionPerformed();\r
+ }\r
+ });\r
+ colourMenu.setText(MessageManager.getString("label.group_colour"));\r
+ showBoxes.setText(MessageManager.getString("action.boxes"));\r
+ showBoxes.setState(true);\r
+ showBoxes.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ showBoxes_actionPerformed();\r
+ }\r
+ });\r
+ showText.setText(MessageManager.getString("action.text"));\r
+ showText.setState(true);\r
+ showText.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ showText_actionPerformed();\r
+ }\r
+ });\r
+ showColourText.setText(MessageManager.getString("label.colour_text"));\r
+ showColourText.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ showColourText_actionPerformed();\r
+ }\r
+ });\r
+ displayNonconserved.setText(MessageManager.getString("label.show_non_conversed"));\r
+ displayNonconserved.setState(true);\r
+ displayNonconserved.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ showNonconserved_actionPerformed();\r
+ }\r
+ });\r
+ editMenu.setText(MessageManager.getString("action.edit"));\r
+ cut.setText(MessageManager.getString("action.cut"));\r
+ cut.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ cut_actionPerformed();\r
+ }\r
+ });\r
+ upperCase.setText(MessageManager.getString("label.to_upper_case"));\r
+ upperCase.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ changeCase(e);\r
+ }\r
+ });\r
+ copy.setText(MessageManager.getString("action.copy"));\r
+ copy.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ copy_actionPerformed();\r
+ }\r
+ });\r
+ lowerCase.setText(MessageManager.getString("label.to_lower_case"));\r
+ lowerCase.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ changeCase(e);\r
+ }\r
+ });\r
+ toggle.setText(MessageManager.getString("label.toggle_case"));\r
+ toggle.addActionListener(new ActionListener()\r
+ {\r
+ public void actionPerformed(ActionEvent e)\r
+ {\r
+ changeCase(e);\r
+ }\r
+ });\r
+ pdbMenu.setText(MessageManager.getString("label.associate_structure_with_sequence"));\r
+ pdbFromFile.setText(MessageManager.getString("label.from_file"));\r