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(); })); }
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)); })); }
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)); })); }
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"); })); }