Exemple #1
0
        /// <summary>
        ///     运行插件
        /// </summary>
        /// <param name="PlugInKeyCode"></param>
        public static void RunPlugIn(string PlugInKeyCode)
        {
            Assembly        mAssem          = Assembly.LoadFile(Application.StartupPath + @"\PlugIn\" + PlugInKeyCode + ".dll");
            String          TypeName        = PlugInKeyCode;
            Type            mType           = mAssem.GetType(TypeName + "." + TypeName);
            ConstructorInfo ConstructorInfo = mType.GetConstructor(new Type[] {});
            var             mPlug           = (PlugBase)ConstructorInfo.Invoke(new object[] {});

            switch (PlugInList[PlugInKeyCode].RunLv)
            {
            case PlugBase.PathLv.ConnectionLV:
                mPlug.PlugObj = SystemManager.GetCurrentServer();
                break;

            case PlugBase.PathLv.InstanceLV:
                mPlug.PlugObj = SystemManager.GetCurrentServer();
                break;

            case PlugBase.PathLv.DatabaseLV:
                mPlug.PlugObj = SystemManager.GetCurrentDataBase();
                break;

            case PlugBase.PathLv.CollectionLV:
                mPlug.PlugObj = SystemManager.GetCurrentCollection();
                break;

            case PlugBase.PathLv.DocumentLV:
                break;

            default:
                break;
            }
            mPlug.Run();
        }
Exemple #2
0
        /// <summary>
        /// 下载文件
        /// </summary>
        /// <param name="strFileName"></param>
        public static void DownloadFile(String strLocalFileName, String strRemoteFileName)
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();
            MongoGridFS   gfs     = mongoDB.GetGridFS(new MongoGridFSSettings());

            gfs.Download(strLocalFileName, strRemoteFileName);
        }
Exemple #3
0
        ///在使用GirdFileSystem的时候,请注意:
        ///1.Windows 系统的文件名不区分大小写,不过,filename一定是区分大小写的,如果大小写不匹配的话,会发生无法找到文件的问题
        ///2.Download的时候,不能使用SlaveOk选项!

        /// <summary>
        /// 打开文件
        /// </summary>
        /// <param name="strFileName"></param>
        public static void OpenFile(String strRemoteFileName)
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();
            MongoGridFS   gfs     = mongoDB.GetGridFS(new MongoGridFSSettings());

            String[] strLocalFileName = strRemoteFileName.Split(System.IO.Path.DirectorySeparatorChar);

            try
            {
                if (!Directory.Exists(TempFileFolder))
                {
                    Directory.CreateDirectory(TempFileFolder);
                }
                String LocalFileName = TempFileFolder + System.IO.Path.DirectorySeparatorChar + strLocalFileName[strLocalFileName.Length - 1];
                gfs.Download(LocalFileName, strRemoteFileName);
                System.Diagnostics.Process.Start(LocalFileName);
            }
            catch (System.ComponentModel.Win32Exception)
            {
                MyMessageBox.ShowEasyMessage("Error", "No Program can open this file");
            }
            catch (Exception ex)
            {
                SystemManager.ExceptionDeal(ex, "Error", "Exception happend when open file");
            }
        }
Exemple #4
0
        /// <summary>
        /// 删除文件
        /// </summary>
        /// <param name="strFileName"></param>
        public static void DelFile(String strFileName)
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();
            MongoGridFS   gfs     = mongoDB.GetGridFS(new MongoGridFSSettings());

            gfs.Delete(strFileName);
        }
Exemple #5
0
        /// <summary>
        /// Js数据集初始化
        /// </summary>
        public static void InitJavascript()
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();

            if (!mongoDB.CollectionExists(COLLECTION_NAME_JAVASCRIPT))
            {
                mongoDB.CreateCollection(COLLECTION_NAME_JAVASCRIPT);
            }
        }
Exemple #6
0
        /// <summary>
        /// 数据库User初始化
        /// </summary>
        public static void InitDBUser()
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();

            if (!mongoDB.CollectionExists(COLLECTION_NAME_USER))
            {
                mongoDB.CreateCollection(COLLECTION_NAME_USER);
            }
        }
Exemple #7
0
        /// <summary>
        /// GFS初始化
        /// </summary>
        public static void InitGFS()
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();

            if (!mongoDB.CollectionExists(COLLECTION_NAME_GFS_FILES))
            {
                mongoDB.CreateCollection(COLLECTION_NAME_GFS_FILES);
            }
        }
Exemple #8
0
        /// <summary>
        /// Remove User
        /// </summary>
        /// <param name="strUser">Username</param>
        public static void RemoveUserFromDB(String strUser)
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();

            if (mongoDB.FindUser(strUser) != null)
            {
                mongoDB.RemoveUser(strUser);
            }
        }
        /// <summary>
        /// 获得用户当前角色
        /// </summary>
        /// <returns></returns>
        public static BsonArray GetCurrentDBRoles()
        {
            BsonArray Roles          = new BsonArray();
            String    ConnectionName = SystemManager.GetCurrentServerConfig().ConnectionName;
            String    DBName         = SystemManager.GetCurrentDataBase().Name;

            Roles = _mongoUserLst[ConnectionName].GetRolesByDBName(DBName);
            return(Roles);
        }
Exemple #10
0
        /// <summary>
        /// Add User
        /// </summary>
        /// <param name="strUser">Username</param>
        /// <param name="password">Password</param>
        /// <param name="isReadOnly">Is ReadOnly</param>
        public static void AddUserToDB(String strUser, String password, Boolean isReadOnly)
        {
            MongoDatabase mongoDB = SystemManager.GetCurrentDataBase();
            MongoUser     newUser = new MongoUser(strUser, password, false);

            if (mongoDB.FindUser(strUser) == null)
            {
                mongoDB.AddUser(newUser);
            }
        }
        /// <summary>
        ///     当前对象的MONGO命令
        /// </summary>
        /// <param name="mMongoCommand">命令对象</param>
        /// <param name="ShowMsgBox"></param>
        /// <returns></returns>
        public static CommandResult ExecuteMongoCommand(MongoCommand mMongoCommand, Boolean ShowMsgBox = true)
        {
            var ResultCommandList = new List <CommandResult>();

            var mCommandResult = new CommandResult(new BsonDocument());

            try
            {
                switch (mMongoCommand.RunLevel)
                {
                case MongoDbHelper.PathLv.CollectionLv:
                    if (String.IsNullOrEmpty(mMongoCommand.CommandString))
                    {
                        mCommandResult = ExecuteMongoColCommand(mMongoCommand.cmdDocument,
                                                                SystemManager.GetCurrentCollection());
                    }
                    else
                    {
                        mCommandResult = ExecuteMongoColCommand(mMongoCommand.CommandString,
                                                                SystemManager.GetCurrentCollection());
                    }
                    break;

                case MongoDbHelper.PathLv.DatabaseLv:
                    mCommandResult = ExecuteMongoDBCommand(mMongoCommand.cmdDocument,
                                                           SystemManager.GetCurrentDataBase());
                    break;

                case MongoDbHelper.PathLv.InstanceLv:
                    mCommandResult = ExecuteMongoSvrCommand(mMongoCommand.cmdDocument,
                                                            SystemManager.GetCurrentServer());
                    break;

                default:
                    break;
                }
                ResultCommandList.Add(mCommandResult);
                if (ShowMsgBox)
                {
                    MyMessageBox.ShowMessage(mMongoCommand.CommandString, mMongoCommand.CommandString + " Result",
                                             MongoDbHelper.ConvertCommandResultlstToString(ResultCommandList), true);
                }
            }
            catch (IOException ex)
            {
                SystemManager.ExceptionDeal(ex, mMongoCommand.CommandString,
                                            "IOException,Try to set Socket TimeOut more long at connection config");
            }
            catch (Exception ex)
            {
                SystemManager.ExceptionDeal(ex, mMongoCommand.CommandString);
            }

            return(mCommandResult);
        }
        /// <summary>
        /// Remove A User From Admin database
        /// </summary>
        /// <param name="strUser">UserName</param>
        public static void RemoveUserFromSystem(String strUser, Boolean IsAdmin)
        {
            MongoServer     mongoSvr = SystemManager.GetCurrentServer();
            MongoCollection users;

            if (IsAdmin)
            {
                users = mongoSvr.GetDatabase(DATABASE_NAME_ADMIN).GetCollection(MongoDBHelper.COLLECTION_NAME_USER);
            }
            else
            {
                users = SystemManager.GetCurrentDataBase().GetCollection(MongoDBHelper.COLLECTION_NAME_USER);
            }
            users.Remove(MongoDB.Driver.Builders.Query.EQ("user", strUser));
        }
Exemple #13
0
        /// <summary>
        /// 当前对象的MONGO命令
        /// </summary>
        /// <param name="cmd">命令对象</param>
        /// <returns></returns>
        public static void ExecuteMongoCommand(MongoCommand cmd)
        {
            var Command = new CommandDocument {
                { cmd.CommandString, 1 }
            };
            List <CommandResult> ResultCommandList = new List <CommandResult>();

            CommandResult rtn = new CommandResult();

            try
            {
                switch (cmd.RunLevel)
                {
                case PathLv.CollectionLV:
                    rtn = ExecuteMongoColCommand(cmd.CommandString, SystemManager.GetCurrentCollection());
                    break;

                case PathLv.DatabaseLV:
                    rtn = ExecuteMongoDBCommand(Command, SystemManager.GetCurrentDataBase());
                    break;

                case PathLv.ServerLV:
                    rtn = ExecuteMongoSvrCommand(Command, SystemManager.GetCurrentServer());
                    break;

                default:
                    break;
                }
                ResultCommandList.Add(rtn);
                MyMessageBox.ShowMessage(cmd.CommandString, cmd.CommandString + " Result", MongoDBHelper.ConvertCommandResultlstToString(ResultCommandList), true);
            }
            catch (System.IO.IOException ex)
            {
                MyMessageBox.ShowMessage(cmd.CommandString, "IOException,Try to set Socket TimeOut more long at connection config", ex.ToString(), true);
            }
            catch (Exception ex)
            {
                SystemManager.ExceptionDeal(ex, cmd.CommandString);
            }
        }
        //这里有个漏洞,对于数据库来说,对于local的验证和对于admin的验证是相同的。
        //如果是加入用户到服务器中,是加入到local还是admin,需要考虑一下。

        /// <summary>
        /// AddUserToSystem
        /// </summary>
        /// <param name="newUserEx">用户信息</param>
        /// <param name="IsAdmin">是否是Admin</param>
        public static void AddUserToSystem(MongoUserEx newUserEx, Boolean IsAdmin)
        {
            MongoServer mongoSvr = SystemManager.GetCurrentServer();
            //必须使用MongoCredentials来添加用户,不然的话,Password将使用明文登入到数据库中!
            //这样的话,在使用MongoCredentials登入的时候,会发生密码错误引发的认证失败
            MongoCollection users;

            if (IsAdmin)
            {
                users = mongoSvr.GetDatabase(DATABASE_NAME_ADMIN).GetCollection(MongoDBHelper.COLLECTION_NAME_USER);
            }
            else
            {
                users = SystemManager.GetCurrentDataBase().GetCollection(MongoDBHelper.COLLECTION_NAME_USER);
            }
            //以下代码 1.Ver2.4以前的有ReadOnly,FindUser需要寻找ReadOnly字段
            //         2.这个其实不用检查,有的话修改,没有的话,新建
            //if (users.Database.FindUser(newUserEx.Username) == null)
            //{
            AddUserEx(users, newUserEx);
            //}
        }
Exemple #15
0
        /// <summary>
        /// 上传文件
        /// </summary>
        /// <remarks>Mongo允许同名文件,因为id才是主键</remarks>
        /// <param name="strFileName"></param>
        public static UploadResult UpLoadFile(String strFileName, UpLoadFileOption Option)
        {
            MongoDatabase mongoDB    = SystemManager.GetCurrentDataBase();
            MongoGridFS   gfs        = mongoDB.GetGridFS(new MongoGridFSSettings());
            String        RemoteName = String.Empty;

            if (Option.FileNameOpt == enumGFSFileName.filename)
            {
                RemoteName = new FileInfo(strFileName).Name;
            }
            else
            {
                if (Option.DirectorySeparatorChar != Path.DirectorySeparatorChar)
                {
                    RemoteName = strFileName.Replace(Path.DirectorySeparatorChar, Option.DirectorySeparatorChar);
                }
                else
                {
                    RemoteName = strFileName;
                }
            }
            try
            {
                OnActionDone(new ActionDoneEventArgs(RemoteName + " Uploading "));
                if (!gfs.Exists(RemoteName))
                {
                    gfs.Upload(strFileName, RemoteName);
                    return(UploadResult.Complete);
                }
                else
                {
                    switch (Option.AlreadyOpt)
                    {
                    case enumGFSAlready.JustAddIt:
                        gfs.Upload(strFileName, RemoteName);
                        return(UploadResult.Complete);

                    case enumGFSAlready.RenameIt:
                        String ExtendName = new FileInfo(strFileName).Extension;
                        String MainName   = RemoteName.Substring(0, RemoteName.Length - ExtendName.Length);
                        int    i          = 1;
                        while (gfs.Exists(MainName + i.ToString() + ExtendName))
                        {
                            i++;
                        }
                        gfs.Upload(strFileName, MainName + i.ToString() + ExtendName);
                        return(UploadResult.Complete);

                    case enumGFSAlready.SkipIt:
                        return(UploadResult.Skip);

                    case enumGFSAlready.OverwriteIt:
                        gfs.Delete(RemoteName);
                        gfs.Upload(strFileName, RemoteName);
                        return(UploadResult.Complete);

                    case enumGFSAlready.Stop:
                        return(UploadResult.Skip);
                    }
                    return(UploadResult.Skip);
                }
            }
            catch (Exception ex)
            {
                SystemManager.ExceptionDeal(ex);
                return(UploadResult.Exception);
            }
        }
        /// <summary>
        ///     数据库操作
        /// </summary>
        /// <param name="strObjTag"></param>
        /// <param name="dbName"></param>
        /// <param name="func"></param>
        /// <param name="tr"></param>
        /// <returns></returns>
        public static String DataBaseOpration(String strObjTag, String dbName, Oprcode func, TreeNode tr)
        {
            String      rtnResult  = String.Empty;
            MongoServer mongoSvr   = GetMongoServerBySvrPath(strObjTag);
            String      strSvrPath = SystemManager.GetTagData(strObjTag);
            String      svrKey     = strSvrPath.Split("/".ToCharArray())[(int)PathLv.InstanceLv];
            var         result     = new CommandResult(new BsonDocument());

            if (mongoSvr != null)
            {
                switch (func)
                {
                case Oprcode.Create:
                    if (!mongoSvr.DatabaseExists(dbName))
                    {
                        //从权限上看,clusterAdmin是必须的
                        //但是能够建立数据库,不表示能够看到里面的内容!
                        //dbAdmin可以访问数据库。
                        //clusterAdmin能创建数据库但是不能访问数据库。
                        try
                        {
                            mongoSvr.GetDatabase(dbName);
                            tr.Nodes.Add(UIHelper.FillDataBaseInfoToTreeNode(dbName, mongoSvr, svrKey + "/" + svrKey));
                        }
                        catch (Exception ex)
                        {
                            //如果使用没有dbAdmin权限的clusterAdmin。。。。
                            SystemManager.ExceptionDeal(ex);
                        }
                    }
                    break;

                case Oprcode.Drop:
                    if (mongoSvr.DatabaseExists(dbName))
                    {
                        result = mongoSvr.DropDatabase(dbName);
                        if (tr != null)
                        {
                            tr.TreeView.Nodes.Remove(tr);
                        }
                        if (!result.Response.Contains("err"))
                        {
                            return(String.Empty);
                        }
                        return(result.Response["err"].ToString());
                    }
                    break;

                case Oprcode.Repair:
                    //其实Repair的入口不在这个方法里面
                    CommandHelper.ExecuteMongoDBCommand(CommandHelper.repairDatabase_Command, SystemManager.GetCurrentDataBase());
                    break;

                default:
                    break;
                }
            }
            return(rtnResult);
        }
Exemple #17
0
        //http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart

        /// <summary>
        /// Convert Query Sql To DataFilter
        /// </summary>
        /// <param name="Sql"></param>
        /// <returns></returns>
        public static DataFilter ConvertQuerySql(String Sql)
        {
            DataFilter rtnQuery = new DataFilter();

            Sql = Sql.Trim();
            //引号中的空格用&nbsp;代替,引号以外的东西小写
            Sql = Regular(Sql);
            //先将字符串里面的空格统一成单个空格
            //Select    A,B  From   C ->
            //Select A,B From C
            while (Sql.Contains("  "))
            {
                Sql = Sql.Replace("  ", " ");
            }
            //找出Select ,From , Group
            String[] SqlToken = Sql.Split(" ".ToCharArray());

            int SelectStartIndex  = -1;
            int FromStartIndex    = -1;
            int WhereStartIndex   = -1;
            int GroupByStartIndex = -1;
            int OrderByStartIndex = -1;

            for (int i = 0; i < SqlToken.Length; i++)
            {
                switch (SqlToken[i].ToLower())
                {
                case "select":
                    SelectStartIndex = i;
                    break;

                case "from":
                    FromStartIndex = i;
                    break;

                case "where":
                    WhereStartIndex = i;
                    break;

                case "group":
                    GroupByStartIndex = i;
                    break;

                case "order":
                    OrderByStartIndex = i;
                    break;

                default:
                    break;
                }
            }

            String[] KeyWords = new String[] { "select", "from", "where", "group", "order" };

            //From 设定 必须项
            //From - > CollectionName
            String          strFrom = GetKeyContent(FromStartIndex, SqlToken, KeyWords);
            MongoCollection mongoCol;

            if ((strFrom != String.Empty) & SystemManager.GetCurrentDataBase().CollectionExists(strFrom))
            {
                mongoCol = SystemManager.GetCurrentDataBase().GetCollection(strFrom);
            }
            else
            {
                return(null);
            }


            //Select 设定 必须项
            //Select - > FieldList
            String strSelect = GetKeyContent(SelectStartIndex, SqlToken, KeyWords);

            if (strSelect == String.Empty)
            {
                return(null);
            }
            List <String> ColumnNameLst = MongoDBHelper.GetCollectionSchame(mongoCol);

            if (strSelect == "*")
            {
                //Select *
                foreach (String item in ColumnNameLst)
                {
                    DataFilter.QueryFieldItem field = new DataFilter.QueryFieldItem();
                    field.ColName  = item;
                    field.IsShow   = true;
                    field.sortType = DataFilter.SortType.NoSort;
                    rtnQuery.QueryFieldList.Add(field);
                }
            }
            else
            {
                //Select A,B,C
                foreach (String item in strSelect.Split(",".ToCharArray()))
                {
                    DataFilter.QueryFieldItem field = new DataFilter.QueryFieldItem();
                    field.ColName  = item;
                    field.IsShow   = true;
                    field.sortType = DataFilter.SortType.NoSort;
                    rtnQuery.QueryFieldList.Add(field);
                }
            }

            //Where 设定,可选项
            String strWhere = GetKeyContent(WhereStartIndex, SqlToken, KeyWords);

            if (strWhere != String.Empty)
            {
                rtnQuery.QueryConditionList = SetQueryCondition(strWhere, ColumnNameLst);
            }

            //Order 设定,可选项
            String strOrder = GetKeyContent(OrderByStartIndex, SqlToken, KeyWords);

            if (strOrder != String.Empty)
            {
                SetQueryOrder(rtnQuery, strOrder);
            }


            //Group 设定,可选项
            String strGroup = GetKeyContent(GroupByStartIndex, SqlToken, KeyWords);

            if (strGroup != String.Empty)
            {
                //TODO:Group
            }

            return(rtnQuery);
        }