in progress (special coloring is still true)
[jalview.git] / forester / java / src / org / forester / archaeopteryx / NodeEditPanel.java
index beab4f2..f593a78 100644 (file)
@@ -21,7 +21,7 @@
 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
 //
 // Contact: phylosoft @ gmail . com
-// WWW: www.phylosoft.org/
+// WWW: https://sites.google.com/site/cmzmasek/home/software/forester
 
 package org.forester.archaeopteryx;
 
@@ -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 );
     }
 
@@ -316,6 +337,7 @@ class NodeEditPanel extends JPanel {
         }
         addSubelementEditable( category, NodePanel.SEQ_NAME, seq.getName(), PHYLOXML_TAG.SEQ_NAME );
         addSubelementEditable( category, NodePanel.SEQ_SYMBOL, seq.getSymbol(), PHYLOXML_TAG.SEQ_SYMBOL );
+        addSubelementEditable( category, NodePanel.SEQ_GENE_NAME, seq.getGeneName(), PHYLOXML_TAG.SEQ_GENE_NAME );
         addSubelementEditable( category,
                                NodePanel.SEQ_ACCESSION,
                                acc.getValue(),
@@ -631,7 +653,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 +668,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 +715,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,7 +730,8 @@ 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:
@@ -780,7 +826,7 @@ class NodeEditPanel extends JPanel {
                 break;
             case SEQ_MOL_SEQ:
                 ForesterUtil.ensurePresenceOfSequence( getMyNode() );
-                getMyNode().getNodeData().getSequence().setMolecularSequence( value );
+                getMyNode().getNodeData().getSequence().setMolecularSequence( value.replaceAll( "[^a-zA-Z-]", "" ) );
                 break;
             case SEQ_NAME:
                 ForesterUtil.ensurePresenceOfSequence( getMyNode() );
@@ -796,6 +842,10 @@ class NodeEditPanel extends JPanel {
                     break;
                 }
                 break;
+            case SEQ_GENE_NAME:
+                ForesterUtil.ensurePresenceOfSequence( getMyNode() );
+                getMyNode().getNodeData().getSequence().setGeneName( value );
+                break;
             case SEQ_TYPE:
                 ForesterUtil.ensurePresenceOfSequence( getMyNode() );
                 try {
@@ -911,8 +961,8 @@ 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;
@@ -927,8 +977,11 @@ class NodeEditPanel extends JPanel {
                 if ( !ForesterUtil.isEmpty( value ) ) {
                     final List<Point> 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 +990,11 @@ class NodeEditPanel extends JPanel {
                 if ( !ForesterUtil.isEmpty( value ) ) {
                     final List<Point> 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 +1018,11 @@ class NodeEditPanel extends JPanel {
                 if ( new_value != null ) {
                     final List<Point> 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 +1057,7 @@ class NodeEditPanel extends JPanel {
     private enum PHYLOXML_TAG {
         NODE_NAME,
         NODE_BRANCH_LENGTH,
+        NODE_BRANCH_WIDTH,
         TAXONOMY_CODE,
         TAXONOMY_SCIENTIFIC_NAME,
         TAXONOMY_AUTHORITY,
@@ -1007,6 +1067,7 @@ class NodeEditPanel extends JPanel {
         TAXONOMY_URI,
         SEQ_SYMBOL,
         SEQ_NAME,
+        SEQ_GENE_NAME,
         SEQ_LOCATION,
         SEQ_TYPE,
         SEQ_MOL_SEQ,