Skip to content

Adding support for local metadata on properties. #2320

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 4 commits into from
Oct 24, 2016
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using Elasticsearch.Net;
Expand Down Expand Up @@ -32,5 +33,7 @@ public static ElasticsearchPropertyAttributeBase From(MemberInfo memberInfo)
{
return memberInfo.GetCustomAttribute<ElasticsearchPropertyAttributeBase>(true);
}

IDictionary<string, object> IPropertyWithLocalMetadata.LocalMetadata { get; set; }
}
}
19 changes: 13 additions & 6 deletions src/Nest/Mapping/Types/PropertyBase.cs
Original file line number Diff line number Diff line change
@@ -1,24 +1,30 @@
using System.Reflection;
using System.Collections.Generic;
using System.Reflection;
using Newtonsoft.Json;

namespace Nest
{
[JsonObject(MemberSerialization.OptIn)]
[ContractJsonConverter(typeof(PropertyJsonConverter))]
public interface IProperty : IFieldMapping
public interface IProperty : IFieldMapping, IPropertyWithLocalMetadata
{
PropertyName Name { get; set; }

[JsonProperty("type")]
TypeName Type { get; set; }
}
}

public interface IPropertyWithClrOrigin
public interface IPropertyWithClrOrigin
{
PropertyInfo ClrOrigin { get; set; }
}

public abstract class PropertyBase : IProperty, IPropertyWithClrOrigin
public interface IPropertyWithLocalMetadata {
[JsonIgnore]
IDictionary<string, object> LocalMetadata { get; set; }
}

public abstract class PropertyBase : IProperty, IPropertyWithClrOrigin
{
protected PropertyBase(TypeName typeName)
{
Expand All @@ -28,5 +34,6 @@ protected PropertyBase(TypeName typeName)
public PropertyName Name { get; set; }
public virtual TypeName Type { get; set; }
PropertyInfo IPropertyWithClrOrigin.ClrOrigin { get; set; }
}
IDictionary<string, object> IPropertyWithLocalMetadata.LocalMetadata { get; set; }
}
}
3 changes: 3 additions & 0 deletions src/Nest/Mapping/Types/PropertyDescriptorBase.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq.Expressions;

namespace Nest
Expand All @@ -17,5 +18,7 @@ public abstract class PropertyDescriptorBase<TDescriptor, TInterface, T>
public TDescriptor Name(PropertyName name) => Assign(a => a.Name = name);

public TDescriptor Name(Expression<Func<T, object>> objectPath) => Assign(a => a.Name = objectPath);

IDictionary<string, object> IPropertyWithLocalMetadata.LocalMetadata { get; set; }
}
}
68 changes: 34 additions & 34 deletions src/Nest/Mapping/Visitor/IMappingVisitor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -5,64 +5,64 @@ namespace Nest
public interface IMappingVisitor
{
int Depth { get; set; }
void Visit(TypeMapping mapping);
void Visit(ITypeMapping mapping);
#pragma warning disable 618
void Visit(StringProperty property);
void Visit(IStringProperty property);
#pragma warning restore 618
void Visit(TextProperty property);
void Visit(KeywordProperty property);
void Visit(DateProperty property);
void Visit(BooleanProperty property);
void Visit(BinaryProperty property);
void Visit(ObjectProperty property);
void Visit(NestedProperty property);
void Visit(IpProperty property);
void Visit(GeoPointProperty property);
void Visit(GeoShapeProperty property);
void Visit(AttachmentProperty property);
void Visit(NumberProperty property);
void Visit(CompletionProperty property);
void Visit(Murmur3HashProperty property);
void Visit(TokenCountProperty property);
void Visit(ITextProperty property);
void Visit(IKeywordProperty property);
void Visit(IDateProperty property);
void Visit(IBooleanProperty property);
void Visit(IBinaryProperty property);
void Visit(IObjectProperty property);
void Visit(INestedProperty property);
void Visit(IIpProperty property);
void Visit(IGeoPointProperty property);
void Visit(IGeoShapeProperty property);
void Visit(IAttachmentProperty property);
void Visit(INumberProperty property);
void Visit(ICompletionProperty property);
void Visit(IMurmur3HashProperty property);
void Visit(ITokenCountProperty property);
}

public class NoopMappingVisitor : IMappingVisitor
{
public virtual int Depth { get; set; }

public virtual void Visit(TypeMapping mapping) { }
public virtual void Visit(ITypeMapping mapping) { }

#pragma warning disable 618
public virtual void Visit(StringProperty property ) { }
public virtual void Visit(IStringProperty property ) { }
#pragma warning restore 618
public virtual void Visit(TextProperty property) { }
public virtual void Visit(ITextProperty property) { }

public virtual void Visit(KeywordProperty property) { }
public virtual void Visit(IKeywordProperty property) { }

public virtual void Visit(DateProperty property) { }
public virtual void Visit(IDateProperty property) { }

public virtual void Visit(BooleanProperty property) { }
public virtual void Visit(IBooleanProperty property) { }

public virtual void Visit(BinaryProperty property) { }
public virtual void Visit(IBinaryProperty property) { }

public virtual void Visit(NumberProperty property) { }
public virtual void Visit(INumberProperty property) { }

public virtual void Visit(ObjectProperty property) { }
public virtual void Visit(IObjectProperty property) { }

public virtual void Visit(NestedProperty property) { }
public virtual void Visit(INestedProperty property) { }

public virtual void Visit(IpProperty property) { }
public virtual void Visit(IIpProperty property) { }

public virtual void Visit(GeoPointProperty property) { }
public virtual void Visit(IGeoPointProperty property) { }

public virtual void Visit(GeoShapeProperty property) { }
public virtual void Visit(IGeoShapeProperty property) { }

public virtual void Visit(AttachmentProperty property) { }
public virtual void Visit(IAttachmentProperty property) { }

public virtual void Visit(CompletionProperty property) { }
public virtual void Visit(ICompletionProperty property) { }

public virtual void Visit(Murmur3HashProperty property) { }
public virtual void Visit(IMurmur3HashProperty property) { }

public virtual void Visit(TokenCountProperty property) { }
public virtual void Visit(ITokenCountProperty property) { }
}
}
34 changes: 17 additions & 17 deletions src/Nest/Mapping/Visitor/MappingWalker.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ public void Accept(IGetMappingResponse response)
}
}

public void Accept(TypeMapping mapping)
public void Accept(ITypeMapping mapping)
{
if (mapping == null) return;
this._visitor.Visit(mapping);
Expand All @@ -41,20 +41,20 @@ public void Accept(IProperties properties)
switch (type.Name)
{
case "text":
var t = field as TextProperty;
var t = field as ITextProperty;
if (t == null) continue;
this._visitor.Visit(t);
this.Accept(t.Fields);
break;
case "keyword":
var k = field as KeywordProperty;
var k = field as IKeywordProperty;
if (k == null) continue;
this._visitor.Visit(k);
this.Accept(k.Fields);
break;
case "string":
#pragma warning disable 618
var s = field as StringProperty;
var s = field as IStringProperty;
#pragma warning restore 618
if (s == null) continue;
this._visitor.Visit(s);
Expand All @@ -66,83 +66,83 @@ public void Accept(IProperties properties)
case "short":
case "integer":
case "long":
var nu = field as NumberProperty;
var nu = field as INumberProperty;
if (nu == null) continue;
this._visitor.Visit(nu);
this.Accept(nu.Fields);
break;
case "date":
var d = field as DateProperty;
var d = field as IDateProperty;
if (d == null) continue;
this._visitor.Visit(d);
this.Accept(d.Fields);
break;
case "boolean":
var bo = field as BooleanProperty;
var bo = field as IBooleanProperty;
if (bo == null) continue;
this._visitor.Visit(bo);
this.Accept(bo.Fields);
break;
case "binary":
var bi = field as BinaryProperty;
var bi = field as IBinaryProperty;
if (bi == null) continue;
this._visitor.Visit(bi);
this.Accept(bi.Fields);
break;
case "object":
var o = field as ObjectProperty;
var o = field as IObjectProperty;
if (o == null) continue;
this._visitor.Visit(o);
this._visitor.Depth += 1;
this.Accept(o.Properties);
this._visitor.Depth -= 1;
break;
case "nested":
var n = field as NestedProperty;
var n = field as INestedProperty;
if (n == null) continue;
this._visitor.Visit(n);
this._visitor.Depth += 1;
this.Accept(n.Properties);
this._visitor.Depth -= 1;
break;
case "ip":
var i = field as IpProperty;
var i = field as IIpProperty;
if (i == null) continue;
this._visitor.Visit(i);
this.Accept(i.Fields);
break;
case "geo_point":
var gp = field as GeoPointProperty;
var gp = field as IGeoPointProperty;
if (gp == null) continue;
this._visitor.Visit(gp);
this.Accept(gp.Fields);
break;
case "geo_shape":
var gs = field as GeoShapeProperty;
var gs = field as IGeoShapeProperty;
if (gs == null) continue;
this._visitor.Visit(gs);
this.Accept(gs.Fields);
break;
case "attachment":
var a = field as AttachmentProperty;
var a = field as IAttachmentProperty;
if (a == null) continue;
this._visitor.Visit(a);
this.Accept(a.Fields);
break;
case "completion":
var c = field as CompletionProperty;
var c = field as ICompletionProperty;
if (c == null) continue;
this._visitor.Visit(c);
this.Accept(c.Fields);
break;
case "murmur3":
var mm = field as Murmur3HashProperty;
var mm = field as IMurmur3HashProperty;
if (mm == null) continue;
this._visitor.Visit(mm);
this.Accept(mm.Fields);
break;
case "token_count":
var tc = field as TokenCountProperty;
var tc = field as ITokenCountProperty;
if (tc == null) continue;
this._visitor.Visit(tc);
this.Accept(tc.Fields);
Expand Down
Loading