protected virtual int ExecuteCore(string[] normalisedArguments) { var application = new CommandLineApplication(); var generatorName = application.Option( "-g | --generator <generatorName>", "Name of the generator you want to use", CommandOptionType.SingleValue ); var searchPath = application.Option( "-s | --search <searchpath>", "Path to use to search for generators", CommandOptionType.SingleValue ); var generatorArgs = application.Option( "-p | --para <generatorArgs>", "Arguments to pass to generator", CommandOptionType.SingleValue ); var verbosityArgs = application.Option( "-v | --verbosity <verbosity>", "Verbosity level", CommandOptionType.SingleValue ); application.HelpOption("-? | -h | --help"); application.OnExecute(() => { var runnerArgs = new TempestRunnerArguments(); // Deal with non-running options before // That's todo though if (generatorName.HasValue()) { runnerArgs.GeneratorName = generatorName.Value(); } if (searchPath.HasValue()) { runnerArgs.SearchPath = searchPath.Value(); } if (generatorArgs.HasValue()) { runnerArgs.GeneratorParameters = generatorArgs.Value().Split(' '); } if (verbosityArgs.HasValue()) { runnerArgs.Verbosity = verbosityArgs.Value(); } return(_runner.Run(runnerArgs)); }); return(application.Execute(normalisedArguments)); }
// Should be delegated to another service maybe protected Type GetGeneratorFromSelection(TempestRunnerArguments runnerArguments) { var generators = _generatorFinder.LocateGenerators(_directoryFinder.FindGeneratorDirectories(runnerArguments.SearchPath).ToArray()).ToArray(); var options = _optionsFactory.List("You haven't picked a generator. Available generators:"); var generatorMap = new Dictionary <string, Type>(); foreach (var generatorType in generators) { var generatorName = generatorType.Name.Replace("Generator", ""); generatorMap.Add(generatorName.ToLower(), generatorType); options.Choice($"{generatorName}", generatorName.ToLower()); } var generatorChoice = ((IConfigurationOption)options).Render(new RenderContext(new RenderOptions())); var generator = generatorMap[generatorChoice]; return(generator); }
public virtual int Run(TempestRunnerArguments runnerArgs) { Type generatorType = null; if (runnerArgs.GeneratorName.IsNotNullOrWhiteSpace()) { var directoriesToSearch = _directoryFinder.FindGeneratorDirectories(runnerArgs.SearchPath).ToArray(); generatorType = _generatorFinder.LocateGenerator(directoriesToSearch, runnerArgs.GeneratorName); } if (generatorType == null && runnerArgs.GeneratorName.IsNullOrWhiteSpace()) { generatorType = GetGeneratorFromSelection(runnerArgs); } if (generatorType == null) { throw new GeneratorNotFoundException("No generators found"); } var templateDirectory = generatorType.GetAssembly() .GetAssemblyDirectory() .GetDirectories("Template") .FirstOrDefault() ?? generatorType.GetAssembly().GetAssemblyDirectory(); var generatorContext = GeneratorContextFactory.Create(generatorType, _directoryFinder.FindTempestExecutableDirectory(), _directoryFinder.FindWorkingDirectory(), templateDirectory, x => { x.Arguments = runnerArgs.GeneratorParameters; x.GeneratorName = runnerArgs.GeneratorName; }); // var generatorContext = new GeneratorContext // { // GeneratorType = generatorType, // Arguments = runnerArgs.GeneratorParameters, // GeneratorName = runnerArgs.GeneratorName, // TemplateDirectory = generatorType.GetAssembly().GetAssemblyDirectory().GetDirectories("Template").FirstOrDefault() ?? generatorType.GetAssembly().GetAssemblyDirectory(), // WorkingDirectory = _directoryFinder.FindWorkingDirectory(), // TempestDirectory = _directoryFinder.FindTempestExecutableDirectory() // }; return(_generatorRunner.Run(generatorContext)); }