/// <summary>
        /// Retrieve indirect references from a property.
        /// This case happen when a model is used but
        /// not directly inside the modelization (Layouts, Apis)
        /// </summary>
        /// <param name="property">A PropertyInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetIndirectReferences(this PropertyInfo property)
        {
            var indirectReferences = new List <EntityInfo>();

            if (!property.IsValid())
            {
                return(indirectReferences);
            }

            var entityComparer = new EntityInfoComparer();

            if (property.Parent.IsValid() &&
                !indirectReferences.Any(item =>
                                        entityComparer.Equals(
                                            item,
                                            (EntityInfo)property.Parent)))
            {
                indirectReferences.Add((EntityInfo)property.Parent);
            }

            if (property.Target.IsValid() &&
                !indirectReferences.Any(item =>
                                        entityComparer.Equals(
                                            item,
                                            property.Target)))
            {
                indirectReferences.Add(property.Target);
            }

            return(indirectReferences);
        }
Esempio n. 2
0
        /// <summary>
        /// Retrieve all direct references from an entity.
        /// </summary>
        /// <param name="entity">An EntityInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetEntityDirectReferences(this EntityInfo entity)
        {
            var directReferences = new List <EntityInfo>();

            if (!entity.IsValid())
            {
                return(directReferences);
            }

            var entityComparer = new EntityInfoComparer();

            if (entity.References != null)
            {
                foreach (var reference in entity.References)
                {
                    if (reference.Target.IsValid() &&
                        !directReferences.Any(item =>
                                              entityComparer.Equals(
                                                  item,
                                                  reference.Target)))
                    {
                        directReferences.Add(reference.Target);
                    }
                }
            }

            return(directReferences);
        }
Esempio n. 3
0
        /// <summary>
        /// Retrieve ViewModels from an api action for a specific layout action.
        /// </summary>
        /// <param name="apiAction">An ApiActionInfo object.</param>
        /// <param name="layoutAction">A layout name.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiActionViewModelsEntities(
            this ApiActionInfo apiAction,
            string layoutAction)
        {
            var viewModels = new List <EntityInfo>();

            if (!apiAction.IsValid() ||
                !layoutAction.IsValid())
            {
                return(viewModels);
            }

            var entityComparer = new EntityInfoComparer();

            if (apiAction.Id.ToLower().Equals(layoutAction.ToLower()) &&
                apiAction.Parameters != null)
            {
                if (apiAction.ReturnType.IsValid() &&
                    !viewModels.Any(item =>
                                    entityComparer.Equals(
                                        item,
                                        apiAction.ReturnType)))
                {
                    viewModels.Add(apiAction.ReturnType);
                }

                viewModels = viewModels
                             .Union(
                    apiAction.Parameters.GetApiParametersViewModelsEntities(),
                    entityComparer)
                             .ToList();
            }

            return(viewModels);
        }
Esempio n. 4
0
        /// <summary>
        /// Retrieve ViewModels from a list of api action parameters.
        /// </summary>
        /// <param name="apiParameters">A list of ApiParameterInfo.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiParametersViewModelsEntities(
            this IEnumerable <ApiParameterInfo> apiParameters)
        {
            var viewModels = new List <EntityInfo>();

            if (apiParameters == null)
            {
                return(viewModels);
            }

            var entityComparer = new EntityInfoComparer();

            foreach (var apiActionParameter in apiParameters)
            {
                if (apiActionParameter.IsValid() &&
                    apiActionParameter.IsModel() &&
                    apiActionParameter.DataModel.IsValid() &&
                    !viewModels.Any(item =>
                                    entityComparer.Equals(
                                        item,
                                        apiActionParameter.DataModel)))
                {
                    viewModels.Add(apiActionParameter.DataModel);
                }
            }

            return(viewModels);
        }
Esempio n. 5
0
        public static bool IsInherited(
            this EntityInfo entity,
            SchemaArray <EntityInfo> entities)
        {
            var entityComparer = new EntityInfoComparer();

            return(entities
                   .Where(e =>
                          e.IsValid() &&
                          e.BaseEntity.IsValid() &&
                          entityComparer.Equals(
                              entity,
                              e.BaseEntity))
                   .Any());
        }