//-------------------------------------------------------------------------------------------------//
        /// <summary>
        /// Parse the XML specification string to check its validity. No exceptions are thrown back to the
        /// calling method. If an error occurs, 'accepted' is set to false and the error message is placed
        /// in 'errorMessage' where it can be examined by the calling method. Return 'accepted'.
        /// </summary>
        /// <param name="xmlSpecification"></param>
        public virtual ValidationReport Parse(string xmlSpecification)
        {
            const string STRLOG_MethodName = "Parse";

            Logfile.WriteCalled(STRLOG_ClassName, STRLOG_MethodName);

            //
            // Create a new validation report ready to fill in
            //
            ValidationReport validationReport = new ValidationReport();

            //
            // Process the XML specification string
            //
            try
            {
                //
                // Load XML specification string and get the setup id
                //
                XmlDocument xmlDocument = XmlUtilities.GetXmlDocument(xmlSpecification);
                this.xmlNodeSpecification = XmlUtilities.GetXmlRootNode(xmlDocument, Consts.STRXML_ExperimentSpecification);
                this.setupId = XmlUtilities.GetXmlValue(this.xmlNodeSpecification, Consts.STRXML_SetupId, false);

                //
                // Create an instance of the driver for the specified setup and then
                // get the driver's execution time for this specification
                //
                int executionTime = -1;
                if (this.setupId.Equals(Consts.STRXML_SetupId_DriverGeneric))
                {
                    DriverGeneric driver = new DriverGeneric(this.xmlNodeEquipmentConfig, this);
                    executionTime = driver.GetExecutionTime();
                }

                //
                // Specification is valid
                //
                validationReport.estRuntime = executionTime;
                validationReport.accepted = true;
            }
            catch (Exception ex)
            {
                validationReport.errorMessage = ex.Message;
            }

            Logfile.WriteCompleted(STRLOG_ClassName, STRLOG_MethodName);

            return validationReport;
        }
 /// <summary>
 /// Create a submission report by specifying all values.
 /// </summary>
 /// <param name="vReport"></param>
 /// <param name="experimentID"></param>
 /// <param name="minTimeToLive"></param>
 /// <param name="wait"></param>
 public SubmissionReport(ValidationReport vReport, int experimentID, double minTimeToLive,
     WaitEstimate wait)
 {
     this.vReport = vReport;
     this.experimentID = experimentID;
     this.minTimeToLive = minTimeToLive;
     this.wait = wait;
 }
 /// <summary>
 /// Constructor specifying only the 
 /// </summary>
 /// <param name="experimentID"></param>
 public SubmissionReport(int experimentID)
 {
     this.vReport = new ValidationReport();
     this.experimentID = experimentID;
     this.minTimeToLive = 0.0;
     this.wait = new WaitEstimate();
 }