/// <summary> /// получить объект элемента курса /// IItemModelForXSLT /// </summary> /// <param name="_item">объект элемента курса IItemModel</param> /// <param name="_isValid">выходная переменная для подтверждения корректности опреации /// создания элемента</param> /// <returns>объект элемента курса IItemModelForXSLT /// null - объект не идентифицирован</returns> /// <exception cref="ArgumentNullException"></exception> /// <remarks>выходная переменная внесена для предотвращения исключений /// с возвратом нулевого элемента заведомо учтенных данных (входной, выходной тесты)</remarks> public IItemModelForXSLT Create(AbstractLearningItem _item,out bool _isValid) { if (_item == null) throw new ArgumentNullException(); IItemModelForXSLT im = null; _isValid = false; ItemType iType = _item.GetItemType(); switch (iType) { case ItemType.Section: im = new ItemSectionForXSLT((LearningSection)_item,this); break; case ItemType.Theme: im = new ItemThemeForXSLT((LearningItem)_item, tlFactory); break; case ItemType.Test: im = new ItemTestForXSLT((ContentLib.Core.Content.Testing.Test)_item); break; case ItemType.InTest: case ItemType.OutTest: _isValid = true; break; } if (im != null) _isValid = true; return im; }
/// <summary> /// копирование файлов теста /// </summary> /// <param name="_test">тест</param> /// <param name="_toPath">конечная директория</param> private void CopyTestFiles(ItemTestForXSLT _test, string _toPath) { if (_test == null || string.IsNullOrEmpty(_toPath)) { throw new ArgumentNullException(); } _test.CopyFiles(_toPath); }
/// <summary> /// получить объект элемента курса /// IItemModelForXSLT /// </summary> /// <param name="_item">объект элемента курса IItemModel</param> /// <param name="_isValid">выходная переменная для подтверждения корректности опреации /// создания элемента</param> /// <returns>объект элемента курса IItemModelForXSLT /// null - объект не идентифицирован</returns> /// <exception cref="ArgumentNullException"></exception> /// <remarks>выходная переменная внесена для предотвращения исключений /// с возвратом нулевого элемента заведомо учтенных данных (входной, выходной тесты)</remarks> public IItemModelForXSLT Create(AbstractLearningItem _item, out bool _isValid) { if (_item == null) { throw new ArgumentNullException(); } IItemModelForXSLT im = null; _isValid = false; ItemType iType = _item.GetItemType(); switch (iType) { case ItemType.Section: im = new ItemSectionForXSLT((LearningSection)_item, this); break; case ItemType.Theme: im = new ItemThemeForXSLT((LearningItem)_item, tlFactory); break; case ItemType.Test: im = new ItemTestForXSLT((ContentLib.Core.Content.Testing.Test)_item); break; case ItemType.InTest: case ItemType.OutTest: _isValid = true; break; } if (im != null) { _isValid = true; } return(im); }
/// <summary> /// выполнить конвертацию тем /// </summary> public void Do() { try { SendMessage("\n- Конвертация тестов"); XslCompiledTransform xslt = new XslCompiledTransform(); xslt.Load(convParams.TestShemePath); foreach (XElement tt in tests) { usedIdentifers = new List <string>(); Guid idTest = Guid.Parse(tt.Element(NodeNames.IDENTIFER).Value); ItemTestForXSLT test = (ItemTestForXSLT)itemsAdapter.GetCourseItem(idTest); if (test == null) { throw new Exception("Не найден тест с идентификатором: " + idTest); } XDocument testDoc = XDocument.Load(test.XMLFilePath); if (testDoc == null) { throw new Exception("Не удается загрузить тест " + idTest + ": " + test.XMLFilePath); } CorrectTest(testDoc); string outFile = Path.Combine(convParams.OutItemsPath, test.FileName + ".html"); string testFilesNewPath = Path.Combine(convParams.OutMediaFiles.AsPath(), test.FileName).AsPath(); DirectoryHelper.CreateDirectory(testFilesNewPath, false); ///SAXON Processor proc = new Processor(); XdmNode input = proc.NewDocumentBuilder().Build(testDoc.Root.CreateReader()); XsltTransformer transformer = proc.NewXsltCompiler().Compile(new Uri(convParams.TestShemePath)).Load(); transformer.InitialContextNode = input; transformer.SetParameter(new QName("", "", "mediaFolderName"), new XdmAtomicValue(convParams.CourseDataFolderName)); transformer.SetParameter(new QName("", "", "currentFolderName"), new XdmAtomicValue(test.FileName)); ///задать адрес директории для xsl:result-document transformer.BaseOutputUri = new Uri(testFilesNewPath); Serializer serializer = new Serializer(); serializer.SetOutputFile(outFile); transformer.Run(serializer); CopyTestFiles(test, testFilesNewPath); } } catch (Exception ex) { throw new Exception("Исключение при конвертации теста курса: " + ex.Message); } }
/// <summary> /// копирование файлов теста /// </summary> /// <param name="_test">тест</param> /// <param name="_toPath">конечная директория</param> private void CopyTestFiles(ItemTestForXSLT _test, string _toPath) { if (_test == null || string.IsNullOrEmpty(_toPath)) throw new ArgumentNullException(); _test.CopyFiles(_toPath); }