diff --git a/resources/view/TreeView.fxml b/resources/view/TreeView.fxml new file mode 100644 index 0000000..0c0d521 --- /dev/null +++ b/resources/view/TreeView.fxml @@ -0,0 +1,13 @@ + + + + + + + + + + + + diff --git a/src/launcher/Launch.java b/src/launcher/Launch.java index 6567581..d639e60 100644 --- a/src/launcher/Launch.java +++ b/src/launcher/Launch.java @@ -1,13 +1,18 @@ package launcher; import javafx.application.Application; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; import javafx.stage.Stage; import model.*; import view.CapteurView; import view.ImageCtrlView; import view.ThermostatView; +import view.TreeViewCtrl; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Map; public class Launch extends Application { @@ -17,40 +22,45 @@ public class Launch extends Application { @Override public void start(Stage primaryStage) throws IOException, InterruptedException { + // Creation des capteurs + UnitCapteur captorC = new UnitCapteur(1,new SimpleStringProperty("Capteur CPU"),new StrategyCPU()); + UnitCapteur captorR = new UnitCapteur(2,new SimpleStringProperty("Capteur Random"),new StrategyRandom()); + CapteurVirtuel captorV = new CapteurVirtuel(5,new SimpleStringProperty("Capteur Virtuel")); - UnitCapteur captorI = new UnitCapteur(2,"Capteur Intervalle",new StrategyCPU()); - UnitCapteur captorR = new UnitCapteur(3,"Capteur Realiste", new StrategyCPU()); - UnitCapteur captorC = new UnitCapteur(4,"Capteur CPU",new StrategyCPU()); - CapteurVirtuel captorV = new CapteurVirtuel(5,"CapteurVirtuel"); - - captorV.addCapteur(captorI,1); + // Ajout des capteurs dans la collections du capteur virtuel captorV.addCapteur(captorC,1); captorV.addCapteur(captorR,1); - - // FXML NOT WORKING - Stage thermostatStage = new Stage(); - CapteurView capteurView = new ImageCtrlView(captorV,"view/Image.fxml","mon titre"); for (Map.Entry entry : captorV.getCapteurs().entrySet()) { CapteurAbstrait c = entry.getKey(); c.genTemp(); } - ThermostatView thermostatView = new ThermostatView(captorV,"view/Thermostat.fxml","mon titre"); + captorV.genTemp(); + ArrayList capteurs = new ArrayList<>(); + capteurs.add(captorC); + capteurs.add(captorR); + capteurs.add(captorV); - //Random random = new Random(); + // FXML NOT WORKING + //Stage thermostatStage = new Stage(); + //CapteurView capteurView = new ImageCtrlView(captorV,"view/Image.fxml","mon titre"); + //ThermostatView thermostatView = new ThermostatView(captorV,"view/Thermostat.fxml","mon titre"); + TreeViewCtrl treeViewCtrl = new TreeViewCtrl(capteurs,"view/TreeView.fxml","treeView"); Thread t = new Thread() { public void run() { while (true) { + for (Map.Entry entry : captorV.getCapteurs().entrySet()) { + CapteurAbstrait c = entry.getKey(); + c.genTemp(); + } captorV.genTemp(); try { + //((ImageCtrlView) capteurView).changeImage(); System.out.println(captorV.getNom() + ": " + captorV.getTemp().getValue() + " °C"); for (Map.Entry entry : captorV.getCapteurs().entrySet()) { CapteurAbstrait c = entry.getKey(); - c.genTemp(); - System.out.println(c.getNom() + ": " + c.getTemp().getValue() + " °C"); System.out.println(c.getNom() + ": " + c.getTemp().getValue() + " °C"); } - sleep(4000); } catch (InterruptedException e) { throw new RuntimeException(e); diff --git a/src/model/CapteurAbstrait.java b/src/model/CapteurAbstrait.java index f1bfd4b..0633683 100644 --- a/src/model/CapteurAbstrait.java +++ b/src/model/CapteurAbstrait.java @@ -2,13 +2,15 @@ package model; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; public abstract class CapteurAbstrait { private int id; - private String nom; + private StringProperty nom; private ObjectProperty temp = new SimpleObjectProperty<>(); - CapteurAbstrait(int id, String nom){ + CapteurAbstrait(int id, StringProperty nom){ this.id = id; this.nom = nom; this.temp.setValue(0.0); @@ -24,11 +26,11 @@ public abstract class CapteurAbstrait { this.id = id; } - public String getNom() { - return nom; + public StringProperty getNom() { + return this.nom; } - public void setNom(String nom) { + public void setNom(StringProperty nom) { this.nom = nom; } @@ -40,4 +42,6 @@ public abstract class CapteurAbstrait { this.temp.setValue(pTemp); } + public abstract T accept (Visitor v); + } diff --git a/src/model/CapteurVirtuel.java b/src/model/CapteurVirtuel.java index 33afc99..29f15f8 100644 --- a/src/model/CapteurVirtuel.java +++ b/src/model/CapteurVirtuel.java @@ -2,6 +2,7 @@ package model; import javafx.beans.property.ObjectProperty; import javafx.beans.property.SimpleObjectProperty; +import javafx.beans.property.StringProperty; import java.util.HashMap; import java.util.List; @@ -11,18 +12,22 @@ public class CapteurVirtuel extends CapteurAbstrait { private Map capteurs; - public CapteurVirtuel(int id, String nom){ + public CapteurVirtuel(int id, StringProperty nom){ super(id, nom); this.capteurs = new HashMap<>(); } - public void addCapteur(CapteurAbstrait c, int p){ + public void addCapteur(UnitCapteur c, int p){ this.capteurs.put(c,p); } - public void removeCapteur(CapteurAbstrait c){ + public void removeCapteur(UnitCapteur c){ this.capteurs.remove(c); } + public T accept(Visitor v){ + return v.visit(this); + } + public Map getCapteurs(){return this.capteurs;} // calcule la temperature moyenne des capteurs sa collection de capteurs diff --git a/src/model/StrategyRandom.java b/src/model/StrategyRandom.java index 3f94bb3..c379938 100644 --- a/src/model/StrategyRandom.java +++ b/src/model/StrategyRandom.java @@ -8,6 +8,6 @@ public class StrategyRandom implements StrategyCaptor { @Override public double genTemp() { Random random = new Random(); - return random.nextDouble(30); + return random.nextDouble(30) - 30; } } diff --git a/src/model/UnitCapteur.java b/src/model/UnitCapteur.java index a0794ff..4888593 100644 --- a/src/model/UnitCapteur.java +++ b/src/model/UnitCapteur.java @@ -1,9 +1,11 @@ package model; +import javafx.beans.property.StringProperty; + public class UnitCapteur extends CapteurAbstrait{ private StrategyCaptor strategie; - public UnitCapteur(int id, String nom,StrategyCaptor st) { + public UnitCapteur(int id, StringProperty nom, StrategyCaptor st) { super(id, nom); this.strategie = st; } @@ -12,4 +14,9 @@ public class UnitCapteur extends CapteurAbstrait{ public void genTemp() { this.setTemp(strategie.genTemp()); } + + @Override + public T accept(Visitor v) { + return v.visit(this); + } } diff --git a/src/view/ImageCtrlView.java b/src/view/ImageCtrlView.java index 13445bc..0629c7e 100644 --- a/src/view/ImageCtrlView.java +++ b/src/view/ImageCtrlView.java @@ -26,7 +26,7 @@ public class ImageCtrlView extends CapteurView{ changeImage(); } - private void changeImage() throws IOException { + public void changeImage() throws IOException { if (this.capteur.getTemp().getValue() > 25){ input = clazz.getResourceAsStream("/images/sun.png"); imageview.setImage(new Image(input)); @@ -46,11 +46,13 @@ public class ImageCtrlView extends CapteurView{ Platform.exit(); } - public void initialize() { - /*try { - changeImage(); - } catch (IOException e) { - throw new RuntimeException(e); - }*/ + public void initialize(CapteurAbstrait capteur) { + /*capteur.getTemp().addListener((observable, oldValue, newValue) -> { + try { + changeImage(); + } catch (IOException e) { + throw new RuntimeException(e); + } + });*/ } } diff --git a/src/view/ThermostatView.java b/src/view/ThermostatView.java index 5eccbe2..17411f7 100644 --- a/src/view/ThermostatView.java +++ b/src/view/ThermostatView.java @@ -22,13 +22,11 @@ public class ThermostatView extends CapteurView{ this.capteur=capteur; this.spin.setValueFactory(new SpinnerValueFactory.DoubleSpinnerValueFactory(0d,100d)); this.spin.getValueFactory().valueProperty().bindBidirectional(this.capteur.getTemp()); - SpinnerValueFactory valueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(capteur.getTemp().getValue(),capteur.getTemp().getValue(), capteur.getTemp().getValue()); - spin.setValueFactory(valueFactory); myBtn.setOnAction(e -> Platform.exit()); + } public void initialize() { - } } diff --git a/src/view/TreeViewCtrl.java b/src/view/TreeViewCtrl.java new file mode 100644 index 0000000..b9727d2 --- /dev/null +++ b/src/view/TreeViewCtrl.java @@ -0,0 +1,74 @@ +package view; + +import java.io.IOException; +import java.net.URL; +import java.util.ArrayList; +import java.util.List; +import java.util.ResourceBundle; + +import javafx.beans.property.StringProperty; +import javafx.fxml.FXML; +import javafx.fxml.Initializable; +import javafx.scene.control.*; +import javafx.scene.image.Image; +import javafx.scene.image.ImageView; +import javafx.scene.input.MouseEvent; +import model.CapteurAbstrait; +import model.CapteurVirtuel; +import model.TreeItemFactoryVisitor; + +public class TreeViewCtrl extends FXMLView { + @FXML + private TreeView treeView; + + @FXML + private Spinner spinnerTemp; + + private ArrayList capteurAbstraits; + + public TreeViewCtrl(ArrayList capteurs, String url, String title) throws IOException { + super(url,title); + this.capteurAbstraits = capteurs;; + TreeItem root = new TreeItem<>(); + root.setExpanded(true); + treeView.setShowRoot(false); + TreeItemFactoryVisitor treeItemFactoryVisitor = new TreeItemFactoryVisitor(); + treeView.setVisible(true); + for(CapteurAbstrait capteur: capteurAbstraits){ + TreeItem item = capteur.accept(treeItemFactoryVisitor); + root.getChildren().add(item); + } + this.initializeCapteur(); + } + + public void initializeCapteur(){ + treeView.setCellFactory(param -> new TreeCell(){ + @Override + protected void updateItem(CapteurAbstrait capteur, boolean empty){ + super.updateItem(capteur,empty); + if(empty){ + textProperty().unbind(); + setText(""); + } else { + textProperty().bind(capteur.getNom()); + } + } + }); + + spinnerTemp.setVisible(true); + + CapteurAbstrait capteur = capteurAbstraits.get(0); + capteur.getTemp().addListener((observable, oldValue, newValue) -> { + System.out.println("Changement de température: " + oldValue + " est passé à " + + newValue); + }); + + SpinnerValueFactory spinnerValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(-150,1000,capteur.getTemp().getValue(),0.5); + spinnerTemp.setValueFactory(spinnerValueFactory); + spinnerTemp.getValueFactory().valueProperty().bindBidirectional(capteur.getTemp()); + capteur.genTemp(); + capteur.setTemp(capteur.getTemp().getValue()); + System.out.println("initialize spinner"); + System.out.println(spinnerTemp.getValueFactory().getValue()); + }; +}