/// <summary> /// /// </summary> /// <param name="reader"></param> public void ReadXml(XmlReader reader) { XDocument doc = XDocument.Load(reader); //Get the list of models XElement projectElement = doc.Element("Project"); //Set the project properties CreatedBy = XMLUtilities.readXMLAttribute(projectElement.Attribute("CreatedBy")); DateTime?createdDate = DateUtilities.TryParseDate(XMLUtilities.readXMLAttribute(projectElement.Attribute("CreationDate")).Split(new char[] { ' ' })[0], "dd/MM/yyyy"); CreatedDate = createdDate == null ? new DateTime(1, 1, 1) : createdDate.Value; ContactDetails = XMLUtilities.readXMLAttribute(projectElement.Attribute("ContactDetails")); ModifiedBy = XMLUtilities.readXMLAttribute(projectElement.Attribute("ModifiedBy")); Name = projectElement.Element("Name").Value.ToString(); //Read all of the climate data models List <XElement> ClimateDatalements = new List <XElement>(projectElement.Elements("ClimateData").Elements("DataFile")); //Read all of the models List <XElement> TemplateElements = new List <XElement>(projectElement.Elements().Where(x => x.Name.ToString().Contains("Templates"))); List <XElement> TypeElements = new List <XElement>(); foreach (XElement te in TemplateElements) { foreach (XElement xe in te.Elements()) { TypeElements.Add(xe); } } //Read all of the simualtions SimulationElements = new List <XElement>(); foreach (XElement simChild in projectElement.Elements("Simulations").Elements()) { if (simChild.Name.ToString() == "SimulationObject") { SimulationElements.Add(simChild); } else if (simChild.Name.ToString() == "Folder") { SimulationElements.AddRange(simChild.Elements("SimulationObject")); } } InputDataModels = new List <InputModel>(); //Create input models from the xml elements foreach (XElement xe in TypeElements) { InputDataModels.Add(RawInputModelFactory.GenerateRawInputModel(xe)); } //Create the Climate models - these aren't deserialised so don't come out of the factory foreach (XElement xe in ClimateDatalements) { ClimateInputModel cim = new ClimateInputModel(); cim.FileName = xe.Attribute("href").Value.ToString(); InputDataModels.Add(cim); } //Initialise the models foreach (InputModel im in InputDataModels) { im.Init(); } //Create the simualtions foreach (XElement xe in SimulationElements) { Simulations.Add(SimulationFactory.GenerateSimulationXML(this, xe, InputDataModels)); } //Just one for testing //Simulations = new List<Simulation>(); //Simulations.Add(SimulationFactory.GenerateSimulationXML(SimulationElements[0], InputDataModels)); OutputDataElements = OutputModelController.GetProjectOutputs(this); }