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