private static async Task <ReadGridDictionaryInfo> ReadGridDictionaryAsync(Package package, Type recordType, string file) { using (ICacheDataProvider cacheDP = YetaWF.Core.IO.Caching.GetStaticSmallObjectCacheProvider()) { // Check cache first GetObjectInfo <ReadGridDictionaryInfo> info = await cacheDP.GetAsync <ReadGridDictionaryInfo>(file); if (info.Success) { return(info.Data); } // Load the file Dictionary <string, GridColumnInfo> dict = new Dictionary <string, GridColumnInfo>(); if (YetaWFManager.DiagnosticsMode) // to avoid exception spam { if (!await FileSystem.FileSystemProvider.FileExistsAsync(file)) { ReadGridDictionaryInfo dictInfo = new ReadGridDictionaryInfo { ColumnInfo = dict, SortColumn = null, SortBy = GridDefinition.SortBy.NotSpecified, Success = false, }; await cacheDP.AddAsync <ReadGridDictionaryInfo>(file, dictInfo);// failure also saved in cache return(dictInfo); } } List <string> lines; try { lines = await FileSystem.FileSystemProvider.ReadAllLinesAsync(file); } catch (Exception) { ReadGridDictionaryInfo dictInfo = new ReadGridDictionaryInfo { ColumnInfo = dict, SortColumn = null, SortBy = GridDefinition.SortBy.NotSpecified, Success = false, }; await cacheDP.AddAsync <ReadGridDictionaryInfo>(file, dictInfo);// failure also saved in cache return(dictInfo); } // Parse the file string sortCol = null; GridDefinition.SortBy sortDir = GridDefinition.SortBy.NotSpecified; Config config = null; foreach (string line in lines) { string[] parts = line.Split(new char[] { ' ', '\t' }, StringSplitOptions.RemoveEmptyEntries); GridColumnInfo gridCol = new GridColumnInfo(); int len = parts.Length; if (len > 0) { bool add = true; string name = parts[0]; if (name == "Config") { if (config != null) { throw new InternalError($"Only one Config statement can be used in {file}"); } string rest = string.Join(" ", parts.Skip(1)); config = Utility.JsonDeserialize <Config>(rest); continue; } for (int i = 1; i < len; ++i) { string part = GetPart(parts[i], package, recordType, file, name); if (string.Compare(part, "sort", true) == 0) { gridCol.Sortable = true; } else if (string.Compare(part, "locked", true) == 0) { gridCol.Locked = true; } else if (string.Compare(part, "left", true) == 0) { gridCol.Alignment = GridHAlignmentEnum.Left; } else if (string.Compare(part, "center", true) == 0) { gridCol.Alignment = GridHAlignmentEnum.Center; } else if (string.Compare(part, "right", true) == 0) { gridCol.Alignment = GridHAlignmentEnum.Right; } else if (string.Compare(part, "hidden", true) == 0) { gridCol.Hidden = true; } else if (string.Compare(part, "onlysubmitwhenchecked", true) == 0) { gridCol.OnlySubmitWhenChecked = true; } else if (string.Compare(part, "icons", true) == 0) { int n = GetNextNumber(parts, i, part, file, name); if (n < 1) { throw new InternalError("Icons must be >= 1 for column {0} in {1}", name, file); } gridCol.Icons = n; gridCol.Alignment = GridHAlignmentEnum.Center;// default is centered ++i; } else if (string.Compare(part, "defaultSort", true) == 0) { sortCol = name; part = GetNextPart(parts, i, part, file, name); if (part == "asc") { sortDir = GridDefinition.SortBy.Ascending; } else if (part == "desc") { sortDir = GridDefinition.SortBy.Descending; } else { throw new InternalError("Missing Asc/Desc following defaultSort for column {1} in {2}", part, name, file); } ++i; } else if (string.Compare(part, "internal", true) == 0) { bool showInternals = UserSettings.GetProperty <bool>("ShowInternals"); if (!showInternals) { add = false; break; } } else if (string.Compare(part, "filter", true) == 0) { if (gridCol.FilterOptions.Count > 0) { throw new InternalError("Multiple filter options in {0} for {1}", file, name); } gridCol.FilterOptions = GetAllFilterOptions(); } else if (part.StartsWith("filter(", StringComparison.InvariantCultureIgnoreCase)) { if (gridCol.FilterOptions.Count > 0) { throw new InternalError("Multiple filter options in {0} for {1}", file, name); } gridCol.FilterOptions = GetFilterOptions(part.Substring(6), file, name); } else if (part.EndsWith("pix", StringComparison.InvariantCultureIgnoreCase)) { if (gridCol.ChWidth != 0) { throw new InternalError("Can't use character width and pixel width at the same time in {0} for {1}", file, name); } part = part.Substring(0, part.Length - 3); int n = GetNumber(part, file, name); gridCol.PixWidth = n; } else { if (gridCol.PixWidth != 0) { throw new InternalError("Can't use character width and pixel width at the same time in {0} for {1}", file, name); } int n = GetNumber(part, file, name); gridCol.ChWidth = n; } } if (add) { try { dict.Add(name, gridCol); } catch (Exception exc) { throw new InternalError("Can't add {1} in {0} - {2}", file, name, ErrorHandling.FormatExceptionMessage(exc)); } } } } { ReadGridDictionaryInfo dictInfo = new ReadGridDictionaryInfo { ColumnInfo = dict, SortBy = sortDir, SortColumn = sortCol, Success = true, SaveColumnWidths = config != null ? config.SaveWidths : null, SaveColumnFilters = config != null ? config.SaveFilters : null, InitialPageSize = config != null ? config?.InitialPageSize : null, PageSizes = config?.PageSizes, ShowHeader = config?.ShowHeader, ShowFilter = config?.ShowFilter, ShowPager = config?.ShowPager, SizeStyle = config?.SizeStyle, }; // save in cache await cacheDP.AddAsync <ReadGridDictionaryInfo>(file, dictInfo); return(dictInfo); } } }
public static async Task SaveSettingsAsync(GridPartialData gridData) { // save the current sort order and page size if (gridData.GridDef.SettingsModuleGuid != null && gridData.GridDef.SettingsModuleGuid != Guid.Empty) { GridLoadSave.GridSavedSettings gridSavedSettings = GridLoadSave.LoadModuleSettings((Guid)gridData.GridDef.SettingsModuleGuid); gridSavedSettings.PageSize = gridData.Take; if (gridData.Take == 0) { gridSavedSettings.CurrentPage = 1; } else { gridSavedSettings.CurrentPage = Math.Max(1, gridData.Skip / gridData.Take + 1); } foreach (GridDefinition.ColumnInfo col in gridSavedSettings.Columns.Values) { col.Sort = GridDefinition.SortBy.NotSpecified; } if (gridData.Sorts != null) { foreach (var sortCol in gridData.Sorts) { GridDefinition.SortBy sortDir = (sortCol.Order == DataProviderSortInfo.SortDirection.Ascending) ? GridDefinition.SortBy.Ascending : GridDefinition.SortBy.Descending; if (gridSavedSettings.Columns.ContainsKey(sortCol.Field)) { gridSavedSettings.Columns[sortCol.Field].Sort = sortDir; } else { gridSavedSettings.Columns.Add(sortCol.Field, new GridDefinition.ColumnInfo { Sort = sortDir }); } } } GridDictionaryInfo.ReadGridDictionaryInfo dictInfo = await GridDictionaryInfo.LoadGridColumnDefinitionsAsync(gridData.GridDef); foreach (GridDefinition.ColumnInfo col in gridSavedSettings.Columns.Values) { col.FilterOperator = null; col.FilterValue = null; } if (gridData.Filters != null && dictInfo.SaveColumnFilters != false) { foreach (var filterCol in gridData.Filters) { if (gridSavedSettings.Columns.ContainsKey(filterCol.Field)) { gridSavedSettings.Columns[filterCol.Field].FilterOperator = filterCol.Operator; gridSavedSettings.Columns[filterCol.Field].FilterValue = filterCol.ValueAsString; } else { gridSavedSettings.Columns.Add(filterCol.Field, new GridDefinition.ColumnInfo { FilterOperator = filterCol.Operator, FilterValue = filterCol.ValueAsString, }); } } } GridLoadSave.SaveModuleSettings((Guid)gridData.GridDef.SettingsModuleGuid, gridSavedSettings); } }