private void _processClasses(int retryCount, List <AllowedChildClassInfo> allAllowedChildInfos, string coreConfigName, Stream stream, IDeserializer deserializer, Stopwatch watch, string serializationPath, IEnumerable <string> classTypes, IEnumerable <string> ignoreFields) { var retryClasses = new List <string>(); var concretePath = this.GetRootPath(serializationPath); var yamlFiles = Directory.EnumerateFiles(concretePath, "*.yaml", SearchOption.AllDirectories); foreach (string yamlFile in yamlFiles) { watch.Reset(); watch.Start(); var yamlFileContent = File.ReadAllText(yamlFile); var bridgeClassInfo = deserializer.Deserialize <BridgeClassInfo>(yamlFileContent); if (classTypes.Any(x => x.ToLower() == bridgeClassInfo.ClassName.ToLower())) { var newDCI = DataClassInfoProvider.GetDataClassInfo(bridgeClassInfo.ClassName); if (newDCI == null) { newDCI = new DataClassInfo(); } foreach (var field in bridgeClassInfo.FieldValues) { if (!ignoreFields.Contains(field.Key)) { newDCI[field.Key] = field.Value; } } DataClassInfoProvider.SetDataClassInfo(newDCI); foreach (var allowedType in bridgeClassInfo.AllowedChildTypes) { var matchingClass = new ObjectQuery("cms.class", false).Where("ClassName", QueryOperator.Equals, allowedType)?.Column("ClassID")?.FirstOrDefault(); if (matchingClass != null) { matchingClass["ClassID"]?.ToString(); var acci = new AllowedChildClassInfo() { ChildClassID = int.Parse(matchingClass["ClassID"]?.ToString()), ParentClassID = newDCI.ClassID }; allAllowedChildInfos.Add(acci); } else { retryClasses.Add(allowedType); } } foreach (var siteGUID in bridgeClassInfo.AssignedSites) { var site = SiteInfoProvider.GetSiteInfoByGUID(siteGUID); ClassSiteInfoProvider.AddClassToSite(newDCI.ClassID, site.SiteID); } foreach (var bcq in bridgeClassInfo.Queries) { var qi = QueryInfoProvider.GetQueries().Where("QueryGUID", QueryOperator.Equals, bcq.Value.QueryGUID).FirstOrDefault(); if (qi == null) { qi = new QueryInfo(); } qi.ClassID = newDCI.ClassID; qi.QueryName = bcq.Key; qi.QueryTypeID = bcq.Value.QueryTypeID; qi.QueryText = bcq.Value.QueryText; qi.QueryIsLocked = bcq.Value.QueryIsLocked; qi.QueryIsCustom = bcq.Value.QueryIsCustom; qi.QueryRequiresTransaction = bcq.Value.QueryRequiresTransaction; qi.QueryConnectionString = bcq.Value.QueryConnectionString; qi.QueryGUID = bcq.Value.QueryGUID; QueryInfoProvider.SetQueryInfo(qi); } byte[] bytes = Encoding.UTF8.GetBytes($"Synced {coreConfigName}: {yamlFile.Replace(concretePath, "")} - {watch.ElapsedMilliseconds}ms"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } watch.Stop(); } retryCount--; if (retryCount > 0 && retryClasses.Count > 0) { _processClasses(retryCount, allAllowedChildInfos, coreConfigName, stream, deserializer, watch, serializationPath, retryClasses, ignoreFields); } }