JAL-2446 pseudo-random generator unit test, and fixes arising
[jalview.git] / src / jalview / datamodel / features / NCNode.java
index d4c7b0c..ab10f67 100644 (file)
@@ -21,7 +21,7 @@ class NCNode<V extends ContiguousI>
   private NCList<V> subregions;
 
   /**
-   * Constructor
+   * Constructor given a list of ranges
    * 
    * @param ranges
    */
@@ -31,7 +31,7 @@ class NCNode<V extends ContiguousI>
   }
 
   /**
-   * Constructo
+   * Constructor given a single range
    * 
    * @param range
    */
@@ -42,6 +42,13 @@ class NCNode<V extends ContiguousI>
     build(ranges);
   }
 
+  NCNode(V entry, NCList<V> newNCList)
+  {
+    region = entry;
+    subregions = newNCList;
+    // size = 1 + newNCList.size();
+  }
+
   /**
    * @param ranges
    */
@@ -69,6 +76,13 @@ class NCNode<V extends ContiguousI>
     return region.getEnd();
   }
 
+  /**
+   * Formats the node as a bracketed list e.g.
+   * 
+   * <pre>
+   * [1-100 [10-30 [10-20]], 15-30 [20-20]]
+   * </pre>
+   */
   @Override
   public String toString() {
     StringBuilder sb = new StringBuilder(10 * size);
@@ -80,6 +94,17 @@ class NCNode<V extends ContiguousI>
     return sb.toString();
   }
 
+  void prettyPrint(StringBuilder sb, int offset, int indent) {
+    for (int i = 0 ; i < offset ; i++) {
+      sb.append(" ");
+    }
+    sb.append(region.getBegin()).append("-").append(region.getEnd());
+    if (subregions != null)
+    {
+      sb.append(System.lineSeparator());
+      subregions.prettyPrint(sb, offset + 2, indent);
+    }
+  }
   /**
    * Add any ranges that overlap the from-to range to the result list
    * 
@@ -104,7 +129,7 @@ class NCNode<V extends ContiguousI>
    * 
    * @param entry
    */
-  public synchronized void add(V entry)
+  synchronized void add(V entry)
   {
     if (entry.getBegin() < region.getBegin() || entry.getEnd() > region.getEnd()) {
       throw new IllegalArgumentException(String.format(
@@ -121,4 +146,19 @@ class NCNode<V extends ContiguousI>
       subregions.add(entry);
     }
   }
+
+  /**
+   * Answers true if the data held satisfy the rules of construction of an
+   * NCList, else false.
+   * 
+   * @return
+   */
+  boolean isValid()
+  {
+    if (subregions == null)
+    {
+      return true;
+    }
+    return subregions.isValid(getStart(), getEnd());
+  }
 }