Exemplo n.º 1
0
 private IEnumerable <BindingMetadata> CreateProperties(IMetadataBuilderContext context, BindingMetadata parent)
 {
     foreach (IRelationMetadata attribute in parent.Relation.Properties)
     {
         yield return(this.CreateBaseMetadata(context, attribute, parent));
     }
 }
Exemplo n.º 2
0
        private IJsonMetadata GetMetadata(IMetadataBuilderContext context, MetadataIdentity identity)
        {
            MetadataIdentity  parentIdentity = identity.Parent();
            IJsonMetadata     parent         = context.GetMetadata <IJsonMetadata>(parentIdentity.Name) ?? this.GetMetadata(context, parentIdentity);
            IRelationMetadata relation       = identity.GetMetadata <IRelationMetadata>();

            if (parent == null || relation == null)
            {
                return(null);
            }

            JsonMetadata metadata = new JsonMetadata(relation);

            if (this.HasJsonAttribute(relation) || relation.HasFlag(RelationMetadataFlags.Item))
            {
                metadata.MemberOf = metadata;
                metadata.IsRoot   = true;
                metadata.Path     = "$";
            }
            else
            {
                metadata.MemberOf = parent.MemberOf;
                metadata.IsRoot   = false;
                metadata.Path     = $"{parent.Path}.{this.GetPropertyNameFromContract(metadata)}";
            }

            context.AddMetadata <IJsonMetadata>(metadata);

            return(metadata);
        }
 private IEnumerable <ProjectionMetadata> CreateProperties(IMetadataBuilderContext context, ProjectionMetadata parent)
 {
     foreach (IRelationMetadata property in parent.Relation.Properties)
     {
         yield return(this.CreateAndAddMetadata(context, property));
     }
 }
Exemplo n.º 4
0
 private IEnumerable <TableMetadata> CreateProperties(IMetadataBuilderContext context, TableMetadata parent)
 {
     foreach (IRelationMetadata property in parent.Relation.Properties)
     {
         yield return(this.CreateBaseMetadata(context, property, parent));
     }
 }
        private ProjectionMetadata CreateAndAddMetadata(IMetadataBuilderContext context, IRelationMetadata relation)
        {
            ProjectionMetadata metadata = this.CreateBaseMetadata(context, relation);

            context.AddMetadata <IProjectionMetadata>(metadata);

            return(metadata);
        }
        private TableMetadata CreateItem(IMetadataBuilderContext context, TableMetadata parent)
        {
            if (parent.Relation.Item == null)
            {
                return(null);
            }

            return(this.CreateMetadata(context, parent.Relation.Item, parent));
        }
Exemplo n.º 7
0
        public CustomMetadata GetMetadata(IMetadataBuilderContext context)
        {
            if (context.Relation.Parent != null)
            {
                return(context.Relation.Parent.Identity.Schema.Lookup <CustomMetadata>());
            }

            return(null);
        }
        private IEnumerable <RelationMetadata> CreateProperties(IMetadataBuilderContext context, RelationMetadata parent)
        {
            IEnumerable <MemberInfo> members = parent.Type.GetMembers(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);

            foreach (MemberInfo member in members.Where(m => this.IsFieldOrNonIndexedProperty(m)))
            {
                yield return(this.CreateProperty(context, parent, member));
            }
        }
Exemplo n.º 9
0
        public void Initialize(IMetadataBuilderContext context)
        {
            JsonMetadata metadata = new JsonMetadata(context.Relation);

            metadata.MemberOf = metadata;
            metadata.Path     = "$";
            metadata.IsRoot   = true;

            context.AddMetadata <IJsonMetadata>(metadata);
        }
        private ProjectionMetadata CreateBaseMetadata(IMetadataBuilderContext context, IRelationMetadata relation)
        {
            ProjectionMetadata metadata = new ProjectionMetadata(relation);

            metadata.Properties = this.CreateLazy(() => this.CreateProperties(context, metadata));
            metadata.Item       = this.CreateItem(context, metadata);
            metadata.Flags      = this.GetFlags(metadata);

            return(metadata);
        }
        public void Initialize(IMetadataBuilderContext context)
        {
            IRelationMetadata relation = context.Identity.GetMetadata <IRelationMetadata>();

            if (relation == null)
            {
                throw MetadataNotFoundException.FromMetadata <IRelationMetadata>(context.Identity);
            }

            this.CreateAndAddMetadata(context, relation);
        }
Exemplo n.º 12
0
        private IEnumerable <ReferenceMetadata> CreateProperties(IMetadataBuilderContext context, ReferenceMetadata parent)
        {
            foreach (IRelationMetadata attribute in parent.Relation.Properties)
            {
                ReferenceMetadata metadata = this.CreateBaseMetadata(context, attribute, parent);

                context.AddMetadata <IReferenceMetadata>(metadata);

                yield return(metadata);
            }
        }
Exemplo n.º 13
0
        public CustomMetadata GetMetadata(IMetadataBuilderContext context)
        {
            MetadataIdentity parentIdentity = context.Identity.Parent();

            if (parentIdentity != null)
            {
                return(context.Schema.GetMetadata <CustomMetadata>(parentIdentity.Name));
            }

            return(null);
        }
Exemplo n.º 14
0
        public void Initialize(IMetadataBuilderContext context)
        {
            IRelationMetadata relation = context.Schema.GetMetadata <IRelationMetadata>(context.Identity.Name);

            if (relation == null)
            {
                throw MetadataNotFoundException.FromMetadata <IRelationMetadata>(context.Identity);
            }

            this.CreateBaseMetadata(context, relation, null);
        }
Exemplo n.º 15
0
        private ProjectionMetadata CreateItem(IMetadataBuilderContext context, ProjectionMetadata parent)
        {
            if (parent.Relation.Item != null)
            {
                ProjectionMetadata metadata = this.GetMetadata(context, parent.Relation.Item, parent);

                metadata.List = parent;

                return(metadata);
            }

            return(null);
        }
Exemplo n.º 16
0
        private ReferenceMetadata CreateItem(IMetadataBuilderContext context, ReferenceMetadata parent)
        {
            if (parent.Relation.Item != null)
            {
                ReferenceMetadata metadata = this.CreateBaseMetadata(context, parent.Relation.Item, parent);

                context.AddMetadata <IReferenceMetadata>(metadata);

                return(metadata);
            }

            return(null);
        }
Exemplo n.º 17
0
        private TableMetadata CreateBaseMetadata(IMetadataBuilderContext context, IRelationMetadata attribute, TableMetadata parent)
        {
            TableMetadata metadata = new TableMetadata(attribute);

            metadata.Item       = this.CreateItem(context, metadata);
            metadata.Properties = new Lazy <IReadOnlyList <TableMetadata> >(() => this.CreateProperties(context, metadata).ToList());

            this.AddTableMetadata(metadata);
            this.AddColumnMetadata(metadata, parent);

            context.AddMetadata <ITableMetadata>(metadata);

            return(metadata);
        }
        private TableMetadata CreateMetadata(IMetadataBuilderContext context, IRelationMetadata relation, TableMetadata parent)
        {
            TableMetadata metadata = new TableMetadata(relation);

            metadata.Item = this.CreateItem(context, metadata);

            this.ApplyContracts(metadata, parent);

            metadata.Properties = new Lazy <IReadOnlyList <TableMetadata> >(() => this.CreateProperties(context, metadata).ToList());

            context.AddMetadata <ITableMetadata>(metadata);

            return(metadata);
        }
Exemplo n.º 19
0
        private RelationMetadata CreateItem(IMetadataBuilderContext context, RelationMetadata parent)
        {
            IRelationListContract contract = this.GetListContract(parent);

            if (contract == null)
            {
                return(null);
            }

            MetadataIdentity itemId = parent.Identity.Child(contract.ItemName ?? "Item");

            RelationMetadata metadata = new RelationMetadata(itemId)
            {
                Parent     = parent,
                Type       = contract.ItemType,
                Flags      = RelationMetadataFlags.Item | RelationMetadataFlags.Property,
                ReadIndex  = contract.ReadIndex,
                WriteIndex = contract.WriteIndex,
            };

            metadata.MemberOf    = metadata;
            metadata.Item        = this.CreateItem(context, metadata);
            metadata.Properties  = this.CreateLazy(() => this.CreateProperties(context, metadata));
            metadata.Annotations = this.CreateAnnotations(metadata).ToList();

            if (this.IsMetadataRecursive(metadata))
            {
                metadata.Flags |= RelationMetadataFlags.Recursive;
            }

            if (contract.ReadIndex != null)
            {
                metadata.Flags |= RelationMetadataFlags.Readable;
            }

            if (contract.WriteIndex != null)
            {
                metadata.Flags |= RelationMetadataFlags.Writable;
            }

            if (metadata.Item != null)
            {
                metadata.Flags |= RelationMetadataFlags.List;
            }

            context.AddMetadata <IRelationMetadata>(metadata);

            return(metadata);
        }
Exemplo n.º 20
0
        private ProjectionMetadata GetMetadata(IMetadataBuilderContext context, IRelationMetadata relation, IProjectionMetadata parent)
        {
            ProjectionMetadata metadata = new ProjectionMetadata(relation);

            context.AddMetadata <IProjectionMetadata>(metadata);

            metadata.Properties = this.CreateLazy(() => this.CreateProperties(context, metadata));
            metadata.Item       = this.CreateItem(context, metadata);
            metadata.Flags      = this.GetFlags(metadata);

            this.CreateTableMetadata(metadata);
            this.CreateInputMetadata(context, metadata, parent);

            return(metadata);
        }
        private ITableMetadata GetMetadata(IMetadataBuilderContext context, IRelationMetadata relation)
        {
            ITableMetadata parent = context.GetMetadata <ITableMetadata>(relation.Parent.Identity.Name) ?? this.GetMetadata(context, relation.Parent);

            if (parent == null)
            {
                return(null);
            }
            else if (parent.Item != null && parent.Item.Identity.Equals(relation.Identity))
            {
                return(parent.Item);
            }

            return(parent.Properties.FirstOrDefault(m => m.Identity.Equals(relation.Identity)));
        }
        private ProjectionMetadata CreateItem(IMetadataBuilderContext context, ProjectionMetadata parent)
        {
            if (parent.Relation.Item != null)
            {
                ProjectionMetadata metadata = this.CreateBaseMetadata(context, parent.Relation.Item);

                metadata.List = parent;

                context.AddMetadata <IProjectionMetadata>(metadata);

                return(metadata);
            }

            return(null);
        }
Exemplo n.º 23
0
        private RelationMetadata CreateProperty(IMetadataBuilderContext context, RelationMetadata parent, MemberInfo memberInfo)
        {
            MetadataIdentity attributeId = parent.Identity.Child(memberInfo.Name);

            RelationMetadata metadata = new RelationMetadata(attributeId)
            {
                Type     = this.GetMemberType(memberInfo),
                Parent   = parent,
                Member   = memberInfo,
                MemberOf = parent.MemberOf,
                Flags    = RelationMetadataFlags.Property,
            };

            metadata.Item        = this.CreateItem(context, metadata);
            metadata.Properties  = this.CreateLazy(() => this.CreateProperties(context, metadata));
            metadata.Annotations = this.CreateAnnotations(metadata).ToList();

            if (metadata.Item != null)
            {
                metadata.Flags |= RelationMetadataFlags.List;
            }

            if (this.IsMetadataRecursive(metadata))
            {
                metadata.Flags |= RelationMetadataFlags.Recursive;
            }

            if (memberInfo is PropertyInfo pi)
            {
                if (pi.CanRead)
                {
                    metadata.Flags |= RelationMetadataFlags.Readable;
                }

                if (pi.CanWrite)
                {
                    metadata.Flags |= RelationMetadataFlags.Writable;
                }
            }
            else if (memberInfo is FieldInfo)
            {
                metadata.Flags |= RelationMetadataFlags.Readable | RelationMetadataFlags.Writable;
            }

            context.AddMetadata <IRelationMetadata>(metadata);

            return(metadata);
        }
Exemplo n.º 24
0
        private IRelationMetadata GetMetadata(IMetadataBuilderContext context, MetadataIdentity identity)
        {
            MetadataIdentity  parentIdentity = identity.Parent();
            IRelationMetadata parent         = context.GetMetadata <IRelationMetadata>(parentIdentity.Name) ?? this.GetMetadata(context, parentIdentity);

            if (parent == null)
            {
                return(null);
            }
            else if (parent.Item != null && parent.Item.Identity.Equals(identity))
            {
                return(parent.Item);
            }

            return(parent.Properties.FirstOrDefault(m => m.Identity.Equals(identity)));
        }
Exemplo n.º 25
0
        private ReferenceMetadata CreateBaseMetadata(IMetadataBuilderContext context, IRelationMetadata relation, ReferenceMetadata parent)
        {
            ReferenceMetadata metadata = new ReferenceMetadata(relation)
            {
                Parent = parent,
            };

            metadata.Flags            = this.CreateFlags(metadata);
            metadata.Properties       = this.CreateLazy(() => this.CreateProperties(context, metadata));
            metadata.Keys             = this.CreateLazy(() => this.CreateKeys(metadata));
            metadata.Item             = this.CreateItem(context, metadata);
            metadata.ParentReferences = this.CreateLazy(() => this.CreateParentReferences(metadata).ToList());
            metadata.ChildReferences  = this.CreateLazy(() => this.CreateChildReferences(metadata));

            return(metadata);
        }
Exemplo n.º 26
0
        public void Initialize(IMetadataBuilderContext context)
        {
            IRelationMetadata relation = context.Identity.GetMetadata <IRelationMetadata>();

            if (relation == null)
            {
                throw MetadataNotFoundException.FromMetadata <IRelationMetadata>(context.Identity);
            }

            JsonMetadata metadata = new JsonMetadata(relation);

            metadata.MemberOf = metadata;
            metadata.Path     = "$";
            metadata.IsRoot   = true;

            context.AddMetadata <IJsonMetadata>(metadata);
        }
Exemplo n.º 27
0
        public void Initialize(IMetadataBuilderContext context)
        {
            RelationMetadata model = new RelationMetadata(context.Identity)
            {
                Flags = RelationMetadataFlags.Model | RelationMetadataFlags.Readable,
                Type  = context.Schema.Model,
            };

            model.MemberOf   = model;
            model.Properties = this.CreateLazy(() => this.CreateProperties(context, model));

            model.Annotations = this.CreateAnnotations(model).ToList();
            model.Item        = this.CreateItem(context, model);

            if (model.Item != null)
            {
                model.Flags |= RelationMetadataFlags.List;
            }

            context.AddMetadata <IRelationMetadata>(model);
        }
Exemplo n.º 28
0
        private BindingMetadata CreateBaseMetadata(IMetadataBuilderContext context, IRelationMetadata attribute, BindingMetadata parent)
        {
            BindingMetadata metadata = new BindingMetadata(attribute)
            {
                Parent   = parent,
                MemberOf = parent?.MemberOf
            };

            if (metadata.MemberOf == null || metadata.HasFlag(RelationMetadataFlags.Item))
            {
                metadata.MemberOf = metadata;
            }

            metadata.Properties = this.CreateLazyProperties(context, metadata);
            metadata.Item       = this.CreateItem(context, metadata);
            metadata.Flags      = this.GetFlags(metadata);

            context.AddMetadata <IBindingMetadata>(metadata);

            this.ApplyContracts(metadata);

            return(metadata);
        }
Exemplo n.º 29
0
        private void CreateInputMetadata(IMetadataBuilderContext context, ProjectionMetadata metadata, IProjectionMetadata parent)
        {
            if (parent?.Reference != null)
            {
                IEnumerable <IReference> references = parent.Reference.References.Where(r => r.HasFlag(ReferenceFlags.Foreign) && !r.HasFlag(ReferenceFlags.Self));

                foreach (IReference reference in references.OrderBy(r => r.Priority))
                {
                    int valueIndex = reference.Key.Properties.IndexOf(m => m.Identity.Equals(metadata.Identity));

                    if (valueIndex > -1 && !reference.Other.Metadata.Relation.HasFlag(RelationMetadataFlags.Recursive))
                    {
                        IReferenceMetadata valueMetadata = reference.Other.Key.Properties[valueIndex];

                        metadata.Input  = new Lazy <IProjectionMetadata>(() => this.GetMetadata(context, valueMetadata.Relation));
                        metadata.Flags |= ProjectionMetadataFlags.Cascade;

                        return;
                    }
                }
            }

            metadata.Input = new Lazy <IProjectionMetadata>(() => metadata);
        }
Exemplo n.º 30
0
 public IRelationMetadata GetMetadata(IMetadataBuilderContext context) => this.GetMetadata(context, context.Identity);