Example #1
0
 /// <summary>Given the specified name, tries to find a service operation.</summary>
 /// <param name="name">Name of the service operation to resolve.</param>
 /// <param name="serviceOperation">Returns the resolved service operation, null if no service operation was found for the given name.</param>
 /// <returns>True if we found the service operation for the given name, false otherwise.</returns>
 public bool TryResolveServiceOperation(string name, out ServiceOperation serviceOperation)
 {
     Log.Trace(name);
     serviceOperation = serviceOperationProvider.ServiceOperations.SingleOrDefault(so => so.Name == name);
     if (serviceOperation != null)
     {
         serviceOperation.SetReadOnly();
     }
     return(serviceOperation != null);
 }
Example #2
0
        private static void RunPayloadKindTest(RequestTargetKind requestTargetKind, RequestTargetSource requestTargetSource, ResourceType targetResourceType, bool singleResult, bool isLinkUri, ODataPayloadKind expectedKind)
        {
            var segment = new SegmentInfo
            {
                TargetKind         = requestTargetKind,
                TargetSource       = requestTargetSource,
                TargetResourceType = targetResourceType,
                SingleResult       = singleResult,
                Identifier         = "Fake",
            };

            var operation = new ServiceOperation("Fake", ServiceOperationResultKind.Void, null, null, "GET", null);

            operation.SetReadOnly();
            segment.Operation         = new OperationWrapper(operation);
            segment.ProjectedProperty = new ResourceProperty("Fake", ResourcePropertyKind.Primitive, ResourceType.GetPrimitiveResourceType(typeof(int)));

            SegmentInfo[] segmentInfos;
            if (isLinkUri)
            {
                segmentInfos = new[]
                {
                    new SegmentInfo(),
                    new SegmentInfo
                    {
                        TargetKind = RequestTargetKind.Link,
                    },
                    segment
                };
            }
            else
            {
                segmentInfos = new[]
                {
                    new SegmentInfo
                    {
                        Identifier = "Fake",
                    },
                    new SegmentInfo(),
                    segment
                };
            }

            var requestDescription = new RequestDescription(segmentInfos, new Uri("http://temp.org/"));

            requestDescription.ResponsePayloadKind.Should().Be(expectedKind);
        }
        /// <summary>
        /// Adds a new service operation.
        /// </summary>
        /// <param name="name">The name of the service operation.</param>
        /// <param name="resultKind">The kind of service operation.</param>
        /// <param name="resultType">The type of service operation.</param>
        /// <param name="resultSet">Information about the resource.</param>
        /// <param name="method">The method of the service operation.</param>
        /// <param name="parameters">Parameters for the service operation.</param>
        /// <returns>The newly added service operation.</returns>
        public ServiceOperation AddServiceOperation(string name, ServiceOperationResultKind resultKind, ResourceType resultType, ResourceSet resultSet,
                                                    string method, IEnumerable <ServiceOperationParameter> parameters)
        {
            ServiceOperation serviceOperation = new ServiceOperation(name, resultKind, resultType, resultSet, method, parameters);

            serviceOperation.SetReadOnly();
            readerWriterLock.EnterWriteLock();
            try
            {
                this.serviceOperations.Add(name, serviceOperation);
            }
            finally
            {
                readerWriterLock.ExitWriteLock();
            }
            return(serviceOperation);
        }
Example #4
0
        public void DataServiceProviderWrapperShouldFailOnMultipleServiceOperationsWithSameName()
        {
            ResourceType stringType          = ResourceType.GetPrimitiveResourceType(typeof(string));
            var          duplicateOperation1 = new ServiceOperation("Duplicate", ServiceOperationResultKind.DirectValue, stringType, null, "GET", new[] { new ServiceOperationParameter("p1", stringType) });

            duplicateOperation1.SetReadOnly();
            var duplicateOpration2 = new ServiceOperation("Duplicate", ServiceOperationResultKind.DirectValue, ResourceType.GetPrimitiveResourceType(typeof(int)), null, "GET", new ServiceOperationParameter[0]);

            duplicateOpration2.SetReadOnly();

            var providerWrapper = CreateProviderWrapper(addMetadata: p =>
            {
                p.AddServiceOp(duplicateOperation1);
                p.AddServiceOp(duplicateOpration2);
            });

            Action getVisibleOperations = () => providerWrapper.GetVisibleOperations().ToList();

            getVisibleOperations.ShouldThrow <DataServiceException>()
            .WithMessage(ErrorStrings.DataServiceProviderWrapper_MultipleServiceOperationsWithSameName("Duplicate"))
            .And.StatusCode.Should().Be(500);
        }