コード例 #1
0
 internal static void MergeEntityDescriptorInfo(EntityDescriptor trackedEntityDescriptor, EntityDescriptor entityDescriptorFromMaterializer, bool mergeInfo, MergeOption mergeOption)
 {
     if (!object.ReferenceEquals(trackedEntityDescriptor, entityDescriptorFromMaterializer))
     {
         if ((entityDescriptorFromMaterializer.ETag != null) && (mergeOption != MergeOption.AppendOnly))
         {
             trackedEntityDescriptor.ETag = entityDescriptorFromMaterializer.ETag;
         }
         if (mergeInfo)
         {
             if (entityDescriptorFromMaterializer.SelfLink != null)
             {
                 trackedEntityDescriptor.SelfLink = entityDescriptorFromMaterializer.SelfLink;
             }
             if (entityDescriptorFromMaterializer.EditLink != null)
             {
                 trackedEntityDescriptor.EditLink = entityDescriptorFromMaterializer.EditLink;
             }
             foreach (LinkInfo info in entityDescriptorFromMaterializer.LinkInfos)
             {
                 trackedEntityDescriptor.MergeLinkInfo(info);
             }
             foreach (StreamDescriptor descriptor in entityDescriptorFromMaterializer.StreamDescriptors)
             {
                 trackedEntityDescriptor.MergeStreamDescriptor(descriptor);
             }
             trackedEntityDescriptor.ServerTypeName = entityDescriptorFromMaterializer.ServerTypeName;
         }
         if (entityDescriptorFromMaterializer.ReadStreamUri != null)
         {
             trackedEntityDescriptor.ReadStreamUri = entityDescriptorFromMaterializer.ReadStreamUri;
         }
         if (entityDescriptorFromMaterializer.EditStreamUri != null)
         {
             trackedEntityDescriptor.EditStreamUri = entityDescriptorFromMaterializer.EditStreamUri;
         }
         if ((entityDescriptorFromMaterializer.ReadStreamUri != null) || (entityDescriptorFromMaterializer.EditStreamUri != null))
         {
             trackedEntityDescriptor.StreamETag = entityDescriptorFromMaterializer.StreamETag;
         }
     }
 }
コード例 #2
0
ファイル: AtomMaterializerLog.cs プロジェクト: nickchal/pash
 internal static void MergeEntityDescriptorInfo(EntityDescriptor trackedEntityDescriptor, EntityDescriptor entityDescriptorFromMaterializer, bool mergeInfo, MergeOption mergeOption)
 {
     if (!object.ReferenceEquals(trackedEntityDescriptor, entityDescriptorFromMaterializer))
     {
         if ((entityDescriptorFromMaterializer.ETag != null) && (mergeOption != MergeOption.AppendOnly))
         {
             trackedEntityDescriptor.ETag = entityDescriptorFromMaterializer.ETag;
         }
         if (mergeInfo)
         {
             if (entityDescriptorFromMaterializer.SelfLink != null)
             {
                 trackedEntityDescriptor.SelfLink = entityDescriptorFromMaterializer.SelfLink;
             }
             if (entityDescriptorFromMaterializer.EditLink != null)
             {
                 trackedEntityDescriptor.EditLink = entityDescriptorFromMaterializer.EditLink;
             }
             foreach (LinkInfo info in entityDescriptorFromMaterializer.LinkInfos)
             {
                 trackedEntityDescriptor.MergeLinkInfo(info);
             }
             foreach (StreamDescriptor descriptor in entityDescriptorFromMaterializer.StreamDescriptors)
             {
                 trackedEntityDescriptor.MergeStreamDescriptor(descriptor);
             }
             trackedEntityDescriptor.ServerTypeName = entityDescriptorFromMaterializer.ServerTypeName;
         }
         if (entityDescriptorFromMaterializer.ReadStreamUri != null)
         {
             trackedEntityDescriptor.ReadStreamUri = entityDescriptorFromMaterializer.ReadStreamUri;
         }
         if (entityDescriptorFromMaterializer.EditStreamUri != null)
         {
             trackedEntityDescriptor.EditStreamUri = entityDescriptorFromMaterializer.EditStreamUri;
         }
         if ((entityDescriptorFromMaterializer.ReadStreamUri != null) || (entityDescriptorFromMaterializer.EditStreamUri != null))
         {
             trackedEntityDescriptor.StreamETag = entityDescriptorFromMaterializer.StreamETag;
         }
     }
 }
コード例 #3
0
ファイル: AtomMaterializerLog.cs プロジェクト: tapika/swupd
        internal static void MergeEntityDescriptorInfo(EntityDescriptor trackedEntityDescriptor, EntityDescriptor entityDescriptorFromMaterializer, bool mergeInfo, MergeOption mergeOption)
        {
            Debug.Assert(trackedEntityDescriptor != null, "trackedEntityDescriptor != null");
            Debug.Assert(entityDescriptorFromMaterializer != null, "entityDescriptorFromMaterializer != null");

            // In this function, we need to handle 2 cases:
            //  1> Either the 2 function entity descriptors are the same, in which case
            //     we just have to convert the relative uri's into absolute uri's if any
            //  2> If the entity descriptor are not the same, then we need to update the etag
            //     If the merge option is not AppendOnly and merge all entity descriptor if specified
            if (!Object.ReferenceEquals(trackedEntityDescriptor, entityDescriptorFromMaterializer))
            {
                // Keeping the old behavior - merging etags only when the mergeOption is something other than AppendOnly
                if (entityDescriptorFromMaterializer.ETag != null && mergeOption != MergeOption.AppendOnly)
                {
                    trackedEntityDescriptor.ETag = entityDescriptorFromMaterializer.ETag;
                }

                if (mergeInfo)
                {
                    // We need to merge the rest of the metadata irrespective of the MergeOption
                    if (entityDescriptorFromMaterializer.SelfLink != null)
                    {
                        trackedEntityDescriptor.SelfLink = entityDescriptorFromMaterializer.SelfLink;
                    }

                    if (entityDescriptorFromMaterializer.EditLink != null)
                    {
                        trackedEntityDescriptor.EditLink = entityDescriptorFromMaterializer.EditLink;
                    }

                    foreach (LinkInfo linkInfo in entityDescriptorFromMaterializer.LinkInfos)
                    {
                        trackedEntityDescriptor.MergeLinkInfo(linkInfo);
                    }

                    foreach (StreamDescriptor streamInfo in entityDescriptorFromMaterializer.StreamDescriptors)
                    {
                        trackedEntityDescriptor.MergeStreamDescriptor(streamInfo);
                    }

                    trackedEntityDescriptor.ServerTypeName = entityDescriptorFromMaterializer.ServerTypeName;
                }

                // An entity might show actions conditionally based on each request, so get whatever sent by server
                // Refer Defect 1333275 : OperationDescriptor not refreshed with OverwriteChanges
                if (entityDescriptorFromMaterializer.OperationDescriptors != null)
                {
                    trackedEntityDescriptor.ClearOperationDescriptors();
                    trackedEntityDescriptor.AppendOperationalDescriptors(entityDescriptorFromMaterializer.OperationDescriptors);
                }

                // TODO: ideally, we should also merge this only based on the merge context, but since for MLE we do POST
                // and PUT as part of the same request, we need to merge it always to make the insert case of MLE work.
                // Once we fix that issue, this also should be moved within the above if statement
                if (entityDescriptorFromMaterializer.ReadStreamUri != null)
                {
                    trackedEntityDescriptor.ReadStreamUri = entityDescriptorFromMaterializer.ReadStreamUri;
                }

                if (entityDescriptorFromMaterializer.EditStreamUri != null)
                {
                    trackedEntityDescriptor.EditStreamUri = entityDescriptorFromMaterializer.EditStreamUri;
                }

                if (entityDescriptorFromMaterializer.ReadStreamUri != null || entityDescriptorFromMaterializer.EditStreamUri != null)
                {
                    trackedEntityDescriptor.StreamETag = entityDescriptorFromMaterializer.StreamETag;
                }
            }
        }