diff --git a/mars-station/pom.xml b/mars-station/pom.xml
index 21d8c06..95257ba 100644
--- a/mars-station/pom.xml
+++ b/mars-station/pom.xml
@@ -11,6 +11,13 @@
mars-station
2.0
+
+
+ cat.hack3.codingtests
+ rover-api
+ 1.0
+
+
17
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java
index 2f8b991..0f9e612 100644
--- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java
+++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRover.java
@@ -1,16 +1,17 @@
package cat.hack3.codingtests.marsrover;
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Direction;
-import cat.hack3.codingtests.marsrover.cartography.MarsMap;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMap;
-public class MarsRover implements RotableRiderRover{
+public class MarsRover implements RotableRiderRover {
- private final MarsMap marsMap;
+ private final PlanetMap marsMap;
private final RoverActionReporter roverActionReporter;
private Direction currentDirection;
- public MarsRover(MarsMap marsMap, Direction startingDirection) {
+ public MarsRover(PlanetMap marsMap, Direction startingDirection) {
this.marsMap = marsMap;
currentDirection = startingDirection;
roverActionReporter = new RoverActionReporter();
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java
new file mode 100644
index 0000000..c342a48
--- /dev/null
+++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java
@@ -0,0 +1,13 @@
+package cat.hack3.codingtests.marsrover;
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.api.RoverDeployer;
+import cat.hack3.codingtests.marsrover.cartography.Direction;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMap;
+
+public class MarsRoverDeployer implements RoverDeployer {
+ @Override
+ public RotableRiderRover deploy(PlanetMap map, Direction startingDirection) {
+ return new MarsRover(map, startingDirection);
+ }
+}
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java
index 26efc68..e1b0b68 100644
--- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java
+++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RoverActionReporter.java
@@ -1,6 +1,6 @@
package cat.hack3.codingtests.marsrover;
-import cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation;
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation;
import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Direction;
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MapIncrementalPositionResolver.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java
similarity index 96%
rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MapIncrementalPositionResolver.java
rename to mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java
index 2e7557d..474055c 100644
--- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MapIncrementalPositionResolver.java
+++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java
@@ -1,4 +1,4 @@
-package cat.hack3.codingtests.marsrover.cartography;
+package cat.hack3.codingtests.marsrover.gps;
import cat.hack3.codingtests.marsrover.cartography.Coordinates.Latitude;
import cat.hack3.codingtests.marsrover.cartography.Coordinates.Longitude;
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java
similarity index 89%
rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java
rename to mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java
index bd3b799..beaab12 100644
--- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/MarsMap.java
+++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java
@@ -1,7 +1,10 @@
-package cat.hack3.codingtests.marsrover.cartography;
+package cat.hack3.codingtests.marsrover.gps;
+import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Coordinates.Latitude;
import cat.hack3.codingtests.marsrover.cartography.Coordinates.Longitude;
+import cat.hack3.codingtests.marsrover.cartography.Direction;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMap;
import java.util.List;
@@ -14,7 +17,7 @@ import java.util.List;
* 2 2-1 2-2 2-3
* 3 3-1 3-2 3-3
*/
-public class MarsMap {
+public class MarsMap implements PlanetMap {
private static final int FIRST_POSITION_IN_MAP = 1;
private static final int INCREMENT_UNIT = 1;
@@ -31,6 +34,7 @@ public class MarsMap {
positionResolver = new MapIncrementalPositionResolver(FIRST_POSITION_IN_MAP, INCREMENT_UNIT, height, width);
}
+ @Override
public Coordinates getNextPositionTowards(Direction direction) {
return switch (direction) {
case NORTH -> getDecrementLatitude();
@@ -64,14 +68,17 @@ public class MarsMap {
return currentPosition.withUpdated(Longitude.of(newLongitude));
}
+ @Override
public synchronized void updateLocation(Coordinates newPosition) {
currentPosition = newPosition;
}
+ @Override
public boolean willCollideWithObstacle(Coordinates newCoordinates) {
return obstaclesLocalizations.contains(newCoordinates);
}
+ @Override
public Coordinates getCurrentPosition() {
return currentPosition;
}
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java
new file mode 100644
index 0000000..62ff59e
--- /dev/null
+++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java
@@ -0,0 +1,18 @@
+package cat.hack3.codingtests.marsrover.gps;
+
+import cat.hack3.codingtests.marsrover.cartography.Coordinates;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMap;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer;
+
+import java.util.List;
+
+public class MarsMapInitializer implements PlanetMapInitializer {
+ @Override
+ public PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations) {
+ return new MarsMap(height, width, startingCoordinates, obstaclesLocalizations);
+ }
+ @Override
+ public PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates) {
+ return new MarsMap(height, width, startingCoordinates);
+ }
+}
diff --git a/mars-station/src/main/java/module-info.java b/mars-station/src/main/java/module-info.java
new file mode 100644
index 0000000..9607833
--- /dev/null
+++ b/mars-station/src/main/java/module-info.java
@@ -0,0 +1,10 @@
+module mars.station {
+ requires rover.api;
+ requires java.logging;
+
+ provides cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer
+ with cat.hack3.codingtests.marsrover.gps.MarsMapInitializer;
+
+ provides cat.hack3.codingtests.marsrover.api.RoverDeployer
+ with cat.hack3.codingtests.marsrover.MarsRoverDeployer;
+}
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index e924a80..ef30bba 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,6 +13,9 @@
mars-station
user-interface-console
rover-commands
+ rover-api
+ station-plugin
+ tests-suite
diff --git a/rover-api/pom.xml b/rover-api/pom.xml
new file mode 100644
index 0000000..120ff4c
--- /dev/null
+++ b/rover-api/pom.xml
@@ -0,0 +1,20 @@
+
+
+
+ mars-rover
+ cat.hack3.codingtests
+ 10.0
+
+ 4.0.0
+
+ rover-api
+ 1.0
+
+
+ 17
+ 17
+
+
+
\ No newline at end of file
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java
similarity index 89%
rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java
rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java
index c4a899a..eaa4816 100644
--- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/RotableRiderRover.java
+++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java
@@ -1,4 +1,4 @@
-package cat.hack3.codingtests.marsrover;
+package cat.hack3.codingtests.marsrover.api;
import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Direction;
diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java
new file mode 100644
index 0000000..2513cc8
--- /dev/null
+++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java
@@ -0,0 +1,8 @@
+package cat.hack3.codingtests.marsrover.api;
+
+import cat.hack3.codingtests.marsrover.cartography.Direction;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMap;
+
+public interface RoverDeployer {
+ RotableRiderRover deploy(PlanetMap map, Direction startingDirection);
+}
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java
similarity index 82%
rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java
rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java
index 3a99576..7b62e6e 100644
--- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java
+++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java
@@ -14,8 +14,8 @@ public record Coordinates(Latitude latitude, Longitude longitude) {
return Coordinates.of(latitude.pointer, newLongitude.pointer);
}
- record Latitude(long pointer) {
- static Latitude of(long pointer) {
+ public record Latitude(long pointer) {
+ public static Latitude of(long pointer) {
return new Latitude(pointer);
}
@Override
@@ -23,8 +23,8 @@ public record Coordinates(Latitude latitude, Longitude longitude) {
return String.valueOf(pointer);
}
}
- record Longitude(long pointer) {
- static Longitude of(long pointer) {
+ public record Longitude(long pointer) {
+ public static Longitude of(long pointer) {
return new Longitude(pointer);
}
@Override
diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java
similarity index 100%
rename from mars-station/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java
rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java
diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java
new file mode 100644
index 0000000..75a6a5b
--- /dev/null
+++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java
@@ -0,0 +1,11 @@
+package cat.hack3.codingtests.marsrover.cartography;
+
+public interface PlanetMap {
+ Coordinates getNextPositionTowards(Direction direction);
+
+ void updateLocation(Coordinates newPosition);
+
+ boolean willCollideWithObstacle(Coordinates newCoordinates);
+
+ Coordinates getCurrentPosition();
+}
diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java
new file mode 100644
index 0000000..3b06ab4
--- /dev/null
+++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java
@@ -0,0 +1,8 @@
+package cat.hack3.codingtests.marsrover.cartography;
+
+import java.util.List;
+
+public interface PlanetMapInitializer {
+ PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations);
+ PlanetMap setupNewMap(int height, int width, Coordinates startingCoordinates);
+}
diff --git a/rover-api/src/main/java/module-info.java b/rover-api/src/main/java/module-info.java
new file mode 100644
index 0000000..1248447
--- /dev/null
+++ b/rover-api/src/main/java/module-info.java
@@ -0,0 +1,4 @@
+module rover.api {
+ exports cat.hack3.codingtests.marsrover.api;
+ exports cat.hack3.codingtests.marsrover.cartography;
+}
\ No newline at end of file
diff --git a/rover-commands/pom.xml b/rover-commands/pom.xml
index 04962eb..45f943a 100644
--- a/rover-commands/pom.xml
+++ b/rover-commands/pom.xml
@@ -12,17 +12,17 @@
rover-commands
2.0
+
+
+ cat.hack3.codingtests
+ rover-api
+ 1.0
+
+
+
17
17
-
-
- cat.hack3.codingtests
- mars-station
- 2.0
-
-
-
\ No newline at end of file
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java
deleted file mode 100644
index 2f2d11b..0000000
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package cat.hack3.codingtests.marsrover;
-
-class MoveForwardCommand implements RoverCommand {
- private final RotableRiderRover rover;
-
- public MoveForwardCommand(RotableRiderRover rover) {
- this.rover = rover;
- }
-
- public void execute() {
- rover.moveTowards(rover.getCurrentDirection());
- }
-}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java
deleted file mode 100644
index 065082d..0000000
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cat.hack3.codingtests.marsrover;
-
-import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.LEFT;
-
-class TurnLeftCommand implements RoverCommand {
- private final RotableRiderRover rover;
-
- public TurnLeftCommand(RotableRiderRover rover) {
- this.rover = rover;
- }
-
- @Override
- public void execute() {
- rover.rotateTowards(LEFT);
- }
-}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java
deleted file mode 100644
index a4273e6..0000000
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package cat.hack3.codingtests.marsrover;
-
-import static cat.hack3.codingtests.marsrover.RotableRiderRover.Rotation.RIGHT;
-
-class TurnRightCommand implements RoverCommand {
- private final RotableRiderRover rover;
-
- public TurnRightCommand(RotableRiderRover rover) {
- this.rover = rover;
- }
-
- @Override
- public void execute() {
- rover.rotateTowards(RIGHT);
- }
-}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java
similarity index 51%
rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java
rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java
index de9ac8c..9e822e5 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveBackwardsCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java
@@ -1,6 +1,10 @@
-package cat.hack3.codingtests.marsrover;
+package cat.hack3.codingtests.marsrover.commands;
-class MoveBackwardsCommand implements RoverCommand {
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.commands.api.RoverCommand;
+
+public class MoveBackwardsCommand implements RoverCommand {
private final RotableRiderRover rover;
public MoveBackwardsCommand(RotableRiderRover rover) {
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java
new file mode 100644
index 0000000..1233488
--- /dev/null
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java
@@ -0,0 +1,17 @@
+package cat.hack3.codingtests.marsrover.commands;
+
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.commands.api.RoverCommand;
+
+public class MoveForwardCommand implements RoverCommand {
+ private final RotableRiderRover rover;
+
+ public MoveForwardCommand(RotableRiderRover rover) {
+ this.rover = rover;
+ }
+
+ public void execute() {
+ rover.moveTowards(rover.getCurrentDirection());
+ }
+}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java
new file mode 100644
index 0000000..82bc0fa
--- /dev/null
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java
@@ -0,0 +1,20 @@
+package cat.hack3.codingtests.marsrover.commands;
+
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.commands.api.RoverCommand;
+
+import static cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation.LEFT;
+
+public class TurnLeftCommand implements RoverCommand {
+ private final RotableRiderRover rover;
+
+ public TurnLeftCommand(RotableRiderRover rover) {
+ this.rover = rover;
+ }
+
+ @Override
+ public void execute() {
+ rover.rotateTowards(LEFT);
+ }
+}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java
new file mode 100644
index 0000000..7eae632
--- /dev/null
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java
@@ -0,0 +1,20 @@
+package cat.hack3.codingtests.marsrover.commands;
+
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.commands.api.RoverCommand;
+
+import static cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation.RIGHT;
+
+public class TurnRightCommand implements RoverCommand {
+ private final RotableRiderRover rover;
+
+ public TurnRightCommand(RotableRiderRover rover) {
+ this.rover = rover;
+ }
+
+ @Override
+ public void execute() {
+ rover.rotateTowards(RIGHT);
+ }
+}
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java
similarity index 57%
rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java
rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java
index 77104cb..e932991 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/CommandFactory.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java
@@ -1,4 +1,11 @@
-package cat.hack3.codingtests.marsrover;
+package cat.hack3.codingtests.marsrover.commands.api;
+
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.commands.MoveBackwardsCommand;
+import cat.hack3.codingtests.marsrover.commands.MoveForwardCommand;
+import cat.hack3.codingtests.marsrover.commands.TurnLeftCommand;
+import cat.hack3.codingtests.marsrover.commands.TurnRightCommand;
public class CommandFactory {
private final RotableRiderRover rover;
diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java
similarity index 69%
rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java
rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java
index 27e65ce..b571c86 100644
--- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/RoverCommand.java
+++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java
@@ -1,4 +1,4 @@
-package cat.hack3.codingtests.marsrover;
+package cat.hack3.codingtests.marsrover.commands.api;
public interface RoverCommand {
enum Type {MOVE_FORWARD, MOVE_BACKWARDS, TURN_LEFT, TURN_RIGHT}
diff --git a/rover-commands/src/main/java/module-info.java b/rover-commands/src/main/java/module-info.java
new file mode 100644
index 0000000..a8da85a
--- /dev/null
+++ b/rover-commands/src/main/java/module-info.java
@@ -0,0 +1,5 @@
+module rover.commands {
+ requires rover.api;
+
+ exports cat.hack3.codingtests.marsrover.commands.api;
+}
\ No newline at end of file
diff --git a/station-plugin/pom.xml b/station-plugin/pom.xml
new file mode 100644
index 0000000..2dda5a5
--- /dev/null
+++ b/station-plugin/pom.xml
@@ -0,0 +1,27 @@
+
+
+
+ mars-rover
+ cat.hack3.codingtests
+ 10.0
+
+ 4.0.0
+
+ station-plugin
+
+
+ cat.hack3.codingtests
+ rover-api
+ 1.0
+ compile
+
+
+
+
+ 17
+ 17
+
+
+
\ No newline at end of file
diff --git a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java
new file mode 100644
index 0000000..2083f9f
--- /dev/null
+++ b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java
@@ -0,0 +1,14 @@
+package cat.hack3.codingtests.marsrover.plugin.station;
+
+import cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer;
+
+import java.util.ServiceLoader;
+
+public class PlanetMapInitializerProvider {
+ public PlanetMapInitializer getNextAvailable() {
+ return ServiceLoader
+ .load(PlanetMapInitializer.class)
+ .findFirst()
+ .orElseThrow();
+ }
+}
diff --git a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java
new file mode 100644
index 0000000..1177874
--- /dev/null
+++ b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java
@@ -0,0 +1,14 @@
+package cat.hack3.codingtests.marsrover.plugin.station;
+
+import cat.hack3.codingtests.marsrover.api.RoverDeployer;
+
+import java.util.ServiceLoader;
+
+public class RoverDeployerProvider {
+ public RoverDeployer getNextAvailable() {
+ return ServiceLoader
+ .load(RoverDeployer.class)
+ .findFirst()
+ .orElseThrow();
+ }
+}
diff --git a/station-plugin/src/main/java/module-info.java b/station-plugin/src/main/java/module-info.java
new file mode 100644
index 0000000..79c760b
--- /dev/null
+++ b/station-plugin/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module station.plugin {
+ requires rover.api;
+
+ uses cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer;
+ uses cat.hack3.codingtests.marsrover.api.RoverDeployer;
+
+ exports cat.hack3.codingtests.marsrover.plugin.station;
+}
\ No newline at end of file
diff --git a/tests-suite/pom.xml b/tests-suite/pom.xml
new file mode 100644
index 0000000..84b4677
--- /dev/null
+++ b/tests-suite/pom.xml
@@ -0,0 +1,45 @@
+
+
+
+ mars-rover
+ cat.hack3.codingtests
+ 10.0
+
+ 4.0.0
+
+ tests-suite
+
+
+ cat.hack3.codingtests
+ rover-api
+ 1.0
+ test
+
+
+ cat.hack3.codingtests
+ station-plugin
+ 10.0
+ test
+
+
+ cat.hack3.codingtests
+ rover-commands
+ 2.0
+ test
+
+
+ cat.hack3.codingtests
+ mars-station
+ 2.0
+ test
+
+
+
+
+ 17
+ 17
+
+
+
\ No newline at end of file
diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java
new file mode 100644
index 0000000..fe3e247
--- /dev/null
+++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java
@@ -0,0 +1,63 @@
+package cat.hack3.codingtests.marsrover.test;
+
+import cat.hack3.codingtests.marsrover.api.RotableRiderRover;
+import cat.hack3.codingtests.marsrover.cartography.Coordinates;
+import cat.hack3.codingtests.marsrover.cartography.Direction;
+import cat.hack3.codingtests.marsrover.cartography.PlanetMap;
+import cat.hack3.codingtests.marsrover.commands.api.CommandFactory;
+import cat.hack3.codingtests.marsrover.commands.api.RoverCommand;
+import cat.hack3.codingtests.marsrover.plugin.station.PlanetMapInitializerProvider;
+import cat.hack3.codingtests.marsrover.plugin.station.RoverDeployerProvider;
+
+import java.util.List;
+
+import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH;
+import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*;
+
+public class CommonTests {
+
+ public static final Direction STARTING_DIRECTION = SOUTH;
+
+ protected RotableRiderRover rover;
+ protected RoverCommand moveForwardCommand;
+ protected RoverCommand moveBackwardsCommand;
+ protected RoverCommand turnLeftCommand;
+ protected RoverCommand turnRightCommand;
+
+ private PlanetMapInitializerProvider gpsProvider;
+ private RoverDeployerProvider roverProvider;
+
+ protected void setup() {
+ gpsProvider = new PlanetMapInitializerProvider();
+ roverProvider = new RoverDeployerProvider();
+
+ int mapWidth = 10;
+ int mapHeight = 10;
+ int latitudeStartingPoint = 2;
+ int longitudeStartingPoint = 3;
+ var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint);
+
+ var marsMap = getMap(mapHeight, mapWidth, startingCoordinates);
+ rover = getRover(marsMap);
+
+ var commandFactory = new CommandFactory(this.rover);
+ moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD);
+ moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS);
+ turnLeftCommand = commandFactory.createCommand(TURN_LEFT);
+ turnRightCommand = commandFactory.createCommand(TURN_RIGHT);
+ }
+
+ private PlanetMap getMap(int mapHeight, int mapWidth, Coordinates startingCoordinates) {
+ var planetInitializer = gpsProvider.getNextAvailable();
+ return planetInitializer.setupNewMap(mapHeight, mapWidth, startingCoordinates, getObstacles());
+ }
+
+ private RotableRiderRover getRover(PlanetMap marsMap) {
+ var roverDeployer = roverProvider.getNextAvailable();
+ return roverDeployer.deploy(marsMap, CommonTests.STARTING_DIRECTION);
+ }
+
+ protected List getObstacles() {
+ return List.of();
+ }
+}
diff --git a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java
similarity index 81%
rename from rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java
rename to tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java
index 53b8398..c45d831 100644
--- a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverTest.java
+++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java
@@ -1,41 +1,20 @@
-package cat.hack3.codingtests.marsrover;
+package cat.hack3.codingtests.marsrover.test;
import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Direction;
-import cat.hack3.codingtests.marsrover.cartography.MarsMap;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.stream.IntStream;
-import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*;
import static cat.hack3.codingtests.marsrover.cartography.Direction.*;
import static org.testng.Assert.assertEquals;
-public class MarsRoverTest {
-
- private MarsRover rover;
-
- private RoverCommand moveForwardCommand;
- private RoverCommand moveBackwardsCommand;
- private RoverCommand turnLeftCommand;
- private RoverCommand turnRightCommand;
+public class MarsRoverTest extends CommonTests {
@BeforeMethod
public void setUp() {
- int mapWidth = 10;
- int mapHeight = 10;
- int latitudeStartingPoint = 2;
- int longitudeStartingPoint = 3;
- var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint);
- var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates);
- rover = new MarsRover(marsMap, SOUTH);
-
- var commandFactory = new CommandFactory(rover);
- moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD);
- moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS);
- turnLeftCommand = commandFactory.createCommand(TURN_LEFT);
- turnRightCommand = commandFactory.createCommand(TURN_RIGHT);
+ setup();
}
@Test
diff --git a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java
similarity index 60%
rename from rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java
rename to tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java
index eef547b..7ed9620 100644
--- a/rover-commands/src/test/java/cat/hack3/codingtests/marsrover/MarsRoverWithObstaclesTest.java
+++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java
@@ -1,47 +1,20 @@
-package cat.hack3.codingtests.marsrover;
+package cat.hack3.codingtests.marsrover.test;
import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Direction;
-import cat.hack3.codingtests.marsrover.cartography.MarsMap;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
import java.util.List;
-import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*;
-import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertNotEquals;
-public class MarsRoverWithObstaclesTest {
-
- private MarsRover rover;
-
- private RoverCommand moveForwardCommand;
- private RoverCommand turnLeftCommand;
- private RoverCommand turnRightCommand;
+public class MarsRoverWithObstaclesTest extends CommonTests {
@BeforeMethod
public void setUp() {
- int mapWidth = 10;
- int mapHeight = 10;
- int latitudeStartingPoint = 2;
- int longitudeStartingPoint = 3;
- var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint);
- List obstaclesLocalizations = List.of(
- Coordinates.of(3, 3),
- Coordinates.of(5, 5),
- Coordinates.of(7, 7),
- Coordinates.of(9, 9),
- Coordinates.of(10, 10)
- );
- var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates, obstaclesLocalizations);
- rover = new MarsRover(marsMap, SOUTH);
-
- var commandFactory = new CommandFactory(rover);
- moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD);
- turnLeftCommand = commandFactory.createCommand(TURN_LEFT);
- turnRightCommand = commandFactory.createCommand(TURN_RIGHT);
+ super.setup();
}
@Test
@@ -74,4 +47,14 @@ public class MarsRoverWithObstaclesTest {
assertNotEquals(rover.getCurrentCoordinates(), positionAfterMove);
}
+ @Override
+ protected List getObstacles() {
+ return List.of(
+ Coordinates.of(3, 3),
+ Coordinates.of(5, 5),
+ Coordinates.of(7, 7),
+ Coordinates.of(9, 9),
+ Coordinates.of(10, 10)
+ );
+ }
}
diff --git a/tests-suite/src/test/java/module-info.java b/tests-suite/src/test/java/module-info.java
new file mode 100644
index 0000000..1ac0bf0
--- /dev/null
+++ b/tests-suite/src/test/java/module-info.java
@@ -0,0 +1,10 @@
+module tests.suite {
+ requires rover.api;
+ requires station.plugin;
+ requires mars.station;
+ requires rover.commands;
+
+ requires org.testng;
+
+ exports cat.hack3.codingtests.marsrover.test;
+}
\ No newline at end of file
diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java
index ba40194..0a6f490 100644
--- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java
+++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverCommandsPerformer.java
@@ -1,12 +1,12 @@
package cat.hack3.codingtests.marsrover.ui.console;
-import cat.hack3.codingtests.marsrover.CommandFactory;
import cat.hack3.codingtests.marsrover.RotableRiderRover;
-import cat.hack3.codingtests.marsrover.RoverCommand;
+import cat.hack3.codingtests.marsrover.commands.api.CommandFactory;
+import cat.hack3.codingtests.marsrover.commands.api.RoverCommand;
import java.util.Scanner;
-import static cat.hack3.codingtests.marsrover.RoverCommand.Type.*;
+import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*;
import static cat.hack3.codingtests.marsrover.ui.console.UICommons.isNotExitSignal;
import static cat.hack3.codingtests.marsrover.ui.console.UICommons.output;
diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java
index cbc8ac1..b2b8c85 100644
--- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java
+++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/RoverInitializer.java
@@ -4,7 +4,7 @@ import cat.hack3.codingtests.marsrover.MarsRover;
import cat.hack3.codingtests.marsrover.RotableRiderRover;
import cat.hack3.codingtests.marsrover.cartography.Coordinates;
import cat.hack3.codingtests.marsrover.cartography.Direction;
-import cat.hack3.codingtests.marsrover.cartography.MarsMap;
+import cat.hack3.codingtests.marsrover.gps.MarsMap;
import java.util.InputMismatchException;
import java.util.List;