Пример #1
0
 public TableDefinition(TableBlockType type, IEnumerable<ItemDefinition> rows, string headerText)
 {
     this.Type = type;
     this.Rows = rows.ToArray();
     this.Title = headerText;
 }
Пример #2
0
 public TableDefinition(TableBlockType type, IEnumerable <ItemDefinition> rows, string headerText)
 {
     this.Type  = type;
     this.Rows  = rows.ToArray();
     this.Title = headerText;
 }
Пример #3
0
        /// <summary>
        /// Convert a tablespec block into one of our internal object model representations
        /// </summary>
        /// <param name="tableSpecBlock"></param>
        /// <param name="lastHeaderBlock"></param>
        /// <param name="errors"></param>
        /// <returns></returns>
        public static TableDefinition ParseTableSpec(Block tableSpecBlock, Block lastHeaderBlock, out ValidationError[] errors)
        {
            List <ValidationError> discoveredErrors = new List <ValidationError>();
            List <ItemDefinition>  items            = new List <ItemDefinition>();

            var            tableShape          = tableSpecBlock.Table;
            TableBlockType discoveredTableType = TableBlockType.Unknown;
            string         headerText          = null;

            // Try matching based on header
            if (null != lastHeaderBlock && null != lastHeaderBlock.Content)
            {
                headerText          = lastHeaderBlock.Content;
                discoveredTableType = CommonHeaderMatch(headerText);
            }

            // Try matching based on shape
            if (discoveredTableType == TableBlockType.Unknown && null != tableSpecBlock.Table)
            {
                discoveredTableType = TableShapeMatch(tableShape);
            }

            switch (discoveredTableType)
            {
            case TableBlockType.ErrorCodes:
                items.AddRange(ParseErrorTable(tableShape));
                break;

            case TableBlockType.PathParameters:
                items.AddRange(ParseParameterTable(tableShape, ParameterLocation.Path));
                break;

            case TableBlockType.ResourcePropertyDescriptions:
            case TableBlockType.RequestObjectProperties:
            case TableBlockType.ResponseObjectProperties:
                items.AddRange(ParseParameterTable(tableShape, ParameterLocation.JsonObject));
                break;

            case TableBlockType.HttpHeaders:
                items.AddRange(ParseHeadersTable(tableShape));
                break;

            case TableBlockType.QueryStringParameters:
                items.AddRange(ParseParameterTable(tableShape, ParameterLocation.QueryString));
                break;

            case TableBlockType.EnumerationValues:
                items.AddRange(ParseEnumerationTable(tableShape));
                break;

            case TableBlockType.AuthScopes:
                items.AddRange(ParseAuthScopeTable(tableShape));
                break;

            case TableBlockType.Unknown:
                discoveredErrors.Add(new ValidationMessage(null, "Ignored unclassified table: headerText='{0}', tableHeaders='{1}'", headerText, tableShape.ColumnHeaders.ComponentsJoinedByString(",")));
                break;

            default:
                discoveredErrors.Add(new ValidationMessage(null, "Ignored table: classification='{2}', headerText='{0}', tableHeaders='{1}'", headerText, tableShape.ColumnHeaders.ComponentsJoinedByString(","), discoveredTableType));
                break;
            }

            errors = discoveredErrors.ToArray();

            return(new TableDefinition(discoveredTableType, items, headerText));
        }