Ejemplo n.º 1
0
        public async override Task OnActionExecutionAsync(ActionExecutingContext context, ActionExecutionDelegate next)
        {
            EnsureArg.IsNotNull(context, nameof(context));
            IDicomRequestContext dicomRequestContext = _dicomRequestContextAccessor.RequestContext;
            RouteData            routeData           = context.RouteData;
            var routeName = context.ActionDescriptor?.AttributeRouteInfo?.Name;

            var routeContainsPartition = routeData.Values.TryGetValue(KnownActionParameterNames.PartitionName, out object value);

            if (!_isPartitionEnabled && routeContainsPartition)
            {
                throw new DataPartitionsFeatureDisabledException();
            }

            if (_isPartitionEnabled && !routeContainsPartition)
            {
                throw new DataPartitionsMissingPartitionException();
            }

            if (_isPartitionEnabled)
            {
                var partitionName = value?.ToString();

                PartitionNameValidator.Validate(partitionName);

                var partitionResponse = await _mediator.GetPartitionAsync(partitionName);

                if (partitionResponse?.PartitionEntry != null)
                {
                    dicomRequestContext.DataPartitionEntry = partitionResponse.PartitionEntry;
                }
                // Only for STOW, we create partition based on the request.
                // For all other requests, we validate whether it exists and process based on the result
                else if (_storeRouteNames.Contains(routeName))
                {
                    var response = await _mediator.AddPartitionAsync(partitionName);

                    dicomRequestContext.DataPartitionEntry = response.PartitionEntry;
                }
                else
                {
                    throw new DataPartitionsNotFoundException(partitionName);
                }
            }

            await base.OnActionExecutionAsync(context, next);
        }
Ejemplo n.º 2
0
 [InlineData("0123456789012345678901234567890123456789012345678901234567890123456789")] // value is too long
 public void GivenInValidPartitionId_WhenValidating_ThenShoulFail(string value)
 {
     Assert.Throws <InvalidPartitionNameException>(() => PartitionNameValidator.Validate(value));
 }
Ejemplo n.º 3
0
 public void GivenValidPartitionId_WhenValidating_ThenShouldPass(string value)
 {
     PartitionNameValidator.Validate(value);
 }