From 4a9193b86a00a08d59ca0db8659e9972e00b8d50 Mon Sep 17 00:00:00 2001
From: 1380 <@l21221596>
Date: Thu, 28 Sep 2023 13:35:21 +0200
Subject: [PATCH] =?UTF-8?q?D=C3=A9corateur=20de=20formes?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .idea/gradle.xml                         |  2 +-
 .idea/misc.xml                           |  3 ++-
 src/main/java/shape/AbstractShape.java   | 25 ++++++++++++++++++++
 src/main/java/shape/BorderDecorator.java | 23 +++++++++++++++++++
 src/main/java/shape/Decorator.java       | 29 ++++++++++++++++++++++++
 src/main/java/shape/Polygon.java         | 28 +++++++++++++++++++++++
 src/main/java/shape/Rectangle.java       | 24 +++++++++-----------
 src/main/java/shape/ShapeContainer.java  |  4 +++-
 8 files changed, 122 insertions(+), 16 deletions(-)
 create mode 100644 src/main/java/shape/AbstractShape.java
 create mode 100644 src/main/java/shape/BorderDecorator.java
 create mode 100644 src/main/java/shape/Decorator.java
 create mode 100644 src/main/java/shape/Polygon.java

diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index 6622921..41f2f90 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -8,7 +8,7 @@
         <option name="testRunner" value="GRADLE" />
         <option name="distributionType" value="DEFAULT_WRAPPED" />
         <option name="externalProjectPath" value="$PROJECT_DIR$" />
-        <option name="gradleJvm" value="11" />
+        <option name="gradleJvm" value="jbr-11" />
         <option name="modules">
           <set>
             <option value="$PROJECT_DIR$" />
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6624aa5..ca6d665 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,9 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
   <component name="ExternalStorageConfigurationManager" enabled="true" />
   <component name="FrameworkDetectionExcludesConfiguration">
     <file type="web" url="file://$PROJECT_DIR$" />
   </component>
-  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="corretto-16" project-jdk-type="JavaSDK">
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" project-jdk-name="jbr-11" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/out" />
   </component>
 </project>
\ No newline at end of file
diff --git a/src/main/java/shape/AbstractShape.java b/src/main/java/shape/AbstractShape.java
new file mode 100644
index 0000000..8cd7b1d
--- /dev/null
+++ b/src/main/java/shape/AbstractShape.java
@@ -0,0 +1,25 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+import java.util.List;
+
+public abstract class AbstractShape implements Shape {
+    private List<Point2D> points;
+    @Override
+    public int pointsCount() {
+        return points.size();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return points.get(index);
+    }
+
+    @Override
+    abstract public void draw(GraphicsContext context) ;
+    public void addPoints(List<Point2D> points) {
+         points.addAll(points);
+    }
+}
diff --git a/src/main/java/shape/BorderDecorator.java b/src/main/java/shape/BorderDecorator.java
new file mode 100644
index 0000000..27a54e2
--- /dev/null
+++ b/src/main/java/shape/BorderDecorator.java
@@ -0,0 +1,23 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BorderDecorator extends Decorator{
+
+    private double radius;
+
+    public BorderDecorator(Shape decoratedShape, double radius) {
+        super(decoratedShape);
+        this.radius = radius;
+    }
+
+
+    @Override
+    protected void drawDecoration(GraphicsContext graphicsContext) {
+        List<Point2D> list = new ArrayList<>();
+    }
+}
diff --git a/src/main/java/shape/Decorator.java b/src/main/java/shape/Decorator.java
new file mode 100644
index 0000000..2602485
--- /dev/null
+++ b/src/main/java/shape/Decorator.java
@@ -0,0 +1,29 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+
+abstract public class  Decorator implements Shape {
+
+    protected Shape decoratedShape;
+
+    public Decorator(Shape decoratedShape){
+        this.decoratedShape = decoratedShape;
+    }
+    @Override
+    public int pointsCount() {
+            return decoratedShape.pointsCount();
+    }
+
+    @Override
+    public Point2D point(int index) {
+        return decoratedShape.point(index);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        decoratedShape.draw(context);
+    }
+
+    protected  abstract void drawDecoration(GraphicsContext graphicsContext);
+}
diff --git a/src/main/java/shape/Polygon.java b/src/main/java/shape/Polygon.java
new file mode 100644
index 0000000..e142846
--- /dev/null
+++ b/src/main/java/shape/Polygon.java
@@ -0,0 +1,28 @@
+package shape;
+
+import javafx.geometry.Point2D;
+import javafx.scene.canvas.GraphicsContext;
+import javafx.scene.paint.Color;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Polygon extends AbstractShape {
+    Color color;
+
+    public Polygon(Color color , List<Point2D> points){
+        this.color = color;
+        addPoints(points);
+    }
+
+    @Override
+    public void draw(GraphicsContext context) {
+        double[] coordinateX = new double[pointsCount()];
+        double[] coordinateY = new double[pointsCount()];
+        for(int index = 0 ; index<pointsCount() ; index++){
+            coordinateX[index]=point(index).getX();
+            coordinateY[index]=point(index).getY();
+        }
+        context.strokePolygon(coordinateX,coordinateY,pointsCount());
+    }
+}
diff --git a/src/main/java/shape/Rectangle.java b/src/main/java/shape/Rectangle.java
index b0e9062..4192ff4 100644
--- a/src/main/java/shape/Rectangle.java
+++ b/src/main/java/shape/Rectangle.java
@@ -4,24 +4,22 @@ import javafx.geometry.Point2D;
 import javafx.scene.canvas.GraphicsContext;
 import javafx.scene.paint.Color;
 
-public class Rectangle implements Shape{
+import java.util.ArrayList;
+import java.util.List;
+
+public class Rectangle extends AbstractShape implements Shape{
     Color color;
     Rectangle(Color color, Point2D point0, Point2D point1){
         this.color = color;
-    }
-
-    @Override
-    public int pointsCount() {
-        return 0;
-    }
-
-    @Override
-    public Point2D point(int index) {
-        return null;
+        List<Point2D> list = new ArrayList<>();
+        list.add(point0);
+        list.add(point1);
+        addPoints(list);
     }
 
     @Override
     public void draw(GraphicsContext context) {
-
+          context.strokeRect(point(0).getX(),point(0).getY(),point(1).getX()-point(0).getX(),
+                  point(1).getY()-point(0).getY());
     }
-}
+}
\ No newline at end of file
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