From 36b3e0b70cfb488f0c1f2c7da0e214b767f0e90b Mon Sep 17 00:00:00 2001
From: Luc Maisonobe <luc@orekit.org>
Date: Sat, 20 Dec 2014 16:06:26 +0100
Subject: [PATCH] Reorganized packages.

---
 design/direct-location-class-diagram.puml             |  9 ++++++---
 design/initialization-class-diagram.puml              | 11 +++++++----
 src/main/java/org/orekit/rugged/api/Rugged.java       |  6 ++++++
 .../java/org/orekit/rugged/api/RuggedBuilder.java     |  3 +++
 .../rugged/{api => errors}/RuggedException.java       |  2 +-
 .../orekit/rugged/{api => errors}/RuggedMessages.java |  2 +-
 .../rugged/intersection/BasicScanAlgorithm.java       |  2 +-
 .../rugged/intersection/IgnoreDEMAlgorithm.java       |  2 +-
 .../rugged/intersection/IntersectionAlgorithm.java    |  2 +-
 .../intersection/duvenhage/DuvenhageAlgorithm.java    |  4 ++--
 .../rugged/{api => linesensor}/LineDatation.java      |  2 +-
 .../orekit/rugged/{api => linesensor}/LineSensor.java |  3 ++-
 .../{api => linesensor}/LinearLineDatation.java       |  2 +-
 .../{api => linesensor}/SensorMeanPlaneCrossing.java  |  5 +++--
 .../rugged/{api => linesensor}/SensorPixel.java       |  2 +-
 .../{api => linesensor}/SensorPixelCrossing.java      |  5 +++--
 .../java/org/orekit/rugged/{api => los}/FixedLOS.java |  3 ++-
 .../orekit/rugged/{api => los}/TimeDependentLOS.java  |  3 ++-
 .../java/org/orekit/rugged/raster/SimpleTile.java     |  4 ++--
 src/main/java/org/orekit/rugged/raster/Tile.java      |  2 +-
 .../java/org/orekit/rugged/raster/TileUpdater.java    |  2 +-
 .../java/org/orekit/rugged/raster/TilesCache.java     |  4 ++--
 .../java/org/orekit/rugged/raster/UpdatableTile.java  |  2 +-
 .../org/orekit/rugged/utils/ExtendedEllipsoid.java    |  4 ++--
 .../orekit/rugged/utils/SpacecraftToObservedBody.java |  4 ++--
 .../markdown/tutorials/direct-location-with-DEM.md    |  2 +-
 src/site/markdown/tutorials/direct-location.md        | 10 +++++-----
 src/site/markdown/tutorials/inverse-location.md       |  2 +-
 src/site/xdoc/changes.xml                             |  3 +++
 .../java/org/orekit/rugged/api/RuggedBuilderTest.java |  7 +++++++
 src/test/java/org/orekit/rugged/api/RuggedTest.java   |  8 ++++++++
 .../rugged/{api => errors}/RuggedMessagesTest.java    |  3 ++-
 .../rugged/intersection/AbstractAlgorithmTest.java    |  2 +-
 .../duvenhage/DuvenhageAlgorithmTest.java             |  4 ++--
 .../intersection/duvenhage/MinMaxTreeTileTest.java    |  2 +-
 .../SensorMeanPlaneCrossingTest.java                  | 10 +++++++---
 .../rugged/raster/CheckedPatternElevationUpdater.java |  2 +-
 .../orekit/rugged/raster/CliffsElevationUpdater.java  |  2 +-
 .../orekit/rugged/raster/RandomLandscapeUpdater.java  |  2 +-
 .../java/org/orekit/rugged/raster/SimpleTileTest.java |  4 ++--
 .../java/org/orekit/rugged/raster/TilesCacheTest.java |  2 +-
 .../rugged/raster/VolcanicConeElevationUpdater.java   |  2 +-
 .../orekit/rugged/utils/ExtendedEllipsoidTest.java    |  4 ++--
 43 files changed, 102 insertions(+), 59 deletions(-)
 rename src/main/java/org/orekit/rugged/{api => errors}/RuggedException.java (99%)
 rename src/main/java/org/orekit/rugged/{api => errors}/RuggedMessages.java (99%)
 rename src/main/java/org/orekit/rugged/{api => linesensor}/LineDatation.java (97%)
 rename src/main/java/org/orekit/rugged/{api => linesensor}/LineSensor.java (97%)
 rename src/main/java/org/orekit/rugged/{api => linesensor}/LinearLineDatation.java (98%)
 rename src/main/java/org/orekit/rugged/{api => linesensor}/SensorMeanPlaneCrossing.java (99%)
 rename src/main/java/org/orekit/rugged/{api => linesensor}/SensorPixel.java (97%)
 rename src/main/java/org/orekit/rugged/{api => linesensor}/SensorPixelCrossing.java (97%)
 rename src/main/java/org/orekit/rugged/{api => los}/FixedLOS.java (94%)
 rename src/main/java/org/orekit/rugged/{api => los}/TimeDependentLOS.java (94%)
 rename src/test/java/org/orekit/rugged/{api => errors}/RuggedMessagesTest.java (98%)
 rename src/test/java/org/orekit/rugged/{api => linesensor}/SensorMeanPlaneCrossingTest.java (96%)

diff --git a/design/direct-location-class-diagram.puml b/design/direct-location-class-diagram.puml
index 945487f2..7cdaf5ae 100644
--- a/design/direct-location-class-diagram.puml
+++ b/design/direct-location-class-diagram.puml
@@ -58,19 +58,22 @@
       class Rugged {
         +directLocation(sensorName, line)
       }
-      class LineSensor
       IntersectionAlgorithm "1" <--o Rugged : delegate DEM intersection
       ExtendedEllipsoid <-- Rugged : convert geodetic points
+      SpacecraftToObservedBody <-- Rugged : convert positions/directions
+    }
+
+    package linesensor #DDEBD8 {
+      class LineSensor
       Rugged --> LineSensor : getLOS(date, pixel)
       Rugged --> LineSensor : getDate(line)
-      SpacecraftToObservedBody <-- Rugged : convert positions/directions
     }
 
   }
 
   package mission.specific #C4D2C5 {
     class UserMain #D5E0D5/E2EBE2
-    Rugged              <-- UserMain
+    UserMain -->  Rugged 
   }
 
 @enduml
diff --git a/design/initialization-class-diagram.puml b/design/initialization-class-diagram.puml
index 8c81c1a0..97760af9 100644
--- a/design/initialization-class-diagram.puml
+++ b/design/initialization-class-diagram.puml
@@ -92,21 +92,24 @@
         +TOD
         +VEIS1950
       }
-      class LineSensor
-      ExtendedEllipsoid        "1" <--o Rugged
+       ExtendedEllipsoid        "1" <--o Rugged
       SpacecraftToObservedBody "1" <--o Rugged
-      Rugged o--> "*" LineSensor 
       Rugged --> AlgorithmId
       Rugged --> EllipsoidId
       Rugged --> BodyRotatingFrameId
       Rugged --> InertialFrameId
 
-      UserMain    -->  LineSensor  : creates
       MissionSpecificDEM --|> TileUpdater
       UserMain    -->  Rugged      : configures
 
     }
 
+    package linesensor #DDEBD8 {
+      class LineSensor
+      Rugged   o--> "*" LineSensor 
+      UserMain  -->  LineSensor  : creates
+    }
+
   }
 
 @enduml
diff --git a/src/main/java/org/orekit/rugged/api/Rugged.java b/src/main/java/org/orekit/rugged/api/Rugged.java
index 949f56ba..b90859af 100644
--- a/src/main/java/org/orekit/rugged/api/Rugged.java
+++ b/src/main/java/org/orekit/rugged/api/Rugged.java
@@ -26,7 +26,13 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.frames.Transform;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing;
+import org.orekit.rugged.linesensor.SensorPixel;
+import org.orekit.rugged.linesensor.SensorPixelCrossing;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
diff --git a/src/main/java/org/orekit/rugged/api/RuggedBuilder.java b/src/main/java/org/orekit/rugged/api/RuggedBuilder.java
index b96960c8..15186905 100644
--- a/src/main/java/org/orekit/rugged/api/RuggedBuilder.java
+++ b/src/main/java/org/orekit/rugged/api/RuggedBuilder.java
@@ -36,10 +36,13 @@ import org.orekit.frames.FramesFactory;
 import org.orekit.propagation.Propagator;
 import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.BasicScanAlgorithm;
 import org.orekit.rugged.intersection.IgnoreDEMAlgorithm;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.intersection.duvenhage.DuvenhageAlgorithm;
+import org.orekit.rugged.linesensor.LineSensor;
 import org.orekit.rugged.raster.TileUpdater;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
diff --git a/src/main/java/org/orekit/rugged/api/RuggedException.java b/src/main/java/org/orekit/rugged/errors/RuggedException.java
similarity index 99%
rename from src/main/java/org/orekit/rugged/api/RuggedException.java
rename to src/main/java/org/orekit/rugged/errors/RuggedException.java
index 13e0ea9f..a74d10f8 100644
--- a/src/main/java/org/orekit/rugged/api/RuggedException.java
+++ b/src/main/java/org/orekit/rugged/errors/RuggedException.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.errors;
 
 import java.text.MessageFormat;
 import java.util.Locale;
diff --git a/src/main/java/org/orekit/rugged/api/RuggedMessages.java b/src/main/java/org/orekit/rugged/errors/RuggedMessages.java
similarity index 99%
rename from src/main/java/org/orekit/rugged/api/RuggedMessages.java
rename to src/main/java/org/orekit/rugged/errors/RuggedMessages.java
index 1e8f5dc2..031d104b 100644
--- a/src/main/java/org/orekit/rugged/api/RuggedMessages.java
+++ b/src/main/java/org/orekit/rugged/errors/RuggedMessages.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.errors;
 
 import java.io.IOException;
 import java.io.InputStream;
diff --git a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
index 68313b43..be54eeef 100644
--- a/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/BasicScanAlgorithm.java
@@ -23,7 +23,7 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.errors.OrekitException;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.raster.SimpleTile;
 import org.orekit.rugged.raster.SimpleTileFactory;
 import org.orekit.rugged.raster.Tile;
diff --git a/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java
index 232fb2d9..182204fc 100644
--- a/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/IgnoreDEMAlgorithm.java
@@ -17,7 +17,7 @@
 package org.orekit.rugged.intersection;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
diff --git a/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java
index 43795c88..5fbbe858 100644
--- a/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/IntersectionAlgorithm.java
@@ -17,7 +17,7 @@
 package org.orekit.rugged.intersection;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
diff --git a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
index 7a7a39d1..b4ec8623 100644
--- a/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
+++ b/src/main/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithm.java
@@ -20,8 +20,8 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.errors.OrekitException;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.raster.Tile;
 import org.orekit.rugged.raster.TileUpdater;
diff --git a/src/main/java/org/orekit/rugged/api/LineDatation.java b/src/main/java/org/orekit/rugged/linesensor/LineDatation.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/LineDatation.java
rename to src/main/java/org/orekit/rugged/linesensor/LineDatation.java
index 3686aabf..f02f6aba 100644
--- a/src/main/java/org/orekit/rugged/api/LineDatation.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LineDatation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.orekit.time.AbsoluteDate;
 
diff --git a/src/main/java/org/orekit/rugged/api/LineSensor.java b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/LineSensor.java
rename to src/main/java/org/orekit/rugged/linesensor/LineSensor.java
index fdf48f43..bd1d9155 100644
--- a/src/main/java/org/orekit/rugged/api/LineSensor.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LineSensor.java
@@ -14,11 +14,12 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import java.util.List;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.time.AbsoluteDate;
 
 /** Line sensor model.
diff --git a/src/main/java/org/orekit/rugged/api/LinearLineDatation.java b/src/main/java/org/orekit/rugged/linesensor/LinearLineDatation.java
similarity index 98%
rename from src/main/java/org/orekit/rugged/api/LinearLineDatation.java
rename to src/main/java/org/orekit/rugged/linesensor/LinearLineDatation.java
index 067a5858..6418af48 100644
--- a/src/main/java/org/orekit/rugged/api/LinearLineDatation.java
+++ b/src/main/java/org/orekit/rugged/linesensor/LinearLineDatation.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.orekit.time.AbsoluteDate;
 
diff --git a/src/main/java/org/orekit/rugged/api/SensorMeanPlaneCrossing.java b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java
similarity index 99%
rename from src/main/java/org/orekit/rugged/api/SensorMeanPlaneCrossing.java
rename to src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java
index 389bc2ab..ccaccf87 100644
--- a/src/main/java/org/orekit/rugged/api/SensorMeanPlaneCrossing.java
+++ b/src/main/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossing.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.apache.commons.math3.analysis.differentiation.DerivativeStructure;
 import org.apache.commons.math3.geometry.euclidean.threed.FieldVector3D;
@@ -24,6 +24,7 @@ import org.apache.commons.math3.linear.RealMatrix;
 import org.apache.commons.math3.linear.SingularValueDecomposition;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.frames.Transform;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
 import org.orekit.time.AbsoluteDate;
 import org.orekit.utils.Constants;
@@ -35,7 +36,7 @@ import org.orekit.utils.PVCoordinates;
  * </p>
  * @author Luc Maisonobe
  */
-class SensorMeanPlaneCrossing {
+public class SensorMeanPlaneCrossing {
 
     /** Converter between spacecraft and body. */
     private final SpacecraftToObservedBody scToBody;
diff --git a/src/main/java/org/orekit/rugged/api/SensorPixel.java b/src/main/java/org/orekit/rugged/linesensor/SensorPixel.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/SensorPixel.java
rename to src/main/java/org/orekit/rugged/linesensor/SensorPixel.java
index 1c8ddb5d..026737d8 100644
--- a/src/main/java/org/orekit/rugged/api/SensorPixel.java
+++ b/src/main/java/org/orekit/rugged/linesensor/SensorPixel.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import java.io.Serializable;
 
diff --git a/src/main/java/org/orekit/rugged/api/SensorPixelCrossing.java b/src/main/java/org/orekit/rugged/linesensor/SensorPixelCrossing.java
similarity index 97%
rename from src/main/java/org/orekit/rugged/api/SensorPixelCrossing.java
rename to src/main/java/org/orekit/rugged/linesensor/SensorPixelCrossing.java
index 1c3f85c2..db3cdaee 100644
--- a/src/main/java/org/orekit/rugged/api/SensorPixelCrossing.java
+++ b/src/main/java/org/orekit/rugged/linesensor/SensorPixelCrossing.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import org.apache.commons.math3.analysis.UnivariateFunction;
 import org.apache.commons.math3.analysis.solvers.BracketingNthOrderBrentSolver;
@@ -24,6 +24,7 @@ import org.apache.commons.math3.exception.TooManyEvaluationsException;
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.errors.OrekitExceptionWrapper;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.time.AbsoluteDate;
 
 /** Class devoted to locate where ground point crosses a sensor line.
@@ -32,7 +33,7 @@ import org.orekit.time.AbsoluteDate;
  * </p>
  * @author Luc Maisonobe
  */
-class SensorPixelCrossing {
+public class SensorPixelCrossing {
 
     /** Margin before and after end pixels, in order to avoid search failures near boundaries. */
     private static final double MARGIN = 5.0;
diff --git a/src/main/java/org/orekit/rugged/api/FixedLOS.java b/src/main/java/org/orekit/rugged/los/FixedLOS.java
similarity index 94%
rename from src/main/java/org/orekit/rugged/api/FixedLOS.java
rename to src/main/java/org/orekit/rugged/los/FixedLOS.java
index 5e6cd7b9..4ffc2435 100644
--- a/src/main/java/org/orekit/rugged/api/FixedLOS.java
+++ b/src/main/java/org/orekit/rugged/los/FixedLOS.java
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.los;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.orekit.rugged.linesensor.LineSensor;
 import org.orekit.time.AbsoluteDate;
 
 /** Line-of-sight which does not depends on time.
diff --git a/src/main/java/org/orekit/rugged/api/TimeDependentLOS.java b/src/main/java/org/orekit/rugged/los/TimeDependentLOS.java
similarity index 94%
rename from src/main/java/org/orekit/rugged/api/TimeDependentLOS.java
rename to src/main/java/org/orekit/rugged/los/TimeDependentLOS.java
index d7f6014a..6a7c7059 100644
--- a/src/main/java/org/orekit/rugged/api/TimeDependentLOS.java
+++ b/src/main/java/org/orekit/rugged/los/TimeDependentLOS.java
@@ -14,9 +14,10 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.los;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
+import org.orekit.rugged.linesensor.LineSensor;
 import org.orekit.time.AbsoluteDate;
 
 /** Interface representing a line-of-sight which depends on time.
diff --git a/src/main/java/org/orekit/rugged/raster/SimpleTile.java b/src/main/java/org/orekit/rugged/raster/SimpleTile.java
index d1a08daa..56b861c8 100644
--- a/src/main/java/org/orekit/rugged/raster/SimpleTile.java
+++ b/src/main/java/org/orekit/rugged/raster/SimpleTile.java
@@ -20,8 +20,8 @@ import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.apache.commons.math3.util.FastMath;
 import org.apache.commons.math3.util.Precision;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
 
diff --git a/src/main/java/org/orekit/rugged/raster/Tile.java b/src/main/java/org/orekit/rugged/raster/Tile.java
index b0ce5bbf..31f424f6 100644
--- a/src/main/java/org/orekit/rugged/raster/Tile.java
+++ b/src/main/java/org/orekit/rugged/raster/Tile.java
@@ -18,7 +18,7 @@ package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.utils.NormalizedGeodeticPoint;
 
 /** Interface representing a raster tile.
diff --git a/src/main/java/org/orekit/rugged/raster/TileUpdater.java b/src/main/java/org/orekit/rugged/raster/TileUpdater.java
index 45fc62da..051c4bf2 100644
--- a/src/main/java/org/orekit/rugged/raster/TileUpdater.java
+++ b/src/main/java/org/orekit/rugged/raster/TileUpdater.java
@@ -16,7 +16,7 @@
  */
 package org.orekit.rugged.raster;
 
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 /** Interface used to update Digital Elevation Model tiles.
  * <p>
diff --git a/src/main/java/org/orekit/rugged/raster/TilesCache.java b/src/main/java/org/orekit/rugged/raster/TilesCache.java
index 90123308..6cfeffb4 100644
--- a/src/main/java/org/orekit/rugged/raster/TilesCache.java
+++ b/src/main/java/org/orekit/rugged/raster/TilesCache.java
@@ -25,8 +25,8 @@ import java.util.Iterator;
 import java.util.List;
 
 import org.apache.commons.math3.util.FastMath;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.raster.Tile.Location;
 
 /** Cache for Digital Elevation Model {@link Tile tiles}.
diff --git a/src/main/java/org/orekit/rugged/raster/UpdatableTile.java b/src/main/java/org/orekit/rugged/raster/UpdatableTile.java
index 51fb1141..c557155b 100644
--- a/src/main/java/org/orekit/rugged/raster/UpdatableTile.java
+++ b/src/main/java/org/orekit/rugged/raster/UpdatableTile.java
@@ -16,7 +16,7 @@
  */
 package org.orekit.rugged.raster;
 
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 /** Interface representing one tile of a raster Digital Elevation Model.
  * @author Luc Maisonobe
diff --git a/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java b/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java
index 0e624b38..50136621 100644
--- a/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java
+++ b/src/main/java/org/orekit/rugged/utils/ExtendedEllipsoid.java
@@ -23,8 +23,8 @@ import org.orekit.bodies.GeodeticPoint;
 import org.orekit.bodies.OneAxisEllipsoid;
 import org.orekit.errors.OrekitException;
 import org.orekit.frames.Frame;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.time.AbsoluteDate;
 
 /** Transform provider from Spacecraft frame to observed body frame.
diff --git a/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java b/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java
index 5ce80bad..f1950bd7 100644
--- a/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java
+++ b/src/main/java/org/orekit/rugged/utils/SpacecraftToObservedBody.java
@@ -24,8 +24,8 @@ import org.apache.commons.math3.util.FastMath;
 import org.orekit.errors.OrekitException;
 import org.orekit.frames.Frame;
 import org.orekit.frames.Transform;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.time.AbsoluteDate;
 import org.orekit.utils.AngularDerivativesFilter;
 import org.orekit.utils.CartesianDerivativesFilter;
diff --git a/src/site/markdown/tutorials/direct-location-with-DEM.md b/src/site/markdown/tutorials/direct-location-with-DEM.md
index 9a6809ec..a962a9cd 100644
--- a/src/site/markdown/tutorials/direct-location-with-DEM.md
+++ b/src/site/markdown/tutorials/direct-location-with-DEM.md
@@ -41,7 +41,7 @@ Here's the source code of the class `VolcanicConeElevationUpdater` :
 
     import org.apache.commons.math3.util.FastMath;
     import org.orekit.bodies.GeodeticPoint;
-    import org.orekit.rugged.api.RuggedException;
+    import org.orekit.rugged.errors.RuggedException;
     import org.orekit.utils.Constants;
     
     public class VolcanicConeElevationUpdater implements TileUpdater {
diff --git a/src/site/markdown/tutorials/direct-location.md b/src/site/markdown/tutorials/direct-location.md
index 6f0005c6..9074301d 100644
--- a/src/site/markdown/tutorials/direct-location.md
+++ b/src/site/markdown/tutorials/direct-location.md
@@ -46,8 +46,8 @@ For this we need the following packages
     import org.apache.commons.math3.geometry.euclidean.threed.Rotation;
     import org.apache.commons.math3.geometry.euclidean.threed.Vector3D;
     import org.apache.commons.math3.util.FastMath;
-    import org.orekit.rugged.api.TimeDependentLOS;
-    import org.orekit.rugged.api.FixedLOS;
+    import org.orekit.rugged.los.TimeDependentLOS;
+    import org.orekit.rugged.los.FixedLOS;
 
 
 The viewing direction of pixel i with respect to the instrument is defined by the vector:
@@ -81,7 +81,7 @@ We use Orekit for handling time and dates, and Rugged for defining the datation
 
     import org.orekit.time.AbsoluteDate;
     import org.orekit.time.TimeScalesFactory;
-    import org.orekit.rugged.api.LinearLineDatation;
+    import org.orekit.rugged.linesensor.LinearLineDatation;
     AbsoluteDate absDate = new AbsoluteDate("2009-12-11T10:49:55.899994", TimeScalesFactory.getGPS());
     LinearLineDatation lineDatation = new LinearLineDatation(absDate, 1d, 20); 
 
@@ -96,7 +96,7 @@ need to worry about conversion.
 
 With the LOS and the datation now defined , we can initialize a line sensor object in Rugged:
 
-    import org.orekit.rugged.api.LineSensor;
+    import org.orekit.rugged.linesensor.LineSensor;
     LineSensor lineSensor = new LineSensor("mySensor", lineDatation, Vector3D.ZERO, lineOfSight);
 
 The first parameter is the nickname of the sensor. It is necessary because we can define multiple
@@ -187,7 +187,7 @@ Finally we can initialize Rugged. It looks like this:
     import org.orekit.rugged.api.EllipsoidId;
     import org.orekit.rugged.api.InertialFrameId;
     import org.orekit.rugged.api.Rugged;
-    import org.orekit.rugged.api.RuggedException;
+    import org.orekit.rugged.errors.RuggedException;
     import org.orekit.utils.AngularDerivativesFilter;
     import org.orekit.utils.CartesianDerivativesFilter;
     import org.orekit.utils.IERSConventions;
diff --git a/src/site/markdown/tutorials/inverse-location.md b/src/site/markdown/tutorials/inverse-location.md
index 275e87d5..daadeeda 100644
--- a/src/site/markdown/tutorials/inverse-location.md
+++ b/src/site/markdown/tutorials/inverse-location.md
@@ -25,7 +25,7 @@ The initialisation of Rugged is similar as in the [Direct location](direct-locat
 Once Rugged initialised, one can compute the line number and the pixel number of a point defined by its Geodetic coordinates:
 
     import org.orekit.bodies.GeodeticPoint;
-    import org.orekit.rugged.api.SensorPixel;
+    import org.orekit.rugged.linesensor.SensorPixel;
     GeodeticPoint gp = new GeodeticPoint(latitude, longitude, altitude);
     SensorPixel sensorPixel = rugged.inverseLocation(sensorName, gp, minLine, maxLine);
 where minLine (maxLine, respectively) is the minimum line number for the search interval (maximum line number, respectively). 
diff --git a/src/site/xdoc/changes.xml b/src/site/xdoc/changes.xml
index 39a461a1..9f0e9d2f 100644
--- a/src/site/xdoc/changes.xml
+++ b/src/site/xdoc/changes.xml
@@ -22,6 +22,9 @@
   <body>
     <release version="1.0" date="TBD"
              description="TBD">
+      <action dev="luc" type="add" >
+        Reorganized packages.
+      </action>
       <action dev="luc" type="add" >
         Added getters to the RuggedBuilder.
       </action>
diff --git a/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java b/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java
index 175cbc16..781ddba0 100644
--- a/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java
+++ b/src/test/java/org/orekit/rugged/api/RuggedBuilderTest.java
@@ -64,6 +64,13 @@ import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.analytical.KeplerianPropagator;
 import org.orekit.propagation.numerical.NumericalPropagator;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
+import org.orekit.rugged.linesensor.LineDatation;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.LinearLineDatation;
+import org.orekit.rugged.los.FixedLOS;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.rugged.raster.RandomLandscapeUpdater;
 import org.orekit.rugged.raster.TileUpdater;
 import org.orekit.rugged.raster.VolcanicConeElevationUpdater;
diff --git a/src/test/java/org/orekit/rugged/api/RuggedTest.java b/src/test/java/org/orekit/rugged/api/RuggedTest.java
index 8a9bbc14..fcbcfbe3 100644
--- a/src/test/java/org/orekit/rugged/api/RuggedTest.java
+++ b/src/test/java/org/orekit/rugged/api/RuggedTest.java
@@ -65,6 +65,14 @@ import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.analytical.KeplerianPropagator;
 import org.orekit.propagation.numerical.NumericalPropagator;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
+import org.orekit.rugged.linesensor.LineDatation;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.LinearLineDatation;
+import org.orekit.rugged.linesensor.SensorPixel;
+import org.orekit.rugged.los.FixedLOS;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.rugged.raster.RandomLandscapeUpdater;
 import org.orekit.rugged.raster.TileUpdater;
 import org.orekit.rugged.raster.VolcanicConeElevationUpdater;
diff --git a/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java b/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
similarity index 98%
rename from src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
rename to src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
index c3177313..41f8cc7f 100644
--- a/src/test/java/org/orekit/rugged/api/RuggedMessagesTest.java
+++ b/src/test/java/org/orekit/rugged/errors/RuggedMessagesTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.errors;
 
 
 import java.text.MessageFormat;
@@ -24,6 +24,7 @@ import java.util.ResourceBundle;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.orekit.rugged.errors.RuggedMessages;
 
 public class RuggedMessagesTest {
 
diff --git a/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java b/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
index 09be6ac0..66379635 100644
--- a/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/AbstractAlgorithmTest.java
@@ -37,7 +37,7 @@ import org.orekit.frames.FramesFactory;
 import org.orekit.frames.Transform;
 import org.orekit.orbits.CartesianOrbit;
 import org.orekit.propagation.SpacecraftState;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTile;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTileFactory;
diff --git a/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java b/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java
index 0ccac1f7..dd8e9da9 100644
--- a/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/duvenhage/DuvenhageAlgorithmTest.java
@@ -27,8 +27,8 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.orekit.bodies.GeodeticPoint;
 import org.orekit.errors.OrekitException;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.intersection.AbstractAlgorithmTest;
 import org.orekit.rugged.intersection.IntersectionAlgorithm;
 import org.orekit.rugged.raster.CheckedPatternElevationUpdater;
diff --git a/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java b/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java
index e5f87e03..789cf4c1 100644
--- a/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java
+++ b/src/test/java/org/orekit/rugged/intersection/duvenhage/MinMaxTreeTileTest.java
@@ -21,7 +21,7 @@ import java.lang.reflect.Field;
 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.errors.RuggedException;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTile;
 import org.orekit.rugged.intersection.duvenhage.MinMaxTreeTileFactory;
 
diff --git a/src/test/java/org/orekit/rugged/api/SensorMeanPlaneCrossingTest.java b/src/test/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossingTest.java
similarity index 96%
rename from src/test/java/org/orekit/rugged/api/SensorMeanPlaneCrossingTest.java
rename to src/test/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossingTest.java
index fb9d5c2b..845d725e 100644
--- a/src/test/java/org/orekit/rugged/api/SensorMeanPlaneCrossingTest.java
+++ b/src/test/java/org/orekit/rugged/linesensor/SensorMeanPlaneCrossingTest.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.orekit.rugged.api;
+package org.orekit.rugged.linesensor;
 
 import java.io.File;
 import java.net.URISyntaxException;
@@ -44,8 +44,12 @@ import org.orekit.propagation.Propagator;
 import org.orekit.propagation.SpacecraftState;
 import org.orekit.propagation.analytical.KeplerianPropagator;
 import org.orekit.propagation.sampling.OrekitFixedStepHandler;
-import org.orekit.rugged.api.LinearLineDatation;
-import org.orekit.rugged.api.LineSensor;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.linesensor.LineSensor;
+import org.orekit.rugged.linesensor.LinearLineDatation;
+import org.orekit.rugged.linesensor.SensorMeanPlaneCrossing;
+import org.orekit.rugged.los.FixedLOS;
+import org.orekit.rugged.los.TimeDependentLOS;
 import org.orekit.rugged.utils.SpacecraftToObservedBody;
 import org.orekit.time.AbsoluteDate;
 import org.orekit.utils.AngularDerivativesFilter;
diff --git a/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java b/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java
index 440bb92d..11336382 100644
--- a/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/CheckedPatternElevationUpdater.java
@@ -17,7 +17,7 @@
 package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.util.FastMath;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 public class CheckedPatternElevationUpdater implements TileUpdater {
 
diff --git a/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java b/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java
index 09b71b04..36712d4a 100644
--- a/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/CliffsElevationUpdater.java
@@ -18,7 +18,7 @@ package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 public class CliffsElevationUpdater implements TileUpdater {
 
diff --git a/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java b/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java
index 40c43b85..b257ef75 100644
--- a/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/RandomLandscapeUpdater.java
@@ -22,7 +22,7 @@ import org.apache.commons.math3.random.RandomGenerator;
 import org.apache.commons.math3.random.Well19937a;
 import org.apache.commons.math3.util.ArithmeticUtils;
 import org.apache.commons.math3.util.FastMath;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 
 public class RandomLandscapeUpdater implements TileUpdater {
 
diff --git a/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java b/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
index 66950871..20d66e07 100644
--- a/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
+++ b/src/test/java/org/orekit/rugged/raster/SimpleTileTest.java
@@ -21,8 +21,8 @@ import org.apache.commons.math3.util.FastMath;
 import org.junit.Assert;
 import org.junit.Test;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.raster.SimpleTile;
 import org.orekit.rugged.raster.SimpleTileFactory;
 import org.orekit.rugged.raster.Tile;
diff --git a/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java b/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java
index 0f0ca1a6..801d2d29 100644
--- a/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java
+++ b/src/test/java/org/orekit/rugged/raster/TilesCacheTest.java
@@ -21,7 +21,7 @@ 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.errors.RuggedException;
 import org.orekit.rugged.raster.SimpleTile;
 import org.orekit.rugged.raster.TilesCache;
 
diff --git a/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java b/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java
index fae00fd3..32a0d21f 100644
--- a/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java
+++ b/src/test/java/org/orekit/rugged/raster/VolcanicConeElevationUpdater.java
@@ -18,7 +18,7 @@ package org.orekit.rugged.raster;
 
 import org.apache.commons.math3.util.FastMath;
 import org.orekit.bodies.GeodeticPoint;
-import org.orekit.rugged.api.RuggedException;
+import org.orekit.rugged.errors.RuggedException;
 import org.orekit.utils.Constants;
 
 public class VolcanicConeElevationUpdater implements TileUpdater {
diff --git a/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java b/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java
index c098c4ca..117c85e6 100644
--- a/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java
+++ b/src/test/java/org/orekit/rugged/utils/ExtendedEllipsoidTest.java
@@ -32,8 +32,8 @@ import org.orekit.data.DirectoryCrawler;
 import org.orekit.errors.OrekitException;
 import org.orekit.frames.Frame;
 import org.orekit.frames.FramesFactory;
-import org.orekit.rugged.api.RuggedException;
-import org.orekit.rugged.api.RuggedMessages;
+import org.orekit.rugged.errors.RuggedException;
+import org.orekit.rugged.errors.RuggedMessages;
 import org.orekit.rugged.utils.ExtendedEllipsoid;
 import org.orekit.utils.Constants;
 import org.orekit.utils.IERSConventions;
-- 
GitLab