public void StatisticManagerConstructorTest()
 {
     var location = LocationHelper.GenerateLocation(LocationHelper.SensorType.All,0);
     IRepositoryFactory factory = NHibernateHelper.CreateRepositoryFactory();
     StatisticManager statisticManager = new StatisticManager(factory, location);
     Assert.AreEqual(location,statisticManager.Current.Location);
 }
        public void UpdateStatisticTest()
        {
            Location location = LocationHelper.GenerateLocation(LocationHelper.SensorType.All,0);
            location.Name = "ServiceManagerTest";
            IRepositoryFactory factory = NHibernateHelper.CreateRepositoryFactory();
            IRepository<Guid, Location> repository = factory.CreateRepository<Guid, Location>();

            repository.Add(location);

            StatisticManager statisticManager = new StatisticManager(factory, location);
            DateTime expected = DateTime.Now;
            statisticManager.UpdateStatistic(expected);
            Location actualLocation;
            actualLocation = repository.FindBy(x => x.Name == location.Name);
            IStatistic actual =
                actualLocation.Statistics.SingleOrDefault(stat => stat.End == expected);
            Assert.IsNotNull(actual);
        }
        public void RunServiceManager()
        {
            logger.Debug("ServiceManager Started");
            while (!_shouldstop)
            {
                lock (this)
                {
                    if (RecognizeLocation())
                    {
                        logger.Info("RecognizeLocation gave me a new location");
                        if (_taskManager != null)
                            _taskManager.RequestStop();
                        _statisticManager = new StatisticManager(_repositoryFactory, _current);
                        _taskManager = new TaskManager(_current.Tasks);
                        _taskManager.StartTasksExecution();
                    }
                    if (_statisticManager != null) _statisticManager.UpdateStatistic();

                }
                Thread.Sleep(10000);
            }

            if (_taskManager!=null && _statisticManager!=null)
            {
                lock (this)
                {
                    _statisticManager.UpdateStatistic();
                    _taskManager.RequestStop();
                }
            }
        }
        private bool RecognizeLocation()
        {
            IRepository<Guid, Location> repository = _repositoryFactory.CreateRepository<Guid,Location>();

            var unknown = new Location();
            unknown = GetSensorsInfo(unknown);

            IList<Location> locations = repository.All().ToList();

            var result=_locationManager.RecognizeLocation(unknown, locations);

            if (ReferenceEquals(result,null))
            {
                if (_taskManager!=null) _taskManager.RequestStop();
                _statisticManager = null;
                _current = null;

                //Debug Information check affinity
                if (_locationManager.CurrentAffinity > 0.0)
                    logger.Info("Affinity too low: ", _locationManager.CurrentAffinity, " Current possible location ",
                                _locationManager.Current.Name);
                return false;
            }
            if (_locationManager.ToUpdate)
            {
                result.UpdateLocationSensors(unknown);
                repository.Update(result);
                logger.Debug("New Dataset saved: ", result.ToString());
            }
            if (!result.EqualsBusiness(_current))
            {
                logger.Info(" Location Name: ",
                _locationManager.Current.Name, "Location Affinity : ", _locationManager.CurrentAffinity);
                _current = result;
                return true;
            }
            return false;
        }