diff --git a/src/Microsoft.OpenApi.OData.Reader/Common/EdmModelHelper.cs b/src/Microsoft.OpenApi.OData.Reader/Common/EdmModelHelper.cs
index caad2af4..1a3eefdb 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Common/EdmModelHelper.cs
+++ b/src/Microsoft.OpenApi.OData.Reader/Common/EdmModelHelper.cs
@@ -6,7 +6,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
+using System.Runtime;
using Microsoft.OData.Edm;
+using Microsoft.OData.Edm.Csdl;
using Microsoft.OpenApi.Models;
using Microsoft.OpenApi.OData.Edm;
using Microsoft.OpenApi.OData.Vocabulary.Capabilities;
@@ -341,5 +343,53 @@ internal static string GenerateODataTypeCastPathOperationIdPrefix(ODataPath path
return operationId;
}
+
+ ///
+ /// Strips or aliases namespace prefixes from an element name.
+ ///
+ /// The target element.
+ /// Optional: The Edm model. Used for searching for the namespace alias.
+ /// The OpenAPI convert settings.
+ /// The element name, alias-prefixed or namespace-stripped if applicable.
+ internal static string StripOrAliasNamespacePrefix(IEdmSchemaElement element, OpenApiConvertSettings settings, IEdmModel model = null)
+ {
+ Utils.CheckArgumentNull(element, nameof(element));
+ Utils.CheckArgumentNull(settings, nameof(settings));
+
+ string namespaceAlias = string.Empty;
+ string namespaceName = element.Namespace;
+ string segmentName = element.FullName();
+
+ if (!string.IsNullOrEmpty(namespaceName) && model != null)
+ {
+ namespaceAlias = model.GetNamespaceAlias(namespaceName);
+ }
+
+ if (element is IEdmStructuredType && settings.EnableAliasForTypeCastSegments && !string.IsNullOrEmpty(namespaceAlias))
+ {
+ // Alias type cast segment name
+ segmentName = namespaceAlias.TrimEnd('.') + "." + element.Name;
+ }
+
+ if (element is IEdmOperation)
+ {
+ if (settings.EnableAliasForOperationSegments && !string.IsNullOrEmpty(namespaceAlias))
+ {
+ // Alias operation segment name
+ segmentName = namespaceAlias.TrimEnd('.') + "." + element.Name;
+ }
+
+ if (!string.IsNullOrEmpty(settings.NamespacePrefixToStripForInMethodPaths) &&
+ element.Namespace.Equals(settings.NamespacePrefixToStripForInMethodPaths, StringComparison.OrdinalIgnoreCase))
+ {
+ // Strip specified namespace from operation segment name.
+ // If the namespace prefix to strip matches the namespace name,
+ // and the alias has been appended, the alias will be stripped.
+ segmentName = element.Name;
+ }
+ }
+
+ return segmentName;
+ }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataOperationSegment.cs b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataOperationSegment.cs
index 44e7f0f0..6ad4a2b5 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataOperationSegment.cs
+++ b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataOperationSegment.cs
@@ -1,4 +1,5 @@
-// ------------------------------------------------------------
+// -----
+// private readonly IEdmModel _model;-------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
// ------------------------------------------------------------
@@ -48,6 +49,31 @@ public ODataOperationSegment(IEdmOperation operation, IDictionary
+ /// Initializes a new instance of class.
+ ///
+ /// The operation.
+ /// The Edm model.
+ public ODataOperationSegment(IEdmOperation operation, IEdmModel model)
+ : this(operation, false, model)
+ {
+ }
+
+ ///
+ /// Initializes a new instance of class.
+ ///
+ /// The operation.
+ /// A value indicating this operation is an escaped function.
+ /// The Edm model.
+ public ODataOperationSegment(IEdmOperation operation, bool isEscapedFunction, IEdmModel model)
+ {
+ Operation = operation ?? throw Error.ArgumentNull(nameof(operation));
+ IsEscapedFunction = isEscapedFunction;
+ _model = model ?? throw Error.ArgumentNull(nameof(model));
+ }
+
+ private readonly IEdmModel _model;
+
///
/// Gets the parameter mappings.
///
@@ -116,12 +142,13 @@ private string OperationName(IEdmOperation operation, OpenApiConvertSettings set
{
return operation.Name;
}
+ else if (_model != null)
+ {
+ return EdmModelHelper.StripOrAliasNamespacePrefix(operation, settings, _model);
+ }
else
{
- string selectedName = operation.FullName();
- return !string.IsNullOrEmpty(settings.NamespacePrefixToStripForInMethodPaths)
- ? selectedName.StripNamespacePrefix(settings.NamespacePrefixToStripForInMethodPaths)
- : selectedName;
+ return operation.FullName();
}
}
@@ -167,5 +194,5 @@ public override IEnumerable GetAnnotables()
{
return new IEdmVocabularyAnnotatable[] { Operation };
}
- }
+ }
}
\ No newline at end of file
diff --git a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs
index 868fd881..aaf66cfa 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs
+++ b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataPathProvider.cs
@@ -781,7 +781,7 @@ secondLastPathSegment is not ODataKeySegment &&
if (lastPathSegment is ODataTypeCastSegment && !convertSettings.AppendBoundOperationsOnDerivedTypeCastSegments) continue;
if (lastPathSegment is ODataKeySegment segment && segment.IsAlternateKey) continue;
ODataPath newPath = subPath.Clone();
- newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction));
+ newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction, _model));
AppendPath(newPath);
}
}
@@ -828,7 +828,7 @@ private void AppendBoundOperationOnNavigationPropertyPath(IEdmOperation edmOpera
}
ODataPath newPath = path.Clone();
- newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction));
+ newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction, _model));
AppendPath(newPath);
}
}
@@ -861,7 +861,7 @@ private void AppendBoundOperationOnDerived(
if (ns is IEdmEntitySet)
{
ODataPath newPath = new ODataPath(new ODataNavigationSourceSegment(ns), new ODataTypeCastSegment(bindingEntityType, _model),
- new ODataOperationSegment(edmOperation, isEscapedFunction));
+ new ODataOperationSegment(edmOperation, isEscapedFunction, _model));
AppendPath(newPath);
}
}
@@ -870,14 +870,14 @@ private void AppendBoundOperationOnDerived(
if (ns is IEdmSingleton)
{
ODataPath newPath = new ODataPath(new ODataNavigationSourceSegment(ns), new ODataTypeCastSegment(bindingEntityType, _model),
- new ODataOperationSegment(edmOperation, isEscapedFunction));
+ new ODataOperationSegment(edmOperation, isEscapedFunction, _model));
AppendPath(newPath);
}
else
{
ODataPath newPath = new ODataPath(new ODataNavigationSourceSegment(ns), new ODataKeySegment(ns.EntityType()),
new ODataTypeCastSegment(bindingEntityType , _model),
- new ODataOperationSegment(edmOperation, isEscapedFunction));
+ new ODataOperationSegment(edmOperation, isEscapedFunction, _model));
AppendPath(newPath);
}
}
@@ -957,7 +957,7 @@ private void AppendBoundOperationOnDerivedNavigationPropertyPath(
ODataPath newPath = path.Clone();
newPath.Push(new ODataTypeCastSegment(bindingEntityType, _model));
- newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction));
+ newPath.Push(new ODataOperationSegment(edmOperation, isEscapedFunction, _model));
AppendPath(newPath);
}
}
diff --git a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataTypeCastSegment.cs b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataTypeCastSegment.cs
index 718fc1c9..6a7e660e 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Edm/ODataTypeCastSegment.cs
+++ b/src/Microsoft.OpenApi.OData.Reader/Edm/ODataTypeCastSegment.cs
@@ -3,11 +3,8 @@
// Licensed under the MIT License (MIT). See LICENSE in the repo root for license information.
// ------------------------------------------------------------
-using System;
using System.Collections.Generic;
-using System.Linq;
using Microsoft.OData.Edm;
-using Microsoft.OData.Edm.Csdl;
using Microsoft.OData.Edm.Vocabularies;
using Microsoft.OpenApi.OData.Common;
@@ -53,20 +50,10 @@ public override IEnumerable GetAnnotables()
public override string GetPathItemName(OpenApiConvertSettings settings, HashSet parameters)
{
Utils.CheckArgumentNull(settings, nameof(settings));
- string namespaceName = string.Empty;
- string namespaceAlias = string.Empty;
+
- if (StructuredType is IEdmSchemaElement element)
- namespaceName = element.Namespace;
-
- if (!string.IsNullOrEmpty(namespaceName))
- namespaceAlias = _model.GetNamespaceAlias(namespaceName);
-
- if(settings.EnableAliasForTypeCastSegments && !string.IsNullOrEmpty(namespaceAlias))
- {
- return namespaceAlias.TrimEnd('.') + "." + StructuredType.FullTypeName().Split(new char[] { '.' }, StringSplitOptions.RemoveEmptyEntries).Last();
- }
-
- return StructuredType.FullTypeName();
+ return StructuredType is IEdmSchemaElement element && _model != null
+ ? EdmModelHelper.StripOrAliasNamespacePrefix(element, settings, _model)
+ : StructuredType.FullTypeName();
}
-}
\ No newline at end of file
+}
diff --git a/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj b/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj
index 0a2524b2..2fbe8f44 100644
--- a/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj
+++ b/src/Microsoft.OpenApi.OData.Reader/Microsoft.OpenAPI.OData.Reader.csproj
@@ -15,13 +15,14 @@
netstandard2.0
Microsoft.OpenApi.OData
true
- 1.4.0-preview1
+ 1.4.0-preview2
This package contains the codes you need to convert OData CSDL to Open API Document of Model.
© Microsoft Corporation. All rights reserved.
Microsoft OpenApi OData EDM
https://github.com/Microsoft/OpenAPI.NET.OData
-- DELETE methods should always return response status code 204
+- DELETE methods should always return response status code #204
+- Aliases or strips namespace prefixes from segment names when and where applicable #365
Microsoft.OpenApi.OData.Reader
..\..\tool\Microsoft.OpenApi.OData.snk
diff --git a/src/Microsoft.OpenApi.OData.Reader/OpenApiConvertSettings.cs b/src/Microsoft.OpenApi.OData.Reader/OpenApiConvertSettings.cs
index aa26aba4..59d44012 100644
--- a/src/Microsoft.OpenApi.OData.Reader/OpenApiConvertSettings.cs
+++ b/src/Microsoft.OpenApi.OData.Reader/OpenApiConvertSettings.cs
@@ -336,6 +336,11 @@ public string PathPrefix
///
public bool EnableAliasForTypeCastSegments { get; set; } = false;
+ ///
+ /// Enables the use of aliases for operation segments to shorten the url path.
+ ///
+ public bool EnableAliasForOperationSegments { get; set; } = false;
+
internal OpenApiConvertSettings Clone()
{
var newSettings = new OpenApiConvertSettings
@@ -387,7 +392,8 @@ internal OpenApiConvertSettings Clone()
AddAlternateKeyPaths = this.AddAlternateKeyPaths,
NamespacePrefixToStripForInMethodPaths = this.NamespacePrefixToStripForInMethodPaths,
EnableAliasForTypeCastSegments = this.EnableAliasForTypeCastSegments,
- SemVerVersion = this.SemVerVersion
+ SemVerVersion = this.SemVerVersion,
+ EnableAliasForOperationSegments = this.EnableAliasForOperationSegments
};
return newSettings;
diff --git a/src/Microsoft.OpenApi.OData.Reader/PublicAPI.Unshipped.txt b/src/Microsoft.OpenApi.OData.Reader/PublicAPI.Unshipped.txt
index 581b498a..a40f45f6 100644
--- a/src/Microsoft.OpenApi.OData.Reader/PublicAPI.Unshipped.txt
+++ b/src/Microsoft.OpenApi.OData.Reader/PublicAPI.Unshipped.txt
@@ -7,6 +7,13 @@ Microsoft.OpenApi.OData.Edm.EdmModelExtensions
Microsoft.OpenApi.OData.Edm.EdmTypeExtensions
Microsoft.OpenApi.OData.Edm.ODataKeySegment.IsAlternateKey.get -> bool
Microsoft.OpenApi.OData.Edm.ODataKeySegment.IsAlternateKey.set -> void
+Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation) -> void
+Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation, bool isEscapedFunction) -> void
+Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation, bool isEscapedFunction, Microsoft.OData.Edm.IEdmModel model) -> void
+Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation, Microsoft.OData.Edm.IEdmModel model) -> void
+Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation, System.Collections.Generic.IDictionary parameterMappings) -> void
+Microsoft.OpenApi.OData.Edm.ODataPath.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings) -> string
+Microsoft.OpenApi.OData.Edm.ODataSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings) -> string
Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.ODataTypeCastSegment(Microsoft.OData.Edm.IEdmStructuredType structuredType, Microsoft.OData.Edm.IEdmModel model) -> void
Microsoft.OpenApi.OData.OpenApiConvertSettings.AddAlternateKeyPaths.get -> bool
Microsoft.OpenApi.OData.OpenApiConvertSettings.AddAlternateKeyPaths.set -> void
@@ -14,6 +21,8 @@ Microsoft.OpenApi.OData.OpenApiConvertSettings.AppendBoundOperationsOnDerivedTyp
Microsoft.OpenApi.OData.OpenApiConvertSettings.AppendBoundOperationsOnDerivedTypeCastSegments.set -> void
Microsoft.OpenApi.OData.OpenApiConvertSettings.CustomHttpMethodLinkRelMapping.get -> System.Collections.Generic.Dictionary
Microsoft.OpenApi.OData.OpenApiConvertSettings.CustomHttpMethodLinkRelMapping.set -> void
+Microsoft.OpenApi.OData.OpenApiConvertSettings.EnableAliasForOperationSegments.get -> bool
+Microsoft.OpenApi.OData.OpenApiConvertSettings.EnableAliasForOperationSegments.set -> void
Microsoft.OpenApi.OData.OpenApiConvertSettings.EnableAliasForTypeCastSegments.get -> bool
Microsoft.OpenApi.OData.OpenApiConvertSettings.EnableAliasForTypeCastSegments.set -> void
Microsoft.OpenApi.OData.OpenApiConvertSettings.EnableCount.get -> bool
@@ -47,6 +56,15 @@ Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey.Function = 5 -> Microsoft.Ope
Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey.List = 1 -> Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey
Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey.ReadByKey = 0 -> Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey
Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey.Update = 3 -> Microsoft.OpenApi.OData.Vocabulary.Core.LinkRelKey
+override Microsoft.OpenApi.OData.Edm.ODataComplexPropertySegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataMetadataSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataNavigationPropertySegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataOperationSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataRefSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataStreamContentSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataStreamPropertySegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
+override Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
static Microsoft.OpenApi.OData.Common.OpenApiOperationExtensions.AddErrorResponses(this Microsoft.OpenApi.Models.OpenApiOperation operation, Microsoft.OpenApi.OData.OpenApiConvertSettings settings, bool addNoContent = false, Microsoft.OpenApi.Models.OpenApiSchema schema = null) -> void
static Microsoft.OpenApi.OData.Edm.EdmModelExtensions.OperationTargetsMultiplePaths(this Microsoft.OData.Edm.IEdmModel model, Microsoft.OData.Edm.IEdmOperation operation) -> bool
static Microsoft.OpenApi.OData.Edm.EdmTypeExtensions.ShouldPathParameterBeQuoted(this Microsoft.OData.Edm.IEdmType edmType, Microsoft.OpenApi.OData.OpenApiConvertSettings settings) -> bool
@@ -74,9 +92,6 @@ Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.OperationImport.get -> M
Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.ParameterMappings.get -> System.Collections.Generic.IDictionary
Microsoft.OpenApi.OData.Edm.ODataOperationSegment
Microsoft.OpenApi.OData.Edm.ODataOperationSegment.IsEscapedFunction.get -> bool
-Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation) -> void
-Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation, bool isEscapedFunction) -> void
-Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ODataOperationSegment(Microsoft.OData.Edm.IEdmOperation operation, System.Collections.Generic.IDictionary parameterMappings) -> void
Microsoft.OpenApi.OData.Edm.ODataOperationSegment.Operation.get -> Microsoft.OData.Edm.IEdmOperation
Microsoft.OpenApi.OData.Edm.ODataOperationSegment.ParameterMappings.get -> System.Collections.Generic.IDictionary
Microsoft.OpenApi.OData.Edm.ODataPath
@@ -88,7 +103,6 @@ Microsoft.OpenApi.OData.Edm.ODataPath.FirstSegment.get -> Microsoft.OpenApi.ODat
Microsoft.OpenApi.OData.Edm.ODataPath.GetCount(bool keySegmentAsDepth) -> int
Microsoft.OpenApi.OData.Edm.ODataPath.GetEnumerator() -> System.Collections.Generic.IEnumerator
Microsoft.OpenApi.OData.Edm.ODataPath.GetPathItemName() -> string
-Microsoft.OpenApi.OData.Edm.ODataPath.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings) -> string
Microsoft.OpenApi.OData.Edm.ODataPath.HttpMethods.get -> System.Collections.Generic.ISet
Microsoft.OpenApi.OData.Edm.ODataPath.LastSegment.get -> Microsoft.OpenApi.OData.Edm.ODataSegment
Microsoft.OpenApi.OData.Edm.ODataPath.ODataPath(params Microsoft.OpenApi.OData.Edm.ODataSegment[] segments) -> void
@@ -114,7 +128,6 @@ Microsoft.OpenApi.OData.Edm.ODataPathProvider
Microsoft.OpenApi.OData.Edm.ODataPathProvider.ODataPathProvider() -> void
Microsoft.OpenApi.OData.Edm.ODataRefSegment
Microsoft.OpenApi.OData.Edm.ODataSegment
-Microsoft.OpenApi.OData.Edm.ODataSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings) -> string
Microsoft.OpenApi.OData.Edm.ODataSegment.GetPathHash(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, Microsoft.OpenApi.OData.Edm.ODataPath path = null) -> string
Microsoft.OpenApi.OData.Edm.ODataSegment.ODataSegment() -> void
Microsoft.OpenApi.OData.Edm.ODataSegmentKind
@@ -143,7 +156,6 @@ override Microsoft.OpenApi.OData.Edm.ODataComplexPropertySegment.Kind.get -> Mic
override Microsoft.OpenApi.OData.Edm.ODataComplexPropertySegment.Identifier.get -> string
Microsoft.OpenApi.OData.Edm.ODataComplexPropertySegment.ComplexType.get -> Microsoft.OData.Edm.IEdmComplexType
override Microsoft.OpenApi.OData.Edm.ODataComplexPropertySegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
-override Microsoft.OpenApi.OData.Edm.ODataComplexPropertySegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
Microsoft.OpenApi.OData.EdmModelOpenApiExtensions
Microsoft.OpenApi.OData.Extensions.IODataRoutePathPrefixProvider
Microsoft.OpenApi.OData.Extensions.IODataRoutePathPrefixProvider.Parameters.get -> System.Collections.Generic.IEnumerable
@@ -240,13 +252,11 @@ override Microsoft.OpenApi.OData.Edm.ODataKeySegment.GetPathItemName(Microsoft.O
override Microsoft.OpenApi.OData.Edm.ODataKeySegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataKeySegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataKeySegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
-override Microsoft.OpenApi.OData.Edm.ODataMetadataSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataMetadataSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataMetadataSegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataMetadataSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataMetadataSegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
override Microsoft.OpenApi.OData.Edm.ODataNavigationPropertySegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
-override Microsoft.OpenApi.OData.Edm.ODataNavigationPropertySegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataNavigationPropertySegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataNavigationPropertySegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataNavigationPropertySegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
@@ -255,34 +265,28 @@ override Microsoft.OpenApi.OData.Edm.ODataNavigationSourceSegment.GetPathItemNam
override Microsoft.OpenApi.OData.Edm.ODataNavigationSourceSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataNavigationSourceSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataNavigationSourceSegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
-override Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataOperationImportSegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
-override Microsoft.OpenApi.OData.Edm.ODataOperationSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataOperationSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataOperationSegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataOperationSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataOperationSegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
override Microsoft.OpenApi.OData.Edm.ODataPath.ToString() -> string
-override Microsoft.OpenApi.OData.Edm.ODataRefSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataRefSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataRefSegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataRefSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataRefSegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
-override Microsoft.OpenApi.OData.Edm.ODataStreamContentSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataStreamContentSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataStreamContentSegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataStreamContentSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataStreamContentSegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
-override Microsoft.OpenApi.OData.Edm.ODataStreamPropertySegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataStreamPropertySegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataStreamPropertySegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataStreamPropertySegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
override Microsoft.OpenApi.OData.Edm.ODataStreamPropertySegment.GetAnnotables() -> System.Collections.Generic.IEnumerable
Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.StructuredType.get -> Microsoft.OData.Edm.IEdmStructuredType
-override Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.GetPathItemName(Microsoft.OpenApi.OData.OpenApiConvertSettings settings, System.Collections.Generic.HashSet parameters) -> string
override Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.Identifier.get -> string
override Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.EntityType.get -> Microsoft.OData.Edm.IEdmEntityType
override Microsoft.OpenApi.OData.Edm.ODataTypeCastSegment.Kind.get -> Microsoft.OpenApi.OData.Edm.ODataSegmentKind
diff --git a/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataOperationSegmentTests.cs b/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataOperationSegmentTests.cs
index f65a5dd0..70d8a152 100644
--- a/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataOperationSegmentTests.cs
+++ b/test/Microsoft.OpenAPI.OData.Reader.Tests/Edm/ODataOperationSegmentTests.cs
@@ -4,7 +4,9 @@
// ------------------------------------------------------------
using System;
+using System.Runtime.CompilerServices;
using Microsoft.OData.Edm;
+using Microsoft.OData.Edm.Csdl;
using Xunit;
namespace Microsoft.OpenApi.OData.Edm.Tests
@@ -73,24 +75,52 @@ public void GetPathItemNameReturnsCorrectActionLiteral(bool unqualifiedCall, boo
}
[Theory]
- [InlineData(true, true, "MyFunction(param={param},param2=@param2)", null)]
- [InlineData(true, false, "MyFunction(entity={entity},param={param},param2=@param2)", null)]
- [InlineData(false, true, "XY.MyFunction(param={param},param2=@param2)", "NS")]
- [InlineData(false, false, "XY.MyFunction(entity={entity},param={param},param2=@param2)", "NS")]
- public void GetPathItemNameReturnsCorrectFunctionLiteral(bool unqualifiedCall, bool isBound, string expected, string namespacePrefixToStrip)
+ [InlineData(true, true, "MyFunction(param={param},param2=@param2)")]
+ [InlineData(true, false, "MyFunction(entity={entity},param={param},param2=@param2)")]
+ [InlineData(false, true, "NS.MyFunction(param={param},param2=@param2)")]
+ [InlineData(false, false, "NS.MyFunction(entity={entity},param={param},param2=@param2)")]
+ public void GetPathItemNameReturnsCorrectFunctionLiteral(bool unqualifiedCall, bool isBound, string expected)
{
// Arrange & Act
- IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType("NS.XY", "Entity"), false);
+ IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType("NS", "Entity"), false);
IEdmTypeReference parameterType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false);
- EdmFunction boundFunction = BoundFunction("MyFunction", isBound, entityTypeReference, namespaceIdentifier: "NS.XY");
+ EdmFunction boundFunction = BoundFunction("MyFunction", isBound, entityTypeReference, namespaceIdentifier: "NS");
boundFunction.AddParameter("param", parameterType);
boundFunction.AddOptionalParameter("param2", parameterType);
var segment = new ODataOperationSegment(boundFunction);
OpenApiConvertSettings settings = new OpenApiConvertSettings
{
- EnableUnqualifiedCall = unqualifiedCall,
+ EnableUnqualifiedCall = unqualifiedCall
+ };
+
+ // Assert
+ Assert.Equal(expected, segment.GetPathItemName(settings));
+ }
+
+ [Theory]
+ [InlineData("NS.XY.MyFunction(param={param},param2=@param2)", "NS", "NS.XY", false)]
+ [InlineData("MyFunction(param={param},param2=@param2)", "NS.XY", "NS.XY", false)]
+ [InlineData("N.MyFunction(param={param},param2=@param2)", "NS", "NS.XY", true)]
+ [InlineData("MyFunction(param={param},param2=@param2)", "NS.XY", "NS.XY", true)]
+ public void GetPathItemNameReturnsCorrectFunctionLiteralWhenSegmentAliasedOrNamespacePrefixStripped(
+ string expected, string namespacePrefixToStrip, string namespaceName, bool enableAlias)
+ {
+ // Arrange & Act
+ IEdmEntityTypeReference entityTypeReference = new EdmEntityTypeReference(new EdmEntityType(namespaceName, "Entity"), false);
+ IEdmTypeReference parameterType = EdmCoreModel.Instance.GetPrimitive(EdmPrimitiveTypeKind.Boolean, isNullable: false);
+ EdmFunction boundFunction = BoundFunction("MyFunction", true, entityTypeReference, namespaceIdentifier: namespaceName);
+ boundFunction.AddParameter("param", parameterType);
+ boundFunction.AddOptionalParameter("param2", parameterType);
+ EdmModel model = new();
+ model.AddElement(boundFunction);
+ model.SetNamespaceAlias(namespaceName, "N");
+
+ var segment = new ODataOperationSegment(boundFunction, model);
+ OpenApiConvertSettings settings = new()
+ {
NamespacePrefixToStripForInMethodPaths = namespacePrefixToStrip,
+ EnableAliasForOperationSegments = enableAlias
};
// Assert
@@ -111,7 +141,7 @@ public void GetPathItemNameReturnsCorrectFunctionLiteralForEscapedFunction(bool
boundFunction.AddParameter("param", parameterType);
boundFunction.AddOptionalParameter("param2", parameterType);
- var segment = new ODataOperationSegment(boundFunction, isEscapedFunction);
+ var segment = new ODataOperationSegment(boundFunction, isEscapedFunction, EdmCoreModel.Instance);
OpenApiConvertSettings settings = new OpenApiConvertSettings
{
EnableUriEscapeFunctionCall = enableEscapeFunctionCall,
@@ -136,7 +166,7 @@ public void GetPathItemNameReturnsCorrectFunctionLiteralForEscapedComposableFunc
boundFunction.AddParameter("param", parameterType);
boundFunction.AddOptionalParameter("param2", parameterType);
- var segment = new ODataOperationSegment(boundFunction, isEscapedFunction);
+ var segment = new ODataOperationSegment(boundFunction, isEscapedFunction, EdmCoreModel.Instance);
OpenApiConvertSettings settings = new OpenApiConvertSettings
{
EnableUriEscapeFunctionCall = enableEscapeFunctionCall,