public void GivenSupportedDicomElement_WhenRead_ThenShouldReturnExpectedValue(DicomElement element, object expectedValue) { DicomDataset dataset = new DicomDataset(); dataset.Add(element); QueryTag tag = new QueryTag(element.Tag.BuildExtendedQueryTagStoreEntry(vr: element.ValueRepresentation.Code)); var parameters = AddInstanceTableValuedParametersBuilder.Build(dataset, new QueryTag[] { tag }); ExtendedQueryTagDataType dataType = ExtendedQueryTagLimit.ExtendedQueryTagVRAndDataTypeMapping[element.ValueRepresentation.Code]; switch (dataType) { case ExtendedQueryTagDataType.StringData: Assert.Equal(expectedValue, parameters.StringExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.LongData: Assert.Equal(expectedValue, parameters.LongExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.DoubleData: Assert.Equal(expectedValue, parameters.DoubleExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.DateTimeData: Assert.Equal(expectedValue, parameters.DateTimeExtendedQueryTags.First().TagValue); break; case ExtendedQueryTagDataType.PersonNameData: Assert.Equal(expectedValue, parameters.PersonNameExtendedQueryTags.First().TagValue); break; } }
internal async Task GivenDicomInstanceWithDifferentTypeOfExtendedQueryTags_WhenStore_ThenTheyShouldBeStoredInProperTable(ExtendedQueryTagDataType dataType, DicomElement element, object expectedValue) { string studyInstanceUid = TestUidGenerator.Generate(); string seriesInstanceUid = TestUidGenerator.Generate(); string sopInstanceUid = TestUidGenerator.Generate(); DicomDataset dataset = Samples.CreateRandomInstanceDataset(studyInstanceUid, seriesInstanceUid, sopInstanceUid); dataset.Add(element); QueryTagLevel level = QueryTagLevel.Study; var extendedQueryTagEntry = element.Tag.BuildAddExtendedQueryTagEntry(level: level); QueryTag queryTag = await AddExtendedQueryTag(extendedQueryTagEntry); try { long watermark = await CreateInstanceIndexAsync(dataset, new QueryTag[] { queryTag }); Instance instance = await _testHelper.GetInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid, watermark); IReadOnlyList <ExtendedQueryTagDataRow> rows = await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataAsync(dataType, queryTag.ExtendedQueryTagStoreEntry.Key, instance.StudyKey); Assert.Single(rows); Assert.Equal(watermark, rows[0].Watermark); Assert.Equal(expectedValue, rows[0].TagValue); } finally { await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(extendedQueryTagEntry.Path, extendedQueryTagEntry.VR); } }
public void GivenStringExtendedQueryTagFilter_WhenIELevelStudy_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(false, new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); var filter = new StringSingleValueMatchCondition(queryTag, "123"); filter.QueryTag = queryTag; var filters = new List <QueryFilterCondition>() { filter, }; var query = new QueryExpression(QueryResource.AllStudies, includeField, false, 0, 0, filters); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm); string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagString cts1 ON cts1.StudyKey = st.StudyKey WHERE"; string expectedFilters = @"AND cts1.TagKey=@p0 AND cts1.TagValue=@p1"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter.Value.ToString(), sqlParameterCollection[1].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }
public void GivenDateTimeExtendedQueryTagFilter_WhenIELevelStudy_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.DateTime.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); var filter = new DateRangeValueMatchCondition(queryTag, DateTime.ParseExact("19510910111213.123", QueryParser.DateTimeTagValueFormats, null), DateTime.ParseExact("19571110111213.123", QueryParser.DateTimeTagValueFormats, null)); filter.QueryTag = queryTag; var filters = new List <QueryFilterCondition>() { filter, }; var query = new QueryExpression(QueryResource.AllStudies, includeField, false, 0, 0, filters, Array.Empty <string>()); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm, SqlServer.Features.Schema.SchemaVersion.V4, DefaultPartition.Key); string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagDateTime ctdt1 ON ctdt1.PartitionKey = st.PartitionKey AND ctdt1.StudyKey = st.StudyKey WHERE"; string expectedFilters = @"AND ctdt1.TagKey=@p0 AND ctdt1.TagValue BETWEEN @p1 AND @p2"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter.Minimum.ToString(SqlDateFormat), sqlParameterCollection[1].Value.ToString()); Assert.Equal(filter.Maximum.ToString(SqlDateFormat), sqlParameterCollection[2].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }
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)); }
public void GivenPatientNameFilterForExtendedQueryTag_WithFuzzyMatchMultiWord_ValidateContainsFilterGenerated() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.ConsultingPhysicianName.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); var filter = new PersonNameFuzzyMatchCondition(queryTag, "Fall 6"); filter.QueryTag = queryTag; var filters = new List <QueryFilterCondition>() { filter, }; var query = new QueryExpression(QueryResource.AllInstances, includeField, true, 10, 0, filters, Array.Empty <string>()); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm, SqlServer.Features.Schema.SchemaVersion.V4, DefaultPartition.Key); string expectedParam = $"\"Fall 6*\""; string expectedFilters = @"AND ctpn1.TagKey=@p0 AND CONTAINS(ctpn1.TagValueWords, @p1)"; Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(expectedParam, sqlParameterCollection[1].Value.ToString()); Assert.Contains(expectedFilters, stringBuilder.ToString()); }
public void GivenDoubleExtendedQueryTagFilter_WhenIELevelStudy_ValidateExtendedQueryTagFilter() { var stringBuilder = new IndentedStringBuilder(new StringBuilder()); var includeField = new QueryIncludeField(new List <DicomTag>()); var queryTag = new QueryTag(DicomTag.FloatingPointValue.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); var filter = new DoubleSingleValueMatchCondition(queryTag, 123D); filter.QueryTag = queryTag; var filters = new List <QueryFilterCondition>() { filter, }; var query = new QueryExpression(QueryResource.AllStudies, includeField, false, 0, 0, filters, Array.Empty <string>()); SqlParameterCollection sqlParameterCollection = CreateSqlParameterCollection(); var parm = new SqlQueryParameterManager(sqlParameterCollection); new SqlQueryGenerator(stringBuilder, query, parm, SqlServer.Features.Schema.SchemaVersion.V4, DefaultPartition.Key); string expectedExtendedQueryTagTableFilter = @"INNER JOIN dbo.ExtendedQueryTagDouble ctd1 ON ctd1.PartitionKey = st.PartitionKey AND ctd1.StudyKey = st.StudyKey WHERE"; string expectedFilters = @"AND ctd1.TagKey=@p0 AND ctd1.TagValue=@p1"; string builtString = stringBuilder.ToString(); Assert.Equal(queryTag.ExtendedQueryTagStoreEntry.Key.ToString(), sqlParameterCollection[0].Value.ToString()); Assert.Equal(filter.Value.ToString(), sqlParameterCollection[1].Value.ToString()); Assert.Contains(expectedExtendedQueryTagTableFilter, builtString); Assert.Contains(expectedFilters, builtString); }
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)); }
public void GivenDateTime_WithEmptyMinAndMaxInRangeMatch_Throw() { QueryTag queryTag = new QueryTag(DicomTag.DateTime.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); Assert.Throws <QueryParseException>(() => _queryParser .Parse(CreateParameters(GetSingleton("DateTime", "-"), QueryResource.AllStudies), new[] { queryTag })); }
private static QueryFilterCondition ParseDateTagValue(QueryTag queryTag, string value) { if (QueryLimit.IsValidRangeQueryTag(queryTag)) { var splitString = value.Split('-'); if (splitString.Length == 2) { string minDate = splitString[0].Trim(); string maxDate = splitString[1].Trim(); DateTime parsedMinDate = ParseDate(minDate, queryTag.GetName()); DateTime parsedMaxDate = ParseDate(maxDate, queryTag.GetName()); if (parsedMinDate > parsedMaxDate) { throw new QueryParseException(string.Format( DicomCoreResource.InvalidDateRangeValue, value, minDate, maxDate)); } return(new DateRangeValueMatchCondition(queryTag, parsedMinDate, parsedMaxDate)); } } DateTime parsedDate = ParseDate(value, queryTag.GetName()); return(new DateSingleValueMatchCondition(queryTag, parsedDate)); }
public async Task GivenExistingExtendedQueryTagIndexData_WhenDeleteExtendedQueryTag_ThenShouldDeleteIndexData() { DicomTag tag = DicomTag.DeviceSerialNumber; // Prepare index data DicomDataset dataset = Samples.CreateRandomInstanceDataset(); dataset.Add(tag, "123"); await AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { tag.BuildAddExtendedQueryTagEntry() }); ExtendedQueryTagStoreEntry storeEntry = await _extendedQueryTagStore.GetExtendedQueryTagAsync(tag.GetPath()); QueryTag queryTag = new QueryTag(storeEntry); long watermark = await _indexDataStore.BeginCreateInstanceIndexAsync(1, dataset, new QueryTag[] { queryTag }); await _indexDataStore.EndCreateInstanceIndexAsync(1, dataset, watermark, new QueryTag[] { queryTag }); var extendedQueryTagIndexData = await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataForTagKeyAsync(ExtendedQueryTagDataType.StringData, storeEntry.Key); Assert.NotEmpty(extendedQueryTagIndexData); // Delete tag await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(storeEntry.Path, storeEntry.VR); await VerifyTagNotExistAsync(storeEntry.Path); // Verify index data is removed extendedQueryTagIndexData = await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataForTagKeyAsync(ExtendedQueryTagDataType.StringData, storeEntry.Key); Assert.Empty(extendedQueryTagIndexData); }
/// <summary> /// Obtiene una implementación de una consulta que puede cambiar según la base de datos. /// </summary> /// <remarks> /// Registro de versiones: /// /// 1.0 07/08/2015 Marcos Abraham Hernández Bravo (Ada Ltda.): versión inicial. /// </remarks> /// <param name="clase">Clase mediante reflexión, que contiene el método que desea acceder a la base de datos.</param> /// <param name="nombre">Nombre de la consulta en el archivo de configuración.</param> public DynamicQuery CrearQueryDinamica(Type clase, string nombre) { QueryTag consulta = DynamicQueryManager.ObtenerConsulta(nombre, conexion.Type, clase); Query aux = null; if (consulta.Tipo == "StoreProcedure") { aux = CrearProcedimientoAlmacenado(); } else if (consulta.Tipo == "Query") { aux = CrearQuery(); } else { throw new PreparacionException(string.Format("¡El tipo de consulta {0} no es válida!", consulta.Tipo)); } DynamicQuery retorno = new DynamicQuery(this, aux.Mapeador, aux.CreadorQuery); retorno.TipoBaseDatos = conexion.Type; retorno.Nombre = nombre; retorno.Tipo = consulta.Tipo; retorno.Consulta = consulta.Consulta; return(retorno); }
public async Task GivenValidAndInvalidTagValues_WhenValidate_ThenReturnedValidTagsAndStoredFailure() { DicomTag tag1 = DicomTag.DeviceSerialNumber; DicomTag tag2 = DicomTag.DeviceID; DicomDataset ds = Samples.CreateRandomInstanceDataset(); DicomElement element1 = new DicomLongString(tag1, "testvalue1"); DicomElement element2 = new DicomLongString(tag2, "testvalue2"); ds.Add(element1); ds.Add(element2); QueryTag queryTag1 = new QueryTag(new ExtendedQueryTagStoreEntry(1, tag1.GetPath(), tag1.GetDefaultVR().Code, null, QueryTagLevel.Instance, ExtendedQueryTagStatus.Ready, QueryStatus.Enabled, 0)); QueryTag queryTag2 = new QueryTag(new ExtendedQueryTagStoreEntry(2, tag2.GetPath(), tag2.GetDefaultVR().Code, null, QueryTagLevel.Instance, ExtendedQueryTagStatus.Ready, QueryStatus.Enabled, 0)); // Throw exception when validate element1 var ex = ElementValidationExceptionFactory.CreateDateIsInvalidException("testname", "testvalue"); _minimumValidator.When(x => x.Validate(element1)) .Throw(ex); // only return querytag2 long watermark = 1; var validQueryTags = await _datasetValidator.ValidateAsync(ds, watermark, new[] { queryTag1, queryTag2 }); Assert.Single(validQueryTags); Assert.Same(queryTag2, validQueryTags.First()); // error for querytag1 is logged await _tagErrorsService.Received(1) .AddExtendedQueryTagErrorAsync(queryTag1.ExtendedQueryTagStoreEntry.Key, ex.ErrorCode, 1, Arg.Any <CancellationToken>()); }
private async Task ValidateAddNewExtendedQueryTagIndexData(QueryTagLevel level) { string studyInstanceUid = TestUidGenerator.Generate(); string seriesInstanceUid = TestUidGenerator.Generate(); string sopInstanceUid = TestUidGenerator.Generate(); DicomDataset dataset = Samples.CreateRandomInstanceDataset(studyInstanceUid, seriesInstanceUid, sopInstanceUid); DicomTag tag = DicomTag.ConversionType; string value = "SYN"; dataset.Add(tag, value); QueryTag queryTag = await AddExtendedQueryTag(tag.BuildAddExtendedQueryTagEntry(level: level)); try { long watermark = await CreateInstanceIndexAsync(dataset, new QueryTag[] { queryTag }); Instance instance = await _testHelper.GetInstanceAsync(studyInstanceUid, seriesInstanceUid, sopInstanceUid, watermark); long?seriesKey = level != QueryTagLevel.Study ? instance.SeriesKey : null; long?instanceKey = level == QueryTagLevel.Instance ? instance.InstanceKey : null; var stringRows = await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataAsync(ExtendedQueryTagDataType.StringData, queryTag.ExtendedQueryTagStoreEntry.Key, instance.StudyKey, seriesKey, instanceKey); Assert.Single(stringRows); Assert.Equal(stringRows[0].TagValue, value); Assert.Equal(stringRows[0].Watermark, watermark); } finally { await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(queryTag.ExtendedQueryTagStoreEntry.Path, queryTag.ExtendedQueryTagStoreEntry.VR); } }
public async Task GivenSeriesTag_WhenReindexWithOldInstance_ThenTagValueShouldNotBeUpdated() { DicomTag tag = DicomTag.AcquisitionDeviceProcessingCode; string tagValue1 = "test1"; string tagValue2 = "test2"; string studyUid = TestUidGenerator.Generate(); string seriesUid = TestUidGenerator.Generate(); DicomDataset dataset1 = Samples.CreateRandomInstanceDataset(studyUid, seriesUid); dataset1.Add(tag, tagValue1); DicomDataset dataset2 = Samples.CreateRandomInstanceDataset(studyUid, seriesUid); dataset2.Add(tag, tagValue2); Instance instance1 = await CreateInstanceIndexAsync(dataset1); Instance instance2 = await CreateInstanceIndexAsync(dataset2); var tagStoreEntry = await AddExtendedQueryTagAsync(tag.BuildAddExtendedQueryTagEntry(level: QueryTagLevel.Series)); QueryTag queryTag = new QueryTag(tagStoreEntry); await _indexDataStore.ReindexInstanceAsync(dataset2, instance2.Watermark, new[] { queryTag }); await _indexDataStore.ReindexInstanceAsync(dataset1, instance1.Watermark, new[] { queryTag }); var row = (await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataAsync(ExtendedQueryTagDataType.StringData, tagStoreEntry.Key, instance1.StudyKey, instance1.SeriesKey, null)).First(); Assert.Equal(tagValue2, row.TagValue); }
public void GivenNonExistingExtendedQueryStringTag_WithUrl_ParseFails() { QueryTag queryTag = new QueryTag(DicomTag.FloatingPointValue.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); Assert.Throws <QueryParseException>(() => _queryParser .Parse(CreateParameters(GetSingleton(nameof(DicomTag.ModelGroupUID), "abc"), QueryResource.AllStudies), new[] { queryTag })); }
public void GivenExtendedQueryDoubleTag_WithUrl_ParseSucceeds() { QueryTag queryTag = new QueryTag(DicomTag.FloatingPointValue.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryExpression queryExpression = _queryParser.Parse(CreateParameters(GetSingleton(nameof(DicomTag.FloatingPointValue), "1.1"), QueryResource.AllSeries), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenExtendedQueryLongTag_WithUrl_ParseSucceeds() { QueryTag queryTag = new QueryTag(DicomTag.NumberOfAssessmentObservations.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryExpression queryExpression = _queryParser.Parse(CreateParameters(GetSingleton(nameof(DicomTag.NumberOfAssessmentObservations), "50"), QueryResource.AllSeries), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenExtendedQueryStringTag_WithTagPathUrl_ParseSucceeds() { QueryTag queryTag = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryExpression queryExpression = _queryParser.Parse(CreateParameters(GetSingleton("00687004", "abc"), QueryResource.AllSeries), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenExtendedQueryLongTag_WithUrl_ParseSucceeds() { var queryString = "NumberOfAssessmentObservations=50"; QueryTag queryTag = new QueryTag(DicomTag.NumberOfAssessmentObservations.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryExpression queryExpression = _queryParser.Parse(CreateRequest(GetQueryCollection(queryString), QueryResource.AllSeries), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenExtendedQueryTimeTag_WithUrl_ParseSucceeds() { QueryTag queryTag = new QueryTag(DicomTag.Time.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); QueryExpression queryExpression = _queryParser.Parse(CreateParameters(GetSingleton("Time", "195109.10-195110.20"), QueryResource.AllStudies), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenExtendedQueryDoubleTag_WithUrl_ParseSucceeds() { var queryString = "FloatingPointValue=1.1"; QueryTag queryTag = new QueryTag(DicomTag.FloatingPointValue.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryExpression queryExpression = _queryParser.Parse(CreateRequest(GetQueryCollection(queryString), QueryResource.AllSeries), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenNonExistingExtendedQueryStringTag_WithUrl_ParseFails() { var queryString = "ModelGroupUID=abc"; QueryTag queryTag = new QueryTag(DicomTag.FloatingPointValue.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); Assert.Throws <QueryParseException>(() => _queryParser .Parse(CreateRequest(GetQueryCollection(queryString), QueryResource.AllStudies), new[] { queryTag })); }
public void GivenExtendedQueryDateTag_WithUrl_ParseSucceeds() { var queryString = "Date=19510910-20200220"; QueryTag queryTag = new QueryTag(DicomTag.Date.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Study)); QueryExpression queryExpression = _queryParser.Parse(CreateRequest(GetQueryCollection(queryString), QueryResource.AllStudies), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
private static QueryFilterCondition ParseLongTagValue(QueryTag queryTag, string value) { if (!long.TryParse(value, out long val)) { throw new QueryParseException(string.Format(DicomCoreResource.InvalidLongValue, value, queryTag.GetName())); } return(new LongSingleValueMatchCondition(queryTag, val)); }
public void GivenExtendedQueryPrivateTag_WithUrl_ParseSucceeds() { DicomTag tag = new DicomTag(0x0405, 0x1001, "PrivateCreator1"); QueryTag queryTag = new QueryTag(tag.BuildExtendedQueryTagStoreEntry(vr: DicomVRCode.CS, level: QueryTagLevel.Study)); QueryExpression queryExpression = _queryParser.Parse(CreateParameters(GetSingleton(tag.GetPath(), "Test"), QueryResource.AllStudies), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public void GivenCombinationOfExtendedQueryAndStandardTags_WithUrl_ParseSucceeds() { var queryString = "PatientName=Joe&FloatingPointValue=1.1&StudyDate=19510910-20200220&00687004=abc"; QueryTag queryTag1 = new QueryTag(DicomTag.FloatingPointValue.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryTag queryTag2 = new QueryTag(DicomTag.ModelGroupUID.BuildExtendedQueryTagStoreEntry(level: QueryTagLevel.Series)); QueryExpression queryExpression = _queryParser.Parse(CreateRequest(GetQueryCollection(queryString), QueryResource.AllSeries), QueryTagService.CoreQueryTags.Concat(new[] { queryTag1, queryTag2 }).ToList()); Assert.Equal(4, queryExpression.FilterConditions.Count); Assert.Contains(queryTag1, queryExpression.FilterConditions.Select(x => x.QueryTag)); Assert.Contains(queryTag2, queryExpression.FilterConditions.Select(x => x.QueryTag)); }
public void GivenCoreDicomTag_WhenInitialize_ThenShouldCreatedSuccessfully() { DicomTag tag = DicomTag.PatientName; QueryTag queryTag = new QueryTag(tag); Assert.Equal(tag, queryTag.Tag); Assert.Equal(DicomVR.PN, queryTag.VR); Assert.Null(queryTag.ExtendedQueryTagStoreEntry); Assert.False(queryTag.IsExtendedQueryTag); Assert.Equal(QueryTagLevel.Study, queryTag.Level); }
public void GivenExtendedQueryPrivateTag_WithUrl_ParseSucceeds() { DicomTag tag = new DicomTag(0x0405, 0x1001, "PrivateCreator1"); string value = "Test"; var queryString = $"{tag.GetPath()}={value}"; QueryTag queryTag = new QueryTag(tag.BuildExtendedQueryTagStoreEntry(vr: DicomVRCode.CS, level: QueryTagLevel.Study)); QueryExpression queryExpression = _queryParser.Parse(CreateRequest(GetQueryCollection(queryString), QueryResource.AllStudies), new[] { queryTag }); Assert.Equal(queryTag, queryExpression.FilterConditions.First().QueryTag); }
public async Task GivenExtendedQueryTags_WhenValidating_ThenExtendedQueryTagsShouldBeValidated() { DicomTag standardTag = DicomTag.DestinationAE; // AE > 16 characters is not allowed _dicomDataset.Add(standardTag, "01234567890123456"); QueryTag indextag = new QueryTag(standardTag.BuildExtendedQueryTagStoreEntry()); _queryTags.Add(indextag); await ExecuteAndValidateException <ElementValidationException>(ValidationFailedFailureCode); }