applied LGPLv3 and source code formatting.
[vamsas.git] / src / uk / ac / vamsas / objects / utils / Range.java
index 74ace8e..8e4c314 100644 (file)
@@ -1,3 +1,24 @@
+/*\r
+ * This file is part of the Vamsas Client version 0.1. \r
+ * Copyright 2009 by Jim Procter, Iain Milne, Pierre Marguerite, \r
+ *  Andrew Waterhouse and Dominik Lindner.\r
+ * \r
+ * Earlier versions have also been incorporated into Jalview version 2.4 \r
+ * since 2008, and TOPALi version 2 since 2007.\r
+ * \r
+ * The Vamsas Client is free software: you can redistribute it and/or modify\r
+ * it under the terms of the GNU Lesser General Public License as published by\r
+ * the Free Software Foundation, either version 3 of the License, or\r
+ * (at your option) any later version.\r
+ *  \r
+ * The Vamsas Client is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
+ * GNU Lesser General Public License for more details.\r
+ * \r
+ * You should have received a copy of the GNU Lesser General Public License\r
+ * along with the Vamsas Client.  If not, see <http://www.gnu.org/licenses/>.\r
+ */\r
 package uk.ac.vamsas.objects.utils;\r
 \r
 import java.util.Vector;\r
@@ -9,90 +30,80 @@ import uk.ac.vamsas.objects.core.RangeType;
 import uk.ac.vamsas.objects.core.Seg;\r
 \r
 /**\r
- * Utilities for working with RangeType and MapType objects.\r
- * Derived from bitter experience.\r
+ * Utilities for working with RangeType and MapType objects. Derived from bitter\r
+ * experience.\r
+ * \r
  * @author JimP\r
- *\r
+ * \r
  */\r
 public class Range {\r
-  static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getFactory().getLog(Range.class);\r
+  static org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory\r
+      .getFactory().getLog(Range.class);\r
 \r
   /**\r
    * get start<end range of segment, adjusting for inclusivity flag and\r
    * polarity.\r
-   *\r
+   * \r
    * @param visSeg\r
-   * @param ensureDirection when true - always ensure start is less than end.\r
-   * @return int[] { start, end, direction} where direction==1 for range running from end to start.\r
+   * @param ensureDirection\r
+   *          when true - always ensure start is less than end.\r
+   * @return int[] { start, end, direction} where direction==1 for range running\r
+   *         from end to start.\r
    */\r
-  public static int[] getSegRange(Seg visSeg, boolean ensureDirection)\r
-  {\r
+  public static int[] getSegRange(Seg visSeg, boolean ensureDirection) {\r
     boolean incl = visSeg.getInclusive();\r
     // adjust for inclusive flag.\r
     int pol = (visSeg.getStart() <= visSeg.getEnd()) ? 1 : -1; // polarity of\r
     // region.\r
     int start = visSeg.getStart() + (incl ? 0 : pol);\r
     int end = visSeg.getEnd() + (incl ? 0 : -pol);\r
-    if (ensureDirection && pol == -1)\r
-    {\r
+    if (ensureDirection && pol == -1) {\r
       // jalview doesn't deal with inverted ranges, yet.\r
       int t = end;\r
       end = start;\r
       start = t;\r
     }\r
-    return new int[]\r
-        {\r
-        start, end, pol < 0 ? 1 : 0};\r
+    return new int[] { start, end, pol < 0 ? 1 : 0 };\r
   }\r
 \r
   /**\r
    * get real bounds of a RangeType's specification. start and end are an\r
-   * inclusive range within which all segments and positions lie.\r
-   * TODO: refactor to vamsas utils\r
+   * inclusive range within which all segments and positions lie. TODO: refactor\r
+   * to vamsas utils\r
+   * \r
    * @param dseta\r
    * @return int[] { start, end}\r
    */\r
-  public static int[] getBounds(RangeType dseta)\r
-  {\r
-    if (dseta != null)\r
-    {\r
+  public static int[] getBounds(RangeType dseta) {\r
+    if (dseta != null) {\r
       int[] se = null;\r
-      if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0)\r
-      {\r
-        throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");\r
+      if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0) {\r
+        throw new Error(\r
+            "Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");\r
       }\r
-      if (dseta.getSegCount() > 0)\r
-      {\r
+      if (dseta.getSegCount() > 0) {\r
         se = getSegRange(dseta.getSeg(0), true);\r
-        for (int s = 1, sSize = dseta.getSegCount(); s < sSize; s++)\r
-        {\r
+        for (int s = 1, sSize = dseta.getSegCount(); s < sSize; s++) {\r
           int nse[] = getSegRange(dseta.getSeg(s), true);\r
-          if (se[0] > nse[0])\r
-          {\r
+          if (se[0] > nse[0]) {\r
             se[0] = nse[0];\r
           }\r
-          if (se[1] < nse[1])\r
-          {\r
+          if (se[1] < nse[1]) {\r
             se[1] = nse[1];\r
           }\r
         }\r
       }\r
-      if (dseta.getPosCount() > 0)\r
-      {\r
-        // could do a polarity for pos range too. and pass back indication of discontinuities.\r
+      if (dseta.getPosCount() > 0) {\r
+        // could do a polarity for pos range too. and pass back indication of\r
+        // discontinuities.\r
         int pos = dseta.getPos(0).getI();\r
-        se = new int[]\r
-            {\r
-            pos, pos};\r
-        for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++)\r
-        {\r
+        se = new int[] { pos, pos };\r
+        for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++) {\r
           pos = dseta.getPos(p).getI();\r
-          if (se[0] > pos)\r
-          {\r
+          if (se[0] > pos) {\r
             se[0] = pos;\r
           }\r
-          if (se[1] < pos)\r
-          {\r
+          if (se[1] < pos) {\r
             se[1] = pos;\r
           }\r
         }\r
@@ -103,49 +114,41 @@ public class Range {
   }\r
 \r
   /**\r
-   * map from a rangeType's internal frame to the referenced object's coordinate frame.\r
+   * map from a rangeType's internal frame to the referenced object's coordinate\r
+   * frame.\r
+   * \r
    * @param dseta\r
    * @return int [] { ref(pos)...} for all pos in rangeType's frame.\r
    */\r
-  public static int[] getMapping(RangeType dseta)\r
-  {\r
+  public static int[] getMapping(RangeType dseta) {\r
     Vector posList = new Vector();\r
-    if (dseta != null)\r
-    {\r
+    if (dseta != null) {\r
       int[] se = null;\r
-      if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0)\r
-      {\r
-        throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");\r
+      if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0) {\r
+        throw new Error(\r
+            "Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");\r
       }\r
-      if (dseta.getSegCount() > 0)\r
-      {\r
-        for (int s = 0, sSize = dseta.getSegCount(); s < sSize; s++)\r
-        {\r
+      if (dseta.getSegCount() > 0) {\r
+        for (int s = 0, sSize = dseta.getSegCount(); s < sSize; s++) {\r
           se = getSegRange(dseta.getSeg(s), false);\r
           int se_end = se[1 - se[2]] + (se[2] == 0 ? 1 : -1);\r
-          for (int p = se[se[2]]; p != se_end; p += se[2] == 0 ? 1 : -1)\r
-          {\r
+          for (int p = se[se[2]]; p != se_end; p += se[2] == 0 ? 1 : -1) {\r
             posList.add(new Integer(p));\r
           }\r
         }\r
-      }\r
-      else if (dseta.getPosCount() > 0)\r
-      {\r
+      } else if (dseta.getPosCount() > 0) {\r
         int pos = dseta.getPos(0).getI();\r
 \r
-        for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++)\r
-        {\r
+        for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++) {\r
           pos = dseta.getPos(p).getI();\r
           posList.add(new Integer(pos));\r
         }\r
       }\r
     }\r
-    if (posList != null && posList.size() > 0)\r
-    {\r
+    if (posList != null && posList.size() > 0) {\r
       int[] range = new int[posList.size()];\r
-      for (int i = 0; i < range.length; i++)\r
-      {\r
-        range[i] = ( (Integer) posList.elementAt(i)).intValue();\r
+      for (int i = 0; i < range.length; i++) {\r
+        range[i] = ((Integer) posList.elementAt(i)).intValue();\r
       }\r
       posList.clear();\r
       return range;\r
@@ -153,61 +156,52 @@ public class Range {
     return null;\r
   }\r
 \r
-  public static int[] getIntervals(RangeType range)\r
-  {\r
-    int[] intervals=null;\r
+  public static int[] getIntervals(RangeType range) {\r
+    int[] intervals = null;\r
     Vector posList = new Vector();\r
-    if (range != null)\r
-    {\r
+    if (range != null) {\r
       int[] se = null;\r
-      if (range.getSegCount() > 0 && range.getPosCount() > 0)\r
-      {\r
-        throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");\r
-}\r
-      if (range.getSegCount() > 0)\r
-      {\r
-        for (int s = 0, sSize = range.getSegCount(); s < sSize; s++)\r
-        {\r
+      if (range.getSegCount() > 0 && range.getPosCount() > 0) {\r
+        throw new Error(\r
+            "Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");\r
+      }\r
+      if (range.getSegCount() > 0) {\r
+        for (int s = 0, sSize = range.getSegCount(); s < sSize; s++) {\r
           se = getSegRange(range.getSeg(s), false);\r
           posList.addElement(new Integer(se[0]));\r
           posList.addElement(new Integer(se[1]));\r
         }\r
-      }\r
-      else if (range.getPosCount() > 0)\r
-      {\r
+      } else if (range.getPosCount() > 0) {\r
         int pos = range.getPos(0).getI();\r
-        for (int p = 0, pSize = range.getPosCount(); p < pSize; p++)\r
-        {\r
+        for (int p = 0, pSize = range.getPosCount(); p < pSize; p++) {\r
           pos = range.getPos(p).getI();\r
           posList.add(new Integer(pos));\r
           posList.add(new Integer(pos));\r
         }\r
       }\r
     }\r
-    if (posList != null && posList.size() > 0)\r
-    {\r
-      intervals=new int[posList.size()];\r
+    if (posList != null && posList.size() > 0) {\r
+      intervals = new int[posList.size()];\r
       java.util.Enumeration e = posList.elements();\r
-      int i=0;\r
-      while (e.hasMoreElements())\r
-      {\r
-        intervals[i++] = ((Integer)e.nextElement()).intValue();\r
+      int i = 0;\r
+      while (e.hasMoreElements()) {\r
+        intervals[i++] = ((Integer) e.nextElement()).intValue();\r
       }\r
     }\r
     return intervals;\r
   }\r
+\r
   /**\r
    * initialise a range type object from a set of start/end inclusive intervals\r
+   * \r
    * @param mrt\r
    * @param range\r
    */\r
-  public static void initRangeType(RangeType mrt, int[] range)\r
-  {\r
-    for (int i=0; i<range.length; i+=2)\r
-    {\r
+  public static void initRangeType(RangeType mrt, int[] range) {\r
+    for (int i = 0; i < range.length; i += 2) {\r
       Seg vSeg = new Seg();\r
       vSeg.setStart(range[i]);\r
-      vSeg.setEnd(range[i+1]);\r
+      vSeg.setEnd(range[i + 1]);\r
       vSeg.setInclusive(true);\r
       mrt.addSeg(vSeg);\r
     }\r
@@ -215,73 +209,74 @@ public class Range {
 \r
   /**\r
    * \r
-   * @param maprange where the from range is the local mapped range, and the to range is the 'mapped' range in the MapRangeType\r
+   * @param maprange\r
+   *          where the from range is the local mapped range, and the to range\r
+   *          is the 'mapped' range in the MapRangeType\r
    * @param default unit for local\r
    * @param default unit for mapped\r
    * @return MapList\r
    */\r
-  public static MapList parsemapType(MapType maprange, int localu, int mappedu)\r
-  {\r
+  public static MapList parsemapType(MapType maprange, int localu, int mappedu) {\r
     MapList ml = null;\r
     int[] localRange = getIntervals(maprange.getLocal());\r
     int[] mappedRange = getIntervals(maprange.getMapped());\r
-    long lu = maprange.getLocal().hasUnit() ? maprange.getLocal().getUnit() : localu;\r
-    long mu = maprange.getMapped().hasUnit() ? maprange.getMapped().getUnit() : mappedu;\r
-    ml = new MapList(localRange, mappedRange, (int)lu, (int)mu);\r
+    long lu = maprange.getLocal().hasUnit() ? maprange.getLocal().getUnit()\r
+        : localu;\r
+    long mu = maprange.getMapped().hasUnit() ? maprange.getMapped().getUnit()\r
+        : mappedu;\r
+    ml = new MapList(localRange, mappedRange, (int) lu, (int) mu);\r
     return ml;\r
   }\r
+\r
   /**\r
    * Parse map with default units of 1,1\r
+   * \r
    * @param map\r
    * @return MapList representing map\r
    */\r
-  public static MapList parsemapType(MapType map)\r
-  {\r
-    if (!map.getLocal().hasUnit() || !map.getMapped().hasUnit())\r
-    {\r
-      if (log.isDebugEnabled())\r
-      { \r
-        log.debug(\r
-                "using default mapping length of 1:1 for map "\r
-              +(map.isRegistered() ? map.getVorbaId().toString() : ("<no Id registered> "+map.toString())));\r
+  public static MapList parsemapType(MapType map) {\r
+    if (!map.getLocal().hasUnit() || !map.getMapped().hasUnit()) {\r
+      if (log.isDebugEnabled()) {\r
+        log.debug("using default mapping length of 1:1 for map "\r
+            + (map.isRegistered() ? map.getVorbaId().toString()\r
+                : ("<no Id registered> " + map.toString())));\r
       }\r
     }\r
-    return parsemapType(map, 1, 1); \r
+    return parsemapType(map, 1, 1);\r
   }\r
 \r
   /**\r
    * initialise a MapType object from a MapList object.\r
+   * \r
    * @param maprange\r
    * @param ml\r
    * @param setUnits\r
    */\r
-  public static void initMapType(MapType maprange, MapList ml, boolean setUnits)\r
-  {\r
+  public static void initMapType(MapType maprange, MapList ml, boolean setUnits) {\r
     initMapType(maprange, ml, setUnits, false);\r
   }\r
+\r
   /**\r
    * \r
    * @param maprange\r
    * @param ml\r
    * @param setUnits\r
-   * @param reverse - reverse MapList mapping for Local and Mapped ranges and units \r
+   * @param reverse\r
+   *          - reverse MapList mapping for Local and Mapped ranges and units\r
    */\r
-  public static void initMapType(MapType maprange, MapList ml, boolean setUnits, boolean reverse)\r
-  {\r
+  public static void initMapType(MapType maprange, MapList ml,\r
+      boolean setUnits, boolean reverse) {\r
     maprange.setLocal(new Local());\r
     maprange.setMapped(new Mapped());\r
-    if (!reverse)\r
-      {\r
+    if (!reverse) {\r
       initRangeType(maprange.getLocal(), ml.getFromRanges());\r
       initRangeType(maprange.getMapped(), ml.getToRanges());\r
-      } else {\r
-        initRangeType(maprange.getLocal(), ml.getToRanges());\r
-        initRangeType(maprange.getMapped(), ml.getFromRanges());\r
-      }\r
-    if (setUnits)\r
-    {\r
-      if (!reverse)\r
-      { \r
+    } else {\r
+      initRangeType(maprange.getLocal(), ml.getToRanges());\r
+      initRangeType(maprange.getMapped(), ml.getFromRanges());\r
+    }\r
+    if (setUnits) {\r
+      if (!reverse) {\r
         maprange.getLocal().setUnit(ml.getFromRatio());\r
         maprange.getMapped().setUnit(ml.getToRatio());\r
       } else {\r
@@ -291,4 +286,4 @@ public class Range {
     }\r
   }\r
 \r
-}
\ No newline at end of file
+}\r