X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fdatamodel%2Ffeatures%2FNCNode.java;h=b9917501717f0379283545fc67fe84ebe32a8bd8;hb=d8720fc191cba996c440171ef8e07462ef9f7035;hp=075561499aeeac9c6128ac46ae4a810b3968ecc9;hpb=fdea751663ec46a587cfdf45bfae9ec667043efb;p=jalview.git
diff --git a/src/jalview/datamodel/features/NCNode.java b/src/jalview/datamodel/features/NCNode.java
index 0755614..b991750 100644
--- a/src/jalview/datamodel/features/NCNode.java
+++ b/src/jalview/datamodel/features/NCNode.java
@@ -1,5 +1,27 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.datamodel.features;
+import jalview.datamodel.ContiguousI;
+
import java.util.ArrayList;
import java.util.List;
@@ -9,7 +31,7 @@ import java.util.List;
*
* @param
*/
-class NCNode
+class NCNode implements ContiguousI
{
/*
* deep size (number of ranges included)
@@ -40,7 +62,7 @@ class NCNode
*/
NCNode(V range)
{
- List ranges = new ArrayList();
+ List ranges = new ArrayList<>();
ranges.add(range);
build(ranges);
}
@@ -49,7 +71,7 @@ class NCNode
{
region = entry;
subregions = newNCList;
- size = 1 + newNCList.getSize();
+ size = 1 + newNCList.size();
}
/**
@@ -69,12 +91,14 @@ class NCNode
}
}
- int getStart()
+ @Override
+ public int getBegin()
{
return region.getBegin();
}
- int getEnd()
+ @Override
+ public int getEnd()
{
return region.getEnd();
}
@@ -148,6 +172,7 @@ class NCNode
{
subregions.add(entry);
}
+ size++;
}
/**
@@ -158,11 +183,18 @@ class NCNode
*/
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 +250,26 @@ class NCNode
{
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;
+ }
}