From 30f083a5f057748da6b5c663ca7934264cea53ff Mon Sep 17 00:00:00 2001 From: thchazot1 Date: Sat, 21 Jan 2023 12:05:45 +0100 Subject: [PATCH] fin du treeView --- projet/ressources/fxml/TreeViewCapteur.fxml | 6 +- projet/src/launcher/Launch.java | 11 +-- projet/src/modele/Capteur.java | 22 +++-- projet/src/modele/CapteurImage.java | 15 +-- projet/src/modele/CapteurVirtuel.java | 10 +- .../src/modele/CaptorGeneratorStrategy.java | 8 ++ projet/src/modele/CpuCapteur.java | 11 ++- projet/src/modele/CpuGenerator.java | 14 +++ projet/src/modele/RandomCapteur.java | 13 ++- projet/src/modele/RandomGenerator.java | 16 ++++ projet/src/modele/Stub.java | 17 ++-- projet/src/modele/TreeViewVisitor.java | 19 ++++ projet/src/modele/UnitCapteur.java | 31 +++++++ projet/src/modele/Visitor.java | 6 ++ projet/src/view/TreeViewCapteur.java | 92 ++++++++++++------- projet/src/view/ViewRandom.java | 11 --- 16 files changed, 217 insertions(+), 85 deletions(-) create mode 100644 projet/src/modele/CaptorGeneratorStrategy.java create mode 100644 projet/src/modele/CpuGenerator.java create mode 100644 projet/src/modele/RandomGenerator.java create mode 100644 projet/src/modele/TreeViewVisitor.java create mode 100644 projet/src/modele/UnitCapteur.java create mode 100644 projet/src/modele/Visitor.java delete mode 100644 projet/src/view/ViewRandom.java diff --git a/projet/ressources/fxml/TreeViewCapteur.fxml b/projet/ressources/fxml/TreeViewCapteur.fxml index a5b5bab..d86f32a 100644 --- a/projet/ressources/fxml/TreeViewCapteur.fxml +++ b/projet/ressources/fxml/TreeViewCapteur.fxml @@ -7,13 +7,11 @@ + - - - - + diff --git a/projet/src/launcher/Launch.java b/projet/src/launcher/Launch.java index 01745ba..fa42a29 100644 --- a/projet/src/launcher/Launch.java +++ b/projet/src/launcher/Launch.java @@ -28,25 +28,20 @@ public class Launch extends Application { CapteurVirtuel leCapteurVirtuel = (CapteurVirtuel) Stub.genererCapteur(); ObservableList capteurs = Stub.genererObservableList(); TreeViewCapteur treeViewCapteur = new TreeViewCapteur(capteurs,"/fxml/TreeViewCapteur.fxml","Mon capteur"); - ViewCapteurImage viewCapteurImage = new ViewCapteurImage(capteurImage, "/fxml/ImageCapteur.fxml", "test"); Thread t = new Thread(() -> { - Random r = new Random(); while (true) { try { Thread.sleep(1000); Platform.runLater(() -> { - /* - for (ObservableMap.Entry map : leCapteurVirtuel.getLesCapteurs().entrySet()) { + for (Capteur capteurs1 : capteurs) { try { - map.getValue().genTemp(r.nextFloat(50)); + capteurs1.genTemp(); } catch (IOException e) { throw new RuntimeException(e); } } - leCapteurVirtuel.genTemp(1); - */ - capteurImage.genTemp(r.nextFloat(-20,50)); + //capteurImage.genTemp(r.nextFloat(-20,50)); }); } catch (InterruptedException e) { diff --git a/projet/src/modele/Capteur.java b/projet/src/modele/Capteur.java index 3087e46..ee16859 100644 --- a/projet/src/modele/Capteur.java +++ b/projet/src/modele/Capteur.java @@ -1,14 +1,9 @@ package modele; -import javafx.beans.InvalidationListener; -import javafx.beans.Observable; import javafx.beans.property.*; -import javafx.collections.FXCollections; -import javafx.collections.ObservableList; +import javafx.scene.control.TreeItem; import java.io.IOException; -import java.util.ArrayList; -import java.util.List; import java.util.UUID; public abstract class Capteur { @@ -19,6 +14,12 @@ public abstract class Capteur { this.nom.set(nom); } + public Capteur(Capteur capteur) { + this.temperature.set(capteur.getTemperature()); + this.nom.set(capteur.getNom()); + this.id.set(capteur.getId()); + } + private final FloatProperty temperature = new SimpleFloatProperty(); public float getTemperature() {return temperature.get();} public FloatProperty temperatureProperty() {return temperature;} @@ -35,6 +36,13 @@ public abstract class Capteur { public void setId(String id) {this.id.set(id);} - public abstract void genTemp(float x) throws IOException; + public abstract void genTemp() throws IOException; + + public abstract T accept(Visitor visitor); + + @Override + public boolean equals(Object capteur) { + return getId().equals(((Capteur) capteur).getId()); + } } diff --git a/projet/src/modele/CapteurImage.java b/projet/src/modele/CapteurImage.java index d9d3151..51832bc 100644 --- a/projet/src/modele/CapteurImage.java +++ b/projet/src/modele/CapteurImage.java @@ -7,21 +7,24 @@ import javafx.beans.property.StringProperty; import javafx.scene.image.Image; import java.io.IOException; - -public class CapteurImage extends Capteur{ +@Deprecated +public class CapteurImage extends UnitCapteur{ private final ObjectProperty image = new SimpleObjectProperty<>(); public ObjectProperty imageProperty() {return image;} public void setImage(Image image) {this.image.set(image);} public CapteurImage(float temp, String nom) { - super(temp, nom); - genTemp(temp); + super(temp, nom, new CpuGenerator()); + } + + public CapteurImage(Capteur capteur){ + super(capteur); } @Override - public void genTemp(float x){ - setTemperature(x); + public void genTemp(){ + setTemperature(12); if (getTemperature()<0){ setImage(new Image("/Assets/hilarious-snow-memes.jpg")); } diff --git a/projet/src/modele/CapteurVirtuel.java b/projet/src/modele/CapteurVirtuel.java index c29724e..9790270 100644 --- a/projet/src/modele/CapteurVirtuel.java +++ b/projet/src/modele/CapteurVirtuel.java @@ -7,6 +7,7 @@ import javafx.beans.property.SimpleMapProperty; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.collections.ObservableMap; +import javafx.scene.control.TreeItem; public class CapteurVirtuel extends Capteur{ @@ -18,15 +19,13 @@ public class CapteurVirtuel extends Capteur{ private final MapProperty lesCapteurs = new SimpleMapProperty<>(capteurObs); public ObservableMap getLesCapteurs() {return lesCapteurs.getValue();} - public void setLesCapteurs(ObservableMap value) {lesCapteurs.set(value);} - public MapProperty lesCapteursProperty() {return lesCapteurs;} public void addCapteur(Capteur capteur, Float poids) { capteurObs.put(poids, capteur); } @Override - public void genTemp(float x) { + public void genTemp() { float tempTotal=0; if (getLesCapteurs().size()==0){ setTemperature(0); @@ -39,4 +38,9 @@ public class CapteurVirtuel extends Capteur{ tempTotal=tempTotal/getLesCapteurs().size(); setTemperature(tempTotal); } + + @Override + public TreeItem accept(Visitor v){ + return (TreeItem) v.visit(this); + } } diff --git a/projet/src/modele/CaptorGeneratorStrategy.java b/projet/src/modele/CaptorGeneratorStrategy.java new file mode 100644 index 0000000..92048d7 --- /dev/null +++ b/projet/src/modele/CaptorGeneratorStrategy.java @@ -0,0 +1,8 @@ +package modele; + +import java.io.IOException; + +public interface CaptorGeneratorStrategy { + + float generate() throws IOException; +} diff --git a/projet/src/modele/CpuCapteur.java b/projet/src/modele/CpuCapteur.java index 66efa0e..6fe2512 100644 --- a/projet/src/modele/CpuCapteur.java +++ b/projet/src/modele/CpuCapteur.java @@ -6,14 +6,19 @@ import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -public class CpuCapteur extends Capteur{ +@Deprecated +public class CpuCapteur extends UnitCapteur{ public CpuCapteur(float temperature, String nom) { - super(temperature,nom); + super(temperature,nom, new CpuGenerator()); + } + + public CpuCapteur(Capteur capteur) { + super(capteur); } @Override - public void genTemp(float x) throws IOException { + public void genTemp() throws IOException { setTemperature(Float.parseFloat(Files.readString(Path.of("/sys/class/thermal/thermal_zone2/temp")))); } } diff --git a/projet/src/modele/CpuGenerator.java b/projet/src/modele/CpuGenerator.java new file mode 100644 index 0000000..51defb5 --- /dev/null +++ b/projet/src/modele/CpuGenerator.java @@ -0,0 +1,14 @@ +package modele; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; + +public class CpuGenerator implements CaptorGeneratorStrategy{ + + + @Override + public float generate() throws IOException { + return Float.parseFloat(Files.readString(Path.of("/sys/class/thermal/thermal_zone2/temp"))); + } +} diff --git a/projet/src/modele/RandomCapteur.java b/projet/src/modele/RandomCapteur.java index 2ebc8da..d633efb 100644 --- a/projet/src/modele/RandomCapteur.java +++ b/projet/src/modele/RandomCapteur.java @@ -4,15 +4,20 @@ import javafx.beans.InvalidationListener; import java.util.Random; -public class RandomCapteur extends Capteur{ +@Deprecated +public class RandomCapteur extends UnitCapteur{ public RandomCapteur(float temperature, String nom) { - super(temperature, nom); + super(temperature, nom, new RandomGenerator()); + } + + public RandomCapteur(Capteur capteur) { + super(capteur); } @Override - public void genTemp(float x) { + public void genTemp() { Random random = new Random(); - setTemperature(random.nextFloat(x)); + setTemperature(random.nextFloat(50)); } } diff --git a/projet/src/modele/RandomGenerator.java b/projet/src/modele/RandomGenerator.java new file mode 100644 index 0000000..8a37f85 --- /dev/null +++ b/projet/src/modele/RandomGenerator.java @@ -0,0 +1,16 @@ +package modele; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Random; + +public class RandomGenerator implements CaptorGeneratorStrategy{ + + + @Override + public float generate() throws IOException { + Random random = new Random(); + return random.nextFloat(50); + } +} \ No newline at end of file diff --git a/projet/src/modele/Stub.java b/projet/src/modele/Stub.java index d1aa843..6b7302d 100644 --- a/projet/src/modele/Stub.java +++ b/projet/src/modele/Stub.java @@ -23,14 +23,17 @@ public class Stub { public static ObservableList genererObservableList(){ List capteurs = new ArrayList<>(); CapteurVirtuel retour = new CapteurVirtuel(45, "cap1"); - retour.addCapteur(new CpuCapteur(12, "cap2"), 12F); - retour.addCapteur(new CpuCapteur(0, "cap3"), 7F); - retour.addCapteur(new CpuCapteur(20 ,"cap4"), 6F); - retour.addCapteur(new CpuCapteur(5, "cap5"), 4.5F); + retour.addCapteur(new UnitCapteur(12, "cap2", new CpuGenerator()), 3F); + retour.addCapteur(new UnitCapteur(12, "cap3", new RandomGenerator()), 2F); + retour.addCapteur(new UnitCapteur(12, "cap4", new RandomGenerator()), 1F); + retour.addCapteur(new UnitCapteur(12, "cap5", new CpuGenerator()), 4F); + CapteurVirtuel cap=new CapteurVirtuel(12, "capVir"); + cap.addCapteur(new UnitCapteur(15, "test2", new CpuGenerator()), 5F); + retour.addCapteur( cap, 4F); capteurs.add(retour); - capteurs.add(new CpuCapteur(0, "cap6")); - capteurs.add(new CpuCapteur(20 ,"cap7")); - capteurs.add(new CpuCapteur(5, "cap8")); + capteurs.add(new UnitCapteur(12, "cap6", new RandomGenerator())); + capteurs.add(new UnitCapteur(12, "cap7", new CpuGenerator())); + capteurs.add(new UnitCapteur(12, "cap8", new RandomGenerator())); return FXCollections.observableList(capteurs); } diff --git a/projet/src/modele/TreeViewVisitor.java b/projet/src/modele/TreeViewVisitor.java new file mode 100644 index 0000000..6384155 --- /dev/null +++ b/projet/src/modele/TreeViewVisitor.java @@ -0,0 +1,19 @@ +package modele; + +import javafx.scene.control.TreeItem; + +public class TreeViewVisitor implements Visitor>{ + @Override + public TreeItem visit(UnitCapteur cap) { + return new TreeItem<>(cap); + } + + @Override + public TreeItem visit(CapteurVirtuel cap) { + TreeItem item = new TreeItem<>(cap); + for (Capteur captor: cap.getLesCapteurs().values()) { + item.getChildren().add(captor.accept(this)); + } + return item; + } +} diff --git a/projet/src/modele/UnitCapteur.java b/projet/src/modele/UnitCapteur.java new file mode 100644 index 0000000..7bd306e --- /dev/null +++ b/projet/src/modele/UnitCapteur.java @@ -0,0 +1,31 @@ +package modele; + +import javafx.scene.control.TreeItem; + +import java.io.IOException; + +public class UnitCapteur extends Capteur{ + + private CaptorGeneratorStrategy captorGeneratorStrategy; + + public UnitCapteur(float temperature, String nom, CaptorGeneratorStrategy captorGeneratorStrategy) { + super(temperature,nom); + this.captorGeneratorStrategy=captorGeneratorStrategy; + } + + public void setCaptorGeneratorStrategy(CaptorGeneratorStrategy captorGeneratorStrategy) { + this.captorGeneratorStrategy = captorGeneratorStrategy; + } + + public UnitCapteur(Capteur capteur) { + super(capteur); + } + public void genTemp() throws IOException { + setTemperature(captorGeneratorStrategy.generate()); + } + + @Override + public TreeItem accept(Visitor v){ + return (TreeItem) v.visit(this); + } +} diff --git a/projet/src/modele/Visitor.java b/projet/src/modele/Visitor.java new file mode 100644 index 0000000..932ae57 --- /dev/null +++ b/projet/src/modele/Visitor.java @@ -0,0 +1,6 @@ +package modele; + +public interface Visitor { + T visit(UnitCapteur cap); + T visit(CapteurVirtuel cap); +} diff --git a/projet/src/view/TreeViewCapteur.java b/projet/src/view/TreeViewCapteur.java index 7619626..226505b 100644 --- a/projet/src/view/TreeViewCapteur.java +++ b/projet/src/view/TreeViewCapteur.java @@ -7,19 +7,23 @@ import javafx.beans.value.ChangeListener; import javafx.beans.value.ObservableValue; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.event.ActionEvent; import javafx.event.Event; import javafx.event.EventHandler; import javafx.event.EventType; import javafx.fxml.FXML; import javafx.scene.control.*; +import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.layout.VBox; import javafx.scene.text.Text; import javafx.util.converter.NumberStringConverter; -import modele.Capteur; -import modele.CapteurVirtuel; -import modele.CpuCapteur; +import modele.*; import java.io.IOException; import java.util.ArrayList; +import java.util.List; + +import static java.lang.Float.parseFloat; public class TreeViewCapteur extends FxmlWindow { @@ -31,61 +35,85 @@ public class TreeViewCapteur extends FxmlWindow { private Text id; @FXML private TextField temperature; + @FXML + private VBox vBox; + private TableView tableView; + private Button changeToCpu; + private Button changeToRandom; private ObservableList lesCapteurs; public TreeViewCapteur(ObservableList lesCapteurs, String url, String title) throws IOException { super(url, title); this.lesCapteurs = lesCapteurs; + changeToCpu = new Button("Change to CPU"); + changeToRandom = new Button("Change to Random"); TreeItem root = new TreeItem<>(); tree.setRoot(root); tree.setShowRoot(false); + tree.setCellFactory(capteurTreeView -> new TreeCell<>() { + @Override + protected void updateItem(Capteur item, boolean empty) { + super.updateItem(item, empty); + if (!empty) { + textProperty().bind(item.nomProperty()); + } else { + textProperty().unbind(); + setText(""); + } + } + }); for (Capteur capteur : lesCapteurs) { - TreeItem item = new TreeItem<>(capteur); - addTreeItem(item); - root.getChildren().add(item); + root.getChildren().add(capteur.accept(new TreeViewVisitor())); } - } + tableView = new TableView<>(); + TableColumn nameCol = new TableColumn<>("Nom"); + TableColumn tempCol = new TableColumn<>("Température"); + nameCol.setCellValueFactory(new PropertyValueFactory<>("nom")); + tempCol.setCellValueFactory(new PropertyValueFactory<>("temperature")); + + tableView.getColumns().addAll(nameCol, tempCol); - private void addTreeItem(TreeItem cap) { - if (cap.getValue() instanceof CapteurVirtuel) { - for (Capteur capteur : ((CapteurVirtuel) cap.getValue()).getLesCapteurs().values()) { - TreeItem item = new TreeItem<>(capteur); - addTreeItem(item); - cap.getChildren().add(item); - } - } } - public void initialize() { - tree.setCellFactory(capteurTreeView -> { - TreeCell tc = new TreeCell<>() { - @Override - protected void updateItem(Capteur item, boolean empty) { - super.updateItem(item, empty); - if (!empty && item!=null) { - textProperty().bindBidirectional(item.nomProperty()); - } else { - textProperty().unbind(); - //setText(""); - } - } - }; - return tc; - }); + public void initialize() { tree.getSelectionModel().selectedItemProperty().addListener((observableValue, old, newV) -> { if (old != null) { name.textProperty().unbindBidirectional(old.getValue().nomProperty()); id.textProperty().unbindBidirectional(old.getValue().idProperty()); temperature.textProperty().unbindBidirectional(old.getValue().temperatureProperty()); + if (old.getValue() instanceof CapteurVirtuel) { + tableView.getItems().removeAll(((CapteurVirtuel) old.getValue()).getLesCapteurs().values()); + vBox.getChildren().remove(tableView); + } else { + changeToCpu.setOnAction(null); + changeToRandom.setOnAction(null); + vBox.getChildren().removeAll(changeToCpu, changeToRandom); + } + } if (newV != null) { name.textProperty().bindBidirectional(newV.getValue().nomProperty()); id.textProperty().bindBidirectional(newV.getValue().idProperty()); - temperature.textProperty().bindBidirectional(newV.getValue().temperatureProperty(),new NumberStringConverter()); + temperature.textProperty().bindBidirectional(newV.getValue().temperatureProperty(), new NumberStringConverter()); + + if (newV.getValue() instanceof CapteurVirtuel) { + tableView.getItems().addAll(((CapteurVirtuel) newV.getValue()).getLesCapteurs().values()); + vBox.getChildren().add(tableView); + } else { + EventHandler eventCpu = e -> { + ((UnitCapteur) newV.getValue()).setCaptorGeneratorStrategy(new CpuGenerator()); + }; + EventHandler eventRandom = e -> { + ((UnitCapteur) newV.getValue()).setCaptorGeneratorStrategy(new RandomGenerator()); + }; + changeToCpu.setOnAction(eventCpu); + changeToRandom.setOnAction(eventRandom); + vBox.getChildren().addAll(changeToCpu, changeToRandom); + } } }); } diff --git a/projet/src/view/ViewRandom.java b/projet/src/view/ViewRandom.java deleted file mode 100644 index d08afed..0000000 --- a/projet/src/view/ViewRandom.java +++ /dev/null @@ -1,11 +0,0 @@ -package view; - -import javafx.beans.InvalidationListener; -import javafx.beans.Observable; -import javafx.scene.control.Spinner; -import javafx.scene.control.TextArea; -import javafx.scene.layout.BorderPane; -import modele.RandomCapteur; -import org.w3c.dom.Text; - -import java.io.IOException; \ No newline at end of file