package gov.lanl.application.TPTD.applet;
import java.awt.Color;
import java.awt.Container;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.GraphicsEnvironment;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import javax.imageio.ImageIO;
import javax.swing.JFileChooser;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.filechooser.FileFilter;
import org.forester.archaeopteryx.Configuration;
import org.forester.archaeopteryx.Constants;
import org.forester.archaeopteryx.ControlPanel;
import org.forester.archaeopteryx.MainFrame;
import org.forester.archaeopteryx.MainFrameApplet;
import org.forester.archaeopteryx.MainFrameApplication;
import org.forester.archaeopteryx.Options;
import org.forester.archaeopteryx.TreePanel;
import org.forester.archaeopteryx.Util;
import org.forester.archaeopteryx.Options.PHYLOGENY_GRAPHICS_TYPE;
import org.forester.archaeopteryx.webservices.PhylogeniesWebserviceClient;
import org.forester.archaeopteryx.webservices.WebservicesManager;
import org.forester.io.writers.PhylogenyWriter;
import org.forester.phylogeny.Phylogeny;
import org.forester.util.ForesterUtil;
import org.forester.archaeopteryx.PdfExporter;
public class AppletFileMenu implements ActionListener {
JMenu _file_jmenu;
private JMenuItem _write_to_pdf_item;
private JMenuItem _write_to_jpg_item;
private JMenuItem _write_to_png_item;
private JMenuItem _print_item;
public final static NHFilter nhfilter = new NHFilter();
public final static NHXFilter nhxfilter = new NHXFilter();
public final static XMLFilter xmlfilter = new XMLFilter();
public final static NexusFilter nexusfilter = new NexusFilter();
public final static PdfFilter pdffilter = new PdfFilter();
public final static GraphicsFileFilter graphicsfilefilter = new GraphicsFileFilter();
private final JFileChooser _save_filechooser;
private final JFileChooser _writetopdf_filechooser;
private final JFileChooser _writetographics_filechooser;
private File _open_dir;
JMenuItem _save_item;
final static String[] DEFAULT_FONT_CHOICES = { "Verdana", "Tahoma", "Arial", "Helvetica",
"Dialog", "Lucida Sans", "SansSerif", "Sans-serif", "Sans" };
final static Color MENU_BACKGROUND_COLOR_DEFAULT = new Color( 0, 0, 0 );
final static Color MENU_TEXT_COLOR_DEFAULT = new Color( 255, 255, 255 );
private final static String[] AVAILABLE_FONT_FAMILIES_SORTED = GraphicsEnvironment.getLocalGraphicsEnvironment()
.getAvailableFontFamilyNames();
static {
Arrays.sort( AVAILABLE_FONT_FAMILIES_SORTED );
}
private static String DEFAULT_FONT_FAMILY = "";
static {
for( final String font_name : DEFAULT_FONT_CHOICES ) {
if ( Arrays.binarySearch( AVAILABLE_FONT_FAMILIES_SORTED, font_name ) >= 0 ) {
DEFAULT_FONT_FAMILY = font_name;
break;
}
}
if ( ForesterUtil.isEmpty( DEFAULT_FONT_FAMILY ) ) {
DEFAULT_FONT_FAMILY = DEFAULT_FONT_CHOICES[ DEFAULT_FONT_CHOICES.length - 1 ];
}
}
final static String PRG_NAME = "Archaeopteryx";
final static Font menu_font = new Font( DEFAULT_FONT_FAMILY,
Font.PLAIN,
10 );
public MainFrameApplet mainFrameApplet;
public AppletFileMenu(MainFrameApplet mfa ){
this.mainFrameApplet = mfa;
_save_filechooser =new JFileChooser();
_save_filechooser.setCurrentDirectory( new File( "." ) );
_save_filechooser.setMultiSelectionEnabled( false );
_save_filechooser.setFileFilter( AppletFileMenu.xmlfilter );
_save_filechooser.addChoosableFileFilter( AppletFileMenu.nhxfilter );
_save_filechooser.addChoosableFileFilter( AppletFileMenu.nhfilter );
_save_filechooser.addChoosableFileFilter( AppletFileMenu.nexusfilter );
_save_filechooser.addChoosableFileFilter( _save_filechooser.getAcceptAllFileFilter() );
_writetopdf_filechooser = new JFileChooser();
_writetopdf_filechooser.addChoosableFileFilter( AppletFileMenu.pdffilter );
_writetographics_filechooser = new JFileChooser();
_writetographics_filechooser.addChoosableFileFilter( AppletFileMenu.graphicsfilefilter );
}
public void buildFileMenu(JMenuBar _jmenubar,Configuration conf) {
_file_jmenu = createMenu( "File", conf );
_file_jmenu.add( _save_item = new JMenuItem( "Save Tree As..." ) );
_file_jmenu.addSeparator();
//if(!AppletParams.isTreeDecoratorForAll()){
_file_jmenu.add( _write_to_pdf_item = new JMenuItem( "Export to PDF file ..." ) );
//}
/* if ( Util.canWriteFormat( "tif" ) || Util.canWriteFormat( "tiff" ) || Util.canWriteFormat( "TIF" ) ) {
_file_jmenu.add( _write_to_tif_item = new JMenuItem( "Export to TIFF file..." ) );
}*/
_file_jmenu.add( _write_to_png_item = new JMenuItem( "Export to PNG file..." ) );
_file_jmenu.add( _write_to_jpg_item = new JMenuItem( "Export to JPG file..." ) );
/* if ( Util.canWriteFormat( "gif" ) ) {
_file_jmenu.add( _write_to_gif_item = new JMenuItem( "Export to GIF file..." ) );
}
if ( Util.canWriteFormat( "bmp" ) ) {
_file_jmenu.add( _write_to_bmp_item = new JMenuItem( "Export to BMP file..." ) );
}*/
_file_jmenu.addSeparator();
_file_jmenu.add( _print_item = new JMenuItem( "Print..." ) );
customizeJMenuItem( _save_item,conf );
customizeJMenuItem( _write_to_pdf_item,conf );
customizeJMenuItem( _write_to_png_item,conf );
customizeJMenuItem( _write_to_jpg_item,conf);
customizeJMenuItem( _print_item,conf);
_jmenubar.add( _file_jmenu );
}
static JMenu createMenu( final String title, final Configuration conf ) {
final JMenu jmenu = new JMenu( title );
if ( !conf.isUseNativeUI() ) {
jmenu.setFont( MainFrame.menu_font );
jmenu.setBackground( conf.getGuiMenuBackgroundColor() );
jmenu.setForeground( conf.getGuiMenuTextColor() );
}
return jmenu;
}
void customizeJMenuItem( final JMenuItem jmi, Configuration conf ) {
if ( jmi != null ) {
jmi.setFont( MainFrame.menu_font );
if ( !conf.isUseNativeUI() ) {
jmi.setBackground( conf.getGuiMenuBackgroundColor() );
jmi.setForeground( conf.getGuiMenuTextColor() );
}
jmi.addActionListener( this );
}
}
public void actionPerformed( final ActionEvent e ) {
try {
final Object o = e.getSource();
if ( o == _save_item ) {
writeToFile( mainFrameApplet.get_main_panel().get_current_phylogeny() );
// If subtree currently displayed, save it, instead of complete
// tree.
}
else if ( o == _write_to_pdf_item ) {
printToPdf( mainFrameApplet.get_main_panel().get_current_phylogeny() );
}
else if ( o == _write_to_jpg_item ) {
writeToGraphicsFile( mainFrameApplet.get_main_panel().get_current_phylogeny(), GraphicsExportType.JPG );
}
else if ( o == _write_to_png_item ) {
writeToGraphicsFile( mainFrameApplet.get_main_panel().get_current_phylogeny(), GraphicsExportType.PNG );
}
else if ( o == _print_item ) {
print();
}
mainFrameApplet.get_content_pane().repaint();
}
catch ( final Exception ex ) {
unexpectedException(ex);
}
catch ( final Error err ) {
unexpectedError(err);
}
}
private void writeToFile( final Phylogeny t ) {
if ( t == null ) {
return;
}
String initial_filename = null;
if ( mainFrameApplet.get_main_panel().get_current_treePanel().get_tree_file() != null ) {
try {
initial_filename = mainFrameApplet.get_main_panel().get_current_treePanel().get_tree_file().getCanonicalPath();
}
catch ( final IOException e ) {
initial_filename = null;
}
}
if ( !ForesterUtil.isEmpty( initial_filename ) ) {
_save_filechooser.setSelectedFile( new File( initial_filename ) );
}
else {
_save_filechooser.setSelectedFile( new File( "" ) );
}
if ( _open_dir != null ) {
_save_filechooser.setCurrentDirectory( _open_dir );
}
else {
File dir = null;
if ( System.getProperty( "user.home" ) != null ) {
dir = new File( System.getProperty( "user.home" ) );
}
else if ( System.getProperty( "user.dir" ) != null ) {
dir = new File( System.getProperty( "user.dir" ) );
}
_save_filechooser.setCurrentDirectory( dir );
}
final int result = _save_filechooser.showSaveDialog( mainFrameApplet.get_content_pane() );
final File file = _save_filechooser.getSelectedFile();
boolean exception = false;
if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {
if ( file.exists() ) {
final int i = JOptionPane.showConfirmDialog( mainFrameApplet,
file + " already exists. Overwrite?",
"Warning",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE );
if ( i != JOptionPane.OK_OPTION ) {
return;
}
}
if ( _save_filechooser.getFileFilter() == nhfilter ) {
exception = writeAsNewHampshire( t, exception, file );
}
else if ( _save_filechooser.getFileFilter() == nhxfilter ) {
exception = writeAsNHX( t, exception, file );
}
else if ( _save_filechooser.getFileFilter() == xmlfilter ) {
exception = writeAsPhyloXml( t, exception, file );
}
else if ( _save_filechooser.getFileFilter() == nexusfilter ) {
exception = writeAsNexus( t, exception, file );
}
// "*.*":
else {
final String file_name = file.getName().trim().toLowerCase();
if ( file_name.endsWith( ".nh" ) || file_name.endsWith( ".newick" ) || file_name.endsWith( ".phy" )
|| file_name.endsWith( ".tree" ) ) {
exception = writeAsNewHampshire( t, exception, file );
}
else if ( file_name.endsWith( ".nhx" ) ) {
exception = writeAsNHX( t, exception, file );
}
else if ( file_name.endsWith( ".nex" ) || file_name.endsWith( ".nexus" ) ) {
exception = writeAsNexus( t, exception, file );
}
// XML is default:
else {
exception = writeAsPhyloXml( t, exception, file );
}
}
if ( !exception ) {
mainFrameApplet.get_main_panel().get_current_treePanel().set_tree_file( file );
}
}
}
private boolean writeAsNewHampshire( final Phylogeny t, boolean exception, final File file ) {
try {
final PhylogenyWriter writer = new PhylogenyWriter();
writer.toNewHampshire( t, false, true, file );
}
catch ( final Exception e ) {
exception = true;
exceptionOccuredDuringSaveAs( e );
}
return exception;
}
private boolean writeAsNexus( final Phylogeny t, boolean exception, final File file ) {
try {
final PhylogenyWriter writer = new PhylogenyWriter();
writer.toNexus( file, t );
}
catch ( final Exception e ) {
exception = true;
exceptionOccuredDuringSaveAs( e );
}
return exception;
}
private boolean writeAsNHX( final Phylogeny t, boolean exception, final File file ) {
try {
final PhylogenyWriter writer = new PhylogenyWriter();
writer.toNewHampshireX( t, file );
}
catch ( final Exception e ) {
exception = true;
exceptionOccuredDuringSaveAs( e );
}
return exception;
}
private boolean writeAsPhyloXml( final Phylogeny t, boolean exception, final File file ) {
try {
final PhylogenyWriter writer = new PhylogenyWriter();
writer.toPhyloXML( file, t, 0 );
}
catch ( final Exception e ) {
exception = true;
exceptionOccuredDuringSaveAs( e );
}
return exception;
}
void exceptionOccuredDuringSaveAs( final Exception e ) {
try {
mainFrameApplet.get_main_panel().get_current_treePanel().set_arrow_cursor();
}
catch ( final Exception ex ) {
// Do nothing.
}
JOptionPane.showMessageDialog( mainFrameApplet, "Exception" + e, "Error during File|SaveAs", JOptionPane.ERROR_MESSAGE );
}
private void printToPdf( final Phylogeny t ) {
if ( ( t == null ) || t.isEmpty() ) {
return;
}
if ( ( mainFrameApplet.get_main_panel().get_current_treePanel().get_phylogeny_graphicsType() == PHYLOGENY_GRAPHICS_TYPE.CONVEX )
|| ( mainFrameApplet.get_main_panel().get_current_treePanel().get_phylogeny_graphicsType() == PHYLOGENY_GRAPHICS_TYPE.CURVED ) ) {
JOptionPane.showMessageDialog( mainFrameApplet,
"Cannot export this graphic type to PDF.",
"Cannot export to PDF",
JOptionPane.ERROR_MESSAGE );
return;
}
String initial_filename = "";
if ( mainFrameApplet.get_main_panel().get_current_treePanel().get_tree_file() != null ) {
initial_filename = mainFrameApplet.get_main_panel().get_current_treePanel().get_tree_file().toString();
}
if ( initial_filename.indexOf( '.' ) > 0 ) {
initial_filename = initial_filename.substring( 0, initial_filename.indexOf( '.' ) );
}
initial_filename = initial_filename + ".pdf";
_writetopdf_filechooser.setSelectedFile( new File( initial_filename ) );
final int result = _writetopdf_filechooser.showSaveDialog( mainFrameApplet.get_content_pane() );
File file = _writetopdf_filechooser.getSelectedFile();
if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {
if ( !file.toString().toLowerCase().endsWith( ".pdf" ) ) {
file = new File( file.toString() + ".pdf" );
}
if ( file.exists() ) {
final int i = JOptionPane.showConfirmDialog( mainFrameApplet,
file + " already exists. Overwrite?",
"WARNING",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE );
if ( i != JOptionPane.OK_OPTION ) {
return;
}
}
printPhylogenyToPdf( file.toString() );
}
}
private void printPhylogenyToPdf( final String file_name ) {
if ( !mainFrameApplet.get_options().is_print_usingActualSize() ) {
mainFrameApplet.get_main_panel().get_current_treePanel().setParametersForPainting( mainFrameApplet.get_options().get_print_sizeX(),
mainFrameApplet.get_options().get_print_sizeY(),
true );
mainFrameApplet.get_main_panel().get_current_treePanel().resetPreferredSize();
mainFrameApplet.get_main_panel().get_current_treePanel().repaint();
}
String pdf_written_to = "";
boolean error = false;
try {
if ( mainFrameApplet.get_options().is_print_usingActualSize() ) {
pdf_written_to = PdfExporter.writePhylogenyToPdf( file_name,
mainFrameApplet.get_main_panel().get_current_treePanel(),
mainFrameApplet.get_main_panel().get_current_treePanel().getWidth(),
mainFrameApplet.get_main_panel().get_current_treePanel().getHeight() );
}
else {
pdf_written_to = PdfExporter.writePhylogenyToPdf( file_name,
mainFrameApplet.get_main_panel().get_current_treePanel(),
mainFrameApplet.get_options().get_print_sizeX(),
mainFrameApplet.get_options().get_print_sizeY() );
}
}
catch ( final IOException e ) {
error = true;
JOptionPane.showMessageDialog( mainFrameApplet, e.toString(), "Error", JOptionPane.ERROR_MESSAGE );
}
if ( !error ) {
if ( !ForesterUtil.isEmpty( pdf_written_to ) ) {
JOptionPane.showMessageDialog( mainFrameApplet,
"Wrote PDF to: " + pdf_written_to,
"Information",
JOptionPane.INFORMATION_MESSAGE );
}
else {
JOptionPane.showMessageDialog( mainFrameApplet,
"There was an unknown problem when attempting to write to PDF file: \""
+ file_name + "\"",
"Error",
JOptionPane.ERROR_MESSAGE );
}
}
if ( !mainFrameApplet.get_options().is_print_usingActualSize() ) {
mainFrameApplet.get_main_panel().get_control_panel().show_whole();
}
}
private void writeToGraphicsFile( final Phylogeny t, final GraphicsExportType type ) {
if ( ( t == null ) || t.isEmpty() ) {
return;
}
String initial_filename = "";
if ( mainFrameApplet.get_main_panel().get_current_treePanel().get_tree_file() != null ) {
initial_filename = mainFrameApplet.get_main_panel().get_current_treePanel().get_tree_file().toString();
}
if ( initial_filename.indexOf( '.' ) > 0 ) {
initial_filename = initial_filename.substring( 0, initial_filename.indexOf( '.' ) );
}
initial_filename = initial_filename + "." + type;
_writetographics_filechooser.setSelectedFile( new File( initial_filename ) );
final int result = _writetographics_filechooser.showSaveDialog( mainFrameApplet.get_content_pane() );
File file = _writetographics_filechooser.getSelectedFile();
if ( ( file != null ) && ( result == JFileChooser.APPROVE_OPTION ) ) {
if ( !file.toString().toLowerCase().endsWith( type.toString() ) ) {
file = new File( file.toString() + "." + type );
}
if ( file.exists() ) {
final int i = JOptionPane.showConfirmDialog( mainFrameApplet,
file + " already exists. Overwrite?",
"Warning",
JOptionPane.OK_CANCEL_OPTION,
JOptionPane.WARNING_MESSAGE );
if ( i != JOptionPane.OK_OPTION ) {
return;
}
}
writePhylogenyToGraphicsFile( file.toString(), type );
}
}
private void writePhylogenyToGraphicsFile( final String file_name, final GraphicsExportType type ) {
mainFrameApplet.get_main_panel().get_current_treePanel().setParametersForPainting( mainFrameApplet.get_main_panel().get_current_treePanel().getWidth(),
mainFrameApplet.get_main_panel().get_current_treePanel().getHeight(),
true );
String file_written_to = "";
boolean error = false;
try {
file_written_to = writePhylogenyToGraphicsFile( file_name,
mainFrameApplet.get_main_panel().get_current_treePanel().getWidth(),
mainFrameApplet.get_main_panel().get_current_treePanel().getHeight(),
mainFrameApplet.get_main_panel().get_current_treePanel(),
mainFrameApplet.get_main_panel().get_control_panel(),
type,
mainFrameApplet.get_options());
}
catch ( final IOException e ) {
error = true;
JOptionPane.showMessageDialog( mainFrameApplet, e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE );
}
if ( !error ) {
if ( ( file_written_to != null ) && ( file_written_to.length() > 0 ) ) {
JOptionPane.showMessageDialog( mainFrameApplet,
"Wrote image to: " + file_written_to,
"Graphics Export",
JOptionPane.INFORMATION_MESSAGE );
}
else {
JOptionPane.showMessageDialog( mainFrameApplet,
"There was an unknown problem when attempting to write to an image file: \""
+ file_name + "\"",
"Error",
JOptionPane.ERROR_MESSAGE );
}
}
mainFrameApplet.get_content_pane().repaint();
}
private void print() {
if ( ( mainFrameApplet.get_main_panel().get_current_treePanel() == null ) ||
( mainFrameApplet.get_main_panel().get_current_treePanel().getCurrentPhylogeny() == null )
|| mainFrameApplet.get_main_panel().get_current_treePanel().getCurrentPhylogeny().isEmpty() ) {
return;
}
if ( !mainFrameApplet.get_options().is_print_usingActualSize() ) {
mainFrameApplet.get_main_panel().get_current_treePanel().setParametersForPainting( mainFrameApplet.get_options().get_print_sizeX() - 80,
mainFrameApplet.get_options().get_print_sizeY() - 140,
true );
mainFrameApplet.get_main_panel().get_current_treePanel().resetPreferredSize();
mainFrameApplet.get_main_panel().get_current_treePanel().repaint();
}
final String job_name = PRG_NAME;
boolean error = false;
String printer_name = null;
try {
printer_name = AppletPrinter.print( mainFrameApplet.get_main_panel().get_current_treePanel(), job_name );
}
catch ( final Exception e ) {
error = true;
JOptionPane.showMessageDialog( mainFrameApplet, e.getMessage(), "Printing Error", JOptionPane.ERROR_MESSAGE );
}
if ( !error && ( printer_name != null ) ) {
String msg = "Printing data sent to printer";
if ( printer_name.length() > 1 ) {
msg += " [" + printer_name + "]";
}
JOptionPane.showMessageDialog( mainFrameApplet, msg, "Printing...", JOptionPane.INFORMATION_MESSAGE );
}
if ( !mainFrameApplet.get_options().is_print_usingActualSize() ) {
mainFrameApplet.get_main_panel().get_control_panel().show_whole();
}
}
static String writePhylogenyToGraphicsFile( final String file_name,
int width,
int height,
final TreePanel tree_panel,
final ControlPanel ac,
final GraphicsExportType type,
final Options options ) throws IOException {
if ( !options.is_graphics_exportUsingActualSize() ) {
if ( options.is_graphics_exportVisibleOnly() ) {
throw new IllegalArgumentException( "cannot export visible rectangle only without exporting in actual size" );
}
tree_panel.setParametersForPainting( options.get_print_sizeX(), options.get_print_sizeY(), true );
tree_panel.resetPreferredSize();
tree_panel.repaint();
}
final RenderingHints rendering_hints = new RenderingHints( RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY );
rendering_hints.put( RenderingHints.KEY_COLOR_RENDERING, RenderingHints.VALUE_COLOR_RENDER_QUALITY );
if ( options.is_antialias_print() ) {
rendering_hints.put( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON );
rendering_hints.put( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
}
else {
rendering_hints.put( RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_OFF );
rendering_hints.put( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF );
}
final Phylogeny phylogeny = tree_panel.getCurrentPhylogeny();
if ( ( phylogeny == null ) || phylogeny.isEmpty() ) {
return "";
}
final File file = new File( file_name );
if ( file.isDirectory() ) {
throw new IOException( "\"" + file_name + "\" is a directory" );
}
Rectangle visible = null;
if ( !options.is_graphics_exportUsingActualSize() ) {
width = options.get_print_sizeX();
height = options.get_print_sizeY();
}
else if ( options.is_graphics_exportVisibleOnly() ) {
visible = tree_panel.getVisibleRect();
width = visible.width;
height = visible.height;
}
final BufferedImage buffered_img = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
Graphics2D g2d = buffered_img.createGraphics();
g2d.setRenderingHints( rendering_hints );
int x = 0;
int y = 0;
if ( options.is_graphics_exportVisibleOnly() ) {
g2d = ( Graphics2D ) g2d.create( -visible.x, -visible.y, visible.width, visible.height );
g2d.setClip( null );
x = visible.x;
y = visible.y;
}
tree_panel.paintPhylogeny( g2d, false, true, width, height, x, y );
ImageIO.write( buffered_img, type.toString(), file );
g2d.dispose();
System.gc();
if ( !options.is_graphics_exportUsingActualSize() ) {
tree_panel.getMainPanel().get_control_panel().show_whole();
}
String msg = file.toString();
if ( ( width > 0 ) && ( height > 0 ) ) {
msg += " [size: " + width + ", " + height + "]";
}
return msg;
}
static enum GraphicsExportType {
GIF( "gif" ), JPG( "jpg" ), PDF( "pdf" ), PNG( "png" ), TIFF( "tif" ), BMP( "bmp" );
private final String _suffix;
private GraphicsExportType( final String suffix ) {
_suffix = suffix;
}
@Override
public String toString() {
return _suffix;
}
}
static void unexpectedError( final Error err ) {
err.printStackTrace();
final StringBuffer sb = new StringBuffer();
for( final StackTraceElement s : err.getStackTrace() ) {
sb.append( s + "\n" );
}
JOptionPane
.showMessageDialog( null,
"An unexpected (possibly severe) error has occured - terminating. \n"+
"Error: " + err + "\n" + sb,
"Unexpected Severe Error",
JOptionPane.ERROR_MESSAGE );
System.exit( -1 );
}
static void unexpectedException( final Exception ex ) {
ex.printStackTrace();
final StringBuffer sb = new StringBuffer();
for( final StackTraceElement s : ex.getStackTrace() ) {
sb.append( s + "\n" );
}
JOptionPane.showMessageDialog( null, "An unexpected exception has occured.\n " +
"Exception: " + ex + "\n" + sb,
"Unexpected Exception",
JOptionPane.ERROR_MESSAGE );
}
} //AppletFileMenu
class GraphicsFileFilter extends FileFilter {
@Override
public boolean accept( final File f ) {
final String file_name = f.getName().trim().toLowerCase();
return file_name.endsWith( ".jpg" ) || file_name.endsWith( ".jpeg" ) || file_name.endsWith( ".png" )
|| file_name.endsWith( ".gif" ) || file_name.endsWith( ".bmp" ) || f.isDirectory();
}
@Override
public String getDescription() {
return "Image files (*.jpg, *.jpeg, *.png, *.gif, *.bmp)";
}
}
class NexusFilter extends FileFilter {
@Override
public boolean accept( final File f ) {
final String file_name = f.getName().trim().toLowerCase();
return file_name.endsWith( ".nex" ) || file_name.endsWith( ".nexus" ) || file_name.endsWith( ".nx" )
|| file_name.endsWith( ".tre" ) || f.isDirectory();
}
@Override
public String getDescription() {
return "Nexus files (*.nex, *.nexus, *.nx, *.tre)";
}
} // NexusFilter
class NHFilter extends FileFilter {
@Override
public boolean accept( final File f ) {
final String file_name = f.getName().trim().toLowerCase();
return file_name.endsWith( ".nh" ) || file_name.endsWith( ".newick" ) || file_name.endsWith( ".phy" )
|| file_name.endsWith( ".tr" ) || file_name.endsWith( ".tree" ) || file_name.endsWith( ".dnd" )
|| f.isDirectory();
}
@Override
public String getDescription() {
return "New Hampshire - Newick files (*.nh, *.newick, *.phy, *.tree, *.dnd, *.tr)";
}
} // NHFilter
class NHXFilter extends FileFilter {
@Override
public boolean accept( final File f ) {
final String file_name = f.getName().trim().toLowerCase();
return file_name.endsWith( ".nhx" ) || f.isDirectory();
}
@Override
public String getDescription() {
return "NHX files (*.nhx)";
}
}
class PdfFilter extends FileFilter {
public boolean accept( final File f ) {
return f.getName().trim().toLowerCase().endsWith( ".pdf" ) || f.isDirectory();
}
@Override
public String getDescription() {
return "PDF files (*.pdf)";
}
} // PdfFilter
class TolFilter extends FileFilter {
@Override
public boolean accept( final File f ) {
final String file_name = f.getName().trim().toLowerCase();
return ( file_name.endsWith( ".tol" ) || file_name.endsWith( ".tolxml" ) || file_name.endsWith( ".zip" ) || f
.isDirectory() )
&& ( !file_name.endsWith( ".xml.zip" ) );
}
@Override
public String getDescription() {
return "Tree of Life files (*.tol, *.tolxml)";
}
} // TolFilter
class XMLFilter extends FileFilter {
@Override
public boolean accept( final File f ) {
final String file_name = f.getName().trim().toLowerCase();
return file_name.endsWith( ".xml" ) || file_name.endsWith( ".phyloxml" ) || file_name.endsWith( ".px" )
|| file_name.endsWith( ".pxml" ) || file_name.endsWith( ".zip" ) || f.isDirectory();
}
@Override
public String getDescription() {
return "phyloXML files (*.xml, *.phyloxml)";
}
} // XMLFilter