/// <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="_theme">тема</param> private void CopyThemeFiles(ItemThemeForXSLT _theme) { if (_theme == null) { throw new ArgumentNullException("CopyThemeFiles(ItemThemeForXSLT _theme)"); } SendMessage("Копирование файлов"); string outMediaDirectory = Path.Combine(convParams.OutMediaFiles.AsPath(), _theme.FileName); _theme.CopyFiles(outMediaDirectory); _theme.CopyToolsFiles(Path.Combine(convParams.OutMediaFiles.AsPath(), convParams.ToolsDataFolderName.AsPath()), convParams.ToolImg); }
/// <summary> /// получить тему по идентификатору /// </summary> /// <param name="idTheme">идентификатор темы private ItemThemeForXSLT GetTheme(Guid _id) { if (_id == null) { throw new ArgumentNullException(); } ItemThemeForXSLT theme = (ItemThemeForXSLT)itemsAdapter.GetCourseItem(_id); if (theme == null) { throw new Exception("Не найдена тема с идентификатором: " + _id); } return(theme); }
/// <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> /// <remarks>создание данной функции - не самый /// лучший способ, обеспечения гибкости кода, но решающий /// поставленную в настоящий момент задачу и /// подпбные задачи в обозримом будущем</remarks> protected override void DoOtherOperation(ItemThemeForXSLT _theme) { if (_theme == null) throw new ArgumentNullException("CopyThemeFiles(ItemThemeForXSLT _theme)"); try { string mediaDirectory = Path.Combine(convParams.OutMediaFiles.AsPath(), _theme.FileName).AsPath(); currTempDir = System.IO.Path.Combine(mediaDirectory, "temp"); ConvertSWF(mediaDirectory); } catch(Exception ex) { throw new Exception(ex.Message); } finally { DirectoryHelper.DeleteDirectory(currTempDir); } }
/// <summary> /// функция создана для классов-наследников /// (в частности для возможности конвертации /// видео файлов темы в другие форматы) /// </summary> /// <remarks>создание данной функции - не самый /// лучший способ, обеспечения гибкости кода, но решающий /// поставленную в настоящий момент задачу и /// подпбные задачи в обозримом будущем</remarks> protected override void DoOtherOperation(ItemThemeForXSLT _theme) { if (_theme == null) { throw new ArgumentNullException("CopyThemeFiles(ItemThemeForXSLT _theme)"); } try { string mediaDirectory = Path.Combine(convParams.OutMediaFiles.AsPath(), _theme.FileName).AsPath(); currTempDir = System.IO.Path.Combine(mediaDirectory, "temp"); ConvertSWF(mediaDirectory); } catch (Exception ex) { throw new Exception(ex.Message); } finally { DirectoryHelper.DeleteDirectory(currTempDir); } }
/// <summary> /// копирование файлов темы /// </summary> /// <param name="_theme">тема</param> private void CopyThemeFiles(ItemThemeForXSLT _theme) { if (_theme == null) throw new ArgumentNullException("CopyThemeFiles(ItemThemeForXSLT _theme)"); SendMessage("Копирование файлов"); string outMediaDirectory = Path.Combine(convParams.OutMediaFiles.AsPath(), _theme.FileName); _theme.CopyFiles(outMediaDirectory); _theme.CopyToolsFiles(Path.Combine(convParams.OutMediaFiles.AsPath(), convParams.ToolsDataFolderName.AsPath()), convParams.ToolImg); }
/// <summary> /// функция создана для классов-наследников /// (в частности для возможности конвертации /// видео файлов темы в другие форматы) /// </summary> /// <remarks>создание данной функции - не самый /// лучший способ, обеспечения гибкости кода, но решающий /// поставленную в настоящий момент задачу и /// подпбные задачи в обозримом будущем</remarks> protected virtual void DoOtherOperation(ItemThemeForXSLT _theme) { }
/// <summary> /// выполнить конвертацию тем /// </summary> public void Do() { try { if (themes == null || themes.Count <XElement>() < 1) { return; } //XslCompiledTransform xslt = new XslCompiledTransform(); //xslt.Load(convParams.ThemeShemePath); foreach (XElement th in themes) { SendMessage("- Конвертация темы " + th.Element(NodeNames.TITLE).Value); XDocument doc = new XDocument(th); string fn = th.Element(NodeNames.ITEM_FILE_ID).Value; string themeFilesNewPath = Path.Combine(convParams.OutMediaFiles.AsPath(), fn).AsPath(); string outFile = Path.Combine(convParams.OutItemsPath, fn + ".html"); ///SAXON Processor proc = new Processor(); XdmNode input = proc.NewDocumentBuilder().Build(doc.Root.CreateReader()); XsltTransformer transformer = proc.NewXsltCompiler().Compile(new Uri(convParams.ThemeShemePath)).Load(); transformer.InitialContextNode = input; transformer.SetParameter(new QName("", "", "mediaPath"), new XdmAtomicValue(convParams.CourseDataFolderName)); transformer.SetParameter(new QName("", "", "picFolder"), new XdmAtomicValue(th.Element(NodeNames.ITEM_FILE_ID).Value)); transformer.SetParameter(new QName("", "", "toolFolder"), new XdmAtomicValue(convParams.ToolsDataFolderName)); ///задать адрес директории для xsl:result-document transformer.BaseOutputUri = new Uri(themeFilesNewPath); Serializer serializer = new Serializer(); serializer.SetOutputFile(outFile); transformer.Run(serializer); //doc.Document.Declaration = new XDeclaration("1.0", "utf-8", "true"); //XPathNavigator nv = doc.CreateNavigator(); //XsltArgumentList xslArg = new XsltArgumentList(); //xslArg.AddParam("mediaPath", "", convParams.CourseDataFolderName); //xslArg.AddParam("picFolder", "", th.Element(NodeNames.ITEM_FILE_ID).Value); //xslArg.AddParam("toolFolder", "", convParams.ToolsDataFolderName); //string outFile = Path.Combine(convParams.OutItemsPath, th.Element(NodeNames.ITEM_FILE_ID).Value + ".html"); //using (FileStream fs = new FileStream(outFile, FileMode.Create)) //{ // xslt.Transform(nv, xslArg, fs); //} Guid idTheme = Guid.Parse(th.Element(NodeNames.IDENTIFER).Value); ItemThemeForXSLT theme = GetTheme(idTheme); CopyThemeFiles(theme); DoOtherOperation(theme); } } catch (Exception ex) { throw new Exception("Исключение при конвертации темы курса: " + ex.Message); } }