From a92a539ee93da609e58501a1e0f21d8a90d40ede Mon Sep 17 00:00:00 2001
From: Chadi <130995657+PayneKev@users.noreply.github.com>
Date: Tue, 24 Sep 2024 19:30:14 +0200
Subject: [PATCH] filled the methods in each class

---
 src/main/java/shape/AbstractShape.java   | 24 +++++++++++++-----------
 src/main/java/shape/BorderDecorator.java | 11 +++++++++--
 src/main/java/shape/CenterDecorator.java | 15 ++++++++++++++-
 src/main/java/shape/Decorator.java       |  5 +++--
 src/main/java/shape/Polygon.java         | 11 ++++++++---
 src/main/java/shape/Rectangle.java       | 12 +++++++++---
 src/main/java/shape/ShapeContainer.java  |  4 +++-
 7 files changed, 59 insertions(+), 23 deletions(-)

diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
index 3de5886..4947ec0 100644
--- a/src/main/java/shape/AbstractShape.java
+++ b/src/main/java/shape/AbstractShape.java
@@ -5,23 +5,19 @@ import javafx.scene.canvas.GraphicsContext;
 
 import java.util.List;
 
-public class AbstractShape implements Shape {
+public abstract class AbstractShape implements Shape {
     private List<Point2D> points;
 
     public AbstractShape(List<Point2D> points) {
         this.points = points;
     }
-    public List<Point2D> addPoints(Point2D points){
-        this.points.add(points);
-        return this.points;
+    public void addPoints(Point2D... points){
+        for (Point2D point: points)
+            this.points.add(point);
     }
     @Override
     public int pointsCount() {
-        int count = 0;
-        for (Point2D point : points) {
-            count++;
-        }
-        return count;
+        return points.size();
     }
 
     @Override
@@ -31,8 +27,14 @@ public class AbstractShape implements Shape {
 
     @Override
     public void draw(GraphicsContext context) {
-        for (Point2D point : points) {
-
+        if (pointsCount()>0){
+            context.beginPath();
+            context.moveTo(point(0).getX(), point(0).getY());
+            for (int i = 1; i<pointsCount(); i++){
+                context.lineTo(point(i).getX(),point(i).getY());
+            }
+            context.closePath();
+            context.stroke();
         }
 
     }
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
index 05a6d64..ff3c0d3 100644
--- a/src/main/java/shape/BorderDecorator.java
+++ b/src/main/java/shape/BorderDecorator.java
@@ -1,6 +1,8 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
 
 public class BorderDecorator extends Decorator {
 
@@ -10,7 +12,12 @@ public class BorderDecorator extends Decorator {
         super(decoratedShape);
         this.radius = radius;
     }
-        protected void drawDecoration(GraphicsContext context) {
-
+    protected void drawDecoration(GraphicsContext context) {
+        context.setStroke(Color.BLACK);
+        context.setLineWidth(2);
+        for (int i=0; i<pointsCount(); i++){
+            Point2D point = point(i);
+            context.strokeOval(point.getX() - radius, point.getY()- radius,radius*2,radius*2);
+        }
     }
 }
diff --git a/src/main/java/shape/CenterDecorator.java b/src/main/java/shape/CenterDecorator.java
index 0eece70..eb792b5 100644
--- a/src/main/java/shape/CenterDecorator.java
+++ b/src/main/java/shape/CenterDecorator.java
@@ -1,6 +1,8 @@
 package shape;
 
+import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
 
 public class CenterDecorator extends Decorator{
     private double radius;
@@ -9,6 +11,17 @@ public class CenterDecorator extends Decorator{
         this.radius = radius;
     }
         protected void drawDecoration(GraphicsContext context) {
-
+        double centerX = 0;
+        double centerY = 0;
+        for (int i =0; i<pointsCount(); i++){
+            Point2D point = point(i);
+            centerX += point.getX();
+            centerY += point.getY();
+        }
+        centerX /= pointsCount();
+        centerY /= pointsCount();
+        context.setStroke(Color.RED);
+        context.setLineWidth(2);
+        context.strokeOval(centerX-radius, centerY-radius, radius*2,radius*2);
     }
 }
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
index 2f08545..69ee423 100644
--- a/src/main/java/shape/Decorator.java
+++ b/src/main/java/shape/Decorator.java
@@ -15,12 +15,13 @@ public abstract class Decorator implements Shape {
 
     @Override
     public Point2D point(int index) {
-        return null;
+        return decoratedshape.point(index);
     }
 
     @Override
     public void draw(GraphicsContext context) {
-
+        decoratedshape.draw(context);
+        drawDecoration(context);
     }
     protected void drawDecoration(GraphicsContext context) {
 
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
index d5501cb..a53b2f4 100644
--- a/src/main/java/shape/Polygon.java
+++ b/src/main/java/shape/Polygon.java
@@ -4,27 +4,32 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
-public class Polygon implements Shape {
+import java.util.List;
+
+public class Polygon extends AbstractShape {
 
     private Color color;
 
     public Polygon(Color color, Point2D... points) {
+        super(List.of(points));
         this.color = color;
     }
 
     @Override
     public int pointsCount() {
-        return 0;
+        return super.pointsCount();
     }
 
     @Override
     public Point2D point(int index) {
-        return point(index);
+        return super.point(index);
     }
 
     @Override
     public void draw(GraphicsContext context) {
         context.setFill(color);
+        super.draw(context);
+        context.fill();
 
     }
 }
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index ff2fcc4..e0ee83f 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -4,24 +4,30 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
-public class Rectangle implements Shape{
+import java.util.List;
+
+public class Rectangle extends AbstractShape{
     private Color color;
     Rectangle(Color color, Point2D point0, Point2D point1){
+        super(List.of(point0, new Point2D(point1.getX(),point0.getY()),
+                point1,new Point2D(point0.getX(),point1.getY())));
         this.color = color;
     }
 
     @Override
     public int pointsCount() {
-        return 2;
+        return super.pointsCount();
     }
 
     @Override
     public Point2D point(int index) {
-        return point(index);
+        return super.point(index);
     }
 
     @Override
     public void draw(GraphicsContext context) {
         context.setFill(color);
+        super.draw(context);
+        context.fill();
     }
 }
diff --git a/src/main/java/shape/ShapeContainer.java b/src/main/java/shape/ShapeContainer.java
index 91c7d29..aae70ed 100644
--- a/src/main/java/shape/ShapeContainer.java
+++ b/src/main/java/shape/ShapeContainer.java
@@ -9,7 +9,9 @@ public class ShapeContainer{
 
     private List<Shape> shapes = new ArrayList<>();
 
-    public void addShape(Shape shape){}
+    public void addShape(Shape shape){
+        shapes.add(shape);
+    }
 
     public void  draw(GraphicsContext context){
         for(Shape shape : shapes)
-- 
GitLab