Example #1
0
        /// <summary>Factory method for creating a YieldProphet object from a file.</summary>
        /// <param name="fileName">The filename of the xml file</param>
        /// <returns>The newly created object.</returns>
        public static YieldProphet YieldProphetFromFile(string fileName)
        {
            if (Path.GetExtension(fileName) == ".zip")
            {
                return(YieldProphetFromZip(fileName));
            }
            else
            {
                StreamReader reader = new StreamReader(fileName);
                string       xml    = reader.ReadToEnd();
                reader.Close();

                return(YieldProphetUtility.YieldProphetFromXML(xml, Path.GetDirectoryName(fileName)));
            }
        }
Example #2
0
        /// <summary>Initialise job manager</summary>
        private void Initialise(bool createSims = true)
        {
            Errors = new List <string>();
            try
            {
                // Create a working directory.
                WorkingDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName());
                Directory.CreateDirectory(WorkingDirectory);

                // Create a YieldProphet object if xml was provided
                string fileBaseToWrite = "YieldProphet";
                if (specXMLToRun != null)
                {
                    if (specXMLToRun.Contains("<YieldProphet>"))
                    {
                        specToRun      = YieldProphetUtility.YieldProphetFromXML(specXMLToRun, WorkingDirectory);
                        allSimulations = YieldProphetToAPSIM.ToAPSIM(specToRun);
                        if (specToRun.ReportName != null)
                        {
                            fileBaseToWrite = specToRun.ReportName;
                        }
                    }
                    else
                    {
                        XmlDocument doc = new XmlDocument();
                        doc.LoadXml(specXMLToRun);
                        allSimulations = XmlUtilities.Deserialise(doc.DocumentElement, typeof(List <APSIMSpecification>)) as List <APSIMSpecification>;
                    }
                }
                else if (specToRun != null)
                {
                    allSimulations = YieldProphetToAPSIM.ToAPSIM(specToRun);
                }

                // Create all the files needed to run APSIM.
                string fileToWrite;
                if (environment.APSIMxBuildNumber > 0)
                {
                    fileToWrite = fileBaseToWrite + ".apsimx";
                }
                else
                {
                    fileToWrite = fileBaseToWrite + ".apsim";
                }
                string apsimFileName = APSIMFiles.Create(allSimulations, WorkingDirectory, fileToWrite);

                // Save YieldProphet.xml to working folder.
                if (specToRun != null)
                {
                    XmlDocument doc = new XmlDocument();
                    doc.LoadXml(YieldProphetUtility.YieldProphetToXML(specToRun));
                    doc.Save(Path.Combine(WorkingDirectory, fileBaseToWrite + ".xml"));
                }

                if (createSims)
                {
                    // Setup the runtime environment.
                    binFolder = SetupRunTimeEnvironment(environment);

                    // Go find APSIM executable
                    if (environment.APSIMxBuildNumber > 0)
                    {
                        jobsToRun = GetJobToRunAPSIMX(apsimFileName, binFolder);
                    }
                    else
                    {
                        jobsToRun = GetJobToRunAPSIMClassic(apsimFileName, binFolder);
                    }
                }

                // Copy all errors to our errors list.
                foreach (var sim in allSimulations.FindAll(sim => sim.ErrorMessage != null))
                {
                    Errors.Add(sim.ErrorMessage);
                }
            }
            catch (Exception err)
            {
                Errors.Add(err.ToString());
            }
        }