예제 #1
0
        public override void SetDatabaseObject(IActivateItems activator, PermissionWindow databaseObject)
        {
            base.SetDatabaseObject(activator, databaseObject);
            _permissionWindow = databaseObject;

            var periods      = _permissionWindow.PermissionWindowPeriods;
            var periodsByDay = new Dictionary <int, List <PermissionWindowPeriod> >();

            foreach (var period in periods)
            {
                if (!periodsByDay.ContainsKey(period.DayOfWeek))
                {
                    periodsByDay.Add(period.DayOfWeek, new List <PermissionWindowPeriod>());
                }

                periodsByDay[period.DayOfWeek].Add(period);
            }

            var textBoxes = new[] { tbSunday, tbMonday, tbTuesday, tbWednesday, tbThursday, tbFriday, tbSaturday };

            for (var i = 0; i < 7; ++i)
            {
                PopulatePeriodTextBoxForDay(textBoxes[i], i, periodsByDay);
            }

            CommonFunctionality.AddHelp(tbMonday, "IPermissionWindow.PermissionWindowPeriods");
        }
예제 #2
0
        public void TestSerialisation()
        {
            var period1 = new PermissionWindowPeriod((int)DayOfWeek.Monday, new TimeSpan(0, 0, 0), new TimeSpan(6, 0, 0));
            var period2 = new PermissionWindowPeriod((int)DayOfWeek.Monday, new TimeSpan(17, 0, 0), new TimeSpan(23, 59, 59));

            var permissionWindow = new PermissionWindow(CatalogueRepository);

            permissionWindow.SetPermissionWindowPeriods(new List <PermissionWindowPeriod>
            {
                period1,
                period2
            });

            var permissionPeriodConfig = permissionWindow.PermissionPeriodConfig;

            var newPermissionWindow = new PermissionWindow(CatalogueRepository);

            newPermissionWindow.PermissionPeriodConfig = permissionPeriodConfig;

            var periods = newPermissionWindow.PermissionWindowPeriods;

            Assert.AreEqual(2, periods.Count);

            var newPeriod1 = periods[0];

            Assert.AreEqual((int)DayOfWeek.Monday, newPeriod1.DayOfWeek);

            Assert.AreEqual(6, newPeriod1.End.Hours);

            var newPeriod2 = periods[1];

            Assert.AreEqual(17, newPeriod2.Start.Hours);
        }
예제 #3
0
        protected override void SetBindings(BinderWithErrorProviderFactory rules, PermissionWindow databaseObject)
        {
            base.SetBindings(rules, databaseObject);

            Bind(tbName, "Text", "Name", w => w.Name);
            Bind(tbDescription, "Text", "Description", w => w.Description);
            Bind(tbID, "Text", "ID", w => w.ID);
        }
예제 #4
0
        public ExecuteCommandSetPermissionWindow(IActivateItems activator, CacheProgress cacheProgress) : base(activator)
        {
            _cacheProgress = cacheProgress;
            _window        = null;

            if (!activator.CoreChildProvider.AllPermissionWindows.Any())
            {
                SetImpossible("There are no PermissionWindows created yet");
            }
        }
예제 #5
0
 public override int GetHashCode()
 {
     unchecked
     {
         int hashCode = CacheProgress.GetHashCode();
         hashCode = (hashCode * 397) ^ PermissionWindow.GetHashCode();
         hashCode = (hashCode * 397) ^ DirectionIsCacheToPermissionWindow.GetHashCode();
         return(hashCode);
     }
 }
예제 #6
0
        public IAtomicCommandWithTarget SetTarget(DatabaseEntity target)
        {
            var window = target as PermissionWindow;

            if (window != null)
            {
                _window = window;
            }

            return(this);
        }
예제 #7
0
        public override void Execute()
        {
            base.Execute();

            if (_window == null)
            {
                _window = SelectOne <PermissionWindow>(Activator.RepositoryLocator.CatalogueRepository);
            }

            if (_window == null)
            {
                return;
            }

            _cacheProgress.PermissionWindow_ID = _window.ID;
            _cacheProgress.SaveToDatabase();

            Publish(_cacheProgress);
        }
        public override void Execute()
        {
            base.Execute();

            if (TypeText("Permission Window Name", "Enter name for the PermissionWindow e.g. 'Nightly Loads'", 1000, null, out string name))
            {
                var newWindow = new PermissionWindow(BasicActivator.RepositoryLocator.CatalogueRepository);
                newWindow.Name = name;
                newWindow.SaveToDatabase();

                if (_cacheProgressToSetOnIfAny != null)
                {
                    new ExecuteCommandSetPermissionWindow(BasicActivator, _cacheProgressToSetOnIfAny).SetTarget(newWindow).Execute();
                }

                Publish(newWindow);
                Activate(newWindow);
            }
        }
예제 #9
0
        public void TestCurrentlyOutsidePermissionPeriod()
        {
            var dtNow = DateTime.UtcNow;

            if ((dtNow.Hour == 23 && dtNow.Minute >= 50) || (dtNow.Hour == 0 && dtNow.Minute <= 3))
            {
                Assert.Inconclusive("This test cannot run at midnight since it is afraid of the dark");
            }

            var oneMinute = new TimeSpan(0, 1, 0);
            var utcTime   = new TimeSpan(dtNow.Hour, dtNow.Minute, dtNow.Second);
            var period1   = new PermissionWindowPeriod((int)DateTime.Now.DayOfWeek, utcTime.Add(oneMinute), utcTime.Add(oneMinute));

            var permissionWindow = new PermissionWindow(CatalogueRepository);

            permissionWindow.SetPermissionWindowPeriods(new List <PermissionWindowPeriod> {
                period1
            });
            Assert.IsFalse(permissionWindow.WithinPermissionWindow());
        }
        public override void Execute()
        {
            base.Execute();

            TypeTextOrCancelDialog dialog = new TypeTextOrCancelDialog("Permission Window Name", "Enter name for the PermissionWindow e.g. 'Nightly Loads'", 1000);

            if (dialog.ShowDialog() == DialogResult.OK)
            {
                string windowText = dialog.ResultText;
                var    newWindow  = new PermissionWindow(Activator.RepositoryLocator.CatalogueRepository);
                newWindow.Name = windowText;
                newWindow.SaveToDatabase();

                if (_cacheProgressToSetOnIfAny != null)
                {
                    new ExecuteCommandSetPermissionWindow(Activator, _cacheProgressToSetOnIfAny).SetTarget(newWindow).Execute();
                }

                Publish(newWindow);
                Activate(newWindow);
            }
        }
예제 #11
0
 protected bool Equals(PermissionWindowUsedByCacheProgressNode other)
 {
     return(CacheProgress.Equals(other.CacheProgress) && PermissionWindow.Equals(other.PermissionWindow) && DirectionIsCacheToPermissionWindow.Equals(other.DirectionIsCacheToPermissionWindow));
 }
예제 #12
0
 public PermissionWindowUsedByCacheProgressNode(CacheProgress cacheProgress, PermissionWindow permissionWindow, bool directionIsCacheToPermissionWindow)
 {
     CacheProgress    = cacheProgress;
     PermissionWindow = permissionWindow;
     DirectionIsCacheToPermissionWindow = directionIsCacheToPermissionWindow;
 }
예제 #13
0
        public void CacheHostOutwithPermissionWindow()
        {
            var rootDir = new DirectoryInfo(TestContext.CurrentContext.TestDirectory);
            var testDir = rootDir.CreateSubdirectory("C");

            if (testDir.Exists)
            {
                Directory.Delete(testDir.FullName, true);
            }

            var loadDirectory = LoadDirectory.CreateDirectoryStructure(testDir, "Test");


            var cp           = WhenIHaveA <CacheProgress>();
            var loadMetadata = cp.LoadProgress.LoadMetadata;

            loadMetadata.LocationOfFlatFiles = loadDirectory.RootPath.FullName;

            // This feels a bit nasty, but quick and much better than having the test wait for an arbitrary time period.
            var listener = new ExpectedNotificationListener("Download not permitted at this time, sleeping for 60 seconds");

            cp.CacheFillProgress   = DateTime.Now.AddDays(-1);
            cp.PermissionWindow_ID = 1;


            var permissionWindow = new PermissionWindow(Repository);

            permissionWindow.RequiresSynchronousAccess = true;
            permissionWindow.ID   = 1;
            permissionWindow.Name = "Test Permission Window";


            //Create a time period that we are outwith (1 hour ago to 30 minutes ago).
            TimeSpan start = DateTime.Now.TimeOfDay.Subtract(new TimeSpan(0, 1, 0, 0));
            TimeSpan stop  = DateTime.Now.TimeOfDay.Subtract(new TimeSpan(0, 0, 30, 0));

            permissionWindow.SetPermissionWindowPeriods(new List <PermissionWindowPeriod>(new []
            {
                new PermissionWindowPeriod(
                    (int)DateTime.Now.DayOfWeek,
                    start,
                    stop)
            }));
            permissionWindow.SaveToDatabase();

            cp.PermissionWindow_ID = permissionWindow.ID;
            cp.SaveToDatabase();

            var dataFlowPipelineEngine = Mock.Of <IDataFlowPipelineEngine>();

            // set up a factory stub to return our engine mock
            var cacheHost = new CachingHost(Repository)
            {
                CacheProgressList = new List <ICacheProgress> {
                    cp
                }
            };

            var stopTokenSource   = new CancellationTokenSource();
            var abortTokenSource  = new CancellationTokenSource();
            var cancellationToken = new GracefulCancellationToken(stopTokenSource.Token, abortTokenSource.Token);

            var task = Task.Run(() => cacheHost.Start(listener, cancellationToken), cancellationToken.CreateLinkedSource().Token);

            // Don't want to cancel before the DownloadUntilFinished loop starts and we receive the first "Download not permitted at this time, sleeping for 60 seconds" message
            listener.ReceivedMessage += abortTokenSource.Cancel;

            try
            {
                task.Wait();
            }
            catch (AggregateException e)
            {
                Assert.AreEqual(1, e.InnerExceptions.Count);
                Assert.IsInstanceOf(typeof(TaskCanceledException), e.InnerExceptions[0], e.InnerExceptions[0].Message);
            }
            finally
            {
                testDir.Delete(true);
            }
        }