exo4: Add the code skeleton coming from TP2.
[Project_POO.git] / exo4 / Image.java
diff --git a/exo4/Image.java b/exo4/Image.java
new file mode 100644 (file)
index 0000000..65d0929
--- /dev/null
@@ -0,0 +1,98 @@
+import java.util.Comparator;
+
+public class Image extends Forme implements Compactable,
+                                            Comparable<Image>,
+                                            Comparator<Image> {
+    final int IMAGE_MAX_SIZE = 100;
+    Forme[] formeCollection;
+    int formeNumber;
+
+    Image() {
+        super();
+        formeCollection = new Forme[IMAGE_MAX_SIZE];
+        formeNumber = 0;
+    }
+
+    Image(Point p) {
+        super(p);
+        formeCollection = new Forme[IMAGE_MAX_SIZE];
+        formeNumber = 0;
+    }
+
+    public int getSize() {
+        return formeNumber;
+    }
+
+    private boolean isEmpty() {
+        return (formeNumber == 0);
+    }
+
+    private boolean isFull() {
+        return (formeNumber >= formeCollection.length);
+    }
+
+    public void dessiner(Piletransformations pile) {
+        for (int i = 0; i < formeNumber; i++) {
+            formeCollection[i].dessiner(pile);
+        }
+    }
+
+    public void deplacer(Point p) {
+        for (int i = 0; i < formeNumber; i++) {
+            formeCollection[i].deplacer(p);
+        }
+    }
+
+    public boolean ajouter(Forme forme) {
+        boolean rtVal = false;
+        if (!isFull()) {
+            formeCollection[formeNumber] = forme;
+            formeNumber++;
+            rtVal = true;
+        }
+        return rtVal;
+    }
+
+    public boolean supprimer(int index) {
+        boolean rtVal = false;
+        if (!isEmpty()) {
+            for (int j = index; (j < formeNumber - 1 && index < formeNumber); j++) {
+                formeCollection[j] = formeCollection[j + 1];
+            }
+            rtVal = true;
+            formeNumber--;
+        }
+        return rtVal;
+    }
+
+    public void afficher() {
+        String className = this.getClass().getSimpleName();
+        System.out.println("---- " + className + " ----");
+        for (int i = 0; i < formeNumber; i++) {
+            formeCollection[i].afficher();
+        }
+    }
+
+    public void compacter(int nElements) {
+        // Heavy solution
+        /* int minIndex = formeNumber - nElements - 1;
+        for (int i = formeNumber - 1; (i > minIndex && !isEmpty()); i--) {
+            supprimer(i);
+        } */
+        // Lightweight solution
+        if (formeNumber - nElements > 0) {
+            formeNumber -= nElements;
+        } else {
+            formeNumber = 0;
+        }
+    }
+
+    public int compareTo(Image image) {
+        return formeNumber - image.getSize();
+    }
+
+    public int compare(Image image1, Image image2) {
+        return (int)(image1.getpOri().getY() - image2.getpOri().getY());
+    }
+
+}