From 51717c2733da5dbd74bcc0992eb9361036ddfdea Mon Sep 17 00:00:00 2001
From: JulietteSCHILLING <juliette.schilling2@etu.univ-lorraine.fr>
Date: Sun, 20 Nov 2022 10:40:30 +0100
Subject: [PATCH] enregistrement ouverture ok

---
 .../myhabitat/CreationOuvertureActivity.java  |  60 +++++--
 .../com/example/myhabitat/MainActivity.java   |   9 +-
 .../myhabitat/ModeConceptionActivity.java     |   2 +-
 app/src/main/java/habitat/Habitat.java        |  56 ++++---
 app/src/main/java/habitat/Mur.java            |  20 +--
 app/src/main/java/habitat/Ouverture.java      | 148 +++++++++++++++++-
 app/src/main/java/habitat/Piece.java          |  26 +--
 .../layout/activity_creation_ouverture.xml    |  11 ++
 8 files changed, 255 insertions(+), 77 deletions(-)

diff --git a/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java b/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java
index 68522a5..7f98e27 100644
--- a/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java
+++ b/app/src/main/java/com/example/myhabitat/CreationOuvertureActivity.java
@@ -9,13 +9,10 @@ import android.view.View;
 import android.widget.*;
 import androidx.appcompat.app.AppCompatActivity;
 import android.os.Bundle;
-import habitat.Habitat;
-import habitat.Mur;
-import habitat.Orientation;
-import habitat.Piece;
+import habitat.*;
+import org.json.JSONObject;
 
-import java.io.FileInputStream;
-import java.io.FileNotFoundException;
+import java.io.*;
 
 public class CreationOuvertureActivity extends AppCompatActivity{
 
@@ -30,6 +27,7 @@ public class CreationOuvertureActivity extends AppCompatActivity{
     private Canvas canvasDepart;
     private Rect rectDepart;
     private Rect rectArrivee;
+    private Button buttonConfirmer;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -46,6 +44,9 @@ public class CreationOuvertureActivity extends AppCompatActivity{
             }
         }
 
+        buttonConfirmer = findViewById(R.id.buttonConfirmer);
+        buttonConfirmer.setEnabled(false);
+
         imageViewDepart = findViewById(R.id.imageViewDepart);
 
         myPaint = new Paint();
@@ -212,19 +213,14 @@ public class CreationOuvertureActivity extends AppCompatActivity{
                                 }
                             }
                         }
+                        if(rectArrivee != null && rectDepart != null){
+                            buttonConfirmer.setEnabled(true);
+                        }
 
-
-                        //Log.i("SelectActivity", "################################################# Coords Rect : " + rect.left + " | " + rect.top + "  &  " + rect.right + " | " + rect.bottom);
+                        //Log.i("testCoordsRect", "Coords Rect : " + rect.left + " | " + rect.top + "  &  " + rect.right + " | " + rect.bottom);
 
                     }
-                    if (event.getAction() == MotionEvent.ACTION_UP) {
-                        if (rectDepart != null) {
-                            Log.i("Touchup", "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ je releve mon doigt");
-
-                            //showImage();
 
-                        }
-                    }
                 }
                 return true;
             }
@@ -286,4 +282,38 @@ public class CreationOuvertureActivity extends AppCompatActivity{
         pieceEnCours = pieceArrivee;
         affichePieceArrivee();
     }
+
+    public void confirmer(View view) {
+        Ouverture ouverture = new Ouverture(pieceDepart.getMurOrientation(orientationPieceDepart), pieceArrivee.getMurOrientation(orientationPieceArrivee), rectDepart, rectArrivee);
+        habitat.addOuverture(ouverture);
+        enregistrement();
+        Log.i("testOuverture", String.valueOf(habitat.toJSON()));
+    }
+
+    public void enregistrement(){
+        JSONObject enregistrement = new JSONObject();
+        enregistrement = habitat.toJSON();
+
+        if(enregistrement != null){
+            FileOutputStream fos = null;
+            try {
+                fos = openFileOutput("enregistrement.json", MODE_PRIVATE);
+                PrintStream ps = new PrintStream(fos);
+                ps.print(enregistrement);
+                ps.close();
+                fos.flush();
+                Log.i("testEnregistrement", "enregistrement.json a bien été enregistré");
+                Log.i("testEnregistrement", "json = " + enregistrement.toString());
+                //ouvrirJSON();
+            } catch (FileNotFoundException e) {
+                throw new RuntimeException(e);
+            } catch (IOException e) {
+                throw new RuntimeException(e);
+            }
+            Log.i("testJSON", enregistrement.toString());
+
+        }else{
+            Log.i("testJSON", "pbm");
+        }
+    }
 }
\ No newline at end of file
diff --git a/app/src/main/java/com/example/myhabitat/MainActivity.java b/app/src/main/java/com/example/myhabitat/MainActivity.java
index 084dd95..311d4cd 100644
--- a/app/src/main/java/com/example/myhabitat/MainActivity.java
+++ b/app/src/main/java/com/example/myhabitat/MainActivity.java
@@ -13,6 +13,7 @@ import androidx.appcompat.app.AppCompatActivity;
 import android.os.Bundle;
 import habitat.Habitat;
 import habitat.Mur;
+import habitat.Ouverture;
 import habitat.Piece;
 import org.json.JSONArray;
 import org.json.JSONException;
@@ -117,10 +118,16 @@ public class MainActivity extends AppCompatActivity {
                     Piece piece = new Piece(Jpiece);
                     habitat.addPiece(piece);
                 }
+                JSONArray ouvertures = enregistrement.getJSONArray("Ouvertures");
+                for(int i=0; i<ouvertures.length(); i++){
+                    JSONObject Jouverture = (JSONObject) ouvertures.get(i);
+                    Ouverture ouverture = new Ouverture(Jouverture);
+                    habitat.addOuverture(ouverture);
+                }
                 Log.i("testJSONouverture", habitat.toString());
 
             } catch (JSONException e) {
-                throw new RuntimeException(e);
+                //throw new RuntimeException(e);
             }
 
             Log.i("testJSON", json);
diff --git a/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java b/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java
index 2f78f49..79bdf8a 100644
--- a/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java
+++ b/app/src/main/java/com/example/myhabitat/ModeConceptionActivity.java
@@ -176,7 +176,7 @@ public class ModeConceptionActivity extends AppCompatActivity {
     }
 
     public void addPiece(View view) {
-        Piece piece1 = new Piece("p", habitat);
+        Piece piece1 = new Piece("p");
         habitat.addPiece(piece1);
         affichePieces();
         majHabitat();
diff --git a/app/src/main/java/habitat/Habitat.java b/app/src/main/java/habitat/Habitat.java
index 941ed48..8451253 100644
--- a/app/src/main/java/habitat/Habitat.java
+++ b/app/src/main/java/habitat/Habitat.java
@@ -14,15 +14,22 @@ import java.util.Objects;
 public class Habitat implements Parcelable {
 
     private ArrayList<Piece> pieces;
+    private ArrayList<Ouverture> ouvertures;
 
     public Habitat() {
         this.pieces = new ArrayList<Piece>();
-        //createHabitat();
+        this.ouvertures = new ArrayList<Ouverture>();
     }
 
     protected Habitat(Parcel in) {
         pieces = new ArrayList<Piece>();
+        ouvertures = new ArrayList<Ouverture>();
         in.readList(pieces, Piece.class.getClassLoader());
+        in.readList(ouvertures, Ouverture.class.getClassLoader());
+    }
+
+    public Habitat(Piece... pieces) {
+        this.pieces = new ArrayList<>(Arrays.asList(pieces));
     }
 
     public static final Creator<Habitat> CREATOR = new Creator<Habitat>() {
@@ -37,19 +44,6 @@ public class Habitat implements Parcelable {
         }
     };
 
-    public void createHabitat(){
-        Piece piece1 = new Piece("p1", this);
-        Mur murN = new Mur(piece1, Orientation.NORD, this);
-        Mur murE = new Mur(piece1, Orientation.EST, this);
-        Mur murS = new Mur(piece1, Orientation.SUD, this);
-        Mur murO = new Mur(piece1, Orientation.OUEST, this);
-        piece1.setMurs(murS, murO, murN, murE);
-        pieces.add(piece1);
-    }
-
-    public Habitat(Piece... pieces) {
-        this.pieces = new ArrayList<>(Arrays.asList(pieces));
-    }
 
     public ArrayList<Piece> getPieces() {
         return pieces;
@@ -59,10 +53,19 @@ public class Habitat implements Parcelable {
         this.pieces = pieces;
     }
 
+    public ArrayList<Ouverture> getOuvertures() {
+        return ouvertures;
+    }
+
+    public void setOuvertures(ArrayList<Ouverture> ouvertures) {
+        this.ouvertures = ouvertures;
+    }
+
     @Override
     public String toString() {
         return "Habitat{" +
                 "pieces=" + pieces.toString() +
+                "; ouvertures=" + ouvertures.toString() +
                 '}';
     }
 
@@ -74,19 +77,26 @@ public class Habitat implements Parcelable {
     @Override
     public void writeToParcel(Parcel dest, int flags) {
         dest.writeList(pieces);
+        dest.writeList(ouvertures);
     }
 
     //Fonction utile quand on recupere via Intent pour re-set correctement
     public void setCorrectly(){
         for(Piece piece : pieces){
-            piece.setHabitat(this);
             piece.setCorrectly();
         }
     }
 
     public void addPiece(Piece piece) {
         pieces.add(piece);
-        piece.setHabitat(this);
+    }
+
+    public void addOuverture(Ouverture ouverture){
+        ouvertures.add(ouverture);
+    }
+
+    public void removeOuverture(Ouverture ouverture){
+        ouvertures.remove(ouverture);
     }
 
     public void removePiece(Piece piece){
@@ -95,12 +105,17 @@ public class Habitat implements Parcelable {
 
     public JSONObject toJSON(){
         JSONObject jsonObject = new JSONObject();
-        JSONArray jsonArray = new JSONArray();
+        JSONArray jsonArrayPiece = new JSONArray();
+        JSONArray jsonArrayOuvertures = new JSONArray();
         for(Piece piece : pieces){
-            jsonArray.put(piece.toJSON());
+            jsonArrayPiece.put(piece.toJSON());
+        }
+        for(Ouverture ouverture : ouvertures){
+            jsonArrayOuvertures.put(ouverture.toJSON());
         }
         try {
-            jsonObject.put("Pieces", jsonArray);
+            jsonObject.put("Pieces", jsonArrayPiece);
+            jsonObject.put("Ouvertures", jsonArrayOuvertures);
         } catch (JSONException e) {
             throw new RuntimeException(e);
         }
@@ -109,6 +124,7 @@ public class Habitat implements Parcelable {
 
     public void reset(){
         pieces.clear();
+        ouvertures.clear();
     }
 
     @Override
@@ -119,6 +135,6 @@ public class Habitat implements Parcelable {
 
     @Override
     public int hashCode() {
-        return Objects.hash(pieces);
+        return Objects.hash(pieces, ouvertures);
     }
 }
diff --git a/app/src/main/java/habitat/Mur.java b/app/src/main/java/habitat/Mur.java
index 77b8269..af1909d 100644
--- a/app/src/main/java/habitat/Mur.java
+++ b/app/src/main/java/habitat/Mur.java
@@ -11,21 +11,17 @@ import outils.FabriqueId;
 import java.util.Objects;
 
 public class Mur implements Parcelable {
-
-    private Habitat habitat;
     private Piece piece;
     private Orientation orientation;
     private int id; //Utile pour stocker la photo associée au mur
 
-    public Mur(Piece piece, Habitat habitat) {
-        this.habitat = habitat;
+    public Mur(Piece piece) {
         this.piece = piece;
         this.orientation = Orientation.SUD;  //Par défaut
         id = FabriqueId.getInstance().getId();
     }
 
-    public Mur(Piece piece, Orientation orientation, Habitat habitat) {
-        this.habitat = habitat;
+    public Mur(Piece piece, Orientation orientation) {
         this.piece = piece;
         this.orientation = orientation;
         id = FabriqueId.getInstance().getId();
@@ -90,14 +86,6 @@ public class Mur implements Parcelable {
         this.orientation = orientation;
     }
 
-    public Habitat getHabitat() {
-        return habitat;
-    }
-
-    public void setHabitat(Habitat habitat) {
-        this.habitat = habitat;
-    }
-
     public int getId() {
         return id;
     }
@@ -142,11 +130,11 @@ public class Mur implements Parcelable {
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
-        return id == ((Mur) o).getId() && Objects.equals(habitat, ((Mur) o).getHabitat()) && Objects.equals(piece, ((Mur) o).getPiece()) && orientation == ((Mur) o).getOrientation();
+        return id == ((Mur) o).getId() && Objects.equals(piece, ((Mur) o).getPiece()) && orientation == ((Mur) o).getOrientation();
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(habitat, piece, orientation, id);
+        return Objects.hash(piece, orientation, id);
     }
 }
diff --git a/app/src/main/java/habitat/Ouverture.java b/app/src/main/java/habitat/Ouverture.java
index 2b47362..f48c951 100644
--- a/app/src/main/java/habitat/Ouverture.java
+++ b/app/src/main/java/habitat/Ouverture.java
@@ -1,13 +1,151 @@
 package habitat;
 
 import android.graphics.Rect;
+import android.os.Parcel;
+import android.os.Parcelable;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
 
-public class Ouverture {
+import java.util.Objects;
 
-    private Mur depart;
-    private Mur arrivee;
-    private Rect rect;
+public class Ouverture implements Parcelable {
 
-    public Ouverture() {
+    private Mur murDepart;
+    private Mur murArrivee;
+    private Rect rectDepart;
+    private Rect rectArrivee;
+
+    public Ouverture(JSONObject jsonObject) {
+        try {
+            murDepart = new Mur((JSONObject) jsonObject.get("MurDepart"));
+            murArrivee = new Mur((JSONObject) jsonObject.get("MurArrivee"));
+            JSONArray JrectDepart = (JSONArray) jsonObject.get("RectDepart");
+            rectDepart = new Rect((Integer) JrectDepart.get(2), (Integer) JrectDepart.get(0), (Integer) JrectDepart.get(3), (Integer) JrectDepart.get(1));
+            JSONArray JrectArrivee = (JSONArray) jsonObject.get("RectArrivee");
+            rectArrivee = new Rect((Integer) JrectArrivee.get(2), (Integer) JrectArrivee.get(0), (Integer) JrectArrivee.get(3), (Integer) JrectArrivee.get(1));
+        } catch (JSONException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
+    public Ouverture(Mur murDepart, Mur murArrivee, Rect rectDepart, Rect rectArrivee){
+        this.murDepart = murDepart;
+        this.murArrivee = murArrivee;
+        this.rectDepart = rectDepart;
+        this.rectArrivee = rectArrivee;
+    }
+
+    protected Ouverture(Parcel in){
+        murDepart = in.readParcelable(Mur.class.getClassLoader());
+        murArrivee = in.readParcelable(Mur.class.getClassLoader());
+        rectDepart = in.readParcelable(Rect.class.getClassLoader());
+        rectArrivee = in.readParcelable(Rect.class.getClassLoader());
+    }
+
+    public static final Creator<Ouverture> CREATOR = new Creator<Ouverture>() {
+        @Override
+        public Ouverture createFromParcel(Parcel in) {
+            return new Ouverture(in);
+        }
+
+        @Override
+        public Ouverture[] newArray(int size) {
+            return new Ouverture[0];
+        }
+    };
+
+    public JSONObject toJSON() {
+        JSONObject jsonObject = new JSONObject();
+        JSONArray jsonArrayD = new JSONArray();
+        JSONArray jsonArrayA = new JSONArray();
+
+        try {
+            jsonObject.put("MurDepart", murDepart.toJSON());
+            jsonObject.put("MurArrivee", murArrivee.toJSON());
+            jsonArrayD.put(rectDepart.top);
+            jsonArrayD.put(rectDepart.bottom);
+            jsonArrayD.put(rectDepart.left);
+            jsonArrayD.put(rectDepart.right);
+            jsonObject.put("RectDepart", jsonArrayD);
+            jsonArrayA.put(rectArrivee.top);
+            jsonArrayA.put(rectArrivee.bottom);
+            jsonArrayA.put(rectArrivee.left);
+            jsonArrayA.put(rectArrivee.right);
+            jsonObject.put("RectDepart", jsonArrayD);
+            jsonObject.put("RectArrivee", jsonArrayA);
+        } catch (JSONException e) {
+            throw new RuntimeException(e);
+        }
+
+
+        return jsonObject;
+    }
+
+    @Override
+    public int describeContents() {
+        return 0;
+    }
+
+    @Override
+    public void writeToParcel(Parcel dest, int flags) {
+        dest.writeParcelable(murDepart, flags);
+        dest.writeParcelable(murArrivee, flags);
+        dest.writeParcelable(rectDepart, flags);
+        dest.writeParcelable(rectArrivee, flags);
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) return true;
+        if (o == null || getClass() != o.getClass()) return false;
+        return Objects.equals(murDepart, ((Ouverture) o).getMurDepart()) && Objects.equals(murArrivee, ((Ouverture) o).getMurArrivee()) && Objects.equals(rectDepart, ((Ouverture) o).getRectDepart()) && Objects.equals(rectArrivee, ((Ouverture) o).getRectArrivee());
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(murDepart, murArrivee, rectDepart, rectArrivee);
+    }
+
+    public Mur getMurDepart() {
+        return murDepart;
+    }
+
+    public void setMurDepart(Mur murDepart) {
+        this.murDepart = murDepart;
+    }
+
+    public Mur getMurArrivee() {
+        return murArrivee;
+    }
+
+    public void setMurArrivee(Mur murArrivee) {
+        this.murArrivee = murArrivee;
+    }
+
+    public Rect getRectDepart() {
+        return rectDepart;
+    }
+
+    public void setRectDepart(Rect rectDepart) {
+        this.rectDepart = rectDepart;
+    }
+
+    public Rect getRectArrivee() {
+        return rectArrivee;
+    }
+
+    public void setRectArrivee(Rect rectArrivee) {
+        this.rectArrivee = rectArrivee;
+    }
+
+    @Override
+    public String toString() {
+        return "Ouverture{" +
+                "murDepart=" + murDepart +
+                ", murArrivee=" + murArrivee +
+                ", rectDepart=" + rectDepart +
+                ", rectArrivee=" + rectArrivee +
+                '}';
     }
 }
diff --git a/app/src/main/java/habitat/Piece.java b/app/src/main/java/habitat/Piece.java
index 1bb6883..ecfd4f9 100644
--- a/app/src/main/java/habitat/Piece.java
+++ b/app/src/main/java/habitat/Piece.java
@@ -10,20 +10,18 @@ import java.util.ArrayList;
 import java.util.Objects;
 
 public class Piece implements Parcelable {
-    private Habitat habitat;
     private String nom;
     private ArrayList<Mur> murs;
 
-    public Piece(String nom, Habitat habitat) {
+    public Piece(String nom) {
         this.nom = nom;
-        this.habitat = habitat;
         murs = new ArrayList<>(4);
 
         //On créé les murs
-        Mur murN = new Mur(this, Orientation.NORD, this.getHabitat());
-        Mur murE = new Mur(this, Orientation.EST, this.getHabitat());
-        Mur murS = new Mur(this, Orientation.SUD, this.getHabitat());
-        Mur murO = new Mur(this, Orientation.OUEST, this.getHabitat());
+        Mur murN = new Mur(this, Orientation.NORD);
+        Mur murE = new Mur(this, Orientation.EST);
+        Mur murS = new Mur(this, Orientation.SUD);
+        Mur murO = new Mur(this, Orientation.OUEST);
         setMurs(murS, murO, murN, murE);
     }
 
@@ -36,7 +34,6 @@ public class Piece implements Parcelable {
                 JSONObject Jmur = Jmurs.getJSONObject(j);
                 Mur mur = new Mur(Jmur);
                 addMur(mur);
-                mur.setHabitat(habitat);
             }
         } catch (JSONException e) {
             throw new RuntimeException(e);
@@ -81,14 +78,6 @@ public class Piece implements Parcelable {
         }
     }
 
-    public Habitat getHabitat() {
-        return habitat;
-    }
-
-    public void setHabitat(Habitat habitat) {
-        this.habitat = habitat;
-    }
-
     public Mur getMurOrientation(Orientation orientation){
         Mur result = murs.get(0);
         for(Mur mur : murs){
@@ -120,7 +109,6 @@ public class Piece implements Parcelable {
     public void setCorrectly() {
         for(Mur mur : murs){
             mur.setPiece(this);
-            mur.setHabitat(habitat);
         }
     }
 
@@ -148,11 +136,11 @@ public class Piece implements Parcelable {
     public boolean equals(Object o) {
         if (this == o) return true;
         if (o == null || getClass() != o.getClass()) return false;
-        return Objects.equals(habitat, ((Piece) o).getHabitat()) && Objects.equals(nom, ((Piece) o).getNom()) && Objects.equals(murs, ((Piece) o).getMurs());
+        return Objects.equals(nom, ((Piece) o).getNom()) && Objects.equals(murs, ((Piece) o).getMurs());
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(habitat, nom, murs);
+        return Objects.hash(nom, murs);
     }
 }
diff --git a/app/src/main/res/layout/activity_creation_ouverture.xml b/app/src/main/res/layout/activity_creation_ouverture.xml
index e0ef718..85adf75 100644
--- a/app/src/main/res/layout/activity_creation_ouverture.xml
+++ b/app/src/main/res/layout/activity_creation_ouverture.xml
@@ -138,4 +138,15 @@
             android:layout_marginEnd="40dp"
             android:layout_marginTop="16dp"/>
 
+    <Button
+            android:text="Confirmer"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:id="@+id/buttonConfirmer"
+            android:onClick="confirmer"
+            app:layout_constraintTop_toBottomOf="@+id/imageViewDepart"
+            app:layout_constraintBottom_toBottomOf="parent"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintEnd_toEndOf="parent"/>
+
 </androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
-- 
GitLab