From 5b2edb3234c31e5420ba8de3b9782222710ba6a5 Mon Sep 17 00:00:00 2001
From: ousseyn01 <ousseyn.ndiaye9@gmail.com>
Date: Thu, 5 Dec 2024 21:06:02 +0100
Subject: [PATCH] TerrainHandler.java is CREATED and DONE

---
 .../java/model/elements/TerrainHandler.java   | 48 +++++++++++++++++++
 1 file changed, 48 insertions(+)
 create mode 100644 src/main/java/model/elements/TerrainHandler.java

diff --git a/src/main/java/model/elements/TerrainHandler.java b/src/main/java/model/elements/TerrainHandler.java
new file mode 100644
index 0000000..29aac7a
--- /dev/null
+++ b/src/main/java/model/elements/TerrainHandler.java
@@ -0,0 +1,48 @@
+package model.elements;
+
+import model.ModelElement;
+import model.TerrainElement;
+import util.Position;
+
+import java.util.*;
+
+public class TerrainHandler implements ElementHandler {
+    private final List<TerrainElement> terrainElements;
+    private final Class<? extends TerrainElement> terrainType;
+    private final ModelElement modelElement;
+
+    public TerrainHandler(List<TerrainElement> terrainElements,
+                          Class<? extends TerrainElement> terrainType,
+                          ModelElement modelElement) {
+        this.terrainElements = terrainElements;
+        this.terrainType = terrainType;
+        this.modelElement = modelElement;
+    }
+
+    @Override
+    public void addElement(Position position) {
+        try {
+            TerrainElement element = terrainType.getConstructor(Position.class).newInstance(position);
+            terrainElements.add(element);
+        } catch (Exception e) {
+            throw new RuntimeException("Failed to create terrain element", e);
+        }
+    }
+
+    @Override
+    public void removeElement(Position position) {
+        terrainElements.removeIf(element -> element.getPosition().equals(position) && terrainType.isInstance(element));
+    }
+
+    @Override
+    public boolean hasElement(Position position) {
+        return terrainElements.stream()
+                .anyMatch(element -> element.getPosition().equals(position) && terrainType.isInstance(element));
+    }
+
+    @Override
+    public ModelElement getModelElement() {
+        return modelElement;
+    }
+}
+
-- 
GitLab