X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fext%2Farchaeopteryx%2FAptxInit.java;h=ba3421374f76d266c7fd46e772a09a28e00975c3;hb=19262eceac6a9d7a77c5a4220ab07042bd545e98;hp=3dc2e884912b88c51869785ea589b71a104b0692;hpb=075c1528d363ca18476cb9f0b12709158c78fa5e;p=jalview.git diff --git a/src/jalview/ext/archaeopteryx/AptxInit.java b/src/jalview/ext/archaeopteryx/AptxInit.java index 3dc2e88..ba34213 100644 --- a/src/jalview/ext/archaeopteryx/AptxInit.java +++ b/src/jalview/ext/archaeopteryx/AptxInit.java @@ -1,30 +1,29 @@ 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.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 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.archaeopteryx.webservices.WebservicesManager; import org.forester.io.parsers.PhylogenyParser; import org.forester.io.parsers.nexus.NexusPhylogeniesParser; import org.forester.io.parsers.nhx.NHXParser; @@ -34,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; @@ -47,9 +45,19 @@ import org.forester.util.ForesterUtil; */ public final class AptxInit { + public final static InputStream CONFIG_LOC = AptxInit.class - private final static Configuration APTX_CONFIG = new Configuration( - "_aptx_jalview_configuration_file", false, false, false); + .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(); @@ -66,24 +74,87 @@ 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; } + public static TreeFrameI[] createInstancesFromFile(File treeFile, + AlignmentViewport viewport) + throws FileNotFoundException, IOException + { + TreeFrameI[] aptxFrames = null; + if (UtilityMethods.canForesterReadFile(treeFile)) + { + + if (Desktop.instance != null) + { + Desktop.instance.startLoading(treeFile.getCanonicalPath()); + } + 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++) + { + 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 (Desktop.instance != null) + { + Desktop.instance.stopLoading(); + } + } + return aptxFrames; + } + /** * Refactored from Archaeopteryx.main * @@ -93,78 +164,18 @@ public final class AptxInit * @throws IOException * @throws FileNotFoundException */ - public static MainFrame[] createInstancesFromFile(String filePath, + public static TreeFrameI[] createInstancesFromFile( + String filePath, AlignmentViewport viewport) throws FileNotFoundException, IOException { File treeFile = new File(filePath); - final String err = ForesterUtil.isReadableFile(treeFile); - if (!ForesterUtil.isEmpty(err)) - { - 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 ) { - JvOptionPane.showInternalMessageDialog( null, - ForesterUtil.wordWrap( - "phyloXML XSD-based validation is turned off [enable with line 'validate_against_phyloxml_xsd_schem: true' in configuration file]", - 80 ), - "Warning", - JvOptionPane.WARNING_MESSAGE ); - } - } - Phylogeny[] trees = PhylogenyMethods.readPhylogenies(parser, treeFile); - MainFrame[] aptxFrames = new MainFrame[trees.length]; - - - for (int i = 0; i < trees.length; i++) - { - Phylogeny tree = trees[i]; + return createInstancesFromFile(treeFile, viewport); - if (nhx_or_nexus && INTERNAL_NUMBERS_AS_CONFIDENCE) - { - PhylogenyMethods.transferInternalNodeNamesToConfidence(tree, ""); - } - String treeTitle = treeFile.getName() + "[" + i + "]"; - tree.setName(treeTitle); - aptxFrames[i] = createAptxFrame(tree, viewport, treeTitle); - - } - if (Desktop.instance != null) - { - Desktop.instance.stopLoading(); - } - return aptxFrames; } - public static MainFrame[] createInstancesFromUrl(URL treeUrl, + public static TreeFrameI[] createInstancesFromUrl(URL treeUrl, AlignmentViewport viewport) throws FileNotFoundException, IOException, RuntimeException { @@ -179,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) @@ -202,22 +213,14 @@ public final class AptxInit * @param viewport * @return */ - public static MainFrame[] createInstancesFromDb(int databaseIndex, - AlignmentViewport viewport, String defaultIdentifier) + public static TreeFrameI[] createInstancesFromDb( + PhylogeniesWebserviceClient treeDbClient, String identifier, + AlignmentViewport viewport) { URL url = null; Phylogeny[] trees = null; - 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(); + TreeFrameI[] aptxFrames = null; if ((identifier != null) && (identifier.trim().length() > 0)) { @@ -227,7 +230,7 @@ public final class AptxInit } identifier = identifier.trim(); - if (client.isQueryInteger()) + if (treeDbClient.isQueryInteger()) { identifier = identifier.replaceAll("^\\D+", ""); @@ -238,21 +241,24 @@ public final class AptxInit } catch (final NumberFormatException e) { JvOptionPane.showInternalMessageDialog(Desktop.desktop, - "Identifier is expected to be a number", - "Can not open URL", JvOptionPane.ERROR_MESSAGE); - return new MainFrame[0]; + MessageManager.formatMessage( + "error.database_id_has_letters", new String[] + { identifier }), + MessageManager.getString("label.invalid_url"), + JvOptionPane.ERROR_MESSAGE); + return new TreeFrameI[0]; } identifier = id + ""; } boolean exception = false; try { - String url_str = client.getUrl(); + String url_str = treeDbClient.getUrl(); url_str = url_str.replaceFirst( PhylogeniesWebserviceClient.QUERY_PLACEHOLDER, identifier); url = new URL(url_str); PhylogenyParser parser = null; - switch (client.getReturnFormat()) + switch (treeDbClient.getReturnFormat()) { case TOL_XML_RESPONSE: parser = new TolParser(); @@ -306,7 +312,7 @@ public final class AptxInit break; default: throw new IllegalArgumentException( - "unknown format: " + client.getReturnFormat()); + "unknown format: " + treeDbClient.getReturnFormat()); } // // if (_main_frame.getMainPanel().getCurrentTreePanel() != null) @@ -318,30 +324,37 @@ public final class AptxInit // _main_frame.getMainPanel().setWaitCursor(); // } trees = ForesterUtil.readPhylogeniesFromUrl(url, parser); + aptxFrames = new TreeFrameI[trees.length]; } catch (final MalformedURLException e) { exception = true; JvOptionPane.showInternalMessageDialog(Desktop.desktop, - "Malformed URL: " + url + "\n" + e.getLocalizedMessage(), - "Malformed URL", JvOptionPane.ERROR_MESSAGE); + MessageManager.formatMessage( + "exception.unable_to_launch_url", new String[] + { url.toString() }), + MessageManager.getString("label.invalid_url"), + JvOptionPane.ERROR_MESSAGE); + System.err.println(e.getLocalizedMessage()); } catch (final IOException e) { exception = true; JvOptionPane.showInternalMessageDialog(Desktop.desktop, "Could not read from " + url + "\n" + e.getLocalizedMessage(), - "Failed to read tree from " + client.getName() + " for " + "Failed to read tree from " + treeDbClient.getName() + " for " + identifier, JvOptionPane.ERROR_MESSAGE); + System.err.println(e.getLocalizedMessage()); } catch (final NumberFormatException e) { exception = true; JvOptionPane.showInternalMessageDialog(Desktop.desktop, "Could not read from " + url + "\n" + e.getLocalizedMessage(), - "Failed to read tree from " + client.getName() + " for " + "Failed to read tree from " + treeDbClient.getName() + " for " + identifier, JvOptionPane.ERROR_MESSAGE); + System.err.println(e.getLocalizedMessage()); } catch (final Exception e) { exception = true; @@ -349,33 +362,26 @@ public final class AptxInit JvOptionPane.showInternalMessageDialog(Desktop.desktop, e.getLocalizedMessage(), "Unexpected Exception", JvOptionPane.ERROR_MESSAGE); - } finally - { - // if (_main_frame.getCurrentTreePanel() != null) - // { - // _main_frame.getCurrentTreePanel().setArrowCursor(); - // } - // else - // { - // _main_frame.getMainPanel().setArrowCursor(); - // } + System.err.println(e.getLocalizedMessage()); } 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 (client.getName().equals(WebserviceUtil.TREE_FAM_NAME)) + if (treeDbClient.getName().equals(WebserviceUtil.TREE_FAM_NAME)) { - phylogeny.setRerootable(false); - phylogeny.setRooted(true); + aptxTree.setRerootable(false); + aptxTree.setRooted(true); } - if (client.getProcessingInstructions() != null) + if (treeDbClient.getProcessingInstructions() != null) { try { - WebserviceUtil.processInstructions(client, phylogeny); + WebserviceUtil.processInstructions(treeDbClient, + aptxTree); } catch (final PhyloXmlDataFormatException e) { JvOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -383,12 +389,12 @@ public final class AptxInit JvOptionPane.ERROR_MESSAGE); } } - if (client.getNodeField() != null) + if (treeDbClient.getNodeField() != null) { try { - PhylogenyMethods.transferNodeNameToField(phylogeny, - client.getNodeField(), false); + PhylogenyMethods.transferNodeNameToField(aptxTree, + treeDbClient.getNodeField(), false); } catch (final PhyloXmlDataFormatException e) { JvOptionPane.showInternalMessageDialog(Desktop.desktop, @@ -396,48 +402,51 @@ public final class AptxInit JvOptionPane.ERROR_MESSAGE); } } - phylogeny.setIdentifier( - new Identifier(identifier, client.getName())); + 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(" ", "_")); } - // _main_frame.getMainPanel().getCurrentTreePanel() - // .setTreeFile(new File(my_name_for_file)); - AptxUtil.lookAtSomeTreePropertiesForAptxControlSettings( - phylogeny, aptxApp.getMainPanel().getControlPanel(), - APTX_CONFIG); - // _main_frame.getMainPanel().getControlPanel().showWhole(); - - aptxApp.activateSaveAllIfNeeded(); + aptxApp.getTreePanel() + .setTreeFile(new File(my_name_for_file)); + // AptxUtil.lookAtSomeTreePropertiesForAptxControlSettings( + // aptxTree, aptxApp.getMainPanel().getControlPanel(), + // APTX_CONFIG); + aptxApp.getTreeControls().displayEntireTree(); + + aptxApp.checkMultipleTrees(); + aptxFrames[i++] = aptxApp; } } } - else if (!exception) + else if (!exception) // ..what? { JvOptionPane.showMessageDialog(null, ForesterUtil.wordWrap( @@ -468,81 +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) { - MainFrame aptxApp = Archaeopteryx.createApplication(aptxTree, - APTX_CONFIG, treeTitle); - - 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; } - // private static void addPartitioningSlider(MainFrame aptxFrame) - // { - // JSlider slider = new JSlider(); - // - // - // } - 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; - } - public static Map getAllAptxFrames() + + private static boolean validateConfig(Configuration aptxConfig) { - return activeAptx; + 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 (keepGoing == JvOptionPane.CANCEL_OPTION + || keepGoing == JvOptionPane.CLOSED_OPTION + || keepGoing == JvOptionPane.NO_OPTION) + { + return false; + } + + } + return true; }