예제 #1
0
        /// <summary>
        /// Cria um nome único para uma ação.
        /// </summary>
        /// <param name="actions">A coleção das ações conhecidas.</param>
        /// <returns>O nome único para a ação.</returns>
        private static string MakeActionName(EntityActionCollection actions)
        {
            string actionName = null;

            var index = actions.Count + 1;

            do
            {
                actionName = $"Action{index}";
            } while (actions.Any(x => x.Name.EqualsIgnoreCase(actionName)));

            return(actionName);
        }
예제 #2
0
        /// <summary>
        /// Obtém a ação com o nome indicado ou cria uma nova.
        /// A ação criada é automaticamente inserida na lista de ações conhecidas.
        /// </summary>
        /// <param name="actions">A lista de ações conhecidas.</param>
        /// <param name="actionName">O nome da ação.</param>
        /// <returns>A ação obtida ou criada.</returns>
        private static EntityAction GetOrAddAction(EntityActionCollection actions, string actionName)
        {
            if (string.IsNullOrEmpty(actionName))
            {
                actionName = MakeActionName(actions);
            }

            var action = actions.FirstOrDefault(x => x.Name.EqualsIgnoreCase(actionName));

            if (action == null)
            {
                action = new EntityAction
                {
                    Name  = actionName,
                    Title = actionName.Replace("Action", "Ação").ChangeCase(TextCase.ProperCase)
                };
                actions.Add(action);
            }

            return(action);
        }
예제 #3
0
        /// <summary>
        /// Cria um valor compatível para o tipo indicado com base no conteúdo
        /// do modelo deserializado.
        /// </summary>
        /// <param name="type">O tipo do dado esperado.</param>
        /// <param name="node">O modelo deserializado.</param>
        /// <returns>O valor obtido da compatibilização.</returns>
        private object CreateCompatibleValue(Type type, NodeModel node)
        {
            if (node == null)
            {
                return(null);
            }

            if (type == typeof(PropertyCollection))
            {
                return((PropertyCollection)CreateCompatibleValue(typeof(object), node));
            }

            if (type == typeof(NameCollection))
            {
                var target = new NameCollection();
                foreach (var item in node.ChildValues())
                {
                    target.Add(item.Value.ToString());
                }
                return(target);
            }

            if (type == typeof(FieldCollection))
            {
                var target = new FieldCollection();
                foreach (var @object in node.ChildObjects())
                {
                    var field = new Field();
                    CopyNodeProperties(@object, field);
                    target.Add(field);
                }
                return(target);
            }

            if (type == typeof(LinkCollection))
            {
                var target = new LinkCollection();
                foreach (var item in node.Children())
                {
                    var link = new Link();
                    CopyNodeProperties(item, link);
                    target.Add(link);
                }
                return(target);
            }

            if (type == typeof(EntityActionCollection))
            {
                var target = new EntityActionCollection();
                foreach (var item in node.Children())
                {
                    var action = new EntityAction();
                    CopyNodeProperties(item, action);
                    target.Add(action);
                }
                return(target);
            }

            if (type == typeof(EntityCollection))
            {
                var target = new EntityCollection();
                foreach (var item in node.Children())
                {
                    var entity = new Entity();
                    CopyNodeProperties(item, entity);
                    target.Add(entity);
                }
                return(target);
            }

            if (type == typeof(CaseVariantString))
            {
                var text = (node as ValueModel)?.Value.ToString();
                return(text.ChangeCase(TextCase.PascalCase));
            }

            return(CreateCompatibleValue(node));
        }