예제 #1
0
        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));
        }
예제 #2
0
        // 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);
        }
예제 #3
0
        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));
        }