From 877d534716c35dbe6ab67fcda324dda809f74f1d Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 00:38:24 +0200 Subject: [PATCH 1/7] applied JPMS. UTs working (in a self module). Big Refactor needed... (sorry for that big commit) --- mars-station/pom.xml | 7 +++ .../codingtests/marsrover/MarsRover.java | 9 +-- .../marsrover/MarsRoverDeployer.java | 13 ++++ .../marsrover/RoverActionReporter.java | 2 +- .../MapIncrementalPositionResolver.java | 2 +- .../{cartography => gps}/MarsMap.java | 11 +++- .../marsrover/gps/MarsMapInitializer.java | 18 ++++++ mars-station/src/main/java/module-info.java | 10 +++ pom.xml | 3 + rover-api/pom.xml | 20 ++++++ .../marsrover/api}/RotableRiderRover.java | 2 +- .../marsrover/api/RoverDeployer.java | 8 +++ .../marsrover/cartography/Coordinates.java | 8 +-- .../marsrover/cartography/Direction.java | 0 .../marsrover/cartography/PlanetMap.java | 11 ++++ .../cartography/PlanetMapInitializer.java | 8 +++ rover-api/src/main/java/module-info.java | 4 ++ rover-commands/pom.xml | 16 ++--- .../marsrover/MoveForwardCommand.java | 13 ---- .../marsrover/TurnLeftCommand.java | 16 ----- .../marsrover/TurnRightCommand.java | 16 ----- .../{ => commands}/MoveBackwardsCommand.java | 8 ++- .../commands/MoveForwardCommand.java | 17 +++++ .../marsrover/commands/TurnLeftCommand.java | 20 ++++++ .../marsrover/commands/TurnRightCommand.java | 20 ++++++ .../{ => commands/api}/CommandFactory.java | 9 ++- .../{ => commands/api}/RoverCommand.java | 2 +- rover-commands/src/main/java/module-info.java | 5 ++ station-plugin/pom.xml | 27 ++++++++ .../station/PlanetMapInitializerProvider.java | 14 +++++ .../plugin/station/RoverDeployerProvider.java | 14 +++++ station-plugin/src/main/java/module-info.java | 8 +++ tests-suite/pom.xml | 45 +++++++++++++ .../marsrover/test/CommonTests.java | 63 +++++++++++++++++++ .../marsrover/test}/MarsRoverTest.java | 27 +------- .../test}/MarsRoverWithObstaclesTest.java | 43 ++++--------- tests-suite/src/test/java/module-info.java | 10 +++ .../ui/console/RoverCommandsPerformer.java | 6 +- .../ui/console/RoverInitializer.java | 2 +- 39 files changed, 409 insertions(+), 128 deletions(-) create mode 100644 mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java rename mars-station/src/main/java/cat/hack3/codingtests/marsrover/{cartography => gps}/MapIncrementalPositionResolver.java (96%) rename mars-station/src/main/java/cat/hack3/codingtests/marsrover/{cartography => gps}/MarsMap.java (89%) create mode 100644 mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java create mode 100644 mars-station/src/main/java/module-info.java create mode 100644 rover-api/pom.xml rename {mars-station/src/main/java/cat/hack3/codingtests/marsrover => rover-api/src/main/java/cat/hack3/codingtests/marsrover/api}/RotableRiderRover.java (89%) create mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java rename {mars-station => rover-api}/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java (82%) rename {mars-station => rover-api}/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java (100%) create mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java create mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java create mode 100644 rover-api/src/main/java/module-info.java delete mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/MoveForwardCommand.java delete mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnLeftCommand.java delete mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/TurnRightCommand.java rename rover-commands/src/main/java/cat/hack3/codingtests/marsrover/{ => commands}/MoveBackwardsCommand.java (51%) create mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveForwardCommand.java create mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnLeftCommand.java create mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/TurnRightCommand.java rename rover-commands/src/main/java/cat/hack3/codingtests/marsrover/{ => commands/api}/CommandFactory.java (57%) rename rover-commands/src/main/java/cat/hack3/codingtests/marsrover/{ => commands/api}/RoverCommand.java (69%) create mode 100644 rover-commands/src/main/java/module-info.java create mode 100644 station-plugin/pom.xml create mode 100644 station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java create mode 100644 station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java create mode 100644 station-plugin/src/main/java/module-info.java create mode 100644 tests-suite/pom.xml create mode 100644 tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/CommonTests.java rename {rover-commands/src/test/java/cat/hack3/codingtests/marsrover => tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test}/MarsRoverTest.java (81%) rename {rover-commands/src/test/java/cat/hack3/codingtests/marsrover => tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test}/MarsRoverWithObstaclesTest.java (60%) create mode 100644 tests-suite/src/test/java/module-info.java 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; From d40ff90c6e4287c856ecb45e684cdc841f5192cc Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 01:06:30 +0200 Subject: [PATCH 2/7] slight improve on test suit --- .../marsrover/test/CommonTests.java | 6 ++++++ .../marsrover/test/MarsRoverTest.java | 6 ------ .../test/MarsRoverWithObstaclesTest.java | 19 +++++++------------ 3 files changed, 13 insertions(+), 18 deletions(-) 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 index fe3e247..1889ad1 100644 --- 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 @@ -10,6 +10,7 @@ import cat.hack3.codingtests.marsrover.plugin.station.PlanetMapInitializerProvid import cat.hack3.codingtests.marsrover.plugin.station.RoverDeployerProvider; import java.util.List; +import java.util.stream.IntStream; import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH; import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*; @@ -60,4 +61,9 @@ public class CommonTests { protected List getObstacles() { return List.of(); } + + protected void repeatAction(int times, Runnable actionToRepeat) { + IntStream.rangeClosed(1, times) + .forEach(i -> actionToRepeat.run()); + } } diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java index c45d831..1181258 100644 --- a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java @@ -5,8 +5,6 @@ import cat.hack3.codingtests.marsrover.cartography.Direction; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import java.util.stream.IntStream; - import static cat.hack3.codingtests.marsrover.cartography.Direction.*; import static org.testng.Assert.assertEquals; @@ -133,8 +131,4 @@ public class MarsRoverTest extends CommonTests { assertEquals(rover.getCurrentDirection(), EAST); } - private void repeatAction(int times, Runnable actionToRepeat) { - IntStream.rangeClosed(1, times) - .forEach(i -> actionToRepeat.run()); - } } diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java index 7ed9620..0c44bea 100644 --- a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java @@ -33,28 +33,23 @@ public class MarsRoverWithObstaclesTest extends CommonTests { moveForwardCommand.execute(); Coordinates oneStepForward = rover.getCurrentCoordinates(); assertNotEquals(oneStepForward, Coordinates.of(3, 3)); + assertEquals(oneStepForward, Coordinates.of(2, 3)); turnLeftCommand.execute(); - moveForwardCommand.execute(); - moveForwardCommand.execute(); + repeatAction(2, () -> moveForwardCommand.execute()); turnRightCommand.execute(); + repeatAction(2, () -> moveForwardCommand.execute()); + assertEquals(rover.getCurrentCoordinates(), Coordinates.of(4, 5)); moveForwardCommand.execute(); - moveForwardCommand.execute(); - var currentPosition = Coordinates.of(4, 5); - assertEquals(rover.getCurrentCoordinates(), currentPosition); - moveForwardCommand.execute(); - var positionAfterMove = Coordinates.of(5, 4); - assertNotEquals(rover.getCurrentCoordinates(), positionAfterMove); + assertNotEquals(rover.getCurrentCoordinates(), Coordinates.of(5, 5)); + assertEquals(rover.getCurrentCoordinates(), Coordinates.of(4, 5)); } @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) + Coordinates.of(5, 5) ); } } From fd7306f1a13adaaf73f23d4d00008e2772703569 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 01:44:14 +0200 Subject: [PATCH 3/7] another interface that goes to api module (command factory) --- .../codingtests/marsrover/MarsRover.java | 6 ++--- .../marsrover/MarsRoverDeployer.java | 4 +-- .../marsrover/RoverActionReporter.java | 4 +-- .../gps/MapIncrementalPositionResolver.java | 4 +-- .../codingtests/marsrover/gps/MarsMap.java | 10 ++++---- .../marsrover/gps/MarsMapInitializer.java | 6 ++--- mars-station/src/main/java/module-info.java | 4 ++- .../marsrover/api/RotableRiderRover.java | 4 +-- .../marsrover/api/RoverDeployer.java | 4 +-- .../{ => api}/cartography/Coordinates.java | 2 +- .../{ => api}/cartography/Direction.java | 2 +- .../{ => api}/cartography/PlanetMap.java | 2 +- .../cartography/PlanetMapInitializer.java | 2 +- .../api/commands/CommandFactory.java | 5 ++++ .../commands/CommandFactoryInitializer.java | 7 ++++++ .../marsrover/api/commands}/RoverCommand.java | 2 +- rover-api/src/main/java/module-info.java | 3 ++- .../commands/MoveBackwardsCommand.java | 2 +- .../commands/MoveForwardCommand.java | 2 +- ...dFactory.java => RoverCommandFactory.java} | 13 +++++----- .../RoverCommandFactoryInitializer.java | 12 +++++++++ .../marsrover/commands/TurnLeftCommand.java | 2 +- .../marsrover/commands/TurnRightCommand.java | 2 +- rover-commands/src/main/java/module-info.java | 6 ++++- .../CommandFactoryInitializerProvider.java | 14 +++++++++++ .../station/PlanetMapInitializerProvider.java | 2 +- station-plugin/src/main/java/module-info.java | 3 ++- .../marsrover/test/CommonTests.java | 25 +++++++++++++------ .../marsrover/test/MarsRoverTest.java | 6 ++--- .../test/MarsRoverWithObstaclesTest.java | 4 +-- .../ui/console/DirectionRetriever.java | 2 +- .../ui/console/RoverCommandsPerformer.java | 18 ++++++------- .../ui/console/RoverInitializer.java | 4 +-- 33 files changed, 121 insertions(+), 67 deletions(-) rename rover-api/src/main/java/cat/hack3/codingtests/marsrover/{ => api}/cartography/Coordinates.java (94%) rename rover-api/src/main/java/cat/hack3/codingtests/marsrover/{ => api}/cartography/Direction.java (92%) rename rover-api/src/main/java/cat/hack3/codingtests/marsrover/{ => api}/cartography/PlanetMap.java (81%) rename rover-api/src/main/java/cat/hack3/codingtests/marsrover/{ => api}/cartography/PlanetMapInitializer.java (82%) create mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java create mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java rename {rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api => rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands}/RoverCommand.java (69%) rename rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/{api/CommandFactory.java => RoverCommandFactory.java} (55%) create mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java create mode 100644 station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java 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 0f9e612..150b9c5 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,9 +1,9 @@ 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.PlanetMap; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; public class MarsRover implements RotableRiderRover { 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 index c342a48..9afe261 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java @@ -2,8 +2,8 @@ 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; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; public class MarsRoverDeployer implements RoverDeployer { @Override 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 e1b0b68..276594b 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,8 +1,8 @@ package cat.hack3.codingtests.marsrover; import cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation; -import cat.hack3.codingtests.marsrover.cartography.Coordinates; -import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; import java.util.logging.Logger; diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java index 474055c..31ce2ab 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MapIncrementalPositionResolver.java @@ -1,7 +1,7 @@ package cat.hack3.codingtests.marsrover.gps; -import cat.hack3.codingtests.marsrover.cartography.Coordinates.Latitude; -import cat.hack3.codingtests.marsrover.cartography.Coordinates.Longitude; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates.Latitude; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates.Longitude; public class MapIncrementalPositionResolver { diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java index beaab12..c9d8908 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java @@ -1,10 +1,10 @@ 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 cat.hack3.codingtests.marsrover.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates.Latitude; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates.Longitude; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; import java.util.List; 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 index 62ff59e..3d6b8e4 100644 --- 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 @@ -1,8 +1,8 @@ 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 cat.hack3.codingtests.marsrover.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMapInitializer; import java.util.List; diff --git a/mars-station/src/main/java/module-info.java b/mars-station/src/main/java/module-info.java index 9607833..5c97c05 100644 --- a/mars-station/src/main/java/module-info.java +++ b/mars-station/src/main/java/module-info.java @@ -1,8 +1,10 @@ +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMapInitializer; + module mars.station { requires rover.api; requires java.logging; - provides cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer + provides PlanetMapInitializer with cat.hack3.codingtests.marsrover.gps.MarsMapInitializer; provides cat.hack3.codingtests.marsrover.api.RoverDeployer diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java index eaa4816..d4d12f5 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java @@ -1,7 +1,7 @@ package cat.hack3.codingtests.marsrover.api; -import cat.hack3.codingtests.marsrover.cartography.Coordinates; -import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; public interface RotableRiderRover { enum Rotation {LEFT, RIGHT} 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 index 2513cc8..a0458ef 100644 --- 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 @@ -1,7 +1,7 @@ package cat.hack3.codingtests.marsrover.api; -import cat.hack3.codingtests.marsrover.cartography.Direction; -import cat.hack3.codingtests.marsrover.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; public interface RoverDeployer { RotableRiderRover deploy(PlanetMap map, Direction startingDirection); diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/Coordinates.java similarity index 94% rename from rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/Coordinates.java index 7b62e6e..4a096aa 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Coordinates.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/Coordinates.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover.cartography; +package cat.hack3.codingtests.marsrover.api.cartography; public record Coordinates(Latitude latitude, Longitude longitude) { diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/Direction.java similarity index 92% rename from rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/Direction.java index 6e2205c..ad117df 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/Direction.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/Direction.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover.cartography; +package cat.hack3.codingtests.marsrover.api.cartography; public enum Direction { NORTH, SOUTH, EAST, WEST; 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/api/cartography/PlanetMap.java similarity index 81% rename from rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java index 75a6a5b..4c2bde1 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMap.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover.cartography; +package cat.hack3.codingtests.marsrover.api.cartography; public interface PlanetMap { Coordinates getNextPositionTowards(Direction direction); 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/api/cartography/PlanetMapInitializer.java similarity index 82% rename from rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMapInitializer.java index 3b06ab4..e98d507 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/cartography/PlanetMapInitializer.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMapInitializer.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover.cartography; +package cat.hack3.codingtests.marsrover.api.cartography; import java.util.List; diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java new file mode 100644 index 0000000..e1f2b63 --- /dev/null +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java @@ -0,0 +1,5 @@ +package cat.hack3.codingtests.marsrover.api.commands; + +public interface CommandFactory { + RoverCommand createCommand(RoverCommand.Type type); +} diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java new file mode 100644 index 0000000..4e7fe6d --- /dev/null +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java @@ -0,0 +1,7 @@ +package cat.hack3.codingtests.marsrover.api.commands; + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; + +public interface CommandFactoryInitializer { + CommandFactory initFor(RotableRiderRover rover); +} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommand.java similarity index 69% rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java rename to rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommand.java index b571c86..12d2fff 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/RoverCommand.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommand.java @@ -1,4 +1,4 @@ -package cat.hack3.codingtests.marsrover.commands.api; +package cat.hack3.codingtests.marsrover.api.commands; public interface RoverCommand { enum Type {MOVE_FORWARD, MOVE_BACKWARDS, TURN_LEFT, TURN_RIGHT} diff --git a/rover-api/src/main/java/module-info.java b/rover-api/src/main/java/module-info.java index 1248447..09b4d8e 100644 --- a/rover-api/src/main/java/module-info.java +++ b/rover-api/src/main/java/module-info.java @@ -1,4 +1,5 @@ module rover.api { exports cat.hack3.codingtests.marsrover.api; - exports cat.hack3.codingtests.marsrover.cartography; + exports cat.hack3.codingtests.marsrover.api.cartography; + exports cat.hack3.codingtests.marsrover.api.commands; } \ No newline at end of file diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java index 9e822e5..053ab11 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/MoveBackwardsCommand.java @@ -2,7 +2,7 @@ package cat.hack3.codingtests.marsrover.commands; import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; public class MoveBackwardsCommand implements RoverCommand { private final 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 index 1233488..b5b0467 100644 --- 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 @@ -2,7 +2,7 @@ package cat.hack3.codingtests.marsrover.commands; import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; public class MoveForwardCommand implements RoverCommand { private final RotableRiderRover rover; diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java similarity index 55% rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java index e932991..876eb9a 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/api/CommandFactory.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java @@ -1,19 +1,18 @@ -package cat.hack3.codingtests.marsrover.commands.api; +package cat.hack3.codingtests.marsrover.commands; 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; +import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; -public class CommandFactory { +public class RoverCommandFactory implements CommandFactory { private final RotableRiderRover rover; - public CommandFactory(RotableRiderRover rover) { + public RoverCommandFactory(RotableRiderRover rover) { this.rover = rover; } + @Override public RoverCommand createCommand(RoverCommand.Type type) { return switch (type) { case MOVE_FORWARD -> new MoveForwardCommand(rover); diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java new file mode 100644 index 0000000..c7c021f --- /dev/null +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java @@ -0,0 +1,12 @@ +package cat.hack3.codingtests.marsrover.commands; + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; +import cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; + +public class RoverCommandFactoryInitializer implements CommandFactoryInitializer { + @Override + public CommandFactory initFor(RotableRiderRover rover) { + return new RoverCommandFactory(rover); + } +} 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 index 82bc0fa..10211f0 100644 --- 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 @@ -2,7 +2,7 @@ package cat.hack3.codingtests.marsrover.commands; import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; import static cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation.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 index 7eae632..5f834e6 100644 --- 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 @@ -2,7 +2,7 @@ package cat.hack3.codingtests.marsrover.commands; import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; import static cat.hack3.codingtests.marsrover.api.RotableRiderRover.Rotation.RIGHT; diff --git a/rover-commands/src/main/java/module-info.java b/rover-commands/src/main/java/module-info.java index a8da85a..d56aaa5 100644 --- a/rover-commands/src/main/java/module-info.java +++ b/rover-commands/src/main/java/module-info.java @@ -1,5 +1,9 @@ +import cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; +import cat.hack3.codingtests.marsrover.commands.RoverCommandFactoryInitializer; + module rover.commands { requires rover.api; - exports cat.hack3.codingtests.marsrover.commands.api; + provides CommandFactoryInitializer + with RoverCommandFactoryInitializer; } \ No newline at end of file diff --git a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java new file mode 100644 index 0000000..8cfe9c9 --- /dev/null +++ b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java @@ -0,0 +1,14 @@ +package cat.hack3.codingtests.marsrover.plugin.station; + +import cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; + +import java.util.ServiceLoader; + +public class CommandFactoryInitializerProvider { + public CommandFactoryInitializer getNextAvailable() { + return ServiceLoader + .load(CommandFactoryInitializer.class) + .findFirst() + .orElseThrow(); + } +} 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 index 2083f9f..0e98b60 100644 --- 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 @@ -1,6 +1,6 @@ package cat.hack3.codingtests.marsrover.plugin.station; -import cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMapInitializer; import java.util.ServiceLoader; diff --git a/station-plugin/src/main/java/module-info.java b/station-plugin/src/main/java/module-info.java index 79c760b..f690edc 100644 --- a/station-plugin/src/main/java/module-info.java +++ b/station-plugin/src/main/java/module-info.java @@ -1,8 +1,9 @@ module station.plugin { requires rover.api; - uses cat.hack3.codingtests.marsrover.cartography.PlanetMapInitializer; + uses cat.hack3.codingtests.marsrover.api.cartography.PlanetMapInitializer; uses cat.hack3.codingtests.marsrover.api.RoverDeployer; + uses cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; exports cat.hack3.codingtests.marsrover.plugin.station; } \ 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 index 1889ad1..9b7b2d0 100644 --- 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 @@ -1,19 +1,20 @@ 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.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; +import cat.hack3.codingtests.marsrover.plugin.station.CommandFactoryInitializerProvider; import cat.hack3.codingtests.marsrover.plugin.station.PlanetMapInitializerProvider; import cat.hack3.codingtests.marsrover.plugin.station.RoverDeployerProvider; import java.util.List; import java.util.stream.IntStream; -import static cat.hack3.codingtests.marsrover.cartography.Direction.SOUTH; -import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*; +import static cat.hack3.codingtests.marsrover.api.cartography.Direction.SOUTH; +import static cat.hack3.codingtests.marsrover.api.commands.RoverCommand.Type.*; public class CommonTests { @@ -27,10 +28,12 @@ public class CommonTests { private PlanetMapInitializerProvider gpsProvider; private RoverDeployerProvider roverProvider; + private CommandFactoryInitializerProvider commandFactoryProvider; protected void setup() { gpsProvider = new PlanetMapInitializerProvider(); roverProvider = new RoverDeployerProvider(); + commandFactoryProvider = new CommandFactoryInitializerProvider(); int mapWidth = 10; int mapHeight = 10; @@ -41,13 +44,19 @@ public class CommonTests { var marsMap = getMap(mapHeight, mapWidth, startingCoordinates); rover = getRover(marsMap); - var commandFactory = new CommandFactory(this.rover); + var commandFactory = getCommandFactory(rover); + moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS); turnLeftCommand = commandFactory.createCommand(TURN_LEFT); turnRightCommand = commandFactory.createCommand(TURN_RIGHT); } + private CommandFactory getCommandFactory(RotableRiderRover rover) { + var commandFactoryInitializer = commandFactoryProvider.getNextAvailable(); + return commandFactoryInitializer.initFor(rover); + } + private PlanetMap getMap(int mapHeight, int mapWidth, Coordinates startingCoordinates) { var planetInitializer = gpsProvider.getNextAvailable(); return planetInitializer.setupNewMap(mapHeight, mapWidth, startingCoordinates, getObstacles()); diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java index 1181258..a909bcf 100644 --- a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverTest.java @@ -1,11 +1,11 @@ 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.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; -import static cat.hack3.codingtests.marsrover.cartography.Direction.*; +import static cat.hack3.codingtests.marsrover.api.cartography.Direction.*; import static org.testng.Assert.assertEquals; public class MarsRoverTest extends CommonTests { diff --git a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java index 0c44bea..76be79d 100644 --- a/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java +++ b/tests-suite/src/test/java/cat/hack3/codingtests/marsrover/test/MarsRoverWithObstaclesTest.java @@ -1,7 +1,7 @@ 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.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; import org.testng.annotations.BeforeMethod; import org.testng.annotations.Test; diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/DirectionRetriever.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/DirectionRetriever.java index 2d6d16e..1f0baa9 100644 --- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/DirectionRetriever.java +++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/DirectionRetriever.java @@ -1,7 +1,7 @@ package cat.hack3.codingtests.marsrover.ui.console; -import cat.hack3.codingtests.marsrover.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; import java.util.Scanner; 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 0a6f490..574e380 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,19 +1,19 @@ package cat.hack3.codingtests.marsrover.ui.console; import cat.hack3.codingtests.marsrover.RotableRiderRover; -import cat.hack3.codingtests.marsrover.commands.api.CommandFactory; -import cat.hack3.codingtests.marsrover.commands.api.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; +import cat.hack3.codingtests.marsrover.commands.api.RoverCommandFactory; import java.util.Scanner; -import static cat.hack3.codingtests.marsrover.commands.api.RoverCommand.Type.*; +import static cat.hack3.codingtests.marsrover.api.commands.RoverCommand.Type.*; import static cat.hack3.codingtests.marsrover.ui.console.UICommons.isNotExitSignal; import static cat.hack3.codingtests.marsrover.ui.console.UICommons.output; public class RoverCommandsPerformer { private final Scanner reader; - CommandFactory commandFactory; + RoverCommandFactory roverCommandFactory; private final RoverCommand moveForwardCommand; private final RoverCommand moveBackwardsCommand; private final RoverCommand turnLeftCommand; @@ -21,11 +21,11 @@ public class RoverCommandsPerformer { public RoverCommandsPerformer(Scanner reader, RotableRiderRover rover) { this.reader = reader; - commandFactory = new CommandFactory(rover); - moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); - moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS); - turnLeftCommand = commandFactory.createCommand(TURN_LEFT); - turnRightCommand = commandFactory.createCommand(TURN_RIGHT); + roverCommandFactory = new RoverCommandFactory(rover); + moveForwardCommand = roverCommandFactory.createCommand(MOVE_FORWARD); + moveBackwardsCommand = roverCommandFactory.createCommand(MOVE_BACKWARDS); + turnLeftCommand = roverCommandFactory.createCommand(TURN_LEFT); + turnRightCommand = roverCommandFactory.createCommand(TURN_RIGHT); } public void acceptCommandsUntilExitSignal() { 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 b2b8c85..014d1c8 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 @@ -2,8 +2,8 @@ package cat.hack3.codingtests.marsrover.ui.console; 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.api.cartography.Coordinates; +import cat.hack3.codingtests.marsrover.api.cartography.Direction; import cat.hack3.codingtests.marsrover.gps.MarsMap; import java.util.InputMismatchException; From 0455523ed969cc68c75afc9d189ed67c4a3d1025 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 04:25:59 +0200 Subject: [PATCH 4/7] try to reduce boilerplate files and code, also encapsulating even more the constructors --- .../codingtests/marsrover/MarsRover.java | 9 ++++- .../marsrover/MarsRoverDeployer.java | 13 ------- .../codingtests/marsrover/gps/MarsMap.java | 9 ++++- .../marsrover/gps/MarsMapInitializer.java | 18 --------- mars-station/src/main/java/module-info.java | 13 ++++--- .../marsrover/api/RotableRiderRover.java | 5 +++ .../marsrover/api/RoverDeployer.java | 8 ---- .../marsrover/api/cartography/PlanetMap.java | 7 ++++ .../api/cartography/PlanetMapInitializer.java | 8 ---- .../api/commands/CommandFactory.java | 6 +++ .../commands/CommandFactoryInitializer.java | 7 ---- .../commands/RoverCommandFactory.java | 9 ++++- .../RoverCommandFactoryInitializer.java | 12 ------ rover-commands/src/main/java/module-info.java | 8 ++-- station-plugin/pom.xml | 27 ------------- .../CommandFactoryInitializerProvider.java | 14 ------- .../station/PlanetMapInitializerProvider.java | 14 ------- .../plugin/station/RoverDeployerProvider.java | 14 ------- station-plugin/src/main/java/module-info.java | 9 ----- .../marsrover/test/CommonTests.java | 39 +++++++------------ tests-suite/src/test/java/module-info.java | 9 ++++- 21 files changed, 75 insertions(+), 183 deletions(-) delete mode 100644 mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java delete mode 100644 mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java delete mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java delete mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMapInitializer.java delete mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java delete mode 100644 rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java delete mode 100644 station-plugin/pom.xml delete mode 100644 station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java delete mode 100644 station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java delete mode 100644 station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java delete mode 100644 station-plugin/src/main/java/module-info.java 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 150b9c5..4417e0d 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 @@ -11,7 +11,14 @@ public class MarsRover implements RotableRiderRover { private final RoverActionReporter roverActionReporter; private Direction currentDirection; - public MarsRover(PlanetMap marsMap, Direction startingDirection) { + public static class Provider implements RotableRiderRover.Provider { + @Override + public RotableRiderRover provide(PlanetMap map, Direction startingDirection) { + return new MarsRover(map, startingDirection); + } + } + + private 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 deleted file mode 100644 index 9afe261..0000000 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/MarsRoverDeployer.java +++ /dev/null @@ -1,13 +0,0 @@ -package cat.hack3.codingtests.marsrover; - -import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.api.RoverDeployer; -import cat.hack3.codingtests.marsrover.api.cartography.Direction; -import cat.hack3.codingtests.marsrover.api.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/gps/MarsMap.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java index c9d8908..38b62b6 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java @@ -27,8 +27,15 @@ public class MarsMap implements PlanetMap { private final MapIncrementalPositionResolver positionResolver; + public static class Provider implements PlanetMap.Provider { + @Override + public PlanetMap provide(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations) { + return new MarsMap(height, width, startingCoordinates, obstaclesLocalizations); + } + } + @SafeVarargs - public MarsMap(int height, int width, Coordinates startingCoordinates, List... obstaclesLocalizations) { + private MarsMap(int height, int width, Coordinates startingCoordinates, List... obstaclesLocalizations) { currentPosition = startingCoordinates; this.obstaclesLocalizations = obstaclesLocalizations.length > 0 ? obstaclesLocalizations[0] : List.of(); positionResolver = new MapIncrementalPositionResolver(FIRST_POSITION_IN_MAP, INCREMENT_UNIT, height, width); 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 deleted file mode 100644 index 3d6b8e4..0000000 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMapInitializer.java +++ /dev/null @@ -1,18 +0,0 @@ -package cat.hack3.codingtests.marsrover.gps; - -import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; -import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; -import cat.hack3.codingtests.marsrover.api.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 index 5c97c05..ea4c32a 100644 --- a/mars-station/src/main/java/module-info.java +++ b/mars-station/src/main/java/module-info.java @@ -1,12 +1,15 @@ -import cat.hack3.codingtests.marsrover.api.cartography.PlanetMapInitializer; +import cat.hack3.codingtests.marsrover.MarsRover; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.gps.MarsMap; module mars.station { requires rover.api; requires java.logging; - provides PlanetMapInitializer - with cat.hack3.codingtests.marsrover.gps.MarsMapInitializer; + provides PlanetMap.Provider + with MarsMap.Provider; - provides cat.hack3.codingtests.marsrover.api.RoverDeployer - with cat.hack3.codingtests.marsrover.MarsRoverDeployer; + provides RotableRiderRover.Provider + with MarsRover.Provider; } \ No newline at end of file diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java index d4d12f5..7e0a8a6 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java @@ -2,6 +2,7 @@ package cat.hack3.codingtests.marsrover.api; import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; import cat.hack3.codingtests.marsrover.api.cartography.Direction; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; public interface RotableRiderRover { enum Rotation {LEFT, RIGHT} @@ -13,4 +14,8 @@ public interface RotableRiderRover { Coordinates getCurrentCoordinates(); Direction getCurrentDirection(); + + interface Provider { + RotableRiderRover provide(PlanetMap map, Direction startingDirection); + } } 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 deleted file mode 100644 index a0458ef..0000000 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RoverDeployer.java +++ /dev/null @@ -1,8 +0,0 @@ -package cat.hack3.codingtests.marsrover.api; - -import cat.hack3.codingtests.marsrover.api.cartography.Direction; -import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; - -public interface RoverDeployer { - RotableRiderRover deploy(PlanetMap map, Direction startingDirection); -} diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java index 4c2bde1..1ca925c 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java @@ -1,6 +1,9 @@ package cat.hack3.codingtests.marsrover.api.cartography; +import java.util.List; + public interface PlanetMap { + Coordinates getNextPositionTowards(Direction direction); void updateLocation(Coordinates newPosition); @@ -8,4 +11,8 @@ public interface PlanetMap { boolean willCollideWithObstacle(Coordinates newCoordinates); Coordinates getCurrentPosition(); + + interface Provider { + PlanetMap provide(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations); + } } diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMapInitializer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMapInitializer.java deleted file mode 100644 index e98d507..0000000 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMapInitializer.java +++ /dev/null @@ -1,8 +0,0 @@ -package cat.hack3.codingtests.marsrover.api.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/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java index e1f2b63..4427d02 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java @@ -1,5 +1,11 @@ package cat.hack3.codingtests.marsrover.api.commands; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; + public interface CommandFactory { RoverCommand createCommand(RoverCommand.Type type); + + interface Provider { + CommandFactory provide(RotableRiderRover rover); + } } diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java deleted file mode 100644 index 4e7fe6d..0000000 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactoryInitializer.java +++ /dev/null @@ -1,7 +0,0 @@ -package cat.hack3.codingtests.marsrover.api.commands; - -import cat.hack3.codingtests.marsrover.api.RotableRiderRover; - -public interface CommandFactoryInitializer { - CommandFactory initFor(RotableRiderRover rover); -} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java index 876eb9a..44ffb45 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java @@ -8,7 +8,14 @@ import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; public class RoverCommandFactory implements CommandFactory { private final RotableRiderRover rover; - public RoverCommandFactory(RotableRiderRover rover) { + public static class Provider implements CommandFactory.Provider { + @Override + public CommandFactory provide(RotableRiderRover rover) { + return new RoverCommandFactory(rover); + } + } + + private RoverCommandFactory(RotableRiderRover rover) { this.rover = rover; } diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java deleted file mode 100644 index c7c021f..0000000 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryInitializer.java +++ /dev/null @@ -1,12 +0,0 @@ -package cat.hack3.codingtests.marsrover.commands; - -import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; -import cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; - -public class RoverCommandFactoryInitializer implements CommandFactoryInitializer { - @Override - public CommandFactory initFor(RotableRiderRover rover) { - return new RoverCommandFactory(rover); - } -} diff --git a/rover-commands/src/main/java/module-info.java b/rover-commands/src/main/java/module-info.java index d56aaa5..9f0fe7d 100644 --- a/rover-commands/src/main/java/module-info.java +++ b/rover-commands/src/main/java/module-info.java @@ -1,9 +1,9 @@ -import cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; -import cat.hack3.codingtests.marsrover.commands.RoverCommandFactoryInitializer; +import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; +import cat.hack3.codingtests.marsrover.commands.RoverCommandFactory; module rover.commands { requires rover.api; - provides CommandFactoryInitializer - with RoverCommandFactoryInitializer; + provides CommandFactory.Provider + with RoverCommandFactory.Provider; } \ No newline at end of file diff --git a/station-plugin/pom.xml b/station-plugin/pom.xml deleted file mode 100644 index 2dda5a5..0000000 --- a/station-plugin/pom.xml +++ /dev/null @@ -1,27 +0,0 @@ - - - - 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/CommandFactoryInitializerProvider.java b/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java deleted file mode 100644 index 8cfe9c9..0000000 --- a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/CommandFactoryInitializerProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -package cat.hack3.codingtests.marsrover.plugin.station; - -import cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; - -import java.util.ServiceLoader; - -public class CommandFactoryInitializerProvider { - public CommandFactoryInitializer getNextAvailable() { - return ServiceLoader - .load(CommandFactoryInitializer.class) - .findFirst() - .orElseThrow(); - } -} 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 deleted file mode 100644 index 0e98b60..0000000 --- a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/PlanetMapInitializerProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -package cat.hack3.codingtests.marsrover.plugin.station; - -import cat.hack3.codingtests.marsrover.api.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 deleted file mode 100644 index 1177874..0000000 --- a/station-plugin/src/main/java/cat/hack3/codingtests/marsrover/plugin/station/RoverDeployerProvider.java +++ /dev/null @@ -1,14 +0,0 @@ -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 deleted file mode 100644 index f690edc..0000000 --- a/station-plugin/src/main/java/module-info.java +++ /dev/null @@ -1,9 +0,0 @@ -module station.plugin { - requires rover.api; - - uses cat.hack3.codingtests.marsrover.api.cartography.PlanetMapInitializer; - uses cat.hack3.codingtests.marsrover.api.RoverDeployer; - uses cat.hack3.codingtests.marsrover.api.commands.CommandFactoryInitializer; - - exports cat.hack3.codingtests.marsrover.plugin.station; -} \ 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 index 9b7b2d0..095e4b7 100644 --- 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 @@ -6,11 +6,9 @@ import cat.hack3.codingtests.marsrover.api.cartography.Direction; import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; -import cat.hack3.codingtests.marsrover.plugin.station.CommandFactoryInitializerProvider; -import cat.hack3.codingtests.marsrover.plugin.station.PlanetMapInitializerProvider; -import cat.hack3.codingtests.marsrover.plugin.station.RoverDeployerProvider; import java.util.List; +import java.util.ServiceLoader; import java.util.stream.IntStream; import static cat.hack3.codingtests.marsrover.api.cartography.Direction.SOUTH; @@ -26,14 +24,7 @@ public class CommonTests { protected RoverCommand turnLeftCommand; protected RoverCommand turnRightCommand; - private PlanetMapInitializerProvider gpsProvider; - private RoverDeployerProvider roverProvider; - private CommandFactoryInitializerProvider commandFactoryProvider; - protected void setup() { - gpsProvider = new PlanetMapInitializerProvider(); - roverProvider = new RoverDeployerProvider(); - commandFactoryProvider = new CommandFactoryInitializerProvider(); int mapWidth = 10; int mapHeight = 10; @@ -41,10 +32,14 @@ public class CommonTests { int longitudeStartingPoint = 3; var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); - var marsMap = getMap(mapHeight, mapWidth, startingCoordinates); - rover = getRover(marsMap); + var marsMap = getProviderFor(PlanetMap.Provider.class) + .provide(mapHeight, mapWidth, startingCoordinates, getObstacles()); - var commandFactory = getCommandFactory(rover); + rover = getProviderFor(RotableRiderRover.Provider.class) + .provide(marsMap, CommonTests.STARTING_DIRECTION); + + var commandFactory = getProviderFor(CommandFactory.Provider.class) + .provide(rover); moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS); @@ -52,19 +47,11 @@ public class CommonTests { turnRightCommand = commandFactory.createCommand(TURN_RIGHT); } - private CommandFactory getCommandFactory(RotableRiderRover rover) { - var commandFactoryInitializer = commandFactoryProvider.getNextAvailable(); - return commandFactoryInitializer.initFor(rover); - } - - 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); + private T getProviderFor(Class interfaceProvider) { + return ServiceLoader + .load(interfaceProvider) + .findFirst() + .orElseThrow(); } protected List getObstacles() { diff --git a/tests-suite/src/test/java/module-info.java b/tests-suite/src/test/java/module-info.java index 1ac0bf0..43e5c15 100644 --- a/tests-suite/src/test/java/module-info.java +++ b/tests-suite/src/test/java/module-info.java @@ -1,9 +1,16 @@ +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; + module tests.suite { requires rover.api; - requires station.plugin; requires mars.station; requires rover.commands; + uses PlanetMap.Provider; + uses RotableRiderRover.Provider; + uses CommandFactory.Provider; + requires org.testng; exports cat.hack3.codingtests.marsrover.test; From 02d849f696804f3c9919e7a89cbcd7f6fea1f6b9 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 16:28:54 +0200 Subject: [PATCH 5/7] apply JPMS to user interface module and improve some namings --- .../codingtests/marsrover/MarsRover.java | 2 +- .../codingtests/marsrover/gps/MarsMap.java | 2 +- pom.xml | 1 - .../marsrover/api/RotableRiderRover.java | 2 +- .../marsrover/api/cartography/PlanetMap.java | 2 +- .../api/commands/CommandFactory.java | 11 ------ .../api/commands/RoverCommandFactory.java | 11 ++++++ ...tory.java => RoverCommandFactoryImpl.java} | 14 ++++---- rover-commands/src/main/java/module-info.java | 8 ++--- tests-suite/pom.xml | 6 ---- .../marsrover/test/CommonTests.java | 25 +++++++------- tests-suite/src/test/java/module-info.java | 4 +-- user-interface-console/pom.xml | 34 ++++++++++++------- .../ui/console/ClientCommandInterface.java | 6 ++-- .../ui/console/RoverCommandsPerformer.java | 17 +++++----- .../ui/console/RoverInitializer.java | 17 +++++----- .../marsrover/ui/console/UICommons.java | 9 +++++ .../src/main/java/module-info.java | 13 +++++++ 18 files changed, 104 insertions(+), 80 deletions(-) delete mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java create mode 100644 rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java rename rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/{RoverCommandFactory.java => RoverCommandFactoryImpl.java} (56%) create mode 100644 user-interface-console/src/main/java/module-info.java 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 4417e0d..21091cb 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 @@ -13,7 +13,7 @@ public class MarsRover implements RotableRiderRover { public static class Provider implements RotableRiderRover.Provider { @Override - public RotableRiderRover provide(PlanetMap map, Direction startingDirection) { + public RotableRiderRover provideWith(PlanetMap map, Direction startingDirection) { return new MarsRover(map, startingDirection); } } diff --git a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java index 38b62b6..2b963a4 100644 --- a/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java +++ b/mars-station/src/main/java/cat/hack3/codingtests/marsrover/gps/MarsMap.java @@ -29,7 +29,7 @@ public class MarsMap implements PlanetMap { public static class Provider implements PlanetMap.Provider { @Override - public PlanetMap provide(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations) { + public PlanetMap provideWith(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations) { return new MarsMap(height, width, startingCoordinates, obstaclesLocalizations); } } diff --git a/pom.xml b/pom.xml index ef30bba..08014b6 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,6 @@ user-interface-console rover-commands rover-api - station-plugin tests-suite diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java index 7e0a8a6..75a4840 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/RotableRiderRover.java @@ -16,6 +16,6 @@ public interface RotableRiderRover { Direction getCurrentDirection(); interface Provider { - RotableRiderRover provide(PlanetMap map, Direction startingDirection); + RotableRiderRover provideWith(PlanetMap map, Direction startingDirection); } } diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java index 1ca925c..41ec642 100644 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/cartography/PlanetMap.java @@ -13,6 +13,6 @@ public interface PlanetMap { Coordinates getCurrentPosition(); interface Provider { - PlanetMap provide(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations); + PlanetMap provideWith(int height, int width, Coordinates startingCoordinates, List obstaclesLocalizations); } } diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java deleted file mode 100644 index 4427d02..0000000 --- a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/CommandFactory.java +++ /dev/null @@ -1,11 +0,0 @@ -package cat.hack3.codingtests.marsrover.api.commands; - -import cat.hack3.codingtests.marsrover.api.RotableRiderRover; - -public interface CommandFactory { - RoverCommand createCommand(RoverCommand.Type type); - - interface Provider { - CommandFactory provide(RotableRiderRover rover); - } -} diff --git a/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java new file mode 100644 index 0000000..376eff8 --- /dev/null +++ b/rover-api/src/main/java/cat/hack3/codingtests/marsrover/api/commands/RoverCommandFactory.java @@ -0,0 +1,11 @@ +package cat.hack3.codingtests.marsrover.api.commands; + +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; + +public interface RoverCommandFactory { + RoverCommand create(RoverCommand.Type type); + + interface Provider { + RoverCommandFactory provideWith(RotableRiderRover rover); + } +} diff --git a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryImpl.java similarity index 56% rename from rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java rename to rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryImpl.java index 44ffb45..167dca3 100644 --- a/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactory.java +++ b/rover-commands/src/main/java/cat/hack3/codingtests/marsrover/commands/RoverCommandFactoryImpl.java @@ -2,25 +2,25 @@ package cat.hack3.codingtests.marsrover.commands; import cat.hack3.codingtests.marsrover.api.RotableRiderRover; -import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; -public class RoverCommandFactory implements CommandFactory { +public class RoverCommandFactoryImpl implements RoverCommandFactory { private final RotableRiderRover rover; - public static class Provider implements CommandFactory.Provider { + public static class Provider implements RoverCommandFactory.Provider { @Override - public CommandFactory provide(RotableRiderRover rover) { - return new RoverCommandFactory(rover); + public RoverCommandFactory provideWith(RotableRiderRover rover) { + return new RoverCommandFactoryImpl(rover); } } - private RoverCommandFactory(RotableRiderRover rover) { + private RoverCommandFactoryImpl(RotableRiderRover rover) { this.rover = rover; } @Override - public RoverCommand createCommand(RoverCommand.Type type) { + public RoverCommand create(RoverCommand.Type type) { return switch (type) { case MOVE_FORWARD -> new MoveForwardCommand(rover); case MOVE_BACKWARDS -> new MoveBackwardsCommand(rover); diff --git a/rover-commands/src/main/java/module-info.java b/rover-commands/src/main/java/module-info.java index 9f0fe7d..d7b0e81 100644 --- a/rover-commands/src/main/java/module-info.java +++ b/rover-commands/src/main/java/module-info.java @@ -1,9 +1,9 @@ -import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; -import cat.hack3.codingtests.marsrover.commands.RoverCommandFactory; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; +import cat.hack3.codingtests.marsrover.commands.RoverCommandFactoryImpl; module rover.commands { requires rover.api; - provides CommandFactory.Provider - with RoverCommandFactory.Provider; + provides RoverCommandFactory.Provider + with RoverCommandFactoryImpl.Provider; } \ No newline at end of file diff --git a/tests-suite/pom.xml b/tests-suite/pom.xml index 84b4677..e89adff 100644 --- a/tests-suite/pom.xml +++ b/tests-suite/pom.xml @@ -17,12 +17,6 @@ 1.0 test - - cat.hack3.codingtests - station-plugin - 10.0 - test - cat.hack3.codingtests rover-commands 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 index 095e4b7..c3f4f14 100644 --- 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 @@ -4,8 +4,8 @@ import cat.hack3.codingtests.marsrover.api.RotableRiderRover; import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; import cat.hack3.codingtests.marsrover.api.cartography.Direction; import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; -import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; import java.util.List; import java.util.ServiceLoader; @@ -25,29 +25,28 @@ public class CommonTests { protected RoverCommand turnRightCommand; protected void setup() { - int mapWidth = 10; int mapHeight = 10; int latitudeStartingPoint = 2; int longitudeStartingPoint = 3; var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); - var marsMap = getProviderFor(PlanetMap.Provider.class) - .provide(mapHeight, mapWidth, startingCoordinates, getObstacles()); + var marsMap = getImplProviderOf(PlanetMap.Provider.class) + .provideWith(mapHeight, mapWidth, startingCoordinates, getObstacles()); - rover = getProviderFor(RotableRiderRover.Provider.class) - .provide(marsMap, CommonTests.STARTING_DIRECTION); + rover = getImplProviderOf(RotableRiderRover.Provider.class) + .provideWith(marsMap, CommonTests.STARTING_DIRECTION); - var commandFactory = getProviderFor(CommandFactory.Provider.class) - .provide(rover); + var commandFactory = getImplProviderOf(RoverCommandFactory.Provider.class) + .provideWith(rover); - moveForwardCommand = commandFactory.createCommand(MOVE_FORWARD); - moveBackwardsCommand = commandFactory.createCommand(MOVE_BACKWARDS); - turnLeftCommand = commandFactory.createCommand(TURN_LEFT); - turnRightCommand = commandFactory.createCommand(TURN_RIGHT); + moveForwardCommand = commandFactory.create(MOVE_FORWARD); + moveBackwardsCommand = commandFactory.create(MOVE_BACKWARDS); + turnLeftCommand = commandFactory.create(TURN_LEFT); + turnRightCommand = commandFactory.create(TURN_RIGHT); } - private T getProviderFor(Class interfaceProvider) { + private T getImplProviderOf(Class interfaceProvider) { return ServiceLoader .load(interfaceProvider) .findFirst() diff --git a/tests-suite/src/test/java/module-info.java b/tests-suite/src/test/java/module-info.java index 43e5c15..1e2403a 100644 --- a/tests-suite/src/test/java/module-info.java +++ b/tests-suite/src/test/java/module-info.java @@ -1,6 +1,6 @@ import cat.hack3.codingtests.marsrover.api.RotableRiderRover; import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; -import cat.hack3.codingtests.marsrover.api.commands.CommandFactory; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; module tests.suite { requires rover.api; @@ -9,7 +9,7 @@ module tests.suite { uses PlanetMap.Provider; uses RotableRiderRover.Provider; - uses CommandFactory.Provider; + uses RoverCommandFactory.Provider; requires org.testng; diff --git a/user-interface-console/pom.xml b/user-interface-console/pom.xml index dbcd0fd..3c88194 100644 --- a/user-interface-console/pom.xml +++ b/user-interface-console/pom.xml @@ -10,23 +10,31 @@ 4.0.0 user-interface-console + + + cat.hack3.codingtests + rover-api + 1.0 + compile + + + cat.hack3.codingtests + mars-station + 2.0 + compile + + + cat.hack3.codingtests + rover-commands + 2.0 + compile + + + 17 17 - - - cat.hack3.codingtests - mars-station - 2.0 - - - cat.hack3.codingtests - rover-commands - 2.0 - - - \ No newline at end of file diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/ClientCommandInterface.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/ClientCommandInterface.java index 0309ede..d4feed6 100644 --- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/ClientCommandInterface.java +++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/ClientCommandInterface.java @@ -1,6 +1,6 @@ package cat.hack3.codingtests.marsrover.ui.console; -import cat.hack3.codingtests.marsrover.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; import java.util.Scanner; @@ -26,8 +26,8 @@ public class ClientCommandInterface { private void start() { output(PresentationMessage.INTRO); - //RotableRiderRover rover = roverInitializer.autoInitialize(); - RotableRiderRover rover = roverInitializer.initializeFromUserInputs(); + RotableRiderRover rover = roverInitializer.autoInitialize(); + //RotableRiderRover rover = roverInitializer.initializeFromUserInputs(); var commandsPerformer = new RoverCommandsPerformer(reader, rover); commandsPerformer.acceptCommandsUntilExitSignal(); 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 574e380..18dcf40 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,8 +1,8 @@ package cat.hack3.codingtests.marsrover.ui.console; -import cat.hack3.codingtests.marsrover.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; import cat.hack3.codingtests.marsrover.api.commands.RoverCommand; -import cat.hack3.codingtests.marsrover.commands.api.RoverCommandFactory; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; import java.util.Scanner; @@ -13,7 +13,6 @@ import static cat.hack3.codingtests.marsrover.ui.console.UICommons.output; public class RoverCommandsPerformer { private final Scanner reader; - RoverCommandFactory roverCommandFactory; private final RoverCommand moveForwardCommand; private final RoverCommand moveBackwardsCommand; private final RoverCommand turnLeftCommand; @@ -21,11 +20,13 @@ public class RoverCommandsPerformer { public RoverCommandsPerformer(Scanner reader, RotableRiderRover rover) { this.reader = reader; - roverCommandFactory = new RoverCommandFactory(rover); - moveForwardCommand = roverCommandFactory.createCommand(MOVE_FORWARD); - moveBackwardsCommand = roverCommandFactory.createCommand(MOVE_BACKWARDS); - turnLeftCommand = roverCommandFactory.createCommand(TURN_LEFT); - turnRightCommand = roverCommandFactory.createCommand(TURN_RIGHT); + var roverCommandFactory = UICommons + .getImplProviderOf(RoverCommandFactory.Provider.class) + .provideWith(rover); + moveForwardCommand = roverCommandFactory.create(MOVE_FORWARD); + moveBackwardsCommand = roverCommandFactory.create(MOVE_BACKWARDS); + turnLeftCommand = roverCommandFactory.create(TURN_LEFT); + turnRightCommand = roverCommandFactory.create(TURN_RIGHT); } public void acceptCommandsUntilExitSignal() { 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 014d1c8..7b6b999 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 @@ -1,10 +1,9 @@ package cat.hack3.codingtests.marsrover.ui.console; -import cat.hack3.codingtests.marsrover.MarsRover; -import cat.hack3.codingtests.marsrover.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; import cat.hack3.codingtests.marsrover.api.cartography.Coordinates; import cat.hack3.codingtests.marsrover.api.cartography.Direction; -import cat.hack3.codingtests.marsrover.gps.MarsMap; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; import java.util.InputMismatchException; import java.util.List; @@ -36,7 +35,7 @@ public class RoverInitializer { Direction startingDirection = directionRetriever.retrieveDirection(); - RotableRiderRover rover = deployRover(mapHeight, mapWidth, latitudeStartingPoint, longitudeStartingPoint, startingDirection); + RotableRiderRover rover = deployRover(mapHeight, mapWidth, latitudeStartingPoint, longitudeStartingPoint, startingDirection, List.of()); output(PresentationMessage.READY_MESSAGE); reader.next(); //input ignored @@ -65,10 +64,12 @@ public class RoverInitializer { return deployRover(10, 10, 2, 3, Direction.SOUTH, obstacles); } - @SafeVarargs - private RotableRiderRover deployRover(int mapHeight, int mapWidth, int latitudeStartingPoint, int longitudeStartingPoint, Direction startingDirection, List... obstaclesLocalizations) { + private RotableRiderRover deployRover(int mapHeight, int mapWidth, int latitudeStartingPoint, int longitudeStartingPoint, Direction startingDirection, List obstaclesLocalizations) { var startingCoordinates = Coordinates.of(latitudeStartingPoint, longitudeStartingPoint); - var marsMap = new MarsMap(mapHeight, mapWidth, startingCoordinates, obstaclesLocalizations); - return new MarsRover(marsMap, startingDirection); + + var mapProvider = UICommons.getImplProviderOf(PlanetMap.Provider.class); + var roverProvider = UICommons.getImplProviderOf(RotableRiderRover.Provider.class); + var marsMap = mapProvider.provideWith(mapHeight, mapWidth, startingCoordinates, obstaclesLocalizations); + return roverProvider.provideWith(marsMap, startingDirection); } } diff --git a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/UICommons.java b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/UICommons.java index 982cb08..5a7b5dd 100644 --- a/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/UICommons.java +++ b/user-interface-console/src/main/java/cat/hack3/codingtests/marsrover/ui/console/UICommons.java @@ -1,5 +1,7 @@ package cat.hack3.codingtests.marsrover.ui.console; +import java.util.ServiceLoader; + public class UICommons { public static final String QUIT_COMMAND_TEXT = "q"; @@ -15,4 +17,11 @@ public class UICommons { static void output(String message) { System.out.println(message); } + + static T getImplProviderOf(Class interfaceProvider) { + return ServiceLoader + .load(interfaceProvider) + .findFirst() + .orElseThrow(); + } } diff --git a/user-interface-console/src/main/java/module-info.java b/user-interface-console/src/main/java/module-info.java new file mode 100644 index 0000000..1ae39a7 --- /dev/null +++ b/user-interface-console/src/main/java/module-info.java @@ -0,0 +1,13 @@ +import cat.hack3.codingtests.marsrover.api.RotableRiderRover; +import cat.hack3.codingtests.marsrover.api.cartography.PlanetMap; +import cat.hack3.codingtests.marsrover.api.commands.RoverCommandFactory; + +module ui.console { + requires rover.api; + requires mars.station; + requires rover.commands; + + uses PlanetMap.Provider; + uses RotableRiderRover.Provider; + uses RoverCommandFactory.Provider; +} \ No newline at end of file From 07c95b07408e50aab886a6c9242e30023ad750a5 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 17:18:21 +0200 Subject: [PATCH 6/7] design representation --- SOLUTION.md | 7 +++++-- misc/images/mars-rover design JPMS.png | Bin 0 -> 160217 bytes misc/images/mars-rover design.png | Bin 41719 -> 43568 bytes 3 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 misc/images/mars-rover design JPMS.png diff --git a/SOLUTION.md b/SOLUTION.md index 70fc012..50691dd 100644 --- a/SOLUTION.md +++ b/SOLUTION.md @@ -1,4 +1,7 @@ # MY SOLUTION -## Current design +## Current design with JPMS -![Current design](misc/images/mars-rover design.png) \ No newline at end of file +![Current design](misc/images/mars-rover design JPMS.png) + +## Previous design +![Previous design](misc/images/mars-rover design.png) \ No newline at end of file diff --git a/misc/images/mars-rover design JPMS.png b/misc/images/mars-rover design JPMS.png new file mode 100644 index 0000000000000000000000000000000000000000..b54008a18cf8117e8541535c28184a3897be4c02 GIT binary patch literal 160217 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 Q^Mou}DaE@vl7`;@7lj>pegFUf From d2aa5cd22f521a1724e29738d9cc18f66ce4d2c3 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 17:21:37 +0200 Subject: [PATCH 7/7] images fix --- SOLUTION.md | 4 ++-- ...{mars-rover design.png => mars-rover_design.png} | Bin ...r design JPMS.png => mars-rover_design_JPMS.png} | Bin 3 files changed, 2 insertions(+), 2 deletions(-) rename misc/images/{mars-rover design.png => mars-rover_design.png} (100%) rename misc/images/{mars-rover design JPMS.png => mars-rover_design_JPMS.png} (100%) diff --git a/SOLUTION.md b/SOLUTION.md index 50691dd..221d939 100644 --- a/SOLUTION.md +++ b/SOLUTION.md @@ -1,7 +1,7 @@ # MY SOLUTION ## Current design with JPMS -![Current design](misc/images/mars-rover design JPMS.png) +![Current design](misc/images/mars-rover_design_JPMS.png) ## Previous design -![Previous design](misc/images/mars-rover design.png) \ No newline at end of file +![Previous design](misc/images/mars-rover_design.png) \ No newline at end of file diff --git a/misc/images/mars-rover design.png b/misc/images/mars-rover_design.png similarity index 100% rename from misc/images/mars-rover design.png rename to misc/images/mars-rover_design.png diff --git a/misc/images/mars-rover design JPMS.png b/misc/images/mars-rover_design_JPMS.png similarity index 100% rename from misc/images/mars-rover design JPMS.png rename to misc/images/mars-rover_design_JPMS.png