Skip to content

Commit 3ee82e4

Browse files
committed
Move contracts to ElasticcontractResolver
1 parent bfc00fd commit 3ee82e4

File tree

3 files changed

+57
-52
lines changed

3 files changed

+57
-52
lines changed

src/Nest/ElasticClient-MappingIndex.cs

Lines changed: 42 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,18 @@ public IIndexSettingsResponse GetIndexSettings(string index)
3737
var settingsObject = o.First.First.First.First;
3838

3939
var settingsContainer = new JObject();
40+
// In indexsettings response all analyzers etc are delivered as settings so need to split up the settings key and make proper json
4041
foreach (JProperty s in settingsObject.Children<JProperty>())
4142
{
4243
var name = StripIndex.Replace(s.Name, "");
4344
if (name.StartsWith("analysis"))
4445
{
4546
var key = name.Split('.');
46-
WriteJObject(settingsContainer, key, s.Value);
47+
RewriteIndexSettingsResponseToIndexSettingsJSon(settingsContainer, key, s.Value);
4748
}
4849
else
4950
{
50-
WriteJObject(settingsContainer, new[] { name }, s.Value);
51+
RewriteIndexSettingsResponseToIndexSettingsJSon(settingsContainer, new[] { name }, s.Value);
5152
}
5253
}
5354

@@ -59,45 +60,6 @@ public IIndexSettingsResponse GetIndexSettings(string index)
5960
return response;
6061
}
6162

62-
private JToken WriteJObject(JContainer container, string[] key, JToken value)
63-
{
64-
var thisKey = key.First();
65-
int indexer;
66-
if (key.Length > 2 || (key.Length == 2 && !int.TryParse(key.Last(), out indexer)))
67-
{
68-
var property = (JContainer)((JObject)container).GetValue(thisKey);
69-
if (property == null)
70-
{
71-
property = new JObject();
72-
((JObject)container).Add(thisKey, property);
73-
}
74-
var innerValue = WriteJObject(property, key.Skip(1).ToArray(), value);
75-
76-
//property.Add(new JValue(innerValue));
77-
//return property;
78-
return property;
79-
}
80-
81-
if (key.Length == 2 && int.TryParse(key.Last(), out indexer))
82-
{
83-
var property = ((JObject)container).Property(thisKey);
84-
if (property == null)
85-
{
86-
property = new JProperty(thisKey, new JArray());
87-
container.Add(property);
88-
}
89-
var jArray = (JArray)property.Value;
90-
jArray.Add(value);
91-
return property;
92-
}
93-
94-
{
95-
var property = new JProperty(thisKey, value);
96-
container.Add(property);
97-
return property;
98-
}
99-
}
100-
10163
/// <summary>
10264
/// Update the index settings for the default index
10365
/// </summary>
@@ -152,5 +114,44 @@ public IIndicesResponse DeleteIndex(string index)
152114
return r;
153115
}
154116

117+
/// <summary>
118+
/// Rewrites the index settings response to index settings json.
119+
/// </summary>
120+
/// <param name="container">The container.</param>
121+
/// <param name="key">The key.</param>
122+
/// <param name="value">The value.</param>
123+
private void RewriteIndexSettingsResponseToIndexSettingsJSon(JContainer container, string[] key, JToken value)
124+
{
125+
var thisKey = key.First();
126+
int indexer;
127+
128+
if (key.Length > 2 || (key.Length == 2 && !int.TryParse(key.Last(), out indexer)))
129+
{
130+
var property = (JContainer)((JObject)container).GetValue(thisKey);
131+
if (property == null)
132+
{
133+
property = new JObject();
134+
((JObject)container).Add(thisKey, property);
135+
}
136+
RewriteIndexSettingsResponseToIndexSettingsJSon(property, key.Skip(1).ToArray(), value);
137+
}
138+
else if (key.Length == 2 && int.TryParse(key.Last(), out indexer))
139+
{
140+
var property = ((JObject)container).Property(thisKey);
141+
if (property == null)
142+
{
143+
property = new JProperty(thisKey, new JArray());
144+
container.Add(property);
145+
}
146+
var jArray = (JArray)property.Value;
147+
jArray.Add(value);
148+
}
149+
else
150+
{
151+
var property = new JProperty(thisKey, value);
152+
container.Add(property);
153+
}
154+
}
155+
155156
}
156157
}

src/Nest/ExposedInternals/ElasticSerializer.cs

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,6 @@ public class ElasticSerializer
1818
private readonly PropertyNameResolver _propertyNameResolver;
1919
private readonly JsonSerializerSettings _serializationSettings;
2020

21-
private static readonly JsonConverter[] _defaultConverters =
22-
{
23-
new AnalyzerCollectionConverter(),
24-
new TokenFilterCollectionConverter(),
25-
new TokenizerCollectionConverter(),
26-
new CharFilterCollectionConverter()
27-
};
28-
2921
public ElasticSerializer(IConnectionSettings settings)
3022
{
3123
this._settings = settings;
@@ -103,15 +95,15 @@ internal T DeserializeInternal<T>(
10395
internal JsonSerializerSettings CreateSettings(IList<JsonConverter> extraConverters = null, JsonConverter piggyBackJsonConverter = null)
10496
{
10597
var converters = extraConverters.HasAny()
106-
? extraConverters.Concat(_defaultConverters)
107-
: _defaultConverters;
98+
? extraConverters.ToList()
99+
: null;
108100
var piggyBackState = new JsonConverterPiggyBackState { ActualJsonConverter = piggyBackJsonConverter };
109101
var settings = new JsonSerializerSettings()
110102
{
111103
ContractResolver = new ElasticContractResolver(this._settings) { PiggyBackState = piggyBackState },
112104
DefaultValueHandling = DefaultValueHandling.Include,
113105
NullValueHandling = NullValueHandling.Ignore,
114-
Converters = converters.ToList(),
106+
Converters = converters,
115107
};
116108

117109
if (_settings.ModifyJsonSerializerSettings != null)

src/Nest/Resolvers/ElasticContractResolver.cs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,18 @@ protected override JsonContract CreateContract(Type objectType)
5555
if (objectType == typeof(MultiSearchResponse))
5656
contract.Converter = new MultiSearchConverter();
5757

58+
if (objectType == typeof(IDictionary<string, AnalyzerBase>))
59+
contract.Converter = new AnalyzerCollectionConverter();
60+
61+
if (objectType == typeof(IDictionary<string, TokenizerBase>))
62+
contract.Converter = new TokenFilterCollectionConverter();
63+
64+
if (objectType == typeof(MultiSearchResponse))
65+
contract.Converter = new TokenizerCollectionConverter();
66+
67+
if (objectType == typeof(IDictionary<string, CharFilterBase>))
68+
contract.Converter = new CharFilterCollectionConverter();
69+
5870
if (this.ConnectionSettings.ContractConverters.HasAny())
5971
{
6072
foreach (var c in this.ConnectionSettings.ContractConverters)

0 commit comments

Comments
 (0)