private void _processContentConfig(BridgeContentConfig contentConfig, Stream stream) { var serializer = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build(); var watch = new Stopwatch(); string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; _clearTempFolder(); watch.Start(); //have this driven by config var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}"; var tempGUID = DateTime.Now.Ticks.ToString(); var tempSerializationPath = $"{serializationFolder}/temp/{tempGUID}/{contentConfig.Name}"; var pageTypes = contentConfig.GetPageTypes(); var fieldsToIgnore = contentConfig.GetIgnoreFields(); var path = contentConfig.Query; //TODO: Query to see if page types exist, if DOESNT, display that... MultiDocumentQuery docs = DocumentHelper.GetDocuments().Path(path).Types(pageTypes.ToArray()).AllCultures().FilterDuplicates(); var treeNodes = docs.ToList <TreeNode>(); foreach (var treeNode in treeNodes) { watch.Reset(); watch.Start(); var mappedItem = treeNode.Adapt <BridgeTreeNode>(); mappedItem.FieldValues = new Dictionary <string, object>(); foreach (string columnName in treeNode.ColumnNames) { if (!fieldsToIgnore.Contains(columnName)) { var columnValue = treeNode.GetValue(columnName); if (columnValue != null) { mappedItem.FieldValues.Add(columnName, columnValue); } } } mappedItem.ParentNodeGUID = treeNode?.Parent?.NodeGUID; var stringBuilder = new StringBuilder(); var res = serializer.Serialize(mappedItem); stringBuilder.AppendLine(res); var pathToWriteTo = $"{tempSerializationPath}/{mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml"; var concretePath = this.GetRootPath(pathToWriteTo); FileInfo file = new FileInfo(concretePath); file.Directory.Create(); // If the directory already exists, this method does nothing. File.WriteAllText(concretePath, res); } watch.Stop(); _outputToStream(stream, $"Generating temp {contentConfig.Name} - {watch.ElapsedMilliseconds}ms"); _processDifferences(stream, watch, serializationPath, tempSerializationPath); }
private void _processContentConfig(BridgeContentConfig contentConfig, Stream stream) { var serializer = new SerializerBuilder().ConfigureDefaultValuesHandling(DefaultValuesHandling.OmitNull).Build(); var watch = new Stopwatch(); string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; //have this driven by config var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}"; var pageTypes = contentConfig.GetPageTypes(); var fieldsToIgnore = contentConfig.GetIgnoreFields(); var path = contentConfig.Query; MultiDocumentQuery docs = DocumentHelper.GetDocuments().Path(path).Types(pageTypes.ToArray()).AllCultures().FilterDuplicates(); var treeNodes = docs.ToList <TreeNode>(); foreach (var treeNode in treeNodes) { watch.Reset(); watch.Start(); var mappedItem = treeNode.Adapt <BridgeTreeNode>(); mappedItem.FieldValues = new Dictionary <string, object>(); foreach (string columnName in treeNode.ColumnNames) { if (!fieldsToIgnore.Contains(columnName)) { var columnValue = treeNode.GetValue(columnName); if (columnValue != null) { mappedItem.FieldValues.Add(columnName, columnValue); } } } mappedItem.ParentNodeGUID = treeNode?.Parent?.NodeGUID; var stringBuilder = new StringBuilder(); var res = serializer.Serialize(mappedItem); stringBuilder.AppendLine(res); var pathToWriteTo = $"{serializationPath}/{mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml"; var concretePath = this.GetRootPath(pathToWriteTo); FileInfo file = new FileInfo(concretePath); file.Directory.Create(); // If the directory already exists, this method does nothing. File.WriteAllText(concretePath, res); watch.Stop(); byte[] bytes = Encoding.UTF8.GetBytes($"Serialized {contentConfig.Name}: {mappedItem.NodeAliasPath}#{mappedItem.DocumentCulture}.yaml ({mappedItem.NodeGUID}) - {watch.ElapsedMilliseconds}ms"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } }
private void _processContentConfing(BridgeContentConfig contentConfig, Stream stream) { string serializationFolder = BridgeConfiguration.GetConfig().SerializationFolder; var deserializer = new DeserializerBuilder().Build(); TreeProvider tree = new TreeProvider(MembershipContext.AuthenticatedUser); var watch = new Stopwatch(); var serializationPath = $"{serializationFolder}/content/{contentConfig.Name}"; var pageTypes = contentConfig.GetPageTypes(); var ignoreFields = contentConfig.GetIgnoreFields(); 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 bridgeTreeNode = deserializer.Deserialize <BridgeTreeNode>(yamlFileContent); if (pageTypes.Any(x => x.ToLower() == bridgeTreeNode.ClassName.ToLower())) { var treeNode = tree.SelectSingleNode(bridgeTreeNode.NodeGUID, bridgeTreeNode.DocumentCulture, bridgeTreeNode.NodeSiteName); if (treeNode != null) { if (bridgeTreeNode.FieldValues != null) { foreach (var fieldValue in bridgeTreeNode.FieldValues) { if (!ignoreFields.Contains(fieldValue.Key)) { treeNode.SetValue(fieldValue.Key, fieldValue.Value); } } treeNode.Update(); } } else { var nonSpecificCultureTreeNode = tree.SelectSingleNode(bridgeTreeNode.NodeGUID, null, bridgeTreeNode.NodeSiteName, true); if (nonSpecificCultureTreeNode != null) { // if we are in here, we have a version of the same page already, make it a culture variant if (bridgeTreeNode.FieldValues != null) { foreach (var fieldValue in bridgeTreeNode.FieldValues) { if (!ignoreFields.Contains(fieldValue.Key)) { nonSpecificCultureTreeNode.SetValue(fieldValue.Key, fieldValue.Value); } } } nonSpecificCultureTreeNode.InsertAsNewCultureVersion(bridgeTreeNode.DocumentCulture); } else { //else, we can assume this is a new page and insert var parentTreeNode = tree.SelectSingleNode(bridgeTreeNode.ParentNodeGUID.GetValueOrDefault(), bridgeTreeNode.DocumentCulture, bridgeTreeNode.NodeSiteName); var newTreeNode = TreeNode.New(bridgeTreeNode.ClassName, tree); if (bridgeTreeNode.FieldValues != null) { foreach (var fieldValue in bridgeTreeNode.FieldValues) { if (!ignoreFields.Contains(fieldValue.Key)) { newTreeNode.SetValue(fieldValue.Key, fieldValue.Value); } } } newTreeNode.Insert(parentTreeNode); } } byte[] bytes = Encoding.UTF8.GetBytes($"Synced {contentConfig.Name}: {yamlFile.Replace(concretePath, "")} - {watch.ElapsedMilliseconds}ms"); stream.Write(bytes, 0, bytes.Length); stream.WriteByte(10); stream.Flush(); } watch.Stop(); } }