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); }
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); }