diff --git a/Tests/Importer/ZaaImporter/ZaaImporterTest.cs b/Tests/Importer/ZaaImporter/ZaaImporterTest.cs
new file mode 100755
index 0000000..4b93d28
--- /dev/null
+++ b/Tests/Importer/ZaaImporter/ZaaImporterTest.cs
@@ -0,0 +1,49 @@
+/* ZaaImporterTest.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 System.IO;
+using zaa = zaaReloaded2.Importer.ZaaImporter;
+using NUnit.Framework;
+
+namespace Tests.Importer.ZaaImporter
+{
+ [TestFixture]
+ class ZaaImporterTest
+ {
+ ///
+ /// Parses the demo-output.txt file that is built into the assembly.
+ /// Note that this demo text contains seven time points, only six of
+ /// which are distinct. Thus, the two time points with identical time
+ /// stamps should be merged in the .
+ ///
+ [Test]
+ public void ParseTimePoints()
+ {
+ Stream s = this.GetType().Assembly.GetManifestResourceStream("Tests.demo-output.txt");
+ StreamReader r = new StreamReader(s);
+ zaa.ZaaImporter importer = new zaa.ZaaImporter();
+ importer.Import(r.ReadToEnd());
+
+ // Only 6 distinct time points (see method documentation above).
+ Assert.AreEqual(6, importer.Laboratory.TimePoints.Count);
+ }
+ }
+}
diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj
index cf3472c..1a7ff88 100755
--- a/Tests/Tests.csproj
+++ b/Tests/Tests.csproj
@@ -66,6 +66,7 @@
+
diff --git a/Tests/demo-output.txt b/Tests/demo-output.txt
index 61287bb..ddb3216 100755
--- a/Tests/demo-output.txt
+++ b/Tests/demo-output.txt
@@ -1,17 +1,27 @@
-[22.10.2013 12:30:00]
-Aerobe Kultur: Enterokokken ; Wachstum: 10 ;
-Auftragskommentare: Untersuchungsmaterial:: Mittelstrahlurin (nativ) ; Befundstatus Auftrag: Endbefund ;
-Urinproteine quantitativ: Gesamt-Eiweiss (PU): 135 [<= 120] mg/l; Gesamt-Eiweiss/Creatinin (PU): 281 [<= 70] mg/g Crea; Albumin (PU): 57 [<= 30] mg/l; Albumin/Creatinin (PU): 118.8 [<= 30] mg/g Crea;
-Urin - Klin. Chemie: Creatinin (PU): 48.0 [40 - 278] mg/dl;
-Urinproteine quantitativ: Gesamt-Eiweiss (SU): 184 [<= 120] mg/l; Gesamt-Eiweiss (SU)/die: 340 [<= 150] mg/d; Albumin (SU): 81 mg/l; Albumin (SU)/die: 149.9 [<= 30] mg/d; a1-Microglobulin (SU): 35.3 mg/l; a1-Microglobulin (SU)/die: 65.3 [<= 20] mg/d; Immunglobulin G (SU): 8 mg/l; Immunglobulin G (SU)/die: 14.8 [<= 15] mg/d;
-Urin - Klin. Chemie: Sammelzeit (U): 24 h; Sammelmenge (U): 1850 ml;
-Klinische Chemie: Natrium: 139 [135 - 145] mmol/l; Kalium: 5.2 [3.5 - 5] mmol/l; Calcium: 2.4 [2.0 - 2.7] mmol/l; anorg. Phosphat: 0.58 [0.87 - 1.45] mmol/l; Calcium-Phosphat-Produkt: 1.39 [<= 4.4] mmol²/l²; Glucose: 112 [74 - 106] mg/dl; glomerul. Filtrationsr. CKD-EP: 42 ml/min /1,73qm; glomerul. Filtrationsr. (MDRD): 42 ml/min /1,73qm; Creatinin: 1.84 [0 - 1.17] mg/dl; Harnstoff: 54.3 [10 - 50] mg/dl; Harnsäure: 4.6 [3.4 - 7] mg/dl; Gesamt-Bilirubin: 0.7 [0.1 - 1.2] mg/dl; GOT (ASAT): 303.0 [<= 50] U/l; GPT (ALAT): 508.0 [<= 50] U/l; GGT: 489.0 [<= 60] U/l; Alk. Phosphatase: 56 [40 - 130] U/l; Lactat Dehydrogenase: 320 [<= 250] U/l; CK gesamt: 52 [<= 190] U/l; Amylase: 62 [<= 110] U/l; Cholesterin: 120 [130 - 220] mg/dl; Triglyceride: 94 [74 - 172] mg/dl; LDL - Cholesterin: 56 [0 - 150] mg/dl; HDL - Cholesterin: 45 [>= 35] mg/dl; Eisen: 215 [59 - 158] µg/dl; Gesamt-Eiweiss: 5.7 [6.6 - 8.7] g/dl; Albumin: 4.0 [3.5 - 5.5] g/dl;
-Gerinnung: Niedermol. Heparin (Anti-Xa): 0.99 U/ml;
-Hämatologie: Leukozyten: 2.9 [5 - 10] n*1000/µl; Erythrozyten: 3.23 [4 - 6] n*10E6/µl; Hämoglobin: 10.1 [14 - 18] g/dl; Hämatokrit: 30.8 [42 - 50] %; MCV: 95.4 [82 - 94] fl; MCH (HbE): 31.3 [27 - 33] pg; MCHC: 32.8 [32 - 36] g/dl; Thrombozyten: 112 [150 - 450] n*1000/µl; Mittleres Plättchenvolumen: 11.1 [9.7 - 11.9] fl; Neutrophile: 74.4 [41 - 70] %; Lymphozyten: 13.0 [25 - 40] %; Monozyten: 11.3 [2 - 8] %; Eosinophile: 1.0 [0.8 - 6.2] %; Basophile: 0.3 [0 - 1] %; Neutrophile: 2.18 [1.8 - 7.2] n*1000/µl; Lymphozyten: 0.38 [1 - 4.05] n*1000/µl; Monozyten: 0.33 [0.08 - 0.8] n*1000/µl; Eosinophile: 0.0 [0.04 - 0.36] n*1000/µl; Basophile: 0.0 [0 - 0.08] n*1000/µl; Unreife Granulozyten: 0.3 %;
-Urinproteine quantitativ: Gesamt-Eiweiss (SU): 186 [<= 120] mg/l; Gesamt-Eiweiss (SU)/die: 344 [<= 150] mg/d; Albumin (SU): 79 mg/l; Albumin (SU)/die: 146.2 [<= 30] mg/d;
-Urin - Klin. Chemie: Sammelzeit (U): 24 h; Sammelmenge (U): 1850 ml; Creatinin-Clearance (SU)/min: 46 [98 - 156] ml/min; Harnstoff-Clearance (SU)/min: 21 [60 - 80] ml/min; glomeruläre Filtrationsrate: 34 ml/min; Calcium (SU): 0.79 mmol/l; Calcium (SU)/die: 1.46 [2.5 - 8] mmol/d; Creatinin (SU): 65.5 mg/dl; Harnstoff (SU): 904 [900 - 3000] mg/dl; Harnstoff (SU)/die: 16.7 [<= 35] g/d; Kalium (SU): 24.4 [20 - 80] mmol/l; Kalium (SU)/die: 45.14 [25 - 125] mmol/d; Natrium (SU): 133.2 [54 - 150] mmol/l; Natrium (SU)/die: 246.4 [40 - 220] mmol/d;
-Serumproteine und Tumormarker: Ferritin: 3754 [30 - 400] µg/l; Transferrin: 217 [200 - 380] mg/dl; Transferrinsättigung: 70.2 [16 - 45] %; Haptoglobin: < 10 [34 - 200] mg/dl; C-reaktives Protein: < 0.01 [0 - 0.5] mg/dl; Cystatin C (N Latex): 2.37 [0.57 - 0.96] mg/l;
-Akutbestimmungen / TDM / Drogen: Tacrolimus (FK506): 10.7 µg/l;
-Klinische Chemie: Natrium: 140 [135 - 145] mmol/l; Kalium: 5.2 [3.5 - 5] mmol/l; Calcium: 2.3 [2.0 - 2.7] mmol/l; anorg. Phosphat: 0.59 [0.87 - 1.45] mmol/l; Chlorid: 109 [94 - 110] mmol/l; Glucose: 114 [74 - 106] mg/dl; glomerul. Filtrationsr. CKD-EP: 42 ml/min /1,73qm; glomerul. Filtrationsr. (MDRD): 42 ml/min /1,73qm; Creatinin: 1.85 [0 - 1.17] mg/dl; Harnstoff: 56.1 [10 - 50] mg/dl; Cholinesterase: 3387 [5320 - 12920] U/l; Lactat Dehydrogenase: 318 [<= 250] U/l; Gesamt-Eiweiss: 5.7 [6.6 - 8.7] g/dl; Albumin: 3.9 [3.5 - 5.5] g/dl;
-Serumproteine und Tumormarker: C-reaktives Protein: < 0.01 [0 - 0.5] mg/dl;
-Akutbestimmungen / TDM / Drogen: PO2 (art.): 64.0 [70 - 100] mmHg; PCO2 (art.): 36.3 [36 - 44] mmHg; pH: 7.393 [7.36 - 7.44] ; Basenabweichung: -2.4 [-2 - 2] mmol/l; aktuelles Bicarbonat: 21.6 [22 - 26] mmol/l; Standard Bicarbonat: 22.4 [22 - 26] mmol/l; Sauerstoffsättigung (art.): 95.8 [95 - 99] %;
+# This file contains 7 time points.
+# This leading text should be ignored.
+# DO NOT CHANGE THE FOLLOWING TEXT, LEST THE TESTS WILL FAIL!
+(06.07.2015 15:16:00)
+Urin - Klin. Chemie: Sammelzeit (U): 24 h; Sammelmenge (U): 1300 ml; Natrium (SU): 107.8 [54 - 150] mmol/l; Natrium (SU)/die: 140.1 [40 - 220] mmol/d;
+(06.07.2015 13:39:00)
+Urin - Klin. Chemie: Creatinin (PU): 153.7 [40 - 278] mg/dl;
+(06.07.2015 12:31:00)
+Klinische Chemie: Natrium: 144 [135 - 145] mmol/l; Kalium: 4.3 [3.5 - 5] mmol/l; Calcium: 2.3 [2.0 - 2.7] mmol/l; Korrigiertes Calcium: 2.3 [2.0 - 2.7] mmol/l; Magnesium: 0.87 [0.7 - 1.05] mmol/l; anorg. Phosphat: 0.98 [0.87 - 1.45] mmol/l; Calcium-Phosphat-Produkt: 2.25 [<= 4.4] mmol²/l²; Glucose: 93 [74 - 106] mg/dl; glomerul. Filtrationsr. CKD-EP: 56 ml/min /1,73qm; glomerul. Filtrationsr. (MDRD): 54 ml/min /1,73qm; Creatinin: 1.52 [0 - 1.17] mg/dl; Harnstoff: 41.1 [10 - 50] mg/dl; Harnsäure: 7.7 [3.4 - 7] mg/dl; Gesamt-Bilirubin: 0.2 [0.1 - 1.2] mg/dl; GOT (ASAT): 22.2 [<= 50] U/l; GPT (ALAT): 28.0 [<= 50] U/l; GGT: 49.0 [<= 60] U/l; Alk. Phosphatase: 70 [40 - 130] U/l; Lactat Dehydrogenase: 205 [<= 250] U/l; Cholesterin: 219 [130 - 220] mg/dl; Triglyceride: 195 [74 - 172] mg/dl; LDL - Cholesterin: 141 [0 - 150] mg/dl; HDL - Cholesterin: 39 [>= 35] mg/dl; Albumin: 4.1 [3.5 - 5.5] g/dl;
+Hämatologie: Leukozyten: 7.2 [5 - 10] n*1000/µl; Erythrozyten: 4.79 [4 - 6] n*10E6/µl; Hämoglobin: 14.0 [14 - 18] g/dl; Hämatokrit: 41.0 [42 - 50] %; MCV: 85.6 [82 - 94] fl; MCH (HbE): 29.2 [27 - 33] pg; MCHC: 34.1 [32 - 36] g/dl; Thrombozyten: 269 [150 - 450] n*1000/µl; Mittleres Plättchenvolumen: 10.3 [9.7 - 11.9] fl;
+Urin - Klin. Chemie: Sammelzeit (U): 24 h; Sammelmenge (U): 1300 ml; Creatinin-Clearance (SU)/min: 90 [98 - 156] ml/min; Harnstoff-Clearance (SU)/min: 40 [60 - 80] ml/min; glomeruläre Filtrationsrate: 65 ml/min; Calcium (SU): 0.64 mmol/l; Calcium (SU)/die: 0.83 [2.5 - 8] mmol/d; Creatinin (SU): 151.5 mg/dl; Harnstoff (SU): 1831 [900 - 3000] mg/dl; Harnstoff (SU)/die: 23.8 [<= 35] g/d; Kalium (SU): 39.2 [20 - 80] mmol/l; Kalium (SU)/die: 50.96 [25 - 125] mmol/d; Natrium (SU): 108.1 [54 - 150] mmol/l; Natrium (SU)/die: 140.5 [40 - 220] mmol/d;
+Serumproteine und Tumormarker: C-reaktives Protein: 0.71 [0 - 0.5] mg/dl;
+(06.07.2015 13:29:00)
+Hepatitis Serologie: HBs-Antikörper: neg. ;
+(06.07.2015 12:20:00)
+Schilddrüse: TSH: 1.30 [0.3 - 4.0] mIU/l;
+Ca-Phosphat-Stoffwechsel: PTH intakt: 56.1 [12 - 65] ng/l;
+(06.07.2015 10:28:00)
+Urinproteine quantitativ: Gesamt-Eiweiss (SU): < 40 [<= 120] mg/l; Albumin (SU): < 12 mg/l; a1-Microglobulin (SU): < 6 mg/l;
+Urin - Klin. Chemie: Sammelzeit (U): 24 h; Sammelmenge (U): 2900 ml; Natrium (SU): < 20 [54 - 150] mmol/l;
+(06.07.2015 10:28:00)
+Klinische Chemie: Natrium: 138 [135 - 145] mmol/l; Kalium: 4.6 [3.5 - 5] mmol/l; Calcium: 2.5 [2.0 - 2.7] mmol/l; Korrigiertes Calcium: 2.3 [2.0 - 2.7] mmol/l; Magnesium: 0.78 [0.7 - 1.05] mmol/l; anorg. Phosphat: 0.82 [0.87 - 1.45] mmol/l; Calcium-Phosphat-Produkt: 2.05 [<= 4.4] mmol²/l²; Glucose: 96 [82 - 115] mg/dl; glomerul. Filtrationsr. CKD-EP: 92 ml/min /1,73qm; glomerul. Filtrationsr. (MDRD): 97 ml/min /1,73qm; Creatinin: 0.84 [0 - 1.17] mg/dl; Harnstoff: 17.5 [10 - 50] mg/dl; Harnsäure: 7.0 [3.4 - 7] mg/dl; Gesamt-Bilirubin: 0.9 [0.1 - 1.2] mg/dl; GOT (ASAT): 34.1 [<= 50] U/l; GPT (ALAT): 39.0 [<= 50] U/l; GGT: 24.7 [<= 60] U/l; Alk. Phosphatase: 58 [40 - 130] U/l; Lactat Dehydrogenase: 180 [<= 250] U/l; Cholesterin: 156 [130 - 220] mg/dl; Triglyceride: 113 [74 - 172] mg/dl; LDL - Cholesterin: 84 [0 - 150] mg/dl; HDL - Cholesterin: 49 [>= 35] mg/dl; Albumin: 4.7 [3.5 - 5.5] g/dl;
+Hämatologie: Leukozyten: 8.3 [5 - 10] n*1000/µl; Erythrozyten: 5.51 [4 - 6] n*10E6/µl; Hämoglobin: 16.0 [14 - 18] g/dl; Hämatokrit: 45.6 [42 - 50] %; MCV: 82.8 [82 - 94] fl; MCH (HbE): 29.0 [27 - 33] pg; MCHC: 35.1 [32 - 36] g/dl; Thrombozyten: 154 [150 - 450] n*1000/µl; Mittleres Plättchenvolumen: 9.5 [9.7 - 11.9] fl; Neutrophile abs.: 3.32 n*1000/µl; Lymphozyten abs.: 4.23 n*1000/µl; Segmentkernige: 40 [50 - 70] %; Eosinophile: 2 [0 - 6] %; Basophile: 1 [0 - 1.0] %; Lymphozyten: 51 [25 - 40] %; Monozyten: 6 [2 - 8] %; Neutrophile: 50.9 [41 - 70] %; Lymphozyten: 32.1 [25 - 40] %; Monozyten: 15.6 [2 - 8] %; Eosinophile: 1.2 [0.8 - 6.2] %; Basophile: 0.2 [0 - 1] %; Neutrophile: 4.23 [1.8 - 7.2] n*1000/µl; Lymphozyten: 2.67 [1 - 4.05] n*1000/µl; Monozyten: 1.30 [0.08 - 0.8] n*1000/µl; Eosinophile: 0.1 [0.04 - 0.36] n*1000/µl; Basophile: 0.0 [0 - 0.08] n*1000/µl; Unreife Granulozyten: 0.2 %;
+Urinproteine quantitativ: Gesamt-Eiweiss (SU): < 40 [<= 120] mg/l; Albumin (SU): < 12 mg/l;
+Urin - Klin. Chemie: Sammelzeit (U): 24 h; Sammelmenge (U): 2900 ml; Creatinin-Clearance (SU)/min: 84 [98 - 156] ml/min; Harnstoff-Clearance (SU)/min: 52 [60 - 80] ml/min; glomeruläre Filtrationsrate: 68 ml/min; Calcium (SU): 0.71 mmol/l; Calcium (SU)/die: 2.06 [2.5 - 8] mmol/d; Creatinin (SU): 35.2 mg/dl; Harnstoff (SU): 454 [900 - 3000] mg/dl; Harnstoff (SU)/die: 13.2 [<= 35] g/d; Kalium (SU): 14.5 [20 - 80] mmol/l; Kalium (SU)/die: 42.05 [25 - 125] mmol/d; Natrium (SU): < 20 [54 - 150] mmol/l;
+Serumproteine und Tumormarker: C-reaktives Protein: 0.13 [0 - 0.5] mg/dl;
+Akutbestimmungen / TDM / Drogen: Tacrolimus (FK506): 6.2 µg/l;
diff --git a/zaaReloaded2/Importer/ZaaImporter/LaurisParagraph.cs b/zaaReloaded2/Importer/ZaaImporter/LaurisParagraph.cs
index d03baac..2f239e2 100755
--- a/zaaReloaded2/Importer/ZaaImporter/LaurisParagraph.cs
+++ b/zaaReloaded2/Importer/ZaaImporter/LaurisParagraph.cs
@@ -108,7 +108,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
foreach (Capture itemCapture in m.Groups["items"].Captures)
{
LaurisItem i = new LaurisItem(itemCapture.Value, _parameterDictionary, _unitDictionary);
- Items.Add(i.QualifiedName, i);
+ Items[i.QualifiedName] = i;
}
IsLaurisParagraph = Items.Count > 0;
}
diff --git a/zaaReloaded2/Importer/ZaaImporter/LaurisTimePoint.cs b/zaaReloaded2/Importer/ZaaImporter/LaurisTimePoint.cs
index 64a2941..e256983 100755
--- a/zaaReloaded2/Importer/ZaaImporter/LaurisTimePoint.cs
+++ b/zaaReloaded2/Importer/ZaaImporter/LaurisTimePoint.cs
@@ -32,12 +32,52 @@ namespace zaaReloaded2.Importer.ZaaImporter
///
class LaurisTimePoint : TimePoint
{
+ #region Static methods
+
+ ///
+ /// Examines a string and returns true if it resembles
+ /// a time stamp line in the Lauris output.
+ ///
+ /// Line to examine.
+ /// True if line resembles a time stamp line
+ /// in the Lauris output.
+ static public bool IsTimeStampLine(string line)
+ {
+ return _timeStampRegex.IsMatch(line);
+ }
+
+ ///
+ /// Gets a Regex object that matches a Lauris time stamp
+ /// line.
+ ///
+ static public Regex TimeStampRegex
+ {
+ get
+ {
+ return _timeStampRegex;
+ }
+ }
+
+ #endregion
+
#region Properties
///
/// Gets an array of paragraphs in this LaurisText.
///
- public string[] Paragraphs { get; private set; }
+ public string[] Paragraphs
+ {
+ [DebuggerStepThrough]
+ get
+ {
+ return _paragraphs;
+ }
+ set
+ {
+ _paragraphs = value;
+ ParseParagraphs();
+ }
+ }
///
/// Is true if the LaurisText has time stamp in the first
@@ -62,7 +102,6 @@ namespace zaaReloaded2.Importer.ZaaImporter
Paragraphs = value.Split(
new string[] { Environment.NewLine },
StringSplitOptions.None);
- ParseParagraphs();
}
}
}
@@ -73,23 +112,35 @@ namespace zaaReloaded2.Importer.ZaaImporter
public LaurisTimePoint() { }
- public LaurisTimePoint(string laurisTest)
- : this()
- {
- _parameterDictionary = null;
- _unitDictionary = null;
- LaurisText = laurisTest;
- }
-
public LaurisTimePoint(
- string laurisTest,
+ string laurisText,
ParameterDictionary parameterDictionary,
UnitDictionary unitDictionary)
: this()
{
_parameterDictionary = parameterDictionary;
_unitDictionary = unitDictionary;
- LaurisText = laurisTest;
+ LaurisText = laurisText;
+ }
+
+ public LaurisTimePoint(string laurisText)
+ : this(laurisText, null, null)
+ { }
+
+ public LaurisTimePoint(
+ string[] paragraphs,
+ ParameterDictionary parameterDictionary,
+ UnitDictionary unitDictionary)
+ : this()
+ {
+ _parameterDictionary = parameterDictionary;
+ _unitDictionary = unitDictionary;
+ Paragraphs = paragraphs;
+ }
+
+ public LaurisTimePoint(string[] paragraphs)
+ : this(paragraphs, null, null)
+ {
}
#endregion
@@ -139,7 +190,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
if (Paragraphs.Length == 0)
throw new InvalidOperationException("The time point has no paragraphs.");
- Match m = _dateStampRegex.Match(Paragraphs[0]);
+ Match m = _timeStampRegex.Match(Paragraphs[0]);
bool success = false;
if (m.Success)
{
@@ -158,7 +209,7 @@ namespace zaaReloaded2.Importer.ZaaImporter
void AddItems(IItemDictionary items)
{
-
+ Items.Merge(items);
}
#endregion
@@ -169,8 +220,9 @@ namespace zaaReloaded2.Importer.ZaaImporter
/// A regular expression that matches the time stamp in the first
/// paragraph of a LaurisText.
///
- static readonly Regex _dateStampRegex = new Regex(
- @"^\s*\[?\s*(?\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
+ static readonly Regex _timeStampRegex = new Regex(
+ @"^\s*\(?\s*(?\d\d\.\d\d\.\d\d\d\d\s+\d\d:\d\d)");
+ string[] _paragraphs;
ParameterDictionary _parameterDictionary;
UnitDictionary _unitDictionary;
diff --git a/zaaReloaded2/Importer/ZaaImporter/ZaaImporter.cs b/zaaReloaded2/Importer/ZaaImporter/ZaaImporter.cs
index 8e9f9e4..cec5a2f 100755
--- a/zaaReloaded2/Importer/ZaaImporter/ZaaImporter.cs
+++ b/zaaReloaded2/Importer/ZaaImporter/ZaaImporter.cs
@@ -20,6 +20,7 @@ using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
+using Bovender.Extensions;
using zaaReloaded2.LabModel;
namespace zaaReloaded2.Importer.ZaaImporter
@@ -34,21 +35,68 @@ namespace zaaReloaded2.Importer.ZaaImporter
public Laboratory Laboratory
{
+ [DebuggerStepThrough]
get
{
- throw new NotImplementedException();
+ if (_laboratory == null)
+ {
+ _laboratory = new Laboratory();
+ }
+ return _laboratory;
}
+ [DebuggerStepThrough]
set
{
- throw new NotImplementedException();
+ _laboratory = value;
}
}
public void Import(string text)
{
- throw new NotImplementedException();
+ string[] paragraphs = text.Split(
+ new string[] { Environment.NewLine },
+ StringSplitOptions.RemoveEmptyEntries);
+ int i = 0;
+ int start = 0;
+ int numParagraphs = paragraphs.Length;
+
+ while (i < numParagraphs)
+ {
+ // Search for the next occurrence of a time stamp line
+ while (i < numParagraphs
+ && !LaurisTimePoint.IsTimeStampLine(paragraphs[i]))
+ {
+ i++;
+ }
+
+ // TODO: Find an alternative to returning in the middle of the method.
+ if (i >= numParagraphs) return;
+
+ if (LaurisTimePoint.IsTimeStampLine(paragraphs[i]))
+ {
+ // Remember the time stamp line's index
+ start = i;
+
+ // Seek the next time stamp line
+ while (i + 1 < numParagraphs
+ && !LaurisTimePoint.IsTimeStampLine(paragraphs[i + 1]))
+ {
+ i++;
+ }
+ }
+
+ Laboratory.AddTimePoint(
+ new LaurisTimePoint(paragraphs.Slice(start, i - start + 1))
+ );
+ }
}
#endregion
+
+ #region Fields
+
+ Laboratory _laboratory;
+
+ #endregion
}
}
diff --git a/zaaReloaded2/LabModel/Laboratory.cs b/zaaReloaded2/LabModel/Laboratory.cs
index 624a3d3..95825f8 100755
--- a/zaaReloaded2/LabModel/Laboratory.cs
+++ b/zaaReloaded2/LabModel/Laboratory.cs
@@ -32,5 +32,40 @@ namespace zaaReloaded2.LabModel
public SortedDictionary TimePoints { get; set; }
#endregion
+
+ #region Constructor
+
+ public Laboratory()
+ {
+ TimePoints = new SortedDictionary();
+ }
+
+ #endregion
+
+ #region Methods
+
+ ///
+ /// Adds a new time point with laboratory items to the laboratory.
+ /// If a time point with same time stamp exists already, the new
+ /// items will be added to the existing ones.
+ ///
+ /// Time point to add to the laboratory.
+ public void AddTimePoint(TimePoint timePoint)
+ {
+ if (timePoint == null)
+ throw new ArgumentNullException("timePoint");
+
+ TimePoint tp;
+ if (TimePoints.TryGetValue(timePoint.TimeStamp, out tp))
+ {
+ tp.MergeItems(timePoint);
+ }
+ else
+ {
+ TimePoints[timePoint.TimeStamp] = timePoint;
+ }
+ }
+
+ #endregion
}
}
diff --git a/zaaReloaded2/LabModel/TimePoint.cs b/zaaReloaded2/LabModel/TimePoint.cs
index 7336bca..c4866ba 100755
--- a/zaaReloaded2/LabModel/TimePoint.cs
+++ b/zaaReloaded2/LabModel/TimePoint.cs
@@ -48,5 +48,25 @@ namespace zaaReloaded2.LabModel
public IItemDictionary Items { get; set; }
#endregion
+
+ #region Methods
+
+ ///
+ /// Adds the items from another time point to this
+ /// time point. There is no check for plausibility,
+ /// i.e. the other time point may have a different
+ /// time stamp.
+ ///
+ /// Other TimePoint to
+ /// merge into the current one.
+ public void MergeItems(TimePoint otherTimePoint)
+ {
+ if (otherTimePoint == null)
+ throw new ArgumentNullException("otherTimePoint");
+
+ Items.Merge(otherTimePoint.Items);
+ }
+
+ #endregion
}
}
diff --git a/zaaReloaded2/packages.config b/zaaReloaded2/packages.config
index e5d84a1..b4b16d9 100755
--- a/zaaReloaded2/packages.config
+++ b/zaaReloaded2/packages.config
@@ -1,5 +1,24 @@
+
+
-
+
\ No newline at end of file
diff --git a/zaaReloaded2/zaaReloaded2.csproj b/zaaReloaded2/zaaReloaded2.csproj
index 1c09455..0642cb2 100755
--- a/zaaReloaded2/zaaReloaded2.csproj
+++ b/zaaReloaded2/zaaReloaded2.csproj
@@ -111,6 +111,9 @@
-->
+
+ ..\packages\Bovender.0.2.0.0\lib\net40\Bovender.dll
+
@@ -187,6 +190,7 @@
True
Resources.resx
+
SettingsSingleFileGenerator
Settings.Designer.cs