コード例 #1
0
        private static QueryFilterCondition ParseDateTagValue(DicomTag dicomTag, string value)
        {
            if (QueryLimit.IsValidRangeQueryTag(dicomTag))
            {
                var splitString = value.Split('-');
                if (splitString.Length == 2)
                {
                    string   minDate       = splitString[0].Trim();
                    string   maxDate       = splitString[1].Trim();
                    DateTime parsedMinDate = ParseDate(minDate, dicomTag.DictionaryEntry.Keyword);
                    DateTime parsedMaxDate = ParseDate(maxDate, dicomTag.DictionaryEntry.Keyword);

                    if (parsedMinDate > parsedMaxDate)
                    {
                        throw new QueryParseException(string.Format(
                                                          DicomCoreResource.InvalidDateRangeValue,
                                                          value,
                                                          minDate,
                                                          maxDate));
                    }

                    return(new DateRangeValueMatchCondition(dicomTag, parsedMinDate, parsedMaxDate));
                }
            }

            DateTime parsedDate = ParseDate(value, dicomTag.DictionaryEntry.Keyword);

            return(new DateSingleValueMatchCondition(dicomTag, parsedDate));
        }
コード例 #2
0
        private static QueryFilterCondition ParseDateOrTimeTagValue(QueryTag queryTag, string value, string exceptionBaseMessage, Func <string, string, DateTime> parseValue)
        {
            if (QueryLimit.IsValidRangeQueryTag(queryTag))
            {
                var splitString = value.Split('-');
                if (splitString.Length == 2)
                {
                    string minDateTime = splitString[0].Trim();
                    string maxDateTime = splitString[1].Trim();

                    // Make sure both parts of the range values are not empty.
                    // If so, throw an exception.
                    ValidateEmptyValuesForRangeQuery(minDateTime, maxDateTime);

                    DateTime parsedMinDateTime = string.IsNullOrEmpty(minDateTime) ? DateTime.MinValue : parseValue(minDateTime, queryTag.GetName());
                    DateTime parsedMaxDateTime = string.IsNullOrEmpty(maxDateTime) ? DateTime.MaxValue : parseValue(maxDateTime, queryTag.GetName());

                    if (parsedMinDateTime > parsedMaxDateTime)
                    {
                        throw new QueryParseException(string.Format(
                                                          exceptionBaseMessage,
                                                          value,
                                                          minDateTime,
                                                          maxDateTime));
                    }

                    return(new DateRangeValueMatchCondition(queryTag, parsedMinDateTime, parsedMaxDateTime));
                }
            }

            DateTime parsedDateTime = parseValue(value, queryTag.GetName());

            return(new DateSingleValueMatchCondition(queryTag, parsedDateTime));
        }
コード例 #3
0
        private static QueryFilterCondition ParseTimeTagValue(QueryTag queryTag, string value)
        {
            if (QueryLimit.IsValidRangeQueryTag(queryTag))
            {
                var splitString = value.Split('-');
                if (splitString.Length == 2)
                {
                    string minTime = splitString[0].Trim();
                    string maxTime = splitString[1].Trim();

                    // Make sure both parts of the range values are not empty.
                    // If so, throw an exception.
                    ValidateEmptyValuesForRangeQuery(minTime, maxTime);

                    long parsedMinTime = string.IsNullOrEmpty(minTime) ? 0 : ParseTime(minTime, queryTag);
                    long parsedMaxTime = string.IsNullOrEmpty(maxTime) ? TimeSpan.TicksPerDay : ParseTime(maxTime, queryTag);

                    if (parsedMinTime > parsedMaxTime)
                    {
                        throw new QueryParseException(string.Format(
                                                          DicomCoreResource.InvalidTimeRangeValue,
                                                          value,
                                                          minTime,
                                                          maxTime));
                    }

                    return(new LongRangeValueMatchCondition(queryTag, parsedMinTime, parsedMaxTime));
                }
            }

            long parsedTime = ParseTime(value, queryTag);

            return(new LongSingleValueMatchCondition(queryTag, parsedTime));
        }
コード例 #4
0
 private static void PostProcessFilterConditions(QueryExpressionImp parsedQuery)
 {
     // fuzzy match condition modification
     if (parsedQuery.FuzzyMatch == true)
     {
         for (int i = 0; i < parsedQuery.FilterConditions.Count; i++)
         {
             QueryFilterCondition cond = parsedQuery.FilterConditions[i];
             if (QueryLimit.IsValidFuzzyMatchingQueryTag(cond.QueryTag))
             {
                 var s = cond as StringSingleValueMatchCondition;
                 parsedQuery.FilterConditions[i] = new PersonNameFuzzyMatchCondition(s.QueryTag, s.Value);
             }
         }
     }
 }
コード例 #5
0
ファイル: QueryParser.cs プロジェクト: KnicKnic/dicom-server
        private static void PostProcessFilterConditions(QueryExpressionImp parsedQuery)
        {
            // fuzzy match condition modification
            if (parsedQuery.FuzzyMatch == true)
            {
                IEnumerable <QueryFilterCondition> potentialFuzzyConds = parsedQuery.FilterConditions
                                                                         .Where(c => QueryLimit.IsValidFuzzyMatchingQueryTag(c.DicomTag)).ToList();
                foreach (QueryFilterCondition cond in potentialFuzzyConds)
                {
                    var singleValueCondition = cond as StringSingleValueMatchCondition;

                    // Remove existing stringvalue match and add fuzzymatch condition
                    var personNameFuzzyMatchCondition = new PersonNameFuzzyMatchCondition(singleValueCondition.DicomTag, singleValueCondition.Value);
                    parsedQuery.FilterConditions.Remove(singleValueCondition);
                    parsedQuery.FilterConditions.Add(personNameFuzzyMatchCondition);
                }
            }
        }