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;