Exemplo n.º 1
0
        /// <summary>
        /// Visits an entry item.
        /// </summary>
        /// <param name="entry">The entry to visit.</param>
        protected virtual void VisitEntry(ODataResource entry)
        {
            if (entry.MediaResource != null)
            {
                this.Visit(entry.MediaResource);
            }

            if (entry.Actions != null)
            {
                foreach (var action in entry.Actions)
                {
                    this.VisitODataOperation(action);
                }
            }

            if (entry.Functions != null)
            {
                foreach (var function in entry.Functions)
                {
                    this.VisitODataOperation(function);
                }
            }

            entry.ProcessPropertiesPreservingPayloadOrder(
                property => this.VisitProperty(property),
                navigationLink => this.VisitNavigationLink(navigationLink));
        }
Exemplo n.º 2
0
            /// <summary>
            /// Visits an entry item.
            /// </summary>
            /// <param name="entry">The entry to visit.</param>
            protected override ODataPayloadElement VisitEntry(ODataResource entry)
            {
                ExceptionUtilities.CheckArgumentNotNull(entry, "entry");

                EntityInstance entity = new EntityInstance(entry.TypeName, false);

                if (this.payloadContainsIdentityMetadata)
                {
                    entity.Id = entry.Id == null ? null : entry.Id.OriginalString;

                    if (entry.ReadLink != null)
                    {
                        entity.WithSelfLink(entry.ReadLink.OriginalString);
                    }

                    if (entry.EditLink != null)
                    {
                        entity.WithEditLink(entry.EditLink.OriginalString);
                    }
                }

                if (this.payloadContainsEtagPropertiesForType(entry.TypeName))
                {
                    entity.ETag = entry.ETag;
                }

                ODataStreamReferenceValue mediaResource = entry.MediaResource;

                if (mediaResource != null)
                {
                    entity = entity.AsMediaLinkEntry();
                    NamedStreamInstance namedStreamInstance = (NamedStreamInstance)this.Visit(mediaResource);
                    entity.StreamETag        = namedStreamInstance.ETag;
                    entity.StreamSourceLink  = namedStreamInstance.SourceLink;
                    entity.StreamEditLink    = namedStreamInstance.EditLink;
                    entity.StreamContentType = namedStreamInstance.SourceLinkContentType ?? namedStreamInstance.EditLinkContentType;

                    foreach (var namedStreamAtomLinkMetadataAnnotation in namedStreamInstance.Annotations.OfType <NamedStreamAtomLinkMetadataAnnotation>())
                    {
                        entity.AddAnnotation(namedStreamAtomLinkMetadataAnnotation);
                    }
                }

                // convert properties and navigation links
                entry.ProcessPropertiesPreservingPayloadOrder(
                    property => entity.Add((PropertyInstance)this.Visit(property)),
                    navigationLink => entity.Add((PropertyInstance)this.Visit(navigationLink)));

                var actions = entry.Actions;

                if (actions != null)
                {
                    foreach (var operation in actions)
                    {
                        var serviceOperationDescriptor = this.Visit(operation) as ServiceOperationDescriptor;
                        entity.Add(serviceOperationDescriptor);
                    }
                }

                var functions = entry.Functions;

                if (functions != null)
                {
                    foreach (var operation in functions)
                    {
                        var serviceOperationDescriptor = this.Visit(operation) as ServiceOperationDescriptor;
                        entity.Add(serviceOperationDescriptor);
                    }
                }

                this.ConvertSerializationTypeNameAnnotation(entry, entity);

                return(entity);
            }