/// <summary> /// Load script and check it. /// </summary> /// <param name="scriptFile">File to be loaded.</param> /// <param name="validateSetting">Validation data set.</param> /// <returns>Script loaded.</returns> public static XmlScriptFile LoadWithValidation(string scriptFile, XmlScriptValidateSetting validateSetting) { if (string.IsNullOrEmpty(scriptFile)) { throw new ArgumentNullException("scriptFile"); } if (validateSetting == null) { throw new ArgumentNullException("validateSetting"); } validateSetting.VerifySetting(); XmlScriptFile script = new XmlScriptFile(); script.Load(scriptFile); script.PhoneSet = validateSetting.PhoneSet; script.PosSet = validateSetting.PosSet; script.Validate(validateSetting); return script; }
/// <summary> /// Merge scripts in a folder into a script file. /// Error items are removed from the output file. /// </summary> /// <param name="scriptDir">Dir conataining script file.</param> /// <param name="errorSet">Error set.</param> /// <param name="resetId">True means resetting id.</param> /// <param name="validateSetting">Validation setting.</param> /// <param name="contentController">Contenct controller.</param> /// <returns>Xml script file.</returns> public static XmlScriptFile MergeScripts(string scriptDir, ErrorSet errorSet, bool resetId, XmlScriptValidateSetting validateSetting, object contentController) { if (string.IsNullOrEmpty(scriptDir)) { throw new ArgumentNullException("scriptDir"); } if (errorSet == null) { throw new ArgumentNullException("errorSet"); } if (validateSetting == null) { throw new ArgumentNullException("validateSetting"); } if (!Directory.Exists(scriptDir)) { throw new DirectoryNotFoundException(scriptDir); } validateSetting.VerifySetting(); XmlScriptValidationScope scope = validateSetting.ValidationScope; string[] subFiles = Directory.GetFiles( scriptDir, "*" + XmlScriptFile.Extension, SearchOption.AllDirectories); XmlScriptFile mergedScript = new XmlScriptFile(); long id = 0; foreach (string file in subFiles) { XmlScriptFile script = new XmlScriptFile(); script.Load(file, contentController); if (mergedScript.Language == Language.Neutral) { mergedScript.Language = script.Language; } else if (mergedScript.Language != script.Language) { throw new InvalidDataException(Helper.NeutralFormat("Inconsistent langage in {0}", file)); } if (scope != XmlScriptValidationScope.None) { script.PosSet = validateSetting.PosSet; script.PhoneSet = validateSetting.PhoneSet; script.Validate(validateSetting); script.Remove(GetNeedDeleteItemIds(script.ErrorSet)); } errorSet.Merge(script.ErrorSet); foreach (ScriptItem item in script.Items) { item.Id = resetId ? Helper.NeutralFormat("{0:D10}", ++id) : item.Id; ErrorSet addErrors = new ErrorSet(); if (!mergedScript.Add(item, addErrors, false)) { // Added failed errorSet.Merge(addErrors); } } } return mergedScript; }