From fd7306f1a13adaaf73f23d4d00008e2772703569 Mon Sep 17 00:00:00 2001 From: Xavier Fontanet Date: Mon, 24 Jun 2024 01:44:14 +0200 Subject: [PATCH] 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;