Skip to content

Commit

Permalink
resolve public api review comments
Browse files Browse the repository at this point in the history
  • Loading branch information
VikingsFan committed Aug 29, 2016
1 parent e7ac93e commit 5a14de6
Show file tree
Hide file tree
Showing 28 changed files with 254 additions and 263 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ public static class HttpConfigurationExtensions

private const string TimeZoneInfoKey = "System.Web.OData.TimeZoneInfo";

private const string ResolverSettingsKey = "System.Web.OData.ResolverSettingsKey";
private const string UrlKeyDelimiterKey = "System.Web.OData.UrlKeyDelimiterKey";

private const string ContinueOnErrorKey = "System.Web.OData.ContinueOnErrorKey";

Expand Down Expand Up @@ -405,24 +405,7 @@ public static void SetUrlKeyDelimiter(this HttpConfiguration configuration, ODat
throw Error.ArgumentNull("configuration");
}

ODataUriResolverSettings settings = configuration.GetResolverSettings();
settings.UrlKeyDelimiter = urlKeyDelimiter;
}

/// <summary>
/// Sets the Uri resolver for the Uri parser on the configuration.
/// </summary>
/// <param name="configuration">The server configuration.</param>
/// <param name="uriResolver">The <see cref="ODataUriResolver"/></param>
public static void SetUriResolver(this HttpConfiguration configuration, ODataUriResolver uriResolver)
{
if (configuration == null)
{
throw Error.ArgumentNull("configuration");
}

ODataUriResolverSettings settings = configuration.GetResolverSettings();
settings.UriResolver = uriResolver;
configuration.Properties[UrlKeyDelimiterKey] = urlKeyDelimiter;
}

/// <summary>
Expand All @@ -445,22 +428,21 @@ internal static bool HasEnabledNullDynamicProperty(this HttpConfiguration config
return false;
}

internal static ODataUriResolverSettings GetResolverSettings(this HttpConfiguration configuration)
internal static ODataUrlKeyDelimiter GetUrlKeyDelimiter(this HttpConfiguration configuration)
{
if (configuration == null)
{
throw Error.ArgumentNull("configuration");
}

object value;
if (configuration.Properties.TryGetValue(ResolverSettingsKey, out value))
if (configuration.Properties.TryGetValue(UrlKeyDelimiterKey, out value))
{
return value as ODataUriResolverSettings;
return value as ODataUrlKeyDelimiter;
}

ODataUriResolverSettings defaultSettings = new ODataUriResolverSettings();
configuration.Properties[ResolverSettingsKey] = defaultSettings;
return defaultSettings;
configuration.Properties[UrlKeyDelimiterKey] = null;
return null;
}

/// <summary>
Expand Down Expand Up @@ -542,18 +524,12 @@ public static ODataRoute MapODataServiceRoute(this HttpConfiguration configurati

// 2) Resolve the path handler and set URI resolver to it.
IODataPathHandler pathHandler = rootContainer.GetRequiredService<IODataPathHandler>();

// if settings is not on local, use the global configuration settings.
ODataUriResolverSettings settings = configuration.GetResolverSettings();
IODataUriResolver pathResolver = pathHandler as IODataUriResolver;
if (pathResolver != null && pathResolver.UriResolver == null)
{
pathResolver.UriResolver = settings.UriResolver;
}

if (pathResolver != null && pathResolver.UrlKeyDelimiter == null)
if (pathHandler != null && pathHandler.UrlKeyDelimiter == null)
{
pathResolver.UrlKeyDelimiter = settings.UrlKeyDelimiter;
ODataUrlKeyDelimiter urlKeyDelimiter = configuration.GetUrlKeyDelimiter();
pathHandler.UrlKeyDelimiter = urlKeyDelimiter;
}

// 3) Resolve some required services and create the route constraint.
Expand Down
22 changes: 0 additions & 22 deletions OData/src/System.Web.OData/OData/ODataUriResolverSettings.cs

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ public Dictionary<string, SelectExpandType> SelectConfigurations
/// <summary>
/// Copy the <see cref="ExpandConfiguration"/>s of navigation properties.
/// </summary>
public void CopyExpandConfigurations(Dictionary<string, ExpandConfiguration> expandConfigurations)
internal void CopyExpandConfigurations(Dictionary<string, ExpandConfiguration> expandConfigurations)
{
_expandConfigurations.Clear();
foreach (var expandConfiguration in expandConfigurations)
Expand All @@ -184,7 +184,7 @@ public void CopyExpandConfigurations(Dictionary<string, ExpandConfiguration> exp
/// <summary>
/// Copy the $orderby configuration of properties.
/// </summary>
public void CopyOrderByConfigurations(Dictionary<string, bool> orderByConfigurations)
internal void CopyOrderByConfigurations(Dictionary<string, bool> orderByConfigurations)
{
_orderByConfigurations.Clear();
foreach (var orderByConfiguration in orderByConfigurations)
Expand All @@ -196,7 +196,7 @@ public void CopyOrderByConfigurations(Dictionary<string, bool> orderByConfigurat
/// <summary>
/// Copy the $select configuration of properties.
/// </summary>
public void CopySelectConfigurations(Dictionary<string, SelectExpandType> selectConfigurations)
internal void CopySelectConfigurations(Dictionary<string, SelectExpandType> selectConfigurations)
{
_selectConfigurations.Clear();
foreach (var selectConfiguration in selectConfigurations)
Expand All @@ -208,7 +208,7 @@ public void CopySelectConfigurations(Dictionary<string, SelectExpandType> select
/// <summary>
/// Copy the $filter configuration of properties.
/// </summary>
public void CopyFilterConfigurations(Dictionary<string, bool> filterConfigurations)
internal void CopyFilterConfigurations(Dictionary<string, bool> filterConfigurations)
{
_filterConfigurations.Clear();
foreach (var filterConfiguration in filterConfigurations)
Expand Down
11 changes: 2 additions & 9 deletions OData/src/System.Web.OData/OData/Query/ODataQueryOptions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
using System.Web.OData.Formatter;
using System.Web.OData.Properties;
using System.Web.OData.Query.Validators;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.UriParser;
Expand Down Expand Up @@ -77,15 +78,7 @@ public ODataQueryOptions(ODataQueryContext context, HttpRequestMessage request)
context.NavigationSource,
queryParameters);

HttpConfiguration configuration = Request.GetConfiguration();
if (configuration != null)
{
ODataUriResolverSettings resolverSettings = configuration.GetResolverSettings();
if (resolverSettings.UriResolver != null)
{
_queryOptionParser.Resolver = resolverSettings.UriResolver;
}
}
_queryOptionParser.Resolver = request.GetRequestContainer().GetRequiredService<ODataUriResolver>();

BuildQueryOptions(queryParameters);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,12 @@ public AttributeRoutingConvention(string routeName, HttpConfiguration configurat
throw Error.ArgumentNull("configuration");
}

// if setting is not on local, use the global configuration setting.
ODataUriResolverSettings settings = configuration.GetResolverSettings();
IODataUriResolver pathResolver = pathTemplateHandler as IODataUriResolver;
if (pathResolver != null && pathResolver.UriResolver == null)
IODataPathHandler pathHandler = pathTemplateHandler as IODataPathHandler;
// if settings is not on local, use the global configuration settings.
if (pathHandler != null && pathHandler.UrlKeyDelimiter == null)
{
pathResolver.UriResolver = settings.UriResolver;
}

if (pathResolver != null && pathResolver.UrlKeyDelimiter == null)
{
pathResolver.UrlKeyDelimiter = settings.UrlKeyDelimiter;
ODataUrlKeyDelimiter urlKeyDelimiter = configuration.GetUrlKeyDelimiter();
pathHandler.UrlKeyDelimiter = urlKeyDelimiter;
}

Action<HttpConfiguration> oldInitializer = configuration.Initializer;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,8 @@ namespace System.Web.OData.Routing
/// <summary>
/// Parses an OData path as an <see cref="ODataPath"/> into an OData link.
/// </summary>
public class DefaultODataPathHandler : IODataPathHandler, IODataPathTemplateHandler, IODataUriResolver
public class DefaultODataPathHandler : IODataPathHandler, IODataPathTemplateHandler
{
/// <summary>
/// Gets or sets the resolver for Uri parsing
/// </summary>
public ODataUriResolver UriResolver { get; set; }

/// <summary>
/// Gets or Sets the <see cref="ODataUrlKeyDelimiter"/> to use while parsing, specifically
/// whether to recognize keys as segments or not.
Expand Down Expand Up @@ -108,7 +103,6 @@ private ODataPath Parse(string serviceRoot, string odataPath, IServiceProvider r
Uri fullUri = null;
NameValueCollection queryString = null;
IEdmModel model = requestContainer.GetRequiredService<IEdmModel>();

if (template)
{
uriParser = new ODataUriParser(model, new Uri(odataPath, UriKind.Relative), requestContainer);
Expand All @@ -128,11 +122,6 @@ private ODataPath Parse(string serviceRoot, string odataPath, IServiceProvider r
uriParser = new ODataUriParser(model, serviceRootUri, fullUri, requestContainer);
}

if (UriResolver != null)
{
uriParser.Resolver = UriResolver;
}

if (UrlKeyDelimiter != null)
{
uriParser.UrlKeyDelimiter = UrlKeyDelimiter;
Expand Down
7 changes: 7 additions & 0 deletions OData/src/System.Web.OData/OData/Routing/IODataPathHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
// Licensed under the MIT License. See License.txt in the project root for license information.

using System.Diagnostics.CodeAnalysis;
using Microsoft.OData;

namespace System.Web.OData.Routing
{
Expand All @@ -26,5 +27,11 @@ public interface IODataPathHandler
/// <param name="path">The OData path to convert into a link.</param>
/// <returns>The generated OData link.</returns>
string Link(ODataPath path);

/// <summary>
/// Gets or Sets the <see cref="ODataUrlKeyDelimiter"/> to use while parsing, specifically
/// whether to recognize keys as segments or not.
/// </summary>
ODataUrlKeyDelimiter UrlKeyDelimiter { get; set; }
}
}
25 changes: 0 additions & 25 deletions OData/src/System.Web.OData/OData/Routing/IODataUriResolver.cs

This file was deleted.

2 changes: 0 additions & 2 deletions OData/src/System.Web.OData/System.Web.OData.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,6 @@
<Compile Include="OData\IEdmDeltaDeletedEntityObject.cs" />
<Compile Include="OData\IEdmDeltaDeletedLink.cs" />
<Compile Include="OData\IEdmDeltaLinkBase.cs" />
<Compile Include="OData\ODataUriResolverSettings.cs" />
<Compile Include="Extensions\UrlHelperExtensions.cs" />
<Compile Include="OData\Batch\ODataBatchHandler.cs" />
<Compile Include="OData\Batch\ODataBatchHttpRequestMessageExtensions.cs" />
Expand Down Expand Up @@ -294,7 +293,6 @@
<Compile Include="OData\Routing\Conventions\NavigationSourceRoutingConvention.cs" />
<Compile Include="OData\Routing\Conventions\SingletonRoutingConvention.cs" />
<Compile Include="OData\Routing\DefaultODataPathHandler.cs" />
<Compile Include="OData\Routing\IODataUriResolver.cs" />
<Compile Include="OData\Routing\ODataParameterValue.cs" />
<Compile Include="OData\Routing\DefaultODataPathValidator.cs" />
<Compile Include="OData\Routing\ODataPathSegmentExtensions.cs" />
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
Expand All @@ -10,6 +11,8 @@
using System.Web.Http.Dispatcher;
using System.Web.OData;
using System.Web.OData.Extensions;
using System.Web.OData.Routing.Conventions;
using Microsoft.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.UriParser;
using Nuwa;
Expand Down Expand Up @@ -45,12 +48,17 @@ public static void UpdateConfiguration(HttpConfiguration configuration)
configuration.Services.Replace(typeof (IAssembliesResolver), resolver);

IEdmModel model = AlternateKeysEdmModel.GetEdmModel();
configuration.SetUriResolver(new AlternateKeysODataUriResolver(model));

configuration.Routes.Clear();

configuration.Count().Filter().OrderBy().Expand().MaxTop(null);
configuration.MapODataServiceRoute("odata", "odata", model: model);

configuration.MapODataServiceRoute("odata", "odata",
builder =>
builder.AddService(ServiceLifetime.Singleton, sp => model)
.AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, sp =>
ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", configuration))
.AddService<ODataUriResolver>(ServiceLifetime.Singleton, sp => new AlternateKeysODataUriResolver(model)));

configuration.EnsureInitialized();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,12 @@
using System.Web.OData;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using System.Web.OData.Routing;
using System.Web.OData.Routing.Conventions;
using Microsoft.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.UriParser;
using Nuwa;
using WebStack.QA.Test.OData.Common;
using WebStack.QA.Test.OData.UriParserExtension;
using Xunit;
using Xunit.Extensions;

Expand All @@ -40,10 +40,14 @@ public static void UpdateConfiguration(HttpConfiguration config)
config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always;
config.Services.Replace(typeof(IAssembliesResolver), resolver);

config.SetUriResolver(new ODataUriResolver { EnableCaseInsensitive = true });

config.Routes.Clear();
config.MapODataServiceRoute("odata", "", GetModel(), new DefaultODataPathHandler(), ODataRoutingConventions.CreateDefault());

config.MapODataServiceRoute("odata", "",
builder =>
builder.AddService(ServiceLifetime.Singleton, sp => GetModel())
.AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, sp =>
ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", config))
.AddService(ServiceLifetime.Singleton, sp => new CaseInsensitiveResolver()));
}

private static IEdmModel GetModel()
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,16 @@
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.

using System.Collections.Generic;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Dispatcher;
using System.Web.OData;
using System.Web.OData.Builder;
using System.Web.OData.Extensions;
using System.Web.OData.Routing;
using System.Web.OData.Routing.Conventions;
using Microsoft.OData;
using Microsoft.OData.Edm;
using Microsoft.OData.UriParser;
using Newtonsoft.Json.Linq;
Expand Down Expand Up @@ -36,8 +39,11 @@ public static void UpdateConfiguration(HttpConfiguration config)

config.Services.Replace(typeof(IAssembliesResolver), resolver);
config.Routes.Clear();
config.SetUriResolver(new UnqualifiedODataUriResolver());
config.MapODataServiceRoute("odata", "odata", GetModel());
config.MapODataServiceRoute("odata", "odata", builder =>
builder.AddService(ServiceLifetime.Singleton, sp => GetModel())
.AddService<IEnumerable<IODataRoutingConvention>>(ServiceLifetime.Singleton, sp =>
ODataRoutingConventions.CreateDefaultWithAttributeRouting("odata", config))
.AddService<ODataUriResolver>(ServiceLifetime.Singleton, sp => new UnqualifiedODataUriResolver()));
}

private static IEdmModel GetModel()
Expand Down
Loading

0 comments on commit 5a14de6

Please sign in to comment.