Exemple #1
0
 public void Setup()
 {
     _airspace = new Airspace(new Coordinates()
     {
         X = 10000, Y = 10000
     }, new Coordinates()
     {
         X = 90000, Y = 90000
     }, 500, 10000);
     _velocityCalculatorFake = Substitute.For <IVelocityCalculator>();
     _degreesCalculatorFake  = Substitute.For <IDegreesCalculator>();
     _trackLoggingFake       = Substitute.For <ITrackLogging>();
     _uut   = new AirspaceMovementMonitoring(_airspace, _velocityCalculatorFake, _degreesCalculatorFake, _trackLoggingFake);
     _track = new Track()
     {
         Altitude = 1000,
         Position = new Coordinates()
         {
             X = 50000, Y = 50000
         },
         Tag       = "XYZ123",
         TimeStamp = DateTime.Now,
         Velocity  = 300
     };
 }
Exemple #2
0
 public void Setup()
 {
     _separation          = Substitute.For <ISeparation>();
     _transponderReceiver = Substitute.For <ITransponderReceiver>();
     _airspace            = new Airspace(new Coordinates()
     {
         X = 10000, Y = 10000
     }, new Coordinates()
     {
         X = 90000, Y = 90000
     },
                                         500, 20000);
     _trackLogging               = Substitute.For <ITrackLogging>();
     _degreesCalculator          = new DegreesCalculatorWithoutDecimals();
     _velocityCalculator         = new VelocityCalculator();
     _airspaceMovementMonitoring =
         new AirspaceMovementMonitoring(_airspace, _velocityCalculator, _degreesCalculator, _trackLogging);
     _airspaceMonitoring        = new AirspaceMonitoring(_airspace, _airspaceMovementMonitoring);
     _transponderDataConversion = new TransponderDataConversion(_airspaceMonitoring);
     _driver = new TransponderDataReceiver(_transponderReceiver, _transponderDataConversion, _separation, _airspace);
     _track  = new Track()
     {
         Altitude = 10000,
         Position = new Coordinates()
         {
             X = 50000,
             Y = 60000
         },
         Tag       = "XYZ123",
         TimeStamp = new DateTime(2015, 10, 06, 21, 34, 56, 789)
     };
 }
Exemple #3
0
        public void TrackEnteringAirspaceLogWritesNotification()
        {
            var log = Substitute.For <ILog>();

            var monitor = new Monitor();

            monitor.SetX(0, 5000);
            monitor.SetY(0, 5000);
            monitor.SetZ(500, 20000);

            var displayFormatter = Substitute.For <IDisplayFormatter>();

            var airspace = new Airspace(monitor, displayFormatter, log);

            mapper.Attach(airspace);

            var testData = new List <string>();

            testData.Add("ATR423;10;10;14000;20151006213456789");

            simulator.OnDataReceieved(null, new RawTransponderDataEventArgs(testData));

            log.Received(1).WriteNotification(Arg.Is <Data>(d =>
                                                            d.Altitude == 14000 &&
                                                            d.Tag == "ATR423" && d.Timestamp == "20151006213456789" &&
                                                            d.XCord == 10 && d.YCord == 10), false);

            displayFormatter.Received(1).ShowNotification(Arg.Is <Data>(d =>
                                                                        d.Altitude == 14000 &&
                                                                        d.Tag == "ATR423" && d.Timestamp == "20151006213456789" &&
                                                                        d.XCord == 10 && d.YCord == 10), EventType.ENTERING);
        }
Exemple #4
0
        static void Main(string[] args)
        {
            // TEST AF SYSTEM UDEN SEPARATION EVENT
            FileLogger      filelogger    = new FileLogger();
            ConsoleRenderer consolerender = new ConsoleRenderer();
            Airspace        airspace      = new Airspace(10000, 90000, 10000, 90000, 500, 20000);

            var receiver = TransponderReceiverFactory.CreateTransponderDataReceiver();
            var system   = new ATM.TransponderReceiver(receiver);

            ATMclass atm = new ATMclass(filelogger, consolerender, airspace);

            system.Attach(atm);

            // TEST AF SYSTEM MED SEPARATION EVENTS
            //TrackData trackData1 = new TrackData("TEST1", 12000, 12000, 1000, "14322018", 10, 270);
            //TrackData trackData2 = new TrackData("TEST2", 12000, 12000, 1000, "14322018", 10, 270);

            //atm._currentTracks.Add(trackData1);

            //atm.CheckForSeperationEvents(trackData2);
            //atm.CheckForSeperationEvents(trackData2);

            // TEST AF SYSTEM MED LOGGER

            while (true)
            {
                Thread.Sleep(1000);
            }
        }
        public void SetUp()
        {
            _trackRemover       = new TrackRemover();
            _trackManagement    = new TrackManagement();
            _timeSpanCalculator = new TimeSpanCalculator();
            _distanceCalculator = new DistanceCalculator();
            _velocityCalculator = new VelocityCalculator(_timeSpanCalculator, _distanceCalculator);
            _velocityAnalyzer   = new VelocityAnalyzer(_velocityCalculator);
            _compassCalculator  = new CompassCalculator();
            _courseAnalyzer     = new CourseAnalyzer(_compassCalculator);

            _altitudeDistanceCalculator = new AltitudeDistanceCalculator();
            _collisionAnalyzer          = new CollisionAnalyzer(_distanceCalculator, _altitudeDistanceCalculator);
            _separationStringBuilder    = new SeparationStringBuilder();
            _fakeFileWriter             = Substitute.For <IFileWriter>();

            _airspace                    = new Airspace();
            _airspaceTrackChecker        = new AirspaceTrackChecker(_airspace);
            _fakeTransponderDataReciever = Substitute.For <ITransponderDataReciever>();
            _airspaceController          = new AirTrafficMonitoring.AirspaceController.AirspaceController(_fakeTransponderDataReciever, _airspaceTrackChecker);

            _flightManagement    = new AirTrafficMonitoring.FlightManagement.FlightManagement(_airspaceController, _trackRemover, _trackManagement);
            _flightAnalyzer      = new AirTrafficMonitoring.FlightAnalyzer.FlightAnalyzer(_flightManagement, _courseAnalyzer, _velocityAnalyzer);
            _collisionController = new AirTrafficMonitoring.CollisionController.CollisionController(_flightManagement, _collisionAnalyzer, _separationStringBuilder);
            _logger = new AirTrafficMonitoring.CollisionController.Logger(_collisionController, "", _fakeFileWriter);
        }
Exemple #6
0
        public void Setup()
        {
            _fakeTransponderReceiver = Substitute.For <ITransponderReceiver>();
            _fakeOutput      = Substitute.For <IOutput>();
            _fakeIFileLogger = Substitute.For <IFileLogger>();

            _realAirspace = new Airspace(10000, 10000, 90000, 90000, 500, 20000)
            {
                South         = 10000,
                West          = 10000,
                North         = 90000,
                East          = 90000,
                LowerAltitude = 500,
                UpperAltitude = 20000
            };

            _realDecoder         = new Decoder(_fakeTransponderReceiver);
            _realAmsController   = new AMSController(_realDecoder, _realAirspace);
            _realAvoidanceSystem = new CollisionAvoidanceSystem(_realAmsController, 5000, 300);

            _realLogger        = new Logger(_realAvoidanceSystem);
            _realConsoleOutput = new ConsoleOutput(_realAmsController, _realAvoidanceSystem, _fakeOutput);

            _realAvoidanceSystem.SeparationEvent += (o, args) => { ++_nSeperationEvent; };
        }
Exemple #7
0
 public void SetUp()
 {
     _airspace                    = new Airspace();
     _airspaceTrackChecker        = new AirspaceTrackChecker(_airspace);
     _fakeTransponderDataReciever = Substitute.For <ITransponderDataReciever>();
     _airspaceController          = new AirTrafficMonitoring.AirspaceController.AirspaceController(_fakeTransponderDataReciever, _airspaceTrackChecker);
 }
Exemple #8
0
 public void Setup()
 {
     _airspace = new Airspace(new Coordinates()
     {
         X = 10000, Y = 10000
     }, new Coordinates()
     {
         X = 90000, Y = 90000
     },
                              500, 20000);
     _velocityCalculator         = new VelocityCalculator();
     _degreesCalculator          = new DegreesCalculatorWithoutDecimals();
     _trackLogging               = Substitute.For <ITrackLogging>();
     _airspaceMovementMonitoring =
         new AirspaceMovementMonitoring(_airspace, _velocityCalculator, _degreesCalculator, _trackLogging);
     _driver = new AirspaceMonitoring(_airspace, _airspaceMovementMonitoring);
     _track1 = new Track()
     {
         Altitude = 12000,
         Position = new Coordinates()
         {
             X = 30000,
             Y = 40000
         },
         Tag       = "ABC987",
         TimeStamp = new DateTime(2013, 02, 20, 12, 15, 50, 840),
     };
 }
        public void Setup()
        {
            //Set up S's
            fakeConsoleOutput = Substitute.For <IConsoleOutput>();
            fakeFileOutput    = Substitute.For <IFileOutput>();

            //Set up X's
            airspace   = new Airspace(10000, 90000, 10000, 90000, 500, 20000);
            trackData1 = new TrackData("ABC123", 30000, 30000, 3000, "20181224200050123", 100, 45, fakeConsoleOutput);
            trackData2 = new TrackData("DEF123", 30001, 30001, 3001, "20181224200050123", 100, 45, fakeConsoleOutput);

            trackData3 = new TrackData("ABC123", 30000, 30000, 3000, "20181224200050123", 100, 45, fakeConsoleOutput);
            trackData4 = new TrackData("DEF123", 50000, 50000, 5000, "20181224200050123", 100, 45, fakeConsoleOutput);

            //Fake transponderReceiver
            fakeTransponderReceiver = Substitute.For <ITransponderReceiver>();

            //Create new ATM.TransponderReceiver for simulating inputs from the TransponderReceiver from the dll.
            transponderReceiver = new TransponderReceiver(fakeTransponderReceiver, fakeConsoleOutput);

            //Set up T's
            ATM = new ATMclass(fakeConsoleOutput, fakeFileOutput, airspace, fakeTransponderReceiver);

            //Attach ATM, so that updates to the transponderReceiver updates data in the ATM
            transponderReceiver.Attach(ATM);
        }
Exemple #10
0
        public void GivenANullPosition_WhenCalling_HasPositionWithinBoundaries_ReturnFalse()
        {
            var      uut      = new Airspace(90000, 10000, 20000, 500);
            Position position = null;

            Assert.That(uut.HasPositionWithinBoundaries(position), Is.False);
        }
        public void Outputter_Setup()
        {
            _uutOutputter = new AirTrafficOutputter();
            _airspace     = FakeAirspaceGenerator.GetAirspace(100, 100, 100);

            _logFile = "../../Test.txt";
        }
Exemple #12
0
        static void Main(string[] args)
        {
            var airspace = new Airspace(new Coordinates()
            {
                X = 10000, Y = 10000
            },
                                        new Coordinates()
            {
                X = 90000, Y = 90000
            }, 500, 20000);

            var trackLogging               = new TrackConsoleLogging();
            var velocityCalculator         = new VelocityCalculator();
            var degreesCalculator          = new DegreesCalculatorWithoutDecimals();
            var airspaceMovementMonitoring = new AirspaceMovementMonitoring(airspace, velocityCalculator, degreesCalculator, trackLogging);

            var separationConsoleLogger = new SeparationConsoleLogger();
            var separationXmlLogger     = new SeparationXmlLogging();

            var separation                = new Separation(separationXmlLogger, separationConsoleLogger);
            var airspaceMonitoring        = new AirspaceMonitoring(airspace, airspaceMovementMonitoring);
            var transponderDataConversion = new TransponderDataConversion(airspaceMonitoring);
            var transponderDataReceiver   = new TransponderDataReceiver(
                TransponderReceiverFactory.CreateTransponderDataReceiver(), transponderDataConversion, separation, airspace);

            transponderDataReceiver.StartReceivingData();
            Console.ReadLine();
        }
Exemple #13
0
        public void TrackEnteringAirspaceRealLogWritesNotification()
        {
            var    path = Directory.GetCurrentDirectory() + @"\test.txt";
            string line;

            var log = new Log(path);

            var monitor = new Monitor();

            monitor.SetX(0, 5000);
            monitor.SetY(0, 5000);
            monitor.SetZ(500, 20000);

            var displayFormatter = Substitute.For <IDisplayFormatter>();

            var airspace = new Airspace(monitor, displayFormatter, log);

            mapper.Attach(airspace);

            var testData = new List <string>();

            testData.Add("ATR423;10;10;14000;20151006213456789");

            simulator.OnDataReceieved(null, new RawTransponderDataEventArgs(testData));

            using (var file = new StreamReader(path, true))
            {
                line = file.ReadToEnd();
            }
            File.Create(path).Close(); //delete file after use

            Assert.That(line.Contains("ENTERING"));
        }
Exemple #14
0
        public void TrackInsideAirspaceLogDoesNotWrite()
        {
            var log = Substitute.For <ILog>();

            var monitor = new Monitor();

            monitor.SetX(0, 5000);
            monitor.SetY(0, 5000);
            monitor.SetZ(500, 20000);

            var displayFormatter = Substitute.For <IDisplayFormatter>();

            var airspace = new Airspace(monitor, displayFormatter, log);

            mapper.Attach(airspace);

            var testData = new List <string>();

            testData.Add("ATR423;10;10;14000;20151006213456789");

            simulator.OnDataReceieved(null, new RawTransponderDataEventArgs(testData));

            testData[0] = "ATR423;501;501;14000;20151006213456789";
            simulator.OnDataReceieved(null, new RawTransponderDataEventArgs(testData));

            // Only called once since still inside should not write to log
            log.Received(1).WriteNotification(Arg.Any <Data>(), false);

            displayFormatter.Received(1).ShowNotification(Arg.Any <Data>(), EventType.ENTERING);
        }
Exemple #15
0
        public void Setup()
        {
            //Arrange
            _output = Substitute.For <IOutput>();

            _filePath = @"...\...\...\";
            FileStream   output     = new FileStream(_filePath + "SeperationLogFile.txt", FileMode.Create, FileAccess.Write);
            StreamWriter fileWriter = new StreamWriter(output);

            fileWriter.Write("");
            fileWriter.Close();

            _transponderReceiver = Substitute.For <ITransponderReceiver>();
            _trackTransmitter    = new TrackTransmitter();
            _dateTimeBuilder     = new DateTimeBuilder();

            _trackObjectifier = new TrackObjectifier(_dateTimeBuilder);

            _trackReciever = new TrackReciever(_transponderReceiver,
                                               _trackObjectifier, _trackTransmitter);
            _output                 = Substitute.For <IOutput>();
            _tracksManager          = new TracksManager();
            _courseCalculator       = new CourseCalculator();
            _velocityCalculator     = new VelocityCalculator();
            _seperationEventChecker = new SeperationEventChecker();

            _airspace = new Airspace()
            {
                MaxAltitude = 20000, MinAltitude = 500,
                Northeast   = new Corner()
                {
                    X = 90000, Y = 90000
                },
                Southwest = new Corner()
                {
                    X = 10000, Y = 10000
                }
            };

            _airspaceChecker = new AirspaceChecker(_airspace);
            _tagsManager     = new TagsManager(_airspaceChecker);
            _trackWarehouse  = new TrackWarehouse(_tagsManager, _courseCalculator,
                                                  _velocityCalculator, _tracksManager, _seperationEventChecker);
            _atmController = new AtmController(_trackTransmitter, _output, _trackWarehouse);

            _uut = new SeperationEventLogger(_output, _seperationEventChecker);

            _list = new List <string>
            {
                "ATR423;11000;11000;14000;20151006213456000",
                "ATR424;11000;11000;14000;20151006213456000"
            };

            _trackTransmitter.TrackReady += (o, args) => { _recievedTracks = args.TrackList; };

            //Act
            _transponderReceiver.TransponderDataReady +=
                Raise.EventWith(new RawTransponderDataEventArgs(_list));
        }
Exemple #16
0
 public TransponderDataReceiver(ITransponderReceiver transponderReceiver,
                                ITransponderDataConversion transponderDataConversion, ISeparation separation, Airspace airspace)
 {
     _transponderReceiver       = transponderReceiver;
     _transponderDataConversion = transponderDataConversion;
     _separation = separation;
     _airspace   = airspace;
 }
Exemple #17
0
        [TestCase(15, 15, 15, false)]         // Outside airspace
        public void Points_check_in_AirspaceWithOneShape(int x, int y, int z, bool result)
        {
            Airspace uut = new Airspace();

            uut.AddShape(new Cuboid(0, 0, 0, 10, 10, 10));

            Assert.AreEqual(result, uut.IsWithinArea(x, y, z));
        }
Exemple #18
0
        public void Init()
        {
            _log = Substitute.For <ILog>();
            _displayFormatter = Substitute.For <IDisplayFormatter>();

            _monitor  = Substitute.For <IMonitor>();
            _airspace = new Airspace(_monitor, _displayFormatter, _log);
        }
        public void Setup()
        {
            _fakeTransponderReceiverClient = Substitute.For <ITransponderReceiverClient>();

            _uut       = new Airspace(new TrackCalculator());
            _trackData = new List <Track>();

            _fakeTransponderReceiverClient.DataReadyEvent += _uut.HandleDataReadyEvent;
        }
Exemple #20
0
        public void AirspaceConstructor_UpperBoundInvalidParamters_ThrowsException(int x, int y, int alt)
        {
            //Arrange
            var upperBound = new Point(x, y, alt);

            //Act & Assert
            Assert.Throws <ArgumentException>(() => _uut = new Airspace(null,
                                                                        upperBound));
        }
Exemple #21
0
        public void Setup()
        {
            _separationConsoleLogger = Substitute.For <ISeparationConsoleLogger>();
            _separationXmlLogging    = Substitute.For <ISeparationXmlLogging>();
            _transponderReceiver     = Substitute.For <ITransponderReceiver>();
            _airspace = new Airspace(new Coordinates()
            {
                X = 10000, Y = 10000
            }, new Coordinates()
            {
                X = 90000, Y = 90000
            },
                                     500, 20000);
            _trackLogging               = Substitute.For <ITrackLogging>();
            _degreesCalculator          = new DegreesCalculatorWithoutDecimals();
            _velocityCalculator         = new VelocityCalculator();
            _airspaceMovementMonitoring =
                new AirspaceMovementMonitoring(_airspace, _velocityCalculator, _degreesCalculator, _trackLogging);
            _airspaceMonitoring        = new AirspaceMonitoring(_airspace, _airspaceMovementMonitoring);
            _transponderDataConversion = new TransponderDataConversion(_airspaceMonitoring);
            _separation       = new Separation(_separationXmlLogging, _separationConsoleLogger);
            _driver           = new TransponderDataReceiver(_transponderReceiver, _transponderDataConversion, _separation, _airspace);
            _planesInAirspace = new Dictionary <string, List <Track> >();

            _track1 = new Track()
            {
                Altitude = 10000,
                Position = new Coordinates()
                {
                    X = 12000,
                    Y = 12000
                },
                Tag       = "ABC987",
                TimeStamp = new DateTime(2013, 02, 20, 12, 15, 50, 840),
            };
            _track3 = new Track()
            {
                Altitude = 10000,
                Position = new Coordinates()
                {
                    X = 12000,
                    Y = 12000
                },
                Tag       = "ABC986",
                TimeStamp = new DateTime(2013, 02, 20, 12, 15, 50, 840),
            };


            _tracks1 = new List <Track>();
            _tracks1.Add(_track1);

            _airspace.PlanesInAirspace.Add("ABC987", _tracks1);
            _tracks2 = new List <Track>();
            _tracks2.Add(_track3);

            _airspace.PlanesInAirspace.Add("ABC986", _tracks2);
        }
Exemple #22
0
        public void Setup()
        {
            // Makings Subsitutes should be with interfaces :)
            _fakeTracker = Substitute.For <ITrack>();
            // This should have been a fake, but no interface :(
            _Airspace = new Airspace
            {
                X      = 0,
                Y      = 0,
                Z      = 500,
                width  = 80000,
                depth  = 80000,
                height = 20000
            };
            TracksInAirspaceEvent = delegate { };
            // This should be the only real instance :)
            Uut = new AirspaceMonitor(_Airspace, _fakeTracker);

            _comparisonPlane = new Track()
            {
                TagId    = "HEN777",
                Altitude = 1000,
                X        = 1000,
                Y        = 1000
            };

            var results = new List <List <Track> >();

            // Inserting data in the List<Track>
            // with Injected Tracks - "{ }"
            // instead of making a new List<Track> and adding later :)

            _fakeTracksInAirspace = new List <Track>()
            {
                new Track
                {
                    TagId    = "HEN123",
                    Altitude = 1000,
                    X        = 1000,
                    Y        = 1000
                },                             // Comma separtion is needed ;)
                new Track
                {
                    TagId    = "HEN321",
                    Altitude = 1000,
                    X        = 1000,
                    Y        = 1000
                },
                _comparisonPlane // this is added for comparisions
            };

            // Adding Tracks to the Unit under test
            NewTrackArgs newTrack = new NewTrackArgs();

            newTrack.Tracks = _fakeTracksInAirspace;
            Uut.OnTrackRecieved(this, newTrack);
        }
        public void init()
        {
            _uut = Substitute.For <Airspace>();

            _uut.Position = new Coords(500, 500, 500);

            _uut.Width  = 30000;
            _uut.Length = 20000;
            _uut.Height = 10000;
        }
Exemple #24
0
 public void SetUp()
 {
     fakeTransponderReceiver = Substitute.For <ITransponderReceiver>();
     calculateCourse         = new CalculateCourse();
     calculateVelocity       = new CalculateVelocity();
     renedition  = new Renedition();
     checkPlanes = new CheckPlanes(calculateVelocity, calculateCourse, renedition);
     airspace    = new Airspace(checkPlanes);
     uut         = new HandleRTD(fakeTransponderReceiver, airspace);
 }
        public void Constructor_WhenCalled_SouthWestYIsAlwaysEqualToTheSuppliedCoordinate(int southWestX, int southWestY)
        {
            var coordinate = Substitute.For <ITwoDimensionalCoordinate>();

            coordinate.X.Returns(southWestX);
            coordinate.Y.Returns(southWestY);

            var airspace = new Airspace(coordinate);

            Assert.That(airspace.SouthWestCorner.Y, Is.EqualTo(coordinate.Y));
        }
        public Decoder()
        {
            _airspace         = new Airspace(90000, 10000, 90000, 10000, 20000, 500);
            Writer            = new LogWriter();
            CollisionDetector = new CollisionDetector();
            Tracks            = new List <ITrack>();
            Track             = new Track();

            TransponderReceiver = TransponderReceiverFactory.CreateTransponderDataReceiver();
            TransponderReceiver.TransponderDataReady += DecodeTransData;
        }
        public void Constructor_WhenCalled_UpperAltitudeBoundaryAlwaysEquals20000(int southWestX, int southWestY)
        {
            var coordinate = Substitute.For <ITwoDimensionalCoordinate>();

            coordinate.X.Returns(southWestX);
            coordinate.Y.Returns(southWestY);

            var airspace = new Airspace(coordinate);

            Assert.That(airspace.UpperAltitudeBoundary, Is.EqualTo(UpperAltitude));
        }
        public void Constructor_WhenCalled_NorthEastXIsAlways80000BiggerThanTheSuppliedCoordinate(int southWestX, int southWestY)
        {
            var coordinate = Substitute.For <ITwoDimensionalCoordinate>();

            coordinate.X.Returns(southWestX);
            coordinate.Y.Returns(southWestY);

            var airspace = new Airspace(coordinate);

            Assert.That(airspace.NorthEastCorner.X, Is.EqualTo(coordinate.X + AirspaceSize));
        }
        public void Decoder_AirspaceInitiated()
        {
            Airspace airspace = new Airspace(90000, 10000, 90000, 10000, 20000, 500);

            Assert.That(decoder._airspace.AltitudeLower, Is.EqualTo(airspace.AltitudeLower));
            Assert.That(decoder._airspace.AltitudeUpper, Is.EqualTo(airspace.AltitudeUpper));
            Assert.That(decoder._airspace.XUpper, Is.EqualTo(airspace.XUpper));
            Assert.That(decoder._airspace.XLower, Is.EqualTo(airspace.XLower));
            Assert.That(decoder._airspace.YUpper, Is.EqualTo(airspace.YUpper));
            Assert.That(decoder._airspace.YLower, Is.EqualTo(airspace.YLower));
        }
 public AirTrafficMonitor(IValidateEvent validator, IConditionDetector conditionDetector, IOutputter outputter, IUpdater <List <ITrack> > updater)
 {
     _validator = validator;
     _validator.ValidationCompleteEventHandler += Update;
     _conditionDetector = conditionDetector;
     _conditionDetector.ConditionsHandler += ConditionDetector_ConditionsHandler;
     _outputter = outputter;
     _updater   = updater;
     Airspace   = new Airspace();
     Conditions = new List <ConditionEventArgs>();
 }