Exemplo n.º 1
0
        WithReport <TDerived>(Expression <Func <TFlowDataType, TDerived> > property, string name = null, string icon = null)
        {
            var expression    = (MemberExpression)property.Body;
            var attrs         = expression.Member.GetCustomAttributes(false);
            var validators    = GenerateValidationModel.Generate(attrs, _validationMapper);
            var modelProperty = expression.Member.Name.FirstCharToLower();

            name = name != null ? name : modelProperty;

            var builder = new CollectionBuilder <TFlowDataType, FlowBuilder <TFlowDataType, TContextType>, TFlowDataType, TDerived, TContextType>
                              (this, name, _elementMapper, _controlMapper, _validationMapper, ElementType.Report);

            builder.Element.ModelProperty = modelProperty;
            builder.Element.TaskPath      = $"{Flow.TaskPath}.{modelProperty}";
            builder.Element.DataType      = property.ReturnType;
            builder.Element.UiTemplate    = _elementMapper.GetDefault(ElementType.Report);
            builder.Element.Icon          = icon;
            builder.Element.Tasks         = new List <TaskDefinition>();
            // builder.WithTask<DefaultFlowPersistanceTask<TFlowDataType, TContextType>>(TaskTypeEnum.PostTask);

            if (validators != null)
            {
                builder.Element.Validators = validators;
            }
            Flow.Steps.Add(builder.Element);
            return(builder);
        }
        AddArray <TDerived>(Expression <Func <TDataType, ICollection <TDerived> > > property, string name = null, string uiTemplate = null)
        {
            var expression    = (MemberExpression)property.Body;
            var attrs         = expression.Member.GetCustomAttributes(false);
            var validators    = GenerateValidationModel.Generate(attrs, _validationMapper);
            var modelProperty = expression.Member.Name.FirstCharToLower();
            // name = name != null ? name : modelProperty;

            var builder = new CollectionBuilder <TFlowDataType, CollectionBuilder <TFlowDataType, TParentType, TParentDataType, TDataType, TContextType>, TDataType, TDerived, TContextType>(
                this, name, _elementMapper, _controlMapper, _validationMapper, ElementType.Array);

            builder.Element.ModelProperty = modelProperty;
            builder.Element.TaskPath      = $"{Element.TaskPath}.{modelProperty}[]";
            builder.Element.DataType      = property.ReturnType.GetGenericArguments()[0];
            builder.Element.UiTemplate    = uiTemplate ?? _elementMapper.GetDefault(ElementType.Array);
            builder.Element.Tasks         = new List <TaskDefinition>();

            var collectionHasId = typeof(TDerived).GetProperties().Any(m => m.Name == "Id__");

            if (collectionHasId)
            {
                builder.Element.Elements.Add(new Element
                {
                    ModelProperty = "id__",
                    TaskPath      = $"{Element.TaskPath}.{modelProperty}[].id__",
                    ElementType   = ElementType.Control,
                    DataType      = typeof(Guid),
                    Tasks         = new List <TaskDefinition>()
                });
                builder.Element.Elements.Add(new Element
                {
                    ModelProperty = "operation__",
                    TaskPath      = $"{Element.TaskPath}.{modelProperty}[].operation__",
                    ElementType   = ElementType.Control,
                    DataType      = typeof(ArrayOperation),
                    Tasks         = new List <TaskDefinition>()
                });
            }

            if (validators != null)
            {
                builder.Element.Validators = validators;
            }
            Element.Elements.Add(builder.Element);
            return(builder);
        }
        AddPage <TDerived>(Expression <Func <TDataType, TDerived> > property, string name = null)
        {
            var expression    = (MemberExpression)property.Body;
            var attrs         = expression.Member.GetCustomAttributes(false);
            var validators    = GenerateValidationModel.Generate(attrs, _validationMapper);
            var modelProperty = expression.Member.Name.FirstCharToLower();
            // name = name != null ? name : modelProperty;
            var builder = new CollectionBuilder <TFlowDataType, CollectionBuilder <TFlowDataType, TParentType, TParentDataType, TDataType, TContextType>, TDataType, TDerived, TContextType>
                              (this, name, _elementMapper, _controlMapper, _validationMapper, ElementType.Page);

            builder.Element.ModelProperty = modelProperty;
            builder.Element.TaskPath      = $"{Element.TaskPath}.{modelProperty}";
            builder.Element.DataType      = property.ReturnType;
            builder.Element.UiTemplate    = _elementMapper.GetDefault(ElementType.Page);
            builder.Element.Tasks         = new List <TaskDefinition>();
            if (validators != null)
            {
                builder.Element.Validators = validators;
            }
            Element.Elements.Add(builder.Element);
            return(builder);
        }