internal ProjectHandler(string name, DevSiteLoginInfo info)
 {
     this.Name = name;
     DevConnection = info.TryConnect();
     DevSite = info;
     Preference = GetProjectPreference();
 }
        private void button1_Click(object sender, EventArgs e)
        {
            err.Clear();

            DevSiteLoginInfo dev = GetDevSite();

            try
            {
                dev.TryConnect();
            }
            catch (Exception ex)
            {
                StringBuilder sb = new StringBuilder(ex.Message);
                if (ex.InnerException != null)
                {
                    sb.Append("\n").Append(ex.InnerException.StackTrace);
                }

                err.SetError(txtProjectName, sb.ToString());
                return;
            }

            if (Completed != null)
            {
                Completed.Invoke(this, EventArgs.Empty);
            }

            this.Close();
        }
 static MainForm()
 {
     Version = Assembly.GetExecutingAssembly().GetName().Version;
     Storage = new LocalStorage();
     DefaultDevSite = new DevSiteLoginInfo();
     Projects = new ProjectCollection();
 }
 internal DevSiteLoginInfo GetDevSite()
 {
     DevSiteLoginInfo dev = new DevSiteLoginInfo();
     dev.AccessPoint = txtAP.Text;
     dev.User = txtUser.Text;
     dev.ContractName = cboContract.Text;
     dev.Password = txtPassword.Text;
     return dev;
 }
        internal DevSiteLoginInfo GetDevSite()
        {
            DevSiteLoginInfo dev = new DevSiteLoginInfo();

            dev.AccessPoint  = txtAP.Text;
            dev.User         = txtUser.Text;
            dev.ContractName = cboContract.Text;
            dev.Password     = txtPassword.Text;
            return(dev);
        }
        internal static DevSiteLoginInfo Load(XmlElement devSiteElement)
        {
            XmlHelper h = new XmlHelper(devSiteElement);
            DevSiteLoginInfo info = new DevSiteLoginInfo();
            info.AccessPoint = h.GetText("AccessPoint");
            info.ContractName = h.GetText("ContractName");
            info.User = h.GetText("User");
            info.Password = h.GetText("Password");

            if (string.IsNullOrWhiteSpace(h.GetText("ContractName")))
                info.ContractName = DEFAULT_CONTRACT_NAME;
            else
                info.ContractName = h.GetText("ContractName");

            return info;
        }
        internal static DevSiteLoginInfo Load(XmlElement devSiteElement)
        {
            XmlHelper        h    = new XmlHelper(devSiteElement);
            DevSiteLoginInfo info = new DevSiteLoginInfo();

            info.AccessPoint  = h.GetText("AccessPoint");
            info.ContractName = h.GetText("ContractName");
            info.User         = h.GetText("User");
            info.Password     = h.GetText("Password");

            if (string.IsNullOrWhiteSpace(h.GetText("ContractName")))
            {
                info.ContractName = DEFAULT_CONTRACT_NAME;
            }
            else
            {
                info.ContractName = h.GetText("ContractName");
            }

            return(info);
        }
        private void SetDevSite(DevSiteLoginInfo devSite)
        {
            this.DevSite = devSite;
            try
            {
                DevConnection = this.DevSite.TryConnect();
                Status = ProjectStatus.Succeed;
            }
            catch
            {
                Status = ProjectStatus.LoadFail;
            }

            XmlHelper h = new XmlHelper(this.Preference);
            XmlElement de = h.GetElement("Property/DevSite");
            XmlNode dep = de.ParentNode;
            dep.RemoveChild(de);
            de = devSite.XmlContent.GetElement(".");
            XmlNode node = dep.OwnerDocument.ImportNode(de, true);
            dep.AppendChild(node);

            if (MainForm.CurrentProject != null)
                MainForm.CurrentProject.UpdateProjectPreference(this.Preference);
        }
        private void LoadDevProject(string projectName, DevSiteLoginInfo devSite)
        {
            ReloadProjectList();

            foreach (ToolStripMenuItem item in cmOpenProject.DropDownItems)
                item.Checked = item.Text == projectName;

            MainForm.CurrentProject = Projects.LoadProjectHandler(projectName);

            if (CurrentProject == null)
                return;

            if (CurrentProject.Status == ProjectStatus.LoadFail)
                return;

            //ProjectHandler project = null;
            //if (devSite != null)
            //    project = new ProjectHandler(projectName, devSite);
            //else
            //    project = new ProjectHandler(projectName);
            ProjectHandler project = MainForm.CurrentProject;

            tvProjects.Nodes.Clear();

            TreeNode tn = tvProjects.Nodes.Add(projectName);
            tn.SelectedImageKey = "project";
            tn.ImageKey = "project";
            ProjectNodeHandler projectNodeHandler = new ProjectNodeHandler(tn, project);
            projectNodeHandler.Reloaded += new EventHandler(projectNodeHandler_Reloaded);
            tn.Tag = projectNodeHandler;

            TreeNode udtNode = tn.Nodes.Add("UDT");
            udtNode.ImageKey = "udts";
            udtNode.SelectedImageKey = "udts";
            udtNode.ToolTipText = "自訂資料表";
            UDTNodeHandler udtNodeHandler = new UDTNodeHandler(udtNode);
            udtNode.Tag = udtNodeHandler;
            udtNodeHandler.Reload();
            MainForm.CurrentUDT = udtNodeHandler.UDTHandler;

            TreeNode udsNode = tn.Nodes.Add("UDS");
            udsNode.ImageKey = "udss";
            udsNode.SelectedImageKey = "udss";
            udsNode.ToolTipText = "自訂服務";
            UDSNodeHandler udsNodeHandler = new UDSNodeHandler(udsNode);
            udsNode.Tag = udsNodeHandler;
            udsNodeHandler.Reload();
            MainForm.CurrentUDS = udsNodeHandler.UDSHandler;

            TreeNode fileNode = tn.Nodes.Add("檔案管理");
            fileNode.SelectedImageKey = "upload";
            fileNode.ImageKey = "upload";

            MainForm.CurrentFileNodeHandler = null;
            if (MainForm.LoginArgs.SucceedModuleLogin)
            {
                fileNode.ToolTipText = string.Empty;
                FileNodeHandler fileNodeHandler = new FileNodeHandler(fileNode);
                fileNode.Tag = fileNodeHandler;
                MainForm.CurrentFileNodeHandler = fileNodeHandler;
            }
            else
            {
                fileNode.ToolTipText = "檔案管理伺服器登入失敗";
            }
            tvProjects.ExpandAll();
            udtNodeHandler.CollapseOutsideProject();
            udsNodeHandler.CollapseOutsideProject();
        }
 internal ResetDevSiteForm(string projectName, DevSiteLoginInfo devSite)
 {
     InitializeComponent();
     _devSite     = devSite;
     _projectName = projectName;
 }
 internal ResetDevSiteForm(string projectName, DevSiteLoginInfo devSite)
 {            
     InitializeComponent();
     _devSite = devSite;
     _projectName = projectName;
 }
 internal ProjectEventArgs(string projectName, DevSiteLoginInfo devSite)
 {
     ProjectName = projectName;
     DevSite = devSite;
 }
        internal void LoadProject(string projectName, DevSiteLoginInfo devSite, bool checkDup, XmlElement source)
        {
            if (this._projects.Contains(projectName))
                throw new Exception("專案已經存在");

            XmlHelper sourceHelper = new XmlHelper(source);
            if(checkDup)
            {
                Connection devConnection = devSite.TryConnect();
                Envelope evn = devConnection.SendRequest("UDSManagerService.ListContracts", new Envelope());
                XmlHelper rsp = new XmlHelper(evn.Body);
                StringBuilder contracts = new StringBuilder();
                foreach (XmlElement contractElement in sourceHelper.GetElements("Property/Contract"))
                {
                    string contractName = contractElement.GetAttribute("Name");
                    if (rsp.GetElement("Contract[@Name='" + contractName + "']") != null)
                        contracts.Append(contractName).Append("\n");
                }

                evn = devConnection.SendRequest("UDTService.DDL.ListTables", new Envelope());
                rsp = new XmlHelper(evn.Body);
                StringBuilder tables = new StringBuilder();
                foreach (XmlElement contractElement in rsp.GetElements("Property/Table"))
                {
                    string tableName = contractElement.GetAttribute("Name");
                    if (rsp.GetElement("Table[@Name='" + tableName + "']") != null)
                        tables.Append(tableName).Append("\n");
                }
                StringBuilder msg = new StringBuilder();
                if (tables.Length > 0)                
                    msg.Append("檢查到重覆資料表 : \n").Append(tables);
                
                if(contracts.Length > 0)
                    msg.Append("檢查到重覆 Contract : \n").Append(contracts);

                if (msg.Length > 0)
                    throw new Exception(msg.ToString());
            }

            string filepath = MainForm.Storage.GetPropertyValue(LOCAL_FILE_PATH, projectName);
            this.InternalAddProject(projectName, devSite, filepath);

            ProjectHandler ph = this.CreateProjectHandler(projectName, devSite);
            
            UDSHandler uds = ph.GetUDSHandler();            
            XmlElement ce = sourceHelper.GetElement("Property[@Name='UDS']");
            if (ce != null)
                uds.ImportContracts(ce, true);

            UDTHandler udt = ph.GetUDT();
            XmlElement te = sourceHelper.GetElement("Property[@Name='UDT']");
            if (te != null)
                udt.SetTables(te, true);

            if(ProjectAdded != null)
                ProjectAdded.Invoke(this, new ProjectEventArgs(projectName,devSite));
        }
 internal ProjectHandler CreateProjectHandler(string projectName, DevSiteLoginInfo siteInfo)
 {
     foreach (string p in _projects)
     {
         if (p == projectName)
             return new ProjectHandler(projectName, siteInfo);
     }
     return null;
 }
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            err.Clear();

            if (string.IsNullOrWhiteSpace(txtProjectName.Text))
                err.SetError(txtProjectName, "專案名稱不可空白");
            else if (!ProjectHandler.ValidName(txtProjectName.Text))
                err.SetError(txtProjectName, "專案名稱必須為英文或數字組成");

            if (MainForm.Projects.Contains(txtProjectName.Text))
                err.SetError(txtProjectName, "專案名稱已被使用");

            if (!chkUseDefault.Checked)
            {
                if (string.IsNullOrWhiteSpace(txtAP.Text))
                    err.SetError(txtAP, "開發站不可空白");

                if (string.IsNullOrWhiteSpace(txtUser.Text) && cboContract.Text != "_dev")
                    err.SetError(txtUser, "帳號不可空白");

                if (string.IsNullOrWhiteSpace(txtPwd.Text) && cboContract.Text != "_dev")
                    err.SetError(txtPwd, "密碼不可空白");
            }

            if (string.IsNullOrWhiteSpace(txtProjectPath.Text))
                err.SetError(txtProjectPath, "專案本機檔案路徑不可空白");
            else if (!Directory.Exists(txtProjectPath.Text))
                err.SetError(txtProjectPath, "指定的本機檔案路徑不存在");

            foreach (Control ctrl in this.Controls)
            {
                if (string.IsNullOrEmpty(err.GetError(ctrl))) continue;
                return;
            }

            try
            {
                if (chkUseDefault.Checked)
                    MainForm.DefaultDevSite.TryConnect();
                else
                {
                    Connection connection = new Connection();
                    connection.Connect(txtAP.Text, cboContract.Text, txtUser.Text, txtPwd.Text);
                }
            }
            catch (Exception ex)
            {
                if (chkUseDefault.Checked)
                    err.SetError(chkUseDefault, "登入失敗 : " + ex.Message);
                else
                    err.SetError(txtAP, "登入失敗 : " + ex.Message);
                return;
            }

            DevSiteLoginInfo info = new DevSiteLoginInfo();

            if (chkUseDefault.Checked)
                info = MainForm.DefaultDevSite;
            else
            {
                info.AccessPoint = txtAP.Text;
                info.ContractName = cboContract.Text;
                info.User = txtUser.Text;
                info.Password = txtPwd.Text;
            }
            MainForm.Projects.AddProject(txtProjectName.Text, info, txtProjectPath.Text);

            this.Close();
        }
        private void btnSubmit_Click(object sender, EventArgs e)
        {
            err.Clear();

            if (string.IsNullOrWhiteSpace(txtProjectName.Text))
                err.SetError(txtProjectName, "專案名稱不可空白");

            if (MainForm.Projects.Contains(txtProjectName.Text))
                err.SetError(txtProjectName, "專案名稱已被使用");

            if (string.IsNullOrEmpty(txtFileName.Text))
                err.SetError(btnBro, "請選擇檔案");

            if(!File.Exists(txtFileName.Text))
                err.SetError(btnBro, "檔案不存在");
            
            if (!chkUseDefault.Checked)
            {
                if (string.IsNullOrWhiteSpace(txtAP.Text))
                    err.SetError(txtAP, "開發站不可空白");

                if (string.IsNullOrWhiteSpace(txtUser.Text))
                    err.SetError(txtUser, "帳號不可空白");

                if (string.IsNullOrWhiteSpace(txtPwd.Text))
                    err.SetError(txtPwd, "密碼不可空白");
            }

            foreach (Control ctrl in this.Controls)
            {
                if (string.IsNullOrEmpty(err.GetError(ctrl))) continue;
                return;
            }

            try
            {
                if (chkUseDefault.Checked)
                    MainForm.DefaultDevSite.TryConnect();
                else
                {
                    Connection connection = new Connection();
                    connection.Connect(txtAP.Text, "admin", txtUser.Text, txtPwd.Text);
                }
            }
            catch (Exception ex)
            {
                err.SetError(txtAP, "登入失敗 : " + ex.Message);
                return;
            }
            
            DevSiteLoginInfo info = new DevSiteLoginInfo();

            if (chkUseDefault.Checked)
                info = MainForm.DefaultDevSite;
            else
            {
                info.AccessPoint = txtAP.Text;
                info.User = txtUser.Text;
                info.Password = txtPwd.Text;
            }

            XmlDocument doc = new XmlDocument();
            doc.Load(txtFileName.Text);

            try
            {
                MainForm.Projects.LoadProject(txtProjectName.Text, info, rbCheck.Checked, doc.DocumentElement);
            }
            catch (Exception ex)
            {
                MessageBox.Show("載入失敗 : \n" + ex.Message, "失敗", MessageBoxButtons.OK, MessageBoxIcon.Error);
                return;
            }

            this.Close();
        }