Esempio n. 1
0
        /// <summary>
        ///     获取实例节点
        ///     这里将形成左侧的树型目录
        /// </summary>
        /// <param name="mongoConnKey"></param>
        /// <param name="config">由于是结构体,必须ref</param>
        /// <param name="mongoConn"></param>
        /// <param name="mMasterServerInstace"></param>
        /// <param name="userList"></param>
        /// <returns></returns>
        private static TreeNode GetInstanceNode(string mongoConnKey, ref MongoConnectionConfig config,
                                                MongoClient mongoClient)
        {
            //无论如何,都改为主要服务器读优先
            var svrInstanceNode = new TreeNode();
            var connSvrKey      = mongoConnKey + "/" + mongoConnKey;

            svrInstanceNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.WebServer;
            svrInstanceNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.WebServer;
            svrInstanceNode.Text = "Server";
            if (!string.IsNullOrEmpty(config.UserName) & (!string.IsNullOrEmpty(config.Password)))
            {
                //是否是认证模式,应该取决于服务器!
                config.AuthMode = true;
            }
            //获取ReadOnly
            config.IsReadOnly = false;
            if (!string.IsNullOrEmpty(config.DataBaseName))
            {
                //单数据库模式
                var mongoSingleDbNode = FillDataBaseInfoToTreeNode(config.DataBaseName,
                                                                   mongoConnKey + "/" + mongoConnKey, null);
                mongoSingleDbNode.Tag = ConstMgr.SingleDatabaseTag + ":" + connSvrKey + "/" + config.DataBaseName;
                mongoSingleDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
                mongoSingleDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
                svrInstanceNode.Nodes.Add(mongoSingleDbNode);
                svrInstanceNode.Tag = ConstMgr.SingleDbServerTag + ":" + connSvrKey;
            }
            else
            {
                var setting          = RuntimeMongoDbContext.CreateMongoClientSettingsByConfig(ref config);
                var client           = new MongoClient(setting);
                var databaseNameList = GetConnectionInfo.GetDatabaseList(client);
                foreach (var strDbName in databaseNameList)
                {
                    TreeNode mongoDbNode;
                    try
                    {
                        var dbName = strDbName.GetElement("name").Value.ToString();
                        mongoDbNode                    = FillDataBaseInfoToTreeNode(dbName, connSvrKey, client);
                        mongoDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
                        mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
                        svrInstanceNode.Nodes.Add(mongoDbNode);
                    }
                    catch (Exception ex)
                    {
                        Utility.ExceptionDeal(ex, strDbName + "Exception", strDbName + "Exception");
                        mongoDbNode = new TreeNode(strDbName + " (Exception)")
                        {
                            ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database,
                            SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database
                        };
                        svrInstanceNode.Nodes.Add(mongoDbNode);
                    }
                }
            }
            svrInstanceNode.Tag = ConstMgr.ServerTag + ":" + mongoConnKey + "/" + mongoConnKey;
            return(svrInstanceNode);
        }
        /// <summary>
        ///     将数据库放入Node
        /// </summary>
        /// <param name="strDbName"></param>
        /// <param name="mongoSvrKey"></param>
        /// <param name="client"></param>
        /// <returns></returns>
        public static TreeNode FillDataBaseInfoToTreeNode(string strDbName, string mongoSvrKey,
                                                          MongoClient client = null)
        {
            var strShowDbName = strDbName;

            if (!GuiConfig.IsUseDefaultLanguage)
            {
                if (StringResource.LanguageType == "Chinese")
                {
                    switch (strDbName)
                    {
                    case ConstMgr.DatabaseNameAdmin:
                        strShowDbName = "管理员权限(admin)";
                        break;

                    case "local":
                        strShowDbName = "本地(local)";
                        break;

                    case "config":
                        strShowDbName = "配置(config)";
                        break;
                    }
                }
            }
            var mongoDbNode = new TreeNode(strShowDbName);

            mongoDbNode.Tag = TagInfo.CreateTagInfo(mongoSvrKey, strDbName);

            var userNode = new TreeNode("User", (int)GetSystemIcon.MainTreeImageType.UserIcon,
                                        (int)GetSystemIcon.MainTreeImageType.UserIcon);

            userNode.Tag = ConstMgr.UserListTag + ":" + mongoSvrKey + "/" + strDbName + "/" +
                           ConstMgr.CollectionNameUser;
            mongoDbNode.Nodes.Add(userNode);

            var jsNode = new TreeNode("JavaScript", (int)GetSystemIcon.MainTreeImageType.JavaScriptList,
                                      (int)GetSystemIcon.MainTreeImageType.JavaScriptList);

            jsNode.Tag = ConstMgr.JavascriptTag + ":" + mongoSvrKey + "/" + strDbName + "/" +
                         ConstMgr.CollectionNameJavascript;
            mongoDbNode.Nodes.Add(jsNode);

            var gfsNode = new TreeNode("Grid File System", (int)GetSystemIcon.MainTreeImageType.Gfs,
                                       (int)GetSystemIcon.MainTreeImageType.Gfs);

            gfsNode.Tag = ConstMgr.GridFileSystemTag + ":" + mongoSvrKey + "/" + strDbName + "/" +
                          ConstMgr.CollectionNameGfsFiles;
            mongoDbNode.Nodes.Add(gfsNode);

            var mongoSysColListNode = new TreeNode("Collections(System)",
                                                   (int)GetSystemIcon.MainTreeImageType.SystemCol, (int)GetSystemIcon.MainTreeImageType.SystemCol);

            mongoSysColListNode.Tag = ConstMgr.SystemCollectionListTag + ":" + mongoSvrKey + "/" + strDbName;
            mongoDbNode.Nodes.Add(mongoSysColListNode);

            var mongoColListNode = new TreeNode("Collections(General)",
                                                (int)GetSystemIcon.MainTreeImageType.CollectionList,
                                                (int)GetSystemIcon.MainTreeImageType.CollectionList);

            mongoColListNode.Tag = ConstMgr.CollectionListTag + ":" + mongoSvrKey + "/" + strDbName;
            var colNameList = GetConnectionInfo.GetCollectionList(client, strDbName);

            //Collection按照名称排序
            colNameList.Sort((x, y) => {
                return(x.GetElement("name").Value.ToString().CompareTo(y.GetElement("name").Value.ToString()));
            });
            foreach (var colDoc in colNameList)
            {
                var strColName = colDoc.GetElement("name").Value.ToString();
                switch (strColName)
                {
                case ConstMgr.CollectionNameUser:
                    //system.users,fs,system.js这几个系统级别的Collection不需要放入
                    break;

                case ConstMgr.CollectionNameJavascript:
                    //foreach (var doc in  MongoHelper.NewUtility.GetConnectionInfo.GetCollectionInfo(client, strDBName, ConstMgr.COLLECTION_NAME_JAVASCRIPT).Find<BsonDocument>(null,null))
                    //{
                    //    var js = new TreeNode(doc.GetValue(ConstMgr.KEY_ID).ToString());
                    //    js.ImageIndex = (int) GetSystemIcon.MainTreeImageType.JsDoc;
                    //    js.SelectedImageIndex = (int) GetSystemIcon.MainTreeImageType.JsDoc;
                    //    js.Tag = ConstMgr.JAVASCRIPT_DOC_TAG + ":" + mongoSvrKey + "/" + strDBName + "/" +
                    //             ConstMgr.COLLECTION_NAME_JAVASCRIPT + "/" + doc.GetValue(ConstMgr.KEY_ID);
                    //    JsNode.Nodes.Add(js);
                    //}

                    FillJavaScriptInfoToTreeNode(jsNode,
                                                 GetConnectionInfo.GetCollectionInfo(client, strDbName, strColName), mongoSvrKey, strDbName);

                    break;

                default:
                    TreeNode mongoColNode;
                    try
                    {
                        var col = GetConnectionInfo.GetCollectionInfo(client, strDbName, strColName);
                        mongoColNode = FillCollectionInfoToTreeNode(col, mongoSvrKey);
                    }
                    catch (Exception ex)
                    {
                        mongoColNode                    = new TreeNode(strColName + "[exception:]");
                        mongoColNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Err;
                        mongoColNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Err;
                        Utility.ExceptionDeal(ex);
                    }
                    if (Operater.IsSystemCollection(strDbName, strColName))
                    {
                        switch (strColName)
                        {
                        case ConstMgr.CollectionNameGfsChunks:
                        case ConstMgr.CollectionNameGfsFiles:
                            gfsNode.Nodes.Add(mongoColNode);
                            break;

                        default:
                            mongoSysColListNode.Nodes.Add(mongoColNode);
                            break;
                        }
                    }
                    else
                    {
                        mongoColListNode.Nodes.Add(mongoColNode);
                    }
                    break;
                }
            }
            mongoDbNode.Nodes.Add(mongoColListNode);
            mongoDbNode.ImageIndex         = (int)GetSystemIcon.MainTreeImageType.Database;
            mongoDbNode.SelectedImageIndex = (int)GetSystemIcon.MainTreeImageType.Database;
            return(mongoDbNode);
        }