commit 43ce578b1f2d0605f28808697d25dcbda76e90c2 Author: Victor Gaborit Date: Sun Jan 22 23:12:20 2023 +0100 add thermometre project diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..5295b2c --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..67886b5 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Ressources/FXML/FenetreImage.fxml b/Ressources/FXML/FenetreImage.fxml new file mode 100644 index 0000000..754de26 --- /dev/null +++ b/Ressources/FXML/FenetreImage.fxml @@ -0,0 +1,41 @@ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Ressources/FXML/FenetreMenu.fxml b/Ressources/FXML/FenetreMenu.fxml new file mode 100644 index 0000000..df68a88 --- /dev/null +++ b/Ressources/FXML/FenetreMenu.fxml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/Ressources/images/captor.svg b/Ressources/images/captor.svg new file mode 100644 index 0000000..ed44c88 --- /dev/null +++ b/Ressources/images/captor.svg @@ -0,0 +1,91 @@ + + + +image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/Ressources/images/captor_icon.png b/Ressources/images/captor_icon.png new file mode 100644 index 0000000..6995fa2 Binary files /dev/null and b/Ressources/images/captor_icon.png differ diff --git a/Ressources/images/chaud.jpg b/Ressources/images/chaud.jpg new file mode 100644 index 0000000..225f956 Binary files /dev/null and b/Ressources/images/chaud.jpg differ diff --git a/Ressources/images/froid.jpg b/Ressources/images/froid.jpg new file mode 100644 index 0000000..58e44dd Binary files /dev/null and b/Ressources/images/froid.jpg differ diff --git a/Ressources/images/multi-captor.svg b/Ressources/images/multi-captor.svg new file mode 100644 index 0000000..abcde6e --- /dev/null +++ b/Ressources/images/multi-captor.svg @@ -0,0 +1,141 @@ + + + +image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/Ressources/images/multi_captor_icon.png b/Ressources/images/multi_captor_icon.png new file mode 100644 index 0000000..1e9dc6b Binary files /dev/null and b/Ressources/images/multi_captor_icon.png differ diff --git a/Ressources/images/nuageux.jpg b/Ressources/images/nuageux.jpg new file mode 100644 index 0000000..b75f8af Binary files /dev/null and b/Ressources/images/nuageux.jpg differ diff --git a/Thermometre.iml b/Thermometre.iml new file mode 100644 index 0000000..e76dbd0 --- /dev/null +++ b/Thermometre.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/Thermometre/DonneePersistante/Stub.class b/out/production/Thermometre/DonneePersistante/Stub.class new file mode 100644 index 0000000..7065228 Binary files /dev/null and b/out/production/Thermometre/DonneePersistante/Stub.class differ diff --git a/out/production/Thermometre/FXML/FenetreImage.fxml b/out/production/Thermometre/FXML/FenetreImage.fxml new file mode 100644 index 0000000..754de26 --- /dev/null +++ b/out/production/Thermometre/FXML/FenetreImage.fxml @@ -0,0 +1,41 @@ + + + + + + + + + + + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
diff --git a/out/production/Thermometre/FXML/FenetreMenu.fxml b/out/production/Thermometre/FXML/FenetreMenu.fxml new file mode 100644 index 0000000..df68a88 --- /dev/null +++ b/out/production/Thermometre/FXML/FenetreMenu.fxml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/out/production/Thermometre/images/captor.svg b/out/production/Thermometre/images/captor.svg new file mode 100644 index 0000000..ed44c88 --- /dev/null +++ b/out/production/Thermometre/images/captor.svg @@ -0,0 +1,91 @@ + + + +image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/out/production/Thermometre/images/captor_icon.png b/out/production/Thermometre/images/captor_icon.png new file mode 100644 index 0000000..6995fa2 Binary files /dev/null and b/out/production/Thermometre/images/captor_icon.png differ diff --git a/out/production/Thermometre/images/chaud.jpg b/out/production/Thermometre/images/chaud.jpg new file mode 100644 index 0000000..225f956 Binary files /dev/null and b/out/production/Thermometre/images/chaud.jpg differ diff --git a/out/production/Thermometre/images/froid.jpg b/out/production/Thermometre/images/froid.jpg new file mode 100644 index 0000000..58e44dd Binary files /dev/null and b/out/production/Thermometre/images/froid.jpg differ diff --git a/out/production/Thermometre/images/multi-captor.svg b/out/production/Thermometre/images/multi-captor.svg new file mode 100644 index 0000000..abcde6e --- /dev/null +++ b/out/production/Thermometre/images/multi-captor.svg @@ -0,0 +1,141 @@ + + + +image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/out/production/Thermometre/images/multi_captor_icon.png b/out/production/Thermometre/images/multi_captor_icon.png new file mode 100644 index 0000000..1e9dc6b Binary files /dev/null and b/out/production/Thermometre/images/multi_captor_icon.png differ diff --git a/out/production/Thermometre/images/nuageux.jpg b/out/production/Thermometre/images/nuageux.jpg new file mode 100644 index 0000000..b75f8af Binary files /dev/null and b/out/production/Thermometre/images/nuageux.jpg differ diff --git a/out/production/Thermometre/launchers/ThermometreApplication.class b/out/production/Thermometre/launchers/ThermometreApplication.class new file mode 100644 index 0000000..ff2a349 Binary files /dev/null and b/out/production/Thermometre/launchers/ThermometreApplication.class differ diff --git a/out/production/Thermometre/launchers/ThermometreConsole.class b/out/production/Thermometre/launchers/ThermometreConsole.class new file mode 100644 index 0000000..81e7393 Binary files /dev/null and b/out/production/Thermometre/launchers/ThermometreConsole.class differ diff --git a/out/production/Thermometre/models/Observateur.class b/out/production/Thermometre/models/Observateur.class new file mode 100644 index 0000000..9f68417 Binary files /dev/null and b/out/production/Thermometre/models/Observateur.class differ diff --git a/out/production/Thermometre/models/Sujet.class b/out/production/Thermometre/models/Sujet.class new file mode 100644 index 0000000..57c3ee5 Binary files /dev/null and b/out/production/Thermometre/models/Sujet.class differ diff --git a/out/production/Thermometre/models/TachePeriodique.class b/out/production/Thermometre/models/TachePeriodique.class new file mode 100644 index 0000000..cacefe8 Binary files /dev/null and b/out/production/Thermometre/models/TachePeriodique.class differ diff --git a/out/production/Thermometre/models/Visualisateur.class b/out/production/Thermometre/models/Visualisateur.class new file mode 100644 index 0000000..abe12eb Binary files /dev/null and b/out/production/Thermometre/models/Visualisateur.class differ diff --git a/out/production/Thermometre/models/capteurs/Capteur.class b/out/production/Thermometre/models/capteurs/Capteur.class new file mode 100644 index 0000000..94e083f Binary files /dev/null and b/out/production/Thermometre/models/capteurs/Capteur.class differ diff --git a/out/production/Thermometre/models/capteurs/CapteurTemperature.class b/out/production/Thermometre/models/capteurs/CapteurTemperature.class new file mode 100644 index 0000000..9167322 Binary files /dev/null and b/out/production/Thermometre/models/capteurs/CapteurTemperature.class differ diff --git a/out/production/Thermometre/models/capteurs/CapteurTemperatureAbstrait.class b/out/production/Thermometre/models/capteurs/CapteurTemperatureAbstrait.class new file mode 100644 index 0000000..b956d47 Binary files /dev/null and b/out/production/Thermometre/models/capteurs/CapteurTemperatureAbstrait.class differ diff --git a/out/production/Thermometre/models/capteurs/CapteurTemperatureManuel.class b/out/production/Thermometre/models/capteurs/CapteurTemperatureManuel.class new file mode 100644 index 0000000..91e0734 Binary files /dev/null and b/out/production/Thermometre/models/capteurs/CapteurTemperatureManuel.class differ diff --git a/out/production/Thermometre/models/capteurs/CapteurTemperatureVirtuel.class b/out/production/Thermometre/models/capteurs/CapteurTemperatureVirtuel.class new file mode 100644 index 0000000..39968d0 Binary files /dev/null and b/out/production/Thermometre/models/capteurs/CapteurTemperatureVirtuel.class differ diff --git a/out/production/Thermometre/models/generateurs/GenerateurAleatoire.class b/out/production/Thermometre/models/generateurs/GenerateurAleatoire.class new file mode 100644 index 0000000..b933eab Binary files /dev/null and b/out/production/Thermometre/models/generateurs/GenerateurAleatoire.class differ diff --git a/out/production/Thermometre/models/generateurs/GenerateurParVariation.class b/out/production/Thermometre/models/generateurs/GenerateurParVariation.class new file mode 100644 index 0000000..6b3f4f0 Binary files /dev/null and b/out/production/Thermometre/models/generateurs/GenerateurParVariation.class differ diff --git a/out/production/Thermometre/models/generateurs/GeneratureParIntervalle.class b/out/production/Thermometre/models/generateurs/GeneratureParIntervalle.class new file mode 100644 index 0000000..aef8640 Binary files /dev/null and b/out/production/Thermometre/models/generateurs/GeneratureParIntervalle.class differ diff --git a/out/production/Thermometre/models/generateurs/StrategieTemperatureGenere.class b/out/production/Thermometre/models/generateurs/StrategieTemperatureGenere.class new file mode 100644 index 0000000..1f8ac3c Binary files /dev/null and b/out/production/Thermometre/models/generateurs/StrategieTemperatureGenere.class differ diff --git a/out/production/Thermometre/views/cellules/CelluleArbre.class b/out/production/Thermometre/views/cellules/CelluleArbre.class new file mode 100644 index 0000000..0ac05b2 Binary files /dev/null and b/out/production/Thermometre/views/cellules/CelluleArbre.class differ diff --git a/out/production/Thermometre/views/cellules/CelluleId.class b/out/production/Thermometre/views/cellules/CelluleId.class new file mode 100644 index 0000000..f40d47e Binary files /dev/null and b/out/production/Thermometre/views/cellules/CelluleId.class differ diff --git a/out/production/Thermometre/views/cellules/CelluleListVue.class b/out/production/Thermometre/views/cellules/CelluleListVue.class new file mode 100644 index 0000000..bac5036 Binary files /dev/null and b/out/production/Thermometre/views/cellules/CelluleListVue.class differ diff --git a/out/production/Thermometre/views/cellules/CellulePoids.class b/out/production/Thermometre/views/cellules/CellulePoids.class new file mode 100644 index 0000000..5856d67 Binary files /dev/null and b/out/production/Thermometre/views/cellules/CellulePoids.class differ diff --git a/out/production/Thermometre/views/cellules/CelluleType.class b/out/production/Thermometre/views/cellules/CelluleType.class new file mode 100644 index 0000000..49ec355 Binary files /dev/null and b/out/production/Thermometre/views/cellules/CelluleType.class differ diff --git a/out/production/Thermometre/views/fabriques/FabriqueVueCapteurTemperatureAbstrait$1.class b/out/production/Thermometre/views/fabriques/FabriqueVueCapteurTemperatureAbstrait$1.class new file mode 100644 index 0000000..a4720d3 Binary files /dev/null and b/out/production/Thermometre/views/fabriques/FabriqueVueCapteurTemperatureAbstrait$1.class differ diff --git a/out/production/Thermometre/views/fabriques/FabriqueVueCapteurTemperatureAbstrait.class b/out/production/Thermometre/views/fabriques/FabriqueVueCapteurTemperatureAbstrait.class new file mode 100644 index 0000000..ebbbec5 Binary files /dev/null and b/out/production/Thermometre/views/fabriques/FabriqueVueCapteurTemperatureAbstrait.class differ diff --git a/out/production/Thermometre/views/fenetre/FenetreImage.class b/out/production/Thermometre/views/fenetre/FenetreImage.class new file mode 100644 index 0000000..d824dd3 Binary files /dev/null and b/out/production/Thermometre/views/fenetre/FenetreImage.class differ diff --git a/out/production/Thermometre/views/fenetre/FenetreMenu.class b/out/production/Thermometre/views/fenetre/FenetreMenu.class new file mode 100644 index 0000000..f6cf6fa Binary files /dev/null and b/out/production/Thermometre/views/fenetre/FenetreMenu.class differ diff --git a/out/production/Thermometre/views/fenetre/FenetreThermometre.class b/out/production/Thermometre/views/fenetre/FenetreThermometre.class new file mode 100644 index 0000000..b6f49ef Binary files /dev/null and b/out/production/Thermometre/views/fenetre/FenetreThermometre.class differ diff --git a/out/production/Thermometre/views/vues/CapteurTemperatureAbstraitVue.class b/out/production/Thermometre/views/vues/CapteurTemperatureAbstraitVue.class new file mode 100644 index 0000000..b710a87 Binary files /dev/null and b/out/production/Thermometre/views/vues/CapteurTemperatureAbstraitVue.class differ diff --git a/out/production/Thermometre/views/vues/CapteurTemperatureVirtuelVue.class b/out/production/Thermometre/views/vues/CapteurTemperatureVirtuelVue.class new file mode 100644 index 0000000..d3fcc76 Binary files /dev/null and b/out/production/Thermometre/views/vues/CapteurTemperatureVirtuelVue.class differ diff --git a/out/production/Thermometre/views/vues/CapteurTemperatureVue.class b/out/production/Thermometre/views/vues/CapteurTemperatureVue.class new file mode 100644 index 0000000..70f3335 Binary files /dev/null and b/out/production/Thermometre/views/vues/CapteurTemperatureVue.class differ diff --git a/src/DonneePersistante/Stub.java b/src/DonneePersistante/Stub.java new file mode 100644 index 0000000..56d9e7c --- /dev/null +++ b/src/DonneePersistante/Stub.java @@ -0,0 +1,45 @@ +package DonneePersistante; + +import models.TachePeriodique; +import models.capteurs.CapteurTemperature; +import models.capteurs.CapteurTemperatureAbstrait; +import models.capteurs.CapteurTemperatureVirtuel; +import models.generateurs.GenerateurAleatoire; +import models.generateurs.GeneratureParIntervalle; + +public class Stub { + + public static CapteurTemperatureAbstrait chargerArbre(TachePeriodique tachePeriodique) { + + + CapteurTemperatureAbstrait CapteurEnRacine = new CapteurTemperatureVirtuel("Capteur virtuel", 5); + + + CapteurTemperature capteur1 = new CapteurTemperature("Capteur 1", 5, new GenerateurAleatoire(), tachePeriodique); + CapteurTemperature capteur2 = new CapteurTemperature("Capteur 2", 5, null, tachePeriodique); + CapteurTemperature capteur3 = new CapteurTemperature("Capteur 3", 10, new GeneratureParIntervalle(30,5), tachePeriodique); + CapteurTemperature capteur4 = new CapteurTemperature("Capteur 4", -9, null, tachePeriodique); + CapteurTemperature capteur5 = new CapteurTemperature("Capteur 5", 65, null, tachePeriodique); + + + CapteurTemperatureAbstrait capteurVirtuel1 = new CapteurTemperatureVirtuel("Capteur virtuel 1", 5); + CapteurTemperatureAbstrait capteurVirtuel2 = new CapteurTemperatureVirtuel("Capteur virtuel 2", 5); + + + ((CapteurTemperatureVirtuel)capteurVirtuel1).AjouterUnCapteur(capteur1,1); + ((CapteurTemperatureVirtuel)capteurVirtuel1).AjouterUnCapteur(capteur2,1); + ((CapteurTemperatureVirtuel)capteurVirtuel1).AjouterUnCapteur(capteur3,2); + ((CapteurTemperatureVirtuel)capteurVirtuel1).AjouterUnCapteur(capteurVirtuel2,2); + ((CapteurTemperatureVirtuel)capteurVirtuel2).AjouterUnCapteur(capteur4,2); + ((CapteurTemperatureVirtuel)capteurVirtuel2).AjouterUnCapteur(capteur1,2); + ((CapteurTemperatureVirtuel)capteurVirtuel2).MiseAjourTemperature(); + ((CapteurTemperatureVirtuel)capteurVirtuel1).MiseAjourTemperature(); + + + ((CapteurTemperatureVirtuel)CapteurEnRacine).AjouterUnCapteur(capteurVirtuel1,2); + ((CapteurTemperatureVirtuel)CapteurEnRacine).AjouterUnCapteur(capteur5,2); + + + return CapteurEnRacine; + } +} diff --git a/src/launchers/ThermometreApplication.java b/src/launchers/ThermometreApplication.java new file mode 100644 index 0000000..aa7a210 --- /dev/null +++ b/src/launchers/ThermometreApplication.java @@ -0,0 +1,18 @@ +package launchers; + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.stage.Stage; + +public class ThermometreApplication extends Application { + @Override + public void start(Stage stage) throws Exception { + Parent root = FXMLLoader.load(getClass().getResource("/FXML/FenetreMenu.fxml")); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.show(); + + } +} diff --git a/src/launchers/ThermometreConsole.java b/src/launchers/ThermometreConsole.java new file mode 100644 index 0000000..d75f343 --- /dev/null +++ b/src/launchers/ThermometreConsole.java @@ -0,0 +1,4 @@ +package launchers; + +public class ThermometreConsole { +} diff --git a/src/models/Observateur.java b/src/models/Observateur.java new file mode 100644 index 0000000..42b5c8c --- /dev/null +++ b/src/models/Observateur.java @@ -0,0 +1,7 @@ +package models; + +import models.capteurs.CapteurTemperatureAbstrait; + +public abstract interface Observateur { + public abstract void update(); +} diff --git a/src/models/Sujet.java b/src/models/Sujet.java new file mode 100644 index 0000000..8c37285 --- /dev/null +++ b/src/models/Sujet.java @@ -0,0 +1,28 @@ +package models; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public abstract class Sujet { + + private List ListObservateurs = new ArrayList<>(); + + + + public List getListObservateurs(){ + return Collections.unmodifiableList(ListObservateurs); + } + public void ajouterObservateur(Observateur observateur){ + ListObservateurs.add(observateur); + } + public void enleverObservateur(Observateur observateur){ + ListObservateurs.remove(observateur); + } + public void notifier(){ + for (Observateur observateur : ListObservateurs){ + observateur.update(); + } + } + +} diff --git a/src/models/TachePeriodique.java b/src/models/TachePeriodique.java new file mode 100644 index 0000000..6a2d1e6 --- /dev/null +++ b/src/models/TachePeriodique.java @@ -0,0 +1,55 @@ +package models; + +import javafx.application.Platform; +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleIntegerProperty; +import models.capteurs.CapteurTemperature; + +import java.util.ArrayList; +import java.util.List; + +public class TachePeriodique extends Thread{ + + private CapteurTemperature capteur; + protected final BooleanProperty arret = new SimpleBooleanProperty(); + + private List ListCapteurTachePeriodique = new ArrayList<>(); + + public TachePeriodique(){ + setArret(true); + } + + + public BooleanProperty arretProperty(){ + return arret; + } + public boolean getArret(){ + return arret.get(); + } + private void setArret(boolean arret){ + this.arret.set(arret); + + if(arret){ + this.start(); + } + } + public void ajouterUnCpateurTachePeriodique(CapteurTemperature capteur ){ + ListCapteurTachePeriodique.add(capteur); + } + @Override + public void run() { + while (getArret()) { + try { + Thread.sleep(1000); + Platform.runLater(() -> { + ListCapteurTachePeriodique.forEach(e -> e.compute()); + }); + + } catch (Exception e) { + throw new RuntimeException(e); + } + } + } +} diff --git a/src/models/Visualisateur.java b/src/models/Visualisateur.java new file mode 100644 index 0000000..1daee04 --- /dev/null +++ b/src/models/Visualisateur.java @@ -0,0 +1,12 @@ +package models; + +import models.capteurs.CapteurTemperatureAbstrait; + +public abstract class Visualisateur { + + protected CapteurTemperatureAbstrait capteur; + + public Visualisateur(CapteurTemperatureAbstrait capteur){ + this.capteur = capteur; + } +} diff --git a/src/models/capteurs/Capteur.java b/src/models/capteurs/Capteur.java new file mode 100644 index 0000000..64ca6f0 --- /dev/null +++ b/src/models/capteurs/Capteur.java @@ -0,0 +1,35 @@ +package models.capteurs; + +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +public abstract class Capteur { + private static int idCourantIncremente = 0; + private int id; + private StringProperty nom = new SimpleStringProperty(); + + + + + + public Capteur(String nom){ + this.nom.set(nom); + idCourantIncremente += 1; + id = idCourantIncremente; + } + public StringProperty nomProperty(){ + return nom; + } + + public String getNom() { + return nom.get(); + } + + public void setNom(String nom) { + this.nom.set(nom); + } + + public int getId() { + return id; + } +} diff --git a/src/models/capteurs/CapteurTemperature.java b/src/models/capteurs/CapteurTemperature.java new file mode 100644 index 0000000..ab03810 --- /dev/null +++ b/src/models/capteurs/CapteurTemperature.java @@ -0,0 +1,73 @@ +package models.capteurs; + +import javafx.beans.property.BooleanProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleBooleanProperty; +import javafx.beans.property.SimpleIntegerProperty; +import javafx.collections.ObservableList; +import models.TachePeriodique; +import models.generateurs.StrategieTemperatureGenere; + +import java.time.LocalDateTime; +import java.time.temporal.ChronoUnit; +import java.util.Objects; +import java.util.Optional; + +public class CapteurTemperature extends CapteurTemperatureAbstrait{ + + private LocalDateTime updatedTime; + + public CapteurTemperature(String nom, double temperature, StrategieTemperatureGenere strategieGeneration, TachePeriodique tachePeriodique) { + super(nom, temperature); + setStrategieGeneration(strategieGeneration); + setFrequence(1); + setenFonctionnementProperty(true); + updatedTime = LocalDateTime.now(); + tachePeriodique.ajouterUnCpateurTachePeriodique(this); + } + @Override + public double getTemperature() {return this.temperature.get();} + + private IntegerProperty frequence = new SimpleIntegerProperty(); + public IntegerProperty frequenceProperty() { + return frequence; + } + private void setFrequence(int tick) {this.frequence.set(tick);} + public int getFrequence() { return frequence.get();} + + private BooleanProperty enFonctionnement = new SimpleBooleanProperty(); + public BooleanProperty enFonctionnementProperty() { + return enFonctionnement; + } + + private void setenFonctionnementProperty(boolean activate) { + this.enFonctionnement.set(activate); + } + public boolean getenFonctionnementProperty() { return enFonctionnement.get();} + + + @Override + public ObservableList getListCapteurs() throws NoSuchMethodException { + throw new NoSuchMethodException(); + } + + private StrategieTemperatureGenere strategieGeneration; + + public StrategieTemperatureGenere getStrategieGeneration() { + return strategieGeneration; + } + + public void setStrategieGeneration(StrategieTemperatureGenere strategieGeneration) { + this.strategieGeneration = strategieGeneration; + } + + public void compute() { + if(Objects.nonNull(strategieGeneration) && Boolean.TRUE.equals(getenFonctionnementProperty())) { + if(ChronoUnit.SECONDS.between(updatedTime, LocalDateTime.now()) >= getFrequence()) { + updatedTime = LocalDateTime.now(); + temperatureProperty().setValue(strategieGeneration.compute(temperatureProperty().getValue())); + } + } + } + +} diff --git a/src/models/capteurs/CapteurTemperatureAbstrait.java b/src/models/capteurs/CapteurTemperatureAbstrait.java new file mode 100644 index 0000000..7f4b0a5 --- /dev/null +++ b/src/models/capteurs/CapteurTemperatureAbstrait.java @@ -0,0 +1,25 @@ +package models.capteurs; + +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleDoubleProperty; +import javafx.collections.ObservableList; + +public abstract class CapteurTemperatureAbstrait extends Capteur{ + + protected DoubleProperty temperature = new SimpleDoubleProperty(); + + public CapteurTemperatureAbstrait(String nom, double temperature) { + super(nom); + this.temperature.set(temperature); + } + public DoubleProperty temperatureProperty(){ + return temperature; + } + private void setTemperature(double temperature){ + this.temperature.set(temperature); + } + public abstract double getTemperature(); + public abstract ObservableList getListCapteurs() throws NoSuchMethodException; + + +} diff --git a/src/models/capteurs/CapteurTemperatureManuel.java b/src/models/capteurs/CapteurTemperatureManuel.java new file mode 100644 index 0000000..49566ef --- /dev/null +++ b/src/models/capteurs/CapteurTemperatureManuel.java @@ -0,0 +1,12 @@ +package models.capteurs; + +public class CapteurTemperatureManuel extends CapteurTemperature{ + + public CapteurTemperatureManuel(String nom, double temperature) { + super(nom, temperature, null, null); + } + public void setTemperature(double temperature){ + setTemperature(temperature); + } + +} diff --git a/src/models/capteurs/CapteurTemperatureVirtuel.java b/src/models/capteurs/CapteurTemperatureVirtuel.java new file mode 100644 index 0000000..4fd7f67 --- /dev/null +++ b/src/models/capteurs/CapteurTemperatureVirtuel.java @@ -0,0 +1,74 @@ +package models.capteurs; + +import javafx.beans.property.ListProperty; +import javafx.beans.property.SimpleListProperty; +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import models.generateurs.GenerateurAleatoire; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class CapteurTemperatureVirtuel extends CapteurTemperatureAbstrait{ + + private Map> ListCapteur = new HashMap<>(); + private ObservableList ListCapteurObserve = FXCollections.observableArrayList(); + public ListProperty listeCapteur = new SimpleListProperty<>(ListCapteurObserve); + + public CapteurTemperatureVirtuel(String nom, double temperature) { + super(nom, temperature); + } + + public List getCapteur(){ + List list = new ArrayList<>(); + for(Map.Entry> valeur : ListCapteur.entrySet()){ + valeur.getValue().forEach(list::add); + } + return list; + } + + public void AjouterUnCapteur(CapteurTemperatureAbstrait capteur, Integer poids){ + if(ListCapteur.containsKey(poids)){ + ListCapteur.get(poids).add(capteur); + ListCapteurObserve.add(capteur); + }else { + ListCapteur.put(poids, new ArrayList<>()); + ListCapteur.get(poids).add(capteur); + ListCapteurObserve.add(capteur); + } + } + public void supprimerCapteur(CapteurTemperatureAbstrait capteur){ + ListCapteurObserve.remove(capteur); + for(Map.Entry> valeur : ListCapteur.entrySet()){ + if(valeur.getValue().contains(capteur)){ + valeur.getValue().remove(capteur); + } + } + } + private double calculMoyenne(){ + double SommeDesPoids = 0; + double SommeDesTemperatures = 0; + double Moyenne = 0; + for (Map.Entry> valeur : ListCapteur.entrySet()){ + for (CapteurTemperatureAbstrait capteur : valeur.getValue()){ + SommeDesPoids += valeur.getKey(); + SommeDesTemperatures += (capteur.temperatureProperty().getValue() * valeur.getKey()); + } + } + Moyenne = SommeDesTemperatures/SommeDesPoids; + return Moyenne; + } + public void MiseAjourTemperature() {temperatureProperty().setValue(calculMoyenne());} + + @Override + public double getTemperature() { + return temperatureProperty().getValue(); + } + + @Override + public ObservableList getListCapteurs() throws NoSuchMethodException { + return ListCapteurObserve; + } +} diff --git a/src/models/generateurs/GenerateurAleatoire.java b/src/models/generateurs/GenerateurAleatoire.java new file mode 100644 index 0000000..1ee4c23 --- /dev/null +++ b/src/models/generateurs/GenerateurAleatoire.java @@ -0,0 +1,17 @@ +package models.generateurs; + +import java.util.Random; + +public class GenerateurAleatoire implements StrategieTemperatureGenere { + + + @Override + public double compute(double temperature) { + Random random = new Random(); + final int minTemperatureEnFrance = -40; + final int maxTemeperatureEnFrance = 55; + double temperatureGenere; + temperatureGenere = minTemperatureEnFrance + random.nextDouble() * (maxTemeperatureEnFrance - minTemperatureEnFrance); + return temperatureGenere; + } +} diff --git a/src/models/generateurs/GenerateurParVariation.java b/src/models/generateurs/GenerateurParVariation.java new file mode 100644 index 0000000..43be6e0 --- /dev/null +++ b/src/models/generateurs/GenerateurParVariation.java @@ -0,0 +1,38 @@ +package models.generateurs; + +import java.util.Random; + +public class GenerateurParVariation implements StrategieTemperatureGenere{ + private final double valeurVariable; + + public GenerateurParVariation(double valeurVariable) { + this.valeurVariable = valeurVariable; + } + + @Override + public double compute(double temperature) { + Random random = new Random(); + double variation = random.nextDouble() * valeurVariable; + int signe = random.nextInt(2); + double temperatureGenere; + if(signe == 0){ + temperatureGenere = temperature - variation; + } + else { + temperatureGenere = temperature + variation; + } + + if(temperatureGenere < -40){ + + return 40; + + } else if (temperatureGenere > 54) { + + return 54; + + } + else { + return temperatureGenere; + } + } +} diff --git a/src/models/generateurs/GeneratureParIntervalle.java b/src/models/generateurs/GeneratureParIntervalle.java new file mode 100644 index 0000000..24eace6 --- /dev/null +++ b/src/models/generateurs/GeneratureParIntervalle.java @@ -0,0 +1,20 @@ +package models.generateurs; + +import java.util.Random; + +public class GeneratureParIntervalle implements StrategieTemperatureGenere{ + private final double valeurIntervalleMax; + private final double valeurIntervalMin; + + public GeneratureParIntervalle(double valMaxInterval, double valMinInterval){ + valeurIntervalleMax = valMaxInterval; + valeurIntervalMin = valMinInterval; + } + @Override + public double compute(double temperature) { + double temperatureGenere; + Random random = new Random(); + temperatureGenere = valeurIntervalMin + random.nextDouble() * (valeurIntervalleMax - valeurIntervalMin); + return temperatureGenere; + } +} diff --git a/src/models/generateurs/StrategieTemperatureGenere.java b/src/models/generateurs/StrategieTemperatureGenere.java new file mode 100644 index 0000000..405a719 --- /dev/null +++ b/src/models/generateurs/StrategieTemperatureGenere.java @@ -0,0 +1,5 @@ +package models.generateurs; + +public interface StrategieTemperatureGenere { + abstract double compute(double temperature); +} diff --git a/src/views/cellules/CelluleArbre.java b/src/views/cellules/CelluleArbre.java new file mode 100644 index 0000000..54905f1 --- /dev/null +++ b/src/views/cellules/CelluleArbre.java @@ -0,0 +1,53 @@ +package views.cellules; + +import javafx.fxml.FXML; +import javafx.scene.control.TreeCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.layout.VBox; +import javafx.scene.text.Text; +import models.capteurs.CapteurTemperatureAbstrait; +import models.capteurs.CapteurTemperatureVirtuel; + +public class CelluleArbre extends TreeCell { + + @FXML + private ImageView imageView; + @FXML + private HBox hBox; + @FXML + private VBox vBox; + + @FXML + private Text nomDuCapteur = new Text(); + + @FXML + private Text Degretemperature = new Text(); + + protected void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + if(!empty) { + hBox = new HBox(); + vBox = new VBox(); + imageView = new ImageView(); + imageView.setFitWidth(30); + imageView.setFitHeight(30); + if(item instanceof CapteurTemperatureVirtuel) { + imageView.setImage(new Image("/images/multi_captor_icon.png")); + } else { + imageView.setImage(new Image("/images/captor_icon.png")); + } + nomDuCapteur.textProperty().bind(((CapteurTemperatureAbstrait)item).nomProperty()); + Degretemperature.textProperty().bind(((CapteurTemperatureAbstrait)item).temperatureProperty().asString()); + vBox.getChildren().addAll(nomDuCapteur, Degretemperature); + hBox.getChildren().addAll(imageView, vBox); + setGraphic(hBox); + } else { + nomDuCapteur.textProperty().unbind(); + Degretemperature.textProperty().unbind(); + setGraphic(null); + } + + } +} diff --git a/src/views/cellules/CelluleId.java b/src/views/cellules/CelluleId.java new file mode 100644 index 0000000..f3ad63f --- /dev/null +++ b/src/views/cellules/CelluleId.java @@ -0,0 +1,24 @@ +package views.cellules; + +import javafx.fxml.FXML; +import javafx.scene.control.TableCell; +import javafx.scene.text.Text; + +public class CelluleId extends TableCell { + + @FXML + Text text; + + protected void updateItem(Object objet, boolean empty){ + super.updateItem(objet, empty); + + if(!empty) { + text = new Text(); + text.setText(String.valueOf(objet)); + setGraphic(text); + + } else { + setGraphic(null); + } + } +} diff --git a/src/views/cellules/CelluleListVue.java b/src/views/cellules/CelluleListVue.java new file mode 100644 index 0000000..bbc5431 --- /dev/null +++ b/src/views/cellules/CelluleListVue.java @@ -0,0 +1,49 @@ +package views.cellules; + +import javafx.fxml.FXML; +import javafx.scene.control.TextField; +import javafx.scene.control.TreeCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.layout.HBox; +import javafx.scene.text.Text; +import models.capteurs.CapteurTemperatureAbstrait; +import models.capteurs.CapteurTemperatureVirtuel; + +public class CelluleListVue extends TreeCell { + + @FXML + ImageView imageView; + + @FXML + HBox hBox; + + @FXML + private Text idDuCapteur = new Text(); + + @FXML + private TextField PoidsDuCapteur = new TextField(); + + @Override + protected void updateItem(Object item, boolean empty) { + super.updateItem(item, empty); + if(!empty) { + hBox = new HBox(); + imageView = new ImageView(); + imageView.setFitWidth(30); + imageView.setFitHeight(30); + if(item instanceof CapteurTemperatureVirtuel) { + imageView.setImage(new Image("/images/multi_captor_icon.png")); + } else { + imageView.setImage(new Image("/images/captor_icon.png")); + } + + idDuCapteur.setText(String.valueOf(((CapteurTemperatureAbstrait)item).getId())); + hBox.getChildren().addAll(imageView, PoidsDuCapteur, idDuCapteur); + setGraphic(hBox); + } else { + setGraphic(null); + } + + } +} diff --git a/src/views/cellules/CellulePoids.java b/src/views/cellules/CellulePoids.java new file mode 100644 index 0000000..726a6d0 --- /dev/null +++ b/src/views/cellules/CellulePoids.java @@ -0,0 +1,25 @@ +package views.cellules; + +import javafx.fxml.FXML; +import javafx.scene.control.TableCell; +import javafx.scene.control.TextField; + +public class CellulePoids extends TableCell { + + @FXML + TextField textField; + + protected void updateItem(Object objet, boolean empty){ + super.updateItem(objet, empty); + + if(!empty) { + textField = new TextField(); + textField.setText("objet.toString()"); + setGraphic(textField); + + } else { + setGraphic(null); + } + } + +} diff --git a/src/views/cellules/CelluleType.java b/src/views/cellules/CelluleType.java new file mode 100644 index 0000000..5c18616 --- /dev/null +++ b/src/views/cellules/CelluleType.java @@ -0,0 +1,35 @@ +package views.cellules; + +import javafx.fxml.FXML; +import javafx.scene.control.TableCell; +import javafx.scene.control.TextField; +import javafx.scene.control.TreeCell; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import models.capteurs.CapteurTemperatureVirtuel; + +public class CelluleType extends TableCell { + + @FXML + ImageView imageView; + + protected void updateItem(Object objet, boolean empty){ + super.updateItem(objet, empty); + + if(!empty) { + imageView = new ImageView(); + imageView.setFitHeight(25); + imageView.setFitWidth(25); + if(objet instanceof CapteurTemperatureVirtuel) { + imageView.setImage(new Image("/images/multi_captor_icon.png")); + } else { + imageView.setImage(new Image("/images/captor_icon.png")); + } + + setGraphic(imageView); + + } else { + setGraphic(null); + } + } +} diff --git a/src/views/fabriques/FabriqueVueCapteurTemperatureAbstrait.java b/src/views/fabriques/FabriqueVueCapteurTemperatureAbstrait.java new file mode 100644 index 0000000..42aaf97 --- /dev/null +++ b/src/views/fabriques/FabriqueVueCapteurTemperatureAbstrait.java @@ -0,0 +1,41 @@ +package views.fabriques; + +import javafx.collections.ListChangeListener; +import models.capteurs.CapteurTemperature; +import models.capteurs.CapteurTemperatureAbstrait; +import models.generateurs.StrategieTemperatureGenere; +import views.vues.CapteurTemperatureAbstraitVue; + +public class FabriqueVueCapteurTemperatureAbstrait { + + public static CapteurTemperatureAbstraitVue from(CapteurTemperatureAbstrait root) { + CapteurTemperatureAbstraitVue retour = new CapteurTemperatureAbstraitVue(root); + + plonger(root, retour); + + try { + root.getListCapteurs().addListener(new ListChangeListener() { + @Override + public void onChanged(Change c) { + while(c.next()) { + c.getAddedSubList().forEach(o -> { + retour.getChildren().add(FabriqueVueCapteurTemperatureAbstrait.from(o)); + }); + } + plonger(root, retour); + } + }); + } catch (NoSuchMethodException e) {} + + return retour; + } + + public static void plonger(CapteurTemperatureAbstrait root, CapteurTemperatureAbstraitVue retour) { + try { + root.getListCapteurs().forEach(e -> { + retour.getChildren().add(FabriqueVueCapteurTemperatureAbstrait.from(e)); + }); + } catch (NoSuchMethodException e) {} + + } +} diff --git a/src/views/fenetre/FenetreImage.java b/src/views/fenetre/FenetreImage.java new file mode 100644 index 0000000..c21572b --- /dev/null +++ b/src/views/fenetre/FenetreImage.java @@ -0,0 +1,59 @@ +package views.fenetre; + +import javafx.fxml.FXML; +import javafx.scene.control.Button; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import models.Visualisateur; +import models.capteurs.CapteurTemperatureAbstrait; + +public class FenetreImage extends Visualisateur { + + private final int nuageux = 25; + private final int froid = 0; + + + @FXML + private ImageView imageView; + + @FXML + private Text nomDuCapteur; + + @FXML + private Button bouton; + public FenetreImage(CapteurTemperatureAbstrait capteur) { + super(capteur); + } + + @FXML + public void boutonFermer() { + Stage stage = (Stage) imageView.getScene().getWindow(); + stage.close(); + } + + + + + private void DetermineImage() { + String imageRessource; + if(capteur.getTemperature() <= froid) { + imageRessource = "froid"; + } else if (capteur.getTemperature() <= nuageux) { + imageRessource = "nuageux"; + } else { + imageRessource = "chaud"; + } + if(imageView.getImage() == null || !imageView.getImage().getUrl().endsWith(imageRessource+".jpg")) { + imageView.setImage(new Image("/images/"+imageRessource+".jpg")); + } + + } + + public void initialize() { + nomDuCapteur.textProperty().bind(capteur.nomProperty()); + DetermineImage(); + capteur.temperatureProperty().addListener((__, ___, newValue) -> DetermineImage()); + } +} diff --git a/src/views/fenetre/FenetreMenu.java b/src/views/fenetre/FenetreMenu.java new file mode 100644 index 0000000..94df748 --- /dev/null +++ b/src/views/fenetre/FenetreMenu.java @@ -0,0 +1,206 @@ +package views.fenetre; + +import DonneePersistante.Stub; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.HBox; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import models.TachePeriodique; +import models.capteurs.CapteurTemperature; +import models.capteurs.CapteurTemperatureAbstrait; +import models.capteurs.CapteurTemperatureVirtuel; +import models.generateurs.GenerateurAleatoire; +import models.generateurs.GenerateurParVariation; +import models.generateurs.GeneratureParIntervalle; +import views.cellules.CelluleArbre; +import views.cellules.CelluleId; +import views.cellules.CellulePoids; +import views.cellules.CelluleType; +import views.fabriques.FabriqueVueCapteurTemperatureAbstrait; +import java.io.IOException; + +public class FenetreMenu { + private CapteurTemperatureAbstrait capteur; + + @FXML + private Button boutonDuSlider; + + @FXML + private TextField nomDuCapteur; + + @FXML + private Text temperature; + + @FXML + private Text idDuCpateur; + @FXML + private TreeView treeView; + + @FXML + private HBox frequence; + + @FXML + private HBox strategie; + + @FXML + private ComboBox comboBox; + + @FXML + private Spinner spinner; + + @FXML + private ToggleButton toggleButton; + @FXML + private TableView tableView; + @FXML + private TableColumn tableId; + + @FXML + private TableColumn> tablePoids; + + @FXML + private TableColumn> tableType; + + private ObservableList listeTableView = FXCollections.observableArrayList(); + + + + @FXML + public void boutonSlider() throws IOException { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/FXML/FenetreThermometre.fxml")); + loader.setController(new FenetreThermometre(treeView.getSelectionModel().getSelectedItem().getValue())); + Parent root = loader.load(); + Stage stage = new Stage(); + stage.initOwner(boutonDuSlider.getScene().getWindow()); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + @FXML + public void boutonImage(ActionEvent e) throws IOException { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/FXML/FenetreImage.fxml")); + loader.setController(new FenetreImage(treeView.getSelectionModel().getSelectedItem().getValue())); + Parent root = loader.load(); + Stage stage = new Stage(); + stage.initOwner(((Button)e.getSource()).getScene().getWindow()); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.show(); + } + + @FXML + public void boutonFermer() { + Stage stage = (Stage) nomDuCapteur.getScene().getWindow(); + stage.close(); + } + + private void MiseAjourCapteur(){ + if(capteur != null){ + unbindPropriété(); + } + bindPropriété(); + updateInfoCapteur(); + } + + + private void unbindPropriété(){ + nomDuCapteur.textProperty().unbindBidirectional(capteur.nomProperty()); + temperature.textProperty().unbind(); + if(capteur instanceof CapteurTemperature){ + toggleButton.selectedProperty().unbindBidirectional(((CapteurTemperature) capteur).enFonctionnementProperty()); + spinner.getValueFactory().valueProperty().unbindBidirectional(((CapteurTemperature) capteur).frequenceProperty().asObject()); + } + } + private void bindPropriété(){ + capteur = treeView.getSelectionModel().getSelectedItem().getValue(); + nomDuCapteur.textProperty().bindBidirectional(capteur.nomProperty()); + temperature.textProperty().bind(capteur.temperatureProperty().asString()); + idDuCpateur.textProperty().setValue(String.valueOf(capteur.getId())); + if(capteur instanceof CapteurTemperature){ + spinner.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(0,60,1)); + spinner.getValueFactory().valueProperty().bindBidirectional(((CapteurTemperature) capteur).frequenceProperty().asObject()); + toggleButton.selectedProperty().bindBidirectional(((CapteurTemperature) capteur).enFonctionnementProperty()); + } + } + private void updateInfoCapteur(){ + if(capteur instanceof CapteurTemperature){ + strategie.setVisible(true); + if(((CapteurTemperature) capteur).getStrategieGeneration() != null){ + + frequence.setVisible(true); + toggleButton.setVisible(true); + + } else { + frequence.setVisible(false); + toggleButton.setVisible(false); + } + } else { + strategie.setVisible(false); + frequence.setVisible(false); + toggleButton.setVisible(false); + } + if(capteur instanceof CapteurTemperatureVirtuel) { + + tableView.setVisible(true); + } else { + var strat = (((CapteurTemperature) capteur).getStrategieGeneration() != null) ? ((CapteurTemperature) capteur).getStrategieGeneration().toString() : "Manuel"; + comboBox.getSelectionModel().select(strat); + tableView.setVisible(false); + } + } + + + + private void ChangementDeStrategie(String strategieGeneration){ + var capteurTemperature = treeView.getSelectionModel().getSelectedItem().getValue(); + if(capteurTemperature instanceof CapteurTemperature){ + if(strategieGeneration.equals("Aléatoire")){ + ((CapteurTemperature) capteurTemperature).setStrategieGeneration(new GenerateurAleatoire()); + } else if (strategieGeneration.equals("Intervalle")) { + ((CapteurTemperature) capteurTemperature).setStrategieGeneration(new GeneratureParIntervalle(-40, 55)); + } else if (strategieGeneration.equals("Variation")) { + ((CapteurTemperature) capteurTemperature).setStrategieGeneration(new GenerateurParVariation(8)); + } else if (strategieGeneration.equals("Manuel")) { + ((CapteurTemperature) capteurTemperature).setStrategieGeneration(null); + + } + } + } + + public void initialize() { + ObservableList listeStratGen = FXCollections.observableArrayList(); + listeStratGen.add("Aléatoire"); + listeStratGen.add("Intervalle"); + listeStratGen.add("Variation"); + listeStratGen.add("Manuel"); + + + comboBox.setItems(listeStratGen); + + + treeView.setCellFactory(__ -> new CelluleArbre()); + tableId.setCellFactory(__ -> new CelluleId()); + tableType.setCellFactory(__ -> new CelluleType()); + tablePoids.setCellFactory(__ -> new CellulePoids()); + + var TachePeriodique = new TachePeriodique(); + + var root = FabriqueVueCapteurTemperatureAbstrait.from(Stub.chargerArbre(TachePeriodique)); + + treeView.getSelectionModel().getSelectedItems().addListener((ListChangeListener>) c -> MiseAjourCapteur()); + spinner.setValueFactory(new SpinnerValueFactory.IntegerSpinnerValueFactory(0,30,1)); + comboBox.setOnAction(actionEvent -> ChangementDeStrategie(comboBox.getValue())); + treeView.setRoot(root); + treeView.setShowRoot(false); + toggleButton.setText("arrêter"); + } +} \ No newline at end of file diff --git a/src/views/fenetre/FenetreThermometre.java b/src/views/fenetre/FenetreThermometre.java new file mode 100644 index 0000000..2327554 --- /dev/null +++ b/src/views/fenetre/FenetreThermometre.java @@ -0,0 +1,42 @@ +package views.fenetre; + +import javafx.fxml.FXML; +import javafx.scene.control.ListView; +import javafx.scene.control.Slider; +import javafx.scene.text.Text; +import javafx.stage.Stage; +import models.Visualisateur; +import models.capteurs.CapteurTemperatureAbstrait; + +public class FenetreThermometre extends Visualisateur { + + @FXML + private Text valTemperature; + + @FXML + private Text nomDuCapteur; + + @FXML + private Slider slider; + + @FXML + private ListView listVue; + + + public FenetreThermometre(CapteurTemperatureAbstrait capteur) { + super(capteur); + } + + @FXML + public void butonFermer(){ + + Stage stage = (Stage) slider.getScene().getWindow(); + stage.close(); + } + + public void initialize() { + slider.valueProperty().bindBidirectional(capteur.temperatureProperty()); + valTemperature.textProperty().bind(capteur.temperatureProperty().asString()); + nomDuCapteur.textProperty().bind((capteur.nomProperty())); + } +} diff --git a/src/views/vues/CapteurTemperatureAbstraitVue.java b/src/views/vues/CapteurTemperatureAbstraitVue.java new file mode 100644 index 0000000..72b9a82 --- /dev/null +++ b/src/views/vues/CapteurTemperatureAbstraitVue.java @@ -0,0 +1,14 @@ +package views.vues; + +import javafx.scene.control.TreeItem; +import models.capteurs.CapteurTemperatureAbstrait; + +public class CapteurTemperatureAbstraitVue extends TreeItem { + + protected CapteurTemperatureAbstrait capteurTemperatureAbstrait; + + public CapteurTemperatureAbstraitVue(CapteurTemperatureAbstrait capteur) { + super(capteur); + capteurTemperatureAbstrait = capteur; + } +} diff --git a/src/views/vues/CapteurTemperatureVirtuelVue.java b/src/views/vues/CapteurTemperatureVirtuelVue.java new file mode 100644 index 0000000..fea7ab7 --- /dev/null +++ b/src/views/vues/CapteurTemperatureVirtuelVue.java @@ -0,0 +1,26 @@ +package views.vues; + +import javafx.collections.FXCollections; +import javafx.collections.ObservableList; +import javafx.scene.control.TreeItem; +import models.capteurs.CapteurTemperatureAbstrait; + +public class CapteurTemperatureVirtuelVue extends CapteurTemperatureAbstraitVue{ + + private ObservableList> observableListCapteurtemperatureAbstrait = FXCollections.observableArrayList(); + + public CapteurTemperatureVirtuelVue(CapteurTemperatureAbstrait capteur) { + super(capteur); + } + + @Override + public boolean isLeaf() { + return true; + } + + @Override + public ObservableList> getChildren() { + System.out.println(observableListCapteurtemperatureAbstrait.stream().count()); + return observableListCapteurtemperatureAbstrait; + } +} diff --git a/src/views/vues/CapteurTemperatureVue.java b/src/views/vues/CapteurTemperatureVue.java new file mode 100644 index 0000000..3c283bb --- /dev/null +++ b/src/views/vues/CapteurTemperatureVue.java @@ -0,0 +1,25 @@ +package views.vues; + +import javafx.collections.ObservableList; +import javafx.scene.control.TreeItem; +import models.capteurs.CapteurTemperatureAbstrait; + +public class CapteurTemperatureVue extends CapteurTemperatureAbstraitVue{ + + public CapteurTemperatureVue(CapteurTemperatureAbstrait capteur) { + + super(capteur); + } + + @Override + public boolean isLeaf() { + + return false; + } + + @Override + public ObservableList> getChildren() { + + throw new RuntimeException(); + } +}