Esempio n. 1
0
        public IHttpActionResult Put(int id, int mappingid, [IfMatch] ETag etag, [FromBody] Mapping mapping)
        {
            return(WebHandler(() =>
            {
                IEntityMapping returnedMapping = null;

                var request = new AmendMappingRequest
                {
                    EntityId = id,
                    MappingId = mappingid,
                    Mapping = mapping,
                    Version = etag.ToVersion()
                };

                using (var scope = new TransactionScope(TransactionScopeOption.Required, WriteOptions()))
                {
                    returnedMapping = this.service.UpdateMapping(request);
                    scope.Complete();
                }

                if (returnedMapping != null)
                {
                    notificationService.Notify(() => GetContract(id, etag.ToVersion()).Contract, service.ContractVersion,
                                               Operation.Modified);
                    return new StatusCodeResultWithLocation(this.Request, HttpStatusCode.NoContent,
                                                            this.Request.RequestUri.AbsolutePath.Substring(1));
                }

                return NotFound();
            }));
        }
Esempio n. 2
0
        public IHttpActionResult Get(int id, [IfNoneMatch] ETag etag)
        {
            return(WebHandler(() =>
            {
                var request = MessageFactory.GetRequest(QueryParameters);
                request.EntityId = id;
                request.Version = etag.ToVersion();

                ContractResponse <TContract> response;

                using (var scope = new TransactionScope(TransactionScopeOption.Required, ReadOptions()))
                {
                    response = service.Request(request);
                    scope.Complete();
                }

                if (response.IsValid)
                {
                    return new ResponseWithETag <TContract>(Request, response.Contract, HttpStatusCode.OK,
                                                            response.Version);
                }

                throw new MdmFaultException(new GetRequestFaultHandler().Create(typeof(TContract).Name, response.Error,
                                                                                request));
            }));
        }
Esempio n. 3
0
        public IHttpActionResult Get([IfNoneMatch] ETag etag)
        {
            return(WebHandler(() =>
            {
                var request = MessageFactory.CrossMappingRequest(this.QueryParameters);
                request.Version = etag.ToVersion();

                ContractResponse <MappingResponse> response;
                using (var scope = new TransactionScope(TransactionScopeOption.Required, ReadOptions()))
                {
                    response = this.service.CrossMap(request);
                    scope.Complete();
                }

                if (response.IsValid)
                {
                    return new ResponseWithETag <MappingResponse>(this.Request, response.Contract, HttpStatusCode.OK,
                                                                  response.Version);
                }

                if (response.Error.Type == ErrorType.Ambiguous)
                {
                    throw new MdmFaultException(new CrossMappingAmbiguosMappingHandler().Create(
                                                    typeof(TContract).Name, response.Error, request));
                }

                throw new MdmFaultException(new CrossMappingRequestFaultHandler().Create(typeof(TContract).Name,
                                                                                         response.Error, request));
            }));
        }
Esempio n. 4
0
        public IHttpActionResult Put(int id, [IfMatch] ETag etag, [FromBody] TContract contract)
        {
            return(WebHandler(() =>
            {
                ContractResponse <TContract> response;

                using (var scope = new TransactionScope(TransactionScopeOption.Required, WriteOptions()))
                {
                    var version = etag.ToVersion();
                    response = service.Update(id, version, contract);
                    scope.Complete();
                }

                if (response.Contract != null)
                {
                    notificationService.Notify(() => response.Contract, service.ContractVersion, Operation.Modified);
                    return new StatusCodeResultWithLocation(Request, HttpStatusCode.NoContent,
                                                            Request.RequestUri.AbsolutePath.Substring(1));
                }

                return NotFound();
            }));
        }
        /// <summary>
        /// Returns all the mappings for the entity as an Atom XML feed
        /// </summary>
        /// <param name="id">The MDM identifier for the entity</param>
        /// <param name="etag">The current version held by the client</param>
        /// <returns>Response with approrpiate status code and the Atom feed as content</returns>
        public HttpResponseMessage Get(int id, [IfNoneMatch] ETag etag)
        {
            return(WebHandler(() =>
            {
                var request = MessageFactory.GetRequest(QueryParameters);
                request.EntityId = id;
                request.Version = etag.ToVersion();

                ContractResponse <TContract> response;

                using (var scope = new TransactionScope(TransactionScopeOption.Required, ReadOptions()))
                {
                    response = service.Request(request);
                    scope.Complete();
                }

                if (!response.IsValid)
                {
                    throw new MdmFaultException(new GetRequestFaultHandler().Create(typeof(TContract).Name,
                                                                                    response.Error, request));
                }

                var entityName = typeof(TContract).Name.ToLowerInvariant();
                var title = string.Format("Mappings for {0} {1} ", entityName, id);
                var feed = new FeedBuilder()
                           .WithEntityName(entityName)
                           .WithId(id.ToString())
                           .WithTitle(title)
                           .WithItemTitle("mapping")
                           .WithItems(response.Contract.Identifiers)
                           .Build();

                return Request.CreateResponse(HttpStatusCode.OK, feed, new AtomSyndicationFeedFormatter(),
                                              "application/xml");
            }));
        }