示例#1
0
        public FilterViewModel Create(string additionalCssClass)
        {
            string           url             = string.Format("/{0}", this.RequestHandler.HttpContext.GetRouteValue("url"));
            Catalog          catalog         = this.RequestHandler.Storage.GetRepository <ICatalogRepository>().WithUrl(url);
            IProductProvider productProvider = StringActivator.CreateInstance <IProductProvider>(catalog.CSharpClassName);
            IEnumerable <SerializedAttribute> serializedAttributes = null;

            if (productProvider != null)
            {
                serializedAttributes = productProvider.GetAttributes(this.RequestHandler, catalog);
            }

            List <FeatureViewModel> features = new List <FeatureViewModel>();

            foreach (SerializedAttribute serializedAttribute in serializedAttributes)
            {
                SerializedAttribute.Feature serializedFeature = JsonConvert.DeserializeObject <SerializedAttribute.Feature>(serializedAttribute.SerializedFeature);
                FeatureViewModel            feature           = features.FirstOrDefault(f => f.Code == serializedFeature.Code);

                if (feature == null)
                {
                    feature            = new FeatureViewModelFactory(this.RequestHandler).Create(serializedFeature);
                    feature.Attributes = new List <AttributeViewModel>();
                    features.Add(feature);
                }

                (feature.Attributes as List <AttributeViewModel>).Add(new AttributeViewModelFactory(this.RequestHandler).Create(serializedAttribute));
            }

            return(new FilterViewModel()
            {
                Features = features,
                AdditionalCssClass = additionalCssClass
            });
        }
示例#2
0
        protected override dynamic GetData()
        {
            string  url     = string.Format("/{0}", this.requestHandler.HttpContext.GetRouteValue("url"));
            Catalog catalog = this.requestHandler.Storage.GetRepository <ICatalogRepository>().WithUrl(url);

            if (catalog == null)
            {
                throw new HttpException(404, "Not found.");
            }

            ExpandoObjectBuilder expandoObjectBuilder = new ExpandoObjectBuilder();

            expandoObjectBuilder.AddProperty("Name", this.requestHandler.GetLocalizationValue(catalog.NameId));

            IProductProvider productProvider = StringActivator.CreateInstance <IProductProvider>(catalog.CSharpClassName);

            if (productProvider != null)
            {
                expandoObjectBuilder.AddProperty(
                    "Products",
                    productProvider.GetProducts(this.requestHandler, catalog).Select(p => this.CreateProductViewModel(p)).ToList()
                    );
            }

            return(expandoObjectBuilder.Build());
        }
        private async Task <IEnumerable <ProductViewModel> > GetProductsAsync(HttpContext httpContext, Category category)
        {
            IProductProvider productProvider = StringActivator.CreateInstance <IProductProvider>(category.ProductProviderCSharpClassName);

            return((await productProvider.GetProductsAsync(httpContext, category)).Select(
                       p => new ProductViewModelFactory().Create(p)
                       ));
        }
        private IEnumerable <dynamic> CreateDataSourceViewModel(IRequestHandler requestHandler, SerializedObject serializedPage, DataSource dataSource)
        {
            IDataSource dataSourceInstance = StringActivator.CreateInstance <IDataSource>(dataSource.CSharpClassName);

            return(dataSourceInstance.GetSerializedObjects(requestHandler, serializedPage, this.GetParameters(dataSource.Parameters)).Select(
                       so => this.CreateObjectViewModel(requestHandler, so)
                       ));
        }
示例#5
0
        private dynamic CreateDataSourceViewModel(IRequestHandler requestHandler, DataSource dataSource)
        {
            IDataSource dataSourceInstance = StringActivator.CreateInstance <IDataSource>(dataSource.CSharpClassName);

            if (dataSourceInstance is ISingleObjectDataSource)
            {
                return((dataSourceInstance as ISingleObjectDataSource).GetSerializedObject(
                           requestHandler, this.GetParameters(dataSource.Parameters)
                           ));
            }

            if (dataSourceInstance is IMultipleObjectsDataSource)
            {
                return((dataSourceInstance as IMultipleObjectsDataSource).GetSerializedObjects(
                           requestHandler, this.GetParameters(dataSource.Parameters)
                           ));
            }

            return(null);
        }
示例#6
0
        public IActionResult Send()
        {
            Form form = this.Storage.GetRepository <IFormRepository>().WithKey(int.Parse(this.Request.Form["formId"]));
            IDictionary <Field, string>  valuesByFields         = this.GetValuesByFields(form);
            IDictionary <string, byte[]> attachmentsByFilenames = this.GetAttachmentsByFilenames(form);

            if (form.ProduceCompletedForms)
            {
                this.ProduceCompletedForms(form, valuesByFields, attachmentsByFilenames);
            }

            IFormHandler formHandler = StringActivator.CreateInstance <IFormHandler>(form.CSharpClassName);

            if (formHandler != null)
            {
                return(formHandler.Handle(this, form, valuesByFields, attachmentsByFilenames));
            }

            return(this.NotFound());
        }
示例#7
0
        public async Task <IActionResult> SendAsync(int formId, string origin)
        {
            Form form = await this.Storage.GetRepository <int, Form, FormFilter>().GetByIdAsync(
                formId,
                new Inclusion <Form>(f => f.Name.Localizations),
                new Inclusion <Form>("Fields.FieldType"),
                new Inclusion <Form>("Fields.Name.Localizations")
                );

            IDictionary <Field, string> valuesByFields = this.GetValuesByFields(form);

            foreach (Field field in valuesByFields.Keys)
            {
                if (!string.IsNullOrEmpty(field.FieldType.ValidatorCSharpClassName))
                {
                    if (!await this.CreateFieldValidator(field.FieldType).ValidateAsync(this.HttpContext, form, field, valuesByFields[field]))
                    {
                        return(this.BadRequest());
                    }
                }
            }

            IDictionary <string, byte[]> attachmentsByFilenames = this.GetAttachmentsByFilenames(form);

            if (form.ProduceCompletedForms)
            {
                await this.ProduceCompletedForms(form, valuesByFields, attachmentsByFilenames);
            }

            IFormHandler formHandler = StringActivator.CreateInstance <IFormHandler>(form.FormHandlerCSharpClassName);

            if (formHandler != null)
            {
                return(await formHandler.HandleAsync(this.HttpContext, origin, form, valuesByFields, attachmentsByFilenames));
            }

            return(this.NotFound());
        }
示例#8
0
        private dynamic CreateDataSourceViewModel(DataSource dataSource)
        {
            IDataSource dataSourceInstance = StringActivator.CreateInstance <IDataSource>(dataSource.CSharpClassName);

            return(dataSourceInstance.GetData(this.requestHandler, dataSource));
        }
示例#9
0
 private IEndpoint GetEndpointInstance(Endpoint endpoint)
 {
     return(StringActivator.CreateInstance <IEndpoint>(endpoint.CSharpClassName));
 }
 private IMicrocontroller GetMicrocontrollerInstance(Microcontroller microcontroller)
 {
     return(StringActivator.CreateInstance <IMicrocontroller>(microcontroller.CSharpClassName));
 }
示例#11
0
 private IDataProvider GetDataProvider(DataSource dataSource)
 {
     return(StringActivator.CreateInstance <IDataProvider>(dataSource.DataProviderCSharpClassName));
 }
示例#12
0
 private IResponseCache CreateResponseCache(Data.Entities.Endpoint endpoint)
 {
     return(StringActivator.CreateInstance <IResponseCache>(endpoint.ResponseCacheCSharpClassName));
 }
示例#13
0
 private IRequestProcessor CreateRequestProcessor(Data.Entities.Endpoint endpoint)
 {
     return(StringActivator.CreateInstance <IRequestProcessor>(endpoint.RequestProcessorCSharpClassName));
 }
示例#14
0
 private IFieldValidator CreateFieldValidator(FieldType fieldType)
 {
     return(StringActivator.CreateInstance <IFieldValidator>(fieldType.ValidatorCSharpClassName));
 }