public IEnumerable <ITemplate> GetTemplatesFromSource(IConfiguredTemplateSource source)
 {
     using (IDisposable <ITemplateSourceFolder> root = source.Root)
     {
         return(GetTemplatesFromDir(source, root.Value).ToList());
     }
 }
        private IEnumerable <ITemplate> GetTemplatesFromDir(IConfiguredTemplateSource source, ITemplateSourceFolder folder)
        {
            foreach (ITemplateSourceEntry entry in folder.Children)
            {
                if (entry.Kind == TemplateSourceEntryKind.File && entry.FullPath.EndsWith(".vstemplate"))
                {
                    VsTemplate tmp = null;
                    try
                    {
                        tmp = new VsTemplate((ITemplateSourceFile)entry, source, this);
                    }
                    catch
                    {
                    }

                    if (tmp != null)
                    {
                        yield return(tmp);
                    }
                }
                else if (entry.Kind == TemplateSourceEntryKind.Folder)
                {
                    foreach (ITemplate template in GetTemplatesFromDir(source, (ITemplateSourceFolder)entry))
                    {
                        yield return(template);
                    }
                }
            }
        }
        private static void Scan(IConfiguredTemplateSource configuredSource, IReadOnlyList <ITemplateSource> fileEmbeddableSources, Dictionary <string, IConfiguredTemplateSource> configuredSources)
        {
            using (IDisposable <ITemplateSourceFolder> rootFolder = configuredSource.Root)
            {
                foreach (ITemplateSourceFile entry in rootFolder.Value.EnumerateFiles("*", SearchOption.AllDirectories))
                {
                    if (entry.Kind == TemplateSourceEntryKind.File)
                    {
                        foreach (ITemplateSource source in fileEmbeddableSources)
                        {
                            if (source.CanHandle(configuredSource, entry.FullPath))
                            {
                                IConfiguredTemplateSource embedded = new EmbeddedTemplateSource(configuredSource, entry, source);
                                configuredSources[embedded.Location] = embedded;

                                if (embedded.Source.CanHostEmbeddedSources)
                                {
                                    Scan(embedded, fileEmbeddableSources, configuredSources);
                                }
                            }
                        }
                    }
                }
            }
        }
        public bool CanHandle(IConfiguredTemplateSource source, string location)
        {
            try
            {
                string extension = Path.GetExtension(location).ToUpperInvariant();
                switch (extension)
                {
                case ".ZIP":
                case ".VSIX":
                case ".NUPKG":
                    break;

                default:
                    return(false);
                }

                using (Stream fileData = source.Root.Value.OpenFile(location))
                    using (new ZipArchive(fileData, ZipArchiveMode.Read, true))
                    {
                    }

                return(true);
            }
            catch
            {
                return(false);
            }
        }
        public VsTemplate(ITemplateSourceFile source, IConfiguredTemplateSource templateSource, IGenerator generator)
        {
            SourceFile = source;
            Source     = templateSource;
            Generator  = generator;

            using (Stream src = source.OpenRead())
            {
                XDocument doc = XDocument.Load(src);
                DefaultName = doc.Root.Descendants().FirstOrDefault(x => x.Name.LocalName == "DefaultName")?.Value;
                XElement idElement = doc.Root.Descendants().FirstOrDefault(x => x.Name.LocalName == "TemplateID");
                IEnumerable <XElement> customParameters = doc.Root.Descendants().Where(x => x.Name.LocalName == "CustomParameter");
                List <CustomParameter> declaredParams   = new List <CustomParameter>();

                foreach (XElement parameter in customParameters)
                {
                    string name = parameter.Attributes().First(x => x.Name.LocalName == "Name").Value;
                    name = name.Substring(1, name.Length - 2);

                    declaredParams.Add(new CustomParameter
                    {
                        Name         = name,
                        DefaultValue = parameter.Attributes().First(x => x.Name.LocalName == "Value").Value
                    });
                }

                CustomParameters = declaredParams;
                Name             = idElement.Value;
                VsTemplateFile   = doc;
            }
        }
        public IDisposable <ITemplateSourceFolder> RootFor(IConfiguredTemplateSource source, string location)
        {
            if (!source.Root.Value.Exists(location))
            {
                return(Directory.Empty.NoDispose());
            }

            return(new Directory(null, "", "", () => new ZipArchive(source.Root.Value.OpenFile(location), ZipArchiveMode.Read, false)).NoDispose());
        }
 public RunnableProjectTemplate(JObject raw, IGenerator generator, IConfiguredTemplateSource source, ITemplateSourceFile configFile, IRunnableProjectConfig config)
 {
     config.SourceFile = configFile;
     ConfigFile        = configFile;
     Generator         = generator;
     Source            = source;
     Config            = config;
     DefaultName       = config.DefaultName;
     Name            = config.Name;
     Identity        = config.Identity ?? config.Name;
     ShortName       = config.ShortName;
     Author          = config.Author;
     Tags            = config.Tags;
     Classifications = config.Classifications;
     GroupIdentity   = config.GroupIdentity;
     _raw            = raw;
 }
        public string GetInstallPackageId(IConfiguredTemplateSource source, string location)
        {
            if (Path.GetExtension(location).ToUpperInvariant() == ".NUPKG")
            {
                using (IDisposable <ITemplateSourceFolder> root = RootFor(source, location))
                {
                    ITemplateSourceFile nuspec = root.Value.EnumerateFiles("*.nuspec", SearchOption.TopDirectoryOnly).FirstOrDefault();

                    if (nuspec != null)
                    {
                        string id, version;
                        GetPackageIdAndVersion(nuspec, out id, out version);
                        return(id);
                    }
                }
            }

            return(null);
        }
Exemple #9
0
        public static IReadOnlyCollection <ITemplate> List(string searchString, CommandOption source)
        {
            HashSet <ITemplate> results = new HashSet <ITemplate>(TemplateEqualityComparer.Default);
            IReadOnlyList <IConfiguredTemplateSource> searchSources;

            if (!source.HasValue())
            {
                searchSources = Program.Broker.GetConfiguredSources().ToList();
            }
            else
            {
                IConfiguredTemplateSource realSource = Program.Broker.GetConfiguredSources().FirstOrDefault(x => x.Alias == source.Value());
                if (realSource == null)
                {
                    return(results);
                }

                searchSources = new List <IConfiguredTemplateSource> {
                    realSource
                };
            }

            searchSources = ConfiguredTemplateSourceHelper.Scan(searchSources, Program.Broker.ComponentRegistry.OfType <ITemplateSource>());

            foreach (IGenerator gen in Program.Broker.ComponentRegistry.OfType <IGenerator>())
            {
                foreach (IConfiguredTemplateSource target in searchSources)
                {
                    results.UnionWith(gen.GetTemplatesFromSource(target));
                }
            }

            IReadOnlyCollection <ITemplate> aliasResults = AliasRegistry.GetTemplatesForAlias(searchString, results);

            if (!string.IsNullOrWhiteSpace(searchString))
            {
                results.RemoveWhere(x => x.Name.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) < 0 && (x.ShortName?.IndexOf(searchString, StringComparison.OrdinalIgnoreCase) ?? -1) < 0);
            }

            results.UnionWith(aliasResults);
            return(results);
        }
Exemple #10
0
        private IEnumerable <ITemplate> GetTemplatesFromDir(IConfiguredTemplateSource source, ITemplateSourceFolder folder)
        {
            foreach (ITemplateSourceEntry entry in folder.Children)
            {
                if (entry.Kind == TemplateSourceEntryKind.File && entry.Name.Equals(".netnew.json", StringComparison.OrdinalIgnoreCase))
                {
                    RunnableProjectTemplate tmp = null;
                    try
                    {
                        ITemplateSourceFile file      = (ITemplateSourceFile)entry;
                        JObject             srcObject = ReadConfigModel(file);

                        tmp = new RunnableProjectTemplate(srcObject, this, source, file, srcObject.ToObject <IRunnableProjectConfig>(new JsonSerializer
                        {
                            Converters =
                            {
                                new RunnableProjectConfigConverter()
                            }
                        }));
                    }
                    catch
                    {
                    }

                    if (tmp != null)
                    {
                        yield return(tmp);
                    }
                }
                else if (entry.Kind == TemplateSourceEntryKind.Folder)
                {
                    foreach (ITemplate template in GetTemplatesFromDir(source, (ITemplateSourceFolder)entry))
                    {
                        yield return(template);
                    }
                }
            }
        }
        public async Task <bool> CheckForUpdatesAsync(IConfiguredTemplateSource source, string location)
        {
            if (Path.GetExtension(location).ToUpperInvariant() == ".NUPKG")
            {
                using (IDisposable <ITemplateSourceFolder> root = RootFor(source, location))
                {
                    ITemplateSourceFile nuspec = root.Value.EnumerateFiles("*.nuspec", SearchOption.TopDirectoryOnly).FirstOrDefault();

                    if (nuspec != null)
                    {
                        string id, version;
                        GetPackageIdAndVersion(nuspec, out id, out version);

                        NuGetUtil.Init();
                        string newerVersion = await NuGetUtil.GetCurrentVersionOfPackageAsync(id, version);

                        return(newerVersion != null);
                    }
                }
            }

            return(false);
        }
 public EmbeddedTemplateSource(IConfiguredTemplateSource parent, ITemplateSourceEntry entry, ITemplateSource source)
 {
     _parent = parent;
     _entry  = entry;
     _source = source;
 }
 public IDisposable <ITemplateSourceFolder> RootFor(IConfiguredTemplateSource source, string location)
 {
     return(null);
 }
 public Task <bool> CheckForUpdatesAsync(IConfiguredTemplateSource source, string location)
 {
     return(Task.FromResult(false));
 }
 public bool TryGetTemplateFromSource(IConfiguredTemplateSource target, string name, out ITemplate template)
 {
     template = GetTemplatesFromSource(target).FirstOrDefault(x => string.Equals(x.Name, name, StringComparison.OrdinalIgnoreCase));
     return(template != null);
 }
 public string GetInstallPackageId(IConfiguredTemplateSource source, string location)
 {
     return(null);
 }
 public bool CanHandle(IConfiguredTemplateSource source, string location)
 {
     return(false);
 }
Exemple #18
0
        private static bool TryGetTemplate(string templateName, CommandOption source, bool quiet, out ITemplate tmplt, out IGenerator generator)
        {
            IReadOnlyList <IConfiguredTemplateSource> searchSources;

            if (!source.HasValue())
            {
                searchSources = Program.Broker.GetConfiguredSources().ToList();
            }
            else
            {
                IConfiguredTemplateSource realSource = Program.Broker.GetConfiguredSources().FirstOrDefault(x => x.Alias == source.Value());
                if (realSource == null)
                {
                    tmplt     = null;
                    generator = null;
                    return(false);
                }

                searchSources = new List <IConfiguredTemplateSource> {
                    realSource
                };
            }

            searchSources = ConfiguredTemplateSourceHelper.Scan(searchSources, Program.Broker.ComponentRegistry.OfType <ITemplateSource>());

            string aliasTemplateName = AliasRegistry.GetTemplateNameForAlias(templateName);

            generator = null;
            tmplt     = null;

            foreach (IGenerator gen in Program.Broker.ComponentRegistry.OfType <IGenerator>())
            {
                foreach (IConfiguredTemplateSource target in searchSources)
                {
                    if (gen.TryGetTemplateFromSource(target, templateName, out tmplt))
                    {
                        generator = gen;
                        break;
                    }

                    if (aliasTemplateName != null && gen.TryGetTemplateFromSource(target, aliasTemplateName, out tmplt))
                    {
                        generator = gen;
                        break;
                    }
                }

                if (generator != null)
                {
                    break;
                }
            }

            if (generator == null || tmplt == null)
            {
                List <ITemplate> results = List(templateName, source).ToList();

                if (results.Count == 0)
                {
                    if (!string.IsNullOrWhiteSpace(templateName) || source.HasValue())
                    {
                        Reporter.Error.WriteLine($"No template containing \"{templateName}\" was found in any of the configured sources.".Bold().Red());
                    }
                    else
                    {
                        TableFormatter.Print(results, "(No Items)", "   ", '-', new Dictionary <string, Func <ITemplate, string> >
                        {
                            { "#", x => "0." },
                            { "Templates", x => x.Name },
                            { "Short Names", x => $"[{x.ShortName}]" }
                        });
                    }

                    return(false);
                }

                int index;

                if (results.Count != 1 || string.IsNullOrWhiteSpace(templateName))
                {
                    int counter = 0;
                    TableFormatter.Print(results, "(No Items)", "   ", '-', new Dictionary <string, Func <ITemplate, string> >
                    {
                        { "#", x => $"{++counter}." },
                        { "Templates", x => x.Name },
                        { "Short Names", x => $"[{x.ShortName}]" }
                    });

                    Reporter.Output.WriteLine();
                    Reporter.Output.WriteLine("Select a template [1]:");

                    string key = Console.ReadLine();

                    if (string.IsNullOrWhiteSpace(key))
                    {
                        key = "1";
                    }

                    while (!int.TryParse(key, out index))
                    {
                        if (string.Equals(key, "q", StringComparison.OrdinalIgnoreCase))
                        {
                            return(false);
                        }

                        key = Console.ReadLine();
                    }
                }
                else
                {
                    if (!quiet)
                    {
                        Reporter.Output.WriteLine($"Using template: {results[0].Name} [{results[0].ShortName}] {AliasRegistry.GetAliasForTemplate(results[0])}");
                    }

                    index = 1;
                }

                tmplt     = results[index - 1];
                generator = results[index - 1].Generator;
            }

            return(true);
        }