private GraphModelImpl(IGraphElementModel verticesModel, IGraphElementModel edgesModel, IGraphElementPropertyModel propertiesModel, IImmutableSet <Type> nativeTypes) { VerticesModel = verticesModel; EdgesModel = edgesModel; PropertiesModel = propertiesModel; NativeTypes = nativeTypes; }
internal static object GetIdentifier(this IGraphElementPropertyModel model, PropertyMetadata metadata) { return(model.SpecialNames .TryGetValue(metadata.Name) .Map(x => (object)x) .IfNone(metadata.Name)); }
public KeyLookup(IGraphElementPropertyModel model) { _model = model; _configuredTs = new HashSet <T>(model.MemberMetadata .Where(kvp => kvp.Value.Key.RawKey is T) .ToDictionary(kvp => (T)kvp.Value.Key.RawKey, kvp => kvp.Key) .Keys); }
internal static Key GetKey(this IGraphElementPropertyModel model, MemberInfo member) { return(KeyLookups .GetValue( model, closureModel => new KeyLookup(closureModel)) .GetKey(member)); }
internal static object GetIdentifier(this IGraphElementPropertyModel model, MemberInfo member) { return(IdentifierDict .GetOrCreateValue(model) .GetOrAdd( member, closureMember => { if (closureMember.DeclaringType != null && closureMember.DeclaringType.IsInterface) { var interfaceGetter = ((PropertyInfo)closureMember).GetMethod; var implementingGetters = model.Metadata.Keys .Select(x => x.DeclaringType) .Distinct() .Where(declaringType => closureMember.DeclaringType.IsAssignableFrom(declaringType)) .Select(declaringType => { var interfaceMap = declaringType .GetInterfaceMap(closureMember.DeclaringType); var index = Array.IndexOf( interfaceMap.InterfaceMethods, interfaceGetter); return interfaceMap.TargetMethods[index]; }) .ToArray(); if (implementingGetters.Length > 0) { var identifiers = model.Metadata.Keys .Where(m => closureMember.DeclaringType.IsAssignableFrom(m.DeclaringType)) .OfType <PropertyInfo>() .Where(p => implementingGetters.Contains(p.GetMethod, MemberInfoEqualityComparer.Instance)) .Select(model.GetIdentifier) .Distinct() .ToArray(); if (identifiers.Length > 1) { throw new InvalidOperationException($"Contradicting identifiers found for member {closureMember}."); } if (identifiers.Length == 1) { return identifiers[0]; } } } return model.GetIdentifier(model.Metadata .TryGetValue(closureMember) .IfNone(new PropertyMetadata(closureMember.Name))); })); }
internal static Key GetKey(this IGraphElementPropertyModel model, Expression expression) { if (expression is LambdaExpression lambdaExpression) { return(model.GetKey(lambdaExpression.Body)); } if (expression.Strip() is MemberExpression memberExpression) { return(memberExpression.TryGetWellKnownMember() == WellKnownMember.PropertyValue && memberExpression.Expression is MemberExpression sourceMemberExpression ? model.GetKey(sourceMemberExpression.Member) : model.GetKey(memberExpression.Member)); } throw new ExpressionNotSupportedException(expression); }
public static IGraphElementPropertyModel ConfigureElement <TElement>(this IGraphElementPropertyModel model, Func <IPropertyMetadataConfigurator <TElement>, IImmutableDictionary <MemberInfo, PropertyMetadata> > action) where TElement : class { return(model.ConfigureMetadata( metadata => action(new PropertyMetadataConfigurator <TElement>(metadata)))); }
public static IGraphElementPropertyModel WithLowerCaseNames(this IGraphElementPropertyModel model) { return(model.ConfigureNames((member, name) => name.ToLower())); }
public static IGraphElementPropertyModel UseCamelCaseNames(this IGraphElementPropertyModel model) { return(model.ConfigureNames((member, name) => name.ToCamelCase())); }
public static IGraphElementPropertyModel ConfigureNames(this IGraphElementPropertyModel model, Func <MemberInfo, string, string> overrideTransformation) { return(model.ConfigureMetadata(_ => _.ConfigureNames(overrideTransformation))); }
private static IGraphElementPropertyModel ConfigureMetadata(this IGraphElementPropertyModel model, Func <IImmutableDictionary <MemberInfo, PropertyMetadata>, IImmutableDictionary <MemberInfo, PropertyMetadata> > transformation) { return(new GraphElementPropertyModelImpl( transformation(model.Metadata), model.SpecialNames)); }
//TODO: Honor Mask. internal override IDictionary <string, object> GetMetaProperties(IGraphElementPropertyModel model) => Properties? .Serialize(model, SerializationBehaviour.Default) .Where(x => x.identifier is string) .ToDictionary(x => (string)x.identifier, x => x.value) ?? (IDictionary <string, object>)ImmutableDictionary <string, object> .Empty;
public GremlinContractResolver(IGraphElementPropertyModel model) { _model = model; }
public GraphModelImpl( IGraphElementModel verticesModel, IGraphElementModel edgesModel, IGraphElementPropertyModel propertiesModel) : this(verticesModel, edgesModel, propertiesModel, DefaultNativeTypes) { }
internal override IDictionary <string, object> GetMetaProperties(IGraphElementPropertyModel model) => Properties;
internal abstract IDictionary <string, object> GetMetaProperties(IGraphElementPropertyModel model);
public GraphModelImpl(IGraphElementModel verticesModel, IGraphElementModel edgesModel, IGraphElementPropertyModel propertiesModel) { VerticesModel = verticesModel; EdgesModel = edgesModel; PropertiesModel = propertiesModel; }
public static IGraphElementPropertyModel ConfigureElement <TElement>(this IGraphElementPropertyModel model, Func <IMemberMetadataConfigurator <TElement>, IImmutableDictionary <MemberInfo, MemberMetadata> > transformation) { return(model.ConfigureMemberMetadata( metadata => transformation(new MemberMetadataConfigurator <TElement>(metadata)))); }