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); }
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); }
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); }
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); }