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));
     }
 }
Beispiel #2
0
        /// <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);
        }