commit final

master
Aurelien PINTRAND 2 years ago
parent 55482d17b5
commit d1753531c1

@ -0,0 +1,124 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.svg" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.svg" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.svg" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.svg" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>

@ -9,19 +9,37 @@
<AnchorPane xmlns="http://javafx.com/javafx" <AnchorPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml" xmlns:fx="http://javafx.com/fxml"
prefHeight="400.0" prefWidth="600.0"> prefHeight="-Infinity" prefWidth="-Infinity"
style="-fx-background-color: #F5F5F5;">
<BorderPane> <BorderPane>
<top> <top>
<VBox alignment="CENTER" spacing="10"> <VBox alignment="CENTER" spacing="10">
<Label text="Temperature (°C)" /> <Label text="Temperature (°C)" style="-fx-font-size: 18px; -fx-font-weight: bold"/>
<Spinner fx:id="tempSpinner" editable="true"></Spinner> <HBox alignment="CENTER" spacing="10">
<Spinner fx:id="tempSpinner" editable="true" style="-fx-background-color: white; -fx-font-size: 16px;"></Spinner>
<Button text="Update" style="-fx-background-color: #007bff; -fx-text-fill: white; -fx-font-size: 16px;"/>
</HBox>
</VBox> </VBox>
</top> </top>
<bottom> <center>
<TreeView fx:id = "tree"> <TreeView fx:id="tree" style="-fx-background-color: white;">
</TreeView> </TreeView>
</bottom> </center>
<right>
<VBox fx:id="vbox_droite" style="-fx-background-color: darksalmon;" spacing="10">
<GridPane>
<Label fx:id="nameLabel" text="Name: " style="-fx-font-size: 18px; -fx-font-weight: bold" GridPane.columnIndex="0" GridPane.rowIndex="0" />
<TextField fx:id="nameField" style="-fx-font-size: 16px;" GridPane.columnIndex="1" GridPane.rowIndex="0" />
<Label fx:id="weightLabel" text="Weight: " style="-fx-font-size: 18px; -fx-font-weight: bold" GridPane.columnIndex="0" GridPane.rowIndex="1" />
<TextField fx:id="weightField" style="-fx-font-size: 16px;" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label fx:id="tempLabel" text="Temperature: " style="-fx-font-size: 18px; -fx-font-weight: bold" GridPane.columnIndex="0" GridPane.rowIndex="2" />
<TextField fx:id="tempField" style="-fx-font-size: 16px;" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</GridPane>
<TableView fx:id="tableview"></TableView>
</VBox>
</right>
</BorderPane> </BorderPane>
</AnchorPane> </AnchorPane>

@ -3,27 +3,40 @@ package launch;
import javafx.application.Application; import javafx.application.Application;
import javafx.stage.Stage; import javafx.stage.Stage;
import modele.ConcreteSensor; import modele.ConcreteSensor;
import modele.Sensor;
import modele.SensorManager; import modele.SensorManager;
import modele.VirtualSensor; import modele.VirtualSensor;
import views.WeatherController; import views.WeatherController;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List;
public class Launch extends Application { public class Launch extends Application {
@Override @Override
public void start(Stage primaryStage) throws Exception { public void start(Stage primaryStage) throws Exception {
//Create captors here //CREATE SENSOR MANAGER
SensorManager.getInstance(); SensorManager.getInstance();
VirtualSensor virtualSensor = new VirtualSensor(new ArrayList<>(), 0, "testmachin", 54); //CREATE ALL SENSORS
ConcreteSensor concreteSensor1 = new ConcreteSensor(3); //CREATE VIRTUAL SENSOR 2 & CHILDREN
ConcreteSensor concreteSensor2 = new ConcreteSensor(78); ConcreteSensor concreteSensor3 = new ConcreteSensor(4, "concrete3",78,"random");
virtualSensor.addSensor(concreteSensor1,concreteSensor1.getWeight()); ConcreteSensor concreteSensor4 = new ConcreteSensor(5,"concrete4",47,"random");
virtualSensor.addSensor(concreteSensor2,concreteSensor2.getWeight()); VirtualSensor virtualSensor2 = new VirtualSensor(new ArrayList<>(), 4, "Virtual Sensor 2", 69);
virtualSensor2.addSensor(concreteSensor3, concreteSensor3.getWeight().getValue());
virtualSensor2.addSensor(concreteSensor4, concreteSensor4.getWeight().getValue());
SensorManager.getInstance().addSensor(virtualSensor); //CREATE VIRTUAL SENSOR 1 & CHILDREN
ConcreteSensor concreteSensor1 = new ConcreteSensor(2, "concrete1",78,"random");
ConcreteSensor concreteSensor2 = new ConcreteSensor(3,"concrete2",47,"random");
VirtualSensor virtualSensor1 = new VirtualSensor(new ArrayList<>(), 1, "Virtual Sensor 1", 54);
virtualSensor1.addSensor(concreteSensor1, concreteSensor1.getWeight().getValue());
virtualSensor1.addSensor(concreteSensor2, concreteSensor2.getWeight().getValue());
virtualSensor1.addSensor(virtualSensor2, virtualSensor2.getWeight().getValue());
//ADD SENSORS TO MANAGER
SensorManager.getInstance().addSensor(virtualSensor1);
//SensorManager.getInstance().addSensor(virtualSensor2);
//MARCHE PAS ( C SAD )
// concreteSensor1.changeGenerationMethod("cpu");
WeatherController weatherController = new WeatherController(SensorManager.getInstance().getSensorList(), "FXML/WeatherStation.fxml","WeatherStation"); WeatherController weatherController = new WeatherController(SensorManager.getInstance().getSensorList(), "FXML/WeatherStation.fxml","WeatherStation");

@ -1,23 +1,43 @@
package modele; package modele;
public class ConcreteSensor extends Sensor { import javafx.beans.property.SimpleDoubleProperty;
private double weight; import javafx.beans.property.SimpleStringProperty;
import static java.lang.System.exit;
public ConcreteSensor(double weight) { public class ConcreteSensor extends Sensor {
this.weight = weight; public ConcreteSensor(int id, String name, int weight, String generation) {
this.name = new SimpleStringProperty(name);
this.id = id;
this.weight = new SimpleDoubleProperty(weight);
this.changeGenerationMethod(generation);
updateTemperature();
// System.out.println("La température du capteur "+this.getName().getValue()+" est de "+this.getTemp());
} }
public double getWeight() { public void changeGenerationMethod(String generation) {
return weight; switch(generation){
case "random":
this.setTempGenerator(new TempRandom());
break;
case "cpu":
this.setTempGenerator(new TempCPU());
break;
default:
System.out.println("Choix de génération incorrect.");
exit(1);
}
} }
@Override
public void updateTemperature() { public void updateTemperature() {
this.setTemp(getTempGenerator().generateTemperature());
System.out.println("température de "+this.getName().getValue()+": "+getTemp());
} }
@Override @Override
public double generateTemperature() { public <T> T accept(Visitor<T> v) {
double min = -273.15; return v.visit(this);
double max = 1000; }
return Math.floor(Math.random() * (max - min + 1) + min); }
} }

@ -4,9 +4,10 @@ import javafx.beans.property.*;
public abstract class Sensor { public abstract class Sensor {
int id; int id;
StringProperty name; private TempGenerator tempGenerator;
double weight; protected StringProperty name;
private Property<Double> temp = new SimpleObjectProperty<>(0d); protected DoubleProperty weight;
protected DoubleProperty temp = new SimpleDoubleProperty();
public void setTemp(double tmp){ public void setTemp(double tmp){
this.temp.setValue(tmp); this.temp.setValue(tmp);
@ -19,10 +20,24 @@ public abstract class Sensor {
return name; return name;
} }
public Property<Double> getTempProperty(){ public DoubleProperty getTempProperty(){
return temp; return temp;
} }
public abstract double generateTemperature(); public abstract void updateTemperature();
public abstract <T> T accept(Visitor<T> v);
public DoubleProperty getWeight(){
return weight;
}
public TempGenerator getTempGenerator() {
return tempGenerator;
}
public void setTempGenerator(TempGenerator tempGenerator) {
this.tempGenerator = tempGenerator;
}
} }

@ -0,0 +1,56 @@
package modele;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class TempCPU implements TempGenerator, Runnable {
private Thread thread;
private boolean running = false;
double actualtemp = 666;
public void start() {
running = true;
thread.start();
}
public void stop() {
running = false;
try {
thread.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
@Override
public double generateTemperature() {
start();
return actualtemp;
}
@Override
public void run() {
while (running) {
try {
String cmd = "wmic /namespace:\\\\root\\wmi PATH MSAcpi_ThermalZoneTemperature get CurrentTemperature";
Process process = Runtime.getRuntime().exec(cmd);
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
if (!line.contains("CurrentTemperature")) {
int temp = Integer.parseInt(line);
temp =temp / 10 - 273;
System.out.println("Current CPU temperature: " + temp + " C");
actualtemp = temp;
}
}
reader.close();
// Sleep for a certain amount of time before getting the temperature again
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}

@ -0,0 +1,7 @@
package modele;
import java.util.List;
public interface TempGenerator {
public double generateTemperature();
}

@ -0,0 +1,10 @@
package modele;
public class TempRandom implements TempGenerator{
@Override
public double generateTemperature() {
double min = -273.15;
double max = 1000;
return Math.floor(Math.random() * (max - min + 1) + min);
}
}

@ -0,0 +1,26 @@
package modele;
import javafx.scene.control.TreeItem;
public class TreeItemFactoryVisitor implements Visitor<TreeItem<Sensor>>{
@Override
public TreeItem<Sensor> visit(ConcreteSensor c) {
return new TreeItem<>(c);
}
@Override
public TreeItem<Sensor> visit(VirtualSensor v) {
TreeItem<Sensor> item = new TreeItem<>(v);
for (Sensor sensor: v.getSensors()) {
TreeItem<Sensor> childItem;
if(sensor instanceof VirtualSensor){
childItem = visit((VirtualSensor) sensor);
}
else {
childItem = new TreeItem<>(sensor);
}
item.getChildren().add(childItem);
}
return item;
}
}

@ -1,5 +1,6 @@
package modele; package modele;
import javafx.beans.property.SimpleDoubleProperty;
import javafx.beans.property.SimpleStringProperty; import javafx.beans.property.SimpleStringProperty;
import java.util.ArrayList; import java.util.ArrayList;
@ -8,42 +9,50 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class VirtualSensor extends Sensor { public class VirtualSensor extends Sensor {
private List<ConcreteSensor> sensors =new ArrayList<>(); private List<Sensor> sensors =new ArrayList<>();
private Map<ConcreteSensor, Double> weights = new HashMap<>(); private Map<Sensor, Double> weights = new HashMap<>();
public VirtualSensor(List<Sensor> sensorsList, int id, String name, int weight) { public VirtualSensor(List<Sensor> sensorsList, int id, String name, int weight) {
this.name = new SimpleStringProperty(name); this.name = new SimpleStringProperty(name);
this.id = id; this.id = id;
this.weight = weight; this.weight = new SimpleDoubleProperty(weight);
this.temp = new SimpleDoubleProperty(0);
this.updateTemperature();
// System.out.println("La température du capteur "+this.getName().getValue()+" est de "+this.getTemp());
} }
public void addSensor(ConcreteSensor sensor, double weight) { public void addSensor(Sensor sensor, double weight) {
sensors.add(sensor); sensors.add(sensor);
weights.put(sensor, weight); weights.put(sensor, weight);
sensor.getTempProperty().addListener((observable, oldValue, newValue) -> updateTemperature()); sensor.getTempProperty().addListener((observable, oldValue, newValue) -> updateTemperature());
updateTemperature();
} }
@Override
public void updateTemperature() { public void updateTemperature() {
double tempSum = 0; double tempSum = 0;
double weightSum = 0; double weightSum = 0;
for (ConcreteSensor sensor : sensors) { if(sensors.isEmpty()){
tempSum += sensor.getTemp() * weights.get(sensor); this.setTemp(0);
}
else {
for (Sensor sensor : sensors) {
tempSum += sensor.getTemp();
weightSum += weights.get(sensor); weightSum += weights.get(sensor);
System.out.println("capteur " + sensor.getName().getValue() + " tempSum: " + tempSum + " weightSum: " + weightSum);
}
setTemp(tempSum / sensors.size());
System.out.println("température finale de "+this.getName().getValue()+" : "+this.getTemp());
} }
setTemp(tempSum / weightSum);
} }
@Override @Override
public double generateTemperature() { public <T> T accept(Visitor<T> v) {
double value = 0; return v.visit(this);
double count = 0; }
for (Sensor sensor:
sensors) { public List<Sensor> getSensors(){
value += sensor.getTemp(); return sensors;
count += 1;
}
value = value/count;
return value;
} }
} }

@ -0,0 +1,6 @@
package modele;
public interface Visitor<T> {
T visit(ConcreteSensor c);
T visit(VirtualSensor v);
}

@ -1,11 +1,19 @@
package views; package views;
import com.sun.javafx.collections.ObservableListWrapper;
import javafx.beans.Observable;
import javafx.beans.property.Property;
import javafx.beans.property.StringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.*; import javafx.scene.control.*;
import modele.ConcreteSensor; import javafx.scene.control.cell.PropertyValueFactory;
import modele.Sensor; import javafx.scene.input.MouseEvent;
import modele.SensorManager; import javafx.scene.layout.VBox;
import modele.VirtualSensor; import javafx.util.converter.NumberStringConverter;
import modele.*;
import org.w3c.dom.Text;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -13,63 +21,127 @@ import java.util.List;
public class WeatherController extends FXMLWindow { public class WeatherController extends FXMLWindow {
TableColumn<Sensor, String> nameCol = new TableColumn<>("Name");
TableColumn<Sensor, Double> tempCol = new TableColumn<>("Temperature");
Sensor sensor; @FXML
TableView tableview;
List<Sensor> sensorList; List<Sensor> sensorList;
TreeItem<Sensor> selectedSensor = null;
@FXML @FXML
Spinner<Double> tempSpinner; Spinner<Double> tempSpinner;
@FXML
VBox vbox_droite;
@FXML
TextField nameField;
@FXML
TextField weightField;
@FXML
TextField tempField;
@FXML @FXML
TreeView<Sensor> tree; TreeView<Sensor> tree;
public WeatherController(List<Sensor> sensorsList, String url, String title) throws IOException { public WeatherController(List<Sensor> sensorsList, String url, String title) throws IOException {
super(title, url); super(title, url);
TreeItem<Sensor> root = new TreeItem<>(sensorsList.get(0)); sensorList = sensorsList;
TreeItem<Sensor> root = new TreeItem<>();
root.setExpanded(true); root.setExpanded(true);
tree.setShowRoot(false);
tree.setRoot(root); tree.setRoot(root);
sensorList = sensorsList; TreeItemFactoryVisitor treeFactory = new TreeItemFactoryVisitor();
tree.setVisible(true); for(Sensor s: sensorList){
for (Sensor sensor : sensorsList) { if(s instanceof VirtualSensor){
TreeItem<Sensor> sensorItem = new TreeItem<>(sensor); VirtualSensor virtualSensor = (VirtualSensor) s;
root.getChildren().add(sensorItem); TreeItem<Sensor> item = virtualSensor.accept(treeFactory);
root.getChildren().add(item);
} }
else{
this.initializeSensor(); TreeItem<Sensor> item = s.accept(treeFactory);
root.getChildren().add(item);
} }
}
tree.setVisible(true);
vbox_droite.setVisible(false);
nameCol.setCellValueFactory(new PropertyValueFactory<>("name"));
tempCol.setCellValueFactory(new PropertyValueFactory<>("temp"));
public void initializeSensor(){
//------------------------------------------------------------------------------------------------------
sensor = new ConcreteSensor(56); this.treeViewBinding();
}
public void treeViewBinding() {
//------------------------------------------------------------------------------------------------------
tree.setCellFactory(param -> new TreeCell<Sensor>() { tree.setCellFactory(param -> new TreeCell<Sensor>() {
protected void updateItem(Sensor item, boolean empty) { @Override
super.updateItem(item, empty); protected void updateItem(Sensor sensor, boolean empty) {
super.updateItem(sensor, empty);
if (empty) { if (empty) {
setText(null); textProperty().unbind();
setText("");
} else { } else {
// setText(item.getName().getValue().toString()); textProperty().bind(sensor.getName());
textProperty().bindBidirectional(item.getName()); setOnMouseClicked(event -> selectItem());
} }
} }
}); });
//------------------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------------------
// SPINNER // SPINNER
tempSpinner.setVisible(true); tempSpinner.setVisible(true);
Sensor sensor = sensorList.get(0);
sensor.getTempProperty().addListener((observable, oldValue, newValue) -> { sensor.getTempProperty().addListener((observable, oldValue, newValue) -> {
System.out.println("La température a changé de " + oldValue + " à " + newValue); System.out.println("La température du capteur "+sensor.getName().getValue()+ " a changée de "+oldValue + " à " + newValue);
}); });
SpinnerValueFactory<Double> spinnerValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(-273, 10000, sensor.getTemp(), 0.5); SpinnerValueFactory<Double> spinnerValueFactory = new SpinnerValueFactory.DoubleSpinnerValueFactory(-273, 10000, sensor.getTemp(), 0.5);
tempSpinner.setValueFactory(spinnerValueFactory); tempSpinner.setValueFactory(spinnerValueFactory);
tempSpinner.getValueFactory().valueProperty().bindBidirectional(sensor.getTempProperty()); tempSpinner.getValueFactory().valueProperty().bindBidirectional(sensor.getTempProperty().asObject());
sensor.setTemp(sensor.generateTemperature()); sensor.updateTemperature();
System.out.println("initialize spinner"); // System.out.println("initialize spinner");
System.out.println(tempSpinner.getValueFactory().getValue()); // System.out.println(tempSpinner.getValueFactory().getValue());
}
public void selectItem(){
TreeItem<Sensor> selectedItem = tree.getSelectionModel().getSelectedItem();
if(selectedItem != null){
vbox_droite.setVisible(true);
if(selectedSensor != selectedItem){
if(selectedSensor != null ){
vboxUnbind(selectedSensor.getValue());
}
vboxBinding(selectedItem.getValue());
selectedSensor = selectedItem;
}
}
}
public void vboxUnbind(Sensor s){
nameField.textProperty().unbindBidirectional(s);
weightField.textProperty().unbindBidirectional(s);
tableview.getItems().clear();
tableview.refresh();
}; }
public void vboxBinding(Sensor s){
nameField.textProperty().bindBidirectional(s.getName());
weightField.textProperty().bindBidirectional(s.getWeight(), new NumberStringConverter());
tempField.textProperty().bindBidirectional(s.getTempProperty(), new NumberStringConverter());
if(s instanceof VirtualSensor){
VirtualSensor s2 = (VirtualSensor) s;
ObservableList<Sensor> o = FXCollections.observableList(s2.getSensors());
tableview.setItems(o);
tableview.getColumns().addAll(nameCol, tempCol);
}
}
} }

@ -9,19 +9,37 @@
<AnchorPane xmlns="http://javafx.com/javafx" <AnchorPane xmlns="http://javafx.com/javafx"
xmlns:fx="http://javafx.com/fxml" xmlns:fx="http://javafx.com/fxml"
prefHeight="400.0" prefWidth="600.0"> prefHeight="-Infinity" prefWidth="-Infinity"
style="-fx-background-color: #F5F5F5;">
<BorderPane> <BorderPane>
<top> <top>
<VBox alignment="CENTER" spacing="10"> <VBox alignment="CENTER" spacing="10">
<Label text="Temperature (°C)" /> <Label text="Temperature (°C)" style="-fx-font-size: 18px; -fx-font-weight: bold"/>
<Spinner fx:id="tempSpinner" editable="true"></Spinner> <HBox alignment="CENTER" spacing="10">
<Spinner fx:id="tempSpinner" editable="true" style="-fx-background-color: white; -fx-font-size: 16px;"></Spinner>
<Button text="Update" style="-fx-background-color: #007bff; -fx-text-fill: white; -fx-font-size: 16px;"/>
</HBox>
</VBox> </VBox>
</top> </top>
<bottom> <center>
<TreeView fx:id = "tree"> <TreeView fx:id="tree" style="-fx-background-color: white;">
</TreeView> </TreeView>
</bottom> </center>
<right>
<VBox fx:id="vbox_droite" style="-fx-background-color: darksalmon;" spacing="10">
<GridPane>
<Label fx:id="nameLabel" text="Name: " style="-fx-font-size: 18px; -fx-font-weight: bold" GridPane.columnIndex="0" GridPane.rowIndex="0" />
<TextField fx:id="nameField" style="-fx-font-size: 16px;" GridPane.columnIndex="1" GridPane.rowIndex="0" />
<Label fx:id="weightLabel" text="Weight: " style="-fx-font-size: 18px; -fx-font-weight: bold" GridPane.columnIndex="0" GridPane.rowIndex="1" />
<TextField fx:id="weightField" style="-fx-font-size: 16px;" GridPane.columnIndex="1" GridPane.rowIndex="1" />
<Label fx:id="tempLabel" text="Temperature: " style="-fx-font-size: 18px; -fx-font-weight: bold" GridPane.columnIndex="0" GridPane.rowIndex="2" />
<TextField fx:id="tempField" style="-fx-font-size: 16px;" GridPane.columnIndex="1" GridPane.rowIndex="2" />
</GridPane>
<TableView fx:id="tableview"></TableView>
</VBox>
</right>
</BorderPane> </BorderPane>
</AnchorPane> </AnchorPane>

Loading…
Cancel
Save