From 2e750f4880471b54a3ff767cc8e353d9c33325fc Mon Sep 17 00:00:00 2001
From: Luc Maisonobe <luc@orekit.org>
Date: Sun, 9 Mar 2014 11:14:04 +0100
Subject: [PATCH] Use new specialized exceptions.

---
 .../org/orekit/rugged/api/TileUpdater.java    |  4 ++-
 .../org/orekit/rugged/api/UpdatableTile.java  |  4 +--
 .../orekit/rugged/core/dem/SimpleTile.java    | 12 +++++---
 .../java/org/orekit/rugged/core/dem/Tile.java |  5 ++--
 .../orekit/rugged/core/dem/TilesCache.java    | 17 ++++++++---
 .../core/dem/ConstantElevationUpdater.java    |  4 ++-
 .../rugged/core/dem/SimpleTileTest.java       | 29 ++++++++++++++++++-
 .../rugged/core/dem/TilesCacheTest.java       |  9 +++---
 8 files changed, 65 insertions(+), 19 deletions(-)

diff --git a/rugged-api/src/main/java/org/orekit/rugged/api/TileUpdater.java b/rugged-api/src/main/java/org/orekit/rugged/api/TileUpdater.java
index 2adb19e1..dd225359 100644
--- a/rugged-api/src/main/java/org/orekit/rugged/api/TileUpdater.java
+++ b/rugged-api/src/main/java/org/orekit/rugged/api/TileUpdater.java
@@ -30,7 +30,9 @@ public interface TileUpdater {
      * @param latitude latitude that must be covered by the tile
      * @param longitude longitude that must be covered by the tile
      * @param tile to update
+     * @exception RuggedException if tile cannot be updated
      */
-    void updateTile(double latitude, double longitude, UpdatableTile tile);
+    void updateTile(double latitude, double longitude, UpdatableTile tile)
+        throws RuggedException;
 
 }
diff --git a/rugged-api/src/main/java/org/orekit/rugged/api/UpdatableTile.java b/rugged-api/src/main/java/org/orekit/rugged/api/UpdatableTile.java
index d337b724..9086a3e3 100644
--- a/rugged-api/src/main/java/org/orekit/rugged/api/UpdatableTile.java
+++ b/rugged-api/src/main/java/org/orekit/rugged/api/UpdatableTile.java
@@ -37,9 +37,9 @@ public interface UpdatableTile {
      * @param latitudeIndex index of latitude (row index)
      * @param longitudeIndex index of longitude (column index)
      * @param elevation elevation (m)
-     * @exception IllegalArgumentException if indices are out of bound
+     * @exception RuggedException if indices are out of bound
      */
     void setElevation(int latitudeIndex, int longitudeIndex, double elevation)
-        throws IllegalArgumentException;
+        throws RuggedException;
 
 }
diff --git a/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java b/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java
index 8aac9fa9..aa8407b3 100644
--- a/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java
+++ b/rugged-core/src/main/java/org/orekit/rugged/core/dem/SimpleTile.java
@@ -17,6 +17,8 @@
 package org.orekit.rugged.core.dem;
 
 import org.apache.commons.math3.util.FastMath;
+import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.api.RuggedMessages;
 
 /** Simple implementation of a {@link Tile}.
  * @author Luc Maisonobe
@@ -69,7 +71,7 @@ public class SimpleTile implements Tile {
     /** {@inheritDoc} */
     @Override
     public void setElevation(final int latitudeIndex, final int longitudeIndex,
-                             final double elevation) throws IllegalArgumentException {
+                             final double elevation) throws RuggedException {
         checkIndices(latitudeIndex, longitudeIndex);
         elevations[latitudeIndex * longitudeColumns + longitudeIndex] = elevation;
     }
@@ -113,7 +115,7 @@ public class SimpleTile implements Tile {
     /** {@inheritDoc} */
     @Override
     public double getElevationAtIndices(int latitudeIndex, int longitudeIndex)
-        throws IllegalArgumentException {
+        throws RuggedException {
         checkIndices(latitudeIndex, longitudeIndex);
         return elevations[latitudeIndex * longitudeColumns + longitudeIndex];
     }
@@ -133,10 +135,12 @@ public class SimpleTile implements Tile {
      * @exception IllegalArgumentException if indices are out of bound
      */
     private void checkIndices(int latitudeIndex, int longitudeIndex)
-        throws IllegalArgumentException {
+        throws RuggedException {
         if (latitudeIndex  < 0 || latitudeIndex  >= latitudeRows ||
             longitudeIndex < 0 || longitudeIndex >= longitudeColumns) {
-            throw new IllegalArgumentException();
+            throw new RuggedException(RuggedMessages.OUT_OF_TILE_INDICES,
+                                      latitudeIndex, longitudeIndex,
+                                      latitudeRows - 1, longitudeColumns - 1);
         }        
     }
 
diff --git a/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java b/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java
index 82e53d5f..554af99c 100644
--- a/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java
+++ b/rugged-core/src/main/java/org/orekit/rugged/core/dem/Tile.java
@@ -16,6 +16,7 @@
  */
 package org.orekit.rugged.core.dem;
 
+import org.orekit.rugged.api.RuggedException;
 import org.orekit.rugged.api.UpdatableTile;
 
 /** Interface representing a raster tile.
@@ -57,10 +58,10 @@ public interface Tile extends UpdatableTile {
      * @param latitudeIndex
      * @param longitudeIndex
      * @return elevation
-     * @exception IllegalArgumentException if indices are out of bound
+     * @exception RuggedException if indices are out of bound
      */
     double getElevationAtIndices(int latitudeIndex, int longitudeIndex)
-        throws IllegalArgumentException;
+        throws RuggedException;
 
     /** Check if a tile covers a ground point.
      * @param latitude ground point latitude
diff --git a/rugged-core/src/main/java/org/orekit/rugged/core/dem/TilesCache.java b/rugged-core/src/main/java/org/orekit/rugged/core/dem/TilesCache.java
index c8c5c1cb..a840c652 100644
--- a/rugged-core/src/main/java/org/orekit/rugged/core/dem/TilesCache.java
+++ b/rugged-core/src/main/java/org/orekit/rugged/core/dem/TilesCache.java
@@ -23,6 +23,7 @@ import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 
+import org.orekit.rugged.api.RuggedException;
 import org.orekit.rugged.api.TileUpdater;
 
 /** Cache for Digital Elevation Model {@link Tile tiles}.
@@ -68,8 +69,10 @@ public class TilesCache<T extends Tile> {
      * @param latitude ground point latitude
      * @param longitude ground point longitude
      * @return tile covering the ground point
+     * @exception RuggedException if newly created tile cannot be updated
      */
-    public T getTile(final double latitude, final double longitude) {
+    public T getTile(final double latitude, final double longitude)
+        throws RuggedException {
         return getStrip(latitude, longitude).getTile(latitude, longitude);
     }
 
@@ -77,8 +80,10 @@ public class TilesCache<T extends Tile> {
      * @param latitude latitude of the point
      * @param longitude longitude of the point
      * @return new tile covering the point
+     * @exception RuggedException if tile cannot be updated
      */
-    private T createTile(final double latitude, final double longitude) {
+    private T createTile(final double latitude, final double longitude)
+        throws RuggedException {
 
         if (evictionCache[next] != null) {
             // the tile we are creating will evict this older tile
@@ -106,8 +111,10 @@ public class TilesCache<T extends Tile> {
      * @param latitude ground point latitude
      * @param longitude ground point longitude
      * @return strip covering the ground point
+     * @exception RuggedException if tile cannot be updated
      */
-    private TilesStrip getStrip(final double latitude, final double longitude) {
+    private TilesStrip getStrip(final double latitude, final double longitude)
+        throws RuggedException {
 
         // look for a strip at the specified latitude
         final int index = Collections.binarySearch(searchCache, new BasicLatitudeProvider(latitude),
@@ -238,8 +245,10 @@ public class TilesCache<T extends Tile> {
          * @param latitude ground point latitude
          * @param longitude ground point longitude
          * @return strip covering the ground point
+         * @exception RuggedException if tile cannot be updated
          */
-        public T getTile(final double latitude, final double longitude) {
+        public T getTile(final double latitude, final double longitude)
+            throws RuggedException {
 
             // look for a tile at the specified longitude
             final int index = Collections.binarySearch(tiles, new BasicLongitudeProvider(longitude),
diff --git a/rugged-core/src/test/java/orekit/rugged/core/dem/ConstantElevationUpdater.java b/rugged-core/src/test/java/orekit/rugged/core/dem/ConstantElevationUpdater.java
index 44777d7e..00adab3e 100644
--- a/rugged-core/src/test/java/orekit/rugged/core/dem/ConstantElevationUpdater.java
+++ b/rugged-core/src/test/java/orekit/rugged/core/dem/ConstantElevationUpdater.java
@@ -17,6 +17,7 @@
 package orekit.rugged.core.dem;
 
 import org.apache.commons.math3.util.FastMath;
+import org.orekit.rugged.api.RuggedException;
 import org.orekit.rugged.api.TileUpdater;
 import org.orekit.rugged.api.UpdatableTile;
 
@@ -32,7 +33,8 @@ public class ConstantElevationUpdater implements TileUpdater {
         this.elevation = elevation;
     }
 
-    public void updateTile(double latitude, double longitude, UpdatableTile tile) {
+    public void updateTile(double latitude, double longitude, UpdatableTile tile)
+        throws RuggedException {
         tile.setGeometry(size * FastMath.floor(latitude / size),
                          size * FastMath.floor(longitude / size),
                          size / n, size / n, n, n);
diff --git a/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java b/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java
index 9faae345..a793af7d 100644
--- a/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java
+++ b/rugged-core/src/test/java/orekit/rugged/core/dem/SimpleTileTest.java
@@ -18,7 +18,10 @@ package orekit.rugged.core.dem;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.api.RuggedMessages;
 import org.orekit.rugged.core.dem.SimpleTile;
+import org.orekit.rugged.core.dem.Tile;
 
 public class SimpleTileTest {
 
@@ -34,7 +37,7 @@ public class SimpleTileTest {
     }
 
     @Test
-    public void testUpdate() {
+    public void testUpdate() throws RuggedException {
 
         SimpleTile tile = new SimpleTile();
         tile.setGeometry(1.0, 2.0, 0.1, 0.2, 100, 200);
@@ -65,4 +68,28 @@ public class SimpleTileTest {
 
     }
 
+    @Test
+    public void testOutOfBounds() throws RuggedException {
+
+        SimpleTile tile = new SimpleTile();
+        tile.setGeometry(1.0, 2.0, 0.1, 0.2, 100, 200);
+        tile.setElevation(50, 100, 1000.0);
+        checkOutOfBound( -1, 100, tile);
+        checkOutOfBound(100, 100, tile);
+        checkOutOfBound( 50,  -1, tile);
+        checkOutOfBound( 50, 200, tile);
+    }
+
+    private void checkOutOfBound(int i, int j, Tile tile) {
+        try {
+            tile.setElevation(i, j, 1000.0);
+        } catch (RuggedException re) {
+            Assert.assertEquals(RuggedMessages.OUT_OF_TILE_INDICES, re.getSpecifier());
+            Assert.assertEquals(i,                              ((Integer) re.getParts()[0]).intValue());
+            Assert.assertEquals(j,                              ((Integer) re.getParts()[1]).intValue());
+            Assert.assertEquals(tile.getLatitudeRows() - 1,     ((Integer) re.getParts()[2]).intValue());
+            Assert.assertEquals(tile.getLongitudeColumns() - 1, ((Integer) re.getParts()[3]).intValue());
+        }
+    }
+
 }
diff --git a/rugged-core/src/test/java/orekit/rugged/core/dem/TilesCacheTest.java b/rugged-core/src/test/java/orekit/rugged/core/dem/TilesCacheTest.java
index 4a7a8907..f17275f0 100644
--- a/rugged-core/src/test/java/orekit/rugged/core/dem/TilesCacheTest.java
+++ b/rugged-core/src/test/java/orekit/rugged/core/dem/TilesCacheTest.java
@@ -21,13 +21,14 @@ import org.apache.commons.math3.random.Well19937a;
 import org.apache.commons.math3.util.FastMath;
 import org.junit.Assert;
 import org.junit.Test;
+import org.orekit.rugged.api.RuggedException;
 import org.orekit.rugged.core.dem.SimpleTile;
 import org.orekit.rugged.core.dem.TilesCache;
 
 public class TilesCacheTest {
 
     @Test
-    public void testSingleTile() {
+    public void testSingleTile() throws RuggedException {
         CountingFactory factory = new CountingFactory();
         TilesCache<SimpleTile> cache = new TilesCache<SimpleTile>(factory,
                 new ConstantElevationUpdater(FastMath.toRadians(3.0), 10, 10.0), 1000);
@@ -40,7 +41,7 @@ public class TilesCacheTest {
     }
 
     @Test
-    public void testEviction() {
+    public void testEviction() throws RuggedException {
         CountingFactory factory = new CountingFactory();
         TilesCache<SimpleTile> cache = new TilesCache<SimpleTile>(factory,
                 new ConstantElevationUpdater(FastMath.toRadians(1.0), 10, 10.0), 12);
@@ -85,7 +86,7 @@ public class TilesCacheTest {
     }
 
     @Test
-    public void testExactEnd() {
+    public void testExactEnd() throws RuggedException {
         CountingFactory factory = new CountingFactory();
         TilesCache<SimpleTile> cache =
                 new TilesCache<SimpleTile>(factory,
@@ -109,7 +110,7 @@ public class TilesCacheTest {
     }
 
     @Test
-    public void testNonContiguousFill() {
+    public void testNonContiguousFill() throws RuggedException {
         CountingFactory factory = new CountingFactory();
         TilesCache<SimpleTile> cache =
                 new TilesCache<SimpleTile>(factory,
-- 
GitLab