X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FAptxInit.java;h=ba3421374f76d266c7fd46e772a09a28e00975c3;hb=19262eceac6a9d7a77c5a4220ab07042bd545e98;hp=6fcc37c7f523c7d81bcaef732c3394b04285fba8;hpb=ba78b66937556cf49e1dde69673413714ad4751f;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/AptxInit.java b/src/jalview/ext/archaeopteryx/AptxInit.java index 6fcc37c..ba34213 100644 --- a/src/jalview/ext/archaeopteryx/AptxInit.java +++ b/src/jalview/ext/archaeopteryx/AptxInit.java @@ -1,33 +1,27 @@ package jalview.ext.archaeopteryx; import jalview.analysis.TreeBuilder; -import jalview.datamodel.SequenceI; -import jalview.ext.treeviewer.ExternalTreeBuilderI; -import jalview.ext.treeviewer.ExternalTreeViewerBindingI; +import jalview.ext.forester.io.UtilityMethods; +import jalview.ext.treeviewer.LoadedTreeAssociationI; +import jalview.ext.treeviewer.LoadedTreeSequenceAssociation; +import jalview.ext.treeviewer.TreeBuilderI; +import jalview.ext.treeviewer.TreeFrameI; +import jalview.ext.treeviewer.TreeI; +import jalview.ext.treeviewer.TreeViewerUtils; import jalview.gui.Desktop; import jalview.gui.JvOptionPane; import jalview.util.MessageManager; import jalview.viewmodel.AlignmentViewport; -import java.awt.Component; -import java.awt.Dimension; import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; +import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; -import java.util.HashMap; -import java.util.Map; - -import javax.swing.JMenu; -import javax.swing.JMenuBar; -import javax.swing.JMenuItem; -import javax.swing.JSeparator; import org.forester.archaeopteryx.AptxUtil; -import org.forester.archaeopteryx.Archaeopteryx; import org.forester.archaeopteryx.Configuration; -import org.forester.archaeopteryx.MainFrame; import org.forester.archaeopteryx.webservices.PhylogeniesWebserviceClient; import org.forester.archaeopteryx.webservices.WebserviceUtil; import org.forester.io.parsers.PhylogenyParser; @@ -39,7 +33,6 @@ import org.forester.io.parsers.tol.TolParser; import org.forester.io.parsers.util.ParserUtils; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyMethods; -import org.forester.phylogeny.PhylogenyNode; import org.forester.phylogeny.data.Identifier; import org.forester.util.ForesterUtil; @@ -52,9 +45,19 @@ import org.forester.util.ForesterUtil; */ public final class AptxInit { - private final static Configuration APTX_CONFIG = new Configuration( - "_aptx_jalview_configuration_file", - false, false, false); + public final static InputStream CONFIG_LOC = AptxInit.class + + .getResourceAsStream("/_aptx_jalview_configuration_file.txt"); + + public final static Configuration APTX_CONFIG = new Configuration( + CONFIG_LOC, + false, false); + // static + // { + // APTX_CONFIG.setBaseFontFamilyName( + // Desktop.instance.getFont().getFamily().replaceAll(" ", "_")); + // APTX_CONFIG.setBaseFontSize(Desktop.instance.getFont().getSize()); + // } private final static boolean VALIDATE_PHYLOXML_XSD = APTX_CONFIG .isValidatePhyloXmlAgainstSchema(); @@ -71,104 +74,108 @@ public final class AptxInit private final static NHXParser.TAXONOMY_EXTRACTION TAXONOMY_EXTRACTION = APTX_CONFIG .getTaxonomyExtraction(); - private static Map activeAptx = new HashMap<>(); - - - - public static MainFrame createInstanceFromCalculation( + public static TreeFrameI createInstanceFromCalculation( final TreeBuilder calculatedTree) { - ExternalTreeBuilderI aptxTreeBuilder = new AptxTreeBuilder( + TreeBuilderI aptxTreeBuilder = new AptxTreeBuilder( calculatedTree); - Phylogeny aptxTree = aptxTreeBuilder.buildTree(); + TreeI aptxTree = aptxTreeBuilder.buildTree(); - MainFrame aptxApp = createAptxFrame(aptxTree, + TreeFrameI aptxApp = createAptxFrame(aptxTree, calculatedTree.getAvport(), null); return aptxApp; } - /** - * Refactored from Archaeopteryx.main - * - * @param filePath - * @param viewport - * @return - * @throws IOException - * @throws FileNotFoundException - */ - public static MainFrame[] createInstancesFromFile(String filePath, + public static TreeFrameI[] createInstancesFromFile(File treeFile, AlignmentViewport viewport) throws FileNotFoundException, IOException { - File treeFile = new File(filePath); - final String err = ForesterUtil.isReadableFile(treeFile); - if (!ForesterUtil.isEmpty(err)) + TreeFrameI[] aptxFrames = null; + if (UtilityMethods.canForesterReadFile(treeFile)) { - JvOptionPane.showMessageDialog(Desktop.desktop, err, - MessageManager.getString("label.problem_reading_tree_file"), - JvOptionPane.WARNING_MESSAGE); - } - if (Desktop.instance != null) - { - Desktop.instance.startLoading(filePath); - } - boolean nhx_or_nexus = false; - final PhylogenyParser parser = ParserUtils.createParserDependingOnFileType( - treeFile, VALIDATE_PHYLOXML_XSD); - if (parser instanceof NHXParser) - { - nhx_or_nexus = true; - final NHXParser nhx = (NHXParser) parser; - nhx.setReplaceUnderscores(REPLACE_NHX_UNDERSCORES); - nhx.setIgnoreQuotes(false); - nhx.setTaxonomyExtraction(TAXONOMY_EXTRACTION); - } - else if (parser instanceof NexusPhylogeniesParser) - { - nhx_or_nexus = true; - final NexusPhylogeniesParser nex = (NexusPhylogeniesParser) parser; - nex.setReplaceUnderscores(REPLACE_NHX_UNDERSCORES); - nex.setIgnoreQuotes(false); - } - else if (parser instanceof PhyloXmlParser) - { - if (VALIDATE_PHYLOXML_XSD == false) + if (Desktop.instance != null) { - JvOptionPane.showInternalMessageDialog(Desktop.desktop, - MessageManager.getString("error.phyloxml_validation"), - MessageManager.getString("label.file_open_error"), - JvOptionPane.WARNING_MESSAGE ); + Desktop.instance.startLoading(treeFile.getCanonicalPath()); } - } - Phylogeny[] trees = PhylogenyMethods.readPhylogenies(parser, treeFile); - MainFrame[] aptxFrames = new MainFrame[trees.length]; - + boolean nhx_or_nexus = false; + final PhylogenyParser parser = ParserUtils + .createParserDependingOnFileType(treeFile, + VALIDATE_PHYLOXML_XSD); + if (parser instanceof NHXParser) + { + nhx_or_nexus = true; + final NHXParser nhx = (NHXParser) parser; + nhx.setReplaceUnderscores(REPLACE_NHX_UNDERSCORES); + nhx.setIgnoreQuotes(false); + nhx.setTaxonomyExtraction(TAXONOMY_EXTRACTION); + } + else if (parser instanceof NexusPhylogeniesParser) + { + nhx_or_nexus = true; + final NexusPhylogeniesParser nex = (NexusPhylogeniesParser) parser; + nex.setReplaceUnderscores(REPLACE_NHX_UNDERSCORES); + nex.setIgnoreQuotes(false); + } + else if (parser instanceof PhyloXmlParser) + { + if (VALIDATE_PHYLOXML_XSD == false) + { + JvOptionPane.showInternalMessageDialog(Desktop.desktop, + MessageManager.getString("error.phyloxml_validation"), + MessageManager.getString("label.file_open_error"), + JvOptionPane.WARNING_MESSAGE); + } + } + Phylogeny[] trees = PhylogenyMethods.readPhylogenies(parser, + treeFile); + aptxFrames = new TreeFrameI[trees.length]; - for (int i = 0; i < trees.length; i++) + for (int i = 0; i < trees.length; i++) { - Phylogeny tree = trees[i]; + Phylogeny aptxPhylogeny = trees[i]; + + if (nhx_or_nexus && INTERNAL_NUMBERS_AS_CONFIDENCE) + { + PhylogenyMethods + .transferInternalNodeNamesToConfidence(aptxPhylogeny, ""); + } + String treeTitle = treeFile.getName() + "[" + i + "]"; + aptxPhylogeny.setName(treeTitle); + aptxFrames[i] = createAptxFrame(aptxPhylogeny, viewport, treeTitle); - if (nhx_or_nexus && INTERNAL_NUMBERS_AS_CONFIDENCE) + } + if (Desktop.instance != null) { - PhylogenyMethods.transferInternalNodeNamesToConfidence(tree, ""); + Desktop.instance.stopLoading(); } - String treeTitle = treeFile.getName() + "[" + i + "]"; - tree.setName(treeTitle); - aptxFrames[i] = createAptxFrame(tree, viewport, treeTitle); - - } - if (Desktop.instance != null) - { - Desktop.instance.stopLoading(); } return aptxFrames; + } + + /** + * Refactored from Archaeopteryx.main + * + * @param filePath + * @param viewport + * @return + * @throws IOException + * @throws FileNotFoundException + */ + public static TreeFrameI[] createInstancesFromFile( + String filePath, + AlignmentViewport viewport) + throws FileNotFoundException, IOException + { + File treeFile = new File(filePath); + return createInstancesFromFile(treeFile, viewport); + } - public static MainFrame[] createInstancesFromUrl(URL treeUrl, + public static TreeFrameI[] createInstancesFromUrl(URL treeUrl, AlignmentViewport viewport) throws FileNotFoundException, IOException, RuntimeException { @@ -183,11 +190,11 @@ public final class AptxInit REPLACE_NHX_UNDERSCORES, INTERNAL_NUMBERS_AS_CONFIDENCE, TAXONOMY_EXTRACTION, MIDPOINT_REROOT); - MainFrame[] aptxFrames = new MainFrame[trees.length]; + TreeFrameI[] aptxFrames = new TreeFrameI[trees.length]; for (int i = 0; i < trees.length; i++) { - Phylogeny tree = trees[i]; - aptxFrames[i] = createAptxFrame(tree, viewport, treeTitle); + Phylogeny aptxTree = trees[i]; + aptxFrames[i] = createAptxFrame(aptxTree, viewport, treeTitle); } if (Desktop.instance != null) @@ -206,13 +213,14 @@ public final class AptxInit * @param viewport * @return */ - public static MainFrame[] createInstancesFromDb( + public static TreeFrameI[] createInstancesFromDb( PhylogeniesWebserviceClient treeDbClient, String identifier, AlignmentViewport viewport) { URL url = null; Phylogeny[] trees = null; + TreeFrameI[] aptxFrames = null; if ((identifier != null) && (identifier.trim().length() > 0)) { @@ -238,7 +246,7 @@ public final class AptxInit { identifier }), MessageManager.getString("label.invalid_url"), JvOptionPane.ERROR_MESSAGE); - return new MainFrame[0]; + return new TreeFrameI[0]; } identifier = id + ""; } @@ -316,6 +324,7 @@ public final class AptxInit // _main_frame.getMainPanel().setWaitCursor(); // } trees = ForesterUtil.readPhylogeniesFromUrl(url, parser); + aptxFrames = new TreeFrameI[trees.length]; } catch (final MalformedURLException e) { exception = true; @@ -357,20 +366,22 @@ public final class AptxInit } if ((trees != null) && (trees.length > 0)) { - for (final Phylogeny phylogeny : trees) + int i = 0; + for (final Phylogeny aptxTree : trees) { - if (!phylogeny.isEmpty()) + if (!aptxTree.isEmpty()) { if (treeDbClient.getName().equals(WebserviceUtil.TREE_FAM_NAME)) { - phylogeny.setRerootable(false); - phylogeny.setRooted(true); + aptxTree.setRerootable(false); + aptxTree.setRooted(true); } if (treeDbClient.getProcessingInstructions() != null) { try { - WebserviceUtil.processInstructions(treeDbClient, phylogeny); + WebserviceUtil.processInstructions(treeDbClient, + aptxTree); } catch (final PhyloXmlDataFormatException e) { JvOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -382,7 +393,7 @@ public final class AptxInit { try { - PhylogenyMethods.transferNodeNameToField(phylogeny, + PhylogenyMethods.transferNodeNameToField(aptxTree, treeDbClient.getNodeField(), false); } catch (final PhyloXmlDataFormatException e) { @@ -391,44 +402,47 @@ public final class AptxInit JvOptionPane.ERROR_MESSAGE); } } - phylogeny.setIdentifier( + aptxTree.setIdentifier( new Identifier(identifier, treeDbClient.getName())); // _main_frame.getJMenuBar().remove(_main_frame.getHelpMenu()); - // _main_frame.getMenuBarOfMainFrame() + // _main_frame.getMenuBarOfExternalTreeFrameI() // .add(_main_frame.getHelpMenu()); - // _main_frame.getMainPanel().addPhylogenyInNewTab(phylogeny, + // _main_frame.getMainPanel().addExternalTreeIInNewTab(ExternalTreeI, // _main_frame.getConfiguration(), // new File(url.getFile()).getName(), url.toString()); - MainFrame aptxApp = createAptxFrame(phylogeny, viewport, + + TreeFrameI aptxApp = createAptxFrame(aptxTree, + viewport, url.getFile()); String my_name_for_file = ""; - if (!ForesterUtil.isEmpty(phylogeny.getName())) + if (!ForesterUtil.isEmpty(aptxTree.getName())) { - my_name_for_file = new String(phylogeny.getName()) + my_name_for_file = new String(aptxTree.getName()) .replaceAll(" ", "_"); } - else if (phylogeny.getIdentifier() != null) + else if (aptxTree.getIdentifier() != null) { final StringBuffer sb = new StringBuffer(); if (!ForesterUtil - .isEmpty(phylogeny.getIdentifier().getProvider())) + .isEmpty(aptxTree.getIdentifier().getProvider())) { - sb.append(phylogeny.getIdentifier().getProvider()); + sb.append(aptxTree.getIdentifier().getProvider()); sb.append("_"); } - sb.append(phylogeny.getIdentifier().getValue()); + sb.append(aptxTree.getIdentifier().getValue()); my_name_for_file = new String( sb.toString().replaceAll(" ", "_")); } - aptxApp.getMainPanel().getCurrentTreePanel() + aptxApp.getTreePanel() .setTreeFile(new File(my_name_for_file)); - AptxUtil.lookAtSomeTreePropertiesForAptxControlSettings( - phylogeny, aptxApp.getMainPanel().getControlPanel(), - APTX_CONFIG); - // _main_frame.getMainPanel().getControlPanel().showWhole(); + // AptxUtil.lookAtSomeTreePropertiesForAptxControlSettings( + // aptxTree, aptxApp.getMainPanel().getControlPanel(), + // APTX_CONFIG); + aptxApp.getTreeControls().displayEntireTree(); - aptxApp.activateSaveAllIfNeeded(); + aptxApp.checkMultipleTrees(); + aptxFrames[i++] = aptxApp; } } } @@ -463,148 +477,78 @@ public final class AptxInit { Desktop.instance.stopLoading(); } - return null; + return aptxFrames; } - - - public static MainFrame createAptxFrame( - final Phylogeny aptxTree, - final AlignmentViewport jalviewAlignport, String treeTitle) + public static TreeFrameI createAptxFrame(TreeI aptxTree, + AlignmentViewport jalviewAlignport, String treeTitle) { - if (APTX_CONFIG == null || APTX_CONFIG.isCouldReadConfigFile() == false) - { - int keepGoing = JvOptionPane.showConfirmDialog(Desktop.desktop, - MessageManager.getString("label.aptx_config_not_found"), - MessageManager.formatMessage("label.couldnt_locate", - new String[] - { "_aptx_jalview_configuration_file" }), - JvOptionPane.YES_NO_CANCEL_OPTION); - - if (keepGoing == JvOptionPane.CANCEL_OPTION - || keepGoing == JvOptionPane.CLOSED_OPTION - || keepGoing == JvOptionPane.NO_OPTION) - { - return null; - } - - } - MainFrame aptxApp = Archaeopteryx.createApplication(aptxTree, - APTX_CONFIG, treeTitle); - - adaptAptxGui(aptxApp); - LoadedTreeSequenceAssociation bindAptxNodes = new LoadedTreeSequenceAssociation( - jalviewAlignport.getAlignment().getSequencesArray(), aptxTree); + validateConfig(APTX_CONFIG); + TreeFrameI aptxApp = aptxTree + .createTreeViewerFromTree(treeTitle); + TreeI jalviewTree = aptxApp.getTree(); + LoadedTreeAssociationI bindAptxNodes = new LoadedTreeSequenceAssociation( + jalviewAlignport.getAlignment().getSequencesArray(), + jalviewTree); bindAptxNodes.associateLeavesToSequences(); - bindNodesToJalviewSequences(aptxApp, jalviewAlignport, + TreeViewerUtils.associateNodesWithJalviewSequences(aptxApp, jalviewAlignport, bindAptxNodes.getAlignmentWithNodes(), bindAptxNodes.getNodesWithAlignment()); - bindTreeViewFrameToJalview(aptxApp); + TreeViewerUtils.addTreeViewFrameToJalview(aptxApp); + // adaptAptxGui(aptxApp); //moved to AptxFrame return aptxApp; } - public static ExternalTreeViewerBindingI bindNodesToJalviewSequences( - final MainFrame aptxApp, - final AlignmentViewport jalviewAlignViewport, - final Map alignMappedToNodes, - final Map nodesMappedToAlign) + protected static TreeFrameI createAptxFrame( + final Phylogeny aptxTree, + final AlignmentViewport jalviewAlignport, String treeTitle) { - JalviewBinding treeBinding = new JalviewBinding(aptxApp, - jalviewAlignViewport, - alignMappedToNodes, nodesMappedToAlign); - activeAptx.put(aptxApp, treeBinding); - return treeBinding; - } + validateConfig(APTX_CONFIG); + TreeFrameI aptxApp = new AptxFrame(aptxTree, APTX_CONFIG, + treeTitle); + TreeI jalviewTree = aptxApp.getTree(); + LoadedTreeAssociationI bindAptxNodes = new LoadedTreeSequenceAssociation( + jalviewAlignport.getAlignment().getSequencesArray(), + jalviewTree); + bindAptxNodes.associateLeavesToSequences(); + TreeViewerUtils.associateNodesWithJalviewSequences(aptxApp, jalviewAlignport, + bindAptxNodes.getAlignmentWithNodes(), + bindAptxNodes.getNodesWithAlignment()); + TreeViewerUtils.addTreeViewFrameToJalview(aptxApp); - public static MainFrame bindTreeViewFrameToJalview( - 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()); - String frameTitle = MessageManager.getString("label.aptx_title"); - File treeFile = aptxApp.getMainPanel().getCurrentTreePanel() - .getTreeFile(); - if (treeFile != null) - { - frameTitle += MessageManager.formatMessage("label.aptx_title_append", - new String[] - { treeFile.getAbsolutePath() }); - } - Desktop.addInternalFrame(aptxApp, frameTitle, true, width, height, true, - true); + // adaptAptxGui(aptxApp); //moved to AptxFrame return aptxApp; - } - /** - * Hides certain redundant Archaeopteryx GUI elements such as the menu items - * for reading in trees and adds extra items related to Jalview such as the - * tree sorting item. - * - * - * @param aptxFrame - */ - private static void adaptAptxGui(MainFrame aptxFrame) - { - JMenuBar frameBar = aptxFrame.getJMenuBar(); - - for (int i = 0; i < frameBar.getMenuCount();i++) { - JMenu menu = frameBar.getMenu(i); - if (menu.getText().contains("File")) - { - // hide all "Read from ..." and "New" menu items and any Separators that - // come directly after them - Component previousMenuItem = null; - for (Component menuItem : menu.getMenuComponents()) { - if (previousMenuItem instanceof JMenuItem) - { - if (((JMenuItem) previousMenuItem).getText().startsWith("Read") - || ((JMenuItem) previousMenuItem).getText() - .startsWith("New")) - { - previousMenuItem.setVisible(false); + private static boolean validateConfig(Configuration aptxConfig) + { + if (aptxConfig == null || aptxConfig.isCouldReadConfigFile() == false) + { + int keepGoing = JvOptionPane.showConfirmDialog(Desktop.desktop, + MessageManager.getString("label.aptx_config_not_found"), + MessageManager.formatMessage("label.couldnt_locate", + new String[] + { "_aptx_jalview_configuration_file" }), + JvOptionPane.YES_NO_CANCEL_OPTION); - if (menuItem instanceof JSeparator) - { - menuItem.setVisible(false); - } - } - } - previousMenuItem = menuItem; - } - } - else if (menu.getText().contains("Inference")) - { - menu.setVisible(false); - } - else if (menu.getText().contains("View")) + if (keepGoing == JvOptionPane.CANCEL_OPTION + || keepGoing == JvOptionPane.CLOSED_OPTION + || keepGoing == JvOptionPane.NO_OPTION) { - menu.addSeparator(); - JMenuItem sortByTree = new JMenuItem("Sort alignment by tree"); - menu.add(sortByTree); - sortByTree.setVisible(false); // don't show unless it's actually - // possible + return false; } } - aptxFrame.validate(); - } - - public static Map getAllAptxFrames() - { - return activeAptx; + return true; }