/// <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); }