#32: Refactor Database Usage, to be more consistent and understandable #33

Merged
SZUT-Dominik merged 6 commits from task/refactor-dao into main 2024-05-06 12:23:41 +00:00
35 changed files with 824 additions and 739 deletions

View file

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DataSourceManagerImpl" format="xml" multifile-model="true">
<data-source source="LOCAL" name="nursingHome.db" uuid="5a5b8be1-080b-4129-b89d-42f1ea832b90">
<data-source source="LOCAL" name="Database" uuid="5a5b8be1-080b-4129-b89d-42f1ea832b90">
<driver-ref>sqlite.xerial</driver-ref>
<synchronize>true</synchronize>
<jdbc-driver>org.sqlite.JDBC</jdbc-driver>

35
.idea/sqlDataSources.xml Normal file
View file

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="DdlMappings">
<mapping uuid="6de31afe-6f51-4d57-ac29-b95200cc6a68" name="Database Mapping">
<data-sources db="5a5b8be1-080b-4129-b89d-42f1ea832b90" ddl="82842a6c-e549-4bc0-9743-9bdb8b472dfc" />
<scope>
<node negative="1">
<node kind="database" negative="1">
<node kind="schema" negative="1" />
</node>
<node kind="schema" qname="main" />
</node>
</scope>
</mapping>
</component>
<component name="SqlDataSourceStorage">
<option name="dataSources">
<list>
<State>
<option name="id" value="82842a6c-e549-4bc0-9743-9bdb8b472dfc" />
<option name="name" value="NHPlus DDL" />
<option name="dbmsName" value="SQLITE" />
<option name="urls">
<array>
<option value="file://$PROJECT_DIR$/src/main/resources/de/hitec/nhplus/patient/database/Patient.sql" />
<option value="file://$PROJECT_DIR$/src/main/resources/de/hitec/nhplus/treatment/database/Treatment.sql" />
<option value="file://$PROJECT_DIR$/src/main/resources/de/hitec/nhplus/nurse/database/Nurse.sql" />
</array>
</option>
<option name="outLayout" value="File per object by schema.groovy" />
</State>
</list>
</option>
</component>
</project>

View file

@ -1,8 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="SqlDialectMappings">
<file url="file://$PROJECT_DIR$/src/main/java/de/hitec/nhplus/patient/PatientDao.java" dialect="GenericSQL" />
<file url="file://$PROJECT_DIR$/src/main/java/de/hitec/nhplus/treatment/TreatmentDao.java" dialect="GenericSQL" />
<file url="file://$PROJECT_DIR$/src/main/java/de/hitec/nhplus/patient/database/PatientDao.java" dialect="GenericSQL" />
<file url="file://$PROJECT_DIR$/src/main/java/de/hitec/nhplus/treatment/database/TreatmentDao.java" dialect="GenericSQL" />
<file url="file://$PROJECT_DIR$/src/main/java/de/hitec/nhplus/treatment/database/NurseDao.java" dialect="GenericSQL" />
<file url="PROJECT" dialect="SQLite" />
</component>
</project>

Binary file not shown.

View file

@ -1,11 +1,17 @@
package de.hitec.nhplus.datastorage;
import org.sqlite.SQLiteConfig;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.sqlite.SQLiteConfig;
/**
* The {@link DaoFactory} allows a safe connection to the Database.
*
* @author Bernd Heidemann
* @version 1.0
*/
public class ConnectionBuilder {
private static final String DB_NAME = "nursingHome.db";
@ -13,6 +19,10 @@ public class ConnectionBuilder {
private static Connection connection;
/**
* @return a Thread-safe {@link Connection} to the Database.
* @author Bernd Heidemann
*/
synchronized public static Connection getConnection() {
try {
if (ConnectionBuilder.connection == null) {
@ -27,6 +37,11 @@ public class ConnectionBuilder {
return ConnectionBuilder.connection;
}
/**
* Closes the Connection to the Database.
*
* @author Bernd Heidemann
*/
synchronized public static void closeConnection() {
try {
if (ConnectionBuilder.connection != null) {

View file

@ -3,14 +3,52 @@ package de.hitec.nhplus.datastorage;
import java.sql.SQLException;
import java.util.List;
/**
* {@link Dao} is the Abbreviation of Data-Access-Object.
* This Interface has the Basic Methods which are needed on any DAO to work as expected.
*
* @param <T> The Model for which that DAO is implemented
* @author Bernd Heidemann
* @version 1.0
* @implSpec The Implementations should be added to the {@link DaoFactory}
*/
public interface Dao<T> {
/**
* Create a Database Entry from a Model object.
*
* @param t the Model instance
* @author Bernd Heidemann
*/
void create(T t) throws SQLException;
/**
* Read a Database Entry to a Model object.
*
* @param id of the Element in the Database
* @author Bernd Heidemann
*/
T read(int id) throws SQLException;
/**
* Read all Database Entries to a {@link List} of Model objects.
*
* @author Bernd Heidemann
*/
List<T> readAll() throws SQLException;
/**
* Update the Database according to the Values of the Model object.
*
* @param t the Model instance.
* @author Bernd Heidemann
*/
void update(T t) throws SQLException;
void deleteById(int id) throws SQLException;
/**
* Delete a Database Entry.
*
* @param id of the Element in the Database.
* @author Bernd Heidemann
*/
void delete(int id) throws SQLException;
}

View file

@ -1,31 +1,58 @@
package de.hitec.nhplus.datastorage;
import de.hitec.nhplus.nurse.NurseDao;
import de.hitec.nhplus.patient.PatientDao;
import de.hitec.nhplus.treatment.TreatmentDao;
import de.hitec.nhplus.nurse.database.NurseDao;
import de.hitec.nhplus.patient.database.PatientDao;
import de.hitec.nhplus.treatment.database.TreatmentDao;
/**
* The {@link DaoFactory} is a Singleton({@link DaoFactory#getInstance}) which should be used to get {@link Dao}s.
*
* @author Bernd Heidemann
* @version 1.0
*/
public class DaoFactory {
private static DaoFactory instance;
/**
* A Private Constructor according to the Singleton Pattern.
*
* @author Bernd Heidemann
*/
private DaoFactory() {
}
public static DaoFactory getDaoFactory() {
/**
* @return {@link DaoFactory}, the Singleton Instance
* @author Bernd Heidemann
*/
public static DaoFactory getInstance() {
if (DaoFactory.instance == null) {
DaoFactory.instance = new DaoFactory();
}
return DaoFactory.instance;
}
/**
* @return a {@link TreatmentDao}
* @author Bernd Heidemann
*/
public TreatmentDao createTreatmentDao() {
return new TreatmentDao(ConnectionBuilder.getConnection());
}
/**
* @return a {@link PatientDao}
* @author Bernd Heidemann
*/
public PatientDao createPatientDAO() {
return new PatientDao(ConnectionBuilder.getConnection());
}
/**
* @return a {@link NurseDao}
* @author Dominik Säume
*/
public NurseDao createNurseDAO() {
return new NurseDao(ConnectionBuilder.getConnection());
}

View file

@ -1,57 +1,101 @@
package de.hitec.nhplus.datastorage;
import java.sql.*;
import java.util.ArrayList;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;
/**
* The {@link DaoImp} is a Generic Base Implementation of the {@link Dao},
* which should fit most use cases.
*
* @param <T> The Model for which that DAO is implemented
* @author Bernd Heidemann
* @version 1.0
* @implSpec The Implementations should be added to the {@link DaoFactory}
*/
public abstract class DaoImp<T> implements Dao<T> {
protected final Connection connection;
/**
* @param connection a Database Connection, which should be gotten from {@link ConnectionBuilder}
* @author Bernd Heidemann
*/
public DaoImp(Connection connection) {
this.connection = connection;
}
/**
* Creates a new Database Entry from a Model object.
*
* @param t the Model instance
* @author Bernd Heidemann
*/
@Override
public void create(T t) throws SQLException {
getCreateStatement(t).executeUpdate();
}
/**
* Read a Database Entry to a Model object.
*
* @param id of the Element in the Database
* @author Bernd Heidemann
*/
@Override
public T read(int key) throws SQLException {
public T read(int id) throws SQLException {
T object = null;
ResultSet result = getReadByIDStatement(key).executeQuery();
ResultSet result = getReadByIDStatement(id).executeQuery();
if (result.next()) {
object = getInstanceFromResultSet(result);
}
return object;
}
/**
* Read all Database Entries to a {@link List} of Model objects.
*
* @author Bernd Heidemann
*/
@Override
public List<T> readAll() throws SQLException {
return getListFromResultSet(getReadAllStatement().executeQuery());
}
/**
* Update the Database according to the Values of the Model object.
*
* @param t the Model instance.
* @author Bernd Heidemann
*/
@Override
public void update(T t) throws SQLException {
getUpdateStatement(t).executeUpdate();
}
/**
* Delete a Database Entry.
*
* @param id of the Element in the Database.
* @author Bernd Heidemann
*/
@Override
public void deleteById(int key) throws SQLException {
getDeleteStatement(key).executeUpdate();
public void delete(int id) throws SQLException {
getDeleteStatement(id).executeUpdate();
}
protected abstract T getInstanceFromResultSet(ResultSet set) throws SQLException;
protected abstract T getInstanceFromResultSet(ResultSet result) throws SQLException;
protected abstract ArrayList<T> getListFromResultSet(ResultSet set) throws SQLException;
protected abstract List<T> getListFromResultSet(ResultSet result) throws SQLException;
protected abstract PreparedStatement getCreateStatement(T t);
protected abstract PreparedStatement getCreateStatement(T t) throws SQLException;
protected abstract PreparedStatement getReadByIDStatement(int key);
protected abstract PreparedStatement getReadByIDStatement(int id) throws SQLException;
protected abstract PreparedStatement getReadAllStatement();
protected abstract PreparedStatement getReadAllStatement() throws SQLException;
protected abstract PreparedStatement getUpdateStatement(T t);
protected abstract PreparedStatement getUpdateStatement(T t) throws SQLException;
protected abstract PreparedStatement getDeleteStatement(int key);
protected abstract PreparedStatement getDeleteStatement(int id) throws SQLException;
}

View file

@ -6,7 +6,7 @@ import java.util.Map;
public interface Fixture<T>
{
void dropTable(Connection connection);
void setupTable(Connection connection);
void dropTable(Connection connection) throws SQLException;
void setupTable(Connection connection) throws SQLException;
Map<String, T> load() throws SQLException;
}

View file

@ -1,40 +1,28 @@
package de.hitec.nhplus.fixtures;
import de.hitec.nhplus.Main;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.nurse.NurseDao;
import de.hitec.nhplus.nurse.Nurse;
import de.hitec.nhplus.nurse.database.NurseDao;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
public class NurseFixture implements Fixture<Nurse> {
@Override
public void dropTable(Connection connection) {
try (Statement statement = connection.createStatement()) {
statement.execute("DROP TABLE nurse");
} catch (SQLException exception) {
System.out.println(exception.getMessage());
}
public void dropTable(Connection connection) throws SQLException {
connection.createStatement().execute("DROP TABLE nurse");
}
@Override
public void setupTable(Connection connection) {
final String SQL = "CREATE TABLE IF NOT EXISTS nurse (" +
"id INTEGER PRIMARY KEY AUTOINCREMENT, " +
"firstname TEXT NOT NULL, " +
"surname TEXT NOT NULL, " +
"phoneNumber TEXT NOT NULL" +
");";
try (Statement statement = connection.createStatement()) {
statement.execute(SQL);
} catch (SQLException exception) {
System.out.println(exception.getMessage());
}
public void setupTable(Connection connection) throws SQLException {
final InputStream schema = Main.class.getResourceAsStream("/de/hitec/nhplus/nurse/database/Nurse.sql");
assert schema != null;
final String SQL = new Scanner(schema, StandardCharsets.UTF_8).useDelimiter("\\A").next();
connection.createStatement().execute(SQL);
}
@Override
@ -52,12 +40,12 @@ public class NurseFixture implements Fixture<Nurse> {
"Armout",
"9876543210"
));
NurseDao dao = DaoFactory.getDaoFactory().createNurseDAO();
for(Nurse nurse : nurses){
NurseDao dao = DaoFactory.getInstance().createNurseDAO();
for (Nurse nurse : nurses) {
dao.create(nurse);
}
Map<String, Nurse> nursesByName = new HashMap<>();
for (Nurse nurse : dao.readAll()){
for (Nurse nurse : dao.readAll()) {
nursesByName.put(nurse.getFirstName(), nurse);
}
return nursesByName;

View file

@ -1,107 +1,86 @@
package de.hitec.nhplus.fixtures;
import de.hitec.nhplus.Main;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.patient.PatientDao;
import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.patient.database.PatientDao;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalDate;
public class PatientFixture implements Fixture<Patient>
{
public class PatientFixture implements Fixture<Patient> {
@Override
public void dropTable(Connection connection)
{
try (Statement statement = connection.createStatement())
{
statement.execute("DROP TABLE patient");
} catch (SQLException exception)
{
System.out.println(exception.getMessage());
}
public void dropTable(Connection connection) throws SQLException {
connection.createStatement().execute("DROP TABLE patient");
}
@Override
public void setupTable(Connection connection)
{
final String SQL = "CREATE TABLE IF NOT EXISTS patient (" +
" id INTEGER PRIMARY KEY AUTOINCREMENT, " +
" firstname TEXT NOT NULL, " +
" surname TEXT NOT NULL, " +
" dateOfBirth TEXT NOT NULL, " +
" carelevel TEXT NOT NULL, " +
" roomnumber TEXT NOT NULL" +
");";
try (Statement statement = connection.createStatement())
{
statement.execute(SQL);
} catch (SQLException exception)
{
System.out.println(exception.getMessage());
}
public void setupTable(Connection connection) throws SQLException {
// @SuppressWarnings("checkstyle:LineLength")
final InputStream schema = Main.class.getResourceAsStream("/de/hitec/nhplus/patient/database/Patient.sql");
assert schema != null;
final String SQL = new Scanner(schema, StandardCharsets.UTF_8).useDelimiter("\\A").next();
connection.createStatement().execute(SQL);
}
@Override
public Map<String, Patient> load() throws SQLException
{
public Map<String, Patient> load() throws SQLException {
List<Patient> patients = new ArrayList<>();
patients.add(new Patient(
"Seppl",
"Herberger",
convertStringToLocalDate("1945-12-01"),
"4",
"202"
"Seppl",
"Herberger",
convertStringToLocalDate("1945-12-01"),
"4",
"202"
));
patients.add(new Patient(
"Martina",
"Gerdsen",
convertStringToLocalDate("1954-08-12"),
"5",
"010"
"Martina",
"Gerdsen",
convertStringToLocalDate("1954-08-12"),
"5",
"010"
));
patients.add(new Patient(
"Gertrud",
"Franzen",
convertStringToLocalDate("1949-04-16"),
"3",
"002"
"Gertrud",
"Franzen",
convertStringToLocalDate("1949-04-16"),
"3",
"002"
));
patients.add(new Patient(
"Ahmet",
"Yilmaz",
convertStringToLocalDate("1941-02-22"),
"3",
"013"
"Ahmet",
"Yilmaz",
convertStringToLocalDate("1941-02-22"),
"3",
"013"
));
patients.add(new Patient(
"Hans",
"Neumann",
convertStringToLocalDate("1955-12-12"),
"2",
"001"
"Hans",
"Neumann",
convertStringToLocalDate("1955-12-12"),
"2",
"001"
));
patients.add(new Patient(
"Elisabeth",
"Müller",
convertStringToLocalDate("1958-03-07"),
"5",
"110"
"Elisabeth",
"Müller",
convertStringToLocalDate("1958-03-07"),
"5",
"110"
));
PatientDao dao = DaoFactory.getDaoFactory().createPatientDAO();
for (Patient patient : patients){
PatientDao dao = DaoFactory.getInstance().createPatientDAO();
for (Patient patient : patients) {
dao.create(patient);
}
Map<String, Patient> patientsByName = new HashMap<>();
for (Patient patient : dao.readAll()){
for (Patient patient : dao.readAll()) {
patientsByName.put(patient.getFirstName(), patient);
}

View file

@ -1,68 +1,42 @@
package de.hitec.nhplus.fixtures;
import de.hitec.nhplus.Main;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.treatment.TreatmentDao;
import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.treatment.Treatment;
import de.hitec.nhplus.treatment.database.TreatmentDao;
import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalDate;
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalTime;
public class TreatmentFixture implements Fixture<Treatment>
{
public class TreatmentFixture implements Fixture<Treatment> {
private final Map<String, Patient> patientsByName;
public TreatmentFixture(Map<String, Patient> patientsByName)
{
public TreatmentFixture(Map<String, Patient> patientsByName) {
this.patientsByName = patientsByName;
}
@Override
public void dropTable(Connection connection)
{
try (Statement statement = connection.createStatement())
{
statement.execute("DROP TABLE treatment");
} catch (SQLException exception)
{
System.out.println(exception.getMessage());
}
public void dropTable(Connection connection) throws SQLException {
connection.createStatement().execute("DROP TABLE treatment");
}
@Override
public void setupTable(Connection connection)
{
final String SQL = "CREATE TABLE IF NOT EXISTS treatment (" +
" id INTEGER PRIMARY KEY AUTOINCREMENT, " +
" patientId INTEGER NOT NULL, " +
" treatment_date TEXT NOT NULL, " +
" begin TEXT NOT NULL, " +
" end TEXT NOT NULL, " +
" description TEXT NOT NULL, " +
" remark TEXT NOT NULL," +
" FOREIGN KEY (patientId) REFERENCES patient (id) ON DELETE CASCADE " +
");";
try (Statement statement = connection.createStatement())
{
statement.execute(SQL);
} catch (SQLException exception)
{
System.out.println(exception.getMessage());
}
public void setupTable(Connection connection) throws SQLException {
final InputStream schema = Main.class.getResourceAsStream("/de/hitec/nhplus/treatment/database/Treatment.sql");
assert schema != null;
final String SQL = new Scanner(schema, StandardCharsets.UTF_8).useDelimiter("\\A").next();
connection.createStatement().execute(SQL);
}
@Override
public Map<String, Treatment> load() throws SQLException
{
public Map<String, Treatment> load() throws SQLException {
List<Treatment> treatments = new ArrayList<>();
Patient seppl = patientsByName.get("Seppl");
@ -72,102 +46,102 @@ public class TreatmentFixture implements Fixture<Treatment>
Patient elisabeth = patientsByName.get("Elisabeth");
treatments.add(new Treatment(
1,
seppl.getId(),
convertStringToLocalDate("2023-06-03"),
convertStringToLocalTime("11:00"),
convertStringToLocalTime("15:00"),
"Gespräch",
"Der Patient hat enorme Angstgefühle und glaubt, er sei überfallen worden."
+ "Ihm seien alle Wertsachen gestohlen worden."
+ "Patient beruhigt sich erst, als alle Wertsachen im Zimmer gefunden worden sind."
1,
seppl,
convertStringToLocalDate("2023-06-03"),
convertStringToLocalTime("11:00"),
convertStringToLocalTime("15:00"),
"Gespräch",
"Der Patient hat enorme Angstgefühle und glaubt, er sei überfallen worden."
+ "Ihm seien alle Wertsachen gestohlen worden."
+ "Patient beruhigt sich erst, als alle Wertsachen im Zimmer gefunden worden sind."
));
treatments.add(new Treatment(
2,
seppl.getId(),
convertStringToLocalDate("2023-06-05"),
convertStringToLocalTime("11:00"),
convertStringToLocalTime("12:30"),
"Gespräch",
"Patient irrt auf der Suche nach gestohlenen Wertsachen durch die Etage "
+ "und bezichtigt andere Bewohner des Diebstahls."
+ "Patient wird in seinen Raum zurückbegleitet und erhält Beruhigungsmittel."
2,
seppl,
convertStringToLocalDate("2023-06-05"),
convertStringToLocalTime("11:00"),
convertStringToLocalTime("12:30"),
"Gespräch",
"Patient irrt auf der Suche nach gestohlenen Wertsachen durch die Etage "
+ "und bezichtigt andere Bewohner des Diebstahls."
+ "Patient wird in seinen Raum zurückbegleitet und erhält Beruhigungsmittel."
));
treatments.add(new Treatment(
3,
martina.getId(),
convertStringToLocalDate("2023-06-04"),
convertStringToLocalTime("07:30"),
convertStringToLocalTime("08:00"),
"Waschen",
"Patient mit Waschlappen gewaschen und frisch angezogen. Patient gewendet."
3,
martina,
convertStringToLocalDate("2023-06-04"),
convertStringToLocalTime("07:30"),
convertStringToLocalTime("08:00"),
"Waschen",
"Patient mit Waschlappen gewaschen und frisch angezogen. Patient gewendet."
));
treatments.add(new Treatment(
4,
seppl.getId(),
convertStringToLocalDate("2023-06-06"),
convertStringToLocalTime("15:10"),
convertStringToLocalTime("16:00"),
"Spaziergang",
"Spaziergang im Park, Patient döst im Rollstuhl ein")
4,
seppl,
convertStringToLocalDate("2023-06-06"),
convertStringToLocalTime("15:10"),
convertStringToLocalTime("16:00"),
"Spaziergang",
"Spaziergang im Park, Patient döst im Rollstuhl ein")
);
treatments.add(new Treatment(
8,
seppl.getId(),
convertStringToLocalDate("2023-06-08"),
convertStringToLocalTime("15:00"),
convertStringToLocalTime("16:00"),
"Spaziergang",
"Parkspaziergang; Patient ist heute lebhafter und hat klare Momente; erzählt von seiner Tochter")
8,
seppl,
convertStringToLocalDate("2023-06-08"),
convertStringToLocalTime("15:00"),
convertStringToLocalTime("16:00"),
"Spaziergang",
"Parkspaziergang; Patient ist heute lebhafter und hat klare Momente; erzählt von seiner Tochter")
);
treatments.add(new Treatment(
9,
martina.getId(),
convertStringToLocalDate("2023-06-07"),
convertStringToLocalTime("11:00"),
convertStringToLocalTime("11:30"),
"Waschen",
"Waschen per Dusche auf einem Stuhl; Patientin gewendet;")
9,
martina,
convertStringToLocalDate("2023-06-07"),
convertStringToLocalTime("11:00"),
convertStringToLocalTime("11:30"),
"Waschen",
"Waschen per Dusche auf einem Stuhl; Patientin gewendet;")
);
treatments.add(new Treatment(
12,
hans.getId(),
convertStringToLocalDate("2023-06-08"),
convertStringToLocalTime("15:00"),
convertStringToLocalTime("15:30"),
"Physiotherapie",
"Übungen zur Stabilisation und Mobilisierung der Rückenmuskulatur")
12,
hans,
convertStringToLocalDate("2023-06-08"),
convertStringToLocalTime("15:00"),
convertStringToLocalTime("15:30"),
"Physiotherapie",
"Übungen zur Stabilisation und Mobilisierung der Rückenmuskulatur")
);
treatments.add(new Treatment(
14,
ahmet.getId(),
convertStringToLocalDate("2023-08-24"),
convertStringToLocalTime("09:30"),
convertStringToLocalTime("10:15"),
"KG",
"Lympfdrainage"));
14,
ahmet,
convertStringToLocalDate("2023-08-24"),
convertStringToLocalTime("09:30"),
convertStringToLocalTime("10:15"),
"KG",
"Lympfdrainage"));
treatments.add(new Treatment(
16,
elisabeth.getId(),
convertStringToLocalDate("2023-08-31"),
convertStringToLocalTime("13:30"),
convertStringToLocalTime("13:45"),
"Toilettengang",
"Hilfe beim Toilettengang; Patientin klagt über Schmerzen beim Stuhlgang. Gabe von Iberogast")
16,
elisabeth,
convertStringToLocalDate("2023-08-31"),
convertStringToLocalTime("13:30"),
convertStringToLocalTime("13:45"),
"Toilettengang",
"Hilfe beim Toilettengang; Patientin klagt über Schmerzen beim Stuhlgang. Gabe von Iberogast")
);
treatments.add(new Treatment(
17,
elisabeth.getId(),
convertStringToLocalDate("2023-09-01"),
convertStringToLocalTime("16:00"),
convertStringToLocalTime("17:00"),
"KG",
"Massage der Extremitäten zur Verbesserung der Durchblutung")
17,
elisabeth,
convertStringToLocalDate("2023-09-01"),
convertStringToLocalTime("16:00"),
convertStringToLocalTime("17:00"),
"KG",
"Massage der Extremitäten zur Verbesserung der Durchblutung")
);
TreatmentDao dao = DaoFactory.getDaoFactory().createTreatmentDao();
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
Map<String, Treatment> treatmentsById = new HashMap<>();
for (Treatment treatment : treatments){
for (Treatment treatment : treatments) {
dao.create(treatment);
treatmentsById.put(String.valueOf(treatment.getId()), treatment);
}

View file

@ -9,6 +9,7 @@ import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.BorderPane;
import java.io.IOException;
import java.util.Objects;
public class MainWindowController {
@FXML
@ -40,7 +41,7 @@ public class MainWindowController {
private void loadPatientPage() {
try {
BorderPane patientsPane = FXMLLoader.load(
Main.class.getResource("/de/hitec/nhplus/patient/AllPatientView.fxml")
Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/patient/AllPatientView.fxml"))
);
patientPage.getChildren().setAll(patientsPane);
AnchorPane.setTopAnchor(patientsPane, 0d);
@ -55,7 +56,7 @@ public class MainWindowController {
private void loadTreatmentsPage() {
try {
BorderPane treatmentsPane = FXMLLoader.load(
Main.class.getResource("/de/hitec/nhplus/treatment/AllTreatmentView.fxml")
Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/AllTreatmentView.fxml"))
);
treatmentPage.getChildren().setAll(treatmentsPane);
AnchorPane.setTopAnchor(treatmentsPane, 0d);
@ -70,7 +71,7 @@ public class MainWindowController {
private void loadNursePage() {
try {
BorderPane nursePane = FXMLLoader.load(
Main.class.getResource("/de/hitec/nhplus/nurse/AllNurseView.fxml")
Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/nurse/AllNurseView.fxml"))
);
nursePage.getChildren().setAll(nursePane);
AnchorPane.setTopAnchor(nursePane, 0d);

View file

@ -4,11 +4,11 @@ import javafx.beans.property.SimpleStringProperty;
public abstract class Person {
private final SimpleStringProperty firstName;
private final SimpleStringProperty surname;
private final SimpleStringProperty surName;
public Person(String firstName, String surname) {
public Person(String firstName, String surName) {
this.firstName = new SimpleStringProperty(firstName);
this.surname = new SimpleStringProperty(surname);
this.surName = new SimpleStringProperty(surName);
}
public String getFirstName() {
@ -23,15 +23,15 @@ public abstract class Person {
this.firstName.set(firstName);
}
public String getSurname() {
return surname.get();
public String getSurName() {
return surName.get();
}
public SimpleStringProperty surnameProperty() {
return surname;
public SimpleStringProperty surNameProperty() {
return surName;
}
public void setSurname(String surname) {
this.surname.set(surname);
public void setSurName(String surName) {
this.surName.set(surName);
}
}

View file

@ -3,6 +3,7 @@ package de.hitec.nhplus.nurse;
import static de.hitec.nhplus.utils.Validator.*;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.nurse.database.NurseDao;
import javafx.beans.value.ChangeListener;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
@ -18,9 +19,9 @@ import java.sql.SQLException;
public class AllNurseController {
@FXML
public TextField textFieldSurname;
public TextField textFieldSurName;
@FXML
public TextField textFieldFirstname;
public TextField textFieldFirstName;
@FXML
public TextField textFieldPhoneNumber;
@FXML
@ -32,7 +33,7 @@ public class AllNurseController {
@FXML
private TableColumn<Nurse, String> columnFirstName;
@FXML
private TableColumn<Nurse, String> columnSurname;
private TableColumn<Nurse, String> columnSurName;
@FXML
private TableColumn<Nurse, String> columnPhoneNumber;
@ -47,8 +48,8 @@ public class AllNurseController {
this.columnFirstName.setCellValueFactory(new PropertyValueFactory<>("firstName"));
this.columnFirstName.setCellFactory(TextFieldTableCell.forTableColumn());
this.columnSurname.setCellValueFactory(new PropertyValueFactory<>("surname"));
this.columnSurname.setCellFactory(TextFieldTableCell.forTableColumn());
this.columnSurName.setCellValueFactory(new PropertyValueFactory<>("surName"));
this.columnSurName.setCellFactory(TextFieldTableCell.forTableColumn());
this.columnPhoneNumber.setCellValueFactory(new PropertyValueFactory<>("phoneNumber"));
@ -59,21 +60,21 @@ public class AllNurseController {
this.buttonAdd.setDisable(true);
ChangeListener<String> inputNewNurseValidationListener = (observableValue, oldText, newText)->
{
boolean isValid = isValidFirstName(this.textFieldFirstname.getText())
&& isValidSurName(this.textFieldSurname.getText())
boolean isValid = isValidFirstName(this.textFieldFirstName.getText())
&& isValidSurName(this.textFieldSurName.getText())
&& isValidPhoneNumber(this.textFieldPhoneNumber.getText());
AllNurseController.this.buttonAdd.setDisable(!isValid);
};
this.textFieldFirstname.textProperty().addListener(inputNewNurseValidationListener);
this.textFieldSurname.textProperty().addListener(inputNewNurseValidationListener);
this.textFieldFirstName.textProperty().addListener(inputNewNurseValidationListener);
this.textFieldSurName.textProperty().addListener(inputNewNurseValidationListener);
this.textFieldPhoneNumber.textProperty().addListener(inputNewNurseValidationListener);
}
private void readAllAndShowInTableView(){
this.nurses.clear();
this.dao = DaoFactory.getDaoFactory().createNurseDAO();
this.dao = DaoFactory.getInstance().createNurseDAO();
try {
this.nurses.addAll(this.dao.readAll());
}catch (SQLException exception){
@ -82,8 +83,8 @@ public class AllNurseController {
}
@FXML
public void handleAdd(){
String surname=this.textFieldSurname.getText();
String firstName=this.textFieldFirstname.getText();
String surname=this.textFieldSurName.getText();
String firstName=this.textFieldFirstName.getText();
String phoneNumber=this.textFieldPhoneNumber.getText();
try {
this.dao.create(new Nurse(firstName, surname, phoneNumber));
@ -96,8 +97,8 @@ public class AllNurseController {
}
private void clearTextfields() {
this.textFieldFirstname.clear();
this.textFieldSurname.clear();
this.textFieldFirstName.clear();
this.textFieldSurName.clear();
this.textFieldPhoneNumber.clear();
}

View file

@ -12,20 +12,20 @@ public class Nurse extends Person {
public Nurse(
String firstName,
String surname,
String surName,
String phoneNumber
) {
super(firstName, surname);
super(firstName, surName);
this.phoneNumber = new SimpleStringProperty(phoneNumber);
}
public Nurse(
int id,
String firstName,
String surname,
String surName,
String phoneNumber
) {
super(firstName, surname);
super(firstName, surName);
this.id = new SimpleIntegerProperty(id);
this.phoneNumber = new SimpleStringProperty(phoneNumber);
}
@ -55,8 +55,8 @@ public class Nurse extends Person {
return new StringJoiner(System.lineSeparator())
.add("NURSE")
.add("ID: " + this.getId())
.add("Firstname: " + this.getFirstName())
.add("Surname: " + this.getSurname())
.add("FirstName: " + this.getFirstName())
.add("SurName: " + this.getSurName())
.add("PhoneNumber: " + this.getPhoneNumber())
.toString();

View file

@ -1,115 +0,0 @@
package de.hitec.nhplus.nurse;
import de.hitec.nhplus.datastorage.DaoImp;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class NurseDao extends DaoImp<Nurse> {
public NurseDao(Connection connection) {
super(connection);
}
@Override
protected PreparedStatement getCreateStatement(Nurse nurse) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "INSERT INTO nurse (firstname, surname, phoneNumber)" +
"VALUES (?, ?, ?)";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setString(1, nurse.getFirstName());
preparedStatement.setString(2, nurse.getSurname());
preparedStatement.setString(3, nurse.getPhoneNumber());
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected PreparedStatement getReadByIDStatement(int id) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "SELECT * FROM nurse WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, id);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected Nurse getInstanceFromResultSet(ResultSet result) throws SQLException {
return new Nurse(
result.getInt(1),
result.getString(2),
result.getString(3),
result.getString(4)
);
}
@Override
protected PreparedStatement getReadAllStatement() {
PreparedStatement statement = null;
try {
final String SQL = "SELECT * FROM nurse";
statement = this.connection.prepareStatement(SQL);
} catch (SQLException exception) {
exception.printStackTrace();
}
return statement;
}
@Override
protected ArrayList<Nurse> getListFromResultSet(ResultSet result) throws SQLException {
ArrayList<Nurse> list = new ArrayList<>();
while (result.next()) {
list.add(new Nurse(
result.getInt(1),
result.getString(2),
result.getString(3),
result.getString(4)
));
}
return list;
}
@Override
protected PreparedStatement getUpdateStatement(Nurse nurse) {
PreparedStatement preparedStatement = null;
try {
final String SQL =
"UPDATE nurse SET " +
"firstname = ?, " +
"surname = ?, " +
"phoneNumber = ?, " +
"WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setString(1, nurse.getFirstName());
preparedStatement.setString(2, nurse.getSurname());
preparedStatement.setString(3, nurse.getPhoneNumber());
preparedStatement.setInt(4, nurse.getId());
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected PreparedStatement getDeleteStatement(int id) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "DELETE FROM nurse WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, id);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
}

View file

@ -0,0 +1,89 @@
package de.hitec.nhplus.nurse.database;
import de.hitec.nhplus.datastorage.DaoImp;
import de.hitec.nhplus.nurse.Nurse;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class NurseDao extends DaoImp<Nurse> {
public NurseDao(Connection connection) {
super(connection);
}
@Override
protected PreparedStatement getCreateStatement(Nurse nurse) throws SQLException {
final String SQL = """
INSERT INTO nurse
(firstName, surName, phoneNumber)
VALUES (?, ?, ?)
""";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setString(1, nurse.getFirstName());
statement.setString(2, nurse.getSurName());
statement.setString(3, nurse.getPhoneNumber());
return statement;
}
@Override
protected PreparedStatement getReadByIDStatement(int id) throws SQLException {
final String SQL = "SELECT * FROM nurse WHERE id = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, id);
return statement;
}
@Override
protected Nurse getInstanceFromResultSet(ResultSet result) throws SQLException {
return new Nurse(
result.getInt(1),
result.getString(2),
result.getString(3),
result.getString(4)
);
}
@Override
protected PreparedStatement getReadAllStatement() throws SQLException {
final String SQL = "SELECT * FROM nurse";
return this.connection.prepareStatement(SQL);
}
@Override
protected List<Nurse> getListFromResultSet(ResultSet result) throws SQLException {
ArrayList<Nurse> list = new ArrayList<>();
while (result.next()) {
list.add(getInstanceFromResultSet(result));
}
return list;
}
@Override
protected PreparedStatement getUpdateStatement(Nurse nurse) throws SQLException {
final String SQL = """
UPDATE nurse SET
firstName = ?,
surName = ?,
phoneNumber = ?
WHERE id = ?
""";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setString(1, nurse.getFirstName());
statement.setString(2, nurse.getSurName());
statement.setString(3, nurse.getPhoneNumber());
statement.setInt(4, nurse.getId());
return statement;
}
@Override
protected PreparedStatement getDeleteStatement(int id) throws SQLException {
final String SQL = "DELETE FROM nurse WHERE id = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, id);
return statement;
}
}

View file

@ -1,6 +1,7 @@
package de.hitec.nhplus.patient;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.patient.database.PatientDao;
import de.hitec.nhplus.utils.DateConverter;
import javafx.beans.value.ChangeListener;
import javafx.collections.FXCollections;
@ -27,7 +28,7 @@ public class AllPatientController {
@FXML
private TableColumn<Patient, String> columnFirstName;
@FXML
private TableColumn<Patient, String> columnSurname;
private TableColumn<Patient, String> columnSurName;
@FXML
private TableColumn<Patient, String> columnDateOfBirth;
@FXML
@ -39,7 +40,7 @@ public class AllPatientController {
@FXML
private Button buttonAdd;
@FXML
private TextField textFieldSurname;
private TextField textFieldSurName;
@FXML
private TextField textFieldFirstName;
@FXML
@ -60,8 +61,8 @@ public class AllPatientController {
this.columnFirstName.setCellValueFactory(new PropertyValueFactory<>("firstName"));
this.columnFirstName.setCellFactory(TextFieldTableCell.forTableColumn());
this.columnSurname.setCellValueFactory(new PropertyValueFactory<>("surname"));
this.columnSurname.setCellFactory(TextFieldTableCell.forTableColumn());
this.columnSurName.setCellValueFactory(new PropertyValueFactory<>("surName"));
this.columnSurName.setCellFactory(TextFieldTableCell.forTableColumn());
this.columnDateOfBirth.setCellValueFactory(new PropertyValueFactory<>("dateOfBirth"));
this.columnDateOfBirth.setCellFactory(TextFieldTableCell.forTableColumn());
@ -88,7 +89,7 @@ public class AllPatientController {
{
boolean isValid = isValidDate(this.textFieldDateOfBirth.getText())
&& isValidFirstName(this.textFieldFirstName.getText())
&& isValidSurName(this.textFieldSurname.getText())
&& isValidSurName(this.textFieldSurName.getText())
&& isValidDate(this.textFieldDateOfBirth.getText())
&& isValidCareLevel(this.textFieldCareLevel.getText())
&& isValidRoomNumber(textFieldRoomNumber.getText());
@ -96,7 +97,7 @@ public class AllPatientController {
AllPatientController.this.buttonAdd.setDisable(!isValid);
};
this.textFieldSurname.textProperty().addListener(inputNewPatientValidationListener);
this.textFieldSurName.textProperty().addListener(inputNewPatientValidationListener);
this.textFieldFirstName.textProperty().addListener(inputNewPatientValidationListener);
this.textFieldDateOfBirth.textProperty().addListener(inputNewPatientValidationListener);
this.textFieldCareLevel.textProperty().addListener(inputNewPatientValidationListener);
@ -123,7 +124,7 @@ public class AllPatientController {
event.getTableView().refresh();
return;
}
event.getRowValue().setSurname(newSurName);
event.getRowValue().setSurName(newSurName);
this.doUpdate(event);
}
@ -174,7 +175,7 @@ public class AllPatientController {
private void readAllAndShowInTableView() {
this.patients.clear();
this.dao = DaoFactory.getDaoFactory().createPatientDAO();
this.dao = DaoFactory.getInstance().createPatientDAO();
try {
this.patients.addAll(this.dao.readAll());
} catch (SQLException exception) {
@ -187,7 +188,7 @@ public class AllPatientController {
Patient selectedItem = this.tableView.getSelectionModel().getSelectedItem();
if (selectedItem != null) {
try {
DaoFactory.getDaoFactory().createPatientDAO().deleteById(selectedItem.getId());
DaoFactory.getInstance().createPatientDAO().delete(selectedItem.getId());
this.tableView.getItems().remove(selectedItem);
} catch (SQLException exception) {
exception.printStackTrace();
@ -197,7 +198,7 @@ public class AllPatientController {
@FXML
public void handleAdd() {
String surname = this.textFieldSurname.getText();
String surname = this.textFieldSurName.getText();
String firstName = this.textFieldFirstName.getText();
String birthday = this.textFieldDateOfBirth.getText();
LocalDate date = DateConverter.convertStringToLocalDate(birthday);
@ -214,7 +215,7 @@ public class AllPatientController {
private void clearTextfields() {
this.textFieldFirstName.clear();
this.textFieldSurname.clear();
this.textFieldSurName.clear();
this.textFieldDateOfBirth.clear();
this.textFieldCareLevel.clear();
this.textFieldRoomNumber.clear();

View file

@ -20,12 +20,12 @@ public class Patient extends Person {
public Patient(
String firstName,
String surname,
String surName,
LocalDate dateOfBirth,
String careLevel,
String roomNumber
) {
super(firstName, surname);
super(firstName, surName);
this.dateOfBirth = new SimpleStringProperty(DateConverter.convertLocalDateToString(dateOfBirth));
this.careLevel = new SimpleStringProperty(careLevel);
this.roomNumber = new SimpleStringProperty(roomNumber);
@ -34,12 +34,12 @@ public class Patient extends Person {
public Patient(
int id,
String firstName,
String surname,
String surName,
LocalDate dateOfBirth,
String careLevel,
String roomNumber
) {
super(firstName, surname);
super(firstName, surName);
this.id = new SimpleIntegerProperty(id);
this.dateOfBirth = new SimpleStringProperty(DateConverter.convertLocalDateToString(dateOfBirth));
this.careLevel = new SimpleStringProperty(careLevel);
@ -103,8 +103,8 @@ public class Patient extends Person {
return new StringJoiner(System.lineSeparator())
.add("PATIENT")
.add("ID: " + this.getId())
.add("Firstname: " + this.getFirstName())
.add("Surname: " + this.getSurname())
.add("FirstName: " + this.getFirstName())
.add("SurName: " + this.getSurName())
.add("Birthday: " + this.getDateOfBirth())
.add("Carelevel: " + this.getCareLevel())
.add("RoomNumber: " + this.getRoomNumber())

View file

@ -1,125 +0,0 @@
package de.hitec.nhplus.patient;
import de.hitec.nhplus.datastorage.DaoImp;
import de.hitec.nhplus.utils.DateConverter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
public class PatientDao extends DaoImp<Patient> {
public PatientDao(Connection connection) {
super(connection);
}
@Override
protected PreparedStatement getCreateStatement(Patient patient) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "INSERT INTO patient (firstname, surname, dateOfBirth, carelevel, roomnumber) " +
"VALUES (?, ?, ?, ?, ?)";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setString(1, patient.getFirstName());
preparedStatement.setString(2, patient.getSurname());
preparedStatement.setString(3, patient.getDateOfBirth());
preparedStatement.setString(4, patient.getCareLevel());
preparedStatement.setString(5, patient.getRoomNumber());
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected PreparedStatement getReadByIDStatement(int id) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "SELECT * FROM patient WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, id);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected Patient getInstanceFromResultSet(ResultSet result) throws SQLException {
return new Patient(
result.getInt(1),
result.getString(2),
result.getString(3),
DateConverter.convertStringToLocalDate(result.getString(4)),
result.getString(5),
result.getString(6));
}
@Override
protected PreparedStatement getReadAllStatement() {
PreparedStatement statement = null;
try {
final String SQL = "SELECT * FROM patient";
statement = this.connection.prepareStatement(SQL);
} catch (SQLException exception) {
exception.printStackTrace();
}
return statement;
}
@Override
protected ArrayList<Patient> getListFromResultSet(ResultSet result) throws SQLException {
ArrayList<Patient> list = new ArrayList<>();
while (result.next()) {
Patient patient = new Patient(
result.getInt(1),
result.getString(2),
result.getString(3),
DateConverter.convertStringToLocalDate(result.getString(4)),
result.getString(5),
result.getString(6));
list.add(patient);
}
return list;
}
@Override
protected PreparedStatement getUpdateStatement(Patient patient) {
PreparedStatement preparedStatement = null;
try {
final String SQL =
"UPDATE patient SET " +
"firstname = ?, " +
"surname = ?, " +
"dateOfBirth = ?, " +
"carelevel = ?, " +
"roomnumber = ?, " +
"WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setString(1, patient.getFirstName());
preparedStatement.setString(2, patient.getSurname());
preparedStatement.setString(3, patient.getDateOfBirth());
preparedStatement.setString(4, patient.getCareLevel());
preparedStatement.setString(5, patient.getRoomNumber());
preparedStatement.setInt(6, patient.getId());
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected PreparedStatement getDeleteStatement(int id) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "DELETE FROM patient WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, id);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
}

View file

@ -0,0 +1,98 @@
package de.hitec.nhplus.patient.database;
import de.hitec.nhplus.datastorage.DaoImp;
import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.utils.DateConverter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class PatientDao extends DaoImp<Patient> {
public PatientDao(Connection connection) {
super(connection);
}
@Override
protected PreparedStatement getCreateStatement(Patient patient) throws SQLException {
final String SQL = """
INSERT INTO patient
(firstName, surName, dateOfBirth, careLevel, roomNumber)
VALUES (?, ?, ?, ?, ?)
""";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setString(1, patient.getFirstName());
statement.setString(2, patient.getSurName());
statement.setString(3, patient.getDateOfBirth());
statement.setString(4, patient.getCareLevel());
statement.setString(5, patient.getRoomNumber());
return statement;
}
@Override
protected PreparedStatement getReadByIDStatement(int id) throws SQLException {
final String SQL = "SELECT * FROM patient WHERE id = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, id);
return statement;
}
@Override
protected Patient getInstanceFromResultSet(ResultSet result) throws SQLException {
return new Patient(
result.getInt(1),
result.getString(2),
result.getString(3),
DateConverter.convertStringToLocalDate(result.getString(4)),
result.getString(5),
result.getString(6));
}
@Override
protected PreparedStatement getReadAllStatement() throws SQLException {
final String SQL = "SELECT * FROM patient";
return this.connection.prepareStatement(SQL);
}
@Override
protected List<Patient> getListFromResultSet(ResultSet result) throws SQLException {
ArrayList<Patient> list = new ArrayList<>();
while (result.next()) {
list.add(getInstanceFromResultSet(result));
}
return list;
}
@Override
protected PreparedStatement getUpdateStatement(Patient patient) throws SQLException {
final String SQL = """
UPDATE patient SET
firstName = ?,
surName = ?,
dateOfBirth = ?,
careLevel = ?,
roomNumber = ?,
WHERE id = ?
""";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setString(1, patient.getFirstName());
statement.setString(2, patient.getSurName());
statement.setString(3, patient.getDateOfBirth());
statement.setString(4, patient.getCareLevel());
statement.setString(5, patient.getRoomNumber());
statement.setInt(6, patient.getId());
return statement;
}
@Override
protected PreparedStatement getDeleteStatement(int id) throws SQLException {
final String SQL = "DELETE FROM patient WHERE id = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, id);
return statement;
}
}

View file

@ -3,7 +3,9 @@ package de.hitec.nhplus.treatment;
import de.hitec.nhplus.Main;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.patient.PatientDao;
import de.hitec.nhplus.patient.database.PatientDao;
import de.hitec.nhplus.treatment.database.TreatmentDao;
import javafx.beans.property.SimpleStringProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
@ -27,7 +29,7 @@ public class AllTreatmentController {
private TableColumn<Treatment, Integer> columnId;
@FXML
private TableColumn<Treatment, Integer> columnPatientId;
private TableColumn<Treatment, String> columnPatientName;
@FXML
private TableColumn<Treatment, String> columnDate;
@ -58,7 +60,12 @@ public class AllTreatmentController {
comboBoxPatientSelection.getSelectionModel().select(0);
this.columnId.setCellValueFactory(new PropertyValueFactory<>("id"));
this.columnPatientId.setCellValueFactory(new PropertyValueFactory<>("patientId"));
this.columnPatientName.setCellValueFactory(
cellData -> {
Patient patient = cellData.getValue().getPatient();
return new SimpleStringProperty(patient.getSurName() + ", " + patient.getFirstName());
}
);
this.columnDate.setCellValueFactory(new PropertyValueFactory<>("date"));
this.columnBegin.setCellValueFactory(new PropertyValueFactory<>("begin"));
this.columnEnd.setCellValueFactory(new PropertyValueFactory<>("end"));
@ -78,7 +85,7 @@ public class AllTreatmentController {
public void readAllAndShowInTableView() {
comboBoxPatientSelection.getSelectionModel().select(0);
this.dao = DaoFactory.getDaoFactory().createTreatmentDao();
this.dao = DaoFactory.getInstance().createTreatmentDao();
try {
this.treatments.setAll(dao.readAll());
} catch (SQLException exception) {
@ -87,12 +94,12 @@ public class AllTreatmentController {
}
private void createComboBoxData() {
PatientDao dao = DaoFactory.getDaoFactory().createPatientDAO();
PatientDao dao = DaoFactory.getInstance().createPatientDAO();
try {
patientList = (ArrayList<Patient>) dao.readAll();
this.patientSelection.add("alle");
for (Patient patient : patientList) {
this.patientSelection.add(patient.getSurname());
this.patientSelection.add(patient.getSurName());
}
} catch (SQLException exception) {
exception.printStackTrace();
@ -104,7 +111,7 @@ public class AllTreatmentController {
public void handleComboBox() {
String selectedPatient = this.comboBoxPatientSelection.getSelectionModel().getSelectedItem();
this.treatments.clear();
this.dao = DaoFactory.getDaoFactory().createTreatmentDao();
this.dao = DaoFactory.getInstance().createTreatmentDao();
if (selectedPatient.equals("alle")) {
try {
@ -126,7 +133,7 @@ public class AllTreatmentController {
private Patient searchInList(String surname) {
for (Patient patient : this.patientList) {
if (patient.getSurname().equals(surname)) {
if (patient.getSurName().equals(surname)) {
return patient;
}
}
@ -137,9 +144,9 @@ public class AllTreatmentController {
public void handleDelete() {
int index = this.tableView.getSelectionModel().getSelectedIndex();
Treatment t = this.treatments.remove(index);
TreatmentDao dao = DaoFactory.getDaoFactory().createTreatmentDao();
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
try {
dao.deleteById(t.getId());
dao.delete(t.getId());
} catch (SQLException exception) {
exception.printStackTrace();
}
@ -209,12 +216,12 @@ public class AllTreatmentController {
Stage stage = new Stage();
TreatmentModalController controller = loader.getController();
PatientDao pDao = DaoFactory.getDaoFactory().createPatientDAO();
PatientDao pDao = DaoFactory.getInstance().createPatientDAO();
controller.initialize(
this,
stage,
treatment,
pDao.read(treatment.getPatientId())
pDao.read(treatment.getPatient().getId())
);
stage.setScene(scene);
@ -228,7 +235,7 @@ public class AllTreatmentController {
}
public void createTreatment(Treatment treatment) {
TreatmentDao dao = DaoFactory.getDaoFactory().createTreatmentDao();
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
try {
dao.create(treatment);
} catch (SQLException exception) {
@ -237,7 +244,7 @@ public class AllTreatmentController {
}
public void updateTreatment(Treatment treatment) {
TreatmentDao dao = DaoFactory.getDaoFactory().createTreatmentDao();
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
try {
dao.update(treatment);
} catch (SQLException exception) {

View file

@ -1,94 +1,122 @@
package de.hitec.nhplus.treatment;
import de.hitec.nhplus.patient.Patient;
import de.hitec.nhplus.utils.DateConverter;
import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import java.time.LocalDate;
import java.time.LocalTime;
import java.util.StringJoiner;
public class Treatment {
private int id;
private final int patientId;
private LocalDate date;
private LocalTime begin;
private LocalTime end;
private String description;
private String remarks;
private SimpleIntegerProperty id;
private final SimpleObjectProperty<Patient> patient;
private final SimpleObjectProperty<LocalDate> date;
private final SimpleObjectProperty<LocalTime> begin;
private final SimpleObjectProperty<LocalTime> end;
private final SimpleStringProperty description;
private final SimpleStringProperty remarks;
public Treatment(int patientId, LocalDate date, LocalTime begin,
public Treatment(Patient patient, LocalDate date, LocalTime begin,
LocalTime end, String description, String remarks) {
this.patientId = patientId;
this.date = date;
this.begin = begin;
this.end = end;
this.description = description;
this.remarks = remarks;
this.patient = new SimpleObjectProperty<>(patient);
this.date = new SimpleObjectProperty<>(date);
this.begin = new SimpleObjectProperty<>(begin);
this.end = new SimpleObjectProperty<>(end);
this.description = new SimpleStringProperty(description);
this.remarks = new SimpleStringProperty(remarks);
}
public Treatment(int id, int patientId, LocalDate date, LocalTime begin,
public Treatment(int id, Patient patient, LocalDate date, LocalTime begin,
LocalTime end, String description, String remarks) {
this.id = id;
this.patientId = patientId;
this.date = date;
this.begin = begin;
this.end = end;
this.description = description;
this.remarks = remarks;
this.id = new SimpleIntegerProperty(id);
this.patient = new SimpleObjectProperty<>(patient);
this.date = new SimpleObjectProperty<>(date);
this.begin = new SimpleObjectProperty<>(begin);
this.end = new SimpleObjectProperty<>(end);
this.description = new SimpleStringProperty(description);
this.remarks = new SimpleStringProperty(remarks);
}
public int getId() {
return id;
return id.getValue();
}
public int getPatientId() {
return this.patientId;
public Patient getPatient() {
return patient.getValue();
}
public String getDate() {
return date.toString();
return date.getValue().toString();
}
public String getBegin() {
return begin.toString();
return begin.getValue().toString();
}
public String getEnd() {
return end.toString();
return end.getValue().toString();
}
public void setDate(String date) {
this.date = DateConverter.convertStringToLocalDate(date);
this.date.set(DateConverter.convertStringToLocalDate(date));
}
public void setBegin(LocalTime begin) {
this.begin = begin;
this.begin.set(begin);
}
public void setEnd(LocalTime end) {
this.end = end;
this.end.set(end);
}
public String getDescription() {
return description;
return description.getValue();
}
public void setDescription(String description) {
this.description = description;
this.description.set(description);
}
public String getRemarks() {
return remarks.getValue();
}
public SimpleObjectProperty<Patient> patientProperty() {
return patient;
}
public SimpleObjectProperty<LocalDate> dateProperty() {
return date;
}
public SimpleObjectProperty<LocalTime> beginProperty() {
return begin;
}
public SimpleObjectProperty<LocalTime> endProperty() {
return end;
}
public SimpleStringProperty descriptionProperty() {
return description;
}
public SimpleStringProperty remarksProperty() {
return remarks;
}
public void setRemarks(String remarks) {
this.remarks = remarks;
this.remarks.set(remarks);
}
public String toString() {
return new StringJoiner(System.lineSeparator())
.add("TREATMENT")
.add("ID: " + this.getId())
.add("PatientID: " + this.getPatientId())
.add("Patient: " + this.getPatient().getSurName() + ", " + this.getPatient().getFirstName())
.add("Date: " + this.getDate())
.add("Begin: " + this.getBegin())
.add("End: " + this.getEnd())

View file

@ -1,151 +0,0 @@
package de.hitec.nhplus.treatment;
import de.hitec.nhplus.datastorage.DaoImp;
import de.hitec.nhplus.utils.DateConverter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class TreatmentDao extends DaoImp<Treatment> {
public TreatmentDao(Connection connection) {
super(connection);
}
@Override
protected PreparedStatement getCreateStatement(Treatment treatment) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "INSERT INTO treatment (patientId, treatment_date, begin, end, description, remark) " +
"VALUES (?, ?, ?, ?, ?, ?)";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, treatment.getPatientId());
preparedStatement.setString(2, treatment.getDate());
preparedStatement.setString(3, treatment.getBegin());
preparedStatement.setString(4, treatment.getEnd());
preparedStatement.setString(5, treatment.getDescription());
preparedStatement.setString(6, treatment.getRemarks());
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected PreparedStatement getReadByIDStatement(int id) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "SELECT * FROM treatment WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, id);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected Treatment getInstanceFromResultSet(ResultSet result) throws SQLException {
return new Treatment(
result.getInt(1),
result.getInt(2),
DateConverter.convertStringToLocalDate(result.getString(3)),
DateConverter.convertStringToLocalTime(result.getString(4)),
DateConverter.convertStringToLocalTime(result.getString(5)),
result.getString(6),
result.getString(7)
);
}
@Override
protected PreparedStatement getReadAllStatement() {
PreparedStatement statement = null;
try {
final String SQL = "SELECT * FROM treatment";
statement = this.connection.prepareStatement(SQL);
} catch (SQLException exception) {
exception.printStackTrace();
}
return statement;
}
@Override
protected ArrayList<Treatment> getListFromResultSet(ResultSet result) throws SQLException {
ArrayList<Treatment> list = new ArrayList<>();
while (result.next()) {
Treatment treatment = new Treatment(
result.getInt(1),
result.getInt(2),
DateConverter.convertStringToLocalDate(result.getString(3)),
DateConverter.convertStringToLocalTime(result.getString(4)),
DateConverter.convertStringToLocalTime(result.getString(5)),
result.getString(6),
result.getString(7)
);
list.add(treatment);
}
return list;
}
private PreparedStatement getReadAllTreatmentsOfOnePatientByPid(int patientId) {
PreparedStatement preparedStatement = null;
try {
final String SQL = "SELECT * FROM treatment WHERE patientId = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, patientId);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
public List<Treatment> readTreatmentsByPid(int patientId) throws SQLException {
ResultSet result = getReadAllTreatmentsOfOnePatientByPid(patientId).executeQuery();
return getListFromResultSet(result);
}
@Override
protected PreparedStatement getUpdateStatement(Treatment treatment) {
PreparedStatement preparedStatement = null;
try {
final String SQL =
"UPDATE treatment SET " +
"patientId = ?, " +
"treatment_date = ?, " +
"begin = ?, " +
"end = ?, " +
"description = ?, " +
"remark = ? " +
"WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, treatment.getPatientId());
preparedStatement.setString(2, treatment.getDate());
preparedStatement.setString(3, treatment.getBegin());
preparedStatement.setString(4, treatment.getEnd());
preparedStatement.setString(5, treatment.getDescription());
preparedStatement.setString(6, treatment.getRemarks());
preparedStatement.setInt(7, treatment.getId());
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
@Override
protected PreparedStatement getDeleteStatement(int id) {
PreparedStatement preparedStatement = null;
try {
final String SQL =
"DELETE FROM treatment WHERE id = ?";
preparedStatement = this.connection.prepareStatement(SQL);
preparedStatement.setInt(1, id);
} catch (SQLException exception) {
exception.printStackTrace();
}
return preparedStatement;
}
}

View file

@ -17,7 +17,7 @@ public class TreatmentModalController {
@FXML
private Label labelFirstName;
@FXML
private Label labelSurname;
private Label labelSurName;
@FXML
private TextField textFieldBegin;
@FXML
@ -44,7 +44,7 @@ public class TreatmentModalController {
isNewTreatment = true;
LocalTime currentTime = LocalTime.now();
this.treatment = new Treatment(
patient.getId(),
patient,
LocalDate.now(),
LocalTime.of(currentTime.getHour(), currentTime.getMinute()),
LocalTime.of(currentTime.getHour(), currentTime.getMinute()),
@ -99,7 +99,7 @@ public class TreatmentModalController {
private void showData() {
this.labelFirstName.setText(patient.getFirstName());
this.labelSurname.setText(patient.getSurname());
this.labelSurName.setText(patient.getSurName());
LocalDate date = DateConverter.convertStringToLocalDate(treatment.getDate());
this.datePicker.setValue(date);
this.textFieldBegin.setText(this.treatment.getBegin());

View file

@ -0,0 +1,117 @@
package de.hitec.nhplus.treatment.database;
import de.hitec.nhplus.datastorage.DaoFactory;
import de.hitec.nhplus.datastorage.DaoImp;
import de.hitec.nhplus.treatment.Treatment;
import de.hitec.nhplus.utils.DateConverter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
public class TreatmentDao extends DaoImp<Treatment> {
public TreatmentDao(Connection connection) {
super(connection);
}
@Override
protected PreparedStatement getCreateStatement(Treatment treatment) throws SQLException {
final String SQL = """
INSERT INTO treatment
(patientId, date, begin, end, description, remark)
VALUES (?, ?, ?, ?, ?, ?)
""";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, treatment.getPatient().getId());
statement.setString(2, treatment.getDate());
statement.setString(3, treatment.getBegin());
statement.setString(4, treatment.getEnd());
statement.setString(5, treatment.getDescription());
statement.setString(6, treatment.getRemarks());
return statement;
}
@Override
protected PreparedStatement getReadByIDStatement(int id) throws SQLException {
final String SQL = "SELECT * FROM treatment WHERE id = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, id);
return statement;
}
@Override
protected Treatment getInstanceFromResultSet(ResultSet result) throws SQLException {
return new Treatment(
result.getInt(1),
DaoFactory.getInstance().createPatientDAO().read(result.getInt(2)),
DateConverter.convertStringToLocalDate(result.getString(3)),
DateConverter.convertStringToLocalTime(result.getString(4)),
DateConverter.convertStringToLocalTime(result.getString(5)),
result.getString(6),
result.getString(7)
);
}
@Override
protected PreparedStatement getReadAllStatement() throws SQLException {
final String SQL = "SELECT * FROM treatment";
return this.connection.prepareStatement(SQL);
}
@Override
protected List<Treatment> getListFromResultSet(ResultSet result) throws SQLException {
ArrayList<Treatment> list = new ArrayList<>();
while (result.next()) {
list.add(getInstanceFromResultSet(result));
}
return list;
}
private PreparedStatement getReadAllTreatmentsOfOnePatientByPid(int patientId) throws SQLException {
final String SQL = "SELECT * FROM treatment WHERE patientId = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, patientId);
return statement;
}
public List<Treatment> readTreatmentsByPid(int patientId) throws SQLException {
ResultSet result = getReadAllTreatmentsOfOnePatientByPid(patientId).executeQuery();
return getListFromResultSet(result);
}
@Override
protected PreparedStatement getUpdateStatement(Treatment treatment) throws SQLException {
final String SQL = """
UPDATE treatment SET
patientId = ?,
date = ?,
begin = ?,
end = ?,
description = ?,
remark = ?
WHERE id = ?
""";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, treatment.getPatient().getId());
statement.setString(2, treatment.getDate());
statement.setString(3, treatment.getBegin());
statement.setString(4, treatment.getEnd());
statement.setString(5, treatment.getDescription());
statement.setString(6, treatment.getRemarks());
statement.setInt(7, treatment.getId());
return statement;
}
@Override
protected PreparedStatement getDeleteStatement(int id) throws SQLException {
final String SQL =
"DELETE FROM treatment WHERE id = ?";
PreparedStatement statement = this.connection.prepareStatement(SQL);
statement.setInt(1, id);
return statement;
}
}

View file

@ -11,11 +11,17 @@ module de.hitec.nhplus {
opens de.hitec.nhplus.main to javafx.base, javafx.fxml;
exports de.hitec.nhplus.patient;
exports de.hitec.nhplus.patient.database;
opens de.hitec.nhplus.patient.database to javafx.base, javafx.fxml;
opens de.hitec.nhplus.patient to javafx.base, javafx.fxml;
exports de.hitec.nhplus.treatment;
exports de.hitec.nhplus.treatment.database;
opens de.hitec.nhplus.treatment to javafx.base, javafx.fxml;
opens de.hitec.nhplus.treatment.database to javafx.base, javafx.fxml;
exports de.hitec.nhplus.nurse;
exports de.hitec.nhplus.nurse.database;
opens de.hitec.nhplus.nurse to javafx.base, javafx.fxml;
opens de.hitec.nhplus.nurse.database to javafx.base, javafx.fxml;
}

View file

@ -20,7 +20,7 @@
text="ID"
/>
<TableColumn
fx:id="columnSurname"
fx:id="columnSurName"
minWidth="140.0"
text="Nachname"
/>
@ -51,12 +51,12 @@
<Insets right="8.0"/>
</padding>
<TextField
fx:id="textFieldSurname"
fx:id="textFieldSurName"
prefWidth="200.0"
promptText="Nachname"
/>
<TextField
fx:id="textFieldFirstname"
fx:id="textFieldFirstName"
prefWidth="200.0"
promptText="Vorname"
/>

View file

@ -0,0 +1,7 @@
CREATE TABLE nurse
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
firstName TEXT NOT NULL,
surName TEXT NOT NULL,
phoneNumber TEXT NOT NULL
)

View file

@ -23,7 +23,7 @@
text="ID"
/>
<TableColumn
fx:id="columnSurname"
fx:id="columnSurName"
minWidth="140.0"
onEditCommit="#handleOnEditSurname"
text="Nachname"
@ -90,7 +90,7 @@
GridPane.rowIndex="0"
GridPane.columnIndex="1"
prefWidth="200.0"
fx:id="textFieldSurname"
fx:id="textFieldSurName"
promptText="Nachname"
/>
<TextField

View file

@ -0,0 +1,9 @@
CREATE TABLE patient
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
firstName TEXT NOT NULL,
surName TEXT NOT NULL,
dateOfBirth TEXT NOT NULL,
careLevel TEXT NOT NULL,
roomNumber TEXT NOT NULL
);

View file

@ -24,9 +24,9 @@
text="ID"
/>
<TableColumn
fx:id="columnPatientId"
minWidth="40.0"
text="PatientID"
fx:id="columnPatientName"
minWidth="80.0"
text="Patient"
/>
<TableColumn
fx:id="columnDate"

View file

@ -47,7 +47,7 @@
GridPane.rowIndex="0"
GridPane.columnIndex="4"
prefWidth="200"
fx:id="labelSurname"
fx:id="labelSurName"
text="Nachname"
/>
<!-- Row 2 -->

View file

@ -0,0 +1,11 @@
CREATE TABLE treatment
(
id INTEGER PRIMARY KEY AUTOINCREMENT,
patientId INTEGER NOT NULL,
date TEXT NOT NULL,
begin TEXT NOT NULL,
end TEXT NOT NULL,
description TEXT NOT NULL,
remark TEXT NOT NULL,
FOREIGN KEY (patientId) REFERENCES patient (id) ON DELETE CASCADE
)