+ boolean writeAsNewHampshire( final Phylogeny t, boolean exception, final File file ) {\r
+ try {\r
+ final PhylogenyWriter writer = new PhylogenyWriter();\r
+ writer.toNewHampshire( t, true, getOptions().getNhConversionSupportValueStyle(), file );\r
+ }\r
+ catch ( final Exception e ) {\r
+ exception = true;\r
+ exceptionOccuredDuringSaveAs( e );\r
+ }\r
+ return exception;\r
+ }\r
+\r
+ boolean writeAsNexus( final Phylogeny t, boolean exception, final File file ) {\r
+ try {\r
+ final PhylogenyWriter writer = new PhylogenyWriter();\r
+ writer.toNexus( file, t, getOptions().getNhConversionSupportValueStyle() );\r
+ }\r
+ catch ( final Exception e ) {\r
+ exception = true;\r
+ exceptionOccuredDuringSaveAs( e );\r
+ }\r
+ return exception;\r
+ }\r
+\r
+ boolean writeAsPhyloXml( final Phylogeny t, boolean exception, final File file ) {\r
+ try {\r
+ final PhylogenyWriter writer = new PhylogenyWriter();\r
+ writer.toPhyloXML( file, t, 0 );\r
+ }\r
+ catch ( final Exception e ) {\r
+ exception = true;\r
+ exceptionOccuredDuringSaveAs( e );\r
+ }\r
+ return exception;\r
+ }\r
+\r
+ void writePhylogenyToGraphicsFile( final String file_name, final GraphicsExportType type ) {\r
+ _mainpanel.getCurrentTreePanel().calcParametersForPainting( _mainpanel.getCurrentTreePanel().getWidth(),\r
+ _mainpanel.getCurrentTreePanel().getHeight() );\r
+ String file_written_to = "";\r
+ boolean error = false;\r
+ try {\r
+ file_written_to = AptxUtil.writePhylogenyToGraphicsFile( file_name,\r
+ _mainpanel.getCurrentTreePanel().getWidth(),\r
+ _mainpanel.getCurrentTreePanel().getHeight(),\r
+ _mainpanel.getCurrentTreePanel(),\r
+ _mainpanel.getControlPanel(),\r
+ type,\r
+ getOptions() );\r
+ }\r
+ catch ( final IOException e ) {\r
+ error = true;\r
+ JOptionPane.showMessageDialog( this, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );\r
+ }\r
+ if ( !error ) {\r
+ if ( ( file_written_to != null ) && ( file_written_to.length() > 0 ) ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Wrote image to: " + file_written_to,\r
+ "Graphics Export",\r
+ JOptionPane.INFORMATION_MESSAGE );\r
+ }\r
+ else {\r
+ JOptionPane.showMessageDialog( this,\r
+ "There was an unknown problem when attempting to write to an image file: \""\r
+ + file_name + "\"",\r
+ "Error",\r
+ JOptionPane.ERROR_MESSAGE );\r
+ }\r
+ }\r
+ _contentpane.repaint();\r
+ }\r
+\r
+ void writeToFile( final Phylogeny t ) {\r
+ if ( t == null ) {\r
+ return;\r
+ }\r
+ String initial_filename = null;\r
+ if ( getMainPanel().getCurrentTreePanel().getTreeFile() != null ) {\r
+ try {\r
+ initial_filename = getMainPanel().getCurrentTreePanel().getTreeFile().getCanonicalPath();\r
+ }\r
+ catch ( final IOException e ) {\r
+ initial_filename = null;\r
+ }\r
+ }\r
+ if ( !ForesterUtil.isEmpty( initial_filename ) ) {\r
+ _save_filechooser.setSelectedFile( new File( initial_filename ) );\r
+ }\r
+ else {\r
+ _save_filechooser.setSelectedFile( new File( "" ) );\r
+ }\r
+ final File my_dir = getCurrentDir();\r
+ if ( my_dir != null ) {\r
+ _save_filechooser.setCurrentDirectory( my_dir );\r
+ }\r
+ final int result = _save_filechooser.showSaveDialog( _contentpane );\r
+ final File file = _save_filechooser.getSelectedFile();\r
+ setCurrentDir( _save_filechooser.getCurrentDirectory() );\r
+ boolean exception = false;\r
+ if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {\r
+ if ( file.exists() ) {\r
+ final int i = JOptionPane.showConfirmDialog( this,\r
+ file + " already exists.\nOverwrite?",\r
+ "Overwrite?",\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.QUESTION_MESSAGE );\r
+ if ( i != JOptionPane.OK_OPTION ) {\r
+ return;\r
+ }\r
+ else {\r
+ final File to = new File( file.getAbsoluteFile().toString() + Constants.BACKUP_FILE_SUFFIX );\r
+ try {\r
+ ForesterUtil.copyFile( file, to );\r
+ }\r
+ catch ( final Exception e ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Failed to create backup copy " + to,\r
+ "Failed to Create Backup Copy",\r
+ JOptionPane.WARNING_MESSAGE );\r
+ }\r
+ try {\r
+ file.delete();\r
+ }\r
+ catch ( final Exception e ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Failed to delete: " + file,\r
+ "Failed to Delete",\r
+ JOptionPane.WARNING_MESSAGE );\r
+ }\r
+ }\r
+ }\r
+ if ( _save_filechooser.getFileFilter() == MainFrame.nhfilter ) {\r
+ exception = writeAsNewHampshire( t, exception, file );\r
+ }\r
+ else if ( _save_filechooser.getFileFilter() == MainFrame.xmlfilter ) {\r
+ exception = writeAsPhyloXml( t, exception, file );\r
+ }\r
+ else if ( _save_filechooser.getFileFilter() == MainFrame.nexusfilter ) {\r
+ exception = writeAsNexus( t, exception, file );\r
+ }\r
+ // "*.*":\r
+ else {\r
+ final String file_name = file.getName().trim().toLowerCase();\r
+ if ( file_name.endsWith( ".nh" ) || file_name.endsWith( ".newick" ) || file_name.endsWith( ".phy" )\r
+ || file_name.endsWith( ".tree" ) ) {\r
+ exception = writeAsNewHampshire( t, exception, file );\r
+ }\r
+ else if ( file_name.endsWith( ".nex" ) || file_name.endsWith( ".nexus" ) ) {\r
+ exception = writeAsNexus( t, exception, file );\r
+ }\r
+ // XML is default:\r
+ else {\r
+ exception = writeAsPhyloXml( t, exception, file );\r
+ }\r
+ }\r
+ if ( !exception ) {\r
+ getMainPanel().setTitleOfSelectedTab( file.getName() );\r
+ getMainPanel().getCurrentTreePanel().setTreeFile( file );\r
+ getMainPanel().getCurrentTreePanel().setEdited( false );\r
+ }\r
+ }\r
+ }\r
+\r
+ void writeToGraphicsFile( final Phylogeny t, final GraphicsExportType type ) {\r
+ if ( ( t == null ) || t.isEmpty() ) {\r
+ return;\r
+ }\r
+ String initial_filename = "";\r
+ if ( getMainPanel().getCurrentTreePanel().getTreeFile() != null ) {\r
+ initial_filename = getMainPanel().getCurrentTreePanel().getTreeFile().toString();\r
+ }\r
+ if ( initial_filename.indexOf( '.' ) > 0 ) {\r
+ initial_filename = initial_filename.substring( 0, initial_filename.lastIndexOf( '.' ) );\r
+ }\r
+ initial_filename = initial_filename + "." + type;\r
+ _writetographics_filechooser.setSelectedFile( new File( initial_filename ) );\r
+ final File my_dir = getCurrentDir();\r
+ if ( my_dir != null ) {\r
+ _writetographics_filechooser.setCurrentDirectory( my_dir );\r
+ }\r
+ final int result = _writetographics_filechooser.showSaveDialog( _contentpane );\r
+ File file = _writetographics_filechooser.getSelectedFile();\r
+ setCurrentDir( _writetographics_filechooser.getCurrentDirectory() );\r
+ if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {\r
+ if ( !file.toString().toLowerCase().endsWith( type.toString() ) ) {\r
+ file = new File( file.toString() + "." + type );\r
+ }\r
+ if ( file.exists() ) {\r
+ final int i = JOptionPane.showConfirmDialog( this,\r
+ file + " already exists. Overwrite?",\r
+ "Warning",\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.WARNING_MESSAGE );\r
+ if ( i != JOptionPane.OK_OPTION ) {\r
+ return;\r
+ }\r
+ else {\r
+ try {\r
+ file.delete();\r
+ }\r
+ catch ( final Exception e ) {\r
+ JOptionPane.showMessageDialog( this,\r
+ "Failed to delete: " + file,\r
+ "Error",\r
+ JOptionPane.WARNING_MESSAGE );\r
+ }\r
+ }\r
+ }\r
+ writePhylogenyToGraphicsFile( file.toString(), type );\r
+ }\r
+ }\r
+\r
+ static File writeToPdf( final Phylogeny t,\r
+ final MainPanel mp,\r
+ JFileChooser writetopdf_filechooser,\r
+ File curr_dir,\r
+ Container contentpane ,\r
+ Component component ) {\r
+ if ( ( t == null ) || t.isEmpty() ) {\r
+ return null;\r
+ }\r
+ String initial_filename = "";\r
+ if (mp.getCurrentTreePanel().getTreeFile() != null ) {\r
+ initial_filename = mp.getCurrentTreePanel().getTreeFile().toString();\r
+ }\r
+ if ( initial_filename.indexOf( '.' ) > 0 ) {\r
+ initial_filename = initial_filename.substring( 0, initial_filename.lastIndexOf( '.' ) );\r
+ }\r
+ initial_filename = initial_filename + ".pdf";\r
+ writetopdf_filechooser.setSelectedFile( new File( initial_filename ) );\r
+ final File my_dir = curr_dir;\r
+ if ( my_dir != null ) {\r
+ writetopdf_filechooser.setCurrentDirectory( my_dir );\r
+ }\r
+ final int result = writetopdf_filechooser.showSaveDialog( contentpane );\r
+ File file = writetopdf_filechooser.getSelectedFile();\r
+ // setCurrentDir( writetopdf_filechooser.getCurrentDirectory() );\r
+ final File new_current_dir = writetopdf_filechooser.getCurrentDirectory();\r
+ if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {\r
+ if ( !file.toString().toLowerCase().endsWith( ".pdf" ) ) {\r
+ file = new File( file.toString() + ".pdf" );\r
+ }\r
+ if ( file.exists() ) {\r
+ final int i = JOptionPane.showConfirmDialog( component,\r
+ file + " already exists. Overwrite?",\r
+ "WARNING",\r
+ JOptionPane.OK_CANCEL_OPTION,\r
+ JOptionPane.WARNING_MESSAGE );\r
+ if ( i != JOptionPane.OK_OPTION ) {\r
+ return null;\r
+ }\r
+ }\r
+ printPhylogenyToPdf( file.toString() );\r
+ }\r
+ return new_current_dir;\r
+ }\r
+\r