public static XmlBaseParser Parse(XmlBase define, string nodeName) { if (define is XmlClass) { return(new XmlClassParser(define as XmlClass, nodeName)); } else if (define is XmlInt) { return(new XmlIntParser(define as XmlInt, nodeName)); } else if (define is XmlFloat) { return(new XmlFloatParser(define as XmlFloat, nodeName)); } else if (define is XmlString) { return(new XmlStringParser(define as XmlString, nodeName)); } else if (define is XmlBool) { return(new XmlBoolParser(define as XmlBool, nodeName)); } else if (define is XmlList) { return(new XmlListParser(define as XmlList, nodeName)); } else { return(new XmlBaseParser(define, nodeName)); } }
static void Main(string[] args) { string inputPath = "../../../XmlBuilderTest/Config/"; string outputPath = "../../../XmlBuilderTest/Output/"; XmlDocument doc = new XmlDocument(); string[] files = Directory.GetFiles(inputPath); for (int i = 0; i < files.Length; ++i) { string file = files[i]; doc.Load(file); XmlBase xmlBase = XmlBase.Parse(doc.FirstChild); FileInfo fileInfo = new FileInfo(file); string name = fileInfo.Name; name = char.ToUpper(name[0]) + name.Substring(1, name.LastIndexOf(".") - 1); string dataContent = xmlBase.ToDefine(); WriteFile(outputPath + name + "Data.cs", dataContent); XmlBaseParser parser = XmlBaseParser.Parse(xmlBase, "rootNode"); string parserContent = parser.ToDefine(); WriteFile(outputPath + name + "Parser.cs", parserContent); } }
public SectionSave(SectionView view, QuizContext cx) { View = view; View.Tests = new List <TestView>(); foreach (var item in view.SectionData) { var question = cx.Questions.Find(item.QuestionId); var testSave = new TestView() { Quiz = question.Quiz, Question = question, Model = XmlBase.Deserialize(question.XmlObject, question.TypeName), Save = item }; //-----------------Is SectionData count equal Test count?------------- View.Tests.Add(testSave); var xmlQuestion = XmlBase.Deserialize(question.XmlObject, question.TypeName); var answerType = XmlBase.GetType(((IAnswerName)xmlQuestion).GetTypeName()); var answerInstance = (XmlBase)Activator.CreateInstance(answerType); ((IParseAnswer)answerInstance).ParseAnswer(item.Answers); Answers.Add(item.QuestionId, answerInstance); } }
private string SerializeToCode(XmlBase xmlBase) { StringBuilder generatedCode = new StringBuilder(); xmlBase.ToCSharp(generatedCode, 0, null); return(generatedCode.ToString().Replace("\r\n", "\n")); }
public QuestionSave(PerQuestionView view, QuizContext cx) { View = view; var question = cx.Questions.Find(view.Question.Id); QuestionId = question.Id; View.Test = new TestView() { Quiz = question.Quiz, Question = question, Model = XmlBase.Deserialize(question.XmlObject, question.TypeName), Save = view.QuestionData }; var xmlQuestion = XmlBase.Deserialize(question.XmlObject, question.TypeName); var answerType = XmlBase.GetType(((IAnswerName)xmlQuestion).GetTypeName()); var answerInstance = (XmlBase)Activator.CreateInstance(answerType); ((IParseAnswer)answerInstance).ParseAnswer(view.QuestionData.Answers); Answer = answerInstance; }
/// <summary> /// For default initializing /// </summary> public TestSave(QuizContext context, List <SectionView> sectionViews) { _cx = context; Id = _GenerateId(); foreach (var item in sectionViews) { var sectionSave = new SectionSave() { View = item, Answers = new Dictionary <int, XmlModels.XmlBase>() }; foreach (var test in item.Tests) { var answerName = ((IAnswerName)test.Model).GetTypeName(); var answerInstance = (XmlBase)Activator.CreateInstance(XmlBase.GetType(answerName)); sectionSave.Answers.Add(test.Question.Id, answerInstance); } Saves.Add(item.Section.Id, sectionSave); } }
public TestView CreateTestView(Question question) { var testView = new TestView() { Quiz = question.Quiz, Question = question, Model = XmlBase.Deserialize(question.XmlObject, question.TypeName) }; return(testView); }
public ActionResult GetAttepmt(int?id) { var view = cx.QuizAttempts.Find(id); var quiz = cx.Quizzes.Find(view.Quiz.Id); var model = new QuizAttempView() { Attempt = view, Quiz = quiz, Sections = new List <AttempSectionView>() }; var sections = cx.Sections.Where(x => x.Quiz.Id == quiz.Id).ToList(); foreach (var section in sections) { var sectionAttemp = new AttempSectionView() { Section = section, Tests = new List <AttempTestView>() }; var answers = view.Answers.Where(x => x.Question != null). Where(y => y.Question.Section.Id == section.Id). OrderBy(z => z.Question.OrderNumber).ToList(); foreach (var answer in answers) { var question = answer.Question; var testAttemp = new AttempTestView() { Question = question, Answer = answer, XmlAnswer = XmlBase.Deserialize(answer.XmlObject, answer.TypeName), Model = XmlBase.Deserialize(question.XmlObject, question.TypeName) }; sectionAttemp.Tests.Add(testAttemp); } if (sectionAttemp.Tests.Count != 0) { model.Sections.Add(sectionAttemp); } } ModelState.Clear(); return(View(model)); }
public RedactorView SaveXmlQuestion(RedactorView view) { var question = cx.Questions.Find(view.Question.Id); question.Text = view.Question.Text; question.Value = view.Question.Value; question.TypeName = view.Model.GetType().Name; question.XmlObject = XmlBase.SerializeAbstract(view.Model); cx.SaveChanges(); view.Question = question; view.Quiz = question.Quiz; view.Section = question.Section; return(view); }
public List <TestView> CreateTestViews(IEnumerable <Question> questions, Quiz quiz) { var testViews = new List <TestView>(); foreach (var question in questions) { var testView = new TestView() { Quiz = quiz, Question = question, Model = XmlBase.Deserialize(question.XmlObject, question.TypeName) }; testViews.Add(testView); } return(testViews); }
public Answer ExamineQuestion(Question question, XmlBase xmlAnswer) { var answer = new Answer() { Question = question, XmlObject = XmlBase.SerializeAbstract(xmlAnswer), }; XmlBase questionXml = XmlBase.Deserialize(question.XmlObject, question.TypeName); if (((IParseAnswer)xmlAnswer).IsValid()) { answer.Mark = ((IXmlTask)questionXml).Compare(xmlAnswer, question.Value); } answer.TypeName = ((IAnswerName)questionXml).GetTypeName(); return(answer); }
private void ToDefineChildNodes(ref StringBuilder buff, int indent, string listName) { XmlBase defItem = m_xmlDef.ListData[0]; XmlBaseParser parser = XmlBaseParser.Parse(defItem, "node"); buff.Append('\t', indent); buff.Append("foreach (XmlNode node in ").Append(m_nodeName).AppendLine(".ChildNodes)"); buff.Append('\t', indent).AppendLine("{"); { buff.Append('\t', indent + 1); buff.Append("if (node.NodeType != XmlNodeType.Element)").AppendLine(); buff.Append('\t', indent + 2).Append("continue;").AppendLine(); buff.Append('\t', indent + 1); buff.Append("var dataItem = "); parser.ToMember(ref buff, 0); buff.Append('\t', indent + 1); buff.Append(listName).AppendLine(".Add(dataItem);"); } buff.Append('\t', indent).AppendLine("}"); }
public TestSave(QuizContext context, List <PerQuestionView> questionViews) { _cx = context; Id = _GenerateId(); foreach (var item in questionViews) { var answerName = ((IAnswerName)item.Test.Model).GetTypeName(); var answerInstance = (XmlBase)Activator.CreateInstance(XmlBase.GetType(answerName)); var emptySave = new QuestionSave() { View = item, QuestionId = item.Question.Id, Answer = answerInstance }; QuestionSaves.Add(item.Question.Id, emptySave); } QuestionOrders = questionViews.Select(x => new { QuestionId = x.Question.Id, SectionOrder = x.Question.Section.Order, QuestionOrder = x.Question.OrderNumber }).ToList(). OrderBy(y => y.SectionOrder + "_" + y.QuestionOrder) .ToList().Select(z => z.QuestionId).ToList(); for (int i = 0; i < QuestionOrders.Count; ++i) { var item = questionViews.Single(x => x.Question.Id == QuestionOrders[i]); item.QuestionOrder = i; } }
public XmlBaseParser(XmlBase xmlBase, string nodeName) { m_xmlDef = xmlBase; m_nodeName = nodeName; }
public XmlFieldParser(XmlBase def, string nodeName) : base(def, nodeName) { }
public ActionResult ChangeQuestion(RedactorContainerView view) { var question = cx.Questions.Find(view.Question.Id); question.Obligation = view.Question.Obligation; if (view.Question.OrderNumber != question.OrderNumber) { var questions = cx.Questions. Where(x => x.Section.Id == view.Section.Id). OrderBy(y => y.OrderNumber).ToList(); if (view.Question.OrderNumber > questions.Count) { view.Question.OrderNumber = questions.Count; } questions.RemoveAt(question.OrderNumber - 1); questions.Insert(view.Question.OrderNumber - 1, question); int index = 1; foreach (var item in questions) { item.OrderNumber = index; ++index; } } question.Difficulty = view.Question.Difficulty; question.TimeLimit = view.Question.TimeLimit; if (question.Type != null) { ViewBag.Change = true; } if (view.Question.Type != question.Type) { question.Type = view.Question.Type; question.XmlValue = null; question.TypeName = null; } cx.SaveChanges(); RedactorView model = null; if (view.Question.Type != null) { model = RedactorView.GetView((QuestionType)view.Question.Type); model.Question = question; model.Quiz = cx.Quizzes.Find(view.Quiz.Id); model.Section = cx.Sections.Find(view.Section.Id); if (question.XmlValue != null) { model.Model = XmlBase.Deserialize(question.XmlObject, question.TypeName); } } return(PartialView("Redactor", model)); }