fin du treeView

master
thchazot1 2 years ago
parent 88851571d6
commit 30f083a5f0

@ -7,13 +7,11 @@
<?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.text.Text?>
<?import javafx.scene.control.cell.PropertyValueFactory?>
<SplitPane dividerPositions="0.3" xmlns="http://javafx.com/javafx" xmlns:fx="http://javafx.com/fxml">
<fx:define>
<Integer fx:id="moins1" fx:value="-1" />
</fx:define>
<items>
<TreeView fx:id="tree"/>
<VBox>
<VBox fx:id="vBox">
<TextField fx:id="name"/>
<Text fx:id="id"/>
<TextField fx:id="temperature"/>

@ -28,25 +28,20 @@ public class Launch extends Application {
CapteurVirtuel leCapteurVirtuel = (CapteurVirtuel) Stub.genererCapteur();
ObservableList<Capteur> 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<Float, Capteur> 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) {

@ -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> T accept(Visitor<T> visitor);
@Override
public boolean equals(Object capteur) {
return getId().equals(((Capteur) capteur).getId());
}
}

@ -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> image = new SimpleObjectProperty<>();
public ObjectProperty<Image> 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"));
}

@ -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<Float, Capteur> lesCapteurs = new SimpleMapProperty<>(capteurObs);
public ObservableMap<Float, Capteur> getLesCapteurs() {return lesCapteurs.getValue();}
public void setLesCapteurs(ObservableMap<Float, Capteur> value) {lesCapteurs.set(value);}
public MapProperty<Float, Capteur> 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<Capteur> accept(Visitor v){
return (TreeItem<Capteur>) v.visit(this);
}
}

@ -0,0 +1,8 @@
package modele;
import java.io.IOException;
public interface CaptorGeneratorStrategy {
float generate() throws IOException;
}

@ -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"))));
}
}

@ -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")));
}
}

@ -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));
}
}

@ -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);
}
}

@ -23,14 +23,17 @@ public class Stub {
public static ObservableList<Capteur> genererObservableList(){
List<Capteur> 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);
}

@ -0,0 +1,19 @@
package modele;
import javafx.scene.control.TreeItem;
public class TreeViewVisitor implements Visitor<TreeItem<Capteur>>{
@Override
public TreeItem<Capteur> visit(UnitCapteur cap) {
return new TreeItem<>(cap);
}
@Override
public TreeItem<Capteur> visit(CapteurVirtuel cap) {
TreeItem<Capteur> item = new TreeItem<>(cap);
for (Capteur captor: cap.getLesCapteurs().values()) {
item.getChildren().add(captor.accept(this));
}
return item;
}
}

@ -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<Capteur> accept(Visitor v){
return (TreeItem<Capteur>) v.visit(this);
}
}

@ -0,0 +1,6 @@
package modele;
public interface Visitor<T> {
T visit(UnitCapteur cap);
T visit(CapteurVirtuel cap);
}

@ -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<Capteur> tableView;
private Button changeToCpu;
private Button changeToRandom;
private ObservableList<Capteur> lesCapteurs;
public TreeViewCapteur(ObservableList<Capteur> 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<Capteur> root = new TreeItem<>();
tree.setRoot(root);
tree.setShowRoot(false);
for (Capteur capteur : lesCapteurs) {
TreeItem<Capteur> item = new TreeItem<>(capteur);
addTreeItem(item);
root.getChildren().add(item);
}
}
private void addTreeItem(TreeItem<Capteur> cap) {
if (cap.getValue() instanceof CapteurVirtuel) {
for (Capteur capteur : ((CapteurVirtuel) cap.getValue()).getLesCapteurs().values()) {
TreeItem<Capteur> item = new TreeItem<>(capteur);
addTreeItem(item);
cap.getChildren().add(item);
}
}
}
public void initialize() {
tree.setCellFactory(capteurTreeView -> {
TreeCell<Capteur> tc = new TreeCell<>() {
tree.setCellFactory(capteurTreeView -> new TreeCell<>() {
@Override
protected void updateItem(Capteur item, boolean empty) {
super.updateItem(item, empty);
if (!empty && item!=null) {
textProperty().bindBidirectional(item.nomProperty());
if (!empty) {
textProperty().bind(item.nomProperty());
} else {
textProperty().unbind();
//setText("");
setText("");
}
}
};
return tc;
});
for (Capteur capteur : lesCapteurs) {
root.getChildren().add(capteur.accept(new TreeViewVisitor()));
}
tableView = new TableView<>();
TableColumn<Capteur, String> nameCol = new TableColumn<>("Nom");
TableColumn<Capteur, Float> tempCol = new TableColumn<>("Température");
nameCol.setCellValueFactory(new PropertyValueFactory<>("nom"));
tempCol.setCellValueFactory(new PropertyValueFactory<>("temperature"));
tableView.getColumns().addAll(nameCol, tempCol);
}
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());
if (newV.getValue() instanceof CapteurVirtuel) {
tableView.getItems().addAll(((CapteurVirtuel) newV.getValue()).getLesCapteurs().values());
vBox.getChildren().add(tableView);
} else {
EventHandler<ActionEvent> eventCpu = e -> {
((UnitCapteur) newV.getValue()).setCaptorGeneratorStrategy(new CpuGenerator());
};
EventHandler<ActionEvent> eventRandom = e -> {
((UnitCapteur) newV.getValue()).setCaptorGeneratorStrategy(new RandomGenerator());
};
changeToCpu.setOnAction(eventCpu);
changeToRandom.setOnAction(eventRandom);
vBox.getChildren().addAll(changeToCpu, changeToRandom);
}
}
});
}

@ -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;
Loading…
Cancel
Save