Pairs for options in Multiple and Exclsuve Choice questions
Esempio n. 1
0
        public override void SetResult(string answer)
        {
            if (!string.IsNullOrEmpty(answer))
            {
                var values = Options.Select(o => o.Value);

                if (values.Contains(answer))
                {
                    Answer = Options.First(o => o.Value.Equals(answer));
                }
            }
            else
            {
                Answer = null;
            }
        }
        public static string CreateExclusiveChoiceQuestion(XElement questionIterator, Category parent, XDocument xmlDocument)
        {
            var questionId = questionIterator.Name.LocalName;

            var label = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "head")
                    .Element(Namespaces.DefaultNamespace + "model").Element(Namespaces.DefaultNamespace + "itext").Element(Namespaces.DefaultNamespace + "translation")
                    .Elements().ToList().Where(e => e.Attribute("id").Value.Equals(string.Format("/data/{0}/{1}:label", parent.SystemID, questionId))).Single().Element(Namespaces.DefaultNamespace + "value").Value;


            var choiceElements = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "head")
                    .Element(Namespaces.DefaultNamespace + "model").Element(Namespaces.DefaultNamespace + "itext").Element(Namespaces.DefaultNamespace + "translation")
                    .Elements().ToList().Where(e => e.Attribute("id").Value.StartsWith(string.Format("/data/{0}/{1}:option", parent.SystemID, questionId)));

            var defaultAnswer = questionIterator.Value.Trim();

            var required = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "head")
                    .Element(Namespaces.DefaultNamespace + "model").Elements(Namespaces.DefaultNamespace + "bind").ToList()
                    .Where(e => e.Attribute("nodeset").Value.Equals(string.Format("/data/{0}/{1}", parent.SystemID, questionId))).Single().Attribute("required");

            var isRequired = false;

            if (required != null)
            {
                isRequired = GetRequired(required.Value, @"\w+");
            }

            var exclusiveQuestion = new ExclusiveChocieQuestionData
            {
                Label = label,
                Required = isRequired,
            };

            foreach (var item in choiceElements)
            {
                var itemIdTest = GetConstraints(item.Attribute("id").Value, string.Format(@"/data/{0}/{1}:(?'id'\w+)", parent.SystemID, questionId));
                var itemId = itemIdTest["id"];

                var itemText = item.Element(Namespaces.DefaultNamespace + "value").Value;
                var itemValue = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "body")
                    .Elements(Namespaces.DefaultNamespace + "group").ToList().Where(e => e.Element(Namespaces.DefaultNamespace + "label").Attribute("ref").Value.Equals(string.Format("jr:itext('/data/{0}:label')", parent.SystemID))).Single()
                    .Elements(Namespaces.DefaultNamespace + "select1").ToList().Where(e => e.Attribute("ref").Value.Equals(string.Format("/data/{0}/{1}", parent.SystemID, questionId))).Single()
                    .Elements(Namespaces.DefaultNamespace + "item").ToList().Where(e => e.Element(Namespaces.DefaultNamespace + "label").Attribute("ref").Value.Equals(string.Format("jr:itext('/data/{0}/{1}:{2}')", parent.SystemID, questionId, itemId))).Single()
                    .Element(Namespaces.DefaultNamespace + "value").Value;

                var choiceItem = new ChoiceTextValuePair
                {
                    Text = itemText,
                    Value = itemValue,

                };

                exclusiveQuestion.Options.Add(choiceItem);
                if (choiceItem.Value.Equals(defaultAnswer))
                    exclusiveQuestion.Answer = choiceItem;
            }

            return new TypedXmlSerializer<ExclusiveChocieQuestionData>().SerializeToXmlString(exclusiveQuestion);
        }
        public static string CreateMultipleChoiceQuestion(XElement questionIterator, Category parent, XDocument xmlDocument)
        {
            var questionId = questionIterator.Name.LocalName;

            var label = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "head")
                    .Element(Namespaces.DefaultNamespace + "model").Element(Namespaces.DefaultNamespace + "itext").Element(Namespaces.DefaultNamespace + "translation")
                    .Elements().ToList().Where(e => e.Attribute("id").Value.Equals(string.Format("/data/{0}/{1}:label", parent.SystemID, questionId))).Single().Element(Namespaces.DefaultNamespace + "value").Value;



            var choiceElements = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "head")
                    .Element(Namespaces.DefaultNamespace + "model").Element(Namespaces.DefaultNamespace + "itext").Element(Namespaces.DefaultNamespace + "translation")
                    .Elements().ToList().Where(e => e.Attribute("id").Value.StartsWith(string.Format("/data/{0}/{1}:option", parent.SystemID, questionId)));

            var defaultAnswers = questionIterator.Value.Split(new string[1] { " " }, StringSplitOptions.RemoveEmptyEntries);

            var required = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "head")
                    .Element(Namespaces.DefaultNamespace + "model").Elements(Namespaces.DefaultNamespace + "bind").ToList()
                    .Where(e => e.Attribute("nodeset").Value.Equals(string.Format("/data/{0}/{1}", parent.SystemID, questionId))).Single().Attribute("required");

            var isRequired = false;

            if (required != null)
            {
                isRequired = GetRequired(required.Value, @"\w+");
            }

            var multipleQuestion = new MultipleChoiceQuestionData
            {
                Label = label,
                Answers = new System.Collections.ObjectModel.ObservableCollection<ChoiceTextValuePair>(),
                Required = isRequired,
            };

            foreach (var item in choiceElements)
            {
                var itemIdTest = GetConstraints(item.Attribute("id").Value, string.Format(@"/data/{0}/{1}:(?'id'\w+)", parent.SystemID, questionId));
                var itemId = itemIdTest["id"];

                var itemText = item.Element(Namespaces.DefaultNamespace + "value").Value;

                var itemValue = xmlDocument.Element(Namespaces.XHtmlNamespace + "html").Element(Namespaces.XHtmlNamespace + "body")
                   .Elements(Namespaces.DefaultNamespace + "group").ToList().Where(e => e.Element(Namespaces.DefaultNamespace + "label").Attribute("ref").Value.Equals(string.Format("jr:itext('/data/{0}:label')", parent.SystemID))).Single()
                   .Elements(Namespaces.DefaultNamespace + "select").ToList().Where(e => e.Attribute("ref").Value.Equals(string.Format("/data/{0}/{1}", parent.SystemID, questionId))).Single()
                   .Elements(Namespaces.DefaultNamespace + "item").ToList().Where(e => e.Element(Namespaces.DefaultNamespace + "label").Attribute("ref").Value.Equals(string.Format("jr:itext('/data/{0}/{1}:{2}')", parent.SystemID, questionId, itemId))).Single()
                   .Element(Namespaces.DefaultNamespace + "value").Value;

                var choiceItem = new ChoiceTextValuePair
                {
                    Text = itemText,
                    Value = itemValue,
                };

                multipleQuestion.Options.Add(choiceItem);
                if (defaultAnswers.Contains(choiceItem.Value))
                    multipleQuestion.Answers.Add(choiceItem);
            }

            return new TypedXmlSerializer<MultipleChoiceQuestionData>().SerializeToXmlString(multipleQuestion);
        }