/// <summary>
        ///     Constructs message by given xml string
        /// </summary>
        /// <param name="xmlString">
        ///     xml in string
        /// </param>
        /// <returns>
        ///     Message constructed by the xml
        /// </returns>
        public static Message Construct(string xmlString)
        {
            xmlString = concCompabilityIssuesStringWojtekIsGay(xmlString);

            if (GetMessageName(xmlString) == RegisterMessage.ELEMENT_NAME)
            {
                return(RegisterMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == DivideProblemMessage.ELEMENT_NAME)
            {
                return(DivideProblemMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == NoOperationMessage.ELEMENT_NAME)
            {
                return(NoOperationMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == RegisterResponseMessage.ELEMENT_NAME)
            {
                return(RegisterResponseMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == SolutionRequestMessage.ELEMENT_NAME)
            {
                return(SolutionRequestMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == SolutionsMessage.ELEMENT_NAME)
            {
                return(SolutionsMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == SolvePartialProblemsMessage.ELEMENT_NAME)
            {
                try
                {
                    //return SolvePartialProblemsMessage.Construct(xmlString);
                }
                catch (InvalidOperationException e) { return(null); }
                Console.WriteLine("******** SOLVE PARTIAL PROBLEM MESSAGE **************");
                return(SolvePartialProblemsMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == SolveRequestMessage.ELEMENT_NAME)
            {
                return(SolveRequestMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == SolveRequestResponseMessage.ELEMENT_NAME)
            {
                return(SolveRequestResponseMessage.Construct(xmlString));
            }
            if (GetMessageName(xmlString) == StatusMessage.ELEMENT_NAME)
            {
                return(StatusMessage.Construct(xmlString));
            }
            return(null);
        }
        public void Parse_XMLString_SolutionMessage()
        {
            /*********** Actual message ***********/
            string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"xml_samples\Solutions.xml");

            XmlDocument xmlDoc = new XmlDocument();

            xmlDoc.Load(path);
            string xmlStr = xmlDoc.OuterXml;

            string           name          = Message.GetMessageName(xmlStr);
            SolutionsMessage actualMessage = null;

            if (name == SolutionsMessage.ELEMENT_NAME)
            {
                actualMessage = SolutionsMessage.Construct(xmlStr);
            }

            /*********** Expected message ***********/
            // construct fields for SolutionsMessage
            string problemType = "TSP";
            ulong  id          = 12;

            byte[] commonData = { 1, 23, 25, 2, 5, 5, 5, 5, 2, 26, 87 };

            // fields for Solution1
            ulong taskId1                    = 123;
            bool  timeoutOccured1            = false;
            SolutionsSolutionType typeField1 = SolutionsSolutionType.Final;
            ulong computationsTime1          = 12334;

            byte[]   data1     = { 24, 252, 6, 43, 57, 88 };
            Solution solution1 = new Solution(taskId1, timeoutOccured1, typeField1, computationsTime1, data1);

            // fields for Solution2
            ulong taskId2                    = 321;
            bool  timeoutOccured2            = true;
            SolutionsSolutionType typeField2 = SolutionsSolutionType.Ongoing;
            ulong computationsTime2          = 43321;

            byte[]   data2     = { 24, 25, 6, 3, 7, 8 };
            Solution solution2 = new Solution(taskId2, timeoutOccured2, typeField2, computationsTime2, data2);

            Solution[] solutions = { solution1, solution2 };

            SolutionsMessage expectedMessage = new SolutionsMessage(problemType, id, commonData, solutions);


            Assert.AreEqual(expectedMessage, actualMessage);
        }