fin du treeView

master
thchazot1 2 years ago
parent 88851571d6
commit 30f083a5f0

@ -7,13 +7,11 @@
<?import javafx.scene.layout.BorderPane?> <?import javafx.scene.layout.BorderPane?>
<?import javafx.scene.text.Text?> <?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"> <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> <items>
<TreeView fx:id="tree"/> <TreeView fx:id="tree"/>
<VBox> <VBox fx:id="vBox">
<TextField fx:id="name"/> <TextField fx:id="name"/>
<Text fx:id="id"/> <Text fx:id="id"/>
<TextField fx:id="temperature"/> <TextField fx:id="temperature"/>

@ -28,25 +28,20 @@ public class Launch extends Application {
CapteurVirtuel leCapteurVirtuel = (CapteurVirtuel) Stub.genererCapteur(); CapteurVirtuel leCapteurVirtuel = (CapteurVirtuel) Stub.genererCapteur();
ObservableList<Capteur> capteurs = Stub.genererObservableList(); ObservableList<Capteur> capteurs = Stub.genererObservableList();
TreeViewCapteur treeViewCapteur = new TreeViewCapteur(capteurs,"/fxml/TreeViewCapteur.fxml","Mon capteur"); TreeViewCapteur treeViewCapteur = new TreeViewCapteur(capteurs,"/fxml/TreeViewCapteur.fxml","Mon capteur");
ViewCapteurImage viewCapteurImage = new ViewCapteurImage(capteurImage, "/fxml/ImageCapteur.fxml", "test");
Thread t = new Thread(() -> { Thread t = new Thread(() -> {
Random r = new Random();
while (true) { while (true) {
try { try {
Thread.sleep(1000); Thread.sleep(1000);
Platform.runLater(() -> { Platform.runLater(() -> {
/* for (Capteur capteurs1 : capteurs) {
for (ObservableMap.Entry<Float, Capteur> map : leCapteurVirtuel.getLesCapteurs().entrySet()) {
try { try {
map.getValue().genTemp(r.nextFloat(50)); capteurs1.genTemp();
} catch (IOException e) { } catch (IOException e) {
throw new RuntimeException(e); throw new RuntimeException(e);
} }
} }
leCapteurVirtuel.genTemp(1); //capteurImage.genTemp(r.nextFloat(-20,50));
*/
capteurImage.genTemp(r.nextFloat(-20,50));
}); });
} catch (InterruptedException e) { } catch (InterruptedException e) {

@ -1,14 +1,9 @@
package modele; package modele;
import javafx.beans.InvalidationListener;
import javafx.beans.Observable;
import javafx.beans.property.*; import javafx.beans.property.*;
import javafx.collections.FXCollections; import javafx.scene.control.TreeItem;
import javafx.collections.ObservableList;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID; import java.util.UUID;
public abstract class Capteur { public abstract class Capteur {
@ -19,6 +14,12 @@ public abstract class Capteur {
this.nom.set(nom); 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(); private final FloatProperty temperature = new SimpleFloatProperty();
public float getTemperature() {return temperature.get();} public float getTemperature() {return temperature.get();}
public FloatProperty temperatureProperty() {return temperature;} public FloatProperty temperatureProperty() {return temperature;}
@ -35,6 +36,13 @@ public abstract class Capteur {
public void setId(String id) {this.id.set(id);} 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 javafx.scene.image.Image;
import java.io.IOException; import java.io.IOException;
@Deprecated
public class CapteurImage extends Capteur{ public class CapteurImage extends UnitCapteur{
private final ObjectProperty<Image> image = new SimpleObjectProperty<>(); private final ObjectProperty<Image> image = new SimpleObjectProperty<>();
public ObjectProperty<Image> imageProperty() {return image;} public ObjectProperty<Image> imageProperty() {return image;}
public void setImage(Image image) {this.image.set(image);} public void setImage(Image image) {this.image.set(image);}
public CapteurImage(float temp, String nom) { public CapteurImage(float temp, String nom) {
super(temp, nom); super(temp, nom, new CpuGenerator());
genTemp(temp); }
public CapteurImage(Capteur capteur){
super(capteur);
} }
@Override @Override
public void genTemp(float x){ public void genTemp(){
setTemperature(x); setTemperature(12);
if (getTemperature()<0){ if (getTemperature()<0){
setImage(new Image("/Assets/hilarious-snow-memes.jpg")); setImage(new Image("/Assets/hilarious-snow-memes.jpg"));
} }

@ -7,6 +7,7 @@ import javafx.beans.property.SimpleMapProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.collections.ObservableMap; import javafx.collections.ObservableMap;
import javafx.scene.control.TreeItem;
public class CapteurVirtuel extends Capteur{ public class CapteurVirtuel extends Capteur{
@ -18,15 +19,13 @@ public class CapteurVirtuel extends Capteur{
private final MapProperty<Float, Capteur> lesCapteurs = new SimpleMapProperty<>(capteurObs); private final MapProperty<Float, Capteur> lesCapteurs = new SimpleMapProperty<>(capteurObs);
public ObservableMap<Float, Capteur> getLesCapteurs() {return lesCapteurs.getValue();} 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) { public void addCapteur(Capteur capteur, Float poids) {
capteurObs.put(poids, capteur); capteurObs.put(poids, capteur);
} }
@Override @Override
public void genTemp(float x) { public void genTemp() {
float tempTotal=0; float tempTotal=0;
if (getLesCapteurs().size()==0){ if (getLesCapteurs().size()==0){
setTemperature(0); setTemperature(0);
@ -39,4 +38,9 @@ public class CapteurVirtuel extends Capteur{
tempTotal=tempTotal/getLesCapteurs().size(); tempTotal=tempTotal/getLesCapteurs().size();
setTemperature(tempTotal); 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.Files;
import java.nio.file.Path; import java.nio.file.Path;
public class CpuCapteur extends Capteur{ @Deprecated
public class CpuCapteur extends UnitCapteur{
public CpuCapteur(float temperature, String nom) { public CpuCapteur(float temperature, String nom) {
super(temperature,nom); super(temperature,nom, new CpuGenerator());
}
public CpuCapteur(Capteur capteur) {
super(capteur);
} }
@Override @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")))); 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; import java.util.Random;
public class RandomCapteur extends Capteur{ @Deprecated
public class RandomCapteur extends UnitCapteur{
public RandomCapteur(float temperature, String nom) { public RandomCapteur(float temperature, String nom) {
super(temperature, nom); super(temperature, nom, new RandomGenerator());
}
public RandomCapteur(Capteur capteur) {
super(capteur);
} }
@Override @Override
public void genTemp(float x) { public void genTemp() {
Random random = new Random(); 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(){ public static ObservableList<Capteur> genererObservableList(){
List<Capteur> capteurs = new ArrayList<>(); List<Capteur> capteurs = new ArrayList<>();
CapteurVirtuel retour = new CapteurVirtuel(45, "cap1"); CapteurVirtuel retour = new CapteurVirtuel(45, "cap1");
retour.addCapteur(new CpuCapteur(12, "cap2"), 12F); retour.addCapteur(new UnitCapteur(12, "cap2", new CpuGenerator()), 3F);
retour.addCapteur(new CpuCapteur(0, "cap3"), 7F); retour.addCapteur(new UnitCapteur(12, "cap3", new RandomGenerator()), 2F);
retour.addCapteur(new CpuCapteur(20 ,"cap4"), 6F); retour.addCapteur(new UnitCapteur(12, "cap4", new RandomGenerator()), 1F);
retour.addCapteur(new CpuCapteur(5, "cap5"), 4.5F); 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(retour);
capteurs.add(new CpuCapteur(0, "cap6")); capteurs.add(new UnitCapteur(12, "cap6", new RandomGenerator()));
capteurs.add(new CpuCapteur(20 ,"cap7")); capteurs.add(new UnitCapteur(12, "cap7", new CpuGenerator()));
capteurs.add(new CpuCapteur(5, "cap8")); capteurs.add(new UnitCapteur(12, "cap8", new RandomGenerator()));
return FXCollections.observableList(capteurs); 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.beans.value.ObservableValue;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.event.Event; import javafx.event.Event;
import javafx.event.EventHandler; import javafx.event.EventHandler;
import javafx.event.EventType; import javafx.event.EventType;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.*; import javafx.scene.control.*;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.layout.VBox;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import javafx.util.converter.NumberStringConverter; import javafx.util.converter.NumberStringConverter;
import modele.Capteur; import modele.*;
import modele.CapteurVirtuel;
import modele.CpuCapteur;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
import static java.lang.Float.parseFloat;
public class TreeViewCapteur extends FxmlWindow { public class TreeViewCapteur extends FxmlWindow {
@ -31,61 +35,85 @@ public class TreeViewCapteur extends FxmlWindow {
private Text id; private Text id;
@FXML @FXML
private TextField temperature; private TextField temperature;
@FXML
private VBox vBox;
private TableView<Capteur> tableView;
private Button changeToCpu;
private Button changeToRandom;
private ObservableList<Capteur> lesCapteurs; private ObservableList<Capteur> lesCapteurs;
public TreeViewCapteur(ObservableList<Capteur> lesCapteurs, String url, String title) throws IOException { public TreeViewCapteur(ObservableList<Capteur> lesCapteurs, String url, String title) throws IOException {
super(url, title); super(url, title);
this.lesCapteurs = lesCapteurs; this.lesCapteurs = lesCapteurs;
changeToCpu = new Button("Change to CPU");
changeToRandom = new Button("Change to Random");
TreeItem<Capteur> root = new TreeItem<>(); TreeItem<Capteur> root = new TreeItem<>();
tree.setRoot(root); tree.setRoot(root);
tree.setShowRoot(false); tree.setShowRoot(false);
for (Capteur capteur : lesCapteurs) { tree.setCellFactory(capteurTreeView -> new TreeCell<>() {
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<>() {
@Override @Override
protected void updateItem(Capteur item, boolean empty) { protected void updateItem(Capteur item, boolean empty) {
super.updateItem(item, empty); super.updateItem(item, empty);
if (!empty && item!=null) { if (!empty) {
textProperty().bindBidirectional(item.nomProperty()); textProperty().bind(item.nomProperty());
} else { } else {
textProperty().unbind(); 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) -> { tree.getSelectionModel().selectedItemProperty().addListener((observableValue, old, newV) -> {
if (old != null) { if (old != null) {
name.textProperty().unbindBidirectional(old.getValue().nomProperty()); name.textProperty().unbindBidirectional(old.getValue().nomProperty());
id.textProperty().unbindBidirectional(old.getValue().idProperty()); id.textProperty().unbindBidirectional(old.getValue().idProperty());
temperature.textProperty().unbindBidirectional(old.getValue().temperatureProperty()); 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) { if (newV != null) {
name.textProperty().bindBidirectional(newV.getValue().nomProperty()); name.textProperty().bindBidirectional(newV.getValue().nomProperty());
id.textProperty().bindBidirectional(newV.getValue().idProperty()); 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<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