public override void Execute(object @object) { if (!Enabled) { return; } var g = new Group(); if (Warehouse.Warehouse.Instance.CourseTree.CurrentNode is TestModule) { var tm = Warehouse.Warehouse.Instance.CourseTree.CurrentNode as TestModule; g.Text = string.Concat("Группа ", tm.Groups.Count + 1); #region Если в контроле есть группы, то последовательность вопросов случайная tm.QuestionSequence = Enums.QuestionSequence.Random; #endregion } Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Nodes.Add(g); if (!Warehouse.Warehouse.Instance.CourseTree.CurrentNode.IsExpanded) { Warehouse.Warehouse.Instance.CourseTree.CurrentNode.Toggle(); } Warehouse.Warehouse.Instance.CourseTree.CurrentNode = g; Warehouse.Warehouse.IsProjectModified = true; }
public static Group Clone(Group group) { var newGroup = new Group { Text = group.Text, TimeRestriction = group.TimeRestriction, Profile = group.Profile, Marks = group.Marks, ChosenQuestionsCount = group.ChosenQuestionsCount }; foreach (var groupQuestion in group.Questions) { var question = Question.Clone(groupQuestion); newGroup.Nodes.Add(question); } return newGroup; }
/// <summary> /// Импорт файла теста из формата IMS QTI. /// </summary> /// <param name="fileName">Имя файла теста.</param> public void ReadQti(string fileName) { XmlTextReader reader = new XmlTextReader(fileName); string testFolder = Path.GetDirectoryName(fileName); while (reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("assessmentTest")) { identificator = reader.GetAttribute("identifier"); if (reader.GetAttribute("title") != "") testName = reader.GetAttribute("title"); else testName = identificator; } if (reader.Name.Equals("defaultValue")) { bool endCycle = false; // считываем содержимое defaultValue while (!endCycle && reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("value")) { int.TryParse(reader.ReadElementString(), out defaultValue); } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name.Equals("defaultValue")) { endCycle = true; } } } } if (reader.Name.Equals("testPart")) { if (reader.GetAttribute("navigationMode") == "linear") { // navigationMode = Enums.NavigationMode.linear; questionSequence = Enums.QuestionSequence.Natural; } else if (reader.GetAttribute("navigationMode") == "nonlinear") { // navigationMode = Enums.NavigationMode.nonlinear; questionSequence = Enums.QuestionSequence.Random; } } if (reader.Name.Equals("assessmentSection")) { Group group = new Group(); group.Text = reader.GetAttribute("title"); //хз.. вроде так) bool endCycle = false; while (!endCycle && reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("timeLimits", System.StringComparison.OrdinalIgnoreCase)) { int tr; int.TryParse(reader.GetAttribute("maxTime"), out tr); group.TimeRestriction = tr; } if (reader.Name.Equals("assessmentItemRef")) { Question q = ReadQuestionFile(testFolder + "\\" + reader.GetAttribute("href"), tmd);//(TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode); if (q != null) { if (!reader.IsEmptyElement) { bool end = false; while (!end && reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("timeLimits", System.StringComparison.OrdinalIgnoreCase)) { int tr; int.TryParse(reader.GetAttribute("maxTime"), out tr); q.TimeRestriction = tr; } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name.Equals("assessmentItemRef", System.StringComparison.OrdinalIgnoreCase)) { end = true; } } } } //пока не поняла, зачем это вообще надо // q.TestModule = (TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode;//this; // q.Group = group; group.Questions.Add(q); //roups if (q.Text != "") group.Nodes.Add(q);//скорее эта строчка правильная) } } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name.Equals("assessmentSection")) { endCycle = true; } } } // group.QuestionNumber = group.questions.Count + 1; groups.Add(group); // groups. } if (reader.Name.Equals("assessmentItemRef")) { Question q = ReadQuestionFile(testFolder + "\\" + reader.GetAttribute("href"), tmd);//(TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode /*this*/); if (q != null) { if (!reader.IsEmptyElement) { bool end = false; while (!end && reader.Read()) { if (reader.NodeType == XmlNodeType.Element) { if (reader.Name.Equals("timeLimits", System.StringComparison.OrdinalIgnoreCase)) { int tr; int.TryParse(reader.GetAttribute("maxTime"), out tr); q.TimeRestriction = tr; } } else if (reader.NodeType == XmlNodeType.EndElement) { if (reader.Name.Equals("assessmentItemRef", System.StringComparison.OrdinalIgnoreCase)) { end = true; } } } } // q.TestModule = this; questions.Add(q); // TestModule tmd = (TestModule)Warehouse.Warehouse.Instance.CourseTree.CurrentNode; // tmd.Nodes.Add(q); // int o = 90; //tmd.Questions.Count+=1; } } } } reader.Close(); questionNumber = questions.Count + 1; groupNumber = groups.Count + 1; if (groups.Count != 0) { QuestionSequence = Enums.QuestionSequence.Random; } }
public GroupXmlWriter(Group group) { this.group = group; }
public void ReadXml(XmlTextReader xmlReader) { try { var isEndCycle = false; while (!isEndCycle && xmlReader.Read()) { if (xmlReader.NodeType == XmlNodeType.Element) { if (xmlReader.Name.Equals("group", StringComparison.OrdinalIgnoreCase)) { #region Группа var g = new Group(); if (xmlReader.GetAttribute("name") != null) { g.Text = xmlReader.GetAttribute("name"); } else { g.Text = string.Concat("Группа ", testModule.Groups.Count + 1); } g.ChosenQuestionsCount = int.Parse(xmlReader.GetAttribute("count")); g.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(g); #endregion } if (xmlReader.Name.Equals("question", StringComparison.OrdinalIgnoreCase)) { // Название вопроса. var qname = xmlReader.GetAttribute("name"); // Идентификатор вопроса. var qid = xmlReader.GetAttribute("id").Substring(8, 36); // Тип вопроса. var qtype = xmlReader.GetAttribute("type"); // Ограничение по времени на прохождение вопроса. var qtime = xmlReader.GetAttribute("time"); // Идентификатор следующего вопроса. var qNextQuestion = xmlReader.GetAttribute("next_question"); if (!string.IsNullOrEmpty(qNextQuestion)) { qNextQuestion = qNextQuestion.Substring(8, 36); } if (qtype.Equals("radio", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Одновариантный выбор var q = new ChoiceQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //q.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("checkbox", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Множественный выбор var q = new MultichoiceQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("order", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Ранжирование var q = new OrderingQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("edit", StringComparison.OrdinalIgnoreCase) || qtype.Equals("explicit", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Открытый вопрос var q = new OpenQuestion { Text = qname }; if (qtype.Equals("edit", StringComparison.OrdinalIgnoreCase)) { q.IsAnswerNumeric = false; } else if (qtype.Equals("explicit", StringComparison.OrdinalIgnoreCase)) { q.IsAnswerNumeric = true; } try { q.Id = new Guid(qid); } catch { //mq.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } else if (qtype.Equals("outer", StringComparison.OrdinalIgnoreCase)) { #region Вопросы Внешний вопрос var q = new OuterQuestion { Text = qname }; try { q.Id = new Guid(qid); } catch { //q.Identifier = qid; } q.TimeRestriction = int.Parse(qtime); if (!string.IsNullOrEmpty(qNextQuestion)) { // q_ - временное хранилище для идентификатора следующего вопроса. // После чтения всего контроля, q.NextQuestion заменяется на реальный вопрос. var q_ = new ChoiceQuestion { Id = new Guid(qNextQuestion) }; q.NextQuestion = q_; } q.XmlReader.ReadXml(xmlReader); testModule.Nodes.Add(q); #endregion } } } else if (xmlReader.NodeType == XmlNodeType.EndElement) { if (xmlReader.Name.Equals("module", StringComparison.OrdinalIgnoreCase)) { isEndCycle = true; } } } } catch (Exception ex) { ExceptionManager.Instance.LogException(ex); } }
public GroupXmlReader(Group group) { this.group = group; }