private object BuildOverwriteWithSchema(FileModel owModel, OverwriteDocumentModel overwrite, IHostService host, BaseSchema schema)
        {
            dynamic overwriteObject = ConvertToObjectHelper.ConvertToDynamic(overwrite.Metadata);

            overwriteObject.uid = overwrite.Uid;
            var overwriteModel = new FileModel(owModel.FileAndType, overwriteObject, owModel.OriginalFileAndType);
            var context        = new ProcessContext(host, overwriteModel)
            {
                ContentAnchorParser = new ContentAnchorParser(overwrite.Conceptual)
            };

            var transformed = _overwriteProcessor.Process(overwriteObject, schema, context) as IDictionary <string, object>;

            if (!context.ContentAnchorParser.ContainsAnchor)
            {
                transformed["conceptual"] = context.ContentAnchorParser.Content;
            }

            // add SouceDetail back to transformed, in week type
            transformed[Constants.PropertyName.Documentation] = new Dictionary <string, object>
            {
                ["remote"] = overwrite.Documentation.Remote == null ? null : new Dictionary <string, object>
                {
                    ["path"]   = overwrite.Documentation.Remote.RelativePath,
                    ["branch"] = overwrite.Documentation.Remote.RemoteBranch,
                    ["repo"]   = overwrite.Documentation.Remote.RemoteRepositoryUrl,
                }
                ["path"]      = overwrite.Documentation?.Path,
                ["startLine"] = overwrite.Documentation?.StartLine ?? 0,
                ["endLine"]   = overwrite.Documentation?.EndLine ?? 0,
            };

            owModel.LinkToUids                   = owModel.LinkToUids.Union((context.UidLinkSources).Keys);
            owModel.LinkToFiles                  = owModel.LinkToFiles.Union((context.FileLinkSources).Keys);
            owModel.FileLinkSources              = owModel.FileLinkSources.Merge(context.FileLinkSources);
            owModel.UidLinkSources               = owModel.UidLinkSources.Merge(context.UidLinkSources);
            owModel.Uids                         = owModel.Uids.AddRange(context.Uids);
            owModel.Properties.XRefSpecs         = context.XRefSpecs;
            owModel.Properties.ExternalXRefSpecs = context.ExternalXRefSpecs;

            foreach (var d in context.Dependency)
            {
                host.ReportDependencyTo(owModel, d, DependencyTypeName.Include);
            }
            return(transformed);
        }
Exemple #2
0
        public object BuildOverwriteWithSchema(FileModel owModel, OverwriteDocumentModel overwrite, BaseSchema schema)
        {
            if (overwrite == null || owModel == null)
            {
                return(null);
            }

            if (schema == null)
            {
                throw new ArgumentNullException(nameof(schema));
            }

            dynamic overwriteObject = ConvertToObjectHelper.ConvertToDynamic(overwrite.Metadata);

            overwriteObject.uid = overwrite.Uid;
            var overwriteModel = new FileModel(owModel.FileAndType, overwriteObject, owModel.OriginalFileAndType);
            var context        = (((IDictionary <string, object>)(owModel.Properties)).TryGetValue("MarkdigMarkdownService", out var service))
                ? new ProcessContext(_host, overwriteModel, null, (MarkdigMarkdownService)service)
                : new ProcessContext(_host, overwriteModel);

            if (_overwriteModelType == OverwriteModelType.Classic)
            {
                context.ContentAnchorParser = new ContentAnchorParser(overwrite.Conceptual);
            }

            var transformed = _overwriteProcessor.Process(overwriteObject, schema, context) as IDictionary <string, object>;

            if (_overwriteModelType == OverwriteModelType.Classic && !context.ContentAnchorParser.ContainsAnchor)
            {
                transformed["conceptual"] = context.ContentAnchorParser.Content;
            }

            // add SouceDetail back to transformed, in week type
            if (overwrite.Documentation != null)
            {
                transformed[Constants.PropertyName.Documentation] = new Dictionary <string, object>
                {
                    ["remote"] = overwrite.Documentation.Remote == null ? null : new Dictionary <string, object>
                    {
                        ["path"]   = overwrite.Documentation.Remote.RelativePath,
                        ["branch"] = overwrite.Documentation.Remote.RemoteBranch,
                        ["repo"]   = overwrite.Documentation.Remote.RemoteRepositoryUrl,
                    }
                    ["path"]      = overwrite.Documentation?.Path,
                    ["startLine"] = overwrite.Documentation?.StartLine ?? 0,
                    ["endLine"]   = overwrite.Documentation?.EndLine ?? 0,
                };
            }

            owModel.LinkToUids                   = owModel.LinkToUids.Union((context.UidLinkSources).Keys);
            owModel.LinkToFiles                  = owModel.LinkToFiles.Union((context.FileLinkSources).Keys);
            owModel.FileLinkSources              = owModel.FileLinkSources.Merge(context.FileLinkSources);
            owModel.UidLinkSources               = owModel.UidLinkSources.Merge(context.UidLinkSources);
            owModel.Uids                         = owModel.Uids.AddRange(context.Uids);
            owModel.Properties.XRefSpecs         = context.XRefSpecs;
            owModel.Properties.ExternalXRefSpecs = context.ExternalXRefSpecs;

            foreach (var d in context.Dependency)
            {
                _host.ReportDependencyTo(owModel, d, DependencyTypeName.Include);
            }
            return(transformed);
        }