JAL-1620 version bump and release notes
[jalview.git] / src / jalview / io / vamsas / Rangetype.java
index b7e6f79..a83a34f 100644 (file)
@@ -1,18 +1,44 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2b1)
+ * Copyright (C) 2014 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 <http://www.gnu.org/licenses/>.
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
 package jalview.io.vamsas;
 
-
 import java.util.Vector;
 
+import uk.ac.vamsas.client.Vobject;
 import uk.ac.vamsas.objects.core.Local;
-import uk.ac.vamsas.objects.core.Map;
 import uk.ac.vamsas.objects.core.MapType;
 import uk.ac.vamsas.objects.core.Mapped;
 import uk.ac.vamsas.objects.core.RangeType;
 import uk.ac.vamsas.objects.core.Seg;
-import jalview.datamodel.Mapping;
 import jalview.io.VamsasAppDatastore;
+import jalview.util.MessageManager;
 
-public class Rangetype extends DatastoreItem
+/**
+ * Enhances DatastoreItem objects with additional functions to do with RangeType
+ * objects
+ * 
+ * @author JimP
+ * 
+ */
+public abstract class Rangetype extends DatastoreItem
 {
 
   public Rangetype()
@@ -25,10 +51,21 @@ public class Rangetype extends DatastoreItem
     super(datastore);
   }
 
+  public Rangetype(VamsasAppDatastore datastore, Vobject vobj, Class jvClass)
+  {
+    super(datastore, vobj, jvClass);
+  }
+
+  public Rangetype(VamsasAppDatastore datastore, Object jvobj, Class vClass)
+  {
+    super(datastore, jvobj, vClass);
+  }
+
   /**
    * get real bounds of a RangeType's specification. start and end are an
-   * inclusive range within which all segments and positions lie.
-   * TODO: refactor to vamsas utils
+   * inclusive range within which all segments and positions lie. TODO: refactor
+   * to vamsas utils
+   * 
    * @param dseta
    * @return int[] { start, end}
    */
@@ -39,7 +76,7 @@ public class Rangetype extends DatastoreItem
       int[] se = null;
       if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0)
       {
-        throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");
+        throw new Error(MessageManager.getString("error.invalid_vamsas_rangetype_cannot_resolve_lists"));
       }
       if (dseta.getSegCount() > 0)
       {
@@ -59,11 +96,11 @@ public class Rangetype extends DatastoreItem
       }
       if (dseta.getPosCount() > 0)
       {
-        // could do a polarity for pos range too. and pass back indication of discontinuities.
+        // could do a polarity for pos range too. and pass back indication of
+        // discontinuities.
         int pos = dseta.getPos(0).getI();
         se = new int[]
-            {
-            pos, pos};
+        { pos, pos };
         for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++)
         {
           pos = dseta.getPos(p).getI();
@@ -83,7 +120,9 @@ public class Rangetype extends DatastoreItem
   }
 
   /**
-   * map from a rangeType's internal frame to the referenced object's coordinate frame.
+   * map from a rangeType's internal frame to the referenced object's coordinate
+   * frame.
+   * 
    * @param dseta
    * @return int [] { ref(pos)...} for all pos in rangeType's frame.
    */
@@ -95,7 +134,7 @@ public class Rangetype extends DatastoreItem
       int[] se = null;
       if (dseta.getSegCount() > 0 && dseta.getPosCount() > 0)
       {
-        throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");
+        throw new Error(MessageManager.getString("error.invalid_vamsas_rangetype_cannot_resolve_lists"));
       }
       if (dseta.getSegCount() > 0)
       {
@@ -112,7 +151,7 @@ public class Rangetype extends DatastoreItem
       else if (dseta.getPosCount() > 0)
       {
         int pos = dseta.getPos(0).getI();
-  
+
         for (int p = 0, pSize = dseta.getPosCount(); p < pSize; p++)
         {
           pos = dseta.getPos(p).getI();
@@ -125,7 +164,7 @@ public class Rangetype extends DatastoreItem
       int[] range = new int[posList.size()];
       for (int i = 0; i < range.length; i++)
       {
-        range[i] = ( (Integer) posList.elementAt(i)).intValue();
+        range[i] = ((Integer) posList.elementAt(i)).intValue();
       }
       posList.clear();
       return range;
@@ -135,14 +174,14 @@ public class Rangetype extends DatastoreItem
 
   protected int[] getIntervals(RangeType range)
   {
-    int[] intervals=null;
+    int[] intervals = null;
     Vector posList = new Vector();
     if (range != null)
     {
       int[] se = null;
       if (range.getSegCount() > 0 && range.getPosCount() > 0)
       {
-        throw new Error("Invalid vamsas RangeType - cannot resolve both lists of Pos and Seg from choice!");
+        throw new Error(MessageManager.getString("error.invalid_vamsas_rangetype_cannot_resolve_lists"));
       }
       if (range.getSegCount() > 0)
       {
@@ -156,7 +195,7 @@ public class Rangetype extends DatastoreItem
       else if (range.getPosCount() > 0)
       {
         int pos = range.getPos(0).getI();
-  
+
         for (int p = 0, pSize = range.getPosCount(); p < pSize; p++)
         {
           pos = range.getPos(p).getI();
@@ -167,28 +206,30 @@ public class Rangetype extends DatastoreItem
     }
     if (posList != null && posList.size() > 0)
     {
-      intervals=new int[posList.size()];
+      intervals = new int[posList.size()];
       java.util.Enumeration e = posList.elements();
-      int i=0;
+      int i = 0;
       while (e.hasMoreElements())
       {
-        intervals[i++] = ((Integer)e.nextElement()).intValue();
+        intervals[i++] = ((Integer) e.nextElement()).intValue();
       }
     }
     return intervals;
   }
+
   /**
    * initialise a range type object from a set of start/end inclusive intervals
+   * 
    * @param mrt
    * @param range
    */
   protected void initRangeType(RangeType mrt, int[] range)
   {
-    for (int i=0; i<range.length; i+=2)
+    for (int i = 0; i < range.length; i += 2)
     {
       Seg vSeg = new Seg();
       vSeg.setStart(range[i]);
-      vSeg.setEnd(range[i+1]);
+      vSeg.setEnd(range[i + 1]);
       vSeg.setInclusive(true);
       mrt.addSeg(vSeg);
     }
@@ -196,75 +237,97 @@ public class Rangetype extends DatastoreItem
 
   /**
    * 
-   * @param maprange where the from range is the local mapped range, and the to range is the 'mapped' range in the MapRangeType
+   * @param maprange
+   *          where the from range is the local mapped range, and the to range
+   *          is the 'mapped' range in the MapRangeType
    * @param default unit for local
    * @param default unit for mapped
    * @return MapList
    */
-  protected jalview.util.MapList parsemapType(MapType maprange, int localu, int mappedu)
+  protected jalview.util.MapList parsemapType(MapType maprange, int localu,
+          int mappedu)
   {
     jalview.util.MapList ml = null;
     int[] localRange = getIntervals(maprange.getLocal());
     int[] mappedRange = getIntervals(maprange.getMapped());
-    long lu = maprange.getLocal().hasUnit() ? maprange.getLocal().getUnit() : localu;
-    long mu = maprange.getMapped().hasUnit() ? maprange.getMapped().getUnit() : mappedu;
-    ml = new jalview.util.MapList(localRange, mappedRange, (int)lu, (int)mu);
+    long lu = maprange.getLocal().hasUnit() ? maprange.getLocal().getUnit()
+            : localu;
+    long mu = maprange.getMapped().hasUnit() ? maprange.getMapped()
+            .getUnit() : mappedu;
+    ml = new jalview.util.MapList(localRange, mappedRange, (int) lu,
+            (int) mu);
     return ml;
   }
+
   protected jalview.util.MapList parsemapType(MapType map)
   {
     if (!map.getLocal().hasUnit() || map.getMapped().hasUnit())
     {
-      jalview.bin.Cache.log.warn("using default mapping length of 1:1 for map "
-              +(map.isRegistered() ? map.getVorbaId().toString() : ("<no Id registered> "+map.toString())));
+      jalview.bin.Cache.log
+              .warn("using default mapping length of 1:1 for map "
+                      + (map.isRegistered() ? map.getVorbaId().toString()
+                              : ("<no Id registered> " + map.toString())));
     }
-    return parsemapType(map, 1, 1); 
+    return parsemapType(map, 1, 1);
   }
 
   /**
    * initialise a MapType object from a MapList object.
+   * 
    * @param maprange
    * @param ml
    * @param setUnits
    */
-  protected void initMapType(MapType maprange, jalview.util.MapList ml, boolean setUnits)
+  protected void initMapType(MapType maprange, jalview.util.MapList ml,
+          boolean setUnits)
   {
     initMapType(maprange, ml, setUnits, false);
   }
+
   /**
    * 
    * @param maprange
    * @param ml
    * @param setUnits
-   * @param reverse - reverse MapList mapping for Local and Mapped ranges and units 
+   * @param reverse
+   *          - reverse MapList mapping for Local and Mapped ranges and units
    */
-  protected void initMapType(MapType maprange, jalview.util.MapList ml, boolean setUnits, boolean reverse)
+  protected void initMapType(MapType maprange, jalview.util.MapList ml,
+          boolean setUnits, boolean reverse)
   {
-    if (ml==null)
+    if (ml == null)
     {
-      throw new Error("Implementation error. MapList is null for initMapType.");
+      throw new Error(MessageManager.getString("error.implementation_error_maplist_is_null"));
     }
     maprange.setLocal(new Local());
     maprange.setMapped(new Mapped());
     if (!reverse)
-      {
+    {
       initRangeType(maprange.getLocal(), ml.getFromRanges());
       initRangeType(maprange.getMapped(), ml.getToRanges());
-      } else {
-        initRangeType(maprange.getLocal(), ml.getToRanges());
-        initRangeType(maprange.getMapped(), ml.getFromRanges());
-      }
+    }
+    else
+    {
+      initRangeType(maprange.getLocal(), ml.getToRanges());
+      initRangeType(maprange.getMapped(), ml.getFromRanges());
+    }
     if (setUnits)
     {
       if (!reverse)
-      { 
+      {
         maprange.getLocal().setUnit(ml.getFromRatio());
         maprange.getMapped().setUnit(ml.getToRatio());
-      } else {
+      }
+      else
+      {
         maprange.getLocal().setUnit(ml.getToRatio());
         maprange.getMapped().setUnit(ml.getFromRatio());
       }
+      // TODO: and verify - raise an implementation fault notice if local/mapped
+      // range % Local/Mapped Ratio != 0
+      // if (uk.ac.vamsas.objects.utils.Range.getIntervals(range))
+
     }
   }
 
-}
\ No newline at end of file
+}