From 02232cd27f9664bc3dd0e5b41587cbf133b42804 Mon Sep 17 00:00:00 2001 From: Dorian Nemec Date: Mon, 20 May 2024 16:34:06 +0200 Subject: [PATCH] #24: Implement Deprecated and Available medications --- .../nhplus/fixtures/MedicationFixture.java | 6 +- .../medication/AllMedicationController.java | 9 +-- .../DeprecatedMedicationController.java | 9 +-- .../hitec/nhplus/medication/Medication.java | 4 +- .../medication/database/MedicationDao.java | 57 +++++++++++++++++-- .../hitec/nhplus/nurse/database/NurseDao.java | 2 - .../treatment/AllTreatmentController.java | 4 +- .../nhplus/medication/database/Medication.sql | 2 +- .../hitec/nhplus/nurse/LockedNurseView.fxml | 1 - 9 files changed, 72 insertions(+), 22 deletions(-) diff --git a/src/main/java/de/hitec/nhplus/fixtures/MedicationFixture.java b/src/main/java/de/hitec/nhplus/fixtures/MedicationFixture.java index 8dc9f96..025c222 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/MedicationFixture.java +++ b/src/main/java/de/hitec/nhplus/fixtures/MedicationFixture.java @@ -117,7 +117,7 @@ public class MedicationFixture implements Fixture { "Unterhautinjektion", 120 )); - medications.add(new Medication( + Medication deprecatedMedication = new Medication( "Levothyroxin", "Sandoz", List.of( @@ -129,7 +129,9 @@ public class MedicationFixture implements Fixture { "Herzrasen, Gewichtsverlust", "Oral", 90 - )); + ); + deprecatedMedication.setIsDeprecated(true); + medications.add(deprecatedMedication); medications.add(new Medication( "Warfarin", "Apotex Inc.", diff --git a/src/main/java/de/hitec/nhplus/medication/AllMedicationController.java b/src/main/java/de/hitec/nhplus/medication/AllMedicationController.java index 8c2ca83..5e57089 100644 --- a/src/main/java/de/hitec/nhplus/medication/AllMedicationController.java +++ b/src/main/java/de/hitec/nhplus/medication/AllMedicationController.java @@ -60,7 +60,7 @@ public class AllMedicationController { */ @FXML public void initialize() { - readAllAndShowInTableView(); + this.readAllAndShowInTableView(); this.columnId.setCellValueFactory(new PropertyValueFactory<>("id")); this.columnName.setCellValueFactory(new PropertyValueFactory<>("name")); @@ -85,6 +85,7 @@ public class AllMedicationController { this.columnCurrentStock.setCellValueFactory(new PropertyValueFactory<>("currentStock")); this.tableView.setItems(this.medications); + } /** @@ -93,7 +94,7 @@ public class AllMedicationController { public void readAllAndShowInTableView() { this.dao = DaoFactory.getInstance().createMedicationDAO(); try { - this.medications.setAll(dao.readAll()); + this.medications.setAll(dao.readAllAvailable()); } catch (SQLException exception) { exception.printStackTrace(); } @@ -125,7 +126,7 @@ public class AllMedicationController { @FXML public void handleChangeAvailable() { - Medication selectedItem = tableView.getSelectionModel().getSelectedItem(); + Medication selectedItem = this.tableView.getSelectionModel().getSelectedItem(); if (selectedItem == null) { return; } @@ -136,7 +137,7 @@ public class AllMedicationController { } catch (SQLException exception) { exception.printStackTrace(); } - readAllAndShowInTableView(); + this.readAllAndShowInTableView(); } /** diff --git a/src/main/java/de/hitec/nhplus/medication/DeprecatedMedicationController.java b/src/main/java/de/hitec/nhplus/medication/DeprecatedMedicationController.java index d992fe9..8d36f59 100644 --- a/src/main/java/de/hitec/nhplus/medication/DeprecatedMedicationController.java +++ b/src/main/java/de/hitec/nhplus/medication/DeprecatedMedicationController.java @@ -38,9 +38,8 @@ public class DeprecatedMedicationController { private final ObservableList medications = FXCollections.observableArrayList(); private MedicationDao dao; - @FXML public void initialize() { - readAllAndShowInTableView(); + this.readAllAndShowInTableView(); this.columnId.setCellValueFactory(new PropertyValueFactory<>("id")); this.columnName.setCellValueFactory(new PropertyValueFactory<>("name")); @@ -65,15 +64,17 @@ public class DeprecatedMedicationController { this.columnCurrentStock.setCellValueFactory(new PropertyValueFactory<>("currentStock")); this.tableView.setItems(this.medications); + } /** * Internal method to read all data and set it to the table view. */ public void readAllAndShowInTableView() { + this.medications.clear(); this.dao = DaoFactory.getInstance().createMedicationDAO(); try { - this.medications.setAll(dao.readAllDeprecated()); + this.medications.setAll(this.dao.readAllDeprecated()); } catch (SQLException exception) { exception.printStackTrace(); } @@ -91,7 +92,7 @@ public class DeprecatedMedicationController { } catch (SQLException exception) { exception.printStackTrace(); } - readAllAndShowInTableView(); + this.readAllAndShowInTableView(); } } diff --git a/src/main/java/de/hitec/nhplus/medication/Medication.java b/src/main/java/de/hitec/nhplus/medication/Medication.java index a73c8b3..f33a98e 100644 --- a/src/main/java/de/hitec/nhplus/medication/Medication.java +++ b/src/main/java/de/hitec/nhplus/medication/Medication.java @@ -61,7 +61,7 @@ public class Medication { String possibleSideEffects, String administrationMethod, int currentStock, - boolean isDepreacted + boolean isDeprecated ) { this.id = new SimpleIntegerProperty(id); this.name = new SimpleStringProperty(name); @@ -70,7 +70,7 @@ public class Medication { this.possibleSideEffects = new SimpleStringProperty(possibleSideEffects); this.administrationMethod = new SimpleStringProperty(administrationMethod); this.currentStock = new SimpleIntegerProperty(currentStock); - this.isDeprecated = new SimpleBooleanProperty(isDepreacted); + this.isDeprecated = new SimpleBooleanProperty(isDeprecated); } public int getId() { diff --git a/src/main/java/de/hitec/nhplus/medication/database/MedicationDao.java b/src/main/java/de/hitec/nhplus/medication/database/MedicationDao.java index f4f4655..5e31e43 100644 --- a/src/main/java/de/hitec/nhplus/medication/database/MedicationDao.java +++ b/src/main/java/de/hitec/nhplus/medication/database/MedicationDao.java @@ -86,7 +86,6 @@ public class MedicationDao implements Dao { SELECT medication.*, medication_ingredient.name FROM medication LEFT JOIN medication_ingredient ON medication.id = medication_ingredient.id - WHERE medication.isDeprecated = false """; ResultSet result = connection.prepareStatement(SQL).executeQuery(); @@ -133,7 +132,8 @@ public class MedicationDao implements Dao { final String SQL = """ SELECT medication.*, medication_ingredient.name FROM medication LEFT JOIN - medication_ingredient ON medication.id = medication_ingredient.id + medication_ingredient + ON medication.id = medication_ingredient.id WHERE medication.isDeprecated = true """; ResultSet result = connection.prepareStatement(SQL).executeQuery(); @@ -177,6 +177,55 @@ public class MedicationDao implements Dao { return medications; } + public List readAllAvailable() throws SQLException { + final String SQL = """ + SELECT medication.*, medication_ingredient.name + FROM medication LEFT JOIN + medication_ingredient + ON medication.id = medication_ingredient.id + WHERE medication.isDeprecated = false + """; + ResultSet result = connection.prepareStatement(SQL).executeQuery(); + + List medications = new ArrayList<>(); + Map> ingredientMap = new HashMap<>(); + + int currentMedicationId; + int lastMedicationId = -1; + while (result.next()) { + currentMedicationId = result.getInt(1); + if (currentMedicationId != lastMedicationId) { + Medication medication = new Medication( + result.getInt(1), + result.getString(2), + result.getString(3), + new ArrayList<>(), + result.getString(4), + result.getString(5), + result.getInt(6), + result.getBoolean(7) + ); + medications.add(medication); + } + List ingredients = ingredientMap.computeIfAbsent(currentMedicationId, k -> new ArrayList<>()); + String ingredientName = result.getString(8); + if(ingredientName == null){ + continue; + } + ingredients.add(new Ingredient(ingredientName)); + lastMedicationId = currentMedicationId; + } + for (Medication medication : medications) { + List ingredients = ingredientMap.get(medication.getId()); + if(ingredients.isEmpty()){ + continue; + } + medication.setIngredients(ingredientMap.get(medication.getId())); + } + + return medications; + } + @Override public void update(Medication medication) throws SQLException { final String SQL = """ @@ -195,8 +244,8 @@ public class MedicationDao implements Dao { preparedStatement.setString(3, medication.getPossibleSideEffects()); preparedStatement.setString(4, medication.getAdministrationMethod()); preparedStatement.setInt(5, medication.getCurrentStock()); - preparedStatement.setInt(6, medication.getId()); - preparedStatement.setBoolean(7, medication.isDeprecated()); + preparedStatement.setBoolean(6, medication.isDeprecated()); + preparedStatement.setInt(7, medication.getId()); preparedStatement.executeUpdate(); final String ingredientDeleteSQL = """ diff --git a/src/main/java/de/hitec/nhplus/nurse/database/NurseDao.java b/src/main/java/de/hitec/nhplus/nurse/database/NurseDao.java index f4972de..902f69e 100644 --- a/src/main/java/de/hitec/nhplus/nurse/database/NurseDao.java +++ b/src/main/java/de/hitec/nhplus/nurse/database/NurseDao.java @@ -112,6 +112,4 @@ public class NurseDao extends DaoImp { statement.setInt(1, id); return statement; } - - } diff --git a/src/main/java/de/hitec/nhplus/treatment/AllTreatmentController.java b/src/main/java/de/hitec/nhplus/treatment/AllTreatmentController.java index 055c4be..ec8a4a9 100644 --- a/src/main/java/de/hitec/nhplus/treatment/AllTreatmentController.java +++ b/src/main/java/de/hitec/nhplus/treatment/AllTreatmentController.java @@ -78,7 +78,7 @@ public class AllTreatmentController { */ @FXML public void initialize() { - readAllAndShowInTableView(); + comboBoxPatientSelection.setItems(patientSelection); comboBoxPatientSelection.getSelectionModel().select("alle"); @@ -112,7 +112,7 @@ public class AllTreatmentController { ); this.createComboBoxData(); - + readAllAndShowInTableView(); } /** diff --git a/src/main/resources/de/hitec/nhplus/medication/database/Medication.sql b/src/main/resources/de/hitec/nhplus/medication/database/Medication.sql index 6d68c0e..4d4dc45 100644 --- a/src/main/resources/de/hitec/nhplus/medication/database/Medication.sql +++ b/src/main/resources/de/hitec/nhplus/medication/database/Medication.sql @@ -6,5 +6,5 @@ CREATE TABLE medication possibleSideEffects TEXT NOT NULL, administrationMethod TEXT NOT NULL, currentStock INTEGER NOT NULL, - isDeprecated BOOLEAN NOT NULL DEFAULT FALSE + isDeprecated BOOLEAN NOT NULL DEFAULT false ) \ No newline at end of file diff --git a/src/main/resources/de/hitec/nhplus/nurse/LockedNurseView.fxml b/src/main/resources/de/hitec/nhplus/nurse/LockedNurseView.fxml index b7c1ed3..dcd2d65 100644 --- a/src/main/resources/de/hitec/nhplus/nurse/LockedNurseView.fxml +++ b/src/main/resources/de/hitec/nhplus/nurse/LockedNurseView.fxml @@ -78,7 +78,6 @@ onAction="#handleDelete" prefWidth="90.0" text="Löschen" - />