Exemple #1
0
        private static QueryFilterCondition ParseDateOrTimeTagValue(QueryTag queryTag, string value)
        {
            QueryFilterCondition queryFilterCondition = null;

            if (queryTag.VR == DicomVR.DT)
            {
                queryFilterCondition = ParseDateOrTimeTagValue(queryTag, value, DicomCoreResource.InvalidDateTimeRangeValue, ParseDateTime);
            }
            else
            {
                queryFilterCondition = ParseDateOrTimeTagValue(queryTag, value, DicomCoreResource.InvalidDateRangeValue, ParseDate);
            }

            return(queryFilterCondition);
        }
 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);
             }
         }
     }
 }
        private bool ParseFilterCondition(
            KeyValuePair <string, StringValues> queryParameter,
            IEnumerable <QueryTag> queryTags,
            out QueryFilterCondition condition)
        {
            condition = null;
            var attributeId = queryParameter.Key.Trim();

            // parse tag
            if (!TryParseDicomAttributeId(attributeId, out DicomTag dicomTag))
            {
                return(false);
            }

            QueryTag queryTag = GetSupportedQueryTag(dicomTag, attributeId, queryTags);

            // parse tag value
            if (queryParameter.Value.Count != 1)
            {
                throw new QueryParseException(string.Format(DicomCoreResource.DuplicateQueryParam, attributeId));
            }

            var trimmedValue = queryParameter.Value.First().Trim();

            if (string.IsNullOrWhiteSpace(trimmedValue))
            {
                throw new QueryParseException(string.Format(DicomCoreResource.QueryEmptyAttributeValue, attributeId));
            }

            if (_valueParsers.TryGetValue(queryTag.VR, out Func <QueryTag, string, QueryFilterCondition> valueParser))
            {
                condition = valueParser(queryTag, trimmedValue);
            }

            condition.QueryTag = queryTag;

            return(condition != null);
        }
Exemple #4
0
        private bool ParseFilterCondition(KeyValuePair <string, StringValues> queryParameter, QueryResource resourceType, out QueryFilterCondition condition)
        {
            condition = null;
            var attributeId = queryParameter.Key.Trim();

            // parse tag
            if (!TryParseDicomAttributeId(attributeId, out DicomTag dicomTag))
            {
                return(false);
            }

            ValidateIfTagSupported(dicomTag, attributeId, resourceType);

            // parse tag value
            if (!queryParameter.Value.Any() || queryParameter.Value.Count > 1)
            {
                throw new QueryParseException(string.Format(DicomCoreResource.DuplicateQueryParam, attributeId));
            }

            var trimmedValue = queryParameter.Value.First().Trim();

            if (string.IsNullOrWhiteSpace(trimmedValue))
            {
                throw new QueryParseException(string.Format(DicomCoreResource.QueryEmptyAttributeValue, attributeId));
            }

            var tagTypeCode = dicomTag.DictionaryEntry.ValueRepresentations.FirstOrDefault()?.Code;

            if (_valueParsers.TryGetValue(tagTypeCode, out Func <DicomTag, string, QueryFilterCondition> valueParser))
            {
                condition = valueParser(dicomTag, trimmedValue);
            }

            return(condition != null);
        }