in src/Microsoft.OpenApi.CSharpAnnotations.DocumentGeneration/DocumentConfigFilters/DocumentVariantAttributesFilter.cs [35:120]
public IList<GenerationError> Apply(
IDictionary<DocumentVariantInfo, OpenApiDocument> documents,
XElement element,
IList<XDocument> xmlDocuments,
DocumentConfigFilterSettings settings)
{
var generationErrors = new List<GenerationError>();
if (element == null || xmlDocuments == null)
{
return generationErrors;
}
try
{
var variantElements = element.Elements(KnownXmlStrings.Variant);
foreach (var variantElement in variantElements)
{
// First, populate the document variant info attributes using the document variant option.
var variantOptions = variantElement.Element(KnownXmlStrings.Options)?.Elements(KnownXmlStrings.Option);
if (variantOptions != null)
{
foreach (var variantOption in variantOptions)
{
var documentVariantInfo = new DocumentVariantInfo
{
Title = variantOption.Value,
Categorizer = variantElement.Element(KnownXmlStrings.Name)?.Value
};
foreach (var attribute in variantOption.Attributes())
{
if (!documentVariantInfo.Attributes.ContainsKey(attribute.Name.ToString()))
{
documentVariantInfo.Attributes[attribute.Name.ToString()] = attribute.Value;
}
}
PopulateAttributesInExistingDocumentVariantInfo(documents, documentVariantInfo);
}
}
// Second, populate the document variant info attributes using the information from the documents.
var allCategorizerNodes = new List<XElement>();
foreach (var xmlDocument in xmlDocuments)
{
allCategorizerNodes.AddRange(
xmlDocument.Descendants(variantElement.Element(KnownXmlStrings.Name)?.Value));
}
foreach (var categorizerNode in allCategorizerNodes)
{
var documentVariantInfo = new DocumentVariantInfo
{
Title = categorizerNode.Value,
Categorizer = categorizerNode.Name.ToString()
};
foreach (var attribute in categorizerNode.Attributes())
{
if (!documentVariantInfo.Attributes.ContainsKey(attribute.Name.ToString()))
{
documentVariantInfo.Attributes[attribute.Name.ToString()] = attribute.Value;
}
}
PopulateAttributesInExistingDocumentVariantInfo(documents, documentVariantInfo);
}
}
}
catch (Exception ex)
{
generationErrors.Add(
new GenerationError
{
Message = ex.Message,
ExceptionType = ex.GetType().Name
});
}
return generationErrors;
}