From de9daade483b43837c132b0ddbf13b17e0886957 Mon Sep 17 00:00:00 2001
From: Guylaine Prat <guylaine.prat@c-s.fr>
Date: Wed, 20 Feb 2019 11:01:10 +0100
Subject: [PATCH] Better management of dumped data in TilesCache when updating
 the tile

In the updateTile method (to be developed by the user according to the
kind of raster to be read), it happens that some useless data are
dumped. For instance, when reading some SRTM data, one needs to read
also some Geoid data. When reading the Geoid data, the elevations may be
dumped (if using the SimpleTile.interpolateElevation method).
---
 src/main/java/org/orekit/rugged/api/Rugged.java        |  2 +-
 .../java/org/orekit/rugged/errors/DumpManager.java     |  6 +++---
 .../java/org/orekit/rugged/linesensor/LineSensor.java  |  4 ++--
 src/main/java/org/orekit/rugged/raster/TilesCache.java | 10 ++++++++++
 4 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/orekit/rugged/api/Rugged.java b/src/main/java/org/orekit/rugged/api/Rugged.java
index 7426efca..f8b109b4 100644
--- a/src/main/java/org/orekit/rugged/api/Rugged.java
+++ b/src/main/java/org/orekit/rugged/api/Rugged.java
@@ -726,7 +726,7 @@ public class Rugged {
         // set up the starting point of the fixed point method
         final double pixel0 = sp0.getPixelNumber();
         final double line0 = sp0.getLineNumber();
-        // Needed data for the dump 
+        // Needed data for the dump
         sensor.dumpRate(line0);
 
         // Apply fixed point method until convergence in pixel and line
diff --git a/src/main/java/org/orekit/rugged/errors/DumpManager.java b/src/main/java/org/orekit/rugged/errors/DumpManager.java
index 78e0f2a8..7fc33bf5 100644
--- a/src/main/java/org/orekit/rugged/errors/DumpManager.java
+++ b/src/main/java/org/orekit/rugged/errors/DumpManager.java
@@ -108,9 +108,9 @@ public class DumpManager {
             isSuspended = false;
         }
     }
-    
-    /** In case dump is suspended and an exception is thrown, 
-     * allow the dump to end nicely.
+
+    /** In case dump is suspended and an exception is thrown,
+     * allows the dump to end nicely.
      */
     public static void endNicely() {
         isSuspended = false;
diff --git a/src/main/java/org/orekit/rugged/linesensor/LineSensor.java b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
index 9963174f..9f4569b4 100644
--- a/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
@@ -183,8 +183,8 @@ public class LineSensor {
     public Vector3D getPosition() {
         return position;
     }
-    
-    /** Dump the rate for the current line number
+
+    /** Dump the rate for the current line number.
      * @param lineNumber line number
      */
     public void dumpRate(final double lineNumber) {
diff --git a/src/main/java/org/orekit/rugged/raster/TilesCache.java b/src/main/java/org/orekit/rugged/raster/TilesCache.java
index 6e487987..528048e1 100644
--- a/src/main/java/org/orekit/rugged/raster/TilesCache.java
+++ b/src/main/java/org/orekit/rugged/raster/TilesCache.java
@@ -19,6 +19,7 @@ package org.orekit.rugged.raster;
 import org.hipparchus.util.FastMath;
 import java.lang.reflect.Array;
 
+import org.orekit.rugged.errors.DumpManager;
 import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.errors.RuggedMessages;
 
@@ -86,7 +87,16 @@ public class TilesCache<T extends Tile> {
 
         // create the tile and retrieve its data
         final T tile = factory.createTile();
+
+        // In case dump is asked for, suspend the dump manager as we don't need to dump anything here
+        // For instance for SRTM DEM, the user needs to read Geoid data that are not useful in the dump
+        final Boolean wasSuspended = DumpManager.suspend();
+
         updater.updateTile(latitude, longitude, tile);
+
+        // Resume the dump manager if necessary
+        DumpManager.resume(wasSuspended);
+
         tile.tileUpdateCompleted();
 
         if (tile.getLocation(latitude, longitude) != Tile.Location.HAS_INTERPOLATION_NEIGHBORS) {
-- 
GitLab