Persist station list across sessions

This commit is contained in:
Nathan McRae 2025-01-09 22:29:11 -08:00
parent c5e0b41dab
commit 4444b82edc
4 changed files with 87 additions and 13 deletions

View File

@ -4,6 +4,9 @@ import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ResourceBundle;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
@ -85,12 +88,7 @@ public class NumbersStationController implements Initializable {
}
settings.setSelectedStationName(selectedStationName.get());
XmlMapper xmlMapper = new XmlMapper();
try {
xmlMapper.writeValue(new File("setting-test.xml"), settings);
} catch (IOException e) {
e.printStackTrace();
}
settings.save();
});
} catch (Exception e) {
e.printStackTrace();
@ -101,9 +99,29 @@ public class NumbersStationController implements Initializable {
}
private void loadSettings() throws IOException {
File file = new File("setting-test.xml");
XmlMapper xmlMapper = new XmlMapper();
settings = xmlMapper.readValue(file, NumbersStationSettings.class);
String userHome = System.getProperty("user.home");
Path directoryPath = Paths.get(userHome, ".numbers-station");
Path filePath = directoryPath.resolve("settings.xml");
try {
// Create the directory if it doesn't exist
if (!Files.exists(directoryPath)) {
Files.createDirectories(directoryPath);
}
if (!Files.exists(filePath)) {
settings = new NumbersStationSettings();
xmlMapper.writeValue(new File(filePath.toString()), settings);
} else {
settings = xmlMapper.readValue(new File(filePath.toString()), NumbersStationSettings.class);
}
} catch (IOException e) {
// Print the contents of filePath
System.out.println("File contents: " + Files.readString(filePath));
e.printStackTrace();
}
}
@Override

View File

@ -1,5 +1,6 @@
package name.nathanmcrae;
import javafx.collections.ListChangeListener;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
@ -10,11 +11,12 @@ import javafx.event.ActionEvent;
import javafx.event.Event;
import javafx.scene.Node;
import javafx.stage.Stage;
import java.util.Optional;
public class NumbersStationSelectionController {
private NumbersStationSettings settings;
@FXML
private ListView<StationSettings> stationListView;
@ -23,6 +25,8 @@ public class NumbersStationSelectionController {
public NumbersStationSelectionController() {
// Initialize the list with an empty list
stationList = FXCollections.observableArrayList();
// Add listener to the stationList
stationList.addListener((ListChangeListener<StationSettings>) change -> onStationListChanged(change));
}
@FXML
@ -41,8 +45,8 @@ public class NumbersStationSelectionController {
});
}
public void setSettings(NumbersStationSettings settings) {
// Populate the list with stations from settings
public void setSettings(NumbersStationSettings newSettings) {
settings = newSettings;
stationList.addAll(settings.getStations());
stationListView.setItems(stationList);
}
@ -59,8 +63,7 @@ public class NumbersStationSelectionController {
Optional<String> result = dialog.showAndWait();
result.ifPresent(stationName -> {
// Add the new station to the list
StationSettings newStation = new StationSettings();
newStation.setName(stationName);
StationSettings newStation = new StationSettings(stationName);
stationList.add(newStation);
});
}
@ -86,4 +89,22 @@ public class NumbersStationSelectionController {
}
stage.close();
}
private void onStationListChanged(ListChangeListener.Change<? extends StationSettings> change) {
while (change.next()) {
if (change.wasAdded()) {
for (StationSettings addedStation : change.getAddedSubList()) {
System.out.println("Added: " + addedStation.getName());
}
}
if (change.wasRemoved()) {
for (StationSettings removedStation : change.getRemoved()) {
System.out.println("Removed: " + removedStation.getName());
}
}
}
settings.getStations().clear();
settings.getStations().addAll(stationList);
settings.save();
}
}

View File

@ -1,5 +1,11 @@
package name.nathanmcrae;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
public class NumbersStationSettings {
@ -10,6 +16,11 @@ public class NumbersStationSettings {
private ArrayList<StationSettings> stations;
public NumbersStationSettings() {
stations = new ArrayList<>();
stations.add(new StationSettings("Station 1"));
}
public ArrayList<StationSettings> getStations() {
return stations;
}
@ -37,4 +48,22 @@ public class NumbersStationSettings {
public void setSelectedStationName(String selectedStationName) {
this.selectedStationName = selectedStationName;
}
public void save() {
XmlMapper xmlMapper = new XmlMapper();
try {
String userHome = System.getProperty("user.home");
Path directoryPath = Paths.get(userHome, ".numbers-station");
Path filePath = directoryPath.resolve("settings.xml");
// Create the directory if it doesn't exist
if (!Files.exists(directoryPath)) {
Files.createDirectories(directoryPath);
}
xmlMapper.writeValue(new File(filePath.toString()), this);
} catch (IOException e) {
e.printStackTrace();
}
}
}

View File

@ -5,6 +5,12 @@ public class StationSettings {
private int digitsPerGroup;
private int messageLength;
public StationSettings() { }
public StationSettings(String newName) {
name = newName;
}
public String getName() {
return name;
}