diff --git a/app/src/main/java/fr/ul/projet/modele/Acces.java b/app/src/main/java/fr/ul/projet/modele/Acces.java new file mode 100644 index 0000000000000000000000000000000000000000..53b8fab60127504fea89923649db0d88dc279fe9 --- /dev/null +++ b/app/src/main/java/fr/ul/projet/modele/Acces.java @@ -0,0 +1,64 @@ +package fr.ul.projet.modele; + +import fr.ul.projet.outils.FabriqueIdentifiant; + +public class Acces { + + private int id; + private int xCoinHautGauche, yCoinHautGauche; + private int xCoinBasDroite, yCoinBasDroite; + private Piece destination; + + public Acces(Piece dest, int x1, int y1, int x2, int y2){ + this.destination = dest; + this.xCoinHautGauche = x1; + this.yCoinHautGauche = y1; + this.xCoinBasDroite = x2; + this.yCoinBasDroite = y2; + this.id = FabriqueIdentifiant.getInstance().getCptAcces(); + } + + public int getId() { + return this.id; + } + + public int getXCoinBasDroite() { + return this.xCoinBasDroite; + } + + public void setxCoinBasDroite(int xCoinBasDroite) { + this.xCoinBasDroite = xCoinBasDroite; + } + + public int getXCoinHautGauche() { + return this.xCoinHautGauche; + } + + public void setxCoinHautGauche(int xCoinHautGauche) { + this.xCoinHautGauche = xCoinHautGauche; + } + + public int getYCoinBasDroite() { + return this.yCoinBasDroite; + } + + public void setyCoinBasDroite(int yCoinBasDroite) { + this.yCoinBasDroite = yCoinBasDroite; + } + + public int getYCoinHautGauche() { + return this.yCoinHautGauche; + } + + public void setyCoinHautGauche(int yCoinHautGauche) { + this.yCoinHautGauche = yCoinHautGauche; + } + + public Piece getDestination() { + return this.destination; + } + + public void setDestination(Piece destination) { + this.destination = destination; + } +} diff --git a/app/src/main/java/fr/ul/projet/modele/Modele.java b/app/src/main/java/fr/ul/projet/modele/Modele.java new file mode 100644 index 0000000000000000000000000000000000000000..28279bb7ae093c1cbb2352117774ecfb31994239 --- /dev/null +++ b/app/src/main/java/fr/ul/projet/modele/Modele.java @@ -0,0 +1,218 @@ +package fr.ul.projet.modele; + +import org.json.simple.JSONObject; +import org.json.simple.JSONValue; + +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.HashMap; +import java.util.LinkedList; +import java.util.List; + +import fr.ul.projet.outils.FabriqueIdentifiant; + +public class Modele { + + private boolean pieceAffichee; + private String fichierJson; + private String orientationCourante; + HashMap<Integer, Piece> pieces; + Piece pieceCourante; + + /** + * Constructeur d'un Modèle + * + */ + public Modele(){ + this.pieceAffichee = false; + this.pieceCourante = null; + this.fichierJson = new File("").getAbsolutePath() + "/modele" + FabriqueIdentifiant.getInstance().getCptJson() + ".json"; + } + + public void nouveau(){ + this.pieceAffichee = false; + this.pieceCourante = null; + this.fichierJson = new File("").getAbsolutePath() + "/modele" + FabriqueIdentifiant.getInstance().getCptJson() + ".json"; + this.pieces.clear(); + FabriqueIdentifiant.reset(); + } + + /** + * Getters et Setters ------------------------------------------------------------------------------------------------------------------------ + */ + + public Piece getPieceCourante() { + return this.pieceCourante; + } + + public String getFichierJson() { + return this.fichierJson; + } + + public String getOrientationCourante() { + return this.orientationCourante; + } + + public HashMap<Integer, Piece> getPieces() { + return this.pieces; + } + + public boolean isPieceAffichee() { + return this.pieceAffichee; + } + + public void setFichierJson(String fichierJson) { + this.fichierJson = fichierJson; + } + + public void setOrientationCourante(String orientationCourante) { + this.orientationCourante = orientationCourante; + } + + public void setPieceAffichee(boolean pieceAffichee) { + this.pieceAffichee = pieceAffichee; + } + + public void setPieceCourante(Piece pieceCourante) { + this.pieceCourante = pieceCourante; + this.pieceAffichee = true; + } + + /** + * Méthodes d'ajout et suppression ------------------------------------------------------------------------------------------------------------------------ + */ + + public void ajouterPiece(String nom, String photoNord, String photoSud, String photoEst, String photoOuest){ + Piece piece = new Piece(nom, photoNord, photoSud, photoEst, photoOuest); + this.pieces.put(piece.getId(), piece); + this.setPieceCourante(piece); + } + + public void modifierPieceCourante(String nom, String photoNord, String photoSud, String photoEst, String photoOuest){ + this.getPieceCourante().setNom(nom); + this.getPieceCourante().setPhotoNord(photoNord); + this.getPieceCourante().setPhotoSud(photoSud); + this.getPieceCourante().setPhotoEst(photoEst); + this.getPieceCourante().setPhotoOuest(photoOuest); + } + + public void supprimerPiece(int idPiece){ + Piece pieceSupp = this.getPieces().get(idPiece); + pieceSupp.getAcces().clear(); + for (Piece p : this.getPieces().values()){ + if (!p.equals(pieceSupp)) { + for (Acces a : p.getAcces().values()) { + if (a.getDestination().equals(pieceSupp)) { + p.getAcces().remove(a.getId()); + } + } + } + } + this.getPieces().remove(idPiece); + } + + public void ajouterAcces(Piece destination, int x1, int y1, int x2, int y2){ + this.getPieceCourante().ajouterAcces(destination, x1, y1, x2, y2); + } + + public void supprimerAcces(String idAcces){ + this.getPieceCourante().supprimerAcces(idAcces); + } + + /** + * Méthodes de déplacement ------------------------------------------------------------------------------------------------------------------------ + */ + + public void utiliserAcces(String idAcces){ + this.setPieceCourante(this.getPieceCourante().getAcces().get(idAcces).getDestination()); + } + + public void tournerHoraire(){ + switch (this.getOrientationCourante()){ + case "NORD": + this.setOrientationCourante("EST"); + break; + case "SUD": + this.setOrientationCourante("OUEST"); + break; + case "EST": + this.setOrientationCourante("SUD"); + break; + case "OUEST": + this.setOrientationCourante("NORD"); + break; + default: + break; + } + } + + public void tournerAntiHoraire(){ + switch (this.getOrientationCourante()){ + case "NORD": + this.setOrientationCourante("OUEST"); + break; + case "SUD": + this.setOrientationCourante("EST"); + break; + case "EST": + this.setOrientationCourante("NORD"); + break; + case "OUEST": + this.setOrientationCourante("SUD"); + break; + default: + break; + } + } + + + + /** + * Méthodes de lecture ou écriture d'un modèle ------------------------------------------------------------------------------------------------------------------------ + */ + + public String toJson(){ + JSONObject modeleJson = new JSONObject(); + List pieces = new LinkedList(); + for (Piece p : this.pieces.values()){ + pieces.add(p.toJson()); + } + modeleJson.put("pièces", pieces); + String json = JSONValue.toJSONString(modeleJson); + return json; + } + + public void enregistrerModele() throws Exception { + PrintWriter flotFiltre; + FileWriter flot; + + try { + File file = new File(this.fichierJson); + + if (file.exists()){ + file.delete(); + } + + flot = new FileWriter(file.getAbsoluteFile()); + flotFiltre = new PrintWriter(new BufferedWriter(flot)); + flotFiltre.print(this.toJson()); + flotFiltre.close(); + } catch (IOException e){ + throw new Exception("Impossble d'écrire (" + e + ")"); + } + } + + public void chargerModele() throws Exception{ + try{ + // Charger via json + } catch (Exception e) { + throw new Exception("Impossible de charger le modèle (" + e + ")"); + } + } + + + +} diff --git a/app/src/main/java/fr/ul/projet/modele/Piece.java b/app/src/main/java/fr/ul/projet/modele/Piece.java new file mode 100644 index 0000000000000000000000000000000000000000..b47f28e7308c9297f11da4d9f0b17f45aebbf0de --- /dev/null +++ b/app/src/main/java/fr/ul/projet/modele/Piece.java @@ -0,0 +1,92 @@ +package fr.ul.projet.modele; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +import fr.ul.projet.outils.FabriqueIdentifiant; +public class Piece { + + private int id; + String nom; + String photoNord, photoSud, photoEst, photoOuest; + + HashMap<Integer, Acces> acces = new HashMap<>(); + + + public Piece(String nom, String photoNord, String photoSud, String photoEst, String photoOuest){ + this.id = FabriqueIdentifiant.getInstance().getIdentifiantPiece(); + this.photoNord = photoNord; + this.photoSud = photoSud; + this.photoEst = photoEst; + this.photoOuest = photoOuest; + this.nom = nom; + } + public int getId(){ + return this.id; + } + + public String getNom() { + return this.nom; + } + + public void setNom(String nom){ + this.nom = nom; + } + + public String getPhotoNord() { + return this.photoNord; + } + + public void setPhotoNord(String photoNord){ + this.photoNord = photoNord; + } + + public String getPhotoEst() { + return this.photoEst; + } + + public void setPhotoEst(String photoEst){ + this.photoEst = photoEst; + } + + public String getPhotoSud() { + return this.photoSud; + } + public void setPhotoSud(String photoSud){ + this.photoSud = photoSud; + } + public String getPhotoOuest(){ + return this.photoOuest; + } + public void setPhotoOuest(String photoOuest){ + this.photoOuest = photoOuest; + } + + + public HashMap<Integer, Acces> getAcces(){ + return this.acces; + } + + public void ajouterAcces(Piece destination, int x1, int y1, int x2, int y2){ + Acces acc = new Acces(destination, x1, y1, x2, y2); + this.getAcces().put(acc.getId(), acc); + } + + public void supprimerAcces(String idAcces){ + this.getAcces().remove(idAcces); + } + + public Map toJson(){ + Map page = new LinkedHashMap(); + page.put("id", this.getId()); + page.put("nom", this.getNom()); + page.put("cheminPhotoNord", this.getPhotoNord()); + page.put("cheminPhotoSud", this.getPhotoSud()); + page.put("cheminPhotoEst", this.getPhotoEst()); + page.put("cheminPhotoOuest", this.getPhotoOuest()); + return page; + } + + +} diff --git a/app/src/main/java/fr/ul/projet/outils/FabriqueIdentifiant.java b/app/src/main/java/fr/ul/projet/outils/FabriqueIdentifiant.java new file mode 100644 index 0000000000000000000000000000000000000000..ec885c92c1d7c950d26a896548470df11bd8d63a --- /dev/null +++ b/app/src/main/java/fr/ul/projet/outils/FabriqueIdentifiant.java @@ -0,0 +1,37 @@ +package fr.ul.projet.outils; + +public class FabriqueIdentifiant { + private int cptPiece; + private int cptJson; + private int cptAcces; + static FabriqueIdentifiant instance; + public FabriqueIdentifiant(){ + cptPiece = 0; + cptJson=1; + cptAcces = 0; + } + public static FabriqueIdentifiant getInstance(){ + if (instance == null){ + instance = new FabriqueIdentifiant(); + } + return instance; + } + public int getIdentifiantPiece(){ + cptPiece++; + return cptPiece; + } + public int getCptJson(){ + cptJson++; + return cptJson; + } + public int getCptAcces(){ + cptAcces++; + return cptAcces; + } + public static void reset(){ + int cpt = getInstance().getCptJson(); + instance = new FabriqueIdentifiant(); + instance.cptJson=cpt-1; + } +} +