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