private IEnumerable<IFilterCondition> TranslateFilterConditions(IEnumerable<FilterCondition> filterConditions, IByContextSettings settings)
 {
     foreach (var filterCondition in filterConditions)
     {
         IFilterConditionFactory factory = this._helper.GetConfigurationProperty(filterCondition, x => x.ConditionName, () => settings.FilterConditionFactories[settings.DefaultFilterConditionName], x => settings.FilterConditionFactories[x]);
         yield return factory.Create(filterCondition.Properties);
     }
 }
 private IEnumerable<Tuple<IValueProvider, IFilterCondition[]>> BuildValueProviders(Parameter parameter, IByContextSettings settings)
 {
     foreach (var parameterValue in parameter.Values)
     {
         IEnumerable<IFilterCondition> filterConditions = this.TranslateFilterConditions(parameterValue.FilterConditions, settings);
         yield return new Tuple<IValueProvider, IFilterCondition[]>(settings.ValueProviderBuilder.Build(parameter, parameterValue),filterConditions.ToArray());
     }
 }
        private void BuildParameterProvider(IByContextSettings settings, SectionProvider provider, Parameter parameter, PropertyInfo parameterPropertyInfo)
        {
            if (string.IsNullOrEmpty(parameter.TypeName))
            {
                parameter.TypeName = parameterPropertyInfo.PropertyType.AssemblyQualifiedName;
            }
            else if (!parameterPropertyInfo.PropertyType.IsAssignableFrom(Type.GetType(parameter.TypeName, true)))
            {
                throw new InvalidParameterConfiguration(string.Format("Specified type {0} for parameter {1} is not assignable to the property of type {2}", parameter.TypeName, parameter.Name,parameterPropertyInfo.PropertyType.FullName));
            }

            /*var valueProvider = new ParameterToParameterValueProviderConverter().Convert(parameter, settings);*/
            var valueProvider = new ParameterToQueryEngineParameterValueProviderConverter().Convert(parameter, settings);

            provider.ParameterValuesProviders.Add(parameterPropertyInfo.Name, valueProvider);
        }
        public IParameterValueProvider Convert(Parameter parameter, IByContextSettings settings)
        {
            var parameterType = Type.GetType(parameter.TypeName, true);

            var required = this.GetRequired(parameter);

            bool isParameterSupportedCollection = settings.ResultBuilderProvider.IsTypeIsSupportedCollection(parameterType);
            var engine = this.BuildQueryEngine(parameter, settings, isParameterSupportedCollection);

            var resultBuilder = settings.ResultBuilderProvider.Get(parameterType);

            IParameterValueProvider parameterValueProvider = new QueryEngineParameterValueProvider
                (engine, resultBuilder, required, parameter.Name, settings.LogggerProvider);

            return parameterValueProvider;
        }
        public ISectionProvider Convert(Section section, IByContextSettings settings)
        {
            try
            {
                Type sectionType = Type.GetType(section.TypeName, true);

                var binder = this.GetModelBinderForSection(sectionType, section, settings);

                var provider = new SectionProvider { SectionType = sectionType, ModelBinder = binder };

                this.BuildParametersProviders(section, settings, provider, sectionType);

                return provider;
            }
            catch (Exception e)
            {
                throw new SessionToProviderConvertionFailed(section, e);
            }
        }
        private void BuildParametersProviders(Section section, IByContextSettings settings, SectionProvider provider, Type sectionType)
        {
            var properties = sectionType.GetProperties(BindingFlags.Public | BindingFlags.Instance);
            foreach (Parameter parameter in section.Parameters.Values)
            {
                var parameterPropertyInfo = properties.SingleOrDefault(x => x.Name.ToLower() == parameter.Name.ToLower());

                if (parameterPropertyInfo == null)
                {
                    if(settings.ThrowIfParameterMemberMissing)
                    {
                        throw new MemberNotFoundForParameter(parameter);
                    }
                }
                else
                {
                    this.BuildParameterProvider(settings, provider, parameter, parameterPropertyInfo);
                }
            }
        }
 public EagerLoadValueProviderBuilderStrategy(IByContextSettings settings)
 {
     _settings = settings;
 }
 private IQueryEngine BuildQueryEngine(Parameter parameter, IByContextSettings settings, bool isParameterSupportedCollection)
 {
     var queriableItems = this.BuildValueProviders(parameter, settings).Select(x => QueriableItem.Create(x.Item1, x.Item2));
     return settings.QueryEngineBuilder.Get(queriableItems, isParameterSupportedCollection);
 }
 private IModelBinder GetModelBinderForSection(Type sectionType, Section section, IByContextSettings settings)
 {
     var factory = new ConfigurationHelper()
         .GetConfigurationProperty<Section, IModelBinderFactory>(section, x => x.ModelBinderFactory, settings.ModelBinderFactory,
                                                          x => settings.ModelBinderFactory);
     return factory.Create(sectionType);
 }
 public ConvertFromSectionDataProvider(Func<IEnumerable<Section>> getMehtod, IByContextSettings settings)
 {
     this.GetMehtod = getMehtod;
     this.Settings = settings;
 }
 public EagerLoadValueProviderDecorator(IValueProvider inner, IByContextSettings settings)
 {
     _inner = inner;
     settings.AfterInitListeners.Add(this);
 }