main
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using mars.rover.common;
5using mars.rover.domain;
6using mars.rover.presentation;
7using mars.rover.presentation.infrastructure;
8using mars.rover.presentation.model;
9using mars.rover.service.application;
10
11namespace mars.rover
12{
13 public class Program : ParameterizedCommand<IEnumerable<CommandLineArgument>>
14 {
15 readonly Presenter presenter;
16
17 public Program(Presenter presenter)
18 {
19 this.presenter = presenter;
20 }
21
22 public void run_against(IEnumerable<CommandLineArgument> item)
23 {
24 presenter.run();
25 }
26
27 static void Main(string[] args)
28 {
29 var nasa = new NASA();
30 var view = new CaptureUserInstructionsConsoleView(Console.In, Console.Out);
31 var program = new Program(
32 new CaptureUserInstructionsPresenter(
33 view,
34 new SynchronousCommandPump(new DefaultRegistry<ParameterizedCommand<string>>
35 {
36 new CreateMarsCommand(nasa),
37 new DeployRoverCommand(
38 new DefaultRegistry<HeadingFactory>
39 {
40 new HeadingFactory("N", x => new North(x)),
41 new HeadingFactory("E", x => new East(x)),
42 new HeadingFactory("W", x => new West(x)),
43 new HeadingFactory("S", x => new South(x)),
44 new UnknownHeadingFactory(),
45 },
46 nasa),
47 new NavigateRoverCommand(
48 new DefaultRegistry<Navigation>
49 {
50 new Navigation('L', x => x.turn_left()),
51 new Navigation('R', x => x.turn_right()),
52 new Navigation('M', x => x.move_forward()),
53 new UnknownNavigation(),
54 }
55 ,
56 view, nasa)
57 }, new SynchronousCommandProcessor(), new CommandFactory())));
58 program.run_against(args.Select(x => (CommandLineArgument) x));
59 }
60 }
61}