static void Main(string[] args) { APSIMImporter importer = new APSIMImporter(); string apsimPath = ""; if ((args.Length > 0) && (args[0].Length > 0)) { for (int i = 0; i < args.Length; i++) { String filename = args[i]; if (filename[0] == '-') // if this is a parameter { if (filename[1] == 'a') // apsim path macro replacement apsimPath = filename.Substring(2, filename.Length - 2); } else { // get the file attributes for file or directory FileAttributes attr = File.GetAttributes(filename); importer.ApsimPath = apsimPath; //detect whether its a directory or file if ((attr & FileAttributes.Directory) == FileAttributes.Directory) importer.ProcessDir(filename); else importer.ProcessFile(filename); } } } else { Console.WriteLine("Useage: Importer [options] file.apsim [file2.apsim ....]\n Or: Importer [options] directoryname [dir2 ...]\n"); Console.Write("Where options are\n\t-a to set the base apsim path. e.g. -aC:\\apsim \n"); } }
/// <summary>Pastes the contents of the clipboard.</summary> public void Add(string xml, string parentPath) { try { XmlDocument document = new XmlDocument(); try { document.LoadXml(xml); } catch(XmlException) { MainPresenter.ShowMessage("Invalid XML. Are you sure you're trying to paste an APSIM model?", DataStore.ErrorLevel.Error); } object newModel = XmlUtilities.Deserialise(document.DocumentElement, ApsimXFile.GetType().Assembly); // See if the presenter is happy with this model being added. Model parentModel = Apsim.Get(this.ApsimXFile, parentPath) as Model; AllowDropArgs allowDropArgs = new AllowDropArgs(); allowDropArgs.NodePath = parentPath; allowDropArgs.DragObject = new DragObject() { NodePath = null, ModelType = newModel.GetType(), Xml = GetClipboardText() }; this.OnAllowDrop(null, allowDropArgs); // If it is happy then issue an AddModelCommand. if (allowDropArgs.Allow) { // If the model xml is a soil object then try and convert from old // APSIM format to new. if (document.DocumentElement.Name == "Soil" && XmlUtilities.Attribute(document.DocumentElement, "Name") != "") { XmlDocument newDoc = new XmlDocument(); newDoc.AppendChild(newDoc.CreateElement("D")); APSIMImporter importer = new APSIMImporter(); importer.ImportSoil(document.DocumentElement, newDoc.DocumentElement, newDoc.DocumentElement); XmlNode soilNode = XmlUtilities.FindByType(newDoc.DocumentElement, "Soil"); if (soilNode != null && XmlUtilities.FindByType(soilNode, "Sample") == null && XmlUtilities.FindByType(soilNode, "InitialWater") == null) { // Add in an initial water and initial conditions models. XmlNode initialWater = soilNode.AppendChild(soilNode.OwnerDocument.CreateElement("InitialWater")); XmlUtilities.SetValue(initialWater, "Name", "Initial water"); XmlUtilities.SetValue(initialWater, "PercentMethod", "FilledFromTop"); XmlUtilities.SetValue(initialWater, "FractionFull", "1"); XmlUtilities.SetValue(initialWater, "DepthWetSoil", "NaN"); XmlNode initialConditions = soilNode.AppendChild(soilNode.OwnerDocument.CreateElement("Sample")); XmlUtilities.SetValue(initialConditions, "Name", "Initial conditions"); XmlUtilities.SetValue(initialConditions, "Thickness/double", "1800"); XmlUtilities.SetValue(initialConditions, "NO3/double", "10"); XmlUtilities.SetValue(initialConditions, "NH4/double", "1"); XmlUtilities.SetValue(initialConditions, "NO3Units", "kgha"); XmlUtilities.SetValue(initialConditions, "NH4Units", "kgha"); XmlUtilities.SetValue(initialConditions, "SWUnits", "Volumetric"); } document.LoadXml(newDoc.DocumentElement.InnerXml); } IModel child = XmlUtilities.Deserialise(document.DocumentElement, ApsimXFile.GetType().Assembly) as IModel; AddModelCommand command = new AddModelCommand(parentModel, document.DocumentElement, GetNodeDescription(child), view); this.CommandHistory.Add(command, true); } } catch (Exception exception) { this.MainPresenter.ShowMessage(exception.Message, DataStore.ErrorLevel.Error); } }
/// <summary> /// Event handler invoked when user clicks on 'Import' /// </summary> /// <param name="sender">Sender object</param> /// <param name="e">Event arguments</param> private void OnImport(object sender, EventArgs e) { string fileName = view.AskUserForOpenFileName("*.apsim|*.apsim"); APSIMImporter importer = new APSIMImporter(); try { view.ShowWaitCursor(true); try { importer.ProcessFile(fileName); string newFileName = Path.ChangeExtension(fileName, ".apsimx"); bool onLeftTabControl = this.view.IsControlOnLeft(sender); this.OpenApsimXFileInTab(newFileName, onLeftTabControl); } finally { view.ShowWaitCursor(false); } } catch (Exception exp) { throw new Exception("Failed import: " + exp.Message); } }
public void ImportOldAPSIM() { // test the importing of an example simulation from APSIM 7.6 APSIMImporter importer = new APSIMImporter(); importer.ProcessFile("Continuous_Wheat.apsim"); Simulations testrunSimulations = Simulations.Read("Continuous_Wheat.apsimx"); Assert.IsNotNull(Apsim.Find(testrunSimulations, "wheat")); Assert.IsNotNull(Apsim.Find(testrunSimulations, "clock")); Assert.IsNotNull(Apsim.Find(testrunSimulations, "SoilNitrogen")); Assert.IsNotNull(Apsim.Find(testrunSimulations, "SoilWater")); }
/// <summary> /// Event handler invoked when user clicks on 'Import' /// </summary> /// <param name="sender">Sender object</param> /// <param name="e">Event arguments</param> private void OnImport(object sender, EventArgs e) { string fileName = this.view.AskUserForFileName(string.Empty, "*.apsim|*.apsim"); APSIMImporter importer = new APSIMImporter(); try { this.view.WaitCursor = true; try { importer.ProcessFile(fileName); string newFileName = Path.ChangeExtension(fileName, ".apsimx"); this.OpenApsimXFileInTab(newFileName); } finally { this.view.WaitCursor = false; } } catch (Exception exp) { throw new Exception("Failed import: " + exp.Message); } }