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"); }
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); }
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); }
public ExecuteCommandSetPermissionWindow(IActivateItems activator, CacheProgress cacheProgress) : base(activator) { _cacheProgress = cacheProgress; _window = null; if (!activator.CoreChildProvider.AllPermissionWindows.Any()) { SetImpossible("There are no PermissionWindows created yet"); } }
public override int GetHashCode() { unchecked { int hashCode = CacheProgress.GetHashCode(); hashCode = (hashCode * 397) ^ PermissionWindow.GetHashCode(); hashCode = (hashCode * 397) ^ DirectionIsCacheToPermissionWindow.GetHashCode(); return(hashCode); } }
public IAtomicCommandWithTarget SetTarget(DatabaseEntity target) { var window = target as PermissionWindow; if (window != null) { _window = window; } return(this); }
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); } }
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); } }
protected bool Equals(PermissionWindowUsedByCacheProgressNode other) { return(CacheProgress.Equals(other.CacheProgress) && PermissionWindow.Equals(other.PermissionWindow) && DirectionIsCacheToPermissionWindow.Equals(other.DirectionIsCacheToPermissionWindow)); }
public PermissionWindowUsedByCacheProgressNode(CacheProgress cacheProgress, PermissionWindow permissionWindow, bool directionIsCacheToPermissionWindow) { CacheProgress = cacheProgress; PermissionWindow = permissionWindow; DirectionIsCacheToPermissionWindow = directionIsCacheToPermissionWindow; }
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); } }