public ViewGenerator(Dialog dialog, string answerstoreFile)
        {
            Intents     = new List <Intent>();
            answerStore = new AnswerStoreSimulator(answerstoreFile);

            foreach (var intent in dialog.Intents.Values.OrderBy(i => i.Name))
            {
                List <ViewNode> conditions = new List <ViewNode>();

                foreach (var node in intent.ChildrenNodes)
                {
                    conditions.Add(ReadRoot(node));
                }

                Intents.Add(new Intent(intent.Name, conditions, intent.Questions));
            }
        }
        //Constructor
        public ViewNode(DialogNode node, AnswerStoreSimulator answerStore)
        {
            Children      = new List <ViewNode>();
            DisplayValues = new List <DisplayValue>();
            Type          = node.Type;
            List <DialogVariableAssignment> assignList = new List <DialogVariableAssignment>();

            if (node.Type == DialogNodeType.DialogVariableConditions)
            {
                foreach (var condition in ((DialogVariableConditions)node).VariableConditions)
                {
                    //If we force the value of another entity
                    //Extract the assignements
                    if (node.ChildrenNodes != null && node.ChildrenNodes.Count > 0)
                    {
                        foreach (var child in node.ChildrenNodes)
                        {
                            if (child.VariableAssignments != null && child.VariableAssignments.Count > 0)
                            {
                                foreach (var assign in child.VariableAssignments)
                                {
                                    assignList.Add(assign);
                                }
                            }
                        }
                    }


                    if (assignList.Count > 0)
                    {
                        DisplayValues.Add(new DisplayValue(condition, assignList));
                    }
                    else
                    {
                        DisplayValues.Add(new DisplayValue(condition));
                    }
                }
            }
            else
            {
                DisplayValues.Add(new DisplayValue(node, answerStore));
            }
        }
        //Constructor Overload
        public DisplayValue(DialogNode node, AnswerStoreSimulator answerStore)
        {
            Value      = Variable = " ";
            Attributes = new List <Attribute>();

            switch (node.Type)
            {
            case DialogNodeType.DisambiguationQuestion:

                string question = ((DisambiguationQuestion)node).QuestionText;

                if (((DisambiguationQuestion)node).DisambiguationOptions != null)
                {
                    foreach (var option in ((DisambiguationQuestion)node).DisambiguationOptions)
                    {
                        question = question + " \r\n -" + option.Text;
                    }
                }
                else
                {
                    question += "\r\n - Attention, absence d'option de désambiguïsation";
                }

                Value    = "Question";
                Type     = DisplayValueType.Question;
                Variable = " ";
                Attributes.Add(new Attribute("title", question));

                break;

            case DialogNodeType.FatHeadAnswers:

                string[] URI = ((FatHeadAnswers)node).MappingUris;

                Value    = "Réponse";
                Type     = DisplayValueType.Answer;
                Variable = " ";
                string uriattribute = "";
                string reponse      = "";
                int    i            = 0;

                foreach (var uri in URI)
                {
                    if (answerStore.GetAnswerUnitForMappingUri(uri) != null)
                    {
                        reponse = answerStore.GetAnswerUnitForMappingUri(uri).content.plainText;
                    }
                    else
                    {
                        reponse = "introuvable dans l'Answer Store";
                    }

                    if (i > 0)
                    {
                        uriattribute += "<br>" + "URI :  " + uri + " <br>" + "Réponse : <br>" + reponse;
                        HiddenInfo   += "<br>" + "<i>" + uri + "</i>";
                    }
                    else
                    {
                        HiddenInfo  += "<font color = \"#808080\" size = \"2\" >" + "<br>" + "<i>" + uri + "</i>";
                        uriattribute = "<font size = \"2\" >" + "URI : " + uri + "<br>" + "Réponse : <br>" + reponse;
                    }

                    i += 1;
                }

                if (i > 0)
                {
                    uriattribute += "</font>";
                    HiddenInfo   += "</font>";
                }



                Attributes.Add(new Attribute("title", uriattribute + reponse));
                SecondaryInfo = uriattribute + reponse;

                break;

            case DialogNodeType.RedirectToLongTail:

                Value = "Redirection en Long Tail";
                break;

            default:
                Value = "root";
                break;
            }
        }