import jalview.datamodel.AlignmentOrder;
import jalview.datamodel.AlignmentView;
import jalview.datamodel.ColumnSelection;
+import jalview.datamodel.DBRefEntry;
import jalview.datamodel.HiddenColumns;
import jalview.datamodel.HiddenSequences;
import jalview.datamodel.PDBEntry;
import jalview.datamodel.Sequence;
import jalview.datamodel.SequenceGroup;
import jalview.datamodel.SequenceI;
-import jalview.ext.forester.io.TreeParser;
+import jalview.ext.archaeopteryx.AptxInit;
import jalview.ext.forester.io.SupportedTreeFileFilter;
-import jalview.ext.treeviewer.ExternalTreeParserI;
+import jalview.ext.forester.io.TreeParser;
+import jalview.ext.treeviewer.ExternalTreeFrame;
+import jalview.ext.treeviewer.ExternalTreeViewerBindingI;
import jalview.gui.ColourMenuHelper.ColourChangeListener;
import jalview.gui.ViewSelectionMenu.ViewSetProvider;
import jalview.io.AlignmentProperties;
import jalview.schemes.ColourSchemes;
import jalview.schemes.ResidueColourScheme;
import jalview.schemes.TCoffeeColourScheme;
+import jalview.util.DBRefUtils;
import jalview.util.MessageManager;
import jalview.viewmodel.AlignmentViewport;
import jalview.viewmodel.ViewportRanges;
import java.awt.BorderLayout;
import java.awt.Component;
+import java.awt.Dimension;
+import java.awt.GridLayout;
import java.awt.Rectangle;
import java.awt.Toolkit;
import java.awt.datatransfer.Clipboard;
import java.beans.PropertyChangeEvent;
import java.io.File;
import java.io.FileWriter;
+import java.io.IOException;
import java.io.PrintWriter;
import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.StringTokenizer;
import java.util.Vector;
import javax.swing.JCheckBoxMenuItem;
+import javax.swing.JComboBox;
import javax.swing.JEditorPane;
import javax.swing.JInternalFrame;
+import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
+import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.SwingUtilities;
+import org.forester.archaeopteryx.webservices.PhylogeniesWebserviceClient;
+import org.forester.archaeopteryx.webservices.WebservicesManager;
+
/**
* DOCUMENT ME!
*
}
}
+
/**
* Maintain the Order by->Displayed Tree menu. Creates a new menu item for a
* TreePanel with an appropriate <code>jalview.analysis.AlignmentSorter</code>
List<Component> comps = PaintRefresher.components
.get(viewport.getSequenceSetId());
List<TreePanel> treePanels = new ArrayList<>();
+
+ Map<ExternalTreeFrame, ExternalTreeViewerBindingI> aptxFrames = AptxInit
+ .getAllAptxFrames();
+
for (Component comp : comps)
{
+ // old treepanels
if (comp instanceof TreePanel)
{
treePanels.add((TreePanel) comp);
}
+
}
- if (treePanels.size() < 1)
+ if (treePanels.isEmpty() && aptxFrames.isEmpty())
{
sortByTreeMenu.setVisible(false);
return;
sortByTreeMenu.setVisible(true);
+ for (Entry<ExternalTreeFrame, ExternalTreeViewerBindingI> aptxFrameWithBinding : aptxFrames
+ .entrySet())
+ {
+ ExternalTreeFrame aptxFrame = aptxFrameWithBinding.getKey();
+ ExternalTreeViewerBindingI binding = aptxFrameWithBinding.getValue();
+
+ // future support for multiple tabs
+ // for (org.forester.archaeopteryx.TreePanel aptxTree : aptxFrame
+ // .getMainPanel().getTreePanels())
+ {
+ final JMenuItem item = new JMenuItem(
+ aptxFrame.getTree().getTreeName());
+
+ item.addActionListener(new ActionListener()
+ {
+
+ @Override
+ public void actionPerformed(ActionEvent e)
+ {
+ binding.sortByTree_actionPerformed();
+ addHistoryItem(binding.sortAlignmentIn(alignPanel));
+ }
+
+ });
+ sortByTreeMenu.add(item);
+ }
+
+
+
+ }
+
+
+
+
+
+ // old treepanels
for (final TreePanel tp : treePanels)
{
final JMenuItem item = new JMenuItem(tp.getTitle());
@Override
public void actionPerformed(ActionEvent e)
{
- // adapt to Aptx
tp.sortByTree_actionPerformed();
addHistoryItem(tp.sortAlignmentIn(alignPanel));
@Override
protected void loadTreeMenuItem_actionPerformed(ActionEvent e)
{
+ chooseTreeFile();
+ }
+
+ @Override
+ protected void loadTreeUrlItem_actionPerformed(ActionEvent e)
+ {
+ chooseTreeUrl();
+ }
+
+ @Override
+ protected void loadTreeBaseStudy_actionPerformed(ActionEvent e)
+ {
+ chooseTreeDb(0, null);
+
+ }
+
+ @Override
+ protected void loadTreeBase_actionPerformed(ActionEvent e)
+ {
+ chooseTreeDb(1, null);
+
+ }
+ @Override
+ protected void loadTreePfam_actionPerformed(ActionEvent e)
+ {
+
+ // only DBRefs of first sequence are checked for matching DB for now,
+ // iterating through them all seems excessive
+ SequenceI seq = viewport.getAlignment().getSequenceAt(0);
+ String dbId = null;
+ for (DBRefEntry pfamRef : DBRefUtils
+ .searchRefsForSource(seq.getDBRefs(), "pfam"))
+ {
+ if (pfamRef.getAccessionId().startsWith("PF"))
+ {
+ dbId = pfamRef.getAccessionId().replaceAll("[A-Za-z]", "");
+ }
+
+ }
+ chooseTreeDb(2, dbId);
+
+ }
+ @Override
+ protected void loadTreeFam_actionPerformed(ActionEvent e)
+ {
+ chooseTreeDb(3, null);
+
+ }
+
+ @Override
+ protected void loadTreeOfLife_actionPerformed(ActionEvent e)
+ {
+ chooseTreeDb(4, null);
+
+ }
+
+
+
+
+
+ public void chooseTreeFile()
+ {
// Pick the tree file
JalviewFileChooser chooser = new JalviewFileChooser(
jalview.bin.Cache.getProperty("LAST_DIRECTORY"));
chooser.setFileView(new JalviewFileView());
chooser.setDialogTitle(
- MessageManager.getString("label.select_newick_like_tree_file")); // modify
+ MessageManager.getString("label.select_tree_file")); // modify
chooser.setToolTipText(
- MessageManager.getString("label.load_tree_file"));
- for (SupportedTreeFileFilter treeFormat : SupportedTreeFileFilter.values())
+ MessageManager.getString("label.load_tree_for_sequence_set"));
+ for (SupportedTreeFileFilter treeFormat : SupportedTreeFileFilter
+ .values())
{
chooser.setFileFilter(treeFormat.getTreeFilter());
}
{
String filePath = chooser.getSelectedFile().getPath();
Cache.setProperty("LAST_DIRECTORY", filePath);
+
+
+ TreeParser treeParser = new TreeParser(filePath);
+ treeParser.loadTree(viewport);
- NewickFile fin = null;
- try
- {
- ExternalTreeParserI<?> treeParser = new TreeParser(
- filePath);
- treeParser.loadTree(viewport);
+ }
+ }
+ /**
+ * Break up and move to TreeParser?
+ */
+ public void chooseTreeUrl()
+ {
+ JLabel label = new JLabel(
+ MessageManager.getString("label.tree_url_example"));
+ // add "example" button
+ final JComboBox<String> history = new JComboBox<>();
- fin = new NewickFile(filePath, DataSourceType.FILE);
- viewport.setCurrentTree(showNewickTree(fin, filePath).getTree());
- } catch (Exception ex)
+ JPanel panel = new JPanel(new GridLayout(2, 1));
+ panel.add(label);
+ panel.add(history);
+ history.setPreferredSize(new Dimension(400, 20));
+ history.setEditable(true);
+ history.addItem("http://www.");
+
+ String historyItems = jalview.bin.Cache.getProperty("RECENT_URL");
+
+ StringTokenizer st;
+
+ if (historyItems != null)
{
- JvOptionPane.showMessageDialog(Desktop.desktop, ex.getMessage(),
- MessageManager.getString("label.problem_reading_tree_file"),
- JvOptionPane.WARNING_MESSAGE);
- ex.printStackTrace();
+ st = new StringTokenizer(historyItems, "\t");
+
+ while (st.hasMoreTokens())
+ {
+ history.addItem(st.nextToken());
}
- if (fin != null && fin.hasWarningMessage())
+ }
+
+ int reply = JvOptionPane.showInternalConfirmDialog(this, panel,
+ MessageManager.getString("label.load_tree_url"),
+ JvOptionPane.OK_CANCEL_OPTION);
+
+ if (reply == JvOptionPane.OK_OPTION)
+ {
+
+ String urlString = history.getSelectedItem().toString();
+ URL treeUrl;
+
+ try
{
- JvOptionPane.showMessageDialog(Desktop.desktop,
- fin.getWarningMessage(),
- MessageManager
- .getString("label.possible_problem_with_tree_file"),
- JvOptionPane.WARNING_MESSAGE);
+ FileFormatI format = null;
+
+ format = new IdentifyFile().identify(urlString, DataSourceType.URL);
+ // add actual use for the format identification (jalview .jar files)
+ treeUrl = new URL(urlString);
+ AptxInit.createInstancesFromUrl(treeUrl, viewport);
+
+ } catch (IOException | RuntimeException e)
+ {
+ JvOptionPane.showMessageDialog(this, MessageManager.formatMessage(
+ "exception.failed_to_read_data_from_source", new String[]
+ { urlString }),
+ MessageManager.getString("label.url_not_found"),
+ JvOptionPane.ERROR_MESSAGE);
+ e.printStackTrace();
}
}
+ else
+ {
+
+ }
+ }
+
+ /**
+ * Disgustingly hardcoded atm.
+ *
+ * @param databaseIndex
+ */
+ public void chooseTreeDb(int databaseIndex, String defaultIdentifier)
+ {
+ final WebservicesManager webservices_manager = WebservicesManager
+ .getInstance();
+ final PhylogeniesWebserviceClient client = webservices_manager
+ .getAvailablePhylogeniesWebserviceClient(databaseIndex);
+ String identifier = JvOptionPane
+ .showInternalInputDialog(Desktop.desktop,
+ client.getInstructions() + "\n(Reference: "
+ + client.getReference() + ")",
+ client.getDescription(), JvOptionPane.QUESTION_MESSAGE,
+ null, null, defaultIdentifier)
+ .toString();
+
+ AptxInit.createInstancesFromDb(client, identifier, viewport);
}
public TreePanel showNewickTree(NewickFile nf, String treeTitle)
private boolean buildingMenu = false;
+ public void BuildTreeDbMenu()
+ {
+
+ }
/**
* Generates menu items and listener event actions for web service clients
*