From f069c858c9bc83b0914a6b4e9e04dcf201744f65 Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Fri, 17 Jul 2015 00:23:06 +0200 Subject: [PATCH] Add SelectFirstDay and SelectLastDay elements. --- .../Elements/ItemsTest.cs | 2 +- .../Controller/Elements/SelectFirstDayTest.cs | 45 +++++++++++++++++ .../Controller/Elements/SelectLastDayTest.cs | 49 +++++++++++++++++++ Tests/Tests.csproj | 4 +- .../Controller/Elements/SelectFirstDay.cs | 41 ++++++++++++++++ .../Controller/Elements/SelectLastDay.cs | 42 ++++++++++++++++ zaaReloaded2/Formatter/Formatter.cs | 31 ++++++++++-- .../Formatter/TimePointFormatterDictionary.cs | 2 +- zaaReloaded2/zaaReloaded2.csproj | 2 + 9 files changed, 211 insertions(+), 7 deletions(-) rename Tests/{Formatter => Controller}/Elements/ItemsTest.cs (99%) create mode 100755 Tests/Controller/Elements/SelectFirstDayTest.cs create mode 100755 Tests/Controller/Elements/SelectLastDayTest.cs create mode 100755 zaaReloaded2/Controller/Elements/SelectFirstDay.cs create mode 100755 zaaReloaded2/Controller/Elements/SelectLastDay.cs diff --git a/Tests/Formatter/Elements/ItemsTest.cs b/Tests/Controller/Elements/ItemsTest.cs similarity index 99% rename from Tests/Formatter/Elements/ItemsTest.cs rename to Tests/Controller/Elements/ItemsTest.cs index 4a6cce7..5375933 100755 --- a/Tests/Formatter/Elements/ItemsTest.cs +++ b/Tests/Controller/Elements/ItemsTest.cs @@ -25,7 +25,7 @@ using zaaReloaded2.LabModel; using zaaReloaded2.Formatter; using zaa = zaaReloaded2.Controller.Elements; -namespace Tests.Formatter.Elements +namespace Tests.Controller.Elements { [TestFixture] class ItemsTest diff --git a/Tests/Controller/Elements/SelectFirstDayTest.cs b/Tests/Controller/Elements/SelectFirstDayTest.cs new file mode 100755 index 0000000..6b06a47 --- /dev/null +++ b/Tests/Controller/Elements/SelectFirstDayTest.cs @@ -0,0 +1,45 @@ +/* SelectFirstDayTest.cs + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using f = zaaReloaded2.Formatter; +using zaaReloaded2.Importer.ZaaImporter; +using zaaReloaded2.Controller.Elements; + +namespace Tests.Controller.Elements +{ + [TestFixture] + class SelectFirstDayTest + { + [Test] + public void SelectFirstDay() + { + SelectFirstDay element = new SelectFirstDay(); + ZaaImporter importer = TestHelpers.ZaaImporterFromResource(); + f.Formatter formatter = new f.Formatter(); + formatter.Laboratory = importer.Laboratory; + element.Run(formatter); + Assert.AreEqual(5, formatter.WorkingTimePoints.Count); + DateTime firstDay = new DateTime(2015, 07, 04); + Assert.AreEqual(firstDay.Date, formatter.WorkingTimePoints.First().Key.Date); + } + } +} diff --git a/Tests/Controller/Elements/SelectLastDayTest.cs b/Tests/Controller/Elements/SelectLastDayTest.cs new file mode 100755 index 0000000..107e863 --- /dev/null +++ b/Tests/Controller/Elements/SelectLastDayTest.cs @@ -0,0 +1,49 @@ +/* SelectFirstDayTest - Copy.cs + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using NUnit.Framework; +using f = zaaReloaded2.Formatter; +using zaaReloaded2.Importer.ZaaImporter; +using zaaReloaded2.Controller.Elements; + +namespace Tests.Controller.Elements +{ + [TestFixture] + class SelectLastDayTest + { + [Test] + public void SelectLastDay() + { + SelectLastDay element = new SelectLastDay(); + ZaaImporter importer = TestHelpers.ZaaImporterFromResource(); + f.Formatter formatter = new f.Formatter(); + formatter.Laboratory = importer.Laboratory; + element.Run(formatter); + // There are two time points of 6-July-2015 in the demo output file, + // but since they have the exact same time stamps, they are merged + // into one! + Assert.AreEqual(1, formatter.WorkingTimePoints.Count); + DateTime firstDay = new DateTime(2015, 07, 06); + Assert.AreEqual(firstDay.Date, formatter.WorkingTimePoints.First().Key.Date); + } + } +} diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 482002d..908cf84 100755 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -66,9 +66,11 @@ + + - + diff --git a/zaaReloaded2/Controller/Elements/SelectFirstDay.cs b/zaaReloaded2/Controller/Elements/SelectFirstDay.cs new file mode 100755 index 0000000..a12dd69 --- /dev/null +++ b/zaaReloaded2/Controller/Elements/SelectFirstDay.cs @@ -0,0 +1,41 @@ +/* SelectFirstDay.cs + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace zaaReloaded2.Controller.Elements +{ + /// + /// Selects the time points of the first day in a given Formatter + /// object. + /// + class SelectFirstDay : ElementBase + { + public override string Label + { + get { return "Ersten Tag auswählen"; } + } + + public override void Run(Formatter.Formatter formatter) + { + formatter.SelectFirstDay(); + } + } +} diff --git a/zaaReloaded2/Controller/Elements/SelectLastDay.cs b/zaaReloaded2/Controller/Elements/SelectLastDay.cs new file mode 100755 index 0000000..dd17918 --- /dev/null +++ b/zaaReloaded2/Controller/Elements/SelectLastDay.cs @@ -0,0 +1,42 @@ +/* SelectFirstDay - Copy.cs + * part of zaaReloaded2 + * + * Copyright 2015 Daniel Kraus + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace zaaReloaded2.Controller.Elements +{ + /// + /// Selects the time points of the last day in a given Formatter + /// object. + /// + class SelectLastDay : ElementBase + { + public override string Label + { + get { return "Letzten Tag auswählen"; } + } + + public override void Run(Formatter.Formatter formatter) + { + formatter.SelectLastDay(); + } + } +} diff --git a/zaaReloaded2/Formatter/Formatter.cs b/zaaReloaded2/Formatter/Formatter.cs index cf15cc7..c82210d 100755 --- a/zaaReloaded2/Formatter/Formatter.cs +++ b/zaaReloaded2/Formatter/Formatter.cs @@ -67,11 +67,11 @@ namespace zaaReloaded2.Formatter /// /// Gets the current working set of TimePointFormatters. /// - public ITimePointFormatterDictionary WorkingTimePoints { get; private set; } + public Dictionary WorkingTimePoints { get; private set; } #endregion - #region Constructor + #region Constructors public Formatter() { @@ -95,18 +95,41 @@ namespace zaaReloaded2.Formatter /// current position of the cursor). public void Run() { - WorkingTimePoints = _timePointFormatters; foreach (ElementBase element in Settings.Elements) { element.Run(this); } } + /// + /// Selects all time points for the first day in the + /// laboratory. + /// + public void SelectFirstDay() + { + DateTime first = _timePointFormatters.First().Key; + WorkingTimePoints = _timePointFormatters + .Where(kv => kv.Key.Date == first.Date) + .ToDictionary(kv => kv.Key, kv => kv.Value); + } + + /// + /// Selects all time points for the first day in the + /// laboratory. + /// + public void SelectLastDay() + { + DateTime last = _timePointFormatters.Last().Key; + WorkingTimePoints = _timePointFormatters + .Where(kv => kv.Key.Date == last.Date) + .ToDictionary(kv => kv.Key, kv => kv.Value); + } + #endregion #region Fields - ITimePointFormatterDictionary _timePointFormatters; + TimePointFormatterDictionary _timePointFormatters; Laboratory _laboratory; #endregion diff --git a/zaaReloaded2/Formatter/TimePointFormatterDictionary.cs b/zaaReloaded2/Formatter/TimePointFormatterDictionary.cs index 8916da1..d561197 100755 --- a/zaaReloaded2/Formatter/TimePointFormatterDictionary.cs +++ b/zaaReloaded2/Formatter/TimePointFormatterDictionary.cs @@ -23,7 +23,7 @@ using System.Text; namespace zaaReloaded2.Formatter { public class TimePointFormatterDictionary - : Dictionary, + : SortedDictionary, ITimePointFormatterDictionary { } diff --git a/zaaReloaded2/zaaReloaded2.csproj b/zaaReloaded2/zaaReloaded2.csproj index 5e29f83..bf5359c 100755 --- a/zaaReloaded2/zaaReloaded2.csproj +++ b/zaaReloaded2/zaaReloaded2.csproj @@ -163,6 +163,8 @@ can be found. --> + +