예제 #1
0
        void writeRunData(RaceRun raceRun, AdditionalRaceProperties.RaceRunProperties raceRunProperties)
        {
            _writer.WriteStartElement("rundata");
            _writer.WriteAttributeString("runnumber", raceRun.Run.ToString());

            {
                _writer.WriteStartElement("coursedata");

                if (string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties?.CoarseName))
                {
                    throw new DSVExportException("missing coarsename");
                }
                _writer.WriteStartElement("coursename");
                _writer.WriteValue(raceRun.GetRace().AdditionalProperties?.CoarseName);
                _writer.WriteEndElement();

                if (!string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties?.CoarseHomologNo))
                {
                    _writer.WriteStartElement("homologationnumber");
                    _writer.WriteValue(raceRun.GetRace().AdditionalProperties.CoarseHomologNo);
                    _writer.WriteEndElement();
                }

                if (raceRunProperties.Gates <= 0)
                {
                    throw new DSVExportException("missing number_of_gates");
                }
                _writer.WriteStartElement("number_of_gates");
                _writer.WriteValue(raceRunProperties.Gates.ToString());
                _writer.WriteEndElement();

                if (raceRunProperties.Turns <= 0)
                {
                    throw new DSVExportException("missing number_of_turninggates");
                }
                _writer.WriteStartElement("number_of_turninggates");
                _writer.WriteValue(raceRunProperties.Turns.ToString());
                _writer.WriteEndElement();

                if (raceRun.GetRace().AdditionalProperties?.StartHeight <= 0)
                {
                    throw new DSVExportException("missing startaltitude");
                }
                _writer.WriteStartElement("startaltitude");
                _writer.WriteValue(raceRun.GetRace().AdditionalProperties?.StartHeight.ToString());
                _writer.WriteEndElement();

                if (raceRun.GetRace().AdditionalProperties?.FinishHeight <= 0)
                {
                    throw new DSVExportException("missing finishaltitude");
                }
                _writer.WriteStartElement("finishaltitude");
                _writer.WriteValue(raceRun.GetRace().AdditionalProperties?.FinishHeight.ToString());
                _writer.WriteEndElement();

                if (raceRun.GetRace().AdditionalProperties?.CoarseLength <= 0)
                {
                    throw new DSVExportException("missing courselength");
                }
                _writer.WriteStartElement("courselength");
                _writer.WriteValue(raceRun.GetRace().AdditionalProperties.CoarseLength.ToString());
                _writer.WriteEndElement();

                writeCourseSetterPerson(_writer, raceRunProperties.CoarseSetter);

                if (!string.IsNullOrWhiteSpace(raceRunProperties.Forerunner1.Name))
                {
                    writeForeRunnerPerson(_writer, 1, raceRunProperties.Forerunner1);
                }
                else
                {
                    throw new DSVExportException("missing forerunner");
                }
                if (!string.IsNullOrWhiteSpace(raceRunProperties.Forerunner2.Name))
                {
                    writeForeRunnerPerson(_writer, 2, raceRunProperties.Forerunner2);
                }
                if (!string.IsNullOrWhiteSpace(raceRunProperties.Forerunner3.Name))
                {
                    writeForeRunnerPerson(_writer, 3, raceRunProperties.Forerunner3);
                }

                _writer.WriteEndElement();
            }


            if (!string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.Weather) ||
                !string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.Snow) ||
                !string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.TempStart) ||
                !string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.TempFinish))
            {
                _writer.WriteStartElement("meteodata");

                if (!string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.Weather))
                {
                    _writer.WriteStartElement("weather");
                    _writer.WriteValue(raceRun.GetRace().AdditionalProperties.Weather);
                    _writer.WriteEndElement();
                }
                if (!string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.Snow))
                {
                    _writer.WriteStartElement("snowtexture");
                    _writer.WriteValue(raceRun.GetRace().AdditionalProperties.Snow);
                    _writer.WriteEndElement();
                }
                if (!string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.TempStart))
                {
                    _writer.WriteStartElement("temperature_startaltitude");
                    _writer.WriteValue(raceRun.GetRace().AdditionalProperties.TempStart);
                    _writer.WriteEndElement();
                }
                if (!string.IsNullOrEmpty(raceRun.GetRace().AdditionalProperties.TempFinish))
                {
                    _writer.WriteStartElement("temperature_finishaltitude");
                    _writer.WriteValue(raceRun.GetRace().AdditionalProperties.TempFinish);
                    _writer.WriteEndElement();
                }

                _writer.WriteEndElement();
            }

            {
                _writer.WriteStartElement("starttime");
                _writer.WriteValue(raceRunProperties.StartTime); // TODO: Ensure "HH:MM" 24h
                _writer.WriteEndElement();
            }

            _writer.WriteEndElement();
        }
예제 #2
0
        public void Equals()
        {
            var cs1 = new AdditionalRaceProperties.Person {
                Name = "NameCS 1", Club = "Club 1"
            };
            var p1 = new AdditionalRaceProperties.Person {
                Name = "Name 1", Club = "Club 1"
            };
            var p2 = new AdditionalRaceProperties.Person {
                Name = "Name 2", Club = "Club 2"
            };
            var p3 = new AdditionalRaceProperties.Person {
                Name = "Name 3", Club = "Club 3"
            };

            var rrp1 = new AdditionalRaceProperties.RaceRunProperties
            {
                CoarseSetter = cs1,
                Forerunner1  = p1,
                Forerunner2  = p2,
                Forerunner3  = p3,
                Gates        = 10,
                Turns        = 9,
                StartTime    = "10:00"
            };
            var rrp2 = rrp1.Copy();

            rrp2.StartTime = "11:00";

            AdditionalRaceProperties prop1 = new AdditionalRaceProperties
            {
                Location    = "Location 1",
                RaceNumber  = "RaceNumber 1",
                Description = "Description 1",

                DateStartList  = new DateTime(2021, 01, 01),
                DateResultList = new DateTime(2021, 02, 01),

                Analyzer  = "Analyzer 1",
                Organizer = "Organizer 1",

                RaceReferee = new AdditionalRaceProperties.Person {
                    Name = "RaceReferee 1", Club = "Club 1"
                },
                RaceManager = new AdditionalRaceProperties.Person {
                    Name = "RaceManager 1", Club = "Club 1"
                },
                TrainerRepresentative = new AdditionalRaceProperties.Person {
                    Name = "TrainerRepresentative 1", Club = "Club 1"
                },

                CoarseName      = "CoarseName 1",
                CoarseLength    = 100,
                CoarseHomologNo = "CoarseHomologNo 1",

                StartHeight  = 1100,
                FinishHeight = 1000,

                RaceRun1 = rrp1,
                RaceRun2 = rrp2,

                Weather    = "Weather 1",
                Snow       = "Snow 1",
                TempStart  = "TempStart 1",
                TempFinish = "TempFinish 1"
            };

            AdditionalRaceProperties prop2 = prop1.Copy();

            Assert.IsTrue(AdditionalRaceProperties.Equals(prop1, prop1));
            Assert.IsTrue(AdditionalRaceProperties.Equals(prop1, prop2));
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, null));
            Assert.IsFalse(AdditionalRaceProperties.Equals(null, prop1));

            prop1.Location       = "Location 2";
            prop1.RaceNumber     = "RaceNumber 2";
            prop1.Description    = "Description 2";
            prop1.DateStartList  = new DateTime(2021, 01, 02);
            prop1.DateResultList = new DateTime(2021, 02, 02);
            prop1.Analyzer       = "Analyzer 2";
            prop1.Organizer      = "Organizer 2";
            prop1.RaceReferee    = new AdditionalRaceProperties.Person {
                Name = "RaceReferee 2", Club = "Club 2"
            };
            prop1.RaceManager = new AdditionalRaceProperties.Person {
                Name = "RaceManager 2", Club = "Club 2"
            };
            prop1.TrainerRepresentative = new AdditionalRaceProperties.Person {
                Name = "TrainerRepresentative 2", Club = "Club 2"
            };
            prop1.CoarseName      = "CoarseName 2";
            prop1.CoarseLength    = 200;
            prop1.CoarseHomologNo = "CoarseHomologNo 2";
            prop1.StartHeight     = 2100;
            prop1.FinishHeight    = 2000;
            prop1.RaceRun1        = rrp1;
            prop1.RaceRun2        = rrp2;
            prop1.Weather         = "Weather 2";
            prop1.Snow            = "Snow 2";
            prop1.TempStart       = "TempStart 2";
            prop1.TempFinish      = "TempFinish 2";

            prop1.Location = "Location 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.RaceNumber = "RaceNumber 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.Description = "Description 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.DateStartList = new DateTime(2021, 01, 01);
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.DateResultList = new DateTime(2021, 02, 01);
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.Analyzer = "Analyzer 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.Organizer = "Organizer 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.RaceReferee = new AdditionalRaceProperties.Person {
                Name = "RaceReferee 1", Club = "Club 1"
            };
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.RaceManager = new AdditionalRaceProperties.Person {
                Name = "RaceManager 1", Club = "Club 1"
            };
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.TrainerRepresentative = new AdditionalRaceProperties.Person {
                Name = "TrainerRepresentative 1", Club = "Club 1"
            };
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.CoarseName = "CoarseName 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.CoarseLength = 100;
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.CoarseHomologNo = "CoarseHomologNo 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.StartHeight = 1100;
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.FinishHeight = 1000;
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.RaceRun1 = rrp1;
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.RaceRun2 = rrp2;
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.Weather = "Weather 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.Snow = "Snow 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.TempStart = "TempStart 1";
            Assert.IsFalse(AdditionalRaceProperties.Equals(prop1, prop2));
            prop1.TempFinish = "TempFinish 1";
            Assert.IsTrue(AdditionalRaceProperties.Equals(prop1, prop2));
        }
예제 #3
0
        internal string getXmlRaceInfo(RaceRun raceRun)
        {
            using (var sw = new Utf8StringWriter())
            {
                using (var xw = XmlWriter.Create(sw, _xmlSettings))
                {
                    xw.WriteStartDocument();
                    xmlWriteStartElementLivetiming(xw);
                    xw.WriteStartElement("raceinfo");

                    xw.WriteElementString("event", raceRun.GetRace().Description);
                    xw.WriteElementString("slope", raceRun.GetRace().AdditionalProperties.CoarseName);
                    xw.WriteElementString("discipline", getDisciplin(raceRun.GetRace()));
                    xw.WriteElementString("gender", getGender(raceRun.GetRace()));
                    xw.WriteElementString("category", _fisCategory);
                    xw.WriteElementString("place", raceRun.GetRace().AdditionalProperties.Location);
                    xw.WriteElementString("tempunit", "c");
                    xw.WriteElementString("longunit", "m");
                    xw.WriteElementString("speedunit", "Kmh");

                    xw.WriteStartElement("run");
                    xw.WriteAttributeString("no", raceRun.Run.ToString());

                    xw.WriteElementString("discipline", getDisciplin(raceRun.GetRace()));

                    if (raceRun.GetRace().AdditionalProperties?.StartHeight > 0)
                    {
                        xw.WriteElementString("start", raceRun.GetRace().AdditionalProperties?.StartHeight.ToString());
                    }
                    if (raceRun.GetRace().AdditionalProperties?.FinishHeight > 0)
                    {
                        xw.WriteElementString("finish", raceRun.GetRace().AdditionalProperties?.FinishHeight.ToString());
                    }
                    if (raceRun.GetRace().AdditionalProperties?.StartHeight > 0 && raceRun.GetRace().AdditionalProperties?.FinishHeight > 0)
                    {
                        xw.WriteElementString("height", (raceRun.GetRace().AdditionalProperties?.StartHeight - raceRun.GetRace().AdditionalProperties?.FinishHeight).ToString());
                    }

                    AdditionalRaceProperties.RaceRunProperties raceRunProperties = null;
                    if (raceRun.Run == 1)
                    {
                        raceRunProperties = raceRun.GetRace().AdditionalProperties?.RaceRun1;
                    }
                    else if (raceRun.Run >= 2)
                    {
                        raceRunProperties = raceRun.GetRace().AdditionalProperties?.RaceRun2;
                    }

                    if (raceRunProperties != null)
                    {
                        if (raceRunProperties.Gates > 0)
                        {
                            xw.WriteElementString("gates", raceRunProperties.Gates.ToString());
                        }

                        if (raceRunProperties.Turns > 0)
                        {
                            xw.WriteElementString("turninggates", raceRunProperties.Turns.ToString());
                        }

                        if (raceRunProperties.StartTime != null && raceRunProperties.StartTime.Contains(":") && raceRunProperties.StartTime.Length == 5)
                        {
                            xw.WriteElementString("hour", raceRunProperties.StartTime.Substring(0, 2));
                            xw.WriteElementString("minute", raceRunProperties.StartTime.Substring(3, 2));
                        }
                    }

                    if (raceRun.GetRace().AdditionalProperties?.DateResultList != null)
                    {
                        xw.WriteElementString("day", ((DateTime)raceRun.GetRace().AdditionalProperties?.DateResultList).Day.ToString());
                        xw.WriteElementString("month", ((DateTime)raceRun.GetRace().AdditionalProperties?.DateResultList).Month.ToString());
                        xw.WriteElementString("year", ((DateTime)raceRun.GetRace().AdditionalProperties?.DateResultList).Year.ToString());
                    }

                    xw.WriteStartElement("racedef");
                    xw.WriteEndElement();

                    xw.WriteEndElement(); // run

                    xw.WriteEndElement(); // raceinfo
                    xw.WriteEndElement(); // Livetiming
                    xw.WriteEndDocument();
                }
                return(sw.ToString());
            }
        }
예제 #4
0
        public void AdditionalRaceProperties_RaceRunProperties_Equals()
        {
            var cs1 = new AdditionalRaceProperties.Person {
                Name = "NameCS 1", Club = "Club 1"
            };
            var p1 = new AdditionalRaceProperties.Person {
                Name = "Name 1", Club = "Club 1"
            };
            var p2 = new AdditionalRaceProperties.Person {
                Name = "Name 2", Club = "Club 2"
            };
            var p3 = new AdditionalRaceProperties.Person {
                Name = "Name 3", Club = "Club 3"
            };

            var rrp1 = new AdditionalRaceProperties.RaceRunProperties
            {
                CoarseSetter = cs1,
                Forerunner1  = p1,
                Forerunner2  = p2,
                Forerunner3  = p3,
                Gates        = 10,
                Turns        = 9,
                StartTime    = "10:00"
            };
            var rrp2 = new AdditionalRaceProperties.RaceRunProperties
            {
                CoarseSetter = cs1,
                Forerunner1  = p1,
                Forerunner2  = p2,
                Forerunner3  = p3,
                Gates        = 10,
                Turns        = 9,
                StartTime    = "10:00"
            };

            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp1));
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp2, rrp1));

            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(null, rrp1));
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, null));
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(null, null));

            rrp1.CoarseSetter = p1;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.CoarseSetter = cs1;
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));

            rrp1.Forerunner1 = cs1;
            rrp1.Forerunner2 = cs1;
            rrp1.Forerunner3 = cs1;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.Forerunner1 = p1;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.Forerunner2 = p2;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.Forerunner3 = p3;
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));

            rrp1.Gates = 9;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.Turns = 8;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.Gates = 10;
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.Turns = 9;
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));

            rrp1.StartTime = "11:00";
            Assert.IsFalse(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
            rrp1.StartTime = "10:00";
            Assert.IsTrue(AdditionalRaceProperties.RaceRunProperties.Equals(rrp1, rrp2));
        }