From 439e8c54bbe8a1940635c489ba07993b0d3ca289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?No=C3=A9=20Garnier?= Date: Sun, 22 Jan 2023 22:22:13 +0100 Subject: [PATCH] =?UTF-8?q?Affichage=20et=20binding=20de=20plusieur=20capt?= =?UTF-8?q?eur=20+=20Ajout=20de=20capteur=20+=20Gestion=20et=20impl=C3=A9m?= =?UTF-8?q?entation=20des=20diff=C3=A9rent=20type=20de=20capteur=20(Abstra?= =?UTF-8?q?it,=20Zone,=20Normal)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- out/production/Capteur/fxml/ImageWindow.fxml | 73 +++++++---- out/production/Capteur/fxml/MainWindow.fxml | 24 +++- .../Capteur/fxml/SpinnerWindow.fxml | 33 ++++- out/production/Capteur/launcher/Console.class | Bin 1166 -> 1166 bytes .../Capteur/launcher/LaunchMeteo.class | Bin 1310 -> 1319 bytes out/production/Capteur/model/Capteur.class | Bin 1888 -> 2965 bytes out/production/Capteur/model/Thread.class | Bin 255 -> 0 bytes .../Capteur/view/AfficheurTemperature.class | Bin 1434 -> 1457 bytes out/production/Capteur/view/ImageWindow.class | Bin 2089 -> 4205 bytes out/production/Capteur/view/MainWindow.class | Bin 1513 -> 4763 bytes .../Capteur/view/SaisiseurTemperature.class | Bin 1566 -> 1589 bytes .../Capteur/view/SpinnerWindow.class | Bin 2130 -> 3047 bytes .../Capteur/view/Visualisateur.class | Bin 572 -> 973 bytes resource/fxml/DetailWindow.fxml | 98 ++++++++++++++ resource/fxml/DetailZoneWindow.fxml | 79 +++++++++++ resource/fxml/ImageWindow.fxml | 73 +++++++---- resource/fxml/MainWindow.fxml | 24 +++- resource/fxml/SpinnerWindow.fxml | 33 ++++- src/launcher/Console.java | 2 - src/launcher/LaunchMeteo.java | 2 +- src/model/Capteur.java | 65 +++++---- src/model/CapteurAbstrait.java | 38 ++++++ src/model/CapteurZone.java | 73 +++++++++++ src/model/GenerateurAleatoire.java | 2 +- src/model/GenerateurManuel.java | 10 ++ src/model/GenerateurRealiste.java | 42 ++++++ src/model/Thread.java | 4 - src/view/DetailWindow.java | 120 +++++++++++++++++ src/view/DetailZoneWindow.java | 110 ++++++++++++++++ src/view/ImageWindow.java | 48 +++++-- src/view/MainWindow.java | 123 ++++++++++++++---- src/view/SpinnerWindow.java | 15 ++- src/view/Visualisateur.java | 11 +- 33 files changed, 944 insertions(+), 158 deletions(-) delete mode 100644 out/production/Capteur/model/Thread.class create mode 100644 resource/fxml/DetailWindow.fxml create mode 100644 resource/fxml/DetailZoneWindow.fxml create mode 100644 src/model/CapteurAbstrait.java create mode 100644 src/model/CapteurZone.java create mode 100644 src/model/GenerateurManuel.java create mode 100644 src/model/GenerateurRealiste.java delete mode 100644 src/model/Thread.java create mode 100644 src/view/DetailWindow.java create mode 100644 src/view/DetailZoneWindow.java diff --git a/out/production/Capteur/fxml/ImageWindow.fxml b/out/production/Capteur/fxml/ImageWindow.fxml index 346fc80..1bf5289 100644 --- a/out/production/Capteur/fxml/ImageWindow.fxml +++ b/out/production/Capteur/fxml/ImageWindow.fxml @@ -5,48 +5,67 @@ - + - - + + - + + - + + + + - - - - - - - - - - - + + + + - + - + + + + + diff --git a/out/production/Capteur/launcher/Console.class b/out/production/Capteur/launcher/Console.class index 57648dde83389e872296a6649a851944aecb0971..151a3e09145836555a14d40f4007502411b381bf 100644 GIT binary patch delta 55 zcmeC5t)XhH_^_c-jk_O)Z diff --git a/out/production/Capteur/model/Capteur.class b/out/production/Capteur/model/Capteur.class index 6099dd2aaa10aa9c2148293584a2026dbc297e12..5ea05fd9862413cde00c9ccf72b05b6f152340a4 100644 GIT binary patch literal 2965 zcma)8TXz#x6#h=rWYTncA*r-LfeHnZv=T&%KoEq6OCjafS{EqlG(ByHCNp6&LF)Z} zcP(H21^6gyNx8U|k3P8kA-?(t#P7^ZlL@qH*XmsMIs4n+-uv5U^84Qpe+6(1-zCt7 zh=z6@QN#qEs@QX~oEtZ)uBM;E#U2K=a}r6nCh z1tu`>3(Eo<7L-v=%L>s9x9&)RNIFwUKtr!0y+NQoUC7LIAcZ~+PwCi*eu1u*LS*Cfi~g_hv{S^@`fNVV>;Kz~?Hm+O{gP$d+U+H*w5i=gB>YSJwjvSM4R)mQz+ zmvkIgL8D$!wS8PiL0LLX%ax8(ueu4G!f6d>bWA9j46m)v)}E6%!>P2+=_o3^xMjQM zyeS>8w@Hr81sxZ0i94M-DeX!JatMYdA8vIcr39uht>I-IGb-;b0T-iMEt@67HEk<* zv23{Wwo_q90v9PZC(3C2i~Ok)ysG0>yrxnvOIcO5IIAY_b%AZo{!XkWFXv9)D#@xs zR@uC%!%#)&W_F=r(okYwo9?T81#;oe1Y%oX_n8^;8RywSAs0yjqIzF(p|LYYCSQ$m%#h@K*NVRKElTW zJDP1at(*3e%oRO+dKmLY$+aDxx1E*n+aF;O1WtZ{Gln%+mbKxcZ7*Y%KU~zP@s_qm|RyPtK5B=>>z7UlToTt$9_*B!>s%$MY0cv z+2wpFpRqZ?HQWu#0)@nx*m^c9h|cgxdW!Z5uAF9GXV`&rji4#+ zy@|Kz3-kx!mDuC7U(#?b(%Ytvh@jX9X;nMBv#judH<2rNqnVa3qe7@<-2r9<%k*o* c+jxg}rSW%(^$9-Z{};5V`Tr7M<6CU{2W(TNH2?qr literal 1888 zcma)+ZFAE`6ot<^j-ANLi}OYxKmuurtONwK&;~;w#0{7l+G&`~@C_wdTy<)gaK71V>)@@s*U$>N`=0NG8wx{KX?GMO7|p{lQGls1mV|G)hoO!Fg%R&yb3cr9 zLqSy~cHG2-1ZKPgnHEhzj^2EY1eN% zhe7L52jP*k<24T(y3&e>^=-OXz&Xt4ao)rQEGWz;JWsT*16PnJ%dvi>P^`%;6J-={U70^cv1)5V%J* zuN@j##*ma@#e{{D!bC&2(^3m;oApmh67Q2OWeHz3v4-ocZo8Y!h1yw}mJRN3Ox%=q zj`*$6d*kUKkK3$wuiW27zMr($u}*j4Z1K`AtF%Rr5WeR5`bE^-)4|I`YO2=ScN@EI z;K@8)%!c24Ol%_6Os!H@7_RHEdJs3E%2_*^Wv!~5k>ke~;*lAvbefOf86JP19e^(a z;}kg2YbzD{X#2RA;wSd13avoFo|`UG?aU4^mupaip_$h0hP0609O1Q9xJBCEL*zcQ_UpKa9`#{G78N`98$) zo_!2u|AKr6V|->`|BAf5+QFp#7iM0q{ed}!V_fWDkqgVOj`3*+*X*?p?4M)pJA7Ux z4Nyduce}u|r+K61F^dxBc-A?rb9R>zOUa4&0$*~*v*o{lJn|-tlF>Tf6GDfhd>giZ z!`M%J$v_Uv#fuBEpqT`uf(m8a=Zd7a!RU-c+Y3yrhbsSez#@}hiWTOPs4h}2E}|U# zfEuSkCf{>=KgjYxkcW7bZr*0J9BCv){T(-YFynDORtRHZl+}_NB|t_O$Vh9Xu!+Y5 zfEGUlS{n$oh0E#Y=V{}Maf4UV-VWfpNjKfXByRU{6}wzTday!Cg|DzZfXn`n>&`%~ zCwQ7}?sbgr>oZrjTMkL2|Km1f=>uwH{Dw<0D$nVxNhVR{0Yfs$Sm`3vTu$ Nq*5G(uNj&_?LVB@QpW%Q diff --git a/out/production/Capteur/model/Thread.class b/out/production/Capteur/model/Thread.class deleted file mode 100644 index 74ff14a25d3f760fa4788136bd46cf56b56b8c32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 255 zcmYk0Jr06E5QX3HBZ~MFZ(yeuasZ7MCRRiX4gCTeU4xJycrPmx3lHF-jI(IrZt`}% zH`$r@dOw~3mgu`MU^=io*k};?Cvg>iDzbyWjZQKy35~hRRJkCSqjBhI@9q j7_>J6)iE)c0!c0)&A=eYpv)k|UR`W9Do|* delta 124 zcmdnUJ&St-C!@TGhNe$eVp*boPGVlVesD=qW?s5A7lQN$@YwHn@=-lGb{QturM$(Ffb@?Vi45Y!oUv1yxSPWA(ZS62F1xytWx|6 R3_=WMKvg^twUe7!^#Hbg7?l73 diff --git a/out/production/Capteur/view/ImageWindow.class b/out/production/Capteur/view/ImageWindow.class index aee12fa5b5c41378d1f9729385877164bd486bbd..ed224caa08e7fc00e23569663add290621d5e295 100644 GIT binary patch literal 4205 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 literal 1513 zcmZ{kYg5xe6o%g|Euo?1Qm&PYf`Tn5K@o37zhhfCa;NVm%8*~iK zur1fIO>L#(y0(>3aSLM##$&jRI}AfI+iQFo+KSxGNeV-MDt(#j*$Fp^y9!bP4>k8yN-n8lt_OoE%k5VgWD42ZNvTRp(g>97y zQLDkhY01~gv=E-y6a7TVfk*zKSFl;0MNKVD~)C*ty5L7ZyxRijdB}^W0A&~ z??9iBC0a2oUj%Q`6PJF;sdFfMiRd}n_d0qJucEVx#1Hh;pQ18eq%a2eTMsWTnAdnWe6P@MuHx;MEXVQ36LFh$W^Qn>~gWz zNvOpWTBlhG#m_OjM`C?dJj~W5{EWxw_~Q-ucz~Bh*}x`^uLu#Qd85}*f}x) diff --git a/out/production/Capteur/view/SaisiseurTemperature.class b/out/production/Capteur/view/SaisiseurTemperature.class index 710da952aaaa476f620bc77d81989edb021f22dc..5d0a4420bf93e9a785af6ec55ee109a285d526af 100644 GIT binary patch delta 146 zcmbQovz2E9C*x#mMk$%#lA_GK^njxLg4CjtN^33#IR<%l1_d4lMFyqGg^X@oTnrKn zDm)CT3~G}#7;QFhXI#MS8^plEz{tSBpt6ZUP-_bVI}r13V-VlLAPZqB16jKm)EOAI jF=%fDs$*iX1d?1pnt?%(L772_!3xOYftWFQA!{uFH8LBn delta 124 zcmdnWGmmEjC!@TGhNe$eVp*boPGVlVesD=qW?s5A7lQN$@YwHn@=+?U{>^JU}0cnU|>+(#2~1(g@GN2dABi$LnzrD42qNcS*7?D S7=#$CfU0;PYA5ettpxzhq8X6@ diff --git a/out/production/Capteur/view/SpinnerWindow.class b/out/production/Capteur/view/SpinnerWindow.class index 3038af9b5eaad0951335f4f6a5518073b6cc3c02..851aa15a8f3779e9da841976afd7ffe6cba035bc 100644 GIT binary patch delta 1283 zcmZXU>vI!j6vlsVHp#Zj(gA5JXt{_fO|3QHs2?aQW2zX%luD^o(Yh(y7)&;Gvx%*! z@rD_`6tKlumfN5}DOwv1pilRf7>?>Xmr&a)@^ZPg#=8^8YZ zbwF`*|Vxnu$kU5i1>3^axsabGKEn%R@T%D+Uf(4QqNfQ};^c%v9BB*sf>0nS8xc zu-(0$TXKroGf{&Enn95VOb+v)Oj)$OoOIRF{W*h&Y3e*;@+glfR)>8vWy>jMa*k&g zZC9Z;!qG>ji;C`au7CHkl%Wve36mo{sc7@65x!ze`mEfD+R)kMQJz#k%`-YjO`hd? z#RZ~R*Vfjof-TCA*|T1#$nz#Igoufqyv;iz`I3wU+j44|nWe(axqTGzLdg-m`l5M6_9(xlOJ<}{ zv)zUz>y&8i$caDWy-I!SuS@oJXqA$qP{TsHV$J$Hk^^gnZ_aUSH(R!9HM^!*_unoS zxJc%V$p$CnDZ7i}-EgbLz9%*o3a~6DYx2KXoE4a@{4To1YI2|8eX0MzKc1Xv9+TKr ztd!@4#Oa}(^{i%tcpDjH6ITk4?QAB?#pFpbMz8!7w#bI}aa^jd5k@e{hkPV9^g=w@ z9?AZgPXuR>%lVYg1UV~RKj#a<$;d$2is$vq7+6Kv-NVk`J<$%f!pDi>>TuTWicsLSNV{jTvVj-?1Q!+vFePd-1e$ zUXJ2K>qUi=WCccv?Go%|j2CvwjnI&%Ar_IlQ(i|XY$&2sEg{A@DW@1e5QsJ8ZWN0} G+W!TVWEn;P delta 493 zcmaivIZI?w5QV?j{o3by{e%`2w|3ld89Nc|z+e%F%Us6w@%%vTj!j5&U=h__pdj%Kr^RTUL@$bWYXr-PKSvHe@8r$ zbUAeU^w4V&HFu$0^Az+<+-?c?GvF}jGsLhtx0k}Bj5&<^OfYF)>|}VF8HZV)Ip$4g zXy*FTDYvWx^N?9(Y_~Q_nY04Z4k}6ziv_(hgn!M2TM$}QeaYOoTW8Cv$H`L6$EE<6 zLb53$suQD_Mt;#m2?srSr}hB+4{ZChIC>yu*sIZ zB*eMRj&zdh|6`ZX8G9PCHL$OHC^8vSB_Xtgxpn_(P0^X6PnnZqB*oN~8UfPIJt0(+ mL(RLJw6cai+nQq7RN^RCaw4@Borhb z5YK!RVm5JhB4STK+>k+zXRmZ5mcC*1LQFmyWoQ{gFw z>`NI)b-<9SH+ng2AZNm|aS1jRosiu zNL(e)m)__3Q!U;z6Kf$fWFhWS9)jc~wM(P$RaacxHIakv$-q3_+?q@Tv%29p^2Cvx zb-FfA`?^kgkH*db!yWnzJ$hvC(Ew-3-Y1(POY=)>olXu}MmE#@0rrhH1{$>LFkqoc zt0tfXwD5pz8V@OI%)lLr806b(eup{5<`i4MQFB{U>@2DBR1ql9_!d#7;nkGYIV_>f z6Z!tElhr;AJi=otpu0Svd|fEpYEE%|$*uoLDo^;z3U4;y)z^4}r^LbVjPeXT{|5#` B*2(|? delta 320 zcmX@hzK4bD)W2Q(7#JAr8DuAN>GN_ia4>MPGjQ=Ra5L~s4rR2_-$PYF` X45A8ZH^^O*3{pTd7#XC&CdvQ+L3Jh8 diff --git a/resource/fxml/DetailWindow.fxml b/resource/fxml/DetailWindow.fxml new file mode 100644 index 0000000..77e3a86 --- /dev/null +++ b/resource/fxml/DetailWindow.fxml @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resource/fxml/DetailZoneWindow.fxml b/resource/fxml/DetailZoneWindow.fxml new file mode 100644 index 0000000..1b74080 --- /dev/null +++ b/resource/fxml/DetailZoneWindow.fxml @@ -0,0 +1,79 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/resource/fxml/ImageWindow.fxml b/resource/fxml/ImageWindow.fxml index 346fc80..1bf5289 100644 --- a/resource/fxml/ImageWindow.fxml +++ b/resource/fxml/ImageWindow.fxml @@ -5,48 +5,67 @@ - + - - + + - + + - + + + + - - - - - - - - - - - + + + + - + - + + + + + diff --git a/src/launcher/Console.java b/src/launcher/Console.java index 5eb98cc..63dac69 100644 --- a/src/launcher/Console.java +++ b/src/launcher/Console.java @@ -5,8 +5,6 @@ import model.GenerateurAleatoire; import view.AfficheurTemperature; import view.SaisiseurTemperature; -import java.util.Random; - public class Console { public static void main(String[] args) { GenerateurAleatoire ga = new GenerateurAleatoire(-5,40); diff --git a/src/launcher/LaunchMeteo.java b/src/launcher/LaunchMeteo.java index 95ffea5..c174d52 100644 --- a/src/launcher/LaunchMeteo.java +++ b/src/launcher/LaunchMeteo.java @@ -16,7 +16,7 @@ public class LaunchMeteo extends Application { Parent root = FXMLLoader.load(getClass().getResource("/fxml/MainWindow.fxml")); Scene scene = new Scene(root); primaryStage.setScene(scene); - primaryStage.setTitle("Title"); + primaryStage.setTitle("Capteur JavaFX"); primaryStage.show(); } diff --git a/src/model/Capteur.java b/src/model/Capteur.java index 1ef99ba..c75fe00 100644 --- a/src/model/Capteur.java +++ b/src/model/Capteur.java @@ -1,43 +1,34 @@ package model; +import javafx.application.Platform; import javafx.beans.property.DoubleProperty; import javafx.beans.property.SimpleDoubleProperty; import java.util.ArrayList; -public class Capteur extends Observable implements Runnable{ - private static int idActuel; - private int id; - private String nom; - private DoubleProperty temperature; -// private Thread thread; +public class Capteur extends CapteurAbstrait implements Runnable{ + private Thread thread; private GenerateurStrategy strategy; public Capteur(String nom, GenerateurStrategy strategy) { - this.id = idActuel; - idActuel += 1; - this.nom = nom; + super(nom); this.temperature = new SimpleDoubleProperty(strategy.genereTemperature()); - this.lesObservateurs = new ArrayList<>(); this.strategy = strategy; + if (strategy.getClass().getSimpleName().equals("GenerateurManuel")) { + this.thread = null; + } + else{ + startThread(); + } } - - public int getId() { - return id; - } - - public void setId(int id) { - this.id = id; - } - - public String getNom() { - return nom; + public void startThread(){ + thread = new Thread(this); + thread.setDaemon(true); + thread.start(); } - - public void setNom(String nom) { - this.nom = nom; - this.notifier(); + public void stopThread(){ + thread.interrupt(); } public DoubleProperty getTemperature() { @@ -45,7 +36,7 @@ public class Capteur extends Observable implements Runnable{ } public void setTemperature(double temperature) { - this.temperature = new SimpleDoubleProperty(temperature); + this.temperature.set(temperature); this.notifier(); } @@ -55,6 +46,16 @@ public class Capteur extends Observable implements Runnable{ public void setStrategy(GenerateurStrategy strategy) { this.strategy = strategy; + if (thread != null){ + thread.interrupt(); + } + if (strategy.getClass().getSimpleName().equals("GenerateurManuel")) { + this.thread = null; + } + else{ + startThread(); + } + this.notifier(); } public void setGenerateur(GenerateurStrategy strategy){ @@ -62,6 +63,14 @@ public class Capteur extends Observable implements Runnable{ } @Override - public void run(){} - + public void run(){ + while (true) { + Platform.runLater(() -> setTemperature(this.strategy.genereTemperature())); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + } } diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java new file mode 100644 index 0000000..4d157c6 --- /dev/null +++ b/src/model/CapteurAbstrait.java @@ -0,0 +1,38 @@ +package model; + +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; + +import java.util.ArrayList; + +public abstract class CapteurAbstrait extends Observable { + protected static int idActuel; + protected int id; + protected StringProperty nom; + protected DoubleProperty temperature; + + public CapteurAbstrait(String nom) { + this.id = idActuel; + idActuel += 1; + this.nom = new SimpleStringProperty(nom); + this.lesObservateurs = new ArrayList<>(); + } + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public StringProperty getNom() { + return nom; + } + + public void setNom(String nom) { + this.nom = new SimpleStringProperty(nom); + this.notifier(); + } + public abstract DoubleProperty getTemperature(); +} diff --git a/src/model/CapteurZone.java b/src/model/CapteurZone.java new file mode 100644 index 0000000..19d1b5e --- /dev/null +++ b/src/model/CapteurZone.java @@ -0,0 +1,73 @@ +package model; + +import javafx.application.Platform; +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.IntegerProperty; +import javafx.beans.property.SimpleDoubleProperty; +import javafx.beans.property.SimpleIntegerProperty; + +import java.util.ArrayList; + +public class CapteurZone extends CapteurAbstrait implements Runnable{ + private Thread thread; + private ArrayList lesCapteurs; + + public CapteurZone(String nom, ArrayList lesCapteurs) { + super(nom); + this.temperature = new SimpleDoubleProperty(0); + this.lesCapteurs = lesCapteurs; + thread = new Thread(this); + thread.setDaemon(true); + thread.start(); + calculTemperature(); + } + + @Override + public void run(){ + while (true) { + Platform.runLater(() -> calculTemperature()); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + break; + } + } + } + + @Override + public DoubleProperty getTemperature() { + return this.temperature; + } + private void calculTemperature(){ + double temperature = 0; + for (Capteur capteur : lesCapteurs){ + temperature += capteur.getTemperature().get(); + } + this.temperature.set(temperature/lesCapteurs.size()); + } +// private void genereTemperature(){ +// for (Capteur capteur : lesCapteurs){ +// capteur.setTemperature(capteur.getStrategy().genereTemperature()); +// } +// calculTemperature(); +// this.notifier(); +// } + public void addCapteur(Capteur capteur){ + lesCapteurs.add(capteur); + calculTemperature(); + } + public void removeCapteur(Capteur capteur){ + lesCapteurs.remove(capteur); + calculTemperature(); + } + public ArrayList getLesCapteurs() { + return lesCapteurs; + } + public void setLesCapteurs(ArrayList lesCapteurs) { + this.lesCapteurs = lesCapteurs; + calculTemperature(); + } + public IntegerProperty getNbCapteurs(){ + return new SimpleIntegerProperty(lesCapteurs.size()); + } +} diff --git a/src/model/GenerateurAleatoire.java b/src/model/GenerateurAleatoire.java index 5a709b0..636e632 100644 --- a/src/model/GenerateurAleatoire.java +++ b/src/model/GenerateurAleatoire.java @@ -39,4 +39,4 @@ public class GenerateurAleatoire implements GenerateurStrategy{ temperature = bornInf+random.nextDouble(bornSup-bornInf); return temperature; } -} +} \ No newline at end of file diff --git a/src/model/GenerateurManuel.java b/src/model/GenerateurManuel.java new file mode 100644 index 0000000..91647fb --- /dev/null +++ b/src/model/GenerateurManuel.java @@ -0,0 +1,10 @@ +package model; + +import java.util.Random; + +public class GenerateurManuel implements GenerateurStrategy{ + @Override + public double genereTemperature() { + return 0; + } +} \ No newline at end of file diff --git a/src/model/GenerateurRealiste.java b/src/model/GenerateurRealiste.java new file mode 100644 index 0000000..3413b6c --- /dev/null +++ b/src/model/GenerateurRealiste.java @@ -0,0 +1,42 @@ +package model; + +import java.util.Random; + +public class GenerateurRealiste implements GenerateurStrategy{ + private double bornInf; + private double bornSup; + private double temperature; + + public GenerateurRealiste() { + Random random = new Random(); + this.bornInf = -20; + this.bornSup = 40; + this.temperature = bornInf+random.nextDouble(bornSup-bornInf); + } + + public double getBornInf() { + return bornInf; + } + + public void setBornInf(double bornInf) { + this.bornInf = bornInf; + } + + public double getBornSup() { + return bornSup; + } + + public void setBornSup(double bornSup) { + this.bornSup = bornSup; + } + + @Override + public double genereTemperature() { + Random random = new Random(); + double inf, sup; + inf = -2; + sup = 2; + this.temperature += inf+random.nextDouble(sup-inf); + return this.temperature; + } +} \ No newline at end of file diff --git a/src/model/Thread.java b/src/model/Thread.java deleted file mode 100644 index 6250eb8..0000000 --- a/src/model/Thread.java +++ /dev/null @@ -1,4 +0,0 @@ -package model; - -public class Thread { -} diff --git a/src/view/DetailWindow.java b/src/view/DetailWindow.java new file mode 100644 index 0000000..a7b1963 --- /dev/null +++ b/src/view/DetailWindow.java @@ -0,0 +1,120 @@ +package view; + +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.stage.Stage; +import javafx.util.converter.NumberStringConverter; +import model.Capteur; +import model.GenerateurAleatoire; +import model.GenerateurManuel; +import model.GenerateurRealiste; + +import java.io.IOException; + +public class DetailWindow extends Visualisateur{ + @FXML + private Label nom; + @FXML + private Label id; + @FXML + private Label temperature; + @FXML + private Label strategy; + @FXML + private Button btnSpinner; + @FXML + private Button btnImage; + @FXML + private Button btnModifier; + @FXML + private TextField textFieldNom; + @FXML + private MenuButton menuStrategy; + @FXML + private MenuItem menuStrategyRandom; + protected Capteur capteur; + private GridPane layout; + + public DetailWindow(Capteur capteur) throws IOException { + this.capteur = capteur; + Stage stage = new Stage(); + layout = new GridPane(); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DetailWindow.fxml")); + loader.setRoot(this.layout); + loader.setController(this); + Parent root = loader.load(); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.setTitle(this.capteur.getNom().toString()); + stage.show(); + } + @FXML + public void initialize(){ + id.setText(new NumberStringConverter().toString(capteur.getId())); + nom.textProperty().bindBidirectional(this.capteur.getNom()); + String strategyName = this.capteur.getStrategy().getClass().getSimpleName(); + strategy.setText(strategyName); + if (! strategyName.equals("GenerateurManuel")){ + btnSpinner.setDisable(true); + } + temperature.textProperty().bindBidirectional(this.capteur.getTemperature() , new NumberStringConverter()); + } + + @FXML + private void clickButtonImage() throws Exception{ + ImageWindow Iw = new ImageWindow(this.capteur); + } + @FXML + private void clickButtonSpinner() throws Exception{ + SpinnerWindow Sw = new SpinnerWindow(this.capteur); + } + @FXML + private void clickButtonModifier() throws Exception{ + if (nom.isVisible() && strategy.isVisible()) { + textFieldNom.setText(nom.getText()); + textFieldNom.setVisible(true); + nom.setVisible(false); + menuStrategy.setText(strategy.getText()); + menuStrategy.setVisible(true); + } else { + nom.setText(textFieldNom.getText()); + String strategyName = menuStrategy.getText(); + if (strategyName.equals("GenerateurAleatoire")){ + this.capteur.setStrategy(new GenerateurAleatoire(-20,40)); + strategy.setText("GenerateurAleatoire"); + } else if (strategyName.equals("GenerateurRealiste")){ + this.capteur.setStrategy(new GenerateurRealiste()); + strategy.setText("GenerateurRealiste"); + } + else if (strategyName.equals("GenerateurManuel")){ + this.capteur.setStrategy(new GenerateurManuel()); + strategy.setText("GenerateurManuel"); + btnSpinner.setDisable(false); + } + textFieldNom.setVisible(false); + menuStrategy.setVisible(false); + nom.setVisible(true); + } + } + @FXML + private void clickMenuStrategyRandom() throws Exception{ + menuStrategy.setText("GenerateurAleatoire"); + } + @FXML + private void clickMenuStrategyReal() throws Exception{ + menuStrategy.setText("GenerateurRealiste"); + } + @FXML + private void clickMenuStrategyMan() throws Exception{ + menuStrategy.setText("GenerateurManuel"); + } + + @Override + public void update() { + temperature.textProperty().bindBidirectional(this.capteur.getTemperature() , new NumberStringConverter()); + } +} diff --git a/src/view/DetailZoneWindow.java b/src/view/DetailZoneWindow.java new file mode 100644 index 0000000..57b3af4 --- /dev/null +++ b/src/view/DetailZoneWindow.java @@ -0,0 +1,110 @@ +package view; + +import javafx.beans.property.SimpleStringProperty; +import javafx.collections.ObservableList; +import javafx.fxml.FXML; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.control.*; +import javafx.scene.layout.GridPane; +import javafx.stage.Stage; +import javafx.util.Callback; +import javafx.util.converter.NumberStringConverter; +import model.*; + +import java.io.IOException; + +public class DetailZoneWindow extends Visualisateur{ + private CapteurZone capteurZone; + private ObservableList lesCapteurs; + private GridPane layout; + @FXML + private Label nom; + @FXML + private Label id; + @FXML + private Label nbCapteurs; + @FXML + private Label temperature; + @FXML + private Button btnImage; + @FXML + private Button btnAjouter; + @FXML + private ListView listView; + + public DetailZoneWindow(CapteurZone capteurZone) throws IOException { + this.capteurZone = capteurZone; + Stage stage = new Stage(); + layout = new GridPane(); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DetailZoneWindow.fxml")); + loader.setRoot(this.layout); + loader.setController(this); + Parent root = loader.load(); + Scene scene = new Scene(root); + stage.setScene(scene); + stage.setTitle("this.capteur.getNom().toString()"); + stage.show(); + } + @FXML + public void initialize(){ + id.setText(new NumberStringConverter().toString(capteurZone.getId())); + nom.textProperty().bindBidirectional(this.capteurZone.getNom()); + nbCapteurs.textProperty().bindBidirectional(this.capteurZone.getNbCapteurs(), new NumberStringConverter()); + temperature.textProperty().bindBidirectional(this.capteurZone.getTemperature() , new NumberStringConverter()); + + lesCapteurs = listView.getItems(); + + listView.setCellFactory(new Callback, ListCell>() { + @Override + public ListCell call(ListView capteurListView) { + return new ListCell(){ + @Override + public void updateItem(CapteurAbstrait value, boolean empty) { + super.updateItem(value, empty); + if (value != null) { + textProperty().bind(new SimpleStringProperty(this, "", "") + .concat("[") + .concat(value.getId()) + .concat("] ") + .concat(value.getNom()) + .concat(" : ") + .concat(value.getTemperature().asString("%.2f°C"))); + } + } + }; + } + }); + + listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { + try { + if (lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()).getClass().getSimpleName().equals("CapteurZone")) { + DetailZoneWindow Dzw = new DetailZoneWindow((CapteurZone) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + else{ + DetailWindow Dw = new DetailWindow((Capteur) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + lesCapteurs.addAll(capteurZone.getLesCapteurs()); + } + @FXML + private void clickButtonImage() throws Exception{ + ImageWindow Iw = new ImageWindow(this.capteurZone); + } + + @FXML + private void clickButtonAjouter() throws Exception{ + Capteur c = new Capteur("Nouveau Capteur Réaliste", new GenerateurRealiste()); + this.capteurZone.addCapteur(c); + lesCapteurs.add(c); + } + + @Override + public void update() { + } +} diff --git a/src/view/ImageWindow.java b/src/view/ImageWindow.java index cab55de..322badc 100644 --- a/src/view/ImageWindow.java +++ b/src/view/ImageWindow.java @@ -1,31 +1,39 @@ package view; -import javafx.beans.property.Property; +import javafx.beans.property.SimpleObjectProperty; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Label; -import javafx.scene.layout.BorderPane; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.converter.NumberStringConverter; import model.Capteur; -import model.GenerateurAleatoire; +import model.CapteurAbstrait; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; import java.io.IOException; public class ImageWindow extends Visualisateur{ - private Capteur capteur; - private GridPane layout; + private final CapteurAbstrait capteur; @FXML private Label temperature; - - public ImageWindow(Capteur capteur) throws IOException { + @FXML + private Label nom; + @FXML + private Label id; + @FXML + private ImageView imageView; + public ImageWindow(CapteurAbstrait capteur) throws IOException { this.capteur = capteur; Stage stage = new Stage(); - layout = new GridPane(); + GridPane layout = new GridPane(); FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/ImageWindow.fxml")); - loader.setRoot(this.layout); + loader.setRoot(layout); loader.setController(this); Parent root = loader.load(); Scene scene = new Scene(root); @@ -33,14 +41,30 @@ public class ImageWindow extends Visualisateur{ stage.setTitle("Image"); stage.show(); } - + private void initializeAndUpdate() { + id.setText(new NumberStringConverter().toString(capteur.getId())); + nom.textProperty().bind(this.capteur.getNom()); + temperature.textProperty().bindBidirectional(this.capteur.getTemperature() , new NumberStringConverter()); + this.capteur.getTemperature().addListener((observable, oldValue, newValue) -> { + try { + if ((Double)newValue < 0) { + imageView.setImage(new Image(new FileInputStream("resource/Image/Froid.png"))); + } else if ((Double)newValue > 22) { + imageView.setImage(new Image(new FileInputStream("resource/Image/Chaud.png"))); + } else { + imageView.setImage(new Image(new FileInputStream("resource/Image/Normal.png"))); + } + } + catch (FileNotFoundException ignored){} + }); + } @FXML public void initialize(){ - temperature.textProperty().bindBidirectional(this.capteur.getTemperature(), new NumberStringConverter()); + initializeAndUpdate(); } @Override public void update() { - temperature.textProperty().bindBidirectional(this.capteur.getTemperature(), new NumberStringConverter()); + initializeAndUpdate(); } } diff --git a/src/view/MainWindow.java b/src/view/MainWindow.java index 78980c5..2b5d0d5 100644 --- a/src/view/MainWindow.java +++ b/src/view/MainWindow.java @@ -1,39 +1,118 @@ package view; +import javafx.beans.property.SimpleStringProperty; +import javafx.collections.ListChangeListener; +import javafx.collections.ObservableList; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; import javafx.scene.control.Button; -import javafx.scene.layout.GridPane; -import javafx.stage.Stage; -import model.Capteur; -import model.GenerateurAleatoire; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.util.Callback; +import model.*; -public class MainWindow { +import java.io.IOException; +import java.text.DecimalFormat; +import java.util.ArrayList; + +public class MainWindow extends Visualisateur{ + @FXML + private ListView listView; + @FXML + private Button btnAjouter; @FXML - private Button btnSpinner; + private Button btnAjouterZone; @FXML - private Button btnImage; + private Button btnVoir; @FXML - private Button btnFermer; - protected Capteur capteur; + private Button btnSupprimer; + private ObservableList lesCapteurs; + private final DecimalFormat df = new DecimalFormat("#.##"); - public void initialize(){ - this.capteur = new Capteur("a", new GenerateurAleatoire(0,12)); - } @FXML - private void clickButtonFermer(){ - Stage stage = (Stage) btnFermer.getScene().getWindow(); - stage.close(); + public void initialize(){ + lesCapteurs = listView.getItems(); + + listView.setCellFactory(new Callback, ListCell>() { + @Override + public ListCell call(ListView capteurListView) { + return new ListCell(){ + @Override + public void updateItem(CapteurAbstrait value, boolean empty) { + super.updateItem(value, empty); + if (value != null) { + textProperty().bind(new SimpleStringProperty(this, "", "") + .concat("[") + .concat(value.getId()) + .concat("] ") + .concat(value.getNom()) + .concat(" : ") + .concat(value.getTemperature().asString("%.2f°C"))); + } + } + }; + } + }); + + listView.getSelectionModel().selectedItemProperty().addListener((observable, oldValue, newValue) -> { +// btnVoir.setDisable(false); +// btnSupprimer.setDisable(false); + try { + if (lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()).getClass().getSimpleName().equals("CapteurZone")) { + DetailZoneWindow Dzw = new DetailZoneWindow((CapteurZone) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + else{ + DetailWindow Dw = new DetailWindow((Capteur) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + }); + + Capteur capteur1 = new Capteur("Capteur Réaliste", new GenerateurRealiste()); + Capteur capteur2 = new Capteur("Capteur Aléatoire", new GenerateurAleatoire(-20, 40)); + Capteur capteur3 = new Capteur("Capteur Manuel", new GenerateurManuel()); + lesCapteurs.add(capteur1); + lesCapteurs.add(capteur2); + lesCapteurs.add(capteur3); + + Capteur capteur4 = new Capteur("Capteur4", new GenerateurRealiste()); + Capteur capteur5 = new Capteur("Capteur5", new GenerateurRealiste()); + CapteurZone capteurZone = new CapteurZone("Capteur Zone", new ArrayList(){{add(capteur4); add(capteur5);}}); + lesCapteurs.add(capteurZone); } @FXML - private void clickButtonImage() throws Exception{ - ImageWindow Iw = new ImageWindow(this.capteur); + private void clickButtonAjouter() throws Exception{ + Capteur c = new Capteur("Nouveau Capteur Réaliste", new GenerateurRealiste()); + lesCapteurs.add(c); } @FXML - private void clickButtonSpinner() throws Exception{ - SpinnerWindow Sw = new SpinnerWindow(this.capteur); + private void clickButtonAjouterZone() throws Exception{ + CapteurZone c = new CapteurZone("Nouveau Capteur Zone", new ArrayList()); + lesCapteurs.add(c); + } +// @FXML +// private void clickButtonSupprimer() throws Exception{ +// CapteurAbstrait c = lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()); +// lesCapteurs.remove(c); +// listView.getItems().remove(c); +// listView.refresh(); +// } +// @FXML +// private void clickButtonVoir() throws Exception{ +// try { +// if (lesCapteurs.get(listView.getSelectionModel().getSelectedIndex()).getClass().getSimpleName().equals("CapteurZone")) { +// DetailZoneWindow Dzw = new DetailZoneWindow((CapteurZone) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); +// } +// else{ +// DetailWindow Dw = new DetailWindow((Capteur) lesCapteurs.get(listView.getSelectionModel().getSelectedIndex())); +// } +// } catch (IOException e) { +// throw new RuntimeException(e); +// } +// } + @Override + public void update() { + listView.refresh(); } } diff --git a/src/view/SpinnerWindow.java b/src/view/SpinnerWindow.java index 06a67b0..7e08e05 100644 --- a/src/view/SpinnerWindow.java +++ b/src/view/SpinnerWindow.java @@ -1,13 +1,12 @@ package view; -import javafx.beans.property.IntegerProperty; -import javafx.beans.property.ObjectProperty; -import javafx.beans.property.SimpleObjectProperty; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; +import javafx.scene.control.Label; import javafx.scene.control.Spinner; +import javafx.scene.control.SpinnerValueFactory; import javafx.scene.layout.GridPane; import javafx.stage.Stage; import javafx.util.converter.NumberStringConverter; @@ -18,6 +17,10 @@ import java.io.IOException; public class SpinnerWindow extends Visualisateur{ @FXML private Spinner spinner; + @FXML + private Label nom; + @FXML + private Label id; protected Capteur capteur; private GridPane layout; @@ -36,7 +39,13 @@ public class SpinnerWindow extends Visualisateur{ } @FXML public void initialize(){ + double min, max; + min = -20.0; + max = 40.0; + spinner.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(min,max)); spinner.getValueFactory().valueProperty().bindBidirectional(this.capteur.getTemperature()); + id.setText(new NumberStringConverter().toString(capteur.getId())); + nom.textProperty().bind(this.capteur.getNom()); } @Override diff --git a/src/view/Visualisateur.java b/src/view/Visualisateur.java index df5ee6d..4b487c9 100644 --- a/src/view/Visualisateur.java +++ b/src/view/Visualisateur.java @@ -1,14 +1,19 @@ package view; + import javafx.fxml.FXML; +import javafx.scene.control.Button; import javafx.stage.Stage; import model.Capteur; import model.Observateur; public abstract class Visualisateur implements Observateur { - private void clickFermer(){ -// Stage stage = (Stage) .getScene().getWindow(); -// stage.close(); + @FXML + private Button btnFermer; + @FXML + protected void clickButtonFermer(){ + Stage stage = (Stage) btnFermer.getScene().getWindow(); + stage.close(); } private void intialize (Capteur c){ c.addObservateur(this);