main
1using System;
2using System.Linq;
3using mars.rover.common;
4using mars.rover.domain;
5using mars.rover.presentation.model;
6
7namespace mars.rover.service.application
8{
9 public class DeployRoverCommand : ParameterizedCommand<string>
10 {
11 readonly Registry<HeadingFactory> factories;
12 readonly NASA nasa;
13
14 public DeployRoverCommand(Registry<HeadingFactory> factories, NASA nasa)
15 {
16 this.factories = factories;
17 this.nasa = nasa;
18 }
19
20 public virtual void run_against(string deployment_coordinates)
21 {
22 var coordinates = deployment_coordinates.Split(new[] {' '});
23 var rover = new Rover(Convert.ToUInt32(coordinates[0]), Convert.ToUInt32(coordinates[1]),
24 find_heading_for(coordinates[2]));
25 nasa.deploy(rover);
26 }
27
28 Heading find_heading_for(string heading)
29 {
30 var plateau = nasa.plateau;
31 return factories.First(x => x.is_satisfied_by(heading)).create(plateau);
32 }
33 }
34}