X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=forester%2Fjava%2Fsrc%2Forg%2Fforester%2Farchaeopteryx%2FNodeEditPanel.java;h=2a6fdd39b63a85f4759623f084bd8091d51ef4b3;hb=aa358a0f40c69940e1b42382205fb7ca1767878e;hp=beab4f2625ea6f64418a2ab8a363157b1bd186e0;hpb=ccf4c584032d16ed0ed8d0678f01305887724f96;p=jalview.git diff --git a/forester/java/src/org/forester/archaeopteryx/NodeEditPanel.java b/forester/java/src/org/forester/archaeopteryx/NodeEditPanel.java index beab4f2..2a6fdd39 100644 --- a/forester/java/src/org/forester/archaeopteryx/NodeEditPanel.java +++ b/forester/java/src/org/forester/archaeopteryx/NodeEditPanel.java @@ -48,9 +48,11 @@ import javax.swing.tree.DefaultMutableTreeNode; import javax.swing.tree.TreePath; import javax.swing.tree.TreeSelectionModel; +import org.forester.archaeopteryx.tools.ImageLoader; import org.forester.io.parsers.phyloxml.PhyloXmlDataFormatException; import org.forester.phylogeny.PhylogenyNode; import org.forester.phylogeny.data.Accession; +import org.forester.phylogeny.data.BranchWidth; import org.forester.phylogeny.data.Confidence; import org.forester.phylogeny.data.Date; import org.forester.phylogeny.data.Distribution; @@ -58,6 +60,7 @@ import org.forester.phylogeny.data.Event; import org.forester.phylogeny.data.Identifier; import org.forester.phylogeny.data.MultipleUris; import org.forester.phylogeny.data.PhylogenyData; +import org.forester.phylogeny.data.PhylogenyDataUtil; import org.forester.phylogeny.data.Point; import org.forester.phylogeny.data.Reference; import org.forester.phylogeny.data.Sequence; @@ -151,7 +154,7 @@ class NodeEditPanel extends JPanel { top.add( category ); addSubelementEditable( category, NodePanel.NODE_NAME, phylogeny_node.getName(), PHYLOXML_TAG.NODE_NAME ); String bl = ""; - if ( phylogeny_node.getDistanceToParent() != PhylogenyNode.DISTANCE_DEFAULT ) { + if ( phylogeny_node.getDistanceToParent() != PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ) { bl = ForesterUtil.FORMATTER_6.format( phylogeny_node.getDistanceToParent() ); } addSubelementEditable( category, NodePanel.NODE_BRANCH_LENGTH, bl, PHYLOXML_TAG.NODE_BRANCH_LENGTH ); @@ -182,6 +185,12 @@ class NodeEditPanel extends JPanel { "", PHYLOXML_TAG.CONFIDENCE_TYPE, counter ); + String bw = "1"; + if ( ( phylogeny_node.getBranchData().getBranchWidth() != null ) + && ( phylogeny_node.getBranchData().getBranchWidth().getValue() != BranchWidth.BRANCH_WIDTH_DEFAULT_VALUE ) ) { + bw = ForesterUtil.FORMATTER_3.format( phylogeny_node.getBranchData().getBranchWidth().getValue() ); + } + addSubelementEditable( category, NodePanel.NODE_BRANCH_WIDTH, bw, PHYLOXML_TAG.NODE_BRANCH_WIDTH ); } // private void addAnnotation( final DefaultMutableTreeNode top, final Annotation ann, final String name ) { @@ -220,12 +229,18 @@ class NodeEditPanel extends JPanel { category = new DefaultMutableTreeNode( name ); top.add( category ); addSubelementEditable( category, NodePanel.DATE_DESCRIPTION, date.getDesc(), PHYLOXML_TAG.DATE_DESCRIPTION ); - addSubelementEditable( category, NodePanel.DATE_VALUE, String.valueOf( date.getValue() != null ? date - .getValue() : "" ), PHYLOXML_TAG.DATE_VALUE ); - addSubelementEditable( category, NodePanel.DATE_MIN, String - .valueOf( date.getMin() != null ? date.getMin() : "" ), PHYLOXML_TAG.DATE_MIN ); - addSubelementEditable( category, NodePanel.DATE_MAX, String - .valueOf( date.getMax() != null ? date.getMax() : "" ), PHYLOXML_TAG.DATE_MAX ); + addSubelementEditable( category, + NodePanel.DATE_VALUE, + String.valueOf( date.getValue() != null ? date.getValue() : "" ), + PHYLOXML_TAG.DATE_VALUE ); + addSubelementEditable( category, + NodePanel.DATE_MIN, + String.valueOf( date.getMin() != null ? date.getMin() : "" ), + PHYLOXML_TAG.DATE_MIN ); + addSubelementEditable( category, + NodePanel.DATE_MAX, + String.valueOf( date.getMax() != null ? date.getMax() : "" ), + PHYLOXML_TAG.DATE_MAX ); addSubelementEditable( category, NodePanel.DATE_UNIT, date.getUnit(), PHYLOXML_TAG.DATE_UNIT ); } @@ -247,14 +262,22 @@ class NodeEditPanel extends JPanel { NodePanel.DIST_GEODETIC_DATUM, p0.getGeodeticDatum(), PHYLOXML_TAG.DIST_GEODETIC ); - addSubelementEditable( category, NodePanel.DIST_LATITUDE, String.valueOf( p0.getLatitude() != null ? p0 - .getLatitude() : "" ), PHYLOXML_TAG.DIST_LAT ); - addSubelementEditable( category, NodePanel.DIST_LONGITUDE, String.valueOf( p0.getLongitude() != null ? p0 - .getLongitude() : "" ), PHYLOXML_TAG.DIST_LONG ); - addSubelementEditable( category, NodePanel.DIST_ALTITUDE, String.valueOf( p0.getAltitude() != null ? p0 - .getAltitude() : "" ), PHYLOXML_TAG.DIST_ALT ); - addSubelementEditable( category, NodePanel.DIST_ALT_UNIT, String.valueOf( p0.getAltiudeUnit() != null ? p0 - .getAltiudeUnit() : "" ), PHYLOXML_TAG.DIST_ALT_UNIT ); + addSubelementEditable( category, + NodePanel.DIST_LATITUDE, + String.valueOf( p0.getLatitude() != null ? p0.getLatitude() : "" ), + PHYLOXML_TAG.DIST_LAT ); + addSubelementEditable( category, + NodePanel.DIST_LONGITUDE, + String.valueOf( p0.getLongitude() != null ? p0.getLongitude() : "" ), + PHYLOXML_TAG.DIST_LONG ); + addSubelementEditable( category, + NodePanel.DIST_ALTITUDE, + String.valueOf( p0.getAltitude() != null ? p0.getAltitude() : "" ), + PHYLOXML_TAG.DIST_ALT ); + addSubelementEditable( category, + NodePanel.DIST_ALT_UNIT, + String.valueOf( p0.getAltiudeUnit() != null ? p0.getAltiudeUnit() : "" ), + PHYLOXML_TAG.DIST_ALT_UNIT ); } private void addEvents( final DefaultMutableTreeNode top, Event events, final String name ) { @@ -275,9 +298,7 @@ class NodeEditPanel extends JPanel { PHYLOXML_TAG.EVENTS_SPECIATIONS ); addSubelementEditable( category, NodePanel.EVENTS_GENE_LOSSES, - String - .valueOf( events.getNumberOfGeneLosses() >= 0 ? events.getNumberOfGeneLosses() - : 0 ), + String.valueOf( events.getNumberOfGeneLosses() >= 0 ? events.getNumberOfGeneLosses() : 0 ), PHYLOXML_TAG.EVENTS_GENE_LOSSES ); } @@ -545,7 +566,7 @@ class NodeEditPanel extends JPanel { } private List obtainPoints() { - ForesterUtil.ensurePresenceOfDistribution( getMyNode() ); + AptxUtil.ensurePresenceOfDistribution( getMyNode() ); Distribution d = getMyNode().getNodeData().getDistribution(); if ( d.getPoints() == null ) { d = new Distribution( d.getDesc(), new ArrayList(), d.getPolygons() ); @@ -631,7 +652,7 @@ class NodeEditPanel extends JPanel { break; case NODE_BRANCH_LENGTH: if ( ForesterUtil.isEmpty( value ) ) { - getMyNode().setDistanceToParent( PhylogenyNode.DISTANCE_DEFAULT ); + getMyNode().setDistanceToParent( PhylogenyDataUtil.BRANCH_LENGTH_DEFAULT ); } else { try { @@ -646,6 +667,28 @@ class NodeEditPanel extends JPanel { } } break; + case NODE_BRANCH_WIDTH: + if ( ForesterUtil.isEmpty( value ) || value.equals( "1" ) ) { + if ( getMyNode().getBranchData().getBranchWidth() != null ) { + getMyNode().getBranchData().setBranchWidth( new BranchWidth() ); + } + } + else { + try { + final double bw = ForesterUtil.parseDouble( value ); + if ( bw >= 0 ) { + getMyNode().getBranchData().setBranchWidth( new BranchWidth( bw ) ); + } + } + catch ( final ParseException e ) { + JOptionPane.showMessageDialog( this, + "failed to parse branch width from: " + value, + "Error", + JOptionPane.ERROR_MESSAGE ); + mtn.setUserObject( "" ); + } + } + break; case CONFIDENCE_VALUE: double confidence = Confidence.CONFIDENCE_DEFAULT_VALUE; if ( !ForesterUtil.isEmpty( value ) ) { @@ -671,7 +714,8 @@ class NodeEditPanel extends JPanel { } else { final String type = getMyNode().getBranchData().getConfidences().get( number ).getType(); - getMyNode().getBranchData().getConfidences().set( number, new Confidence( confidence, type ) ); + final double sd = getMyNode().getBranchData().getConfidences().get( number ).getStandardDeviation(); + getMyNode().getBranchData().getConfidences().set( number, new Confidence( confidence, type, sd ) ); } break; case CONFIDENCE_TYPE: @@ -685,11 +729,12 @@ class NodeEditPanel extends JPanel { } else { final double v = getMyNode().getBranchData().getConfidences().get( number ).getValue(); - getMyNode().getBranchData().getConfidences().set( number, new Confidence( v, value ) ); + final double sd = getMyNode().getBranchData().getConfidences().get( number ).getStandardDeviation(); + getMyNode().getBranchData().getConfidences().set( number, new Confidence( v, value, sd ) ); } break; case TAXONOMY_CODE: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); try { getMyNode().getNodeData().getTaxonomy().setTaxonomyCode( value ); } @@ -699,15 +744,15 @@ class NodeEditPanel extends JPanel { } break; case TAXONOMY_SCIENTIFIC_NAME: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); getMyNode().getNodeData().getTaxonomy().setScientificName( value ); break; case TAXONOMY_COMMON_NAME: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); getMyNode().getNodeData().getTaxonomy().setCommonName( value ); break; case TAXONOMY_RANK: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); try { getMyNode().getNodeData().getTaxonomy().setRank( value.toLowerCase() ); } @@ -717,7 +762,7 @@ class NodeEditPanel extends JPanel { } break; case TAXONOMY_AUTHORITY: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); getMyNode().getNodeData().getTaxonomy().setAuthority( value ); break; case TAXONOMY_URI: { @@ -735,7 +780,7 @@ class NodeEditPanel extends JPanel { } } if ( uri != null ) { - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); } addUri( mtn, uri, number, getMyNode().getNodeData().getTaxonomy() ); break; @@ -746,7 +791,7 @@ class NodeEditPanel extends JPanel { } else if ( getMyNode().getNodeData().getTaxonomy().getSynonyms().size() == number ) { if ( !ForesterUtil.isEmpty( value ) ) { - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); getMyNode().getNodeData().getTaxonomy().getSynonyms().add( value ); } } @@ -755,7 +800,7 @@ class NodeEditPanel extends JPanel { } break; case TAXONOMY_ID_VALUE: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); if ( getMyNode().getNodeData().getTaxonomy().getIdentifier() == null ) { getMyNode().getNodeData().getTaxonomy().setIdentifier( new Identifier( value ) ); } @@ -765,7 +810,7 @@ class NodeEditPanel extends JPanel { } break; case TAXONOMY_ID_PROVIDER: - ForesterUtil.ensurePresenceOfTaxonomy( getMyNode() ); + AptxUtil.ensurePresenceOfTaxonomy( getMyNode() ); if ( getMyNode().getNodeData().getTaxonomy().getIdentifier() == null ) { getMyNode().getNodeData().getTaxonomy().setIdentifier( new Identifier( "", value ) ); } @@ -775,19 +820,19 @@ class NodeEditPanel extends JPanel { } break; case SEQ_LOCATION: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); getMyNode().getNodeData().getSequence().setLocation( value ); break; case SEQ_MOL_SEQ: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); - getMyNode().getNodeData().getSequence().setMolecularSequence( value ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); + getMyNode().getNodeData().getSequence().setMolecularSequence( value.replaceAll( "[^a-zA-Z-]", "" ) ); break; case SEQ_NAME: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); getMyNode().getNodeData().getSequence().setName( value ); break; case SEQ_SYMBOL: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); try { getMyNode().getNodeData().getSequence().setSymbol( value ); } @@ -797,7 +842,7 @@ class NodeEditPanel extends JPanel { } break; case SEQ_TYPE: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); try { getMyNode().getNodeData().getSequence().setType( value.toLowerCase() ); } @@ -807,7 +852,7 @@ class NodeEditPanel extends JPanel { } break; case SEQ_ACC_SOURCE: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); if ( getMyNode().getNodeData().getSequence().getAccession() == null ) { getMyNode().getNodeData().getSequence().setAccession( new Accession( "", value ) ); } @@ -817,7 +862,7 @@ class NodeEditPanel extends JPanel { } break; case SEQ_ACC_VALUE: - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); if ( getMyNode().getNodeData().getSequence().getAccession() == null ) { getMyNode().getNodeData().getSequence().setAccession( new Accession( value, "" ) ); } @@ -841,7 +886,7 @@ class NodeEditPanel extends JPanel { } } if ( uri != null ) { - ForesterUtil.ensurePresenceOfSequence( getMyNode() ); + AptxUtil.ensurePresenceOfSequence( getMyNode() ); } addUri( mtn, uri, number, getMyNode().getNodeData().getSequence() ); break; @@ -883,23 +928,23 @@ class NodeEditPanel extends JPanel { getMyNode().getNodeData().getEvent().setGeneLosses( parsePositiveInt( mtn, value ) ); break; case DATE_DESCRIPTION: - ForesterUtil.ensurePresenceOfDate( getMyNode() ); + AptxUtil.ensurePresenceOfDate( getMyNode() ); getMyNode().getNodeData().getDate().setDesc( value ); break; case DATE_MAX: - ForesterUtil.ensurePresenceOfDate( getMyNode() ); + AptxUtil.ensurePresenceOfDate( getMyNode() ); getMyNode().getNodeData().getDate().setMax( parseBigDecimal( mtn, value ) ); break; case DATE_MIN: - ForesterUtil.ensurePresenceOfDate( getMyNode() ); + AptxUtil.ensurePresenceOfDate( getMyNode() ); getMyNode().getNodeData().getDate().setMin( parseBigDecimal( mtn, value ) ); break; case DATE_UNIT: - ForesterUtil.ensurePresenceOfDate( getMyNode() ); + AptxUtil.ensurePresenceOfDate( getMyNode() ); getMyNode().getNodeData().getDate().setUnit( value ); break; case DATE_VALUE: - ForesterUtil.ensurePresenceOfDate( getMyNode() ); + AptxUtil.ensurePresenceOfDate( getMyNode() ); getMyNode().getNodeData().getDate().setValue( parseBigDecimal( mtn, value ) ); break; case DIST_ALT: { @@ -911,14 +956,14 @@ class NodeEditPanel extends JPanel { p.getLatitude(), p.getLongitude(), new_value, - ForesterUtil.isEmpty( p.getAltiudeUnit() ) ? "?" : p - .getAltiudeUnit() ); + ForesterUtil.isEmpty( p.getAltiudeUnit() ) ? "?" + : p.getAltiudeUnit() ); ps.set( 0, p_new ); } break; } case DIST_DESC: { - ForesterUtil.ensurePresenceOfDistribution( getMyNode() ); + AptxUtil.ensurePresenceOfDistribution( getMyNode() ); final Distribution d = getMyNode().getNodeData().getDistribution(); getMyNode().getNodeData().setDistribution( new Distribution( value, d.getPoints(), d.getPolygons() ) ); break; @@ -927,8 +972,11 @@ class NodeEditPanel extends JPanel { if ( !ForesterUtil.isEmpty( value ) ) { final List ps = obtainPoints(); final Point p = ps.get( 0 ); - final Point p_new = new Point( value, p.getLatitude(), p.getLongitude(), p.getAltitude(), p - .getAltiudeUnit() ); + final Point p_new = new Point( value, + p.getLatitude(), + p.getLongitude(), + p.getAltitude(), + p.getAltiudeUnit() ); ps.set( 0, p_new ); } break; @@ -937,8 +985,11 @@ class NodeEditPanel extends JPanel { if ( !ForesterUtil.isEmpty( value ) ) { final List ps = obtainPoints(); final Point p = ps.get( 0 ); - final Point p_new = new Point( p.getGeodeticDatum(), p.getLatitude(), p.getLongitude(), p - .getAltitude(), value ); + final Point p_new = new Point( p.getGeodeticDatum(), + p.getLatitude(), + p.getLongitude(), + p.getAltitude(), + value ); ps.set( 0, p_new ); } break; @@ -962,8 +1013,11 @@ class NodeEditPanel extends JPanel { if ( new_value != null ) { final List ps = obtainPoints(); final Point p = ps.get( 0 ); - final Point p_new = new Point( p.getGeodeticDatum(), p.getLatitude(), new_value, p.getAltitude(), p - .getAltiudeUnit() ); + final Point p_new = new Point( p.getGeodeticDatum(), + p.getLatitude(), + new_value, + p.getAltitude(), + p.getAltiudeUnit() ); ps.set( 0, p_new ); } break; @@ -998,6 +1052,7 @@ class NodeEditPanel extends JPanel { private enum PHYLOXML_TAG { NODE_NAME, NODE_BRANCH_LENGTH, + NODE_BRANCH_WIDTH, TAXONOMY_CODE, TAXONOMY_SCIENTIFIC_NAME, TAXONOMY_AUTHORITY,