From d715a6fc1e80bc36d9c14f91072c2caf2923403a Mon Sep 17 00:00:00 2001 From: clfreville2 Date: Tue, 17 Jan 2023 08:47:56 +0100 Subject: [PATCH] Create new sensors directly in the application --- resources/windows/MainWindows.fxml | 6 ++++ .../uca/iut/clfreville2/gui/MainWindows.java | 32 ++++++++++++++++++- .../gui/list/NameableStringConverter.java | 28 ++++++++++++++++ .../sensor/provider/AutoSensorProvider.java | 18 +++++++++++ .../sensor/provider/ManualSensorProvider.java | 17 ++++++++++ .../model/sensor/provider/SensorProvider.java | 10 ++++++ .../provider/VirtualSensorProvider.java | 17 ++++++++++ 7 files changed, 127 insertions(+), 1 deletion(-) create mode 100644 src/fr/uca/iut/clfreville2/gui/list/NameableStringConverter.java create mode 100644 src/fr/uca/iut/clfreville2/model/sensor/provider/AutoSensorProvider.java create mode 100644 src/fr/uca/iut/clfreville2/model/sensor/provider/ManualSensorProvider.java create mode 100644 src/fr/uca/iut/clfreville2/model/sensor/provider/SensorProvider.java create mode 100644 src/fr/uca/iut/clfreville2/model/sensor/provider/VirtualSensorProvider.java diff --git a/resources/windows/MainWindows.fxml b/resources/windows/MainWindows.fxml index 9b73069..29427f6 100644 --- a/resources/windows/MainWindows.fxml +++ b/resources/windows/MainWindows.fxml @@ -13,6 +13,7 @@ +
@@ -38,6 +39,11 @@ + + + + +
diff --git a/src/fr/uca/iut/clfreville2/gui/MainWindows.java b/src/fr/uca/iut/clfreville2/gui/MainWindows.java index cd32ddb..8c2a3c0 100644 --- a/src/fr/uca/iut/clfreville2/gui/MainWindows.java +++ b/src/fr/uca/iut/clfreville2/gui/MainWindows.java @@ -3,6 +3,7 @@ package fr.uca.iut.clfreville2.gui; import fr.uca.iut.clfreville2.gui.image.ImageSupplier; import fr.uca.iut.clfreville2.gui.image.SensorTypeImageSupplier; import fr.uca.iut.clfreville2.gui.image.StandardImageSupplier; +import fr.uca.iut.clfreville2.gui.list.NameableStringConverter; import fr.uca.iut.clfreville2.gui.table.WeightSpinnerTableCell; import fr.uca.iut.clfreville2.gui.thread.Ticker; import fr.uca.iut.clfreville2.gui.tree.SensorTreeCell; @@ -12,12 +13,17 @@ import fr.uca.iut.clfreville2.model.binding.ToBooleanBinding; import fr.uca.iut.clfreville2.model.sensor.ManualSensor; import fr.uca.iut.clfreville2.model.sensor.Sensor; import fr.uca.iut.clfreville2.model.sensor.VirtualSensor; +import fr.uca.iut.clfreville2.model.sensor.provider.AutoSensorProvider; +import fr.uca.iut.clfreville2.model.sensor.provider.ManualSensorProvider; +import fr.uca.iut.clfreville2.model.sensor.provider.SensorProvider; +import fr.uca.iut.clfreville2.model.sensor.provider.VirtualSensorProvider; import fr.uca.iut.clfreville2.persistence.StubSensorRegistryLoader; import javafx.beans.property.SimpleObjectProperty; import javafx.collections.FXCollections; import javafx.fxml.FXML; import javafx.scene.control.Button; import javafx.scene.control.CheckBox; +import javafx.scene.control.ChoiceBox; import javafx.scene.control.Slider; import javafx.scene.control.Spinner; import javafx.scene.control.TableCell; @@ -26,7 +32,6 @@ import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.TreeItem; import javafx.scene.control.TreeView; -import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.image.ImageView; import javafx.scene.text.Text; import javafx.stage.Stage; @@ -66,6 +71,15 @@ public class MainWindows { @FXML private TableColumn sourceId; + @FXML + private TextField newName; + + @FXML + private ChoiceBox createType; + + @FXML + private Button createButton; + @FXML private Spinner updateInterval; @@ -112,11 +126,17 @@ public class MainWindows { }).show(); } + @FXML + public void onCreateClick() { + createType.getSelectionModel().getSelectedItem().create(registry, newName.getText()); + } + @FXML private void initialize() { bindSensorTree(); bindActiveButtons(); bindSources(); + bindProvidable(); bindUpdate(); } @@ -171,6 +191,16 @@ public class MainWindows { sourceId.setCellValueFactory(cell -> cell.getValue().sensor().idProperty().asString()); } + @FXML + private void bindProvidable() { + createType.getItems().addAll( + new ManualSensorProvider(), + new AutoSensorProvider(), + new VirtualSensorProvider() + ); + createType.setConverter(new NameableStringConverter<>(createType.getItems())); + } + @FXML private void bindUpdate() { updateInterval.getValueFactory().valueProperty().bindBidirectional(ticker.millisPerTickProperty().asObject()); diff --git a/src/fr/uca/iut/clfreville2/gui/list/NameableStringConverter.java b/src/fr/uca/iut/clfreville2/gui/list/NameableStringConverter.java new file mode 100644 index 0000000..50cd331 --- /dev/null +++ b/src/fr/uca/iut/clfreville2/gui/list/NameableStringConverter.java @@ -0,0 +1,28 @@ +package fr.uca.iut.clfreville2.gui.list; + +import fr.uca.iut.clfreville2.model.shared.Nameable; +import javafx.util.StringConverter; + +public class NameableStringConverter extends StringConverter { + + private final Iterable items; + + public NameableStringConverter(Iterable items) { + this.items = items; + } + + @Override + public String toString(T object) { + return object.getName(); + } + + @Override + public T fromString(String string) { + for (T item : items) { + if (item.getName().equals(string)) { + return item; + } + } + return null; + } +} diff --git a/src/fr/uca/iut/clfreville2/model/sensor/provider/AutoSensorProvider.java b/src/fr/uca/iut/clfreville2/model/sensor/provider/AutoSensorProvider.java new file mode 100644 index 0000000..dd5fe42 --- /dev/null +++ b/src/fr/uca/iut/clfreville2/model/sensor/provider/AutoSensorProvider.java @@ -0,0 +1,18 @@ +package fr.uca.iut.clfreville2.model.sensor.provider; + +import fr.uca.iut.clfreville2.model.SensorRegistry; +import fr.uca.iut.clfreville2.model.sensor.Sensor; +import fr.uca.iut.clfreville2.model.sensor.auto.RandomVariationStrategy; + +public class AutoSensorProvider implements SensorProvider { + + @Override + public Sensor create(SensorRegistry registry, String name) { + return registry.createAuto(name, new RandomVariationStrategy(5)); + } + + @Override + public String getName() { + return "Auto"; + } +} diff --git a/src/fr/uca/iut/clfreville2/model/sensor/provider/ManualSensorProvider.java b/src/fr/uca/iut/clfreville2/model/sensor/provider/ManualSensorProvider.java new file mode 100644 index 0000000..c170f91 --- /dev/null +++ b/src/fr/uca/iut/clfreville2/model/sensor/provider/ManualSensorProvider.java @@ -0,0 +1,17 @@ +package fr.uca.iut.clfreville2.model.sensor.provider; + +import fr.uca.iut.clfreville2.model.SensorRegistry; +import fr.uca.iut.clfreville2.model.sensor.Sensor; + +public class ManualSensorProvider implements SensorProvider { + + @Override + public Sensor create(SensorRegistry registry, String name) { + return registry.createManual(name); + } + + @Override + public String getName() { + return "Manual"; + } +} diff --git a/src/fr/uca/iut/clfreville2/model/sensor/provider/SensorProvider.java b/src/fr/uca/iut/clfreville2/model/sensor/provider/SensorProvider.java new file mode 100644 index 0000000..b390acc --- /dev/null +++ b/src/fr/uca/iut/clfreville2/model/sensor/provider/SensorProvider.java @@ -0,0 +1,10 @@ +package fr.uca.iut.clfreville2.model.sensor.provider; + +import fr.uca.iut.clfreville2.model.SensorRegistry; +import fr.uca.iut.clfreville2.model.sensor.Sensor; +import fr.uca.iut.clfreville2.model.shared.Nameable; + +public interface SensorProvider extends Nameable { + + Sensor create(SensorRegistry registry, String name); +} diff --git a/src/fr/uca/iut/clfreville2/model/sensor/provider/VirtualSensorProvider.java b/src/fr/uca/iut/clfreville2/model/sensor/provider/VirtualSensorProvider.java new file mode 100644 index 0000000..ce45580 --- /dev/null +++ b/src/fr/uca/iut/clfreville2/model/sensor/provider/VirtualSensorProvider.java @@ -0,0 +1,17 @@ +package fr.uca.iut.clfreville2.model.sensor.provider; + +import fr.uca.iut.clfreville2.model.SensorRegistry; +import fr.uca.iut.clfreville2.model.sensor.Sensor; + +public class VirtualSensorProvider implements SensorProvider { + + @Override + public Sensor create(SensorRegistry registry, String name) { + return registry.createVirtual(name); + } + + @Override + public String getName() { + return "Virtual"; + } +}