internal static void SyncToServerItem(PostgreConfigureInfo configureInfo, PostgreServerDataRepositoryItem serverItem, bool resetDatabases = false) { serverItem.Name = configureInfo.Server; serverItem.Server = configureInfo.Server; serverItem.Port = configureInfo.Port; serverItem.UserName = configureInfo.UserName; serverItem.Password = configureInfo.Password; GetDatabasesParameter parameter = new GetDatabasesParameter(); parameter.ServerItem = serverItem; parameter.ResetDatabases = resetDatabases; foreach (var item in configureInfo.DbaseNames) { parameter.DatabaseNames.Add(item); } Task <Collection <DatabaseModel> > task = new Task <Collection <DatabaseModel> >(GetDatabaseItems, parameter); task.Start(); task.ContinueWith(t => { Application.Current.Dispatcher.BeginInvoke(() => { if (t.Result.Count > 0) { serverItem.Children.Clear(); foreach (var databaseItem in t.Result) { if (databaseItem.TableModels.Count > 0) { DatabaseDataRepositoryItem dbItem = new DatabaseDataRepositoryItem(); dbItem.Name = databaseItem.Name; var groupItems = databaseItem.TableModels.GroupBy(g => g.SchemaName); DataRepositoryItem schemaItem = new DataRepositoryItem(); schemaItem.Name = String.Format(CultureInfo.InvariantCulture, "{0} ({1})", "Schemas", groupItems.Count()); schemaItem.Icon = new BitmapImage(new Uri("/GisEditorPluginCore;component/Images/schemas.png", UriKind.RelativeOrAbsolute)); dbItem.Children.Add(schemaItem); foreach (var group in groupItems) { IEnumerable <string> tableGroup = group.Where(v => !v.IsView).Select(g => g.Name); IEnumerable <string> viewGroup = group.Where(v => v.IsView).Select(g => g.Name); AddSchemaChildrens(schemaItem, tableGroup, viewGroup, "/GisEditorPluginCore;component/Images/tablefolder.png", group.Key, databaseItem.Name); } serverItem.Children.Add(dbItem); DataRepositoryContentViewModel.RestoreChildrenExpandStatus(new ObservableCollection <DataRepositoryItem> { serverItem }, GisEditor.DataRepositoryManager.ExpandedFolders); } } } }); }); }
private static Collection <DatabaseModel> GetDatabaseItems(object obj) { GetDatabasesParameter tempParam = (GetDatabasesParameter)obj; if (tempParam.ResetDatabases) { try { Collection <string> databases = PostgreSqlFeatureSource.GetDatabaseNames(tempParam.ServerItem.Server, tempParam.ServerItem.Port, tempParam.ServerItem.UserName, tempParam.ServerItem.Password); tempParam.DatabaseNames.Clear(); foreach (var newDbaseName in databases) { tempParam.DatabaseNames.Add(newDbaseName); } } catch { } } Collection <DatabaseModel> result = new Collection <DatabaseModel>(); foreach (var dbName in tempParam.DatabaseNames) { DatabaseModel dbItem = new DatabaseModel(); dbItem.Name = dbName; try { string connectionString = GetConnectionString(tempParam.ServerItem, dbName); Collection <string> tableNames = PostgreSqlFeatureSource.GetTableNames(connectionString); Collection <string> viewNames = PostgreSqlFeatureSource.GetViewNames(connectionString); dbItem.TableModels.Clear(); foreach (var item in tableNames) { TableModel model = new TableModel(); model.Name = item; string pattern = string.Empty; int index = item.IndexOf(":", StringComparison.Ordinal); if (index != -1) { pattern = item.Substring(0, index); } model.SchemaName = pattern; dbItem.TableModels.Add(model); } foreach (var item in viewNames) { TableModel model = new TableModel(); model.Name = item; model.IsView = true; string pattern = string.Empty; int index = item.IndexOf(":", StringComparison.Ordinal); if (index != -1) { pattern = item.Substring(0, index); } model.SchemaName = pattern; dbItem.TableModels.Add(model); } } catch { } result.Add(dbItem); } return(result); }