Ejemplo n.º 1
0
        public async Task GivenMaxTagKeyNotMatch_WhenCreateIndex_ThenShouldThrowException()
        {
            AddExtendedQueryTagEntry extendedQueryTagEntry = DicomTag.PatientAge.BuildAddExtendedQueryTagEntry();
            var          tagEntry = (await _extendedQueryTagStore.AddExtendedQueryTagsAsync(new[] { extendedQueryTagEntry }, maxAllowedCount: 128, ready: true))[0];
            DicomDataset dataset  = Samples.CreateRandomInstanceDataset();

            // Add a new tag
            await _extendedQueryTagStore.AddExtendedQueryTagsAsync(new[] { DicomTag.PatientName.BuildAddExtendedQueryTagEntry() }, maxAllowedCount : 128, ready : true);

            var  queryTags = new[] { new QueryTag(tagEntry) };
            long watermark = await _indexDataStore.BeginCreateInstanceIndexAsync(DefaultPartition.Key, dataset, queryTags);

            await Assert.ThrowsAsync <ExtendedQueryTagsOutOfDateException>(
                () => _indexDataStore.EndCreateInstanceIndexAsync(DefaultPartition.Key, dataset, watermark, queryTags));
        }
        private async Task <int> AddTagAsync(DicomTag tag)
        {
            AddExtendedQueryTagEntry extendedQueryTagEntry = tag.BuildAddExtendedQueryTagEntry();
            var list = await _extendedQueryTagStore.AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry }, 128);

            return(list[0].Key);
        }
Ejemplo n.º 3
0
        public async Task <AddExtendedQueryTagResponse> AddExtendedQueryTagAsync(IEnumerable <AddExtendedQueryTagEntry> extendedQueryTags, CancellationToken cancellationToken)
        {
            _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(extendedQueryTags);

            IEnumerable <AddExtendedQueryTagEntry> result = extendedQueryTags.Select(item => item.Normalize());

            await _extendedQueryTagStore.AddExtendedQueryTagsAsync(result, cancellationToken);

            // Current solution is synchronous, no job uri is generated, so always return blank response.
            return(new AddExtendedQueryTagResponse());
        }
Ejemplo n.º 4
0
        public async Task GivenValidExtendedQueryTags_WhenAddExtendedQueryTag_ThenTagShouldBeAdded()
        {
            DicomTag tag1 = DicomTag.DeviceSerialNumber;
            DicomTag tag2 = new DicomTag(0x0405, 0x1001, "PrivateCreator1");
            AddExtendedQueryTagEntry extendedQueryTagEntry1 = tag1.BuildAddExtendedQueryTagEntry();
            AddExtendedQueryTagEntry extendedQueryTagEntry2 = tag2.BuildAddExtendedQueryTagEntry(vr: DicomVRCode.CS);
            await _extendedQueryTagStore.AddExtendedQueryTagsAsync(new AddExtendedQueryTagEntry[] { extendedQueryTagEntry1, extendedQueryTagEntry2 });

            try
            {
                await VerifyTagIsAdded(extendedQueryTagEntry1);
                await VerifyTagIsAdded(extendedQueryTagEntry2);
            }
            finally
            {
                // Delete extended query tag
                await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(extendedQueryTagEntry1.Path, extendedQueryTagEntry1.VR);

                await _extendedQueryTagStore.DeleteExtendedQueryTagAsync(extendedQueryTagEntry2.Path, extendedQueryTagEntry2.VR);
            }
        }
Ejemplo n.º 5
0
        private async Task <IReadOnlyList <int> > AddExtendedQueryTagsAsync(
            IReadOnlyCollection <AddExtendedQueryTagEntry> extendedQueryTagEntries,
            int maxAllowedCount = 128,
            bool ready          = true,
            CancellationToken cancellationToken = default)
        {
            IReadOnlyList <ExtendedQueryTagStoreEntry> tags = await _extendedQueryTagStore.AddExtendedQueryTagsAsync(
                extendedQueryTagEntries,
                maxAllowedCount,
                ready : ready,
                cancellationToken : cancellationToken);

            return(tags.Select(x => x.Key).ToList());
        }
        public async Task <AddExtendedQueryTagResponse> AddExtendedQueryTagsAsync(
            IEnumerable <AddExtendedQueryTagEntry> extendedQueryTags,
            CancellationToken cancellationToken = default)
        {
            _extendedQueryTagEntryValidator.ValidateExtendedQueryTags(extendedQueryTags);
            var normalized = extendedQueryTags
                             .Select(item => item.Normalize())
                             .ToList();

            // Add the extended query tags to the DB
            IReadOnlyList <ExtendedQueryTagStoreEntry> added = await _extendedQueryTagStore.AddExtendedQueryTagsAsync(
                normalized,
                _maxAllowedCount,
                ready : false,
                cancellationToken : cancellationToken);

            // Start re-indexing
            Guid operationId = await _client.StartReindexingInstancesAsync(added.Select(x => x.Key).ToList(), cancellationToken);

            return(new AddExtendedQueryTagResponse(new OperationReference(operationId, _uriResolver.ResolveOperationStatusUri(operationId))));
        }