예제 #1
0
        /// <summary>
        /// Retrieve all direct references from api parameters.
        /// </summary>
        /// <param name="apiParameters">A list of ApiParameterInfo objects.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiParametersDirectReferences(
            this IEnumerable <ApiParameterInfo> apiParameters)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            foreach (var apiActionParameter in apiParameters)
            {
                if (apiActionParameter.IsValid())
                {
                    directReferences = directReferences
                                       .Union(
                        apiActionParameter.GetApiParameterDirectReferences(),
                        entityComparer)
                                       .ToList();
                }
            }

            return(directReferences);
        }
        /// <summary>
        /// Retrieve viewModels from actions.
        /// </summary>
        /// <param name="layoutActions">A list of layout actions.</param>
        /// <param name="apis">A list of api.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetActionsViewModelsEntities(
            this ActionList layoutActions,
            ApiList apis)
        {
            var viewModels = new List <EntityInfo>();

            if (!layoutActions.IsValid() ||
                !apis.IsValid())
            {
                return(viewModels);
            }

            var entityComparer = new EntityInfoComparer();

            if (layoutActions != null)
            {
                foreach (var action in layoutActions)
                {
                    if (action.IsValid())
                    {
                        viewModels = viewModels
                                     .Union(
                            action.GetActionViewModelsEntities(apis),
                            entityComparer)
                                     .ToList();
                    }
                }
            }

            return(viewModels);
        }
예제 #3
0
        /// <summary>
        /// Retrieve direct references from api action parameters and return type.
        /// </summary>
        /// <param name="apiAction">An ApiActionInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiActionDirectReferences(this ApiActionInfo apiAction)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            if (apiAction.Parameters != null)
            {
                directReferences = directReferences
                                   .Union(
                    apiAction.Parameters.GetApiParametersDirectReferences(),
                    entityComparer)
                                   .ToList();
            }

            if (apiAction.ReturnType.IsValid() &&
                apiAction.ReturnType.References != null)
            {
                directReferences = directReferences
                                   .Union(
                    apiAction.ReturnType.GetEntityDirectReferences(),
                    entityComparer)
                                   .ToList();
            }

            return(directReferences);
        }
예제 #4
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);
        }
예제 #5
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);
        }
        /// <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);
        }
예제 #7
0
        /// <summary>
        /// Retrieve ViewModels from a list of api in function of a layout action.
        /// </summary>
        /// <param name="apis">An ApiList object.</param>
        /// <param name="layoutAction">A layout action name.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiListViewModelsEntities(
            this ApiList apis,
            string layoutAction)
        {
            var viewModels = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            foreach (var api in apis)
            {
                if (api.IsValid())
                {
                    viewModels = viewModels
                                 .Union(
                        api.GetApiViewModelsEntities(layoutAction),
                        entityComparer)
                                 .ToList();
                }
            }

            return(viewModels);
        }
예제 #8
0
        /// <summary>
        /// Retrieve ViewModels from all api actions parameters and return types.
        /// </summary>
        /// <param name="apiActions">A list of api actions.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiActionListViewModelsEntities(this ApiActionList apiActions)
        {
            var viewModels = new List <EntityInfo>();

            if (!apiActions.IsValid())
            {
                return(viewModels);
            }

            var entityComparer = new EntityInfoComparer();

            foreach (var apiAction in apiActions)
            {
                if (apiAction.IsValid())
                {
                    viewModels = viewModels
                                 .Union(
                        apiAction.GetApiActionViewModelsEntities(),
                        entityComparer)
                                 .ToList();
                }
            }

            return(viewModels);
        }
예제 #9
0
        /// <summary>
        /// Retrieve all indirect references from an entity.
        /// </summary>
        /// <param name="entity">An EntityInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetEntityIndirectReferences(this EntityInfo entity)
        {
            var allIndirectReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            foreach (var property in entity.GetLinkedProperties())
            {
                if (property.IsValid())
                {
                    allIndirectReferences = allIndirectReferences
                                            .Union(
                        property.GetIndirectReferences(),
                        entityComparer)
                                            .ToList();
                }
            }

            return(allIndirectReferences);
        }
        /// <summary>
        /// Retrieve all direct references from concerns.
        /// </summary>
        /// <param name="concerns">A ConcernList object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetConcernListDirectReferences(this ConcernList concerns)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            foreach (var concern in concerns)
            {
                if (concern.IsValid())
                {
                    directReferences = directReferences
                                       .Union(
                        concern.GetConcernDirectReferences(),
                        entityComparer)
                                       .ToList();
                }
            }

            return(directReferences);
        }
예제 #11
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);
        }
예제 #12
0
        /// <summary>
        /// Retrieve all ViewModels from an api in function of a layout action.
        /// </summary>
        /// <param name="api">An ApiInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiViewModelsEntities(
            this ApiInfo api,
            string layoutAction)
        {
            var viewModels = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            if (api.Actions.IsValid())
            {
                viewModels = viewModels
                             .Union(
                    api.Actions.GetApiActionListViewModelsEntities(layoutAction),
                    entityComparer)
                             .ToList();
            }

            return(viewModels);
        }
        /// <summary>
        /// Retrieve ViewModels from a layout action.
        /// </summary>
        /// <param name="action">An ActionInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetActionViewModelsEntities(
            this ActionInfo action,
            ApiList apis)
        {
            var viewModels = new List <EntityInfo>();

            if (!action.IsValid() ||
                !apis.IsValid())
            {
                return(viewModels);
            }

            var apiAction      = action.GetAction();
            var entityComparer = new EntityInfoComparer();

            if (apiAction.IsValid())
            {
                viewModels = viewModels
                             .Union(
                    apis.GetApiListViewModelsEntities(apiAction),
                    entityComparer)
                             .ToList();
            }

            return(viewModels);
        }
예제 #14
0
        /// <summary>
        /// Retrieve all direct references from an api list.
        /// </summary>
        /// <param name="apis">An ApiList object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiListDirectReferences(this ApiList apis)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            foreach (var api in apis)
            {
                if (api.IsValid())
                {
                    directReferences = directReferences
                                       .Union(
                        api.GetApiDirectReferences(),
                        entityComparer)
                                       .ToList();
                }
            }

            return(directReferences);
        }
        /// <summary>
        /// Retrieve all direct references from a list of layouts.
        /// </summary>
        /// <param name="layouts">A LayoutList object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetLayoutListDirectReferences(this LayoutList layouts)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            foreach (var layout in layouts)
            {
                if (layout.IsValid())
                {
                    directReferences = directReferences
                                       .Union(
                        layout.GetLayoutDirectReferences(),
                        entityComparer)
                                       .ToList();
                }
            }

            return(directReferences);
        }
예제 #16
0
        /// <summary>
        /// Retrieve ViewModels from layout actions.
        /// </summary>
        /// <param name="layout">A LayoutInfo object.</param>
        /// <param name="apis">An ApiList object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetLayoutViewModelsEntities(
            this LayoutInfo layout,
            ApiList apis)
        {
            var viewModels = new List <EntityInfo>();

            if (!apis.IsValid() ||
                !layout.IsValid())
            {
                return(viewModels);
            }

            var entityComparer = new EntityInfoComparer();

            if (layout.Actions.IsValid())
            {
                viewModels = viewModels
                             .Union(
                    layout.Actions.GetActionsViewModelsEntities(apis),
                    entityComparer)
                             .ToList();
            }

            return(viewModels);
        }
        /// <summary>
        /// Retrieve used Models inside the application (Layouts and Apis parameters references models)
        /// </summary>
        /// <param name="smartApp">A SmartAppInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetUsedModels(this SmartAppInfo smartApp)
        {
            var usedModels      = new List <EntityInfo>();
            var specifiedModels = new List <EntityInfo>();

            if (!smartApp.IsValid())
            {
                return(usedModels);
            }

            var entityComparer = new EntityInfoComparer();

            if (smartApp.Version.IsValid() &&
                smartApp.DataModel.IsValid() &&
                smartApp.Concerns.IsValid() &&
                smartApp.Api.IsValid())
            {
                specifiedModels = specifiedModels
                                  .Union(
                    smartApp.Concerns.GetConcernListDirectReferences(),
                    entityComparer)
                                  .ToList();

                specifiedModels = specifiedModels
                                  .Union(
                    smartApp.Api.GetApiListDirectReferences(),
                    entityComparer)
                                  .ToList();

                foreach (var entity in specifiedModels)
                {
                    if (entity.IsValid())
                    {
                        usedModels = usedModels
                                     .Union(
                            entity.GetEntityIndirectReferences(),
                            entityComparer)
                                     .ToList();
                    }
                }

                usedModels = usedModels
                             .Union(
                    specifiedModels,
                    entityComparer)
                             .ToList();
            }

            return(usedModels);
        }
예제 #18
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());
        }
예제 #19
0
        /// <summary>
        /// Retrieve all direct references from an api.
        /// </summary>
        /// <param name="api">An ApiInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetApiDirectReferences(this ApiInfo api)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            if (api.Actions.IsValid())
            {
                directReferences = directReferences
                                   .Union(
                    api.Actions.GetApiActionListDirectReferences(),
                    entityComparer)
                                   .ToList();
            }

            return(directReferences);
        }
예제 #20
0
        /// <summary>
        /// Retrieve all direct references from a concern.
        /// </summary>
        /// <param name="concern">A ConcernInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetConcernDirectReferences(this ConcernInfo concern)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            if (concern.Layouts.IsValid())
            {
                directReferences = directReferences
                                   .Union(
                    concern.Layouts.GetLayoutListDirectReferences(),
                    entityComparer)
                                   .ToList();
            }

            return(directReferences);
        }
        /// <summary>
        /// Retrieve used ViewModels inside the application (Apis parameters models).
        /// </summary>
        /// <param name="smartApp">A SmartAppInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetViewModels(this SmartAppInfo smartApp)
        {
            var usedViewModels = new List <EntityInfo>();

            if (!smartApp.IsValid())
            {
                return(usedViewModels);
            }

            var entityComparer = new EntityInfoComparer();

            if (smartApp.Version.IsValid() &&
                smartApp.Api.IsValid())
            {
                usedViewModels = usedViewModels
                                 .Union(
                    smartApp.Api.GetApiListViewModelsEntities(),
                    entityComparer)
                                 .ToList();
            }

            return(usedViewModels);
        }
예제 #22
0
        /// <summary>
        /// Retrieve all direct references from api action parameters.
        /// </summary>
        /// <param name="apiParameter">An ApiParameterInfo object.</param>
        /// <returns>A list of EntityInfo;</returns>
        public static List <EntityInfo> GetApiParameterDirectReferences(this ApiParameterInfo apiParameter)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            if (apiParameter.DataModel.IsValid() &&
                apiParameter.DataModel.References != null)
            {
                directReferences = directReferences
                                   .Union(
                    apiParameter.DataModel.GetEntityDirectReferences(),
                    entityComparer)
                                   .ToList();
            }

            return(directReferences);
        }
예제 #23
0
        /// <summary>
        /// Retrieve all direct references from layout datamodel.
        /// </summary>
        /// <param name="layout">A LayoutInfo object.</param>
        /// <returns>A list of EntityInfo.</returns>
        public static List <EntityInfo> GetLayoutDirectReferences(this LayoutInfo layout)
        {
            var directReferences = new List <EntityInfo>();

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

            var entityComparer = new EntityInfoComparer();

            if (layout.DataModel.IsValid() &&
                layout.DataModel.References != null)
            {
                directReferences = directReferences
                                   .Union(
                    layout.DataModel.GetEntityDirectReferences(),
                    entityComparer)
                                   .ToList();
            }

            return(directReferences);
        }