Exemplo n.º 1
0
        /// <summary>
        /// Builds the root entity.
        /// </summary>
        /// <param name="node">The root node.</param>
        /// <param name="context">The context.</param>
        /// <returns>Entity.</returns>
        /// <exception cref="System.Exception">Unknown report node type.</exception>
        internal static Entity BuildReportNode(ReportNode node, FromEntityContext context)
        {
            if (node == null)
            {
                throw new ArgumentNullException(nameof(node));
            }
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            Entity structuredQueryEntity;

            if (node.Is <AggregateReportNode>())
            {
                structuredQueryEntity = BuildAggregateReportNode(node.As <AggregateReportNode>(), context);
            }
            else if (node.Is <RelationshipReportNode>())
            {
                structuredQueryEntity = BuildRelationshipReportNode(node.As <RelationshipReportNode>(), context);
            }
            else if (node.Is <CustomJoinReportNode>( ))
            {
                structuredQueryEntity = BuildCustomJoinReportNode(node.As <CustomJoinReportNode>( ), context);
            }
            else if (node.Is <DerivedTypeReportNode>())
            {
                structuredQueryEntity = BuildDerivedTypeReportNode(node.As <DerivedTypeReportNode>(), context);
            }
            else if (node.Is <ResourceReportNode>())
            {
                structuredQueryEntity = BuildResourceReportNode(node.As <ResourceReportNode>(), context);
            }
            else
            {
                throw new Exception("Unknown report node type. " + node.GetType().Name);
            }
            if (node.RelatedReportNodes != null && node.RelatedReportNodes.Count > 0)
            {
                structuredQueryEntity.RelatedEntities = new List <Entity>(node.RelatedReportNodes.Select(relatedReportNode => BuildReportNode(relatedReportNode, context)).Where(entity => entity != null));
            }
            if (structuredQueryEntity != null)
            {
                // Only valid nodes get placed into the ReportNodeToEntityMap
                // (but ReportNodeMap may contain invalid nodes for historical reasons)
                context.ReportNodeToEntityMap[node.Id] = structuredQueryEntity;
            }
            return(structuredQueryEntity);
        }