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);
            }
        }
Exemplo n.º 2
0
 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);
        }
Exemplo n.º 8
0
        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);
            }
        }
Exemplo n.º 11
0
        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);
        }
Exemplo n.º 12
0
 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),
            }));
        }
Exemplo n.º 14
0
 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));
 }
Exemplo n.º 17
0
 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()
     });
 }
Exemplo n.º 18
0
 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));
 }
Exemplo n.º 19
0
 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
     });
 }
Exemplo n.º 20
0
 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()
     });
 }