commit 2f8ea6f351dccf347f8537baf3536130f87cc662 Author: dohodin Date: Wed Jan 18 12:24:23 2023 +0100 First Commit diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..13566b8 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/ProjetJavaFX.iml b/.idea/ProjetJavaFX.iml new file mode 100644 index 0000000..d6ebd48 --- /dev/null +++ b/.idea/ProjetJavaFX.iml @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..639900d --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..3334d69 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/StationMeteo.iml b/StationMeteo.iml new file mode 100644 index 0000000..6f39f75 --- /dev/null +++ b/StationMeteo.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/out/production/StationMeteo/console/LView$1$1.class b/out/production/StationMeteo/console/LView$1$1.class new file mode 100644 index 0000000..b9f8657 Binary files /dev/null and b/out/production/StationMeteo/console/LView$1$1.class differ diff --git a/out/production/StationMeteo/console/LView$1.class b/out/production/StationMeteo/console/LView$1.class new file mode 100644 index 0000000..89019de Binary files /dev/null and b/out/production/StationMeteo/console/LView$1.class differ diff --git a/out/production/StationMeteo/console/LView.class b/out/production/StationMeteo/console/LView.class new file mode 100644 index 0000000..8d7e77d Binary files /dev/null and b/out/production/StationMeteo/console/LView.class differ diff --git a/out/production/StationMeteo/fxml/FenetrePrincipale.fxml b/out/production/StationMeteo/fxml/FenetrePrincipale.fxml new file mode 100644 index 0000000..2e8219a --- /dev/null +++ b/out/production/StationMeteo/fxml/FenetrePrincipale.fxml @@ -0,0 +1,5 @@ + + + + + diff --git a/out/production/StationMeteo/model/Alea.class b/out/production/StationMeteo/model/Alea.class new file mode 100644 index 0000000..3eb0ca2 Binary files /dev/null and b/out/production/StationMeteo/model/Alea.class differ diff --git a/out/production/StationMeteo/model/CPUTemp.class b/out/production/StationMeteo/model/CPUTemp.class new file mode 100644 index 0000000..c1a06ed Binary files /dev/null and b/out/production/StationMeteo/model/CPUTemp.class differ diff --git a/out/production/StationMeteo/model/CapteurVirtuel.class b/out/production/StationMeteo/model/CapteurVirtuel.class new file mode 100644 index 0000000..b795070 Binary files /dev/null and b/out/production/StationMeteo/model/CapteurVirtuel.class differ diff --git a/out/production/StationMeteo/model/Captor.class b/out/production/StationMeteo/model/Captor.class new file mode 100644 index 0000000..2f6d758 Binary files /dev/null and b/out/production/StationMeteo/model/Captor.class differ diff --git a/out/production/StationMeteo/model/GenererTemperature.class b/out/production/StationMeteo/model/GenererTemperature.class new file mode 100644 index 0000000..e86559c Binary files /dev/null and b/out/production/StationMeteo/model/GenererTemperature.class differ diff --git a/out/production/StationMeteo/model/Observateur.class b/out/production/StationMeteo/model/Observateur.class new file mode 100644 index 0000000..5966eab Binary files /dev/null and b/out/production/StationMeteo/model/Observateur.class differ diff --git a/out/production/StationMeteo/model/Reel.class b/out/production/StationMeteo/model/Reel.class new file mode 100644 index 0000000..9744b9b Binary files /dev/null and b/out/production/StationMeteo/model/Reel.class differ diff --git a/out/production/StationMeteo/model/Sujet.class b/out/production/StationMeteo/model/Sujet.class new file mode 100644 index 0000000..4f7903a Binary files /dev/null and b/out/production/StationMeteo/model/Sujet.class differ diff --git a/out/production/StationMeteo/view/Image.class b/out/production/StationMeteo/view/Image.class new file mode 100644 index 0000000..ae3a417 Binary files /dev/null and b/out/production/StationMeteo/view/Image.class differ diff --git a/out/production/StationMeteo/view/Spinner.class b/out/production/StationMeteo/view/Spinner.class new file mode 100644 index 0000000..58e2bda Binary files /dev/null and b/out/production/StationMeteo/view/Spinner.class differ diff --git a/resource/fxml/FenetrePrincipale.fxml b/resource/fxml/FenetrePrincipale.fxml new file mode 100644 index 0000000..2e8219a --- /dev/null +++ b/resource/fxml/FenetrePrincipale.fxml @@ -0,0 +1,5 @@ + + + + + diff --git a/src/console/LView.java b/src/console/LView.java new file mode 100644 index 0000000..30e1e3f --- /dev/null +++ b/src/console/LView.java @@ -0,0 +1,108 @@ +package console; + +import model.*; +import javafx.application.Application; +import javafx.collections.ObservableList; +import javafx.scene.Scene; +import javafx.scene.control.ListCell; +import javafx.scene.control.ListView; +import javafx.stage.Stage; +import javafx.util.Callback; +import javafx.beans.value.ObservableValue; +import javafx.collections.FXCollections; +import javafx.collections.ListChangeListener; +import javafx.scene.layout.StackPane; + +public class LView extends Application { + + @Override + public void start(Stage primaryStage) { + CapteurVirtuel cV1 = new CapteurVirtuel("CaVirt1"); + CapteurVirtuel cV2 = new CapteurVirtuel("CaVirt2"); + + Captor c1 = new Captor("c1"); + Captor c2 = new Captor("c2"); + Captor c3 = new Captor("c3"); + Captor c4 = new Captor("c4"); + Captor c5 = new Captor("c5"); + Captor c6 = new Captor("c6"); + + + ListView listview = new ListView<>(); + + + ObservableList captors = FXCollections.observableArrayList( + captor->new ObservableValue[]{ + captor.getTempMoyenneProperty() + } + ); + + captors.addListener((ListChangeListener.Change c) ->{ + while (c.next()){ + if (c.wasUpdated()){ + listview.refresh(); + } + } + }); + + c1.startThread(); + c2.startThread(); + c3.startThread(); + c4.startThread(); + c5.startThread(); + c6.startThread(); + + cV1.addToLesCapteurs(c1); + cV1.addToLesCapteurs(c2); + cV1.addToLesCapteurs(c3); + cV2.addToLesCapteurs(c4); + cV2.addToLesCapteurs(c5); + cV2.addToLesCapteurs(c6); + + captors.add(cV1); + captors.add(cV2); + + listview.setCellFactory(new Callback<>() { + + @Override + public ListCell call(ListView captorListView) { + return new ListCell<>() { + @Override + protected void updateItem(CapteurVirtuel value, boolean empty) { + String text = ""; + super.updateItem(value, empty); + if (value != null) { + text = value.getTempMoyenne().toString(); + } + setText(text); + String style = null; + if (!empty) { + assert value != null; + if (value.isNegative()) { + style = "-fx-text-fill : blue"; + } + } + if (!empty && value.isHot()) { + style = "-fx-text-fill : red"; + } + setStyle(style); + } + }; + } + }); + + listview.setItems(captors); + + final StackPane root = new StackPane(); + root.getChildren().add(listview); + final Scene scene = new Scene(root); + primaryStage.setTitle("ListView"); + primaryStage.setWidth(300); + primaryStage.setHeight(350); + primaryStage.setScene(scene); + primaryStage.show(); + + + } + +} \ No newline at end of file diff --git a/src/model/Alea.java b/src/model/Alea.java new file mode 100644 index 0000000..c2fefd7 --- /dev/null +++ b/src/model/Alea.java @@ -0,0 +1,23 @@ +package model; + +import java.util.Random; + +public class Alea implements GenererTemperature{ + + private float temperature; + private double min; + private double max; + + public Alea(){ + this.temperature = genererTemperature(); + Random rand = new Random(); + min= rand.nextDouble(); + max= rand.nextDouble(min); + } + @Override + public float genererTemperature() { + + Random rand = new Random(); + return rand.nextFloat()+rand.nextInt(); + } +} diff --git a/src/model/CPUTemp.java b/src/model/CPUTemp.java new file mode 100644 index 0000000..083a59c --- /dev/null +++ b/src/model/CPUTemp.java @@ -0,0 +1,18 @@ +package model; + +import java.io.*; + +public class CPUTemp implements GenererTemperature{ + + float temperature ; + + public CPUTemp() throws IOException { + this.temperature = genererTemperature(); + } + @Override + public float genererTemperature() throws IOException { + File temp = new File("/sys/devices/virtual/thermal/thermal_zone6/temp"); + BufferedReader br = new BufferedReader(new FileReader(temp)); + return Float.parseFloat(br.readLine())/1000; + } +} diff --git a/src/model/CapteurVirtuel.java b/src/model/CapteurVirtuel.java new file mode 100644 index 0000000..8515ad0 --- /dev/null +++ b/src/model/CapteurVirtuel.java @@ -0,0 +1,82 @@ +package model; + + +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleDoubleProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import javafx.collections.*; +import java.util.*; +import static model.Captor.rand; + +public class CapteurVirtuel extends Sujet{ + + private final UUID id= UUID.randomUUID(); + private final StringProperty nom; + private final DoubleProperty tempMoyenne = new SimpleDoubleProperty(0); + + final Map source = new HashMap<>(); + private final ObservableMap lesCapteurs = FXCollections.observableMap(source); + public CapteurVirtuel(String nom){ + this.nom= new SimpleStringProperty(nom); + this.tempMoyenne.set(0.0); + lesCapteurs.addListener((MapChangeListener) c -> { + this.tempMoyenne.set(this.updateData()); + System.out.println("HEY"); + }); + } + + public UUID getId() + { + return this.id; + } + + public String getName(){ + return this.nom.get(); + } + + public DoubleProperty getTempMoyenneProperty(){ + return this.tempMoyenne; + } + + public Double getTempMoyenne(){ + return this.tempMoyenne.get(); + } + + public boolean isNegative(){ + return (this.getTempMoyenne()<0); + } + + public boolean isHot(){ + return (this.getTempMoyenne()>30); + } + + @Override + public String toString(){ + return Double.toString(this.getTempMoyenne()); + } + + + public Collection getLesCapteurs(){ + return lesCapteurs.values(); + } + + public void addToLesCapteurs(Captor c){ + lesCapteurs.put((rand.nextInt()%10),c); + } + + private Double updateData() { + int coef = 0; + double valeurs =0; + for (Map.Entry entry : lesCapteurs.entrySet()){ + coef += entry.getKey(); + valeurs += entry.getKey() * entry.getValue().getTemperature(); + } + if (coef==0 || valeurs==0){ + return 0.0; + }else { + return valeurs / coef; + } + } + +} diff --git a/src/model/Captor.java b/src/model/Captor.java new file mode 100644 index 0000000..790c844 --- /dev/null +++ b/src/model/Captor.java @@ -0,0 +1,64 @@ +package model; + +import javafx.application.Platform; +import javafx.beans.property.DoubleProperty; +import javafx.beans.property.SimpleDoubleProperty; +import javafx.beans.property.SimpleStringProperty; +import javafx.beans.property.StringProperty; +import java.util.Random; +import java.util.UUID; + +public class Captor implements Runnable{ + + private final UUID id= UUID.randomUUID(); + private final StringProperty name; + + private final DoubleProperty temperature; + + static final Random rand=new Random(System.currentTimeMillis()); + + public Captor(String name){ + this.name=new SimpleStringProperty(name); + this.temperature=new SimpleDoubleProperty(1.0); + } + + public UUID getId() + { + return this.id; + } + + public String getName(){ + return this.name.get(); + } + + public DoubleProperty getTemperatureProperty(){ + return this.temperature; + } + + public Double getTemperature(){ + return this.temperature.get(); + } + + public void setTemperature(double temperature){ + this.temperature.set(temperature); + } + + @Override + public void run(){ + while (true){ + Platform.runLater(()->setTemperature(rand.nextDouble(80.)-20.)); + try{ + Thread.sleep(5000); + } + catch (InterruptedException e){ + break; + } + } + } + + public void startThread(){ + Thread threadCaptor = new Thread(this); + threadCaptor.setDaemon(true); + threadCaptor.start(); + } +} diff --git a/src/model/GenererTemperature.java b/src/model/GenererTemperature.java new file mode 100644 index 0000000..96364c5 --- /dev/null +++ b/src/model/GenererTemperature.java @@ -0,0 +1,10 @@ +package model; + +import java.io.FileNotFoundException; +import java.io.IOException; + +public interface GenererTemperature { + + abstract float genererTemperature() throws IOException; + +} diff --git a/src/model/Observateur.java b/src/model/Observateur.java new file mode 100644 index 0000000..58aed6d --- /dev/null +++ b/src/model/Observateur.java @@ -0,0 +1,5 @@ +package model; + +public interface Observateur { + void update(); +} diff --git a/src/model/Reel.java b/src/model/Reel.java new file mode 100644 index 0000000..c8ccf3f --- /dev/null +++ b/src/model/Reel.java @@ -0,0 +1,21 @@ +package model; + +import java.util.Random; + +public class Reel implements GenererTemperature{ + + Random rand = new Random(); + private float min = -30; + private double max = 60; + private float temperature = (float) (min + rand.nextFloat() * (max - min)); + + public Reel(){ + this.temperature = genererTemperature(); + + } + @Override + public float genererTemperature() { + this.temperature=this.temperature + (-2 + rand.nextFloat() * (2-(-2))); + return this.temperature; + } +} diff --git a/src/model/Sujet.java b/src/model/Sujet.java new file mode 100644 index 0000000..9afbf05 --- /dev/null +++ b/src/model/Sujet.java @@ -0,0 +1,18 @@ +package model; + +import java.util.ArrayList; + +public abstract class Sujet { + + public ArrayList observateur = new ArrayList(); + + public void attacher(Observateur o){ + this.observateur.add(o); + } + + public void notifier(){ + for (Observateur o : observateur) { + o.update(); + } + } +} diff --git a/src/view/Image.java b/src/view/Image.java new file mode 100644 index 0000000..94bae0a --- /dev/null +++ b/src/view/Image.java @@ -0,0 +1,22 @@ +package view; + +import model.CapteurVirtuel; +import model.Observateur; + +public class Image implements Observateur { + + public float temperature; + + /* + public void __construct(float temperature){ + this.temperature = new Capteur("Test").getTemperature(); + } + */ + public void initialize(){ + + } + + public void update() { + + } +} diff --git a/src/view/Spinner.java b/src/view/Spinner.java new file mode 100644 index 0000000..fbc7fd2 --- /dev/null +++ b/src/view/Spinner.java @@ -0,0 +1,22 @@ +package view; + +import model.CapteurVirtuel; +import model.Observateur; + +public class Spinner implements Observateur { + + public float temperature ; + + /* + public void __construct(float temperature){ + this.temperature = new Capteur("Test").getTemperature(); + } + */ + public void initialize(){ + + } + + public void update() { + + } +}