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.TableView?>
<?import javafx.scene.control.TableColumn?> <?import javafx.scene.control.TableColumn?>
<?import javafx.scene.control.TreeView?> <?import javafx.scene.control.TreeView?>
<?import javafx.scene.control.ChoiceBox?>
<BorderPane xmlns:fx="http://javafx.com/fxml" prefHeight="400.0" prefWidth="600.0"> <BorderPane xmlns:fx="http://javafx.com/fxml" prefHeight="400.0" prefWidth="600.0">
<center> <center>
<SplitPane> <SplitPane>
@ -38,6 +39,11 @@
<TableColumn fx:id="sourceId" text="Id" /> <TableColumn fx:id="sourceId" text="Id" />
</columns> </columns>
</TableView> </TableView>
<FlowPane>
<TextField fx:id="newName" />
<ChoiceBox fx:id="createType" />
<Button onAction="#onCreateClick">Create</Button>
</FlowPane>
</VBox> </VBox>
</SplitPane> </SplitPane>
</center> </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.ImageSupplier;
import fr.uca.iut.clfreville2.gui.image.SensorTypeImageSupplier; import fr.uca.iut.clfreville2.gui.image.SensorTypeImageSupplier;
import fr.uca.iut.clfreville2.gui.image.StandardImageSupplier; 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.table.WeightSpinnerTableCell;
import fr.uca.iut.clfreville2.gui.thread.Ticker; import fr.uca.iut.clfreville2.gui.thread.Ticker;
import fr.uca.iut.clfreville2.gui.tree.SensorTreeCell; 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.ManualSensor;
import fr.uca.iut.clfreville2.model.sensor.Sensor; import fr.uca.iut.clfreville2.model.sensor.Sensor;
import fr.uca.iut.clfreville2.model.sensor.VirtualSensor; 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 fr.uca.iut.clfreville2.persistence.StubSensorRegistryLoader;
import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleObjectProperty;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.CheckBox; import javafx.scene.control.CheckBox;
import javafx.scene.control.ChoiceBox;
import javafx.scene.control.Slider; import javafx.scene.control.Slider;
import javafx.scene.control.Spinner; import javafx.scene.control.Spinner;
import javafx.scene.control.TableCell; import javafx.scene.control.TableCell;
@ -26,7 +32,6 @@ import javafx.scene.control.TableView;
import javafx.scene.control.TextField; import javafx.scene.control.TextField;
import javafx.scene.control.TreeItem; import javafx.scene.control.TreeItem;
import javafx.scene.control.TreeView; import javafx.scene.control.TreeView;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.image.ImageView; import javafx.scene.image.ImageView;
import javafx.scene.text.Text; import javafx.scene.text.Text;
import javafx.stage.Stage; import javafx.stage.Stage;
@ -66,6 +71,15 @@ public class MainWindows {
@FXML @FXML
private TableColumn<VirtualSensor.DataSource, String> sourceId; private TableColumn<VirtualSensor.DataSource, String> sourceId;
@FXML
private TextField newName;
@FXML
private ChoiceBox<SensorProvider> createType;
@FXML
private Button createButton;
@FXML @FXML
private Spinner<Integer> updateInterval; private Spinner<Integer> updateInterval;
@ -112,11 +126,17 @@ public class MainWindows {
}).show(); }).show();
} }
@FXML
public void onCreateClick() {
createType.getSelectionModel().getSelectedItem().create(registry, newName.getText());
}
@FXML @FXML
private void initialize() { private void initialize() {
bindSensorTree(); bindSensorTree();
bindActiveButtons(); bindActiveButtons();
bindSources(); bindSources();
bindProvidable();
bindUpdate(); bindUpdate();
} }
@ -171,6 +191,16 @@ public class MainWindows {
sourceId.setCellValueFactory(cell -> cell.getValue().sensor().idProperty().asString()); 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 @FXML
private void bindUpdate() { private void bindUpdate() {
updateInterval.getValueFactory().valueProperty().bindBidirectional(ticker.millisPerTickProperty().asObject()); 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