public RepositorySourceConfigurationCommand(IUserInterface userInterface, IRepositoryConfigurationCommandActionParser repositoryConfigurationCommandActionParser, ISourceRepositoryProvider sourceRepositoryProvider)
        {
            if (userInterface == null)
            {
                throw new ArgumentNullException("userInterface");
            }

            if (repositoryConfigurationCommandActionParser == null)
            {
                throw new ArgumentNullException("repositoryConfigurationCommandActionParser");
            }

            if (sourceRepositoryProvider == null)
            {
                throw new ArgumentNullException("sourceRepositoryProvider");
            }

            this.userInterface = userInterface;
            this.repositoryConfigurationCommandActionParser = repositoryConfigurationCommandActionParser;
            this.sourceRepositoryProvider = sourceRepositoryProvider;

            this.Attributes = new CommandAttributes
                {
                    CommandName = CommandName,
                    AlternativeCommandNames = this.AlternativeCommandNames,
                    RequiredArguments = new[] { ArgumentNameAction, ArgumentNameRepositoryName, ArgumentNameRepositoryUrl },
                    PositionalArguments = new[] { ArgumentNameAction, ArgumentNameRepositoryName, ArgumentNameRepositoryUrl },
                    Description = Resources.RepositorySourceConfigurationCommand.CommandDescriptionText,
                    Usage =
                        string.Format(
                            "{0} <{1}> <{2}> <{3}>", CommandName, string.Join("|", this.AllowedActions), ArgumentNameRepositoryName, ArgumentNameRepositoryUrl),
                    Examples =
                        new Dictionary<string, string>
                            {
                                {
                                    string.Format(
                                        "{0} {1} \"{2}\" \"{3}\"",
                                        CommandName,
                                        RepositoryConfigurationCommandAction.Add,
                                        Resources.RepositorySourceConfigurationCommand.SampleRepositoryName,
                                        NuDeployConstants.DefaultFeedUrl),
                                    Resources.RepositorySourceConfigurationCommand.AddCommandExampleDescriptionNamedArguments
                                    },
                                {
                                    string.Format(
                                        "{0} -{1}={2} -{3}=\"{4}\" -{5}=\"{6}\"",
                                        CommandName,
                                        ArgumentNameAction,
                                        RepositoryConfigurationCommandAction.Add,
                                        ArgumentNameRepositoryName,
                                        Resources.RepositorySourceConfigurationCommand.SampleRepositoryName,
                                        ArgumentNameRepositoryUrl,
                                        NuDeployConstants.DefaultFeedUrl),
                                    Resources.RepositorySourceConfigurationCommand.AddCommandExampleDescriptionNamedArguments
                                    },
                                {
                                    string.Format(
                                        "{0} {1} \"{2}\"",
                                        CommandName,
                                        RepositoryConfigurationCommandAction.Delete,
                                        Resources.RepositorySourceConfigurationCommand.SampleRepositoryName),
                                    Resources.RepositorySourceConfigurationCommand.DeleteCommandExampleDescriptionPositionalArguments
                                    },
                                {
                                    string.Format("{0} {1}", CommandName, RepositoryConfigurationCommandAction.Reset),
                                    Resources.RepositorySourceConfigurationCommand.ResetCommandExampleDescription
                                    },
                                {
                                    string.Format("{0} {1}", CommandName, RepositoryConfigurationCommandAction.List),
                                    Resources.RepositorySourceConfigurationCommand.ListCommandExampleDescription
                                    }
                            },
                    ArgumentDescriptions =
                        new Dictionary<string, string>
                            {
                                {
                                    ArgumentNameAction,
                                    string.Format(
                                        Resources.RepositorySourceConfigurationCommand.ArgumentDescriptionRepositoryActionTemplate,
                                        string.Join(", ", this.AllowedActions))
                                    },
                                { ArgumentNameRepositoryName, Resources.RepositorySourceConfigurationCommand.ArgumentDescriptionRepositoryName },
                                { ArgumentNameRepositoryUrl, Resources.RepositorySourceConfigurationCommand.ArgumentDescriptionRepositoryUrl }
                            }
                };

            this.Arguments = new Dictionary<string, string>();
        }
 public void Setup()
 {
     this.repositoryConfigurationCommandActionParser = new RepositoryConfigurationCommandActionParser();
 }