// GET: Search/Index or Search public ActionResult Index(string query) { if (query == null) { query = ""; } //must calculate total number of results int tagStart = query.IndexOf('{') + 1; int tagEnd = query.IndexOf('}'); string tagString = ""; if (tagStart != 0 && tagEnd != -1) { tagString = query.Substring(tagStart, tagEnd - tagStart); } Dicom.DicomTag parsedTag = null; //parse tag if tag found if (tagString != "") { try { //try parse by tag ID parsedTag = Dicom.DicomTag.Parse(tagString); } catch (Exception e) { parsedTag = null; } try { //try parse by tag Name parsedTag = Dicom.DicomDictionary.Default[tagString]; } catch (Exception e) { } } //define search function in mongo database Expression <Func <Repository, bool> > filter = (Repository r) => r.Summary.Contains(query) || // look in summary r.Name.Contains(query); //look in repo name // r.DicomFiles.Any(d => d.Dataset.Contains(parsedTag)); //look for tag (false if tag == null) SearchResults = Database.FindRepo(filter); // ViewBag.NumberOfResults = SearchResults.Count; ViewBag.Title = "Search."; return(View(SearchResults)); //SearchResults = (from r in Database.DataCollection.AsQueryable() where // r.Summary.Contains(query) // || r.Name.Contains(query) select r).ToList(); ////|| r.root.Items.Count() >0 select r).ToList(); //var results = Database.DataCollection.AsQueryable().Select(r => r.root.Items); //var res2 = results.Where(n=> n) //IQueryable<Repository> items = from r in Database.DataCollection.AsQueryable() where r.root.Items.Where(n=> n.fileType == FileType.Dicom).Cast<RepoDicomFile>().Select(x =>x.dicomFile).Any(d => d.Dataset.Contains(parsedTag)) select r ; // Database.FindRepo(); // var items = Database.DataCollection.AsQueryable().Where(r=> r.root.Items.ConvertAll(x=>(RepoDicomFile)x).Contains(null)); // FilterDefinition<Repository> qf = "{\"$match\":{\"root.Items\":null}}"; //// var items = Database.DataCollection.Find(qf); // //var items = Database.DataCollection.AsQueryable(); // //DataCollection.Find(filter) // //use filter to search // foreach (var v in items) // Console.WriteLine(v); }
private void InitializeSettings() { _logger.Log(LogLevel.Information, "Initializing AE Title {0} with processor {1}", _configuration.AeTitle, _configuration.Processor); string setting = string.Empty; if (_configuration.ProcessorSettings.TryGetValue("timeout", out setting)) { if (int.TryParse(setting, out int timeout)) { _timeout = timeout < 5 ? 5 : timeout; } else { throw new ConfigurationException($"Invalid processor setting 'timeout' specified for AE Title {_configuration.AeTitle}"); } } else { _timeout = DEFAULT_TIMEOUT_SECONDS; } _logger.Log(LogLevel.Information, "AE Title {0} Processor Setting: timeout={1}s", _configuration.AeTitle, _timeout); if (_configuration.ProcessorSettings.TryGetValue("jobRetryDelay", out setting)) { if (int.TryParse(setting, out int delay)) { _jobRetryDelay = delay; } else { throw new ConfigurationException($"Invalid processor setting 'jobRetryDelay' specified for AE Title {_configuration.AeTitle}"); } } else { _jobRetryDelay = DEFAULT_JOB_RETRY_DELAY_MS; } _logger.Log(LogLevel.Information, "AE Title {0} Processor Setting: jobRetryDelay={1}ms", _configuration.AeTitle, _jobRetryDelay); if (_configuration.ProcessorSettings.TryGetValue("priority", out setting)) { if (Enum.TryParse(setting, true, out JobPriority priority)) { _priority = priority; } else { throw new ConfigurationException($"Invalid processor setting 'priority' specified for AE Title {_configuration.AeTitle}"); } } else { _priority = JobPriority.Normal; } _logger.Log(LogLevel.Information, "AE Title {0} Processor Setting: priority={1}", _configuration.AeTitle, _priority); if (_configuration.ProcessorSettings.TryGetValue("groupBy", out setting)) { try { _grouping = Dicom.DicomTag.Parse(setting); } catch (System.Exception ex) { throw new ConfigurationException($"Invalid processor setting 'groupBy' specified for AE Title {_configuration.AeTitle}", ex); } } else { _grouping = Dicom.DicomTag.StudyInstanceUID; } _logger.Log(LogLevel.Information, "AE Title {0} Processor Setting: groupBy={1}", _configuration.AeTitle, _grouping); foreach (var key in _configuration.ProcessorSettings.Keys) { if (key.StartsWith("pipeline-", StringComparison.OrdinalIgnoreCase)) { var name = key.Substring(9); var value = _configuration.ProcessorSettings[key]; _pipelines.Add(name, value); _logger.Log(LogLevel.Information, "Pipeline {0}={1} added for AE Title {2}", name, value, _configuration.AeTitle); } } if (_pipelines.Count == 0) { throw new ConfigurationException($"No pipeline defined for AE Title {_configuration.AeTitle}"); } }