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