Create new sensors directly in the application

main
Clément FRÉVILLE 2 years ago
parent ded77eeb66
commit d715a6fc1e

@ -13,6 +13,7 @@
<?import javafx.scene.control.TableView?>
<?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TreeView?>
<?import javafx.scene.control.ChoiceBox?>
<BorderPane xmlns:fx="http://javafx.com/fxml" prefHeight="400.0" prefWidth="600.0">
<center>
<SplitPane>
@ -38,6 +39,11 @@
<TableColumn fx:id="sourceId" text="Id" />
</columns>
</TableView>
<FlowPane>
<TextField fx:id="newName" />
<ChoiceBox fx:id="createType" />
<Button onAction="#onCreateClick">Create</Button>
</FlowPane>
</VBox>
</SplitPane>
</center>

@ -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<VirtualSensor.DataSource, String> sourceId;
@FXML
private TextField newName;
@FXML
private ChoiceBox<SensorProvider> createType;
@FXML
private Button createButton;
@FXML
private Spinner<Integer> 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());

@ -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<T extends Nameable> extends StringConverter<T> {
private final Iterable<T> items;
public NameableStringConverter(Iterable<T> 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;
}
}

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

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

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

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