/// <summary> /// Changes initial Root Wt to an array. /// </summary> /// <param name="root">The root JSON token.</param> /// <param name="fileName">The name of the apsimx file.</param> private static void UpgradeToVersion99(JObject root, string fileName) { // Delete all alias children. foreach (var soilNitrogen in JsonUtilities.ChildrenOfType(root, "SoilNitrogen")) { var parent = JsonUtilities.Parent(soilNitrogen); var nutrient = JsonUtilities.CreateNewChildModel(parent, "Nutrient", "Models.Soils.Nutrients.Nutrient"); nutrient["ResourceName"] = "Nutrient"; soilNitrogen.Remove(); } foreach (var manager in JsonUtilities.ChildManagers(root)) { manager.Replace("using Models.Soils;", "using Models.Soils;\r\nusing Models.Soils.Nutrients;"); manager.Replace("SoilNitrogen.FOMN", ".Nutrient.FOMN"); manager.Replace("SoilNitrogen.FOMC", ".Nutrient.FOMC"); if (manager.Replace("Soil.SoilNitrogen.HumicN", "Humic.N")) { manager.AddDeclaration("NutrientPool", "Humic", new string[] { "[ScopedLinkByName]" }); } if (manager.Replace("Soil.SoilNitrogen.HumicC", "Humic.C")) { manager.AddDeclaration("NutrientPool", "Humic", new string[] { "[ScopedLinkByName]" }); } if (manager.Replace("Soil.SoilNitrogen.MicrobialN", "Microbial.N")) { manager.AddDeclaration("NutrientPool", "Microbial", new string[] { "[ScopedLinkByName]" }); } if (manager.Replace("Soil.SoilNitrogen.MicrobialC", "Microbial.C")) { manager.AddDeclaration("NutrientPool", "Microbial", new string[] { "[ScopedLinkByName]" }); } if (manager.Replace("Soil.SoilNitrogen.dlt_n_min_res", "SurfaceResidueDecomposition.MineralisedN")) { manager.AddDeclaration("CarbonFlow", "SurfaceResidueDecomposition", new string[] { "[LinkByPath(Path=\"[Nutrient].SurfaceResidue.Decomposition\")]" }); } manager.Replace("SoilNitrogen.MineralisedN", "Nutrient.MineralisedN"); manager.Replace("SoilNitrogen.TotalN", "Nutrient.TotalN"); if (manager.Replace("SoilNitrogen.TotalN", "Nutrient.TotalN")) { manager.RemoveDeclaration("SoilNitrogen"); manager.AddDeclaration("INutrient", "Nutrient", new string[] { "[ScopedLinkByName]" }); } manager.Replace("SoilNitrogen.TotalC", "Nutrient.TotalC"); if (manager.Replace("SoilNitrogen.TotalC", "Nutrient.TotalC")) { manager.RemoveDeclaration("SoilNitrogen"); manager.AddDeclaration("INutrient", "Nutrient", new string[] { "[ScopedLinkByName]" }); } manager.Replace("SoilNitrogen.mineral_n", "Nutrient.MineralN"); manager.Replace("SoilNitrogen.Denitrification", "Nutrient.Natm"); manager.Replace("SoilNitrogen.n2o_atm", "Nutrient.N2Oatm"); manager.Save(); } foreach (var report in JsonUtilities.ChildrenOfType(root, "Report")) { JsonUtilities.SearchReplaceReportVariableNames(report, "SoilNitrogen.NO3.kgha", "Nutrient.NO3.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "SoilNitrogen.NH4.kgha", "Nutrient.NH4.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "SoilNitrogen.Urea.kgha", "Nutrient.Urea.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "SoilNitrogen.PlantAvailableNO3.kgha", "Nutrient.PlantAvailableNO3.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "SoilNitrogen.PlantAvailableNH4.kgha", "Nutrient.PlantAvailableNH4.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "[SoilNitrogen].NO3.kgha", "[Nutrient].NO3.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "[SoilNitrogen].NH4.kgha", "[Nutrient].NH4.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, "[SoilNitrogen].Urea.kgha", "[Nutrient].Urea.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.FOMN", ".Nutrient.FOMN"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.FOMC", ".Nutrient.FOMC"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.HumicN", ".Nutrient.Humic.N"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.HumicC", ".Nutrient.Humic.C"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.MicrobialN", ".Nutrient.Microbial.N"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.MicrobialC", ".Nutrient.Microbial.C"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.urea", ".Nutrient.Urea.kgha"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.dlt_n_min_res", ".Nutrient.SurfaceResidue.Decomposition.MineralisedN"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.MineralisedN", ".Nutrient.MineralisedN"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.Denitrification", ".Nutrient.Natm"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.n2o_atm", ".Nutrient.N2Oatm"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.TotalC", ".Nutrient.TotalC"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.TotalN", ".Nutrient.TotalN"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.mineral_n", ".Nutrient.MineralN"); JsonUtilities.SearchReplaceReportVariableNames(report, ".SoilNitrogen.Nitrification", ".Nutrient.NH4.Nitrification"); } foreach (var series in JsonUtilities.ChildrenOfType(root, "Series")) { if (series["XFieldName"] != null) { series["XFieldName"] = series["XFieldName"].ToString().Replace("SoilNitrogen.NO3.kgha", "Nutrient.NO3.kgha"); series["XFieldName"] = series["XFieldName"].ToString().Replace("SoilNitrogen.NH4.kgha", "Nutrient.NH4.kgha"); series["XFieldName"] = series["XFieldName"].ToString().Replace("SoilNitrogen.Urea.kgha", "Nutrient.Urea.kgha"); series["XFieldName"] = series["XFieldName"].ToString().Replace("SoilNitrogen.PlantAvailableNO3.kgha", "Nutrient.PlantAvailableNO3.kgha"); series["XFieldName"] = series["XFieldName"].ToString().Replace("SoilNitrogen.PlantAvailableNH4.kgha", "Nutrient.PlantAvailableNH4.kgha"); } if (series["YFieldName"] != null) { series["YFieldName"] = series["YFieldName"].ToString().Replace("SoilNitrogen.NO3.kgha", "Nutrient.NO3.kgha"); series["YFieldName"] = series["YFieldName"].ToString().Replace("SoilNitrogen.NH4.kgha", "Nutrient.NH4.kgha"); series["YFieldName"] = series["YFieldName"].ToString().Replace("SoilNitrogen.Urea.kgha", "Nutrient.Urea.kgha"); series["YFieldName"] = series["YFieldName"].ToString().Replace("SoilNitrogen.PlantAvailableNO3.kgha", "Nutrient.PlantAvailableNO3.kgha"); series["YFieldName"] = series["YFieldName"].ToString().Replace("SoilNitrogen.PlantAvailableNH4.kgha", "Nutrient.PlantAvailableNH4.kgha"); } } }
/// <summary> /// Change Factor.Specifications to Factor.Specification. Also FactorValue /// becomes CompositeFactor. /// </summary> /// <param name="root"></param> /// <param name="fileName"></param> private static void UpgradeToVersion56(JToken root, string fileName) { foreach (var factor in JsonUtilities.ChildrenRecursively(root as JObject, "Factor")) { var parent = JsonUtilities.Parent(factor); string parentModelType = JsonUtilities.Type(parent); if (parentModelType == "Factors") { var specifications = factor["Specifications"] as JArray; if (specifications != null) { if (specifications.Count > 1) { // must be a compound factor. // Change our Factor to a CompositeFactor factor["$type"] = "Models.Factorial.CompositeFactor, Models"; // Remove the Factor from it's parent. var parentChildren = parent["Children"] as JArray; parentChildren.Remove(factor); // Create a new site factor and add our CompositeFactor to the children list. var siteFactor = JsonUtilities.ChildWithName(parent as JObject, "Site") as JObject; if (siteFactor == null) { // Create a site factor siteFactor = new JObject(); siteFactor["$type"] = "Models.Factorial.Factor, Models"; siteFactor["Name"] = "Site"; JArray siteFactorChildren = new JArray(); siteFactor["Children"] = siteFactorChildren; // Add our new site factor to our models parent. parentChildren.Add(siteFactor); } (siteFactor["Children"] as JArray).Add(factor); } else { // Convert array to string. if (specifications.Count > 0) { factor["Specification"] = specifications[0].ToString(); } } } } else if (parentModelType == "Factor") { factor["$type"] = "Models.Factorial.CompositeFactor, Models"; } } foreach (var series in JsonUtilities.ChildrenRecursively(root as JObject, "Series")) { var factorToVaryColours = series["FactorToVaryColours"]; if (factorToVaryColours != null && factorToVaryColours.Value <string>() == "Simulation") { series["FactorToVaryColours"] = "SimulationName"; } var factorToVaryMarkers = series["FactorToVaryMarkers"]; if (factorToVaryMarkers != null && factorToVaryMarkers.Value <string>() == "Simulation") { series["FactorToVaryMarkers"] = "SimulationName"; } var factorToVaryLines = series["FactorToVaryLines"]; if (factorToVaryLines != null && factorToVaryLines.Value <string>() == "Simulation") { series["FactorToVaryLines"] = "SimulationName"; } } }