public void InitializeData(ServiceInfo si)
        {
            serviceInfo = si;

            authorComboBox.Items.Add("");
            var authors = serviceInfo.GetAuthors(subjectComboBox.Text);
            for (var i = 0; i < authors.Count; i++)
            {
                authorComboBox.Items.Add(serviceInfo.GetAuthors(subjectComboBox.Text)[i]);
            }
            authorComboBox.SelectedIndex = 0;

            subjectComboBox.Items.Add("");
            var subjects = serviceInfo.GetSubjects(authorComboBox.Text);
            for (var i = 0; i < subjects.Count; i++)
            {
                subjectComboBox.Items.Add(serviceInfo.GetSubjects(authorComboBox.Text)[i]);
            }
            subjectComboBox.SelectedIndex = 0;

            isAuthorBlocked = false;
            isSubjectBlocked = false;
        }
        public override void Execute(object @object)
        {
            if (!Enabled)
            {
                return;
            }

            ServiceInfo serviceInfo;

            using (var openFileDialog = new OpenFileDialog())
            {
                openFileDialog.Title = "Открыть";
                openFileDialog.Filter = "XML (*.xml)|*.xml";

                if (!openFileDialog.ShowDialog().Equals(DialogResult.OK))
                {
                    return;
                }

                try
                {
                    serviceInfo = new ServiceInfo(openFileDialog.FileName);
                }
                catch (Exception exception)
                {
                    UIHelper.ShowMessage(operationCantBePerformedMessage,
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                    return;
                }
            }

            using (var oqd = new OuterQuestionDialog())
            {
                oqd.InitializeData(serviceInfo);

                if (!oqd.ShowDialog(EditorObserver.DialogOwner).Equals(DialogResult.OK))
                {
                    return;
                }

                // Выбранные в диалоге вопросы.
                var outerQuestions = oqd.GetSelectedQuestions();

                for (var i = 0; i < outerQuestions.Count; i++)
                {
                    var q = PrepareOuterQuestion();

                    for (var j = 0; j < serviceInfo.Problems.Count; j++)
                    {
                        if (serviceInfo.Problems[j].Name.Equals(outerQuestions[i]))
                        {
                            q.Url = serviceInfo.Problems[j].Url;
                            q.TaskId = serviceInfo.Problems[j].Id;
                            q.TaskName = serviceInfo.Problems[j].Name;
                            q.Declaration = serviceInfo.Problems[j].Declaration;
                            q.Text = outerQuestions[i];
                            q.QuestionDocument.Text = q.Text;
                            for (var k = 0; k < serviceInfo.task_number; k++)
                            {
                                if (serviceInfo.Problems[j].Task_number == serviceInfo.Tasks[k].Task_number)
                                {
                                    q.TestId = serviceInfo.Tasks[k].Id;
                                    q.TestName = serviceInfo.Tasks[k].Name;
                                    for (var l = 0; l < serviceInfo.externaltest_number; l++)
                                    {
                                        if (serviceInfo.Tasks[k].Externaltest_number == serviceInfo.Externaltests[l].Externaltest_number)
                                        {
                                            q.SubjectName = serviceInfo.Externaltests[l].Name;
                                        }
                                    }
                                }
                            }
                            
                               
                        }
                    }

                    EditorObserver.ActiveEditor.BodyInnerHtml = q.Declaration;
                }

                var cn = Warehouse.Warehouse.Instance.CourseTree.CurrentNode;
                Warehouse.Warehouse.Instance.CourseTree.CurrentNode = cn.Nodes[cn.Nodes.Count - 1] as CourseItem;
                Warehouse.Warehouse.IsProjectModified = true;
            }
        }