/// <summary> /// Reads the dependency information from the given node. /// </summary> /// <param name="p_xndCompositeDependency">The node from which to load the dependency information.</param> /// <returns>A <see cref="CompositeDependency" /> representing the dependency described in the given node.</returns> protected override CompositeDependency loadDependency(XmlNode p_xndCompositeDependency) { if (p_xndCompositeDependency == null) { return(null); } var dopOperator = (DependencyOperator) Enum.Parse(typeof(DependencyOperator), p_xndCompositeDependency.Attributes["operator"].InnerText); var cpdDependency = new CompositeDependency(dopOperator); var xnlDependencies = p_xndCompositeDependency.ChildNodes; foreach (XmlNode xndDependency in xnlDependencies) { switch (xndDependency.Name) { case "dependencies": cpdDependency.Dependencies.Add(loadDependency(xndDependency)); break; case "fileDependency": var strDependency = xndDependency.Attributes["file"].InnerText.ToLower(); var mfsModState = (ModFileState)Enum.Parse(typeof(ModFileState), xndDependency.Attributes["state"].InnerText); cpdDependency.Dependencies.Add(new FileDependency(strDependency, mfsModState, StateManager)); break; case "flagDependency": var strFlagName = xndDependency.Attributes["flag"].InnerText; var strValue = xndDependency.Attributes["value"].InnerText; cpdDependency.Dependencies.Add(new FlagDependency(strFlagName, strValue, StateManager)); break; case "falloutDependency": var verMinFalloutVersion = new Version(xndDependency.Attributes["version"].InnerText); cpdDependency.Dependencies.Add(new GameVersionDependency(StateManager, verMinFalloutVersion)); break; case "fommDependency": var verMinFommVersion = new Version(xndDependency.Attributes["version"].InnerText); cpdDependency.Dependencies.Add(new FommDependency(StateManager, verMinFommVersion)); break; default: var dpnExtensionDependency = ParserExtension.ParseDependency(xndDependency, StateManager); if (dpnExtensionDependency != null) { cpdDependency.Dependencies.Add(dpnExtensionDependency); } else { throw new ParserException("Invalid dependency node: " + xndDependency.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser."); } break; } } return(cpdDependency); }
/// <seealso cref="Parser.GetModDependencies()" /> public override CompositeDependency GetModDependencies() { var cpdDependency = new CompositeDependency(DependencyOperator.And); var xnlDependencies = XmlConfig.SelectNodes("/config/moduleDependancies/*"); foreach (XmlNode xndDependency in xnlDependencies) { switch (xndDependency.Name) { case "falloutDependancy": var verMinFalloutVersion = new Version(xndDependency.Attributes["version"].InnerText); cpdDependency.Dependencies.Add(new GameVersionDependency(StateManager, verMinFalloutVersion)); break; case "fommDependancy": var verMinFommVersion = new Version(xndDependency.Attributes["version"].InnerText); cpdDependency.Dependencies.Add(new FommDependency(StateManager, verMinFommVersion)); break; case "fileDependancy": var strDependency = xndDependency.Attributes["file"].InnerText.ToLower(); cpdDependency.Dependencies.Add(new FileDependency(strDependency, ModFileState.Active, StateManager)); break; default: var dpnExtensionDependency = ParserExtension.ParseDependency(xndDependency, StateManager); if (dpnExtensionDependency != null) { cpdDependency.Dependencies.Add(dpnExtensionDependency); } else { throw new ParserException("Invalid dependency node: " + xndDependency.Name + ". At this point the config file has been validated against the schema, so there's something wrong with the parser."); } break; } } return(cpdDependency); }