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 ExtendedQueryTagFilterDetails(int tagKey, QueryTagLevel tagLevel, DicomVR vr, DicomTag tag) { Key = tagKey; VR = vr; Level = tagLevel; Tag = tag; }
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 GivenStringToken_WhenReadingJson_ThenReturnEnum(string name, QueryTagLevel expected) { var jsonReader = new Utf8JsonReader(Encoding.UTF8.GetBytes("\"" + name + "\"")); Assert.True(jsonReader.Read()); QueryTagLevel actual = new StrictStringEnumConverter <QueryTagLevel>().Read(ref jsonReader, typeof(QueryTagLevel), DefaultOptions); Assert.Equal(expected, actual); }
public ExtendedQueryTagStoreEntry(int key, string path, string vr, string privateCreator, QueryTagLevel level, ExtendedQueryTagStatus status) { Key = key; Path = path; VR = vr; PrivateCreator = privateCreator; Level = level; Status = status; }
public void GivenValidJson_WhenReadingJson_ThenReturnParsedValue(string name, QueryTagLevel expected, bool nullable) { var jsonReader = new Utf8JsonReader(Encoding.UTF8.GetBytes($"{{ \"Level\": \"{name}\" }}")); QueryTagLevel actual = nullable ? JsonSerializer.Deserialize <NullableExample>(ref jsonReader, _defaultOptions).Level.GetValueOrDefault() : JsonSerializer.Deserialize <Example>(ref jsonReader, _defaultOptions).Level; Assert.Equal(expected, actual); }
public void GivenEnumValue_WhenWritingJson_ThenWriteName(QueryTagLevel value, string expected, bool nullable) { string actual = nullable ? JsonSerializer.Serialize(new NullableExample { Level = value }, _defaultOptions) : JsonSerializer.Serialize(new Example { Level = value }, _defaultOptions); Assert.Equal($"{{\"Level\":{expected}}}", actual); }
public void GivenStandardExtendedQueryTag_WhenInitialize_ThenShouldCreatedSuccessfully() { DicomTag tag = DicomTag.AcquisitionDate; QueryTagLevel level = QueryTagLevel.Series; var storeEntry = tag.BuildExtendedQueryTagStoreEntry(level: level); QueryTag queryTag = new QueryTag(storeEntry); Assert.Equal(tag, queryTag.Tag); Assert.Equal(DicomVR.DA, queryTag.VR); Assert.Equal(storeEntry, queryTag.ExtendedQueryTagStoreEntry); Assert.True(queryTag.IsExtendedQueryTag); Assert.Equal(level, queryTag.Level); }
public void GivenEnumValue_WhenWritingJson_ThenWriteName(QueryTagLevel value, string expected) { using var buffer = new MemoryStream(); var jsonWriter = new Utf8JsonWriter(buffer); new StrictStringEnumConverter <QueryTagLevel>().Write(jsonWriter, value, DefaultOptions); jsonWriter.Flush(); buffer.Seek(0, SeekOrigin.Begin); using var reader = new StreamReader(buffer, Encoding.UTF8); Assert.Equal(expected, reader.ReadToEnd()); }
private async Task ValidateUpdateExistingExtendedQueryTagIndexData(QueryTagLevel level) { if (level == QueryTagLevel.Instance) { throw new System.ArgumentException("Update value on instance level is not valid case."); } 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 { // index extended query tags await CreateInstanceIndexAsync(dataset, new QueryTag[] { queryTag }); // update value = "NEWSYN"; dataset.AddOrUpdate(tag, value); sopInstanceUid = TestUidGenerator.Generate(); dataset.AddOrUpdate(DicomTag.SOPInstanceUID, sopInstanceUid); if (level == QueryTagLevel.Study) { seriesInstanceUid = TestUidGenerator.Generate(); dataset.AddOrUpdate(DicomTag.SeriesInstanceUID, seriesInstanceUid); } // index new instance 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; var stringRows = await _extendedQueryTagStoreTestHelper.GetExtendedQueryTagDataAsync(ExtendedQueryTagDataType.StringData, queryTag.ExtendedQueryTagStoreEntry.Key, instance.StudyKey, seriesKey); 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 void GivenPrivateExtendedQueryTag_WhenInitialize_ThenShouldCreatedSuccessfully() { DicomTag tag = new DicomTag(0x1205, 0x1003, "PrivateCreator1"); DicomVR vr = DicomVR.CS; QueryTagLevel level = QueryTagLevel.Study; var storeEntry = tag.BuildExtendedQueryTagStoreEntry(vr: vr.ToString(), privateCreator: tag.PrivateCreator.Creator, level: level); QueryTag queryTag = new QueryTag(storeEntry); Assert.Equal(tag, queryTag.Tag); Assert.Equal(vr, queryTag.VR); Assert.Equal(storeEntry, queryTag.ExtendedQueryTagStoreEntry); Assert.True(queryTag.IsExtendedQueryTag); Assert.Equal(level, queryTag.Level); }
public ExtendedQueryTagStoreJoinEntry( int key, string path, string vr, string privateCreator, QueryTagLevel level, ExtendedQueryTagStatus status, QueryStatus queryStatus, int errorCount, Guid?operationId = null) : base(key, path, vr, privateCreator, level, status, queryStatus, errorCount) { OperationId = operationId; }
private async Task <IReadOnlyList <QueryTag> > StoreTagsOfSuportedDataTypes() { // Store 5 tags, 1 study level datetime tag, 2 series level string and double tags and 2 instance level long and person name tags. QueryTagLevel study = QueryTagLevel.Study; QueryTagLevel series = QueryTagLevel.Series; QueryTagLevel instance = QueryTagLevel.Instance; return(await AddExtendedQueryTags(new List <AddExtendedQueryTagEntry> { DicomTag.AcquisitionDate.BuildAddExtendedQueryTagEntry(level: study), DicomTag.ConversionType.BuildAddExtendedQueryTagEntry(level: series), DicomTag.DopplerCorrectionAngle.BuildAddExtendedQueryTagEntry(level: series), DicomTag.ReferencePixelX0.BuildAddExtendedQueryTagEntry(level: instance), DicomTag.DistributionNameRETIRED.BuildAddExtendedQueryTagEntry(level: instance), })); }
private static GetExtendedQueryTagEntry CreateExtendedQueryTagEntry(string path, string vr, string privateCreator, QueryTagLevel level = QueryTagLevel.Instance, ExtendedQueryTagStatus status = ExtendedQueryTagStatus.Ready) { return(new GetExtendedQueryTagEntry { Path = path, VR = vr, PrivateCreator = privateCreator, Level = level, Status = status }); }
public ExtendedQueryTagStoreEntry(int key, string path, string vr, string privateCreator, QueryTagLevel level, ExtendedQueryTagStatus status, QueryStatus queryStatus, int errorCount) { Key = key; Path = EnsureArg.IsNotNullOrWhiteSpace(path); VR = EnsureArg.IsNotNullOrWhiteSpace(vr); PrivateCreator = privateCreator; Level = EnsureArg.EnumIsDefined(level); Status = EnsureArg.EnumIsDefined(status); QueryStatus = EnsureArg.EnumIsDefined(queryStatus); ErrorCount = EnsureArg.IsGte(errorCount, 0, nameof(errorCount)); }
[InlineData("\"0\"", QueryTagLevel.Instance)] // string number -- Enum.TryParse support this by default. public void GivenValidEnumString_WhenRead_ThenShouldReturnExpectedValue(string value, QueryTagLevel expected) { Assert.Equal(expected, JsonSerializer.Deserialize(value, typeof(QueryTagLevel), _options)); }
private static AddExtendedQueryTagEntry CreateExtendedQueryTagEntry(string path, string vr, string privateCreator, QueryTagLevel level = QueryTagLevel.Instance) { return(new AddExtendedQueryTagEntry { Path = path, VR = vr, PrivateCreator = privateCreator, Level = level.ToString() }); }
public static ExtendedQueryTagStoreEntry BuildExtendedQueryTagStoreEntry(this DicomTag tag, int key = 1, string vr = null, string privateCreator = null, QueryTagLevel level = QueryTagLevel.Series, ExtendedQueryTagStatus status = ExtendedQueryTagStatus.Ready) { return(new ExtendedQueryTagStoreEntry(key: key, path: tag.GetPath(), vr: vr ?? tag.GetDefaultVR().Code, privateCreator: privateCreator, level: level, status: status)); }
public static GetExtendedQueryTagEntry BuildGetExtendedQueryTagEntry(this DicomTag tag, string vr = null, string privateCreator = null, QueryTagLevel level = QueryTagLevel.Series, ExtendedQueryTagStatus status = ExtendedQueryTagStatus.Ready) { return(new GetExtendedQueryTagEntry { Path = tag.GetPath(), VR = vr ?? tag.GetDefaultVR()?.Code, PrivateCreator = privateCreator, Level = level, Status = status }); }
public static AddExtendedQueryTagEntry BuildAddExtendedQueryTagEntry(this DicomTag tag, string vr = null, string privateCreator = null, QueryTagLevel level = QueryTagLevel.Series) { return(new AddExtendedQueryTagEntry { Path = tag.GetPath(), VR = vr ?? tag.GetDefaultVR()?.Code, PrivateCreator = privateCreator, Level = level.ToString() }); }