public BatchChangeSetRequestItem(ChangeSetRequestItem copy, HttpRequestMessage parentRequest)
			: base(copy.Requests)
		{
			Contract.Requires<ArgumentNullException>(parentRequest != null);

			_parentRequest = parentRequest;
			_changeSetContext = new ChangeSetContext();
		}
Beispiel #2
0
        public BatchChangeSetRequestItem(ChangeSetRequestItem copy, HttpRequestMessage parentRequest)
            : base(copy.Requests)
        {
            Contract.Requires <ArgumentNullException>(parentRequest != null);

            _parentRequest    = parentRequest;
            _changeSetContext = new ChangeSetContext();
        }
Beispiel #3
0
        public static void OnChangeSetFailure(this ODataController oDataController, Task onFailureTask)
        {
            Contract.Requires <ArgumentNullException>(oDataController != null);
            Contract.Requires <ArgumentNullException>(onFailureTask != null);

            ChangeSetContext changeSetContext = oDataController.Request.GetChangeSetContext();

            if (changeSetContext != null)
            {
                changeSetContext.AddOnChangeSetFailureTask(onFailureTask);
            }
        }
Beispiel #4
0
        public static void TrySetChangeSetContentIdEntity <TEntity>(this HttpRequestMessage request, TEntity entity)
        {
            int?requestContentId = request.ContentId();
            ChangeSetContext changeSetContext = request.GetChangeSetContext();

            if ((changeSetContext == null) ||
                (!requestContentId.HasValue))
            {
                return;
            }

            changeSetContext.AddContentIdRecord(requestContentId.Value, request, entity, typeof(TEntity));
        }
Beispiel #5
0
        /// <summary>
        /// Set the async task to call when the changeset is complete, if the current request is within a changeset.
        /// If the current request is not within a changeset, <paramref name="completionTask"/> is returned.
        /// </summary>
        /// <param name="oDataController"></param>
        /// <param name="completionTask"></param>
        //public static Task<HttpResponseMessage> OnChangeSetSuccess(this ODataController oDataController, Task<HttpResponseMessage> completionTask)
        //{
        //	Contract.Requires<ArgumentNullException>(oDataController != null);
        //	Contract.Requires<ArgumentNullException>(completionTask != null);

        //	ChangeSetContext changeSetContext = oDataController.Request.GetChangeSetContext();
        //	if (changeSetContext == null)
        //	{	// Not in a ChangeSet, so execute completionTask immediately
        //		return completionTask;
        //	}
        //	else
        //	{
        //		changeSetContext.AddOnChangeSetSuccessTask(completionTask);
        //		return new Task<HttpResponseMessage>(() => new HttpResponseMessage(HttpStatusCode.Accepted)
        //														{ Content = new StringContent("Changeset action method called; pending completion task.") });
        //	}
        //}
        public static Task OnChangeSetSuccess(this ODataController oDataController, Task completionTask)
        {
            Contract.Requires <ArgumentNullException>(oDataController != null);
            Contract.Requires <ArgumentNullException>(completionTask != null);

            ChangeSetContext changeSetContext = oDataController.Request.GetChangeSetContext();

            if (changeSetContext == null)
            {                   // Not in a ChangeSet, so return completionTask so it is executed next
                return(completionTask);
            }
            else
            {
                changeSetContext.AddOnChangeSetSuccessTask(completionTask);
                return(Task.FromResult(true));
            }
        }
Beispiel #6
0
        internal static ContentIdRecord GetReferencedContentIdEntity(HttpRequestMessage requestMessage)
        {
            Contract.Assert(requestMessage != null);

            ChangeSetContext changeSetContext  = requestMessage.GetChangeSetContext();
            string           initialRequestUri = requestMessage.GetInitialChangeSetRequestUri();
            List <int>       contentIds;

            if ((changeSetContext == null) ||
                (initialRequestUri == null) ||
                !TryExtractContentIdReferences(initialRequestUri, out contentIds))
            {
                return(null);
            }

            Contract.Assert(contentIds.Count == 1);

            int requestContentId = contentIds[0];

            return(changeSetContext.GetContentIdRecord(requestContentId));
        }
Beispiel #7
0
        public static bool ContentIdReferenceToEntity(this HttpRequestMessage request, string reference, out object referencedEntity)
        {
            referencedEntity = null;
            int contentId;

            if (!ContentIdHelper.TryParseContentIdReference(reference, out contentId))
            {
                return(false);
            }

            ChangeSetContext changeSetContext = request.GetChangeSetContext();

            if (changeSetContext != null)
            {
                ContentIdRecord contentIdRecord = changeSetContext.GetContentIdRecord(contentId);
                if (contentIdRecord != null)
                {
                    referencedEntity = contentIdRecord.Entity;
                }
            }

            return(referencedEntity != null);
        }
Beispiel #8
0
        internal static void StoreLocationHeaderForContentId(HttpResponseMessage response, ChangeSetContext changeSetContext)
        {
            int?requestContentId = response.RequestMessage.ContentId();

            if (requestContentId.HasValue)
            {
                if (response.Headers.Location != null)
                {
                    changeSetContext.GetContentIdRecord(requestContentId.Value).Location = response.Headers.Location.AbsoluteUri;
                }
            }
        }