X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FTreePanel.java;h=533093c86a68fb6c8fa4500e077777ec6156d811;hb=a3ab1c26605a4ffaaa5e8fd0927250c53c884bf9;hp=f58553afee4a97360aea4d440421a21f996ad323;hpb=f6d7dfa06e34eaf7cc773cf7484e7b641296d452;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/TreePanel.java b/forester/java/src/org/forester/archaeopteryx/TreePanel.java index f58553a..533093c 100644 --- a/forester/java/src/org/forester/archaeopteryx/TreePanel.java +++ b/forester/java/src/org/forester/archaeopteryx/TreePanel.java @@ -100,6 +100,7 @@ import org.forester.archaeopteryx.phylogeny.data.RenderableVector; import org.forester.archaeopteryx.tools.Blast; import org.forester.archaeopteryx.tools.ImageLoader; import org.forester.io.parsers.phyloxml.PhyloXmlUtil; +import org.forester.io.writers.SequenceWriter; import org.forester.phylogeny.Phylogeny; import org.forester.phylogeny.PhylogenyMethods; import org.forester.phylogeny.PhylogenyMethods.DESCENDANT_SORT_PRIORITY; @@ -129,113 +130,112 @@ import org.forester.util.SequenceIdParser; public final class TreePanel extends JPanel implements ActionListener, MouseWheelListener, Printable { - private static final float PI = ( float ) ( Math.PI ); - private static final double TWO_PI = 2 * Math.PI; - private static final float ONEHALF_PI = ( float ) ( 1.5 * Math.PI ); - private static final float HALF_PI = ( float ) ( Math.PI / 2.0 ); - private static final float ANGLE_ROTATION_UNIT = ( float ) ( Math.PI / 32 ); - private static final short OV_BORDER = 10; - final static Cursor CUT_CURSOR = Cursor.getPredefinedCursor( Cursor.CROSSHAIR_CURSOR ); - final static Cursor MOVE_CURSOR = Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR ); - final static Cursor ARROW_CURSOR = Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR ); - final static Cursor HAND_CURSOR = Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ); - final static Cursor WAIT_CURSOR = Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR ); - private final static long serialVersionUID = -978349745916505029L; - private final static int EURO_D = 10; - private final static String NODE_POPMENU_NODE_CLIENT_PROPERTY = "node"; - private final static int MIN_ROOT_LENGTH = 3; - private final static int MAX_SUBTREES = 100; - private final static int MAX_NODE_FRAMES = 10; - private final static int MOVE = 20; - private final static NumberFormat FORMATTER_CONFIDENCE; - private final static NumberFormat FORMATTER_BRANCH_LENGTH; - private final static int WIGGLE = 2; - private final static int LIMIT_FOR_HQ_RENDERING = 1000; - private final static int CONFIDENCE_LEFT_MARGIN = 4; - private final RenderingHints _rendering_hints = new RenderingHints( RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_DEFAULT ); - private File _treefile = null; - private Configuration _configuration = null; - private final NodeFrame[] _node_frames = new NodeFrame[ TreePanel.MAX_NODE_FRAMES ]; - private int _node_frame_index = 0; - private Phylogeny _phylogeny = null; - private final Phylogeny[] _sub_phylogenies = new Phylogeny[ TreePanel.MAX_SUBTREES ]; - private final PhylogenyNode[] _sub_phylogenies_temp_roots = new PhylogenyNode[ TreePanel.MAX_SUBTREES ]; - private int _subtree_index = 0; - private MainPanel _main_panel = null; - private Set _found_nodes = null; - private PhylogenyNode _highlight_node = null; - private JPopupMenu _node_popup_menu = null; - private JMenuItem _node_popup_menu_items[] = null; - private int _longest_ext_node_info = 0; - private float _x_correction_factor = 0.0f; - private float _ov_x_correction_factor = 0.0f; - private float _x_distance = 0.0f; - private float _y_distance = 0.0f; - private PHYLOGENY_GRAPHICS_TYPE _graphics_type = PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR; - private double _domain_structure_width = Constants.DOMAIN_STRUCTURE_DEFAULT_WIDTH; - private int _domain_structure_e_value_thr_exp = Constants.DOMAIN_STRUCTURE_E_VALUE_THR_DEFAULT_EXP; - private float _last_drag_point_x = 0; - private float _last_drag_point_y = 0; - private ControlPanel _control_panel = null; - private int _external_node_index = 0; - private final Polygon _polygon = new Polygon(); - private final StringBuilder _sb = new StringBuilder(); - private JColorChooser _color_chooser = null; - private double _scale_distance = 0.0; - private String _scale_label = null; - private final CubicCurve2D _cubic_curve = new CubicCurve2D.Float(); - private final QuadCurve2D _quad_curve = new QuadCurve2D.Float(); - private final Line2D _line = new Line2D.Float(); - private final Ellipse2D _ellipse = new Ellipse2D.Float(); - private final Rectangle2D _rectangle = new Rectangle2D.Float(); - private Options _options = null; - private float _ov_max_width = 0; - private float _ov_max_height = 0; - private int _ov_x_position = 0; - private int _ov_y_position = 0; - private int _ov_y_start = 0; - private float _ov_y_distance = 0; - private float _ov_x_distance = 0; - private boolean _ov_on = false; - private double _urt_starting_angle = ( float ) ( Math.PI / 2 ); - private float _urt_factor = 1; - private float _urt_factor_ov = 1; - private final boolean _phy_has_branch_lengths; - private final Rectangle2D _ov_rectangle = new Rectangle2D.Float(); - private boolean _in_ov_rect = false; - private boolean _in_ov = false; - private final Rectangle _ov_virtual_rectangle = new Rectangle(); - final private static double _180_OVER_PI = 180.0 / Math.PI; - private static final float ROUNDED_D = 8; - private int _circ_max_depth; - private PhylogenyNode _root; - final private Arc2D _arc = new Arc2D.Double(); - final private HashMap _urt_nodeid_angle_map = new HashMap(); - final private HashMap _urt_nodeid_index_map = new HashMap(); - final private Set _collapsed_external_nodeid_set = new HashSet(); - HashMap _nodeid_dist_to_leaf = new HashMap(); - private AffineTransform _at; - private double _max_distance_to_root = -1; - private int _dynamic_hiding_factor = 0; - private boolean _edited = false; - private Popup _node_desc_popup; - private JTextArea _rollover_popup; - private final StringBuffer _popup_buffer = new StringBuffer(); - final private static Font POPUP_FONT = new Font( Configuration - .getDefaultFontFamilyName(), - Font.PLAIN, - 12 ); - private Sequence _query_sequence = null; - private final FontRenderContext _frc = new FontRenderContext( null, - false, - false ); + private static final float PI = ( float ) ( Math.PI ); + private static final double TWO_PI = 2 * Math.PI; + private static final float ONEHALF_PI = ( float ) ( 1.5 * Math.PI ); + private static final float HALF_PI = ( float ) ( Math.PI / 2.0 ); + private static final float ANGLE_ROTATION_UNIT = ( float ) ( Math.PI / 32 ); + private static final short OV_BORDER = 10; + final static Cursor CUT_CURSOR = Cursor.getPredefinedCursor( Cursor.CROSSHAIR_CURSOR ); + final static Cursor MOVE_CURSOR = Cursor.getPredefinedCursor( Cursor.MOVE_CURSOR ); + final static Cursor ARROW_CURSOR = Cursor.getPredefinedCursor( Cursor.DEFAULT_CURSOR ); + final static Cursor HAND_CURSOR = Cursor.getPredefinedCursor( Cursor.HAND_CURSOR ); + final static Cursor WAIT_CURSOR = Cursor.getPredefinedCursor( Cursor.WAIT_CURSOR ); + private final static long serialVersionUID = -978349745916505029L; + private final static int EURO_D = 10; + private final static String NODE_POPMENU_NODE_CLIENT_PROPERTY = "node"; + private final static int MIN_ROOT_LENGTH = 3; + private final static int MAX_SUBTREES = 100; + private final static int MAX_NODE_FRAMES = 10; + private final static int MOVE = 20; + private final static NumberFormat FORMATTER_CONFIDENCE; + private final static NumberFormat FORMATTER_BRANCH_LENGTH; + private final static int WIGGLE = 2; + private final static int LIMIT_FOR_HQ_RENDERING = 1000; + private final static int CONFIDENCE_LEFT_MARGIN = 4; + private final RenderingHints _rendering_hints = new RenderingHints( RenderingHints.KEY_RENDERING, + RenderingHints.VALUE_RENDER_DEFAULT ); + private File _treefile = null; + private Configuration _configuration = null; + private final NodeFrame[] _node_frames = new NodeFrame[ TreePanel.MAX_NODE_FRAMES ]; + private int _node_frame_index = 0; + private Phylogeny _phylogeny = null; + private final Phylogeny[] _sub_phylogenies = new Phylogeny[ TreePanel.MAX_SUBTREES ]; + private final PhylogenyNode[] _sub_phylogenies_temp_roots = new PhylogenyNode[ TreePanel.MAX_SUBTREES ]; + private int _subtree_index = 0; + private MainPanel _main_panel = null; + private Set _found_nodes = null; + private PhylogenyNode _highlight_node = null; + private JPopupMenu _node_popup_menu = null; + private JMenuItem _node_popup_menu_items[] = null; + private int _longest_ext_node_info = 0; + private float _x_correction_factor = 0.0f; + private float _ov_x_correction_factor = 0.0f; + private float _x_distance = 0.0f; + private float _y_distance = 0.0f; + private PHYLOGENY_GRAPHICS_TYPE _graphics_type = PHYLOGENY_GRAPHICS_TYPE.RECTANGULAR; + private double _domain_structure_width = Constants.DOMAIN_STRUCTURE_DEFAULT_WIDTH; + private int _domain_structure_e_value_thr_exp = Constants.DOMAIN_STRUCTURE_E_VALUE_THR_DEFAULT_EXP; + private float _last_drag_point_x = 0; + private float _last_drag_point_y = 0; + private ControlPanel _control_panel = null; + private int _external_node_index = 0; + private final Polygon _polygon = new Polygon(); + private final StringBuilder _sb = new StringBuilder(); + private JColorChooser _color_chooser = null; + private double _scale_distance = 0.0; + private String _scale_label = null; + private final CubicCurve2D _cubic_curve = new CubicCurve2D.Float(); + private final QuadCurve2D _quad_curve = new QuadCurve2D.Float(); + private final Line2D _line = new Line2D.Float(); + private final Ellipse2D _ellipse = new Ellipse2D.Float(); + private final Rectangle2D _rectangle = new Rectangle2D.Float(); + private Options _options = null; + private float _ov_max_width = 0; + private float _ov_max_height = 0; + private int _ov_x_position = 0; + private int _ov_y_position = 0; + private int _ov_y_start = 0; + private float _ov_y_distance = 0; + private float _ov_x_distance = 0; + private boolean _ov_on = false; + private double _urt_starting_angle = ( float ) ( Math.PI / 2 ); + private float _urt_factor = 1; + private float _urt_factor_ov = 1; + private final boolean _phy_has_branch_lengths; + private final Rectangle2D _ov_rectangle = new Rectangle2D.Float(); + private boolean _in_ov_rect = false; + private boolean _in_ov = false; + private final Rectangle _ov_virtual_rectangle = new Rectangle(); + final private static double _180_OVER_PI = 180.0 / Math.PI; + private static final float ROUNDED_D = 8; + private int _circ_max_depth; + private PhylogenyNode _root; + final private Arc2D _arc = new Arc2D.Double(); + final private HashMap _urt_nodeid_angle_map = new HashMap(); + final private HashMap _urt_nodeid_index_map = new HashMap(); + final private Set _collapsed_external_nodeid_set = new HashSet(); + HashMap _nodeid_dist_to_leaf = new HashMap(); + private AffineTransform _at; + private double _max_distance_to_root = -1; + private int _dynamic_hiding_factor = 0; + private boolean _edited = false; + private Popup _node_desc_popup; + private JTextArea _rollover_popup; + private final StringBuffer _popup_buffer = new StringBuffer(); + final private static Font POPUP_FONT = new Font( Configuration.getDefaultFontFamilyName(), + Font.PLAIN, + 12 ); + private Sequence _query_sequence = null; + private final FontRenderContext _frc = new FontRenderContext( null, + false, + false ); // expression values menu: - private DescriptiveStatistics _statistics_for_vector_data; - private PhylogenyNode[] _nodes_in_preorder = null; - private StringBuilder _current_external_nodes_data_buffer = new StringBuilder(); - private int _current_external_nodes_data_buffer_change_counter = 0; - private Set _current_external_nodes = null; + private DescriptiveStatistics _statistics_for_vector_data; + private PhylogenyNode[] _nodes_in_preorder = null; + private StringBuilder _current_external_nodes_data_buffer = new StringBuilder(); + private int _current_external_nodes_data_buffer_change_counter = 0; + private Set _current_external_nodes = null; // private Image offscreenImage; // private Graphics offscreenGraphics; // private Dimension offscreenDimension; @@ -478,8 +478,6 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee /** * Set parameters for printing the displayed tree * - * @param x - * @param y */ final void calcParametersForPainting( final int x, final int y, final boolean recalc_longest_ext_node_info ) { // updateStyle(); not needed? @@ -490,7 +488,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( getOptions().isAllowFontSizeChange() ) { if ( ( getLongestExtNodeInfo() > ( x * 0.6 ) ) && ( getTreeFontSet().getLargeFont().getSize() > 2 + TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) { - while ( ( getLongestExtNodeInfo() > ( x * 0.6 ) ) + while ( ( getLongestExtNodeInfo() > ( x * 0.7 ) ) && ( getTreeFontSet().getLargeFont().getSize() > 2 ) ) { getMainPanel().getTreeFontSet().decreaseFontSize( getConfiguration().getMinBaseFontSize(), true ); @@ -498,7 +496,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } } else { - while ( ( getLongestExtNodeInfo() < ( x * 0.5 ) ) + while ( ( getLongestExtNodeInfo() < ( x * 0.6 ) ) && ( getTreeFontSet().getLargeFont().getSize() <= getTreeFontSet().getLargeFontMemory() .getSize() - TreeFontSet.FONT_SIZE_CHANGE_STEP ) ) { getMainPanel().getTreeFontSet().increaseFontSize(); @@ -931,7 +929,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return _domain_structure_e_value_thr_exp; } - final Set getFoundNodes() { + final Set getFoundNodes() { return _found_nodes; } @@ -1188,7 +1186,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee if ( ( e.getModifiers() & InputEvent.SHIFT_MASK ) != 0 ) { // Yes, so add to _found_nodes if ( getFoundNodes() == null ) { - setFoundNodes( new HashSet() ); + setFoundNodes( new HashSet() ); } getFoundNodes().add( node.getId() ); // Check if control key is down @@ -1741,7 +1739,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final void resetNodeIdToDistToLeafMap() { - _nodeid_dist_to_leaf = new HashMap(); + _nodeid_dist_to_leaf = new HashMap(); } final void resetPreferredSize() { @@ -1788,7 +1786,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee getControlPanel().getSearchResetButton().setEnabled( true ); getControlPanel().getSearchResetButton().setVisible( true ); if ( getFoundNodes() == null ) { - setFoundNodes( new HashSet() ); + setFoundNodes( new HashSet() ); } getFoundNodes().add( node.getId() ); getControlPanel().setSearchFoundCountsOnLabel( getFoundNodes().size() ); @@ -1809,7 +1807,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee _current_external_nodes_data_buffer = sb; } - final void setFoundNodes( final Set found_nodes ) { + final void setFoundNodes( final Set found_nodes ) { _found_nodes = found_nodes; } @@ -2198,9 +2196,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee repaint(); } - final private void addToCurrentExternalNodes( final int i ) { + final private void addToCurrentExternalNodes( final long i ) { if ( _current_external_nodes == null ) { - _current_external_nodes = new HashSet(); + _current_external_nodes = new HashSet(); } _current_external_nodes.add( i ); } @@ -2416,7 +2414,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee setNodeInPreorderToNull(); setCutOrCopiedTree( _phylogeny.copy( node ) ); final List nodes = PhylogenyMethods.getAllDescendants( node ); - final Set node_ids = new HashSet( nodes.size() ); + final Set node_ids = new HashSet( nodes.size() ); for( final PhylogenyNode n : nodes ) { node_ids.add( n.getId() ); } @@ -2709,11 +2707,11 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee JOptionPane.ERROR_MESSAGE ); } - final private Set getCopiedAndPastedNodes() { + final private Set getCopiedAndPastedNodes() { return getMainPanel().getCopiedAndPastedNodes(); } - final private Set getCurrentExternalNodes() { + final private Set getCurrentExternalNodes() { return _current_external_nodes; } @@ -2912,25 +2910,9 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return Blast.isContainsQueryForBlast( node ); } - final private boolean isCanOpenSeqWeb( final PhylogenyNode node ) { - if ( node.getNodeData().isHasSequence() - && ( node.getNodeData().getSequence().getAccession() != null ) - && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getAccession().getSource() ) - && !ForesterUtil.isEmpty( node.getNodeData().getSequence().getAccession().getValue() ) - && getConfiguration().isHasWebLink( node.getNodeData().getSequence().getAccession().getSource() - .toLowerCase() ) ) { - return true; - } - return false; - } - final private boolean isCanOpenTaxWeb( final PhylogenyNode node ) { if ( node.getNodeData().isHasTaxonomy() - && ( ( ( node.getNodeData().getTaxonomy().getIdentifier() != null ) - && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getIdentifier().getProvider() ) - && !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getIdentifier().getValue() ) && getConfiguration() - .isHasWebLink( node.getNodeData().getTaxonomy().getIdentifier().getProvider().toLowerCase() ) ) - || ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getScientificName() ) ) + && ( ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getScientificName() ) ) || ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getTaxonomyCode() ) ) || ( !ForesterUtil.isEmpty( node.getNodeData().getTaxonomy().getCommonName() ) ) || ( ( node .getNodeData().getTaxonomy().getIdentifier() != null ) @@ -3155,7 +3137,14 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee final String title = clickto_names.get( i ); _node_popup_menu_items[ i ] = new JMenuItem( title ); if ( title.equals( Configuration.clickto_options[ Configuration.open_seq_web ][ 0 ] ) ) { - _node_popup_menu_items[ i ].setEnabled( isCanOpenSeqWeb( node ) ); + final String id = isCanOpenSeqWeb( node ); + if ( !ForesterUtil.isEmpty( id ) ) { + _node_popup_menu_items[ i ].setText( _node_popup_menu_items[ i ].getText() + " [" + id + "]" ); + _node_popup_menu_items[ i ].setEnabled( true ); + } + else { + _node_popup_menu_items[ i ].setEnabled( false ); + } } else if ( title.equals( Configuration.clickto_options[ Configuration.open_tax_web ][ 0 ] ) ) { _node_popup_menu_items[ i ].setEnabled( isCanOpenTaxWeb( node ) ); @@ -3230,6 +3219,8 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return "Sequence Symbols"; case SEQUENCE_MOL_SEQ: return "Molecular Sequences"; + case SEQUENCE_MOL_SEQ_FASTA: + return "Molecular Sequences (Fasta)"; case SEQUENCE_ACC: return "Sequence Accessors"; case TAXONOMY_SCIENTIFIC_NAME: @@ -3244,36 +3235,32 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } } - final private void openSeqWeb( final PhylogenyNode node ) { - if ( !isCanOpenSeqWeb( node ) ) { - cannotOpenBrowserWarningMessage( "sequence" ); - return; + final private String isCanOpenSeqWeb( final PhylogenyNode node ) { + String v = ForesterUtil.extractUniProtKbProteinSeqIdentifier( node ); + if ( ForesterUtil.isEmpty( v ) ) { + v = ForesterUtil.extractGenbankAccessor( node ); } - String uri_str = null; - final Sequence seq = node.getNodeData().getSequence(); - final String source = seq.getAccession().getSource().toLowerCase(); - String url; - if ( source.toLowerCase().equals( "ncbi" ) ) { - url = Constants.NCBI_ALL_DATABASE_SEARCH; - } - else { - final WebLink weblink = getConfiguration().getWebLink( source ); - url = weblink.getUrl().toString(); + if ( ForesterUtil.isEmpty( v ) ) { + v = ForesterUtil.extractRefSeqAccessorAccessor( node ); } - try { - uri_str = url + URLEncoder.encode( seq.getAccession().getValue(), ForesterConstants.UTF8 ); + if ( ForesterUtil.isEmpty( v ) ) { + v = ForesterUtil.extractGInumber( node ); } - catch ( final UnsupportedEncodingException e ) { - AptxUtil.showErrorMessage( this, e.toString() ); - e.printStackTrace(); + return v; + } + + final private void openSeqWeb( final PhylogenyNode node ) { + if ( ForesterUtil.isEmpty( isCanOpenSeqWeb( node ) ) ) { + cannotOpenBrowserWarningMessage( "sequence" ); + return; } + final String uri_str = AptxUtil.createUriForSeqWeb( node, getConfiguration(), this ); if ( !ForesterUtil.isEmpty( uri_str ) ) { try { - JApplet applet = null; - if ( isApplet() ) { - applet = obtainApplet(); - } - AptxUtil.launchWebBrowser( new URI( uri_str ), isApplet(), applet, "_aptx_seq" ); + AptxUtil.launchWebBrowser( new URI( uri_str ), + isApplet(), + isApplet() ? obtainApplet() : null, + "_aptx_seq" ); } catch ( final IOException e ) { AptxUtil.showErrorMessage( this, e.toString() ); @@ -3296,19 +3283,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } String uri_str = null; final Taxonomy tax = node.getNodeData().getTaxonomy(); - if ( ( tax.getIdentifier() != null ) && !ForesterUtil.isEmpty( tax.getIdentifier().getProvider() ) - && getConfiguration().isHasWebLink( tax.getIdentifier().getProvider().toLowerCase() ) ) { - final String type = tax.getIdentifier().getProvider().toLowerCase(); - final WebLink weblink = getConfiguration().getWebLink( type ); - try { - uri_str = weblink.getUrl() + URLEncoder.encode( tax.getIdentifier().getValue(), ForesterConstants.UTF8 ); - } - catch ( final UnsupportedEncodingException e ) { - AptxUtil.showErrorMessage( this, e.toString() ); - e.printStackTrace(); - } - } - else if ( ( tax.getIdentifier() != null ) && !ForesterUtil.isEmpty( tax.getIdentifier().getValue() ) + if ( ( tax.getIdentifier() != null ) && !ForesterUtil.isEmpty( tax.getIdentifier().getValue() ) && tax.getIdentifier().getValue().startsWith( "http://" ) ) { try { uri_str = new URI( tax.getIdentifier().getValue() ).toString(); @@ -3321,7 +3296,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } else if ( !ForesterUtil.isEmpty( tax.getScientificName() ) ) { try { - uri_str = "http://www.eol.org/search?q=" + uri_str = "http://www.uniprot.org/taxonomy/?query=" + URLEncoder.encode( tax.getScientificName(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { @@ -3341,7 +3316,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } else if ( !ForesterUtil.isEmpty( tax.getCommonName() ) ) { try { - uri_str = "http://www.eol.org/search?q=" + uri_str = "http://www.uniprot.org/taxonomy/?query=" + URLEncoder.encode( tax.getCommonName(), ForesterConstants.UTF8 ); } catch ( final UnsupportedEncodingException e ) { @@ -3351,11 +3326,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } if ( !ForesterUtil.isEmpty( uri_str ) ) { try { - JApplet applet = null; - if ( isApplet() ) { - applet = obtainApplet(); - } - AptxUtil.launchWebBrowser( new URI( uri_str ), isApplet(), applet, "_aptx_tax" ); + AptxUtil.launchWebBrowser( new URI( uri_str ), + isApplet(), + isApplet() ? obtainApplet() : null, + "_aptx_tax" ); } catch ( final IOException e ) { AptxUtil.showErrorMessage( this, e.toString() ); @@ -4533,10 +4507,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } final private void paintOvRectangle( final Graphics2D g ) { - final float w_ratio = ( float ) getWidth() / getVisibleRect().width; - final float h_ratio = ( float ) getHeight() / getVisibleRect().height; - final float x_ratio = ( float ) getWidth() / getVisibleRect().x; - final float y_ratio = ( float ) getHeight() / getVisibleRect().y; + final float w_ratio = ( ( float ) getWidth() ) / getVisibleRect().width; + final float h_ratio = ( ( float ) getHeight() ) / getVisibleRect().height; + final float x_ratio = ( ( float ) getWidth() ) / getVisibleRect().x; + final float y_ratio = ( ( float ) getHeight() ) / getVisibleRect().y; final float width = getOvMaxWidth() / w_ratio; final float height = getOvMaxHeight() / h_ratio; final float x = getVisibleRect().x + getOvXPosition() + ( getOvMaxWidth() / x_ratio ); @@ -4915,10 +4889,10 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee } } if ( getCopiedAndPastedNodes() == null ) { - setCopiedAndPastedNodes( new HashSet() ); + setCopiedAndPastedNodes( new HashSet() ); } final List nodes = PhylogenyMethods.obtainAllNodesAsList( buffer_phy ); - final Set node_ids = new HashSet( nodes.size() ); + final Set node_ids = new HashSet( nodes.size() ); for( final PhylogenyNode n : nodes ) { node_ids.add( n.getId() ); } @@ -4958,7 +4932,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee return sb; } - final private void setCopiedAndPastedNodes( final Set nodeIds ) { + final private void setCopiedAndPastedNodes( final Set nodeIds ) { getMainPanel().setCopiedAndPastedNodes( nodeIds ); } @@ -5063,6 +5037,21 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee data.add( n.getNodeData().getSequence().getMolecularSequence() ); } break; + case SEQUENCE_MOL_SEQ_FASTA: + final StringBuilder sb = new StringBuilder(); + if ( n.getNodeData().isHasSequence() + && !ForesterUtil.isEmpty( n.getNodeData().getSequence().getMolecularSequence() ) ) { + if ( !ForesterUtil.isEmpty( n.getNodeData().getSequence().getName() ) ) { + sb.append( SequenceWriter.toFasta( n.getNodeData().getSequence().getName(), n.getNodeData() + .getSequence().getMolecularSequence(), 60 ) ); + } + else { + sb.append( SequenceWriter.toFasta( n.getName(), n.getNodeData().getSequence() + .getMolecularSequence(), 60 ) ); + } + data.add( sb.toString() ); + } + break; case SEQUENCE_ACC: if ( n.getNodeData().isHasSequence() && ( n.getNodeData().getSequence().getAccession() != null ) && !ForesterUtil.isEmpty( n.getNodeData().getSequence().getAccession().toString() ) ) {