private static IEnumerable <SubPart> ReadSubParts(XElement node, string repository) { var subParts = node.Elements().Where(e => e.Name.LocalName.Equals("SubPart", StringComparison.OrdinalIgnoreCase)); foreach (var subPart in subParts) { var sName = subPart.Attribute("PartName")?.Value; if (string.IsNullOrEmpty(sName)) { continue; } var sp = new SubPart() { Name = sName, Repository = subPart.Attribute("Repository")?.Value, PartFile = subPart.Attribute("PartFile")?.Value, }; if (!string.IsNullOrEmpty(sp.PartFile) && string.IsNullOrEmpty(sp.Repository)) { sp.Repository = repository; } yield return(sp); } }
private PartExplorerElementVM LoadExternalSubpartVM(Queue <Tuple <PartExplorerElementVM, SubPart> > externalSubparts, SubPart sp, ExternalPartFile externalPartFile, string srcDir, BuildFromSource bfs, CompiledBuildStrategy strategy) { PartExplorerElementVM subPartVM; if (externalPartFile.LoadedParts.TryGetValue(sp.Name, out subPartVM)) { return(subPartVM); } Part newSubPart = null; if (sp.IsProduct) { newSubPart = externalPartFile.File.Products.FirstOrDefault(p => string.Equals(p.Name, sp.Name, StringComparison.OrdinalIgnoreCase)); } else { newSubPart = externalPartFile.File.Parts.FirstOrDefault(p => string.Equals(p.Name, sp.Name, StringComparison.OrdinalIgnoreCase)); } if (newSubPart == null) { log.Warn($"Failed to find part {sp.Name} in partfile {sp.PartFile}"); newSubPart = new Part() { Name = sp.Name }; //use a dummy instead } subPartVM = new PartExplorerElementVM(_configuration) { Name = sp.Name, Repository = externalPartFile.Key.Repository, PartFile = externalPartFile.Key.Name, MakeFile = newSubPart.MakeFile, FromSource = bfs, }; subPartVM.PartType = DeterminePartType(subPartVM, sp.IsProduct, externalPartFile.File.Directory, srcDir); externalPartFile.LoadedParts.Add(sp.Name, subPartVM); if (newSubPart != null) { AddChildVMs(externalSubparts, externalPartFile, subPartVM, newSubPart, srcDir, strategy); } return(subPartVM); }