Exemple #1
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;
            LastSegmentIsRefSegment = path.LastSegment is ODataRefSegment;
            NavigationProperty      = path.OfType <ODataNavigationPropertySegment>().Last().NavigationProperty;

            NavigationPropertyPath = string.Join("/",
                                                 Path.Segments.Where(s => !(s is ODataKeySegment || s is ODataNavigationSourceSegment)).Select(e => e.Identifier));

            IEdmEntitySet entitySet = NavigationSource as IEdmEntitySet;
            IEdmSingleton singleton = NavigationSource as IEdmSingleton;

            NavigationRestrictionsType navigation;

            if (entitySet != null)
            {
                navigation = Context.Model.GetRecord <NavigationRestrictionsType>(entitySet, CapabilitiesConstants.NavigationRestrictions);
            }
            else
            {
                navigation = Context.Model.GetRecord <NavigationRestrictionsType>(singleton, CapabilitiesConstants.NavigationRestrictions);
            }

            if (navigation != null && navigation.RestrictedProperties != null)
            {
                Restriction = navigation.RestrictedProperties.FirstOrDefault(r => r.NavigationProperty != null && r.NavigationProperty == NavigationPropertyPath);
            }
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;
            LastSegmentIsRefSegment = path.LastSegment is ODataRefSegment;
            NavigationProperty      = path.OfType <ODataNavigationPropertySegment>().Last().NavigationProperty;

            IEdmEntitySet entitySet = NavigationSource as IEdmEntitySet;
            IEdmSingleton singleton = NavigationSource as IEdmSingleton;

            NavigationRestrictionsType navigation;

            if (entitySet != null)
            {
                navigation = Context.Model.GetRecord <NavigationRestrictionsType>(entitySet, CapabilitiesConstants.NavigationRestrictions);
            }
            else
            {
                navigation = Context.Model.GetRecord <NavigationRestrictionsType>(singleton, CapabilitiesConstants.NavigationRestrictions);
            }

            Restriction = navigation?.RestrictedProperties?.FirstOrDefault(r => r.NavigationProperty != null && r.NavigationProperty == Path.NavigationPropertyPath())
                          ?? Context.Model.GetRecord <NavigationRestrictionsType>(NavigationProperty, CapabilitiesConstants.NavigationRestrictions)?.RestrictedProperties?.FirstOrDefault();
        }
        public void GetPathItemNameReturnsCorrectNavigationSourceLiteralForSingleton()
        {
            // Arrange & Act
            var segment = new ODataNavigationSourceSegment(_singleton);

            // Assert
            Assert.Equal("Me", segment.GetPathItemName(new OpenApiConvertSettings()));
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            Singleton = navigationSourceSegment.NavigationSource as IEdmSingleton;
        }
        public void GetPathItemNameReturnsCorrectNavigationSourceLiteralForEntitySet()
        {
            // Arrange & Act
            var segment = new ODataNavigationSourceSegment(_entitySet);

            // Assert
            Assert.Equal("Entities", segment.GetPathItemName(new OpenApiConvertSettings()));
        }
        public void KindPropertyReturnsNavigationSourceEnumMember()
        {
            // Arrange & Act
            var segment = new ODataNavigationSourceSegment(_singleton);

            // Assert
            Assert.Equal(ODataSegmentKind.NavigationSource, segment.Kind);
        }
        public void GetEntityTypeReturnsCorrectEntityType()
        {
            // Arrange & Act
            var segment = new ODataNavigationSourceSegment(_singleton);

            // Assert
            Assert.Same(_entityType, segment.EntityType);
        }
        public void CtorSetNavigationSourceProperty()
        {
            // Arrange & Act
            var segment = new ODataNavigationSourceSegment(_entitySet);

            // Assert
            Assert.Same(_entitySet, segment.NavigationSource);
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            // get the entity set.
            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            EntitySet = navigationSourceSegment.NavigationSource as IEdmEntitySet;
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            // Base Initialize should be called at top of this method.
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            Singleton = navigationSourceSegment.NavigationSource as IEdmSingleton;
        }
        public void KindPropertyReturnsEntitySet()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_compositeKeyEntitySet);
            ODataPath path = new ODataPath(nsSegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.EntitySet, path.Kind);
        }
        public void KindPropertyReturnsEntity()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment keySegment             = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path = new ODataPath(nsSegment, keySegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.Entity, path.Kind);
        }
Exemple #13
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            NavigationProperty = path.OfType <ODataNavigationPropertySegment>().Last().NavigationProperty;
        }
        public void KindPropertyReturnsOperation()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            EdmAction             action           = new EdmAction("NS", "MyAction", null, isBound: true, entitySetPathExpression: null);
            ODataOperationSegment opSegment        = new ODataOperationSegment(action);
            ODataPath             path             = new ODataPath(nsSegment, opSegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.Operation, path.Kind);
        }
        public void KindPropertyReturnsSingleton()
        {
            // Arrange
            EdmEntityContainer           container = new EdmEntityContainer("NS", "Default");
            EdmSingleton                 me        = new EdmSingleton(container, "Me", _simpleKeyEntityType);
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(me);
            ODataPath path = new ODataPath(nsSegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.Singleton, path.Kind);
        }
Exemple #16
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            // get the entity set.
            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            EntitySet = navigationSourceSegment.NavigationSource as IEdmEntitySet;

            Request = Context.FindRequest(EntitySet, OperationType.ToString());
        }
Exemple #17
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            // The first segment could be an entity set segment or a singleton segment.
            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            EntitySet = navigationSourceSegment.NavigationSource as IEdmEntitySet;
            if (EntitySet == null)
            {
                Singleton = navigationSourceSegment.NavigationSource as IEdmSingleton;
            }
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment.Kind == ODataSegmentKind.Key;
            LastSegmentIsRefSegment = path.LastSegment.Kind == ODataSegmentKind.Ref;
            NavigationProperty      = path.OfType <ODataNavigationPropertySegment>().Last().NavigationProperty;
            _entityType             = NavigationProperty.ToEntityType();
        }
        public void ODataPathLastSegmentWorks()
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment keySegment             = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path = new ODataPath(nsSegment, keySegment);

            // Act
            var segment = path.LastSegment;

            // Assert
            Assert.Same(keySegment, segment);
        }
Exemple #20
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            // It's bound operation, the first segment must be the navigaiton source.
            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            OperationSegment = path.LastSegment as ODataOperationSegment;
            EdmOperation     = OperationSegment.Operation;

            HasTypeCast = path.Segments.Any(s => s is ODataTypeCastSegment);
        }
        /// <inheritdoc/>
        protected override void SetExtensions(OpenApiPathItem item)
        {
            if (!Context.Settings.ShowMsDosGroupPath)
            {
                return;
            }

            IList <ODataPath> samePaths = new List <ODataPath>();

            foreach (var path in Context.AllPaths.Where(p => p.Kind == ODataPathKind.NavigationProperty && p != Path))
            {
                bool lastIsKeySegment = path.LastSegment is ODataKeySegment;
                if (LastSegmentIsKeySegment != lastIsKeySegment)
                {
                    continue;
                }

                ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;
                if (NavigationSource != navigationSourceSegment.NavigationSource)
                {
                    continue;
                }

                ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;
                if (npSegment == null)
                {
                    npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
                }
                if (NavigationProperty != npSegment.NavigationProperty)
                {
                    continue;
                }

                samePaths.Add(path);
            }

            if (samePaths.Any())
            {
                OpenApiArray           array    = new OpenApiArray();
                OpenApiConvertSettings settings = Context.Settings.Clone();
                settings.EnableKeyAsSegment = Context.KeyAsSegment;
                foreach (var p in samePaths)
                {
                    array.Add(new OpenApiString(p.GetPathItemName(settings)));
                }

                item.Extensions.Add(Constants.xMsDosGroupPath, array);
            }
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;
            ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;

            if (npSegment == null)
            {
                npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
            }
            NavigationProperty = npSegment.NavigationProperty;
        }
        /// <inheritdoc/>
        protected override void SetExtensions(OpenApiPathItem item)
        {
            if (!Context.Settings.ShowMsDosGroupPath)
            {
                return;
            }

            ODataNavigationSourceSegment navigationSourceSegment = Path.FirstSegment as ODataNavigationSourceSegment;
            IEdmNavigationSource         currentNavSource        = navigationSourceSegment.NavigationSource;

            IList <ODataPath> samePaths = new List <ODataPath>();

            foreach (var path in Context.AllPaths.Where(p => p.Kind == ODataPathKind.Operation && p != Path))
            {
                navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;
                if (currentNavSource != navigationSourceSegment.NavigationSource)
                {
                    continue;
                }

                ODataOperationSegment operationSegment = path.LastSegment as ODataOperationSegment;
                if (EdmOperation.FullName() != operationSegment.Operation.FullName())
                {
                    continue;
                }

                samePaths.Add(path);
            }

            if (samePaths.Any())
            {
                OpenApiArray           array    = new OpenApiArray();
                OpenApiConvertSettings settings = Context.Settings.Clone();
                settings.EnableKeyAsSegment = Context.KeyAsSegment;
                foreach (var p in samePaths)
                {
                    array.Add(new OpenApiString(p.GetPathItemName(settings)));
                }

                item.Extensions.Add(Constants.xMsDosGroupPath, array);
            }

            base.SetExtensions(item);
            item.Extensions.AddCustomAtributesToExtensions(Context, EdmOperation);
        }
        public void GetPathItemNameReturnsCorrectWithSingleKeySegment(bool keyAsSegment, bool prefix, string expected)
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment        keySegment      = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath              path            = new ODataPath(nsSegment, keySegment);
            OpenApiConvertSettings settings        = new OpenApiConvertSettings
            {
                EnableKeyAsSegment            = keyAsSegment,
                PrefixEntityTypeNameBeforeKey = prefix
            };

            // Act
            string pathItemName = path.GetPathItemName(settings);

            // Assert
            Assert.Equal(expected, pathItemName);
        }
        public void KindPropertyReturnsNavigationProperty()
        {
            // Arrange
            EdmNavigationPropertyInfo propertyInfo = new EdmNavigationPropertyInfo
            {
                Name = "Nav",
                TargetMultiplicity = EdmMultiplicity.One,
                Target             = _compositeKeyEntityType
            };
            var property = EdmNavigationProperty.CreateNavigationProperty(_simpleKeyEntityType, propertyInfo);
            ODataNavigationPropertySegment npSegment = new ODataNavigationPropertySegment(property);
            ODataNavigationSourceSegment   nsSegment = new ODataNavigationSourceSegment(_simpleKeyEntitySet);
            ODataKeySegment keySegment = new ODataKeySegment(_simpleKeyEntityType);
            ODataPath       path       = new ODataPath(nsSegment, keySegment, npSegment);

            // Act & Assert
            Assert.Equal(ODataPathKind.NavigationProperty, path.Kind);
        }
        public void GetPathItemNameReturnsCorrectStringWithMultipleKeySegment(bool keyAsSegment, bool prefix, string expected)
        {
            // Arrange
            ODataNavigationSourceSegment nsSegment = new ODataNavigationSourceSegment(_compositeKeyEntitySet);
            ODataKeySegment        keySegment      = new ODataKeySegment(_compositeKeyEntityType);
            ODataPath              path            = new ODataPath(nsSegment, keySegment);
            OpenApiConvertSettings settings        = new OpenApiConvertSettings
            {
                EnableKeyAsSegment                 = keyAsSegment,
                PrefixEntityTypeNameBeforeKey      = prefix,
                AddSingleQuotesForStringParameters = true,
            };

            // Act
            string pathItemName = path.GetPathItemName(settings);

            // Assert
            Assert.Equal(expected, pathItemName);
        }
Exemple #27
0
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            // The first segment will either be an EntitySet navigation source or a Singleton navigation source
            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            EntitySet = navigationSourceSegment.NavigationSource as IEdmEntitySet;

            if (EntitySet == null)
            {
                Singleton = navigationSourceSegment.NavigationSource as IEdmSingleton;
            }

            // Check whether path is a navigation property path
            IsNavigationPropertyPath = Path.Segments.Contains(
                Path.Segments.Where(segment => segment is ODataNavigationPropertySegment).FirstOrDefault());

            if (IsNavigationPropertyPath)
            {
                // Initialize navigation property paths from base
                base.Initialize(context, path);
            }
        }
        /// <inheritdoc/>
        protected override void Initialize(ODataContext context, ODataPath path)
        {
            base.Initialize(context, path);

            ODataNavigationSourceSegment navigationSourceSegment = path.FirstSegment as ODataNavigationSourceSegment;

            NavigationSource = navigationSourceSegment.NavigationSource;

            LastSegmentIsKeySegment = path.LastSegment is ODataKeySegment;

            ODataNavigationPropertySegment npSegment = path.LastSegment as ODataNavigationPropertySegment;

            if (npSegment == null)
            {
                npSegment = path.Segments[path.Count - 2] as ODataNavigationPropertySegment;
            }
            NavigationProperty = npSegment.NavigationProperty;

            NavigationPropertyPath = string.Join("/",
                                                 path.Segments.OfType <ODataNavigationPropertySegment>().Select(p => p.NavigationProperty.Name));

            // So far, we haven't defined the HttpRequest for the navigation property path.
            // Request = Context.FindRequest(NavigationSource, OperationType.ToString());
        }