// ------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. // 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 System.Text; using Microsoft.OData.Edm; using Microsoft.OpenApi.OData.Common; namespace Microsoft.OpenApi.OData.Edm { /// /// Operation import segment. /// public class ODataOperationImportSegment : ODataSegment { /// /// Initializes a new instance of class. /// /// The operation import. public ODataOperationImportSegment(IEdmOperationImport operationImport) { OperationImport = operationImport ?? throw Error.ArgumentNull(nameof(operationImport)); } /// /// Initializes a new instance of class. /// /// The operation import. /// The parameter mappings. public ODataOperationImportSegment(IEdmOperationImport operationImport, IDictionary parameterMappings) { OperationImport = operationImport ?? throw Error.ArgumentNull(nameof(operationImport)); ParameterMappings = parameterMappings ?? throw Error.ArgumentNull(nameof(parameterMappings)); } /// /// Gets the parameter mappings. /// public IDictionary ParameterMappings { get; } /// /// Gets the operation import. /// public IEdmOperationImport OperationImport { get; } /// public override ODataSegmentKind Kind => ODataSegmentKind.OperationImport; /// public override string Identifier { get => OperationImport.Name; } /// public override string GetPathItemName(OpenApiConvertSettings settings, HashSet parameters) { Utils.CheckArgumentNull(settings, nameof(settings)); if (OperationImport.IsFunctionImport()) { return FunctionImportName(OperationImport as IEdmFunctionImport, settings, parameters); } return OperationImport.Name; } private string FunctionImportName(IEdmFunctionImport functionImport, OpenApiConvertSettings settings, HashSet parameters) { StringBuilder functionName = new StringBuilder(functionImport.Name); functionName.Append("("); // Structured or collection-valued parameters are represented as a parameter alias in the path template // and the parameters array contains a Parameter Object for the parameter alias as a query option of type string. IEdmFunction function = functionImport.Function; functionName.Append(String.Join(",", function.Parameters.Select(p => { string uniqueName = Utils.GetUniqueName(p.Name, parameters); if (p.Type.IsStructured() || p.Type.IsCollection()) { return p.Name + "=@" + uniqueName; } else { return p.Name + "={" + uniqueName + "}"; } }))); functionName.Append(")"); return functionName.ToString(); } } }