public IEdmLabeledExpression WrapLabeledElement(CsdlLabeledExpression labeledElement, IEdmEntityType bindingContext) { IEdmLabeledExpression expression; if (!this.semanticsLabeledElements.TryGetValue(labeledElement, out expression)) { expression = new CsdlSemanticsLabeledExpression(labeledElement.Label, labeledElement.Element, bindingContext, this); this.semanticsLabeledElements[labeledElement] = expression; } return(expression); }
public IEdmLabeledExpression WrapLabeledElement(CsdlLabeledExpression labeledElement, IEdmEntityType bindingContext) { IEdmLabeledExpression result; // Guarantee that multiple requests to wrap a given labeled element all return the same object. if (!this.semanticsLabeledElements.TryGetValue(labeledElement, out result)) { result = new CsdlSemanticsLabeledExpression(labeledElement.Label, labeledElement.Element, bindingContext, this); this.semanticsLabeledElements[labeledElement] = result; } return(result); }
public IEdmLabeledExpression FindLabeledElement(string label, IEdmEntityType bindingContext) { object obj2; if (!this.LabeledExpressions.TryGetValue(label, out obj2)) { return(null); } CsdlLabeledExpression labeledElement = obj2 as CsdlLabeledExpression; if (labeledElement != null) { return(this.WrapLabeledElement(labeledElement, bindingContext)); } return(this.WrapLabeledElementList((List <CsdlLabeledExpression>)obj2, bindingContext)); }
public IEdmLabeledExpression FindLabeledElement(string label, IEdmEntityType bindingContext) { object labeledElement; if (this.LabeledExpressions.TryGetValue(label, out labeledElement)) { CsdlLabeledExpression labeledElementExpression = labeledElement as CsdlLabeledExpression; if (labeledElementExpression != null) { return(this.WrapLabeledElement(labeledElementExpression, bindingContext)); } return(this.WrapLabeledElementList((List <CsdlLabeledExpression>)labeledElement, bindingContext)); } return(null); }
public void ParseLabeledElementExpressionWorksAsExpected() { string json = @" { ""$LabeledElement"": { ""$Path"": ""FirstName"" }, ""$Name"": ""CustomerFirstName"" }"; CsdlExpressionBase expressionBase = ParseExpression(json); Assert.NotNull(expressionBase); CsdlLabeledExpression labeledExp = Assert.IsType <CsdlLabeledExpression>(expressionBase); Assert.Equal("CustomerFirstName", labeledExp.Label); Assert.NotNull(labeledExp.Element); Assert.IsType <CsdlPathExpression>(labeledExp.Element); }
/// <summary> /// Parse the Labeled Element expression using <see cref="JsonElement"/>. /// </summary> /// <param name="element">The input JSON element.</param> /// <param name="context">The parser context.</param> /// <param name="labeledExp">The built labeled element expression.</param> /// <returns>true/false</returns> private static bool TryParseLabeledElementExpression(JsonElement element, JsonParserContext context, out CsdlLabeledExpression labeledExp) { Debug.Assert(context != null); labeledExp = null; // Labeled element expressions are represented as an object with a member $LabeledElement whose value is an annotation expression JsonElement propertyValue; if (element.ValueKind != JsonValueKind.Object || !element.TryGetProperty("$LabeledElement", out propertyValue)) { return(false); } CsdlExpressionBase expression = propertyValue.ProcessProperty("$LabeledElement", context, ParseExpression); // a member $Name whose value is a string containing the labeled element’s name. string label = element.ProcessRequiredProperty("$Name", context, (v, p) => v.ParseAsString(p)); labeledExp = new CsdlLabeledExpression(label, expression, context.Location()); return(true); }
private static void AddLabeledExpressions(CsdlExpressionBase expression, Dictionary <string, object> result) { if (expression == null) { return; } switch (expression.ExpressionKind) { case Expressions.EdmExpressionKind.Labeled: { CsdlLabeledExpression labeledElement = (CsdlLabeledExpression)expression; string label = labeledElement.Label; object duplicateLabeledElement; if (result.TryGetValue(label, out duplicateLabeledElement)) { // If the label has multiple definitions, store the duplicates as a list of labeled elements. List <CsdlLabeledExpression> duplicates = duplicateLabeledElement as List <CsdlLabeledExpression>; if (duplicates == null) { duplicates = new List <CsdlLabeledExpression>(); duplicates.Add((CsdlLabeledExpression)duplicateLabeledElement); result[label] = duplicates; } duplicates.Add(labeledElement); } else { result[label] = labeledElement; } AddLabeledExpressions(labeledElement.Element, result); break; } case Expressions.EdmExpressionKind.Collection: foreach (CsdlExpressionBase element in ((CsdlCollectionExpression)expression).ElementValues) { AddLabeledExpressions(element, result); } break; case Expressions.EdmExpressionKind.OperationApplication: foreach (CsdlExpressionBase argument in ((CsdlApplyExpression)expression).Arguments) { AddLabeledExpressions(argument, result); } break; case Expressions.EdmExpressionKind.Record: foreach (CsdlPropertyValue property in ((CsdlRecordExpression)expression).PropertyValues) { AddLabeledExpressions(property.Expression, result); } break; case Expressions.EdmExpressionKind.If: { CsdlIfExpression ifExpression = (CsdlIfExpression)expression; AddLabeledExpressions(ifExpression.Test, result); AddLabeledExpressions(ifExpression.IfTrue, result); AddLabeledExpressions(ifExpression.IfFalse, result); break; } case Expressions.EdmExpressionKind.IsType: AddLabeledExpressions(((CsdlIsTypeExpression)expression).Operand, result); break; case Expressions.EdmExpressionKind.Cast: AddLabeledExpressions(((CsdlCastExpression)expression).Operand, result); break; default: break; } }
private static void AddLabeledExpressions(CsdlExpressionBase expression, Dictionary <string, object> result) { if (expression != null) { switch (expression.ExpressionKind) { case EdmExpressionKind.Record: foreach (CsdlPropertyValue value2 in ((CsdlRecordExpression)expression).PropertyValues) { AddLabeledExpressions(value2.Expression, result); } return; case EdmExpressionKind.Collection: foreach (CsdlExpressionBase base2 in ((CsdlCollectionExpression)expression).ElementValues) { AddLabeledExpressions(base2, result); } return; case EdmExpressionKind.If: { CsdlIfExpression expression3 = (CsdlIfExpression)expression; AddLabeledExpressions(expression3.Test, result); AddLabeledExpressions(expression3.IfTrue, result); AddLabeledExpressions(expression3.IfFalse, result); return; } case EdmExpressionKind.AssertType: AddLabeledExpressions(((CsdlAssertTypeExpression)expression).Operand, result); return; case EdmExpressionKind.IsType: AddLabeledExpressions(((CsdlIsTypeExpression)expression).Operand, result); return; case EdmExpressionKind.FunctionApplication: foreach (CsdlExpressionBase base3 in ((CsdlApplyExpression)expression).Arguments) { AddLabeledExpressions(base3, result); } return; case EdmExpressionKind.LabeledExpressionReference: return; case EdmExpressionKind.Labeled: { object obj2; CsdlLabeledExpression item = (CsdlLabeledExpression)expression; string label = item.Label; if (!result.TryGetValue(label, out obj2)) { result[label] = item; } else { List <CsdlLabeledExpression> list = obj2 as List <CsdlLabeledExpression>; if (list == null) { list = new List <CsdlLabeledExpression> { (CsdlLabeledExpression)obj2 }; result[label] = list; } list.Add(item); } AddLabeledExpressions(item.Element, result); return; } } } }