/**<summary>Constructs the base variable.</summary>*/ public Variable(VarInfo info, object value) { this.Info = info; this.Value = value; }
//=========== LOADING ============ #region Loading /**<summary>Loads the item modification from xml.</summary>*/ public void LoadXml(XmlNode node) { List <string> unrecognized = new List <string>(); List <string> parsingErrors = new List <string>(); List <string> alreadyDefined = new List <string>(); bool looseText = false; // Read all variables XmlNodeList nodeList = node.ChildNodes; foreach (XmlNode varNode in nodeList) { string varName = varNode.Name; if (varName == "#comment") { continue; } else if (varName == "#text") { looseText = true; } try { if (VarInfoList.ContainsKey(varName)) { VarInfo varInfo = VarInfoList[varName]; object value = ParseVariable(varInfo.Type, varNode.InnerText); if (value is Exception) { parsingErrors.Add(varInfo.Type.ToString() + " " + varName + ": " + ((Exception)value).Message); } else { VarList.Add(varName, new Variable(varInfo, value)); } } else { unrecognized.Add(varName); } } catch (KeyNotFoundException) { unrecognized.Add(varName); } catch (ArgumentException) { alreadyDefined.Add(varName); } } // Log errors if (unrecognized.Count > 0 || parsingErrors.Count > 0 || alreadyDefined.Count > 0) { if (!ErrorLogger.IsOpen) { ErrorLogger.Open(); } ErrorLogger.WriteErrorHeader(); ErrorLogger.WriteLine("There were errors when reading ItemID: " + ID.ToString() + "."); if (looseText) { ErrorLogger.WriteLine("Loose text is present inside the element."); } if (unrecognized.Count > 0) { ErrorLogger.WriteLine(); ErrorLogger.WriteLine("Unrecognized Variables:"); foreach (string s in unrecognized) { ErrorLogger.WriteLine("- " + s); } } if (parsingErrors.Count > 0) { ErrorLogger.WriteLine(); ErrorLogger.WriteLine("Parsing Errors:"); foreach (string s in parsingErrors) { ErrorLogger.WriteLine("- " + s); } } if (alreadyDefined.Count > 0) { ErrorLogger.WriteLine(); ErrorLogger.WriteLine("Already Defined:"); foreach (string s in alreadyDefined) { ErrorLogger.WriteLine("- " + s); } } ErrorLogger.WriteLine(); } }