/// <summary> /// Constructor. /// </summary> /// <param name="format">The format for this output context.</param> /// <param name="messageWriterSettings">Configuration settings of the OData writer.</param> /// <param name="writingResponse">true if writing a response message; otherwise false.</param> /// <param name="synchronous">true if the output should be written synchronously; false if it should be written asynchronously.</param> /// <param name="model">The model to use.</param> /// <param name="urlResolver">The optional URL resolver to perform custom URL resolution for URLs written to the payload.</param> protected ODataOutputContext( ODataFormat format, ODataMessageWriterSettings messageWriterSettings, bool writingResponse, bool synchronous, IEdmModel model, IODataUrlResolver urlResolver) { ExceptionUtils.CheckArgumentNotNull(format, "format"); ExceptionUtils.CheckArgumentNotNull(messageWriterSettings, "messageWriterSettings"); this.format = format; this.messageWriterSettings = messageWriterSettings; this.writingResponse = writingResponse; this.synchronous = synchronous; this.model = model ?? EdmCoreModel.Instance; this.urlResolver = urlResolver; this.edmTypeResolver = EdmTypeWriterResolver.Instance; }
/// <summary> /// Constructor. /// </summary> /// <param name="format">The format for this input context.</param> /// <param name="messageReaderSettings">Configuration settings of the OData reader.</param> /// <param name="readingResponse">true if reading a response message; otherwise false.</param> /// <param name="synchronous">true if the input should be read synchronously; false if it should be read asynchronously.</param> /// <param name="model">The model to use.</param> /// <param name="urlResolver">The optional URL resolver to perform custom URL resolution for URLs read from the payload.</param> protected ODataInputContext( ODataFormat format, ODataMessageReaderSettings messageReaderSettings, bool readingResponse, bool synchronous, IEdmModel model, IODataUrlResolver urlResolver) { ExceptionUtils.CheckArgumentNotNull(format, "format"); ExceptionUtils.CheckArgumentNotNull(messageReaderSettings, "messageReaderSettings"); this.format = format; this.messageReaderSettings = messageReaderSettings; this.readingResponse = readingResponse; this.synchronous = synchronous; this.model = model; this.urlResolver = urlResolver; this.edmTypeResolver = new EdmTypeReaderResolver(this.Model, this.MessageReaderSettings.ReaderBehavior); }
/// <summary> /// Constructor. /// </summary> /// <param name="format">The format for this output context.</param> /// <param name="messageWriterSettings">Configuration settings of the OData writer.</param> /// <param name="writingResponse">true if writing a response message; otherwise false.</param> /// <param name="synchronous">true if the output should be written synchronously; false if it should be written asynchronously.</param> /// <param name="model">The model to use.</param> /// <param name="urlResolver">The optional URL resolver to perform custom URL resolution for URLs written to the payload.</param> protected ODataOutputContext( ODataFormat format, ODataMessageWriterSettings messageWriterSettings, bool writingResponse, bool synchronous, IEdmModel model, IODataUrlResolver urlResolver) { ExceptionUtils.CheckArgumentNotNull(format, "format"); ExceptionUtils.CheckArgumentNotNull(messageWriterSettings, "messageWriterSettings"); this.format = format; this.messageWriterSettings = messageWriterSettings; this.writingResponse = writingResponse; this.synchronous = synchronous; this.model = model ?? EdmCoreModel.Instance; this.urlResolver = urlResolver; this.edmTypeResolver = EdmTypeWriterResolver.Instance; this.payloadValueConverter = this.model.GetPayloadValueConverter(); this.writerValidator = ValidatorFactory.CreateWriterValidator(messageWriterSettings.EnableFullValidation); }
internal static IEdmOperation[] CalculateBindableOperationsForType(IEdmType bindingType, IEdmModel model, EdmTypeResolver edmTypeResolver) { Debug.Assert(model != null, "model != null"); Debug.Assert(edmTypeResolver != null, "edmTypeResolver != null"); List<IEdmOperation> operations = null; try { operations = model.FindBoundOperations(bindingType).ToList(); } catch (Exception exc) { if (!ExceptionUtils.IsCatchableExceptionType(exc)) { throw; } throw new ODataException(Strings.MetadataUtils_CalculateBindableOperationsForType(bindingType.FullTypeName()), exc); } List<IEdmOperation> operationsFound = new List<IEdmOperation>(); foreach (IEdmOperation operation in operations.EnsureOperationsBoundWithBindingParameter()) { IEdmOperationParameter bindingParameter = operation.Parameters.FirstOrDefault(); IEdmType resolvedBindingType = edmTypeResolver.GetParameterType(bindingParameter).Definition; if (resolvedBindingType.IsAssignableFrom(bindingType)) { operationsFound.Add(operation); } } return operationsFound.ToArray(); }
/// <summary> /// Constructs an ODataMetadataContext. /// </summary> /// <param name="isResponse">true if we are reading a response payload, false otherwise.</param> /// <param name="operationsBoundToEntityTypeMustBeContainerQualified">Callback to determine whether operations bound to this type must be qualified with the operation they belong to when appearing in a $select clause.</param> /// <param name="edmTypeResolver">EdmTypeResolver instance to resolve entity set base type.</param> /// <param name="model">The Edm model.</param> /// <param name="metadataDocumentUri">The metadata document Uri.</param> /// <param name="odataUri">The request Uri.</param> /// <param name="metadataLevel">Current Json Light MetadataLevel</param> /// <remarks>This overload should only be used by the reader.</remarks> public ODataMetadataContext( bool isResponse, Func<IEdmEntityType, bool> operationsBoundToEntityTypeMustBeContainerQualified, EdmTypeResolver edmTypeResolver, IEdmModel model, Uri metadataDocumentUri, ODataUri odataUri, JsonLightMetadataLevel metadataLevel) : this(isResponse, operationsBoundToEntityTypeMustBeContainerQualified, edmTypeResolver, model, metadataDocumentUri, odataUri) { Debug.Assert(metadataLevel != null, "MetadataLevel != null"); this.metadataLevel = metadataLevel; }
/// <summary> /// Constructs an ODataMetadataContext. /// </summary> /// <param name="isResponse">true if we are reading a response payload, false otherwise.</param> /// <param name="operationsBoundToEntityTypeMustBeContainerQualified">Callback to determine whether operations bound to this type must be qualified with the operation they belong to when appearing in a $select clause.</param> /// <param name="edmTypeResolver">EdmTypeResolver instance to resolve entity set base type.</param> /// <param name="model">The Edm model.</param> /// <param name="metadataDocumentUri">The metadata document Uri.</param> /// <param name="odataUri">The request Uri.</param> /// <remarks>This overload should only be used by the reader.</remarks> public ODataMetadataContext( bool isResponse, Func<IEdmEntityType, bool> operationsBoundToEntityTypeMustBeContainerQualified, EdmTypeResolver edmTypeResolver, IEdmModel model, Uri metadataDocumentUri, ODataUri odataUri) { Debug.Assert(edmTypeResolver != null, "edmTypeResolver != null"); Debug.Assert(model != null, "model != null"); this.isResponse = isResponse; this.operationsBoundToEntityTypeMustBeContainerQualified = operationsBoundToEntityTypeMustBeContainerQualified ?? EdmLibraryExtensions.OperationsBoundToEntityTypeMustBeContainerQualified; this.edmTypeResolver = edmTypeResolver; this.model = model; this.metadataDocumentUri = metadataDocumentUri; this.bindableOperationsCache = new Dictionary<IEdmType, IEdmOperation[]>(ReferenceEqualityComparer<IEdmType>.Instance); this.odataUri = odataUri; }
internal static IEdmOperation[] CalculateBindableOperationsForType(IEdmType bindingType, IEdmModel model, EdmTypeResolver edmTypeResolver) { Debug.Assert(model != null, "model != null"); Debug.Assert(edmTypeResolver != null, "edmTypeResolver != null"); List <IEdmOperation> operations = null; try { operations = model.FindBoundOperations(bindingType).ToList(); } catch (Exception exc) { if (!ExceptionUtils.IsCatchableExceptionType(exc)) { throw; } throw new ODataException(Strings.MetadataUtils_CalculateBindableOperationsForType(bindingType.FullTypeName()), exc); } List <IEdmOperation> operationsFound = new List <IEdmOperation>(); foreach (IEdmOperation operation in operations.EnsureOperationsBoundWithBindingParameter()) { IEdmOperationParameter bindingParameter = operation.Parameters.FirstOrDefault(); IEdmType resolvedBindingType = edmTypeResolver.GetParameterType(bindingParameter).Definition; if (resolvedBindingType.IsAssignableFrom(bindingType)) { operationsFound.Add(operation); } } return(operationsFound.ToArray()); }