Exemple #1
0
        private MetadataNode AddDynamicNode(List <MetadataNode> itemNodes, MetadataIdentity identity, IBindingMetadata metadata, ColumnIdentity value)
        {
            this.AddStaticNode(itemNodes, metadata, null);

            MetadataNode thisNode = this.FindNode(itemNodes, identity);

            MetadataIdentity parentIdentity = identity.Pop();

            if (thisNode != null)
            {
                thisNode.Column ??= value;
            }
            else if (parentIdentity != null)
            {
                MetadataNode parentNode = this.FindNode(itemNodes, parentIdentity) ?? this.AddDynamicNode(itemNodes, parentIdentity, metadata, null);

                if (parentNode != null)
                {
                    thisNode = new MetadataNode(identity)
                    {
                        Column   = value,
                        Metadata = metadata,
                        Flags    = NodeFlags.Dynamic,
                    };

                    parentNode.Properties.Add(thisNode);
                }
            }

            return(thisNode);
        }
Exemple #2
0
        private static Node AddDynamicNode(NodeTree tree, MetadataIdentity identity, IBindingMetadata metadata)
        {
            AddStaticNode(tree, metadata);

            Node             thisNode       = tree.FindNode(identity);
            MetadataIdentity parentIdentity = identity.Pop();

            if (thisNode != null)
            {
                return(thisNode);
            }
            else if (parentIdentity != null)
            {
                Node parentNode = tree.FindNode(parentIdentity) ?? AddDynamicNode(tree, parentIdentity, metadata);

                if (parentNode != null)
                {
                    thisNode = new Node(identity, metadata)
                    {
                        IsDynamic = true,
                    };

                    parentNode.Properties.Add(thisNode);
                    tree.Nodes.Add(thisNode);
                }
            }

            return(thisNode);
        }
        private IJsonMetadata GetMetadata(IMetadataBuilderContext context, MetadataIdentity identity)
        {
            MetadataIdentity  parentIdentity = identity.Pop();
            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);
        }
Exemple #4
0
        private IBindingMetadata FindDynamicMetadata(MetadataIdentity identity)
        {
            IBindingMetadata metadata = identity.GetMetadata <IBindingMetadata>();

            while (metadata == null && (identity = identity.Pop()) != null)
            {
                metadata = identity.GetMetadata <IBindingMetadata>();
            }

            if (metadata != null && metadata.HasFlag(BindingMetadataFlags.Dynamic))
            {
                return(metadata);
            }

            return(null);
        }
Exemple #5
0
        private ITableMetadata GetMetadata(IMetadataBuilderContext context, MetadataIdentity identity)
        {
            MetadataIdentity parentIdentity = identity.Pop();
            ITableMetadata   parent         = context.GetMetadata <ITableMetadata>(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)));
        }