JAL-2674 HiddenColumns interface tidies
[jalview.git] / src / jalview / datamodel / features / NCNode.java
index 0755614..007f3b1 100644 (file)
@@ -1,5 +1,7 @@
 package jalview.datamodel.features;
 
+import jalview.datamodel.ContiguousI;
+
 import java.util.ArrayList;
 import java.util.List;
 
@@ -9,7 +11,7 @@ import java.util.List;
  *
  * @param <V>
  */
-class NCNode<V extends ContiguousI>
+class NCNode<V extends ContiguousI> implements ContiguousI
 {
   /*
    * deep size (number of ranges included)
@@ -40,7 +42,7 @@ class NCNode<V extends ContiguousI>
    */
   NCNode(V range)
   {
-    List<V> ranges = new ArrayList<V>();
+    List<V> ranges = new ArrayList<>();
     ranges.add(range);
     build(ranges);
   }
@@ -49,7 +51,7 @@ class NCNode<V extends ContiguousI>
   {
     region = entry;
     subregions = newNCList;
-    size = 1 + newNCList.getSize();
+    size = 1 + newNCList.size();
   }
 
   /**
@@ -69,12 +71,14 @@ class NCNode<V extends ContiguousI>
     }
   }
 
-  int getStart()
+  @Override
+  public int getBegin()
   {
     return region.getBegin();
   }
 
-  int getEnd()
+  @Override
+  public int getEnd()
   {
     return region.getEnd();
   }
@@ -148,6 +152,7 @@ class NCNode<V extends ContiguousI>
     {
       subregions.add(entry);
     }
+    size++;
   }
 
   /**
@@ -158,11 +163,18 @@ class NCNode<V extends ContiguousI>
    */
   boolean isValid()
   {
+    /*
+     * we don't handle reverse ranges
+     */
+    if (region != null && region.getBegin() > region.getEnd())
+    {
+      return false;
+    }
     if (subregions == null)
     {
       return true;
     }
-    return subregions.isValid(getStart(), getEnd());
+    return subregions.isValid(getBegin(), getEnd());
   }
 
   /**
@@ -218,4 +230,26 @@ class NCNode<V extends ContiguousI>
   {
     return subregions;
   }
+
+  /**
+   * Nulls the subregion reference if it is empty (after a delete entry
+   * operation)
+   */
+  void deleteSubRegionsIfEmpty()
+  {
+    if (subregions != null && subregions.size() == 0)
+    {
+      subregions = null;
+    }
+  }
+
+  /**
+   * Answers the (deep) size of this node i.e. the number of ranges it models
+   * 
+   * @return
+   */
+  int size()
+  {
+    return size;
+  }
 }