Skip to content

Wrapped the contract after user-adjustable settings #705

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 10, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 7 additions & 5 deletions src/Nest/ExposedInternals/NestSerializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,16 @@ internal JsonSerializerSettings CreateSettings(JsonConverter piggyBackJsonConver
var piggyBackState = new JsonConverterPiggyBackState { ActualJsonConverter = piggyBackJsonConverter };
var settings = new JsonSerializerSettings()
{
ContractResolver = new ElasticContractResolver(this._settings) { PiggyBackState = piggyBackState },
ContractResolver = new ElasticContractResolver(this._settings),
DefaultValueHandling = DefaultValueHandling.Include,
NullValueHandling = NullValueHandling.Ignore
};

if (_settings.ModifyJsonSerializerSettings != null)
_settings.ModifyJsonSerializerSettings(settings);

settings.ContractResolver = new SettingsContractResolver(settings.ContractResolver, this._settings) { PiggyBackState = piggyBackState };

return settings;
}

Expand All @@ -111,11 +113,11 @@ public string SerializeBulkDescriptor(BulkDescriptor bulkDescriptor)
{
var command = operation._Operation;
var index = operation._Index
?? inferrer.IndexName(bulkDescriptor._Index)
?? inferrer.IndexName(operation._ClrType);
?? inferrer.IndexName(bulkDescriptor._Index)
?? inferrer.IndexName(operation._ClrType);
var typeName = operation._Type
?? inferrer.TypeName(bulkDescriptor._Type)
?? inferrer.TypeName(operation._ClrType);
?? inferrer.TypeName(bulkDescriptor._Type)
?? inferrer.TypeName(operation._ClrType);

var id = operation.GetIdForObject(inferrer);
operation._Index = index;
Expand Down
3 changes: 2 additions & 1 deletion src/Nest/Nest.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -822,6 +822,7 @@
<Compile Include="Enums\NamingConvention.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resolvers\PropertyNameResolver.cs" />
<Compile Include="Resolvers\SettingsContractResolver.cs" />
<Compile Include="Resolvers\TypeNameMarker.cs" />
<Compile Include="Resolvers\TypeNameMarkerExtensions.cs" />
<Compile Include="Resolvers\TypeNameResolver.cs" />
Expand Down Expand Up @@ -874,4 +875,4 @@
<Target Name="AfterBuild">
</Target>
-->
</Project>
</Project>
4 changes: 2 additions & 2 deletions src/Nest/Resolvers/Converters/ConcreteTypeConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ public ConcreteTypeConverter(Func<dynamic, Hit<dynamic>, Type> concreteTypeSelec

public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
if (elasticContractResolver != null && elasticContractResolver.PiggyBackState != null
&& elasticContractResolver.PiggyBackState.ActualJsonConverter != null)
{
Expand Down Expand Up @@ -161,7 +161,7 @@ internal static Type GetConcreteTypeUsingSelector<T>(
JObject jObject, out object selection)
where T: class
{
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
var baseType = realConcreteConverter._baseType;
var selector = realConcreteConverter._concreteTypeSelector;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;

IDictionary dictionary = (IDictionary) value;
writer.WriteStartObject();
Expand Down
2 changes: 1 addition & 1 deletion src/Nest/Resolvers/Converters/FieldNameFilterConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
2 changes: 1 addition & 1 deletion src/Nest/Resolvers/Converters/FieldNameQueryConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IGeoBoundingBoxFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IGeoDistanceFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IGeoDistanceRangeFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as IPrefixFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as ITermFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var f = value as ITermsBaseFilter;
if (f == null || (f.IsConditionless && !f.IsVerbatim)) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
2 changes: 1 addition & 1 deletion src/Nest/Resolvers/Converters/IndexNameMarkerConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
return;
}

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract != null && contract.ConnectionSettings != null)
{
var indexName = contract.Infer.IndexName(marker);
Expand Down
2 changes: 1 addition & 1 deletion src/Nest/Resolvers/Converters/IndexSettingsConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ private static void WriteWarmers(JsonWriter writer, JsonSerializer serializer, I
private static void WriteMappings(JsonWriter writer, JsonSerializer serializer, IndexSettings indexSettings)
{
if (indexSettings.Mappings.Count <= 0) return;
var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null || contract.ConnectionSettings == null) return;

writer.WritePropertyName("mappings");
Expand Down
4 changes: 2 additions & 2 deletions src/Nest/Resolvers/Converters/MultiGetHitConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ private static void CreateMultiHit<T>(MultiHitTuple tuple, JsonSerializer serial
var reader = tuple.Hit.CreateReader();
serializer.Populate(reader, hit);

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
var settings = contract.ConnectionSettings;
var f = new FieldSelection<T>(settings);
var source = tuple.Hit["fields"];
Expand All @@ -59,7 +59,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
{
if (this._descriptor == null)
{
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
if (elasticContractResolver == null)
return new MultiGetResponse { IsValid = false };
var piggyBackState = elasticContractResolver.PiggyBackState;
Expand Down
2 changes: 1 addition & 1 deletion src/Nest/Resolvers/Converters/MultiSearchConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ public override object ReadJson(JsonReader reader, Type objectType, object exist
{
if (this._settings == null)
{
var elasticContractResolver = serializer.ContractResolver as ElasticContractResolver;
var elasticContractResolver = serializer.ContractResolver as SettingsContractResolver;
if (elasticContractResolver == null)
return new MultiSearchResponse { IsValid = false };
var piggyBackState = elasticContractResolver.PiggyBackState;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
if (fieldName == null)
return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
var sq = value as ISpanTermQuery;
if (sq == null) return;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract == null)
return;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s

string field = null;

var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract != null && contract.ConnectionSettings != null)
field = contract.Infer.PropertyPath(t.Field);

Expand Down
2 changes: 1 addition & 1 deletion src/Nest/Resolvers/Converters/TypeNameMarkerConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public override void WriteJson(JsonWriter writer, object value, JsonSerializer s
writer.WriteNull();
return;
}
var contract = serializer.ContractResolver as ElasticContractResolver;
var contract = serializer.ContractResolver as SettingsContractResolver;
if (contract != null && contract.ConnectionSettings != null)
{
var typeName = contract.Infer.TypeName(marker);
Expand Down
9 changes: 0 additions & 9 deletions src/Nest/Resolvers/ElasticContractResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,10 @@ public class ElasticContractResolver : DefaultContractResolver
/// </summary>
public IConnectionSettingsValues ConnectionSettings { get; private set; }

public ElasticInferrer Infer { get; private set; }

/// <summary>
/// Signals to custom converter that it can get serialization state from one of the converters
/// Ugly but massive performance gain
/// </summary>
internal JsonConverterPiggyBackState PiggyBackState { get; set; }

public ElasticContractResolver(IConnectionSettingsValues connectionSettings)
: base(true)
{
this.ConnectionSettings = connectionSettings;
this.Infer = new ElasticInferrer(this.ConnectionSettings);
}

protected override JsonContract CreateContract(Type objectType)
Expand Down
38 changes: 38 additions & 0 deletions src/Nest/Resolvers/SettingsContractResolver.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Nest.Resolvers
{
class SettingsContractResolver : IContractResolver
{
/// <summary>
/// ConnectionSettings can be requested by JsonConverter's.
/// </summary>
public IConnectionSettingsValues ConnectionSettings { get; private set; }

public ElasticInferrer Infer { get; private set; }

private IContractResolver _wrapped;

/// <summary>
/// Signals to custom converter that it can get serialization state from one of the converters
/// Ugly but massive performance gain
/// </summary>
internal JsonConverterPiggyBackState PiggyBackState { get; set; }

public SettingsContractResolver(IContractResolver wrapped, IConnectionSettingsValues connectionSettings)
{
this.ConnectionSettings = connectionSettings;
this.Infer = new ElasticInferrer(this.ConnectionSettings);
this._wrapped = wrapped;
}

public JsonContract ResolveContract(Type type)
{
return this._wrapped.ResolveContract(type);
}
}
}