in progress (special coloring is still true)
authorcmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 10 Oct 2014 22:50:12 +0000 (22:50 +0000)
committercmzmasek@gmail.com <cmzmasek@gmail.com@ca865154-3058-d1c3-3e42-d8f55a55bdbd>
Fri, 10 Oct 2014 22:50:12 +0000 (22:50 +0000)
forester/java/src/org/forester/archaeopteryx/ControlPanel.java
forester/java/src/org/forester/archaeopteryx/TreePanel.java
forester/java/src/org/forester/phylogeny/PhylogenyMethods.java

index a885e3e..8b2b585 100644 (file)
@@ -259,14 +259,12 @@ final class ControlPanel extends JPanel implements ActionListener {
                     showWhole();
                 }
                 else if ( e.getSource() == _order ) {
-                    DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
-                    if ( ( !isShowTaxonomyScientificNames() && !isShowTaxonomyCode() && !isShowTaxonomyCommonNames() ) ) {
-                        if ( ( isShowSequenceAcc() || isShowSeqNames() || isShowSeqSymbols() ) ) {
-                            pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
-                        }
-                        else if ( isShowNodeNames() ) {
-                            pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
-                        }
+                    DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
+                    if ( isShowTaxonomyScientificNames() || isShowTaxonomyCode() ) {
+                        pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
+                    }
+                    else if ( isShowSeqNames() || isShowSeqSymbols() || isShowGeneNames() ) {
+                        pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
                     }
                     PhylogenyMethods.orderAppearance( tp.getPhylogeny().getRoot(), _order_of_appearance, true, pri );
                     _order_of_appearance = !_order_of_appearance;
index bb31d7e..c33ad4e 100644 (file)
@@ -1988,16 +1988,13 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
 
     final void sortDescendants( final PhylogenyNode node ) {
         if ( !node.isExternal() ) {
-            DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
-            if ( ( !getControlPanel().isShowTaxonomyScientificNames() && !getControlPanel().isShowTaxonomyCode() && !getControlPanel()
-                    .isShowTaxonomyCommonNames() ) ) {
-                if ( ( getControlPanel().isShowSequenceAcc() || getControlPanel().isShowSeqNames() || getControlPanel()
-                        .isShowSeqSymbols() ) ) {
-                    pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
-                }
-                else if ( getControlPanel().isShowNodeNames() ) {
-                    pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
-                }
+            DESCENDANT_SORT_PRIORITY pri = DESCENDANT_SORT_PRIORITY.NODE_NAME;
+            if ( getControlPanel().isShowTaxonomyScientificNames() || getControlPanel().isShowTaxonomyCode() ) {
+                pri = DESCENDANT_SORT_PRIORITY.TAXONOMY;
+            }
+            else if ( getControlPanel().isShowSeqNames() || getControlPanel().isShowSeqSymbols()
+                    || getControlPanel().isShowGeneNames() ) {
+                pri = DESCENDANT_SORT_PRIORITY.SEQUENCE;
             }
             PhylogenyMethods.sortNodeDescendents( node, pri );
             setNodeInPreorderToNull();
@@ -2476,6 +2473,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
                 getControlPanel().getUseVisualStylesCb().setSelected( true );
             }
         }
+        setEdited( true );
         repaint();
     }
 
@@ -2530,6 +2528,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
             al = new NodeColorizationActionListener( _color_chooser, node );
         }
         final JDialog dialog = JColorChooser.createDialog( this, "Node colorization", true, _color_chooser, al, null );
+        setEdited( true );
         dialog.setVisible( true );
     }
 
@@ -2552,6 +2551,7 @@ public final class TreePanel extends JPanel implements ActionListener, MouseWhee
         }
         final JDialog dialog = JColorChooser
                 .createDialog( this, "Subtree colorization", true, _color_chooser, al, null );
+        setEdited( true );
         dialog.setVisible( true );
     }
 
index a5302b7..cc2a6b2 100644 (file)
@@ -1286,159 +1286,6 @@ public class PhylogenyMethods {
     }\r
 \r
     final static public void sortNodeDescendents( final PhylogenyNode node, final DESCENDANT_SORT_PRIORITY pri ) {\r
-        class PhylogenyNodeSortTaxonomyPriority implements Comparator<PhylogenyNode> {\r
-\r
-            @Override\r
-            public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
-                if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getCommonName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getCommonName() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getCommonName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getCommonName().toLowerCase() );\r
-                    }\r
-                }\r
-                if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getSymbol()\r
-                                .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getGeneName()\r
-                                .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
-                    }\r
-                    if ( ( n1.getNodeData().getSequence().getAccession() != null )\r
-                            && ( n2.getNodeData().getSequence().getAccession() != null )\r
-                            && !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getAccession().getValue() )\r
-                            && !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getAccession().getValue() ) ) {\r
-                        return n1.getNodeData().getSequence().getAccession().getValue()\r
-                                .compareTo( n2.getNodeData().getSequence().getAccession().getValue() );\r
-                    }\r
-                }\r
-                if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
-                    return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
-                }\r
-                return 0;\r
-            }\r
-        }\r
-        class PhylogenyNodeSortSequencePriority implements Comparator<PhylogenyNode> {\r
-\r
-            @Override\r
-            public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
-                if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getSymbol()\r
-                                .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getGeneName()\r
-                                .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
-                    }\r
-                    if ( ( n1.getNodeData().getSequence().getAccession() != null )\r
-                            && ( n2.getNodeData().getSequence().getAccession() != null )\r
-                            && !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getAccession().getValue() )\r
-                            && !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getAccession().getValue() ) ) {\r
-                        return n1.getNodeData().getSequence().getAccession().getValue()\r
-                                .compareTo( n2.getNodeData().getSequence().getAccession().getValue() );\r
-                    }\r
-                }\r
-                if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getCommonName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getCommonName() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getCommonName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getCommonName().toLowerCase() );\r
-                    }\r
-                }\r
-                if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
-                    return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
-                }\r
-                return 0;\r
-            }\r
-        }\r
-        class PhylogenyNodeSortNodeNamePriority implements Comparator<PhylogenyNode> {\r
-\r
-            @Override\r
-            public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
-                if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
-                    return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
-                }\r
-                if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getCommonName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getCommonName() ) ) ) {\r
-                        return n1.getNodeData().getTaxonomy().getCommonName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getTaxonomy().getCommonName().toLowerCase() );\r
-                    }\r
-                }\r
-                if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getName().toLowerCase()\r
-                                .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getSymbol()\r
-                                .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
-                    }\r
-                    if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
-                            && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
-                        return n1.getNodeData().getSequence().getGeneName()\r
-                                .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
-                    }\r
-                    if ( ( n1.getNodeData().getSequence().getAccession() != null )\r
-                            && ( n2.getNodeData().getSequence().getAccession() != null )\r
-                            && !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getAccession().getValue() )\r
-                            && !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getAccession().getValue() ) ) {\r
-                        return n1.getNodeData().getSequence().getAccession().getValue()\r
-                                .compareTo( n2.getNodeData().getSequence().getAccession().getValue() );\r
-                    }\r
-                }\r
-                return 0;\r
-            }\r
-        }\r
         Comparator<PhylogenyNode> c;\r
         switch ( pri ) {\r
             case SEQUENCE:\r
@@ -1829,4 +1676,124 @@ public class PhylogenyMethods {
             node.getNodeData().addSequence( new_seq );\r
         }\r
     }\r
+\r
+    final private static class PhylogenyNodeSortTaxonomyPriority implements Comparator<PhylogenyNode> {\r
+\r
+        @Override\r
+        public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
+            if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
+                    return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
+                            .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
+                    return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
+                            .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
+                }\r
+            }\r
+            if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getName().toLowerCase()\r
+                            .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getGeneName()\r
+                            .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getSymbol()\r
+                            .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
+                }\r
+            }\r
+            if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
+                return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
+            }\r
+            return 0;\r
+        }\r
+    }\r
+\r
+    final private static class PhylogenyNodeSortSequencePriority implements Comparator<PhylogenyNode> {\r
+\r
+        @Override\r
+        public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
+            if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getName().toLowerCase()\r
+                            .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getGeneName()\r
+                            .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getSymbol()\r
+                            .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
+                }\r
+            }\r
+            if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
+                    return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
+                            .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
+                    return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
+                            .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
+                }\r
+            }\r
+            if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
+                return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
+            }\r
+            return 0;\r
+        }\r
+    }\r
+\r
+    final private static class PhylogenyNodeSortNodeNamePriority implements Comparator<PhylogenyNode> {\r
+\r
+        @Override\r
+        public int compare( final PhylogenyNode n1, final PhylogenyNode n2 ) {\r
+            if ( ( !ForesterUtil.isEmpty( n1.getName() ) ) && ( !ForesterUtil.isEmpty( n2.getName() ) ) ) {\r
+                return n1.getName().toLowerCase().compareTo( n2.getName().toLowerCase() );\r
+            }\r
+            if ( n1.getNodeData().isHasTaxonomy() && n2.getNodeData().isHasTaxonomy() ) {\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getScientificName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getScientificName() ) ) ) {\r
+                    return n1.getNodeData().getTaxonomy().getScientificName().toLowerCase()\r
+                            .compareTo( n2.getNodeData().getTaxonomy().getScientificName().toLowerCase() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getTaxonomy().getTaxonomyCode() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getTaxonomy().getTaxonomyCode() ) ) ) {\r
+                    return n1.getNodeData().getTaxonomy().getTaxonomyCode()\r
+                            .compareTo( n2.getNodeData().getTaxonomy().getTaxonomyCode() );\r
+                }\r
+            }\r
+            if ( n1.getNodeData().isHasSequence() && n2.getNodeData().isHasSequence() ) {\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getName() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getName().toLowerCase()\r
+                            .compareTo( n2.getNodeData().getSequence().getName().toLowerCase() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getGeneName() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getGeneName() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getGeneName()\r
+                            .compareTo( n2.getNodeData().getSequence().getGeneName() );\r
+                }\r
+                if ( ( !ForesterUtil.isEmpty( n1.getNodeData().getSequence().getSymbol() ) )\r
+                        && ( !ForesterUtil.isEmpty( n2.getNodeData().getSequence().getSymbol() ) ) ) {\r
+                    return n1.getNodeData().getSequence().getSymbol()\r
+                            .compareTo( n2.getNodeData().getSequence().getSymbol() );\r
+                }\r
+            }\r
+            return 0;\r
+        }\r
+    }\r
 }\r