public IActionResult GetSchemaUIResource([FromBody] DisplayTableAndColumn identifiers) { try { return(Ok(_documentService.GetSchemaUIResource(identifiers, UpdateIndex.Published))); } catch (ArgumentNullException ex) { return(BadRequest(ex.Message)); } catch (EntityNotFoundException ex) { return(NotFound(ex.Message)); } }
/// <summary> /// <see cref="IDocumentService.GetDocument(string)(string)"/> /// </summary> /// <param name="identifier">Document with field <c>resoruceID</c>.</param> /// <param name="searchIndex">The index from which the document should be fetched.</param> public object GetSchemaUIResource(DisplayTableAndColumn identifiers, UpdateIndex searchIndex) { if (identifiers == null) { throw new ArgumentNullException(nameof(identifiers), "The identifier must not be null or empty."); } SchemaUI schemaUI = new SchemaUI(); if (identifiers.columns != null && identifiers.columns.Count > 0) { var colresult = identifiers.columns.Select (x => x.pidURI).AsEnumerable(); schemaUI.columns = _elasticSearchRepository.GetSchemaUIResource(colresult, searchIndex)?.ToList <object>(); for (int i = 0; i < schemaUI.columns.Count; i++) { var columnObject = identifiers.columns.Where(x => x.pidURI == GetPidUrl((JObject)schemaUI.columns[i])).FirstOrDefault(); if (columnObject.subColumns.Count > 0) { JObject jsonColumnDocument = JObject.Parse(schemaUI.columns[i].ToString()); jsonColumnDocument.Add(new JProperty("hasSubColumns", GetSubcolumns(columnObject))); schemaUI.columns[i] = jsonColumnDocument; } } } if (identifiers.tables != null && identifiers.tables.Count > 0) { var identifierList = identifiers.tables.Select(x => x.pidURI).AsEnumerable(); var tableDocuments = _elasticSearchRepository.GetSchemaUIResource(identifierList, searchIndex); var columnIDs = identifiers.tables.Where(x => x.linkedTableFiled != null).SelectMany(x => x.linkedTableFiled).Select(y => y.pidURI).AsEnumerable(); var columnDocuments = _elasticSearchRepository.GetSchemaUIResource(columnIDs, searchIndex); foreach (var table in identifiers.tables) { try { Table tableObj = new Table(); tableObj.resourceDetail = tableDocuments.Where(x => GetPidUrl(x) == table.pidURI).FirstOrDefault(); tableObj.linkedColumnResourceDetail = table.linkedTableFiled .Where(x => x != null && columnDocuments.Any(y => GetPidUrl(y) == x.pidURI)) .Select(col => { return(columnDocuments.Where(x => GetPidUrl(x) == col.pidURI).FirstOrDefault()); }).ToList <object>(); for (int i = 0; i < tableObj.linkedColumnResourceDetail.Count; i++) { var columnObject = table.linkedTableFiled.Where(x => x.pidURI == GetPidUrl((JObject)tableObj.linkedColumnResourceDetail[i])).FirstOrDefault(); if (columnObject.subColumns.Count > 0) { JObject jsonColumnDocument = JObject.Parse(tableObj.linkedColumnResourceDetail[i].ToString()); jsonColumnDocument.Add(new JProperty("hasSubColumns", GetSubcolumns(columnObject))); tableObj.linkedColumnResourceDetail[i] = jsonColumnDocument; } } if (tableObj.resourceDetail != null) { schemaUI.tables.Add(tableObj); } } catch (System.Exception ex) { _logger.LogInformation(ex, ex.Message); continue; } } } return(schemaUI); }