public static Tuple <RobotConstructionStatus, IRobotCleaner> GetRobot(RobotParametersDto parameters) { Orientations.InitializeOrientations(); //Create a validator in order to do basic verifications IRobotCleanerValidator validator = new RobotCleanerValidator(); var result = Tuple.Create <RobotConstructionStatus, IRobotCleaner>(RobotConstructionStatus.Error, null); //if the parameters given are not valid, it will return null with the enum value in Error. if (!validator.IsRobotValid(parameters) || !validator.IsMapValid(parameters)) { return(result); } //Here the dependencies are created and injected in the robot object. var currentPosition = new CurrentPosition(GetAxis(parameters.Start["X"]), GetAxis(parameters.Start["Y"])); IMap map = new Map(parameters.Map, currentPosition); IReturnAlgorithm returnAlgorithm = new ReturnAlgorithm(new FirstStep()); ICleaningAlgorithm cleaningAlgorithm = new CleaningAlgorithm(parameters.Commands); var movingStrategies = Orientations.GetMovingStrategies(); result = Tuple.Create <RobotConstructionStatus, IRobotCleaner>(RobotConstructionStatus.Success, new Implementations.RobotCleaner(currentPosition.X, currentPosition.Y, Orientations.GetFacingPosition(parameters.Start["facing"]), parameters.Battery, map, returnAlgorithm, movingStrategies, cleaningAlgorithm)); return(result); }
public bool IsRobotValid(RobotParametersDto robotParameters) { var axisValid = false; var orientationValid = false; var batteryValid = false; try { axisValid = ValidateAxis(robotParameters.Start); orientationValid = ValidateOrientation(robotParameters.Start); batteryValid = ValidateBatteryValue(robotParameters); } catch (Exception) { return(false); } return(axisValid && orientationValid && batteryValid); }
public bool IsMapValid(RobotParametersDto robotParameters) { return(robotParameters.Map.Length > 0); }
private bool ValidateBatteryValue(RobotParametersDto robotParameters) { return(robotParameters.Battery > 0); }