/// <summary> /// инициализирует дочерние элементы /// </summary> /// <param name="_item">корневой элемент</param> /// <param name="_factory">фабрика элементов курса</param> /// <exception cref="ArgumentNullException">Нулевой дочерний элемент</exception> /// <exception cref="AppException">Не удалось идентифицировать дочерний элемент</exception> void InitChild(LearningSection _item, XSLTItemsFactory _factory) { IItemModelForXSLT ch = null; bool validCreating = false; foreach (AbstractLearningItem li in _item.childs) { try { ch = _factory.Create(li, out validCreating); if (!validCreating) { throw new Exception(item.identifier + ": неопределенный тип элемента курса: " + item.GetType()); } if (ch != null) { Items.Add(ch); } } catch (ArgumentNullException) { throw new Exception("Один из дочерних элементов нулевой: " + _item.identifier); } catch (Exception ex) { throw new Exception(ex.Message); } } }
/// <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); }