예제 #1
0
 static ViewModelsReader()
 {
     // TODO: this could be handled by IoC container not class itself. But maybe it's beter to store this information in static fields? Think about.
     persistenceModelDescription    = PersistenceModelPropertiesDescriptionGenerator.GenerateDescription(typeof(TPersistenceModel));
     viewModelToPersistenceModelMap = ViewModelToPersistenceModelPropertyNamesMapsGenerator.Generate(
         typeof(TGridModel), persistenceModelDescription);
     projectionsList = ProjectionsGenerator.GenerateProjectionsList(viewModelToPersistenceModelMap);
 }
예제 #2
0
        public static ProjectionList GenerateProjectionsList(ViewModelToPersistenceModelPropertyNamesMaps viewModelToPersistenceModelMap)
        {
            var projectionsList = Projections.ProjectionList();

            projectionsList.Add(Projections.Id(), idPropertyName);
            foreach (var property in viewModelToPersistenceModelMap.AllProperties.Where(p => p.Key != idPropertyName))
            {
                projectionsList.Add(Projections.Property(property.Value), property.Key);
            }

            return(projectionsList);
        }
예제 #3
0
        public static QueryOver <TPersistenceModel, TPersistenceModel> ApplyOrder <TPersistenceModel>(
            this QueryOver <TPersistenceModel, TPersistenceModel> query,
            SortConfiguration sortSettings, ViewModelToPersistenceModelPropertyNamesMaps viewModelToPersistenceModelMap)
            where TPersistenceModel : IPersistenceModel
        {
            if (!viewModelToPersistenceModelMap.AllProperties.ContainsKey(sortSettings.PropertyName))
            {
                throw new ApplicationException("Property used to sort can not be found in ViewModelToPersistenceModelMap. Grid metamodel is probably broken.");
            }

            bool   ascending        = sortSettings.Mode == SortMode.Ascending;
            string sortPropertyName = viewModelToPersistenceModelMap.AllProperties[sortSettings.PropertyName];

            query.UnderlyingCriteria.AddOrder(new Order(sortPropertyName, ascending));

            return(query);
        }
예제 #4
0
        public static QueryOver <TPersistenceModel, TPersistenceModel> ApplyFilter <TPersistenceModel, TGridModel>(
            this QueryOver <TPersistenceModel, TPersistenceModel> query,
            FilterConfiguration <TGridModel> filterConfiguration,
            ViewModelToPersistenceModelPropertyNamesMaps viewModelToPersistenceModelMap)
            where TPersistenceModel : IPersistenceModel
            where TGridModel : IGridModelBase
        {
            foreach (var condition in filterConfiguration.Conditions)
            {
                if (!viewModelToPersistenceModelMap.AllProperties.ContainsKey(condition.PropertyName))
                {
                    throw new ApplicationException("Property used to filter records can not be found in ViewModelToPersistenceModelMap. Grid metamodel is probably broken.");
                }

                string conditionPropertyName = viewModelToPersistenceModelMap.AllProperties[condition.PropertyName];

                switch (condition.Operator)
                {
                case FilterOperator.Select:
                    query.UnderlyingCriteria.Add(Restrictions.Eq(conditionPropertyName, condition.Value));
                    break;

                case FilterOperator.Like:
                    query.UnderlyingCriteria.Add(Restrictions.Like(conditionPropertyName, $"%{condition.Value}%"));
                    break;

                case FilterOperator.DateEquals:
                    var initDate = (DateTime)condition.Value;
                    var endDate  = initDate.AddDays(1).AddSeconds(-1);
                    query.UnderlyingCriteria.Add(Restrictions.Between(conditionPropertyName, initDate, endDate));
                    break;
                }
            }

            return(query);
        }