package jalview.ext.archaeopteryx; import jalview.analysis.TreeBuilder; import jalview.datamodel.SequenceI; import jalview.ext.treeviewer.ExternalTreeBuilderI; import jalview.ext.treeviewer.ExternalTreeViewerBindingI; import jalview.gui.Desktop; import jalview.viewmodel.AlignmentViewport; import java.awt.Dimension; import java.util.Map; import org.forester.archaeopteryx.Archaeopteryx; import org.forester.archaeopteryx.MainFrame; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyNode; /** * Static class for creating Archaeopteryx tree viewer instances from calculated * trees and letting them be bound to Jalview. * * @author kjvanderheide * */ public final class AptxInit { /** * Test method, should generally not be used as it does not bind the tree to * its alignment * * @param aptxTrees * @return */ public static MainFrame createUnboundInstance(final Phylogeny aptxTree) { Phylogeny[] aptxTrees = { aptxTree }; return createAptxFrame(aptxTrees); } // public static MainFrame createInstance(final Phylogeny[] aptxTrees, // AlignmentViewport jalviewAlignmentView) // { // return createAptxFrameInJalview(aptxTrees); // // } // // public static MainFrame createInstance(final Phylogeny aptxTree, // final AlignmentViewport jalviewAlignmentView) // { // Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in // // several trees simultaneously // return createAptxFrameInJalview(aptxTrees); // // } public static MainFrame createInstance( final TreeBuilder calculatedTree) // very dense method, to be split up { ExternalTreeBuilderI aptxTreeBuilder = new AptxTreeBuilder( calculatedTree); Phylogeny aptxTree = aptxTreeBuilder.buildTree(); Phylogeny[] aptxTrees = { aptxTree }; // future possibility to load in // several trees simultaneously MainFrame aptxApp = createAptxFrame(aptxTrees); bindNodesToJalviewSequences(aptxApp, calculatedTree.getAvport(), aptxTreeBuilder.getAlignmentBoundNodes(), aptxTreeBuilder.getNodesBoundAlignment()); return bindFrameToJalview(aptxApp); } public static MainFrame createInstanceFromFile(String filePath, AlignmentViewport viewport) { String[] AptxArgs = new String[] { "-c", "_aptx_jalview_configuration_file", filePath }; MainFrame aptxApp = Archaeopteryx.main(AptxArgs); LoadedTreeAssociation bindAptxNodes = new LoadedTreeAssociation( viewport.getAlignment().getSequencesArray(), aptxApp.getMainPanel().getCurrentTreePanel().getPhylogeny()); bindAptxNodes.associateLeavesToSequences(); bindNodesToJalviewSequences(aptxApp, viewport, bindAptxNodes.getAlignmentWithNodes(), bindAptxNodes.getNodesWithAlignment()); return bindFrameToJalview(aptxApp); } public static MainFrame createInstanceFromUrl() { return null; // void readPhylogeniesFromURL() { // URL url = null; // Phylogeny[] phys = null; // final String message = "Please enter a complete URL, for example // \"http://purl.org/phylo/treebase/phylows/study/TB2:S15480?format=nexus\""; // final String url_string = JOptionPane // .showInputDialog( this, // message, // "Use URL/webservice to obtain a phylogeny", // JOptionPane.QUESTION_MESSAGE ); // boolean nhx_or_nexus = false; // if ( ( url_string != null ) && ( url_string.length() > 0 ) ) { // try { // url = new URL( url_string ); // PhylogenyParser parser = null; // if ( url.getHost().toLowerCase().indexOf( "tolweb" ) >= 0 ) { // parser = new TolParser(); // } // else { // parser = ParserUtils // .createParserDependingOnUrlContents( url, // getConfiguration().isValidatePhyloXmlAgainstSchema() ); // } // if ( parser instanceof NexusPhylogeniesParser ) { // nhx_or_nexus = true; // } // else if ( parser instanceof NHXParser ) { // nhx_or_nexus = true; // } // if ( _mainpanel.getCurrentTreePanel() != null ) { // _mainpanel.getCurrentTreePanel().setWaitCursor(); // } // else { // _mainpanel.setWaitCursor(); // } // final PhylogenyFactory factory = // ParserBasedPhylogenyFactory.getInstance(); // phys = factory.create( url.openStream(), parser ); // } // catch ( final MalformedURLException e ) { // JOptionPane.showMessageDialog( this, // "Malformed URL: " + url + "\n" + e.getLocalizedMessage(), // "Malformed URL", // JOptionPane.ERROR_MESSAGE ); // } // catch ( final IOException e ) { // JOptionPane.showMessageDialog( this, // "Could not read from " + url + "\n" // + ForesterUtil.wordWrap( e.getLocalizedMessage(), 80 ), // "Failed to read URL", // JOptionPane.ERROR_MESSAGE ); // } // catch ( final Exception e ) { // JOptionPane.showMessageDialog( this, // ForesterUtil.wordWrap( e.getLocalizedMessage(), 80 ), // "Unexpected Exception", // JOptionPane.ERROR_MESSAGE ); // } // finally { // if ( _mainpanel.getCurrentTreePanel() != null ) { // _mainpanel.getCurrentTreePanel().setArrowCursor(); // } // else { // _mainpanel.setArrowCursor(); // } // } // if ( ( phys != null ) && ( phys.length > 0 ) ) { // if ( nhx_or_nexus && // getOptions().isInternalNumberAreConfidenceForNhParsing() ) { // for( final Phylogeny phy : phys ) { // PhylogenyMethods.transferInternalNodeNamesToConfidence( phy, "" ); // } // } // AptxUtil.addPhylogeniesToTabs( phys, // new File( url.getFile() ).getName(), // new File( url.getFile() ).toString(), // getConfiguration(), // getMainPanel() ); // _mainpanel.getControlPanel().showWhole(); // } // } // activateSaveAllIfNeeded(); // System.gc(); // } } public static MainFrame createAptxFrame( final Phylogeny[] aptxTrees) { MainFrame aptxApp = Archaeopteryx.createApplication(aptxTrees, "_aptx_jalview_configuration_file", null); return aptxApp; } public static ExternalTreeViewerBindingI bindNodesToJalviewSequences( final MainFrame aptxApp, final AlignmentViewport jalviewAlignViewport, final Map alignMappedToNodes, final Map nodesMappedToAlign) { return new JalviewBinding(aptxApp, jalviewAlignViewport, alignMappedToNodes, nodesMappedToAlign); } public static MainFrame bindFrameToJalview(final MainFrame aptxApp) { int width = 400; int height = 550; aptxApp.setMinimumSize(new Dimension(width, height)); // aptxApp.setFont(Desktop.instance.getFont()); // aptxApp.getMainPanel().setFont(Desktop.instance.getFont()); Desktop.addInternalFrame(aptxApp, "Archaeopteryx Tree View", true, width, height, true, true); return aptxApp; } }