Ejemplo n.º 1
0
        public static CreationResultStatus ManipulateAliasIfValid(AliasRegistry aliasRegistry, string aliasName, List <string> inputTokens, HashSet <string> reservedAliasNames)
        {
            if (reservedAliasNames.Contains(aliasName))
            {
                Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasCannotBeShortName, aliasName));
                return(CreationResultStatus.CreateFailed);
            }
            else if (InvalidAliasRegex.IsMatch(aliasName))
            {
                Reporter.Output.WriteLine(LocalizableStrings.AliasNameContainsInvalidCharacters);   // TODO - change this string
                return(CreationResultStatus.InvalidParamValues);
            }

            inputTokens.RemoveAt(0);                                                // remove the command name
            IReadOnlyList <string> aliasTokens = FilterForAliasTokens(inputTokens); // remove '-a' or '--alias', and the alias name

            // The first token refers to a template name, or another alias.
            if (aliasTokens.Count > 0 && !ValidFirstTokenRegex.IsMatch(aliasTokens[0]))
            {
                Reporter.Output.WriteLine(LocalizableStrings.AliasValueFirstArgError);
                return(CreationResultStatus.InvalidParamValues);
            }

            // create, update, or delete an alias.
            return(ManipulateAliasValue(aliasName, aliasTokens, aliasRegistry));
        }
Ejemplo n.º 2
0
        public static async Task <int> Instantiate(ITemplateEngineHost host, string templateName, string name, string fallbackName, bool createDir, string aliasName, IReadOnlyDictionary <string, string> inputParameters, bool skipUpdateCheck)
        {
            ITemplateInfo templateInfo;

            using (Timing.Over("Get single"))
            {
                if (!TryGetTemplate(templateName, out templateInfo))
                {
                    return(-1);
                }
            }

            ITemplate template = SettingsLoader.LoadTemplate(templateInfo);

            if (!skipUpdateCheck)
            {
                host.LogMessage("Checking for updates...");

                //UpdateCheck();    // this'll need params
            }

            string        realName       = name ?? template.DefaultName ?? fallbackName;
            IParameterSet templateParams = SetupDefaultParamValuesFromTemplateAndHost(host, template, realName);

            if (aliasName != null)
            {
                //TODO: Add parameters to aliases (from _parameters_ collection)
                AliasRegistry.SetTemplateAlias(aliasName, template);
                host.LogMessage("Alias created.");
                return(0);
            }

            ResolveUserParameters(template, templateParams, inputParameters);
            bool missingParams = CheckForMissingRequiredParameters(host, templateParams);

            if (missingParams)
            {
                return(missingParams ? -1 : 0);
            }

            try
            {
                Stopwatch sw = Stopwatch.StartNew();
                // todo: pass an implementation of ITemplateEngineHost
                IComponentManager componentManager = Settings.SettingsLoader.Components;
                await template.Generator.Create(host, template, templateParams, componentManager);

                sw.Stop();
                host.OnTimingCompleted("Content generation time", sw.Elapsed);
            }
            finally
            {
            }

            return(0);
        }
Ejemplo n.º 3
0
        public void SetUp()
        {
            fileSystem  = MockRepository.GenerateMock <IFileSystem>();
            theRegistry = new AliasRegistry();

            fileSystem.Stub(x => x.LoadFromFile <AliasRegistry>(AliasRegistry.ALIAS_FILE))
            .Return(theRegistry);

            theCommand = new AliasCommand();
        }
Ejemplo n.º 4
0
 public New3Command(string commandName, ITemplateEngineHost host, Action <IEngineEnvironmentSettings, IInstaller> onFirstRun, ExtendedCommandParser app, CommandArgument templateName)
 {
     host = new ExtendedTemplateEngineHost(host, this);
     EnvironmentSettings = new EngineEnvironmentSettings(host, x => new SettingsLoader(x));
     Installer           = new Installer(EnvironmentSettings);
     _templateCreator    = new TemplateCreator(EnvironmentSettings);
     _templateCache      = new TemplateCache(EnvironmentSettings);
     _aliasRegistry      = new AliasRegistry(EnvironmentSettings);
     CommandName         = commandName;
     _paths = new Paths(EnvironmentSettings);
     _app   = app;
     _templateNameArgument = templateName;
     _onFirstRun           = onFirstRun;
 }
Ejemplo n.º 5
0
        private void writeAliases(AliasRegistry registry)
        {
            if (!registry.Aliases.Any())
            {
                ConsoleWriter.Write(" No aliases are registered");
                return;
            }

            var maximumLength = registry.Aliases.Select(x => x.Name.Length).Max();
            var format        = "  {0," + maximumLength + "} -> {1}";

            ConsoleWriter.Line();
            ConsoleWriter.PrintHorizontalLine();
            ConsoleWriter.Write(" Aliases:");
            ConsoleWriter.PrintHorizontalLine();

            registry.Aliases.OrderBy(x => x.Name).Each(x => { ConsoleWriter.Write(format, x.Name, x.Folder); });

            ConsoleWriter.PrintHorizontalLine();
        }
Ejemplo n.º 6
0
        public New3Command(string commandName, ITemplateEngineHost host, ITelemetryLogger telemetryLogger, Action <IEngineEnvironmentSettings, IInstaller> onFirstRun, INewCommandInput commandInput, string hivePath)
        {
            _telemetryLogger    = telemetryLogger;
            host                = new ExtendedTemplateEngineHost(host, this);
            EnvironmentSettings = new EngineEnvironmentSettings(host, x => new SettingsLoader(x), hivePath);
            _settingsLoader     = (SettingsLoader)EnvironmentSettings.SettingsLoader;
            Installer           = new Installer(EnvironmentSettings);
            _templateCreator    = new TemplateCreator(EnvironmentSettings);
            _aliasRegistry      = new AliasRegistry(EnvironmentSettings);
            CommandName         = commandName;
            _paths              = new Paths(EnvironmentSettings);
            _onFirstRun         = onFirstRun;
            _hostDataLoader     = new HostSpecificDataLoader(EnvironmentSettings.SettingsLoader);
            _commandInput       = commandInput;

            if (!EnvironmentSettings.Host.TryGetHostParamDefault("prefs:language", out _defaultLanguage))
            {
                _defaultLanguage = null;
            }
        }
Ejemplo n.º 7
0
        internal New3Command(string commandName, ITemplateEngineHost host, ITelemetryLogger telemetryLogger, New3Callbacks callbacks, INewCommandInput commandInput, string?hivePath, bool virtualize = false)
        {
            _telemetryLogger    = telemetryLogger;
            host                = new ExtendedTemplateEngineHost(host, this);
            EnvironmentSettings = new EngineEnvironmentSettings(host, settingsLocation: hivePath, onFirstRun: FirstRun, virtualizeSettings: virtualize);
            _settingsLoader     = EnvironmentSettings.SettingsLoader;
            _templateCreator    = new TemplateCreator(EnvironmentSettings);
            _aliasRegistry      = new AliasRegistry(EnvironmentSettings);
            CommandName         = commandName;
            _hostDataLoader     = new HostSpecificDataLoader(EnvironmentSettings.SettingsLoader);
            _commandInput       = commandInput;
            _callbacks          = callbacks;
            if (callbacks == null)
            {
                callbacks = new New3Callbacks();
            }

            if (!EnvironmentSettings.Host.TryGetHostParamDefault("prefs:language", out _defaultLanguage))
            {
                _defaultLanguage = null;
            }
        }
Ejemplo n.º 8
0
        // returns the templates whose:
        //      name or shortName contains the searchString
        //      matches by a registered alias
        public static IReadOnlyCollection <ITemplateInfo> List(string searchString)
        {
            HashSet <ITemplateInfo> matchingTemplates = new HashSet <ITemplateInfo>(TemplateEqualityComparer.Default);
            HashSet <ITemplateInfo> allTemplates      = new HashSet <ITemplateInfo>(TemplateEqualityComparer.Default);

            using (Timing.Over("load"))
                SettingsLoader.GetTemplates(allTemplates);

            using (Timing.Over("Search in loaded"))
                foreach (ITemplateInfo template in allTemplates)
                {
                    if (string.IsNullOrEmpty(searchString) ||
                        template.Name.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) > -1 ||
                        template.ShortName.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) > -1)
                    {
                        matchingTemplates.Add(template);
                    }
                }

            using (Timing.Over("Alias search"))
            {
#if !NET451
                IReadOnlyCollection <ITemplateInfo> allTemplatesCollection = allTemplates;
#else
                IReadOnlyCollection <ITemplateInfo> allTemplatesCollection = allTemplates.ToList();
#endif
                matchingTemplates.UnionWith(AliasRegistry.GetTemplatesForAlias(searchString, allTemplatesCollection));
            }

#if !NET451
            IReadOnlyCollection <ITemplateInfo> matchingTemplatesCollection = matchingTemplates;
#else
            IReadOnlyCollection <ITemplateInfo> matchingTemplatesCollection = matchingTemplates.ToList();
#endif
            return(matchingTemplatesCollection);
        }
        public TemplateManager()
        {
            var host = new ExtendedTemplateEngineHost(CreateHost(false), this);

            EnvironmentSettings = new EngineEnvironmentSettings(host, x => new SettingsLoader(x), null);
            _settingsLoader     = (SettingsLoader)EnvironmentSettings.SettingsLoader;
            Installer           = new Installer(EnvironmentSettings);
            _templateCreator    = new TemplateCreator(EnvironmentSettings);
            _aliasRegistry      = new AliasRegistry(EnvironmentSettings);
            CommandName         = CommandNameString;
            _paths          = new Paths(EnvironmentSettings);
            _onFirstRun     = FirstRun;
            _hostDataLoader = new HostSpecificDataLoader(EnvironmentSettings.SettingsLoader);
            _commandInput   = new NewCommandInputCli(CommandNameString);

            if (!EnvironmentSettings.Host.TryGetHostParamDefault("prefs:language", out _defaultLanguage))
            {
                _defaultLanguage = null;
            }

            _commandInput.ResetArgs();

            Initialise();
        }
Ejemplo n.º 10
0
        private static CreationResultStatus ManipulateAliasValue(string aliasName, IReadOnlyList <string> aliasTokens, AliasRegistry aliasRegistry)
        {
            AliasManipulationResult result       = aliasRegistry.TryCreateOrRemoveAlias(aliasName, aliasTokens);
            CreationResultStatus    returnStatus = CreationResultStatus.OperationNotSpecified;

            switch (result.Status)
            {
            case AliasManipulationStatus.Created:
                Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasCreated, result.AliasName, result.AliasValue));
                returnStatus = CreationResultStatus.Success;
                break;

            case AliasManipulationStatus.Removed:
                Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasRemoved, result.AliasName, result.AliasValue));
                returnStatus = CreationResultStatus.Success;
                break;

            case AliasManipulationStatus.RemoveNonExistentFailed:
                Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasRemoveNonExistentFailed, result.AliasName));
                break;

            case AliasManipulationStatus.Updated:
                Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasUpdated, result.AliasName, result.AliasValue));
                returnStatus = CreationResultStatus.Success;
                break;

            case AliasManipulationStatus.WouldCreateCycle:
                Reporter.Output.WriteLine(LocalizableStrings.AliasCycleError);
                returnStatus = CreationResultStatus.CreateFailed;
                break;

            case AliasManipulationStatus.InvalidInput:
                Reporter.Output.WriteLine(LocalizableStrings.AliasNotCreatedInvalidInput);
                returnStatus = CreationResultStatus.InvalidParamValues;
                break;
            }

            return(returnStatus);
        }
Ejemplo n.º 11
0
        public static CreationResultStatus DisplayAliasValues(IEngineEnvironmentSettings environment, INewCommandInput commandInput, AliasRegistry aliasRegistry, string commandName)
        {
            IReadOnlyDictionary <string, string> aliasesToShow;

            if (!string.IsNullOrEmpty(commandInput.ShowAliasesAliasName))
            {
                if (aliasRegistry.AllAliases.TryGetValue(commandInput.ShowAliasesAliasName, out string aliasValue))
                {
                    aliasesToShow = new Dictionary <string, string>()
                    {
                        { commandInput.ShowAliasesAliasName, aliasValue }
                    };
                }
                else
                {
                    Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasShowErrorUnknownAlias, commandInput.ShowAliasesAliasName, commandName));
                    return(CreationResultStatus.InvalidParamValues);
                }
            }
            else
            {
                aliasesToShow = aliasRegistry.AllAliases;
                Reporter.Output.WriteLine(LocalizableStrings.AliasShowAllAliasesHeader);
            }

            HelpFormatter <KeyValuePair <string, string> > formatter = new HelpFormatter <KeyValuePair <string, string> >(environment, aliasesToShow, 2, '-', false)
                                                                       .DefineColumn(t => t.Key, LocalizableStrings.AliasName)
                                                                       .DefineColumn(t => t.Value, LocalizableStrings.AliasValue);

            Reporter.Output.WriteLine(formatter.Layout());
            return(CreationResultStatus.Success);
        }
Ejemplo n.º 12
0
        public static AliasExpansionStatus TryExpandAliases(INewCommandInput commandInput, AliasRegistry aliasRegistry)
        {
            List <string> inputTokens = commandInput.Tokens.ToList();

            inputTokens.RemoveAt(0);    // remove the command name

            if (aliasRegistry.TryExpandCommandAliases(inputTokens, out IReadOnlyList <string> expandedTokens))
            {
                if (!expandedTokens.SequenceEqual(inputTokens))
                {
                    commandInput.ResetArgs(expandedTokens.ToArray());
                    return(AliasExpansionStatus.Expanded);
                }

                return(AliasExpansionStatus.NoChange);
            }

            return(AliasExpansionStatus.ExpansionError);
        }
Ejemplo n.º 13
0
 public TemplateCreator(IEngineEnvironmentSettings environmentSettings)
 {
     _environmentSettings = environmentSettings;
     _aliasRegistry       = new AliasRegistry(environmentSettings);
     _paths = new Paths(environmentSettings);
 }
Ejemplo n.º 14
0
        public static async Task <int> Instantiate(string templateName, string name, string fallbackName, bool createDir, string aliasName, IReadOnlyDictionary <string, string> inputParameters, bool skipUpdateCheck)
        {
            ITemplateInfo templateInfo;

            using (Timing.Over("Get single"))
            {
                if (!TryGetTemplateInfoFromCache(templateName, out templateInfo))
                {
                    return(-1);
                }
            }

            // SettingsLoader.LoadTemplate is where the loc info should be read!!!
            // templateInfo knows enough to get at the loc, if any
            ITemplate template = SettingsLoader.LoadTemplate(templateInfo);

            if (!skipUpdateCheck)
            {
                EngineEnvironmentSettings.Host.LogMessage("Checking for updates...");

                //UpdateCheck();    // this'll need params
            }

            string        realName       = name ?? template.DefaultName ?? fallbackName;
            IParameterSet templateParams = SetupDefaultParamValuesFromTemplateAndHost(template, realName);

            if (aliasName != null)
            {
                //TODO: Add parameters to aliases (from _parameters_ collection)
                AliasRegistry.SetTemplateAlias(aliasName, template);
                EngineEnvironmentSettings.Host.LogMessage("Alias created.");
                return(0);
            }

            ResolveUserParameters(template, templateParams, inputParameters);
            bool missingParams = CheckForMissingRequiredParameters(templateParams);

            if (missingParams)
            {
                return(missingParams ? -1 : 0);
            }

            ICreationResult creationResult;

            try
            {
                Stopwatch         sw = Stopwatch.StartNew();
                IComponentManager componentManager = Settings.SettingsLoader.Components;
                await template.Generator.Create(template, templateParams, componentManager, out creationResult);

                sw.Stop();
                EngineEnvironmentSettings.Host.OnTimingCompleted("Content generation time", sw.Elapsed);
            }
            finally
            {
            }

            // TODO: pass back the creationResult (probably as an out param)
            // (and get rid of this debugging)
            creationResult.TEMP_CONSOLE_DEBUG_CreationResult();

            return(0);
        }
Ejemplo n.º 15
0
        public void SetUp()
        {
            fileSystem = MockRepository.GenerateMock<IFileSystem>();
            theRegistry = new AliasRegistry();

            fileSystem.Stub(x => x.LoadFromFile<AliasRegistry>(AliasRegistry.ALIAS_FILE))
                .Return(theRegistry);

            theCommand = new AliasCommand();
        }
Ejemplo n.º 16
0
 private void persist(IFileSystem system, AliasRegistry registry)
 {
     system.WriteObjectToFile(AliasRegistry.ALIAS_FILE, registry);
 }
Ejemplo n.º 17
0
        public static CreationResultStatus CoordinateAliasExpansion(INewCommandInput commandInput, AliasRegistry aliasRegistry, ITelemetryLogger telemetryLogger)
        {
            AliasExpansionStatus aliasExpansionStatus = AliasSupport.TryExpandAliases(commandInput, aliasRegistry);

            if (aliasExpansionStatus == AliasExpansionStatus.ExpansionError)
            {
                Reporter.Output.WriteLine(LocalizableStrings.AliasExpansionError);
                return(CreationResultStatus.InvalidParamValues);
            }
            else if (aliasExpansionStatus == AliasExpansionStatus.Expanded)
            {
                Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasCommandAfterExpansion, string.Join(" ", commandInput.Tokens)));

                if (commandInput.HasParseError)
                {
                    Reporter.Output.WriteLine(LocalizableStrings.AliasExpandedCommandParseError);
                    return(HelpForTemplateResolution.HandleParseError(commandInput, telemetryLogger));
                }
            }

            // this is both for success and for no action.
            return(CreationResultStatus.Success);
        }
Ejemplo n.º 18
0
        public static AliasExpansionStatus TryExpandAliases(INewCommandInput commandInput, AliasRegistry aliasRegistry)
        {
            List <string> inputTokens = commandInput.Tokens.ToList();

            inputTokens.RemoveAt(0);    // remove the command name

            if (aliasRegistry.TryExpandCommandAliases(inputTokens, out IReadOnlyList <string> expandedTokens))
            {   // TryExpandCommandAliases() return value indicates error (cycle) or not error. It doesn't indicate whether or not expansions actually occurred.
                if (!expandedTokens.SequenceEqual(inputTokens))
                {
                    commandInput.ResetArgs(expandedTokens.ToArray());
                    return(AliasExpansionStatus.Expanded);
                }

                return(AliasExpansionStatus.NoChange);
            }

            return(AliasExpansionStatus.ExpansionError);
        }
Ejemplo n.º 19
0
        internal static CreationResultStatus DisplayAliasValues(IEngineEnvironmentSettings environment, INewCommandInput commandInput, AliasRegistry aliasRegistry, string commandName)
        {
            IReadOnlyDictionary <string, IReadOnlyList <string> > aliasesToShow;

            if (!string.IsNullOrEmpty(commandInput.ShowAliasesAliasName))
            {
                if (aliasRegistry.AllAliases.TryGetValue(commandInput.ShowAliasesAliasName, out IReadOnlyList <string> aliasValue))
                {
                    aliasesToShow = new Dictionary <string, IReadOnlyList <string> >()
                    {
                        { commandInput.ShowAliasesAliasName, aliasValue }
                    };
                }
                else
                {
                    Reporter.Output.WriteLine(string.Format(LocalizableStrings.AliasShowErrorUnknownAlias, commandInput.ShowAliasesAliasName, commandName));
                    return(CreationResultStatus.InvalidParamValues);
                }
            }
            else
            {
                aliasesToShow = aliasRegistry.AllAliases;
                Reporter.Output.WriteLine(LocalizableStrings.AliasShowAllAliasesHeader);
            }

            HelpFormatter <KeyValuePair <string, IReadOnlyList <string> > > formatter =
                new HelpFormatter <KeyValuePair <string, IReadOnlyList <string> > >(
                    environment,
                    commandInput,
                    aliasesToShow,
                    columnPadding: 2,
                    headerSeparator: '-',
                    blankLineBetweenRows: false)
                .DefineColumn(t => t.Key, LocalizableStrings.AliasName, showAlways: true)
                .DefineColumn(t => string.Join(" ", t.Value), LocalizableStrings.AliasValue, showAlways: true);

            Reporter.Output.WriteLine(formatter.Layout());
            return(CreationResultStatus.Success);
        }