public void NonEntityTypeIsPassedThrough()
        {
            IEdmType     nonEntityType = ModelBuildingHelpers.BuildValidComplexType();
            ValueSegment segment       = new ValueSegment(nonEntityType);

            Assert.Same(nonEntityType, segment.EdmType);
        }
        /// <summary>
        /// Handle a ValueSegment
        /// </summary>
        /// <param name="segment">the segment to handle</param>
        public override void Handle(ValueSegment segment)
        {
            Contract.Assert(segment != null);

            NavigationSource = null;
            _path.Add(ODataSegmentKinds.Value);
        }
Example #3
0
        public void NonEntityTypeIsPassedThrough()
        {
            IEdmType     nonEntityType = ModelBuildingHelpers.BuildValidComplexType();
            ValueSegment segment       = new ValueSegment(nonEntityType);

            segment.EdmType.Should().BeSameAs(nonEntityType);
        }
 public void EqualityIsCorrect()
 {
     IEdmEntityType entityType = ModelBuildingHelpers.BuildValidEntityType();
     ValueSegment segment1 = new ValueSegment(entityType);
     ValueSegment segment2 = new ValueSegment(entityType);
     segment1.Equals(segment2).Should().BeTrue();
 }
Example #5
0
 public async Task VisitAsync(ODataPath path)
 {
     NotFound       = false;
     BadRequest     = false;
     Result         = null;
     ResultType     = null;
     PropertySetter = null;
     Index          = 0;
     foreach (var segment in path)
     {
         await(segment switch
         {
             TypeSegment typeSegment => VisitAsync(typeSegment),
             NavigationPropertySegment navigationPropertySegment => VisitAsync(navigationPropertySegment),
             EntitySetSegment entitySetSegment => VisitAsync(entitySetSegment),
             SingletonSegment singletonSegment => VisitAsync(singletonSegment),
             KeySegment keySegment => VisitAsync(keySegment),
             PropertySegment propertySegment => VisitAsync(propertySegment),
             AnnotationSegment annotationSegment => VisitAsync(annotationSegment),
             OperationImportSegment operationImportSegment => VisitAsync(operationImportSegment),
             OperationSegment operationSegment => VisitAsync(operationSegment),
             DynamicPathSegment dynamicPathSegment => VisitAsync(dynamicPathSegment),
             CountSegment countSegment => VisitAsync(countSegment),
             FilterSegment filterSegment => VisitAsync(filterSegment),
             ReferenceSegment referenceSegment => VisitAsync(referenceSegment),
             EachSegment eachSegment => VisitAsync(eachSegment),
             NavigationPropertyLinkSegment navigationPropertyLinkSegment => VisitAsync(navigationPropertyLinkSegment),
             ValueSegment valueSegment => VisitAsync(valueSegment),
             BatchSegment batchSegment => VisitAsync(batchSegment),
             BatchReferenceSegment batchReferenceSegment => VisitAsync(batchReferenceSegment),
             MetadataSegment metadataSegment => VisitAsync(metadataSegment),
             PathTemplateSegment pathTemplateSegment => VisitAsync(pathTemplateSegment),
             _ => throw new NotSupportedException()
         });
        public void EqualityIsCorrect()
        {
            IEdmEntityType entityType = ModelBuildingHelpers.BuildValidEntityType();
            ValueSegment   segment1   = new ValueSegment(entityType);
            ValueSegment   segment2   = new ValueSegment(entityType);

            Assert.True(segment1.Equals(segment2));
        }
Example #7
0
        /// <summary>
        /// Handle a ValueSegment
        /// </summary>
        /// <param name="segment">the segment to handle</param>
        public override void Handle(ValueSegment segment)
        {
            // do nothing for the navigation source for $value.
            // It means to use the previous the navigation source

            _pathTemplate.Add(ODataSegmentKinds.Value); // $value
            _pathUriLiteral.Add(ODataSegmentKinds.Value);
        }
Example #8
0
        /// <summary>
        /// Handle a ValueSegment
        /// </summary>
        /// <param name="segment">the segment to handle</param>
        public override void Handle(ValueSegment segment)
        {
            // do nothing for the navigation source for $value.
            // It means to use the previous the navigation source
            Contract.Assert(segment != null);

            _pathUriLiteral.Add(ODataSegmentKinds.Value);
        }
 public void InequalityIsCorrect()
 {
     ValueSegment segment1 = new ValueSegment(ModelBuildingHelpers.BuildValidEntityType());
     ValueSegment segment2 = new ValueSegment(ModelBuildingHelpers.BuildValidComplexType());
     BatchSegment segment3 = BatchSegment.Instance;
     segment1.Equals(segment2).Should().BeFalse();
     segment1.Equals(segment3).Should().BeFalse();
 }
Example #10
0
        public void UpdateView(double timestart, double timeend)
        {
            StreamReader fin = new StreamReader("simulog.log");

            while (!fin.EndOfStream)
            {
                string            text = fin.ReadLine();
                string[]          args = text.Split(' ');
                string            name = args[0];
                int               time = int.Parse(args[1]);
                ValueSegment      vs = null, vsp = null;
                SimulateDataModel sdmodel = vddict[name];
                switch (sdmodel.Type)
                {
                case "BIT":
                    vs       = new BitSegment();
                    vs.Value = Int32.Parse(args[2]);
                    break;

                case "WORD":
                    vs       = new WordSegment();
                    vs.Value = Int32.Parse(args[2]);
                    break;

                case "DWORD":
                    vs       = new DWordSegment();
                    vs.Value = Int64.Parse(args[2]);
                    break;

                case "FLOAT":
                    vs       = new FloatSegment();
                    vs.Value = float.Parse(args[2]);
                    break;
                }
                if (sdmodel.Values.Count() == 0)
                {
                    vsp           = vs.Clone();
                    vsp.Value     = 0;
                    vsp.TimeStart = (int)(timestart);
                    vs.TimeStart  = vsp.TimeEnd = time;
                    sdmodel.Add(vsp);
                    sdmodel.Add(vs);
                }
                else
                {
                    vsp          = sdmodel.Values.Last();
                    vs.TimeStart = vsp.TimeEnd = time;
                    sdmodel.Add(vs);
                }
            }
            foreach (SimulateDataModel sdmodel in vddict.Values)
            {
                if (sdmodel.Values.Count() > 0)
                {
                    sdmodel.Values.Last().TimeEnd = (int)(timeend);
                }
            }
        }
Example #11
0
        public static string ToUriLiteral(this ValueSegment segment)
        {
            if (segment == null)
            {
                throw Error.ArgumentNull("segment");
            }

            return(ODataSegmentKinds.Value);
        }
Example #12
0
        public void TranslateWithValueSegmentReturnsThrows()
        {
            IsCollectionTranslator translator = new IsCollectionTranslator();
            var segment = new ValueSegment(ModelBuildingHelpers.BuildValidEntityType());

            Action translateAction = () => translator.Translate(segment);

            translateAction.Throws <NotImplementedException>(segment.ToString());
        }
        public void InequalityIsCorrect()
        {
            ValueSegment segment1 = new ValueSegment(ModelBuildingHelpers.BuildValidEntityType());
            ValueSegment segment2 = new ValueSegment(ModelBuildingHelpers.BuildValidComplexType());
            BatchSegment segment3 = BatchSegment.Instance;

            Assert.False(segment1.Equals(segment2));
            Assert.False(segment1.Equals(segment3));
        }
        private void ProcessValue(StringBuilder sb, ValueSegment segment, QueryBuildInfo buildInfo)
        {
            sb.Append("?");

            var param = new QueryExecParam();

            param.Index = buildInfo.ExecInfo.Params.Count;
            param.Type  = segment.Type;
            param.Value = segment.Values[0];
            buildInfo.ExecInfo.Params.Add(param);
        }
Example #15
0
        public void ODataPathSegmentHandler_Handles_ValueSegment()
        {
            // Arrange
            ODataPathSegmentHandler handler = new ODataPathSegmentHandler();
            IEdmType     intType            = EdmCoreModel.Instance.GetInt32(false).Definition;
            ValueSegment segment            = new ValueSegment(intType);

            // Act
            handler.Handle(segment);

            // Assert
            Assert.Equal("$value", handler.PathLiteral);
            Assert.Null(handler.NavigationSource);
        }
Example #16
0
        public void Translate_ValueSegment_To_ValuePathSegment_Works()
        {
            // Arrange
            IEdmEntityType entityType = _model.FindDeclaredType("System.Web.OData.Routing.RoutingCustomer") as IEdmEntityType;
            ValueSegment   segment    = new ValueSegment(entityType);

            // Act
            IEnumerable <ODataPathSegment> segments = _translator.Translate(segment);

            // Assert
            ODataPathSegment pathSegment = Assert.Single(segments);

            Assert.IsType <ValuePathSegment>(pathSegment);
        }
Example #17
0
        public override void Handle(ValueSegment segment)
        {
            this.ThrowIfResolved();

            this.NavigationSource = null;
            this.Type             = segment.EdmType;
            this.ElementType      = this.GetElementType(this.Type);

            this.IsRawValue = true;

            this.childSegments.Add(segment);

            this.canonicalSegments.Add(segment);
        }
Example #18
0
        /// <summary>
        /// Translate ValueSegment to linq expression.
        /// </summary>
        /// <param name="segment">The ValueSegment</param>
        /// <returns>The linq expression</returns>
        public override Expression Translate(ValueSegment segment)
        {
            // The last segment could be one of the following types
            //  1. PropertySegment type: query a property
            //  2. KeySegment type: query a stream. E.g. Photo(1)/$value
            //  3. NavigationPropertySegment: People('someone')/Photo/$value
            if (this.LastProcessedSegment is PropertySegment || this.LastProcessedSegment is KeySegment || this.LastProcessedSegment is NavigationPropertySegment)
            {
                this.LastProcessedSegment = segment;
                return(this.ResultExpression);
            }

            throw new InvalidOperationException("Unsupported URI segment before ValueSegment");
        }
Example #19
0
        public void ODataPathSegmentToTemplateHandler_Handles_Value()
        {
            // Arrange
            ODataPathSegmentToTemplateHandler handler = new ODataPathSegmentToTemplateHandler(null);
            IEdmType     intType = EdmCoreModel.Instance.GetInt32(false).Definition;
            ValueSegment segment = new ValueSegment(intType);

            // Act
            handler.Handle(segment);

            // Assert
            ODataSegmentTemplate segmentTemplate = Assert.Single(handler.Templates);

            Assert.IsType <ValueSegmentTemplate>(segmentTemplate);
        }
        public void TranslateValueTemplateReturnsAsExpected(EdmPrimitiveTypeKind kind)
        {
            // Arrange
            IEdmPrimitiveType             primitive    = EdmCoreModel.Instance.GetPrimitiveType(kind);
            ODataTemplateTranslateContext context      = new ODataTemplateTranslateContext();
            ValueSegmentTemplate          valueSegment = new ValueSegmentTemplate(primitive);

            // Act
            ODataPathSegment segment = valueSegment.Translate(context);

            // Assert
            ValueSegment odataValueSegment = Assert.IsType <ValueSegment>(segment);

            Assert.Same(primitive, odataValueSegment.EdmType);
        }
Example #21
0
        public void SetValue(SimulateDataModel sour, SimulateDataModel dest, int sourstart, int sourend, int deststart, int destend)
        {
            sour.SortByTime();
            destend = deststart + (sourend - sourstart);
            IEnumerator <ValueSegment> souriter = sour.Values.GetEnumerator();

            souriter.MoveNext();
            ValueSegment sourvseg = souriter.Current;

            while (sourvseg != null && sourvseg.TimeEnd < sourstart)
            {
                if (!souriter.MoveNext())
                {
                    break;
                }
                sourvseg = souriter.Current;
            }
            RemoveValue(dest, deststart, destend);
            sourvseg = souriter.Current;
            while (sourvseg != null && sourvseg.TimeStart < sourend)
            {
                int vsegstart = sourvseg.TimeStart;
                int vsegend   = sourvseg.TimeEnd;
                if (vsegstart < sourstart)
                {
                    vsegstart = sourstart;
                }
                if (vsegend > sourend)
                {
                    vsegend = sourend;
                }
                if (vsegstart > vsegend)
                {
                    continue;
                }
                ValueSegment vseg = sourvseg.Clone();
                vseg.TimeStart = vsegstart + (deststart - sourstart);
                vseg.TimeEnd   = vsegend + (deststart - sourstart);
                dest.Add(vseg);

                if (!souriter.MoveNext())
                {
                    break;
                }
                sourvseg = souriter.Current;
            }
        }
        public void TryMatchMediaType_MatchRequest_WithBinaryPrimitivePropertyRequest()
        {
            // Arrange
            EdmEntityType         entity          = new EdmEntityType("NS", "Entity");
            EdmStructuralProperty property        = entity.AddStructuralProperty("Data", EdmCoreModel.Instance.GetBinary(true));
            PropertySegment       propertySegment = new PropertySegment(property);
            ValueSegment          valueSegment    = new ValueSegment(property.Type.Definition);

            HttpRequest request = new DefaultHttpContext().Request;

            request.ODataFeature().Path = new ODataPath(propertySegment, valueSegment);

            // Act
            double mapResult = Mapping.TryMatchMediaType(request);

            // Assert
            Assert.Equal(1.0, mapResult);
        }
        public void TryMatchMediaType_MatchRequest_WithPrimitiveRawValueRequest()
        {
            // Arrange
            EdmEnumType           colorType = new EdmEnumType("NS", "Color");
            EdmEntityType         entity    = new EdmEntityType("NS", "Entity");
            EdmStructuralProperty property  =
                entity.AddStructuralProperty("Color", new EdmEnumTypeReference(colorType, false));

            PropertySegment propertySegment = new PropertySegment(property);
            ValueSegment    valueSegment    = new ValueSegment(property.Type.Definition);

            HttpRequest request = new DefaultHttpContext().Request;

            request.ODataFeature().Path = new ODataPath(propertySegment, valueSegment);

            // Act
            double mapResult = Mapping.TryMatchMediaType(request);

            // Assert
            Assert.Equal(1.0, mapResult);
        }
Example #24
0
        public override void Handle(ValueSegment segment)
        {
            this.ThrowIfResolved();

            this.NavigationSource = null;
            this.Type = segment.EdmType;
            this.ElementType = this.GetElementType(this.Type);

            this.IsRawValue = true;

            this.childSegments.Add(segment);

            this.canonicalSegments.Add(segment);
        }
Example #25
0
 /// <summary>
 /// Handle a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Handle</param>
 public virtual void Handle(ValueSegment segment)
 {
     throw new NotImplementedException();
 }
 public void NonEntityTypeIsPassedThrough()
 {
     IEdmType nonEntityType = ModelBuildingHelpers.BuildValidComplexType();
     ValueSegment segment = new ValueSegment(nonEntityType);
     segment.EdmType.Should().BeSameAs(nonEntityType);
 }
 public void EntityTypeIsConvertedToStream()
 {
     ValueSegment segment = new ValueSegment(ModelBuildingHelpers.BuildValidEntityType());
     segment.EdmType.Should().BeSameAs(EdmCoreModel.Instance.GetStream(false).Definition);
 }
 public void SingleResultIsTrue()
 {
     ValueSegment segment = new ValueSegment(HardCodedTestModel.GetPersonType());
     segment.SingleResult.Should().BeTrue();
 }
 public void IdentifierIsValueSegment()
 {
     ValueSegment segment = new ValueSegment(HardCodedTestModel.GetPersonType());
     segment.Identifier.Should().Be(UriQueryConstants.ValueSegment);
 }
Example #30
0
 /// <summary>
 /// Translate ValueSegment to linq expression.
 /// </summary>
 /// <param name="segment">The ValueSegment</param>
 /// <returns>The linq expression</returns>
 public override Expression Translate(ValueSegment segment)
 {
     throw new NotImplementedException("ValueSegment translation is not supported");
 }
        public void Translate_ValueSegment_To_ValuePathSegment_Works()
        {
            // Arrange
            IEdmEntityType entityType = _model.FindDeclaredType("System.Web.OData.Routing.RoutingCustomer") as IEdmEntityType;
            ValueSegment segment = new ValueSegment(entityType);

            // Act
            IEnumerable<ODataPathSegment> segments = _translator.Translate(segment);

            // Assert
            ODataPathSegment pathSegment = Assert.Single(segments);
            Assert.IsType<ValuePathSegment>(pathSegment);
        }
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Defined by the implementer.</returns>
 public override string Translate(ValueSegment segment)
 {
     return(string.Empty);
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="ValueSegmentTemplate" /> class.
 /// </summary>
 /// <param name="segment">The value segment.</param>
 public ValueSegmentTemplate(ValueSegment segment)
 {
     Segment = segment ?? throw Error.ArgumentNull(nameof(segment));
 }
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Translated the path segment template.</returns>
 public override ODataSegmentTemplate Translate(ValueSegment segment)
 {
     return(new ValueSegmentTemplate(segment));
 }
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Defined by the implementer.</returns>
 public virtual T Translate(ValueSegment segment)
 {
     throw new NotImplementedException();
 }
Example #36
0
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Translated WebApi path segment.</returns>
 public override IEnumerable <ODataPathSegment> Translate(ValueSegment segment)
 {
     yield return(new ValuePathSegment());
 }
Example #37
0
        /// <summary>
        /// Try to handle the segment as $value.
        /// </summary>
        /// <param name="text">The segment text.</param>
        /// <returns>Whether the segment was $value.</returns>
        private bool TryCreateValueSegment(string text)
        {
            string identifier;
            string parenthesisExpression;
            ExtractSegmentIdentifierAndParenthesisExpression(text, out identifier, out parenthesisExpression);

            if (!this.IdentifierIs(UriQueryConstants.ValueSegment, identifier))
            {
                return false;
            }

            if (parenthesisExpression != null)
            {
                throw ExceptionUtil.CreateSyntaxError();
            }

            ODataPathSegment previous = this.parsedSegments[this.parsedSegments.Count - 1];

            ODataPathSegment segment = new ValueSegment(previous.EdmType);
            if ((previous.TargetKind == RequestTargetKind.Primitive)
                || (previous.TargetKind == RequestTargetKind.Enum))
            {
                segment.CopyValuesFrom(previous);
            }
            else
            {
                segment.TargetEdmType = previous.TargetEdmType;
            }

            segment.Identifier = UriQueryConstants.ValueSegment;
            segment.SingleResult = true;
            CheckSingleResult(previous.SingleResult, previous.Identifier);

            if (previous.TargetKind == RequestTargetKind.Primitive)
            {
                segment.TargetKind = RequestTargetKind.PrimitiveValue;
            }
            else if (previous.TargetKind == RequestTargetKind.Enum)
            {
                segment.TargetKind = RequestTargetKind.EnumValue;
            }
            else if (previous.TargetKind == RequestTargetKind.OpenProperty)
            {
                segment.TargetKind = RequestTargetKind.OpenPropertyValue;
            }
            else
            {
                // If the previous segment is an entity, we expect it to be an MLE. We cannot validate our assumption
                // until later when we get the actual instance of the entity because the type hierarchy can contain
                // a mix of MLE and non-MLE types.
                segment.TargetKind = RequestTargetKind.MediaResource;
            }

            this.parsedSegments.Add(segment);
            return true;
        }
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Defined by the implementer.</returns>
 public override string Translate(ValueSegment segment)
 {
     throw new NotImplementedException();
 }
Example #39
0
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Translated odata path segment.</returns>
 public override ODataPathSegment Translate(ValueSegment segment)
 {
     return(segment);
 }
 /// <summary>
 /// Translate a ValueSegment
 /// </summary>
 /// <param name="segment">the segment to Translate</param>
 /// <returns>Translated the path segment template.</returns>
 public override ODataPathSegmentTemplate Translate(ValueSegment segment)
 {
     return(new ODataPathSegmentTemplate <ValueSegment>());
 }