summaryrefslogtreecommitdiff
path: root/MorgSimulator/Reader
diff options
context:
space:
mode:
Diffstat (limited to 'MorgSimulator/Reader')
-rw-r--r--MorgSimulator/Reader/CSVReader.cs25
-rw-r--r--MorgSimulator/Reader/FileReader.cs23
-rw-r--r--MorgSimulator/Reader/MorgReader.cs32
-rw-r--r--MorgSimulator/Reader/Reader.cs11
-rw-r--r--MorgSimulator/Reader/ReaderDecorator.cs21
5 files changed, 112 insertions, 0 deletions
diff --git a/MorgSimulator/Reader/CSVReader.cs b/MorgSimulator/Reader/CSVReader.cs
new file mode 100644
index 0000000..b678eed
--- /dev/null
+++ b/MorgSimulator/Reader/CSVReader.cs
@@ -0,0 +1,25 @@
+#nullable enable
+namespace MorgSimulator.Reader
+{
+ public class CSVReader(Reader reader) : ReaderDecorator(reader)
+ {
+ public override string? ReadLine()
+ {
+ var line = base.ReadLine();
+
+ if (line == null) return null;
+
+ return line.Trim();
+ }
+
+ public string[]? ReadCSVLine()
+ {
+ var line = ReadLine();
+
+ if (line == null) return null;
+
+ return line.Split(',');
+ }
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/FileReader.cs b/MorgSimulator/Reader/FileReader.cs
new file mode 100644
index 0000000..8c7e3eb
--- /dev/null
+++ b/MorgSimulator/Reader/FileReader.cs
@@ -0,0 +1,23 @@
+#nullable enable
+using System.IO;
+
+namespace MorgSimulator.Reader
+{
+ public class FileReader(string filePath) : Reader
+ {
+ private readonly StreamReader _streamReader = new(filePath);
+
+ public override string? ReadLine()
+ {
+ return _streamReader.ReadLine();
+ }
+
+ public override bool EndOfStream => _streamReader.EndOfStream;
+
+ public override void Close()
+ {
+ _streamReader.Close();
+ }
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/MorgReader.cs b/MorgSimulator/Reader/MorgReader.cs
new file mode 100644
index 0000000..2bf9a30
--- /dev/null
+++ b/MorgSimulator/Reader/MorgReader.cs
@@ -0,0 +1,32 @@
+#nullable enable
+using MorgSimulator.Factory;
+
+namespace MorgSimulator.Reader
+{
+ public class MorgReader(Reader reader, IMorgFactory factory) : ReaderDecorator(reader)
+ {
+ private readonly IMorgFactory _factory = factory;
+
+ public Morg? ReadMorg(int id)
+ {
+ if (_reader is not CSVReader csvReader) return null;
+
+ var fields = csvReader.ReadCSVLine();
+
+ if (fields == null || fields.Length < 5) return null;
+
+ var type = fields[0].Trim();
+ var xString = fields[1].Trim();
+ var yString = fields[2].Trim();
+ var movement = fields[3].Trim();
+ var feeding = fields[4].Trim();
+
+ if (!int.TryParse(xString, out int x) ||
+ !int.TryParse(yString, out int y))
+ return null;
+
+ return _factory.CreateMorg(id, type, x, y, movement, feeding);
+ }
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/Reader.cs b/MorgSimulator/Reader/Reader.cs
new file mode 100644
index 0000000..13563b0
--- /dev/null
+++ b/MorgSimulator/Reader/Reader.cs
@@ -0,0 +1,11 @@
+#nullable enable
+namespace MorgSimulator.Reader
+{
+ public abstract class Reader
+ {
+ public abstract string? ReadLine();
+ public abstract bool EndOfStream { get; }
+ public abstract void Close();
+ }
+}
+#nullable disable
diff --git a/MorgSimulator/Reader/ReaderDecorator.cs b/MorgSimulator/Reader/ReaderDecorator.cs
new file mode 100644
index 0000000..38dc1e6
--- /dev/null
+++ b/MorgSimulator/Reader/ReaderDecorator.cs
@@ -0,0 +1,21 @@
+#nullable enable
+namespace MorgSimulator.Reader
+{
+ public abstract class ReaderDecorator(Reader reader) : Reader
+ {
+ protected Reader _reader = reader;
+
+ public override string? ReadLine()
+ {
+ return _reader.ReadLine();
+ }
+
+ public override bool EndOfStream => _reader.EndOfStream;
+
+ public override void Close()
+ {
+ _reader.Close();
+ }
+ }
+}
+#nullable disable