+ final private void showNodeDataPopup( final MouseEvent e, final PhylogenyNode node ) {
+ try {
+ if ( ( node.getName().length() > 0 )
+ || ( node.getNodeData().isHasTaxonomy() && !TreePanelUtil.isTaxonomyEmpty( node.getNodeData()
+ .getTaxonomy() ) )
+ || ( node.getNodeData().isHasSequence() && !TreePanelUtil.isSequenceEmpty( node.getNodeData()
+ .getSequence() ) ) || ( node.getNodeData().isHasDate() )
+ || ( node.getNodeData().isHasDistribution() ) || node.getBranchData().isHasConfidences() ) {
+ _popup_buffer.setLength( 0 );
+ short lines = 0;
+ if ( node.getName().length() > 0 ) {
+ lines++;
+ _popup_buffer.append( node.getName() );
+ }
+ if ( node.getNodeData().isHasTaxonomy()
+ && !TreePanelUtil.isTaxonomyEmpty( node.getNodeData().getTaxonomy() ) ) {
+ lines++;
+ boolean enc_data = false;
+ final Taxonomy tax = node.getNodeData().getTaxonomy();
+ if ( _popup_buffer.length() > 0 ) {
+ _popup_buffer.append( "\n" );
+ }
+ if ( !ForesterUtil.isEmpty( tax.getTaxonomyCode() ) ) {
+ _popup_buffer.append( "[" );
+ _popup_buffer.append( tax.getTaxonomyCode() );
+ _popup_buffer.append( "]" );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( tax.getScientificName() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " " );
+ }
+ _popup_buffer.append( tax.getScientificName() );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( tax.getCommonName() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " (" );
+ }
+ else {
+ _popup_buffer.append( "(" );
+ }
+ _popup_buffer.append( tax.getCommonName() );
+ _popup_buffer.append( ")" );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( tax.getAuthority() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " (" );
+ }
+ else {
+ _popup_buffer.append( "(" );
+ }
+ _popup_buffer.append( tax.getAuthority() );
+ _popup_buffer.append( ")" );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( tax.getRank() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " [" );
+ }
+ else {
+ _popup_buffer.append( "[" );
+ }
+ _popup_buffer.append( tax.getRank() );
+ _popup_buffer.append( "]" );
+ enc_data = true;
+ }
+ if ( tax.getSynonyms().size() > 0 ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " " );
+ }
+ _popup_buffer.append( "[" );
+ int counter = 1;
+ for( final String syn : tax.getSynonyms() ) {
+ if ( !ForesterUtil.isEmpty( syn ) ) {
+ enc_data = true;
+ _popup_buffer.append( syn );
+ if ( counter < tax.getSynonyms().size() ) {
+ _popup_buffer.append( ", " );
+ }
+ }
+ counter++;
+ }
+ _popup_buffer.append( "]" );
+ }
+ if ( !enc_data ) {
+ if ( ( tax.getIdentifier() != null ) && !ForesterUtil.isEmpty( tax.getIdentifier().getValue() ) ) {
+ if ( !ForesterUtil.isEmpty( tax.getIdentifier().getProvider() ) ) {
+ _popup_buffer.append( "[" );
+ _popup_buffer.append( tax.getIdentifier().getProvider() );
+ _popup_buffer.append( "] " );
+ }
+ _popup_buffer.append( tax.getIdentifier().getValue() );
+ }
+ }
+ }
+ if ( node.getNodeData().isHasSequence()
+ && !TreePanelUtil.isSequenceEmpty( node.getNodeData().getSequence() ) ) {
+ lines++;
+ boolean enc_data = false;
+ if ( _popup_buffer.length() > 0 ) {
+ _popup_buffer.append( "\n" );
+ }
+ final Sequence seq = node.getNodeData().getSequence();
+ if ( seq.getAccession() != null ) {
+ _popup_buffer.append( "[" );
+ if ( !ForesterUtil.isEmpty( seq.getAccession().getSource() ) ) {
+ _popup_buffer.append( seq.getAccession().getSource() );
+ _popup_buffer.append( ":" );
+ }
+ _popup_buffer.append( seq.getAccession().getValue() );
+ _popup_buffer.append( "]" );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( seq.getSymbol() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " [" );
+ }
+ else {
+ _popup_buffer.append( "[" );
+ }
+ _popup_buffer.append( seq.getSymbol() );
+ _popup_buffer.append( "]" );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( seq.getGeneName() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " [" );
+ }
+ else {
+ _popup_buffer.append( "[" );
+ }
+ _popup_buffer.append( seq.getGeneName() );
+ _popup_buffer.append( "]" );
+ enc_data = true;
+ }
+ if ( !ForesterUtil.isEmpty( seq.getName() ) ) {
+ if ( enc_data ) {
+ _popup_buffer.append( " " );
+ }
+ _popup_buffer.append( seq.getName() );
+ }
+ }
+ if ( node.getNodeData().isHasDate() ) {
+ lines++;
+ if ( _popup_buffer.length() > 0 ) {
+ _popup_buffer.append( "\n" );
+ }
+ _popup_buffer.append( node.getNodeData().getDate().asSimpleText() );
+ }
+ if ( node.getNodeData().isHasDistribution() ) {
+ lines++;
+ if ( _popup_buffer.length() > 0 ) {
+ _popup_buffer.append( "\n" );
+ }
+ _popup_buffer.append( node.getNodeData().getDistribution().asSimpleText() );
+ }
+ if ( node.getBranchData().isHasConfidences() ) {
+ final List<Confidence> confs = node.getBranchData().getConfidences();
+ for( final Confidence confidence : confs ) {
+ lines++;
+ if ( _popup_buffer.length() > 0 ) {
+ _popup_buffer.append( "\n" );
+ }
+ if ( !ForesterUtil.isEmpty( confidence.getType() ) ) {
+ _popup_buffer.append( "[" );
+ _popup_buffer.append( confidence.getType() );
+ _popup_buffer.append( "] " );
+ }
+ _popup_buffer
+ .append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence.getValue(),
+ getOptions()
+ .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
+ if ( confidence.getStandardDeviation() != Confidence.CONFIDENCE_DEFAULT_VALUE ) {
+ _popup_buffer.append( " (sd=" );
+ _popup_buffer.append( FORMATTER_CONFIDENCE.format( ForesterUtil.round( confidence
+ .getStandardDeviation(), getOptions()
+ .getNumberOfDigitsAfterCommaForConfidenceValues() ) ) );
+ _popup_buffer.append( ")" );
+ }
+ }
+ }
+ if ( node.getNodeData().isHasProperties() ) {
+ final PropertiesMap properties = node.getNodeData().getProperties();
+ for( final String ref : properties.getPropertyRefs() ) {
+ _popup_buffer.append( "\n" );
+ final Property p = properties.getProperty( ref );
+ _popup_buffer.append( TreePanelUtil.getPartAfterColon( p.getRef() ) );
+ _popup_buffer.append( "=" );
+ _popup_buffer.append( p.getValue() );
+ if ( !ForesterUtil.isEmpty( p.getUnit() ) ) {
+ _popup_buffer.append( TreePanelUtil.getPartAfterColon( p.getUnit() ) );
+ }
+ }
+ }
+ if ( _popup_buffer.length() > 0 ) {
+ if ( !getConfiguration().isUseNativeUI() ) {
+ _rollover_popup
+ .setBorder( BorderFactory.createLineBorder( getTreeColorSet().getBranchColor() ) );
+ _rollover_popup.setBackground( getTreeColorSet().getBackgroundColor() );
+ if ( isInFoundNodes0( node ) && !isInFoundNodes1( node ) ) {
+ _rollover_popup.setForeground( getTreeColorSet().getFoundColor0() );
+ }
+ else if ( !isInFoundNodes0( node ) && isInFoundNodes1( node ) ) {
+ _rollover_popup.setForeground( getTreeColorSet().getFoundColor1() );
+ }
+ else if ( isInFoundNodes0( node ) && isInFoundNodes1( node ) ) {
+ _rollover_popup.setForeground( getTreeColorSet().getFoundColor0and1() );
+ }
+ else {
+ _rollover_popup.setForeground( getTreeColorSet().getSequenceColor() );
+ }
+ }
+ else {
+ _rollover_popup.setBorder( BorderFactory.createLineBorder( Color.BLACK ) );
+ }
+ _rollover_popup.setText( _popup_buffer.toString() );
+ _node_desc_popup = PopupFactory.getSharedInstance().getPopup( null,
+ _rollover_popup,
+ e.getLocationOnScreen().x + 10,
+ e.getLocationOnScreen().y
+ - ( lines * 20 ) );
+ _node_desc_popup.show();
+ }
+ }