示例#1
0
        /// <returns>
        ///     0 - successfully
        ///     -1 - failed
        /// </returns>
        public int FlushToDisk(string strJobFileName)
        {
            int iRet = 0;

            lock (m_writeFileLock)
            {
                try
                {
                    XmlDocument    jobDoc         = new XmlDocument();
                    XmlDeclaration docDeclaration = jobDoc.CreateXmlDeclaration("1.0", "utf-8", null);
                    jobDoc.AppendChild(docDeclaration);
                    XmlElement root = jobDoc.CreateElement("GalaxyJobs");
                    jobDoc.AppendChild(root);
                    // Flush each jobs
                    foreach (GalaxyJob job in m_jobDictRefByJobName.Values)
                    {
                        XmlElement jobElement = jobDoc.CreateElement("GalaxyJob");

                        XmlElement      jobNameElement = jobDoc.CreateElement("JobName");
                        XmlCDataSection jobNameData    = jobDoc.CreateCDataSection(job.JobName);
                        jobNameElement.AppendChild(jobNameData);
                        jobElement.AppendChild(jobNameElement);

                        XmlElement pnInstanceNameElement = jobDoc.CreateElement("PNInstanceName");
                        pnInstanceNameElement.InnerText = job.PNInstanceName;
                        jobElement.AppendChild(pnInstanceNameElement);

                        XmlElement jobIdElement = jobDoc.CreateElement("JobId");
                        jobIdElement.InnerText = job.JobId.ToString();
                        jobElement.AppendChild(jobIdElement);

                        XmlElement jobStatusElement = jobDoc.CreateElement("JobStatus");
                        jobStatusElement.InnerText = GalaxyJob.JobStatus2String(job.JobStatus);
                        jobElement.AppendChild(jobStatusElement);

                        XmlElement exeNameElement = jobDoc.CreateElement("ExeFileName");
                        exeNameElement.InnerText = job.ExeFileName;
                        jobElement.AppendChild(exeNameElement);

                        XmlElement      relPathElement = jobDoc.CreateElement("RelativePath");
                        XmlCDataSection relPathData    = jobDoc.CreateCDataSection(job.RelativePath);
                        relPathElement.AppendChild(relPathData);
                        jobElement.AppendChild(relPathElement);

                        XmlElement userNameElement = jobDoc.CreateElement("UserName");
                        userNameElement.InnerText = job.UserName;
                        jobElement.AppendChild(userNameElement);

                        XmlElement      argsElement = jobDoc.CreateElement("Arguments");
                        XmlCDataSection argsData    = jobDoc.CreateCDataSection(job.Arguments);
                        argsElement.AppendChild(argsData);
                        jobElement.AppendChild(argsElement);

                        XmlElement autoReportStatusElement = jobDoc.CreateElement("AutoReportStatus");
                        autoReportStatusElement.InnerText = job.AutoReportStatus.ToString();
                        jobElement.AppendChild(autoReportStatusElement);

                        XmlElement allowLongIdleTimeElement = jobDoc.CreateElement("AllowLongIdleTime");
                        allowLongIdleTimeElement.InnerText = job.AllowLongIdleTime.ToString();
                        jobElement.AppendChild(allowLongIdleTimeElement);

                        XmlElement      outputDirElement = jobDoc.CreateElement("OutputBaseDir");
                        XmlCDataSection outputDirData    = jobDoc.CreateCDataSection(job.OutputBaseDir);
                        outputDirElement.AppendChild(outputDirData);
                        jobElement.AppendChild(outputDirElement);

                        XmlElement      dataRootDirElement = jobDoc.CreateElement("DataRootDir");
                        XmlCDataSection dataRootDirData    = jobDoc.CreateCDataSection(job.ProjectDataRootDir);
                        dataRootDirElement.AppendChild(dataRootDirData);
                        jobElement.AppendChild(dataRootDirElement);

                        // Add resource files
                        XmlElement resourceFilesElement = jobDoc.CreateElement("ResourceFiles");
                        foreach (ResourceFilePair resourceFile in job.ResourceFileList)
                        {
                            XmlElement resourceFileElement = jobDoc.CreateElement("ResourceFile");
                            // source file name
                            XmlElement      srcFileElement = jobDoc.CreateElement("SrcFileName");
                            XmlCDataSection srcFileData    = jobDoc.CreateCDataSection(resourceFile.SrcFileName);
                            srcFileElement.AppendChild(srcFileData);
                            resourceFileElement.AppendChild(srcFileElement);
                            // destination relative file name
                            XmlElement      dstRelFileElement = jobDoc.CreateElement("DstRelativeFileName");
                            XmlCDataSection dstRelFileData    = jobDoc.CreateCDataSection(resourceFile.DstRelativeFileName);
                            dstRelFileElement.AppendChild(dstRelFileData);
                            resourceFileElement.AppendChild(dstRelFileElement);
                            resourceFilesElement.AppendChild(resourceFileElement);
                        }
                        jobElement.AppendChild(resourceFilesElement);

                        // Add dependent jobs
                        XmlElement dependentJobsElement = jobDoc.CreateElement("DependentJobs");
                        foreach (string strDependentJobName in job.DependentJobs)
                        {
                            XmlElement      dependentJobElement  = jobDoc.CreateElement("DependentJob");
                            XmlCDataSection dependentJobNameData = jobDoc.CreateCDataSection(strDependentJobName);
                            dependentJobElement.AppendChild(dependentJobNameData);
                            dependentJobsElement.AppendChild(dependentJobElement);
                        }
                        jobElement.AppendChild(dependentJobsElement);

                        root.AppendChild(jobElement);
                    }
                    jobDoc.Save(strJobFileName);
                }
                catch (Exception)
                {
                    iRet = -1;
                }
            }

            return(iRet);
        }