Javadoc #35
29 changed files with 631 additions and 239 deletions
|
@ -1,7 +1,6 @@
|
||||||
package de.hitec.nhplus;
|
package de.hitec.nhplus;
|
||||||
|
|
||||||
import de.hitec.nhplus.datastorage.ConnectionBuilder;
|
import de.hitec.nhplus.datastorage.ConnectionBuilder;
|
||||||
|
|
||||||
import javafx.application.Application;
|
import javafx.application.Application;
|
||||||
import javafx.application.Platform;
|
import javafx.application.Platform;
|
||||||
import javafx.fxml.FXMLLoader;
|
import javafx.fxml.FXMLLoader;
|
||||||
|
@ -12,18 +11,35 @@ import javafx.stage.Stage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author dominik.saeume@hmmh.ag
|
* The application main class, holding the {@link #main} entrypoint.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
*/
|
*/
|
||||||
public class Main extends Application {
|
public class Main extends Application {
|
||||||
|
|
||||||
private Stage primaryStage;
|
private Stage primaryStage;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The main entry point.
|
||||||
|
*/
|
||||||
|
public static void main(String[] args) {
|
||||||
|
launch(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implementation of the JavaFX start hook.
|
||||||
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void start(Stage primaryStage) {
|
public void start(Stage primaryStage) {
|
||||||
this.primaryStage = primaryStage;
|
this.primaryStage = primaryStage;
|
||||||
mainWindow();
|
executeMainApplication();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void mainWindow() {
|
/**
|
||||||
|
* Executes the main application.
|
||||||
|
*/
|
||||||
|
private void executeMainApplication() {
|
||||||
try {
|
try {
|
||||||
FXMLLoader loader = new FXMLLoader(Main.class.getResource("/de/hitec/nhplus/main/MainWindowView.fxml"));
|
FXMLLoader loader = new FXMLLoader(Main.class.getResource("/de/hitec/nhplus/main/MainWindowView.fxml"));
|
||||||
TabPane pane = loader.load();
|
TabPane pane = loader.load();
|
||||||
|
@ -44,7 +60,4 @@ public class Main extends Application {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void main(String[] args) {
|
|
||||||
launch(args);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,9 +7,9 @@ import java.sql.DriverManager;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link DaoFactory} allows a safe connection to the Database.
|
* The {@link DaoFactory} allows a safe connection to the database.
|
||||||
*
|
*
|
||||||
* @author Bernd Heidemann
|
* @author Bernd Heidemannn
|
||||||
* @author Dominik Säume
|
* @author Dominik Säume
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
@ -21,7 +21,7 @@ public class ConnectionBuilder {
|
||||||
private static Connection connection;
|
private static Connection connection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return A Thread-safe {@link Connection} to the Database.
|
* @return A thread-safe {@link Connection} to the database.
|
||||||
*/
|
*/
|
||||||
synchronized public static Connection getConnection() {
|
synchronized public static Connection getConnection() {
|
||||||
try {
|
try {
|
||||||
|
@ -38,7 +38,7 @@ public class ConnectionBuilder {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Closes the Connection to the Database.
|
* Closes the connection to the database.
|
||||||
*/
|
*/
|
||||||
synchronized public static void closeConnection() {
|
synchronized public static void closeConnection() {
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -4,47 +4,48 @@ import java.sql.SQLException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@link Dao} is the Abbreviation of Data-Access-Object.
|
* {@link Dao} is the abbreviation for Data-Access-Object.
|
||||||
* This Interface has the Basic Methods which are needed on any {@link Dao} to work as expected.
|
* This interface has the Basic Methods that are needed on any {@link Dao} to work as expected.
|
||||||
*
|
*
|
||||||
* @param <T> The Model for which that {@link Dao} is implemented.
|
* @param <T> The model for which that {@link Dao} is implemented.
|
||||||
* @author Bernd Heidemann
|
* @author Bernd Heidemannn
|
||||||
* @author Dominik Säume
|
* @author Dominik Säume
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @implSpec The Implementations should be added to the {@link DaoFactory}.
|
* @implSpec The implementations should be added to the {@link DaoFactory}.
|
||||||
*/
|
*/
|
||||||
public interface Dao<T> {
|
public interface Dao<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create a Database Entry from a Model object.
|
* Create a database entry from a model object.
|
||||||
*
|
*
|
||||||
* @param t The Model instance.
|
* @param t The model instance.
|
||||||
*/
|
*/
|
||||||
void create(T t) throws SQLException;
|
void create(T t) throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read a Database Entry to a Model object.
|
* Read a database entry to a model object.
|
||||||
*
|
*
|
||||||
* @param id The ID of the Element in the Database.
|
* @param id The ID of the element in the database.
|
||||||
|
* @return a model instance of {@link T}.
|
||||||
*/
|
*/
|
||||||
T read(int id) throws SQLException;
|
T read(int id) throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return All Database Entries as a {@link List} of Model instances
|
* @return All database entries as a {@link List} of model instances.
|
||||||
*/
|
*/
|
||||||
List<T> readAll() throws SQLException;
|
List<T> readAll() throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the Database according to the Values of the Model object.
|
* Update the database according to the values of the model object.
|
||||||
*
|
*
|
||||||
* @param t The Model instance.
|
* @param t The model instance.
|
||||||
*/
|
*/
|
||||||
void update(T t) throws SQLException;
|
void update(T t) throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a Database Entry.
|
* Delete a database entry.
|
||||||
*
|
*
|
||||||
* @param id The ID of the Element in the Database.
|
* @param id The ID of the element in the database.
|
||||||
*/
|
*/
|
||||||
void delete(int id) throws SQLException;
|
void delete(int id) throws SQLException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,9 +6,9 @@ import de.hitec.nhplus.patient.database.PatientDao;
|
||||||
import de.hitec.nhplus.treatment.database.TreatmentDao;
|
import de.hitec.nhplus.treatment.database.TreatmentDao;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link DaoFactory} is a Singleton({@link #getInstance}) which should be used to get {@link Dao}s.
|
* The {@link DaoFactory} is a singleton({@link #getInstance}) that should be used to get {@link Dao}s.
|
||||||
*
|
*
|
||||||
* @author Bernd Heidemann
|
* @author Bernd Heidemannn
|
||||||
* @author Dominik Säume
|
* @author Dominik Säume
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
*/
|
*/
|
||||||
|
@ -17,13 +17,13 @@ public class DaoFactory {
|
||||||
private static DaoFactory instance;
|
private static DaoFactory instance;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Private Constructor according to the Singleton Pattern.
|
* A private constructor according to the singleton pattern.
|
||||||
*/
|
*/
|
||||||
private DaoFactory() {
|
private DaoFactory() {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return The Singleton Instance.
|
* @return The singleton instance of {@link DaoFactory}.
|
||||||
*/
|
*/
|
||||||
public static DaoFactory getInstance() {
|
public static DaoFactory getInstance() {
|
||||||
if (DaoFactory.instance == null) {
|
if (DaoFactory.instance == null) {
|
||||||
|
@ -33,7 +33,7 @@ public class DaoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return A new {@link TreatmentDao} Instance with a Database Connection.
|
* @return A new {@link TreatmentDao} instance with a database connection.
|
||||||
* @see de.hitec.nhplus.treatment.Treatment Treatment
|
* @see de.hitec.nhplus.treatment.Treatment Treatment
|
||||||
*/
|
*/
|
||||||
public TreatmentDao createTreatmentDao() {
|
public TreatmentDao createTreatmentDao() {
|
||||||
|
@ -41,7 +41,7 @@ public class DaoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return A new {@link PatientDao} Instance with a Database Connection.
|
* @return A new {@link PatientDao} instance with a database connection.
|
||||||
* @see de.hitec.nhplus.patient.Patient Patient
|
* @see de.hitec.nhplus.patient.Patient Patient
|
||||||
*/
|
*/
|
||||||
public PatientDao createPatientDAO() {
|
public PatientDao createPatientDAO() {
|
||||||
|
@ -49,7 +49,7 @@ public class DaoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return A new {@link NurseDao} Instance with a Database Connection.
|
* @return A new {@link NurseDao} instance with a database connection.
|
||||||
* @see de.hitec.nhplus.nurse.Nurse Nurse
|
* @see de.hitec.nhplus.nurse.Nurse Nurse
|
||||||
*/
|
*/
|
||||||
public NurseDao createNurseDAO() {
|
public NurseDao createNurseDAO() {
|
||||||
|
@ -57,7 +57,7 @@ public class DaoFactory {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return A new {@link MedicationDao} Instance with a Database Connection.
|
* @return A new {@link MedicationDao} instance with a database connection.
|
||||||
* @see de.hitec.nhplus.medication.Medication Medication
|
* @see de.hitec.nhplus.medication.Medication Medication
|
||||||
*/
|
*/
|
||||||
public MedicationDao createMedicationDAO() {
|
public MedicationDao createMedicationDAO() {
|
||||||
|
|
|
@ -7,30 +7,30 @@ import java.sql.SQLException;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The {@link DaoImp} is a Generic Base Implementation of the {@link Dao},
|
* The {@link DaoImp} is a generic base implementation of the {@link Dao},
|
||||||
* which should fit most use cases.
|
* that should fit most use cases.
|
||||||
*
|
*
|
||||||
* @param <T> The Model for which that {@link Dao} is implemented.
|
* @param <T> The model for which that {@link Dao} is implemented.
|
||||||
* @author Bernd Heidemann
|
* @author Bernd Heidemannn
|
||||||
* @author Dominik Säume
|
* @author Dominik Säume
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @implSpec The Implementations should be added to the {@link DaoFactory}.
|
* @implSpec The implementations should be added to the {@link DaoFactory}.
|
||||||
*/
|
*/
|
||||||
public abstract class DaoImp<T> implements Dao<T> {
|
public abstract class DaoImp<T> implements Dao<T> {
|
||||||
protected final Connection connection;
|
protected final Connection connection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param connection The Database Connection to use
|
* @param connection The database {@link Connection} to use.
|
||||||
* @implSpec The Connection should be Received from the {@link ConnectionBuilder}.
|
* @implSpec The {@link Connection} should be received from the {@link ConnectionBuilder}.
|
||||||
*/
|
*/
|
||||||
public DaoImp(Connection connection) {
|
public DaoImp(Connection connection) {
|
||||||
this.connection = connection;
|
this.connection = connection;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a new Database Entry from a Model object.
|
* Creates a new database entry from a model object.
|
||||||
*
|
*
|
||||||
* @param t The Model instance.
|
* @param t The model instance.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void create(T t) throws SQLException {
|
public void create(T t) throws SQLException {
|
||||||
|
@ -38,9 +38,10 @@ public abstract class DaoImp<T> implements Dao<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read a Database Entry to a Model object.
|
* Read a database entry to a model object.
|
||||||
*
|
*
|
||||||
* @param id The ID of the Element in the Database.
|
* @param id The ID of the element in the database.
|
||||||
|
* @return the model instance of type {@link T}, which was read.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public T read(int id) throws SQLException {
|
public T read(int id) throws SQLException {
|
||||||
|
@ -53,7 +54,9 @@ public abstract class DaoImp<T> implements Dao<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read all Database Entries to a {@link List} of Model objects.
|
* Read all database entries to a {@link List} of model objects.
|
||||||
|
*
|
||||||
|
* @return a {@link List} of type {@link T} holding all database entries as model instances.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public List<T> readAll() throws SQLException {
|
public List<T> readAll() throws SQLException {
|
||||||
|
@ -61,9 +64,9 @@ public abstract class DaoImp<T> implements Dao<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Update the Database according to the Values of the Model object.
|
* Update the database according to the values of the model object.
|
||||||
*
|
*
|
||||||
* @param t The Model instance.
|
* @param t The model instance.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void update(T t) throws SQLException {
|
public void update(T t) throws SQLException {
|
||||||
|
@ -71,26 +74,62 @@ public abstract class DaoImp<T> implements Dao<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delete a Database Entry.
|
* Delete a database entry.
|
||||||
*
|
*
|
||||||
* @param id The ID of the Element in the Database.
|
* @param id The ID of the element in the database.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public void delete(int id) throws SQLException {
|
public void delete(int id) throws SQLException {
|
||||||
getDeleteStatement(id).executeUpdate();
|
getDeleteStatement(id).executeUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param result The {@link ResultSet} from execution of the statement received from {@link #getReadByIDStatement}.
|
||||||
|
* @return The model instance of type {@link T}.
|
||||||
|
* @implSpec This will be called in {@link #read}.
|
||||||
|
*/
|
||||||
protected abstract T getInstanceFromResultSet(ResultSet result) throws SQLException;
|
protected abstract T getInstanceFromResultSet(ResultSet result) throws SQLException;
|
||||||
|
|
||||||
protected abstract List<T> getListFromResultSet(ResultSet result) throws SQLException;
|
/**
|
||||||
|
* @param id The ID of the database entry to read.
|
||||||
protected abstract PreparedStatement getCreateStatement(T t) throws SQLException;
|
* @return A {@link PreparedStatement} to read a specific entry by its ID.
|
||||||
|
* @implSpec This will be called in {@link #read}.
|
||||||
|
* The output of the execution will be used in {@link #getInstanceFromResultSet}.
|
||||||
|
*/
|
||||||
protected abstract PreparedStatement getReadByIDStatement(int id) throws SQLException;
|
protected abstract PreparedStatement getReadByIDStatement(int id) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param result The {@link ResultSet} from execution of the statement received from {@link #getReadAllStatement}.
|
||||||
|
* @return A {@link List} of type {@link T} holding all database entries as model instances.
|
||||||
|
* @implSpec This will be called in {@link #readAll}.
|
||||||
|
*/
|
||||||
|
protected abstract List<T> getListFromResultSet(ResultSet result) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return A {@link PreparedStatement} to read all entries of this model.
|
||||||
|
* @implSpec This will be called in {@link #readAll}.
|
||||||
|
* The output of the execution will be used in {@link #getListFromResultSet}.
|
||||||
|
*/
|
||||||
protected abstract PreparedStatement getReadAllStatement() throws SQLException;
|
protected abstract PreparedStatement getReadAllStatement() throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param t The model instance of type {@link T} for which an entry should be created.
|
||||||
|
* @return a {@link PreparedStatement} which can be used to create a new database entry for the model instance.
|
||||||
|
* @implSpec This will be called in {@link #create}.
|
||||||
|
*/
|
||||||
|
protected abstract PreparedStatement getCreateStatement(T t) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param t The model instance of type {@link T} for which the entry should be updated.
|
||||||
|
* @return a {@link PreparedStatement} which can be used to update the database entry for the model instance.
|
||||||
|
* @implSpec This will be called in {@link #update}.
|
||||||
|
*/
|
||||||
protected abstract PreparedStatement getUpdateStatement(T t) throws SQLException;
|
protected abstract PreparedStatement getUpdateStatement(T t) throws SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param id The ID of the database entry which should be deleted.
|
||||||
|
* @return a {@link PreparedStatement} which can be used to delete the database entry.
|
||||||
|
* @implSpec This will be called in {@link #delete}.
|
||||||
|
*/
|
||||||
protected abstract PreparedStatement getDeleteStatement(int id) throws SQLException;
|
protected abstract PreparedStatement getDeleteStatement(int id) throws SQLException;
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,36 +7,36 @@ import java.sql.SQLException;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Fixture is a Class, which can be used to set up a specific set of Data.
|
* A fixture is a class, which can be used to set up a specific set of data.
|
||||||
*
|
*
|
||||||
* @param <T> The Model for which the {@link Fixture} is implemented.
|
* @param <T> The model for which the {@link Fixture} is implemented.
|
||||||
* @author Dominik Säume
|
* @author Dominik Säume
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
* @implSpec The Implementations should be added to the {@link Fixtures#main}.
|
* @implSpec The implementations should be added to the {@link Fixtures#main}.
|
||||||
*/
|
*/
|
||||||
public interface Fixture<T> {
|
public interface Fixture<T> {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Drop all Dependent Tables.
|
* Drop all dependent tables.
|
||||||
*
|
*
|
||||||
* @param connection A Database {@link Connection}, which should be received from
|
* @param connection A database {@link Connection}, which should be received from
|
||||||
* the {@link ConnectionBuilder#getConnection}
|
* the {@link ConnectionBuilder#getConnection}
|
||||||
* @implSpec Use {@code IF EXISTS}, to ensure that it doesn't throw an {@link Exception}.
|
* @implSpec Use {@code IF EXISTS}, to ensure that it doesn't throw an {@link Exception}.
|
||||||
*/
|
*/
|
||||||
void dropTable(Connection connection) throws SQLException;
|
void dropTable(Connection connection) throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set up the Empty Tables with the Schema.
|
* Set up the empty tables with the schema.
|
||||||
*
|
*
|
||||||
* @param connection A Database {@link Connection}, which should be received from
|
* @param connection A database {@link Connection}, which should be received from
|
||||||
* the {@link ConnectionBuilder#getConnection}
|
* the {@link ConnectionBuilder#getConnection}
|
||||||
*/
|
*/
|
||||||
void setupTable(Connection connection) throws SQLException;
|
void setupTable(Connection connection) throws SQLException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Loads all Model specific Data to the Database.
|
* Loads all model specific data to the database.
|
||||||
*
|
*
|
||||||
* @return A Map of Models with a {@link String} key, to be used by other {@link Fixture}
|
* @return A map of models with a {@link String} key, to be used by other {@link Fixture}
|
||||||
* @implSpec The {@link de.hitec.nhplus.datastorage.Dao Dao} should be received
|
* @implSpec The {@link de.hitec.nhplus.datastorage.Dao Dao} should be received
|
||||||
* from {@link de.hitec.nhplus.datastorage.DaoFactory DaoFactory}.
|
* from {@link de.hitec.nhplus.datastorage.DaoFactory DaoFactory}.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -8,7 +8,7 @@ import java.sql.Connection;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A Class, Implementing an Entrypoint({@link #main}), for loading a Specific set of Data.
|
* A class, implementing an entrypoint({@link #main}), for loading a specific set of data.
|
||||||
*
|
*
|
||||||
* @author Dominik Säume
|
* @author Dominik Säume
|
||||||
* @version 1.0
|
* @version 1.0
|
||||||
|
@ -16,7 +16,7 @@ import java.util.Map;
|
||||||
public class Fixtures {
|
public class Fixtures {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An Entrypoint, for loading a Specific set of Data.
|
* An entrypoint, for loading a specific set of data.
|
||||||
*
|
*
|
||||||
* @param args unused.
|
* @param args unused.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -12,7 +12,11 @@ import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link Fixture} for {@link Medication}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class MedicationFixture implements Fixture<Medication> {
|
public class MedicationFixture implements Fixture<Medication> {
|
||||||
private static final String SCHEMA = "/de/hitec/nhplus/medication/database/Medication.sql";
|
private static final String SCHEMA = "/de/hitec/nhplus/medication/database/Medication.sql";
|
||||||
private static final String INGREDIENT_SCHEMA = "/de/hitec/nhplus/medication/database/Medication_Ingredient.sql";
|
private static final String INGREDIENT_SCHEMA = "/de/hitec/nhplus/medication/database/Medication_Ingredient.sql";
|
||||||
|
|
|
@ -4,6 +4,7 @@ import de.hitec.nhplus.Main;
|
||||||
import de.hitec.nhplus.datastorage.DaoFactory;
|
import de.hitec.nhplus.datastorage.DaoFactory;
|
||||||
import de.hitec.nhplus.nurse.Nurse;
|
import de.hitec.nhplus.nurse.Nurse;
|
||||||
import de.hitec.nhplus.nurse.database.NurseDao;
|
import de.hitec.nhplus.nurse.database.NurseDao;
|
||||||
|
import de.hitec.nhplus.treatment.Treatment;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
|
@ -11,6 +12,11 @@ import java.sql.Connection;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link Fixture} for {@link Nurse}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class NurseFixture implements Fixture<Nurse> {
|
public class NurseFixture implements Fixture<Nurse> {
|
||||||
@Override
|
@Override
|
||||||
public void dropTable(Connection connection) throws SQLException {
|
public void dropTable(Connection connection) throws SQLException {
|
||||||
|
|
|
@ -13,6 +13,11 @@ import java.util.*;
|
||||||
|
|
||||||
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalDate;
|
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalDate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link Fixture} for {@link Patient}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class PatientFixture implements Fixture<Patient> {
|
public class PatientFixture implements Fixture<Patient> {
|
||||||
@Override
|
@Override
|
||||||
public void dropTable(Connection connection) throws SQLException {
|
public void dropTable(Connection connection) throws SQLException {
|
||||||
|
|
|
@ -16,6 +16,12 @@ import java.util.*;
|
||||||
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalDate;
|
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalDate;
|
||||||
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalTime;
|
import static de.hitec.nhplus.utils.DateConverter.convertStringToLocalTime;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@link Fixture} for {@link Treatment}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class TreatmentFixture implements Fixture<Treatment> {
|
public class TreatmentFixture implements Fixture<Treatment> {
|
||||||
private final Map<String, Patient> patientsByName;
|
private final Map<String, Patient> patientsByName;
|
||||||
private final Map<String, Nurse> nursesByName;
|
private final Map<String, Nurse> nursesByName;
|
||||||
|
|
|
@ -11,6 +11,12 @@ import javafx.scene.layout.BorderPane;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Controller for the main window of the application, which holds all tabs.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class MainWindowController {
|
public class MainWindowController {
|
||||||
@FXML
|
@FXML
|
||||||
private TabPane mainTabPane;
|
private TabPane mainTabPane;
|
||||||
|
@ -42,6 +48,9 @@ public class MainWindowController {
|
||||||
medicationTab.setOnSelectionChanged(event -> loadMedicationPage());
|
medicationTab.setOnSelectionChanged(event -> loadMedicationPage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the patient page into its tab.
|
||||||
|
*/
|
||||||
private void loadPatientPage() {
|
private void loadPatientPage() {
|
||||||
try {
|
try {
|
||||||
BorderPane patientsPane = FXMLLoader.load(
|
BorderPane patientsPane = FXMLLoader.load(
|
||||||
|
@ -57,6 +66,9 @@ public class MainWindowController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the treatment page into its tab.
|
||||||
|
*/
|
||||||
private void loadTreatmentsPage() {
|
private void loadTreatmentsPage() {
|
||||||
try {
|
try {
|
||||||
BorderPane treatmentsPane = FXMLLoader.load(
|
BorderPane treatmentsPane = FXMLLoader.load(
|
||||||
|
@ -72,6 +84,9 @@ public class MainWindowController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the nurse page into its tab.
|
||||||
|
*/
|
||||||
private void loadNursePage() {
|
private void loadNursePage() {
|
||||||
try {
|
try {
|
||||||
BorderPane nursePane = FXMLLoader.load(
|
BorderPane nursePane = FXMLLoader.load(
|
||||||
|
@ -87,6 +102,9 @@ public class MainWindowController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Loads the medication page into its tab.
|
||||||
|
*/
|
||||||
private void loadMedicationPage() {
|
private void loadMedicationPage() {
|
||||||
try {
|
try {
|
||||||
BorderPane medicationPane = FXMLLoader.load(
|
BorderPane medicationPane = FXMLLoader.load(
|
||||||
|
|
|
@ -2,6 +2,12 @@ package de.hitec.nhplus.main;
|
||||||
|
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A simple base model for a {@link Person} that can be extended.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public abstract class Person {
|
public abstract class Person {
|
||||||
private final SimpleStringProperty firstName;
|
private final SimpleStringProperty firstName;
|
||||||
private final SimpleStringProperty surName;
|
private final SimpleStringProperty surName;
|
||||||
|
|
|
@ -13,6 +13,11 @@ import javafx.scene.control.cell.PropertyValueFactory;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for viewing all {@link Medication}s.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class AllMedicationController {
|
public class AllMedicationController {
|
||||||
@FXML
|
@FXML
|
||||||
private TableView<Medication> tableView;
|
private TableView<Medication> tableView;
|
||||||
|
@ -34,6 +39,10 @@ public class AllMedicationController {
|
||||||
private final ObservableList<Medication> medications = FXCollections.observableArrayList();
|
private final ObservableList<Medication> medications = FXCollections.observableArrayList();
|
||||||
private MedicationDao dao;
|
private MedicationDao dao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization method that is called after the binding of all the fields.
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
readAllAndShowInTableView();
|
readAllAndShowInTableView();
|
||||||
|
|
||||||
|
@ -41,16 +50,14 @@ public class AllMedicationController {
|
||||||
this.columnName.setCellValueFactory(new PropertyValueFactory<>("name"));
|
this.columnName.setCellValueFactory(new PropertyValueFactory<>("name"));
|
||||||
this.columnManufacturer.setCellValueFactory(new PropertyValueFactory<>("manufacturer"));
|
this.columnManufacturer.setCellValueFactory(new PropertyValueFactory<>("manufacturer"));
|
||||||
this.columnIngredient.setCellValueFactory(
|
this.columnIngredient.setCellValueFactory(
|
||||||
cellData -> {
|
cellData -> new SimpleStringProperty(
|
||||||
return new SimpleStringProperty(
|
|
||||||
cellData
|
cellData
|
||||||
.getValue()
|
.getValue()
|
||||||
.getIngredients()
|
.getIngredients()
|
||||||
.stream()
|
.stream()
|
||||||
.map(ingredient -> ingredient.getName())
|
.map(ingredient -> ingredient.getName())
|
||||||
.collect(Collectors.joining("\n"))
|
.collect(Collectors.joining("\n"))
|
||||||
);
|
));
|
||||||
});
|
|
||||||
this.columnPossibleSideEffects.setCellValueFactory(new PropertyValueFactory<>("possibleSideEffects"));
|
this.columnPossibleSideEffects.setCellValueFactory(new PropertyValueFactory<>("possibleSideEffects"));
|
||||||
this.columnAdministrationMethod.setCellValueFactory(new PropertyValueFactory<>("administrationMethod"));
|
this.columnAdministrationMethod.setCellValueFactory(new PropertyValueFactory<>("administrationMethod"));
|
||||||
this.columnCurrentStock.setCellValueFactory(new PropertyValueFactory<>("currentStock"));
|
this.columnCurrentStock.setCellValueFactory(new PropertyValueFactory<>("currentStock"));
|
||||||
|
@ -58,6 +65,9 @@ public class AllMedicationController {
|
||||||
this.tableView.setItems(this.medications);
|
this.tableView.setItems(this.medications);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to read all data and set it to the table view.
|
||||||
|
*/
|
||||||
public void readAllAndShowInTableView() {
|
public void readAllAndShowInTableView() {
|
||||||
this.dao = DaoFactory.getInstance().createMedicationDAO();
|
this.dao = DaoFactory.getInstance().createMedicationDAO();
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -2,6 +2,13 @@ package de.hitec.nhplus.medication;
|
||||||
|
|
||||||
import javafx.beans.property.SimpleStringProperty;
|
import javafx.beans.property.SimpleStringProperty;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The simple model for an {@link Ingredient}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
* @implSpec This isn't a conventional model, because it isn't directly stored in the database,
|
||||||
|
* but it can be changed to do that, in the case that its complexity rises in the future.
|
||||||
|
*/
|
||||||
public class Ingredient {
|
public class Ingredient {
|
||||||
private final SimpleStringProperty name;
|
private final SimpleStringProperty name;
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,11 @@ import java.util.List;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for a {@link Medication}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class Medication {
|
public class Medication {
|
||||||
private SimpleIntegerProperty id;
|
private SimpleIntegerProperty id;
|
||||||
private final SimpleStringProperty name;
|
private final SimpleStringProperty name;
|
||||||
|
@ -19,6 +24,13 @@ public class Medication {
|
||||||
private final SimpleStringProperty administrationMethod;
|
private final SimpleStringProperty administrationMethod;
|
||||||
private final SimpleIntegerProperty currentStock;
|
private final SimpleIntegerProperty currentStock;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor allows instantiating a {@link Medication} object,
|
||||||
|
* before it is stored in the database, by omitting the {@link Medication#id ID} value.
|
||||||
|
*
|
||||||
|
* @implSpec Instances created with this constructor can be directly passed to
|
||||||
|
* {@link de.hitec.nhplus.medication.database.MedicationDao#create MedicationDao.create}.
|
||||||
|
*/
|
||||||
public Medication(
|
public Medication(
|
||||||
String name,
|
String name,
|
||||||
String manufacturer,
|
String manufacturer,
|
||||||
|
@ -35,6 +47,9 @@ public class Medication {
|
||||||
this.currentStock = new SimpleIntegerProperty(currentStock);
|
this.currentStock = new SimpleIntegerProperty(currentStock);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor allows instantiating a {@link Medication} object with all existing fields.
|
||||||
|
*/
|
||||||
public Medication(
|
public Medication(
|
||||||
int id,
|
int id,
|
||||||
String name,
|
String name,
|
||||||
|
|
|
@ -13,6 +13,13 @@ import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link MedicationDao} is an implementation of the{@link de.hitec.nhplus.datastorage.Dao Dao}
|
||||||
|
* for the {@link Medication} model.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemannn
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class MedicationDao implements Dao<Medication> {
|
public class MedicationDao implements Dao<Medication> {
|
||||||
protected final Connection connection;
|
protected final Connection connection;
|
||||||
|
|
||||||
|
@ -153,6 +160,13 @@ public class MedicationDao implements Dao<Medication> {
|
||||||
preparedStatement.executeUpdate();
|
preparedStatement.executeUpdate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructs a {@link Medication} object from the {@link ResultSet} obtained after executing a database query.
|
||||||
|
* This method is used internally to map the {@link ResultSet} data to a {@link Medication} object.
|
||||||
|
*
|
||||||
|
* @param result The {@link ResultSet} containing the data retrieved from the database.
|
||||||
|
* @return A {@link Medication} object constructed from the {@link ResultSet} data.
|
||||||
|
*/
|
||||||
private Medication getInstanceFromResultSet(ResultSet result) throws SQLException {
|
private Medication getInstanceFromResultSet(ResultSet result) throws SQLException {
|
||||||
Medication medication = new Medication(
|
Medication medication = new Medication(
|
||||||
result.getInt(1),
|
result.getInt(1),
|
||||||
|
|
|
@ -17,6 +17,12 @@ import javafx.scene.control.cell.TextFieldTableCell;
|
||||||
|
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for viewing all {@link Nurse}s.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
* @author Ole Kück
|
||||||
|
*/
|
||||||
public class AllNurseController {
|
public class AllNurseController {
|
||||||
@FXML
|
@FXML
|
||||||
public TextField textFieldSurName;
|
public TextField textFieldSurName;
|
||||||
|
@ -40,6 +46,10 @@ public class AllNurseController {
|
||||||
private final ObservableList<Nurse> nurses = FXCollections.observableArrayList();
|
private final ObservableList<Nurse> nurses = FXCollections.observableArrayList();
|
||||||
private NurseDao dao;
|
private NurseDao dao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization method that is called after the binding of all the fields.
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
this.readAllAndShowInTableView();
|
this.readAllAndShowInTableView();
|
||||||
|
|
||||||
|
@ -72,15 +82,28 @@ public class AllNurseController {
|
||||||
this.textFieldPhoneNumber.textProperty().addListener(inputNewNurseValidationListener);
|
this.textFieldPhoneNumber.textProperty().addListener(inputNewNurseValidationListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to read all data and set it to the table view.
|
||||||
|
*/
|
||||||
private void readAllAndShowInTableView(){
|
private void readAllAndShowInTableView(){
|
||||||
this.nurses.clear();
|
this.nurses.clear();
|
||||||
this.dao = DaoFactory.getInstance().createNurseDAO();
|
this.dao = DaoFactory.getInstance().createNurseDAO();
|
||||||
try {
|
try {
|
||||||
this.nurses.addAll(this.dao.readAll());
|
this.nurses.setAll(this.dao.readAll());
|
||||||
}catch (SQLException exception){
|
}catch (SQLException exception){
|
||||||
exception.printStackTrace();
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method that clears the text fields used for creating a new {@link Nurse}.
|
||||||
|
*/
|
||||||
|
private void clearTextfields() {
|
||||||
|
this.textFieldFirstName.clear();
|
||||||
|
this.textFieldSurName.clear();
|
||||||
|
this.textFieldPhoneNumber.clear();
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void handleAdd(){
|
public void handleAdd(){
|
||||||
String surname=this.textFieldSurName.getText();
|
String surname=this.textFieldSurName.getText();
|
||||||
|
@ -96,10 +119,5 @@ public class AllNurseController {
|
||||||
clearTextfields();
|
clearTextfields();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearTextfields() {
|
|
||||||
this.textFieldFirstName.clear();
|
|
||||||
this.textFieldSurName.clear();
|
|
||||||
this.textFieldPhoneNumber.clear();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,10 +6,22 @@ import javafx.beans.property.SimpleStringProperty;
|
||||||
|
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for a {@link Nurse}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class Nurse extends Person {
|
public class Nurse extends Person {
|
||||||
private SimpleIntegerProperty id;
|
private SimpleIntegerProperty id;
|
||||||
private final SimpleStringProperty phoneNumber;
|
private final SimpleStringProperty phoneNumber;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor allows instantiating a {@link Nurse} object,
|
||||||
|
* before it is stored in the database, by omitting the {@link Nurse#id ID} value.
|
||||||
|
*
|
||||||
|
* @implSpec Instances created with this constructor can be directly passed to
|
||||||
|
* {@link de.hitec.nhplus.nurse.database.NurseDao#create NurseDao.create}.
|
||||||
|
*/
|
||||||
public Nurse(
|
public Nurse(
|
||||||
String firstName,
|
String firstName,
|
||||||
String surName,
|
String surName,
|
||||||
|
@ -19,6 +31,9 @@ public class Nurse extends Person {
|
||||||
this.phoneNumber = new SimpleStringProperty(phoneNumber);
|
this.phoneNumber = new SimpleStringProperty(phoneNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor allows instantiating a {@link Nurse} object with all existing fields.
|
||||||
|
*/
|
||||||
public Nurse(
|
public Nurse(
|
||||||
int id,
|
int id,
|
||||||
String firstName,
|
String firstName,
|
||||||
|
|
|
@ -10,6 +10,12 @@ import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link NurseDao} is an implementation of the {@link de.hitec.nhplus.datastorage.Dao Dao}
|
||||||
|
* for the {@link Nurse} model.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class NurseDao extends DaoImp<Nurse> {
|
public class NurseDao extends DaoImp<Nurse> {
|
||||||
public NurseDao(Connection connection) {
|
public NurseDao(Connection connection) {
|
||||||
super(connection);
|
super(connection);
|
||||||
|
|
|
@ -19,6 +19,13 @@ import java.time.LocalDate;
|
||||||
|
|
||||||
import static de.hitec.nhplus.utils.Validator.*;
|
import static de.hitec.nhplus.utils.Validator.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for viewing all {@link Patient}s.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
|
* @author Armin Ribic
|
||||||
|
*/
|
||||||
public class AllPatientController {
|
public class AllPatientController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -53,6 +60,10 @@ public class AllPatientController {
|
||||||
private final ObservableList<Patient> patients = FXCollections.observableArrayList();
|
private final ObservableList<Patient> patients = FXCollections.observableArrayList();
|
||||||
private PatientDao dao;
|
private PatientDao dao;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization method that is called after the binding of all the fields.
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
this.readAllAndShowInTableView();
|
this.readAllAndShowInTableView();
|
||||||
|
|
||||||
|
@ -104,6 +115,41 @@ public class AllPatientController {
|
||||||
this.textFieldRoomNumber.textProperty().addListener(inputNewPatientValidationListener);
|
this.textFieldRoomNumber.textProperty().addListener(inputNewPatientValidationListener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to read all data and set it to the table view.
|
||||||
|
*/
|
||||||
|
private void readAllAndShowInTableView() {
|
||||||
|
this.patients.clear();
|
||||||
|
this.dao = DaoFactory.getInstance().createPatientDAO();
|
||||||
|
try {
|
||||||
|
this.patients.setAll(this.dao.readAll());
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method that stores the changes in the database.
|
||||||
|
*/
|
||||||
|
private void doUpdate(TableColumn.CellEditEvent<Patient, String> event) {
|
||||||
|
try {
|
||||||
|
this.dao.update(event.getRowValue());
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method that clears the text fields used for creating a new {@link Patient}.
|
||||||
|
*/
|
||||||
|
private void clearTextfields() {
|
||||||
|
this.textFieldFirstName.clear();
|
||||||
|
this.textFieldSurName.clear();
|
||||||
|
this.textFieldDateOfBirth.clear();
|
||||||
|
this.textFieldCareLevel.clear();
|
||||||
|
this.textFieldRoomNumber.clear();
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void handleOnEditFirstname(TableColumn.CellEditEvent<Patient, String> event) {
|
public void handleOnEditFirstname(TableColumn.CellEditEvent<Patient, String> event) {
|
||||||
String newFirstName = event.getNewValue();
|
String newFirstName = event.getNewValue();
|
||||||
|
@ -164,25 +210,6 @@ public class AllPatientController {
|
||||||
this.doUpdate(event);
|
this.doUpdate(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private void doUpdate(TableColumn.CellEditEvent<Patient, String> event) {
|
|
||||||
try {
|
|
||||||
this.dao.update(event.getRowValue());
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void readAllAndShowInTableView() {
|
|
||||||
this.patients.clear();
|
|
||||||
this.dao = DaoFactory.getInstance().createPatientDAO();
|
|
||||||
try {
|
|
||||||
this.patients.addAll(this.dao.readAll());
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void handleDelete() {
|
public void handleDelete() {
|
||||||
Patient selectedItem = this.tableView.getSelectionModel().getSelectedItem();
|
Patient selectedItem = this.tableView.getSelectionModel().getSelectedItem();
|
||||||
|
@ -212,12 +239,4 @@ public class AllPatientController {
|
||||||
readAllAndShowInTableView();
|
readAllAndShowInTableView();
|
||||||
clearTextfields();
|
clearTextfields();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void clearTextfields() {
|
|
||||||
this.textFieldFirstName.clear();
|
|
||||||
this.textFieldSurName.clear();
|
|
||||||
this.textFieldDateOfBirth.clear();
|
|
||||||
this.textFieldCareLevel.clear();
|
|
||||||
this.textFieldRoomNumber.clear();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,13 @@ import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for a {@link Patient}.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
|
* @author Armin Ribic
|
||||||
|
*/
|
||||||
public class Patient extends Person {
|
public class Patient extends Person {
|
||||||
private SimpleIntegerProperty id;
|
private SimpleIntegerProperty id;
|
||||||
private final SimpleStringProperty dateOfBirth;
|
private final SimpleStringProperty dateOfBirth;
|
||||||
|
@ -18,6 +25,13 @@ public class Patient extends Person {
|
||||||
private final SimpleStringProperty roomNumber;
|
private final SimpleStringProperty roomNumber;
|
||||||
private final List<Treatment> allTreatments = new ArrayList<>();
|
private final List<Treatment> allTreatments = new ArrayList<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor allows instantiating a {@link Patient} object,
|
||||||
|
* before it is stored in the database, by omitting the {@link Patient#id ID} value.
|
||||||
|
*
|
||||||
|
* @implSpec Instances created with this constructor can be directly passed to
|
||||||
|
* {@link de.hitec.nhplus.patient.database.PatientDao#create PatientDao.create}.
|
||||||
|
*/
|
||||||
public Patient(
|
public Patient(
|
||||||
String firstName,
|
String firstName,
|
||||||
String surName,
|
String surName,
|
||||||
|
@ -31,6 +45,9 @@ public class Patient extends Person {
|
||||||
this.roomNumber = new SimpleStringProperty(roomNumber);
|
this.roomNumber = new SimpleStringProperty(roomNumber);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This constructor allows instantiating a {@link Patient} object with all existing fields.
|
||||||
|
*/
|
||||||
public Patient(
|
public Patient(
|
||||||
int id,
|
int id,
|
||||||
String firstName,
|
String firstName,
|
||||||
|
|
|
@ -11,6 +11,13 @@ import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link PatientDao} is an implementation of the {@link de.hitec.nhplus.datastorage.Dao Dao}
|
||||||
|
* for the {@link Patient} model.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemannn
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class PatientDao extends DaoImp<Patient> {
|
public class PatientDao extends DaoImp<Patient> {
|
||||||
|
|
||||||
public PatientDao(Connection connection) {
|
public PatientDao(Connection connection) {
|
||||||
|
|
|
@ -22,6 +22,12 @@ import java.io.IOException;
|
||||||
import java.sql.SQLException;
|
import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for viewing all {@link Treatment}s.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class AllTreatmentController {
|
public class AllTreatmentController {
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
|
@ -64,6 +70,10 @@ public class AllTreatmentController {
|
||||||
private final ObservableList<String> nurseSelection = FXCollections.observableArrayList();
|
private final ObservableList<String> nurseSelection = FXCollections.observableArrayList();
|
||||||
private ArrayList<Nurse> nurseList;
|
private ArrayList<Nurse> nurseList;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization method that is called after the binding of all the fields.
|
||||||
|
*/
|
||||||
|
@FXML
|
||||||
public void initialize() {
|
public void initialize() {
|
||||||
readAllAndShowInTableView();
|
readAllAndShowInTableView();
|
||||||
comboBoxPatientSelection.setItems(patientSelection);
|
comboBoxPatientSelection.setItems(patientSelection);
|
||||||
|
@ -101,6 +111,9 @@ public class AllTreatmentController {
|
||||||
this.createComboBoxData();
|
this.createComboBoxData();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to read all data and set it to the table view.
|
||||||
|
*/
|
||||||
public void readAllAndShowInTableView() {
|
public void readAllAndShowInTableView() {
|
||||||
this.dao = DaoFactory.getInstance().createTreatmentDao();
|
this.dao = DaoFactory.getInstance().createTreatmentDao();
|
||||||
try {
|
try {
|
||||||
|
@ -110,6 +123,9 @@ public class AllTreatmentController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to create the data set for the combobox that is used for creating a new {@link Treatment}.
|
||||||
|
*/
|
||||||
private void createComboBoxData() {
|
private void createComboBoxData() {
|
||||||
PatientDao patientDAO = DaoFactory.getInstance().createPatientDAO();
|
PatientDao patientDAO = DaoFactory.getInstance().createPatientDAO();
|
||||||
NurseDao nurseDao = DaoFactory.getInstance().createNurseDAO();
|
NurseDao nurseDao = DaoFactory.getInstance().createNurseDAO();
|
||||||
|
@ -129,6 +145,58 @@ public class AllTreatmentController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to get the {@link Patient} object by its surname.
|
||||||
|
*
|
||||||
|
* @see AllTreatmentController#handleComboBoxPatient
|
||||||
|
* @see AllTreatmentController#handleNewTreatment
|
||||||
|
*/
|
||||||
|
private Patient searchInPatientList(String surname) {
|
||||||
|
for (Patient patient : this.patientList) {
|
||||||
|
if (patient.getSurName().equals(surname)) {
|
||||||
|
return patient;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to get the {@link Nurse} object by its surname.
|
||||||
|
*
|
||||||
|
* @see AllTreatmentController#handleNewTreatment
|
||||||
|
*/
|
||||||
|
private Nurse searchInNurseList(String surname) {
|
||||||
|
for (Nurse nurse : this.nurseList) {
|
||||||
|
if (nurse.getSurName().equals(surname)) {
|
||||||
|
return nurse;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to save the changes to a {@link Treatment}.
|
||||||
|
*/
|
||||||
|
protected void updateTreatment(Treatment treatment) {
|
||||||
|
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
|
||||||
|
try {
|
||||||
|
dao.update(treatment);
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Method to create a new {@link Treatment}.
|
||||||
|
*/
|
||||||
|
public void createTreatment(Treatment treatment) {
|
||||||
|
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
|
||||||
|
try {
|
||||||
|
dao.create(treatment);
|
||||||
|
} catch (SQLException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void handleComboBoxPatient() {
|
public void handleComboBoxPatient() {
|
||||||
|
@ -154,23 +222,41 @@ public class AllTreatmentController {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Patient searchInPatientList(String surname) {
|
/**
|
||||||
for (Patient patient : this.patientList) {
|
* Internal method to create a {@link TreatmentModalController TreatmentModal}.
|
||||||
if (patient.getSurName().equals(surname)) {
|
*
|
||||||
return patient;
|
* @param treatment The {@link Treatment} which should be edited. Set null to create a new one.
|
||||||
}
|
* @param title The Title of the created modal.
|
||||||
}
|
* @param patient The {@link Patient} whose {@link Treatment} this is.
|
||||||
return null;
|
* @param nurse The {@link Nurse} who did the {@link Treatment}.
|
||||||
}
|
*/
|
||||||
|
public void treatmentWindow(Treatment treatment, String title, Patient patient, Nurse nurse) {
|
||||||
|
try {
|
||||||
|
FXMLLoader loader = new FXMLLoader(
|
||||||
|
Main.class.getResource("/de/hitec/nhplus/treatment/TreatmentModal.fxml")
|
||||||
|
);
|
||||||
|
BorderPane pane = loader.load();
|
||||||
|
Scene scene = new Scene(pane);
|
||||||
|
Stage stage = new Stage();
|
||||||
|
|
||||||
private Nurse searchInNurseList(String surname) {
|
TreatmentModalController controller = loader.getController();
|
||||||
for (Nurse nurse : this.nurseList) {
|
controller.initialize(
|
||||||
if (nurse.getSurName().equals(surname)) {
|
this,
|
||||||
return nurse;
|
stage,
|
||||||
|
treatment,
|
||||||
|
patient,
|
||||||
|
nurse
|
||||||
|
);
|
||||||
|
|
||||||
|
stage.setScene(scene);
|
||||||
|
stage.setTitle(title);
|
||||||
|
stage.setResizable(true);
|
||||||
|
stage.setAlwaysOnTop(true);
|
||||||
|
stage.showAndWait();
|
||||||
|
} catch (IOException exception) {
|
||||||
|
exception.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void handleDelete() {
|
public void handleDelete() {
|
||||||
|
@ -210,94 +296,24 @@ public class AllTreatmentController {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
newTreatmentWindow(patient, nurse);
|
treatmentWindow(null, "NHPlus - Neue Behandlung", patient, nurse);
|
||||||
}
|
}
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
public void handleMouseClick() {
|
public void handleMouseClick() {
|
||||||
tableView.setOnMouseClicked(event ->
|
tableView.setOnMouseClicked(event ->
|
||||||
{
|
{
|
||||||
if (event.getClickCount() != 2 || (tableView.getSelectionModel().getSelectedItem() == null)) {
|
if (event.getClickCount() == 2 && (tableView.getSelectionModel().getSelectedItem() != null)) {
|
||||||
return;
|
|
||||||
}
|
|
||||||
int index = this.tableView.getSelectionModel().getSelectedIndex();
|
int index = this.tableView.getSelectionModel().getSelectedIndex();
|
||||||
Treatment treatment = this.treatments.get(index);
|
Treatment treatment = this.treatments.get(index);
|
||||||
treatmentWindow(treatment, treatment.getNurse());
|
treatmentWindow(
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public void newTreatmentWindow(Patient patient, Nurse nurse) {
|
|
||||||
try {
|
|
||||||
FXMLLoader loader = new FXMLLoader(
|
|
||||||
Main.class.getResource("/de/hitec/nhplus/treatment/TreatmentModal.fxml")
|
|
||||||
);
|
|
||||||
BorderPane pane = loader.load();
|
|
||||||
Scene scene = new Scene(pane);
|
|
||||||
Stage stage = new Stage();
|
|
||||||
|
|
||||||
TreatmentModalController controller = loader.getController();
|
|
||||||
controller.initialize(
|
|
||||||
this,
|
|
||||||
stage,
|
|
||||||
null,
|
|
||||||
patient,
|
|
||||||
nurse
|
|
||||||
);
|
|
||||||
|
|
||||||
stage.setScene(scene);
|
|
||||||
stage.setTitle("NHPlus - Neue Behandlung");
|
|
||||||
stage.setResizable(true);
|
|
||||||
stage.setAlwaysOnTop(true);
|
|
||||||
stage.showAndWait();
|
|
||||||
} catch (IOException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void treatmentWindow(Treatment treatment, Nurse nurse) {
|
|
||||||
try {
|
|
||||||
FXMLLoader loader = new FXMLLoader(
|
|
||||||
Main.class.getResource("/de/hitec/nhplus/treatment/TreatmentModal.fxml")
|
|
||||||
);
|
|
||||||
BorderPane pane = loader.load();
|
|
||||||
Scene scene = new Scene(pane);
|
|
||||||
Stage stage = new Stage();
|
|
||||||
|
|
||||||
TreatmentModalController controller = loader.getController();
|
|
||||||
PatientDao pDao = DaoFactory.getInstance().createPatientDAO();
|
|
||||||
controller.initialize(
|
|
||||||
this,
|
|
||||||
stage,
|
|
||||||
treatment,
|
treatment,
|
||||||
pDao.read(treatment.getPatient().getId()),
|
"NHPlus - Behandlung",
|
||||||
nurse
|
treatment.getPatient(),
|
||||||
|
treatment.getNurse()
|
||||||
);
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
stage.setScene(scene);
|
|
||||||
stage.setTitle("NHPlus - Behandlung");
|
|
||||||
stage.setResizable(true);
|
|
||||||
stage.setAlwaysOnTop(true);
|
|
||||||
stage.showAndWait();
|
|
||||||
} catch (IOException | SQLException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createTreatment(Treatment treatment) {
|
|
||||||
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
|
|
||||||
try {
|
|
||||||
dao.create(treatment);
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void updateTreatment(Treatment treatment) {
|
|
||||||
TreatmentDao dao = DaoFactory.getInstance().createTreatmentDao();
|
|
||||||
try {
|
|
||||||
dao.update(treatment);
|
|
||||||
} catch (SQLException exception) {
|
|
||||||
exception.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,12 @@ import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The model for a {@link Treatment}.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class Treatment {
|
public class Treatment {
|
||||||
private SimpleIntegerProperty id;
|
private SimpleIntegerProperty id;
|
||||||
private final SimpleObjectProperty<Patient> patient;
|
private final SimpleObjectProperty<Patient> patient;
|
||||||
|
@ -21,8 +27,22 @@ public class Treatment {
|
||||||
private final SimpleStringProperty description;
|
private final SimpleStringProperty description;
|
||||||
private final SimpleStringProperty remarks;
|
private final SimpleStringProperty remarks;
|
||||||
|
|
||||||
public Treatment(Patient patient, Nurse nurse, LocalDate date, LocalTime begin,
|
/**
|
||||||
LocalTime end, String description, String remarks) {
|
* This constructor allows instantiating a {@link Treatment} object,
|
||||||
|
* before it is stored in the database, by omitting the {@link Treatment#id ID} value.
|
||||||
|
*
|
||||||
|
* @implSpec Instances created with this constructor can be directly passed to
|
||||||
|
* {@link de.hitec.nhplus.treatment.database.TreatmentDao#create TreatmentDao.create}.
|
||||||
|
*/
|
||||||
|
public Treatment(
|
||||||
|
Patient patient,
|
||||||
|
Nurse nurse,
|
||||||
|
LocalDate date,
|
||||||
|
LocalTime begin,
|
||||||
|
LocalTime end,
|
||||||
|
String description,
|
||||||
|
String remarks
|
||||||
|
) {
|
||||||
this.patient = new SimpleObjectProperty<>(patient);
|
this.patient = new SimpleObjectProperty<>(patient);
|
||||||
this.nurse = new SimpleObjectProperty<>(nurse);
|
this.nurse = new SimpleObjectProperty<>(nurse);
|
||||||
this.date = new SimpleObjectProperty<>(date);
|
this.date = new SimpleObjectProperty<>(date);
|
||||||
|
@ -32,8 +52,19 @@ public class Treatment {
|
||||||
this.remarks = new SimpleStringProperty(remarks);
|
this.remarks = new SimpleStringProperty(remarks);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Treatment(int id, Patient patient, Nurse nurse, LocalDate date, LocalTime begin,
|
/**
|
||||||
LocalTime end, String description, String remarks) {
|
* This constructor allows instantiating a {@link Treatment} object with all existing fields.
|
||||||
|
*/
|
||||||
|
public Treatment(
|
||||||
|
int id,
|
||||||
|
Patient patient,
|
||||||
|
Nurse nurse,
|
||||||
|
LocalDate date,
|
||||||
|
LocalTime begin,
|
||||||
|
LocalTime end,
|
||||||
|
String description,
|
||||||
|
String remarks
|
||||||
|
) {
|
||||||
this.id = new SimpleIntegerProperty(id);
|
this.id = new SimpleIntegerProperty(id);
|
||||||
this.patient = new SimpleObjectProperty<>(patient);
|
this.patient = new SimpleObjectProperty<>(patient);
|
||||||
this.nurse = new SimpleObjectProperty<>(nurse);
|
this.nurse = new SimpleObjectProperty<>(nurse);
|
||||||
|
|
|
@ -14,6 +14,11 @@ import java.time.LocalTime;
|
||||||
|
|
||||||
import static de.hitec.nhplus.utils.Validator.*;
|
import static de.hitec.nhplus.utils.Validator.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The controller for creating and editing a specific {@link Treatment}.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class TreatmentModalController {
|
public class TreatmentModalController {
|
||||||
@FXML
|
@FXML
|
||||||
private Label labelNurseName;
|
private Label labelNurseName;
|
||||||
|
@ -40,6 +45,9 @@ public class TreatmentModalController {
|
||||||
private Treatment treatment;
|
private Treatment treatment;
|
||||||
private boolean isNewTreatment = false;
|
private boolean isNewTreatment = false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Initialization method that is called after the binding of all the fields.
|
||||||
|
*/
|
||||||
public void initialize(
|
public void initialize(
|
||||||
AllTreatmentController controller,
|
AllTreatmentController controller,
|
||||||
Stage stage,
|
Stage stage,
|
||||||
|
@ -109,6 +117,9 @@ public class TreatmentModalController {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Internal method to show the data in the view.
|
||||||
|
*/
|
||||||
private void showData() {
|
private void showData() {
|
||||||
this.labelNurseName.setText(nurse.getSurName());
|
this.labelNurseName.setText(nurse.getSurName());
|
||||||
this.labelFirstName.setText(patient.getFirstName());
|
this.labelFirstName.setText(patient.getFirstName());
|
||||||
|
@ -149,8 +160,4 @@ public class TreatmentModalController {
|
||||||
public void handleCancel() {
|
public void handleCancel() {
|
||||||
stage.close();
|
stage.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Treatment getTreatment() {
|
|
||||||
return treatment;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package de.hitec.nhplus.treatment.database;
|
||||||
|
|
||||||
import de.hitec.nhplus.datastorage.DaoFactory;
|
import de.hitec.nhplus.datastorage.DaoFactory;
|
||||||
import de.hitec.nhplus.datastorage.DaoImp;
|
import de.hitec.nhplus.datastorage.DaoImp;
|
||||||
|
import de.hitec.nhplus.patient.Patient;
|
||||||
import de.hitec.nhplus.nurse.Nurse;
|
import de.hitec.nhplus.nurse.Nurse;
|
||||||
import de.hitec.nhplus.treatment.Treatment;
|
import de.hitec.nhplus.treatment.Treatment;
|
||||||
import de.hitec.nhplus.utils.DateConverter;
|
import de.hitec.nhplus.utils.DateConverter;
|
||||||
|
@ -13,6 +14,13 @@ import java.sql.SQLException;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The {@link TreatmentDao} is an implementation of the {@link de.hitec.nhplus.datastorage.Dao Dao}
|
||||||
|
* for the {@link Treatment} model.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemannn
|
||||||
|
* @author Dominik Säume
|
||||||
|
*/
|
||||||
public class TreatmentDao extends DaoImp<Treatment> {
|
public class TreatmentDao extends DaoImp<Treatment> {
|
||||||
|
|
||||||
public TreatmentDao(Connection connection) {
|
public TreatmentDao(Connection connection) {
|
||||||
|
@ -74,6 +82,13 @@ public class TreatmentDao extends DaoImp<Treatment> {
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a list of {@link Treatment}s associated with a specific
|
||||||
|
* {@link Patient#id patient ID} from the database.
|
||||||
|
*
|
||||||
|
* @param patientId The {@link Patient#id ID} of the {@link Patient} whose {@link Treatment}s are to be retrieved.
|
||||||
|
* @return A {@link List} of {@link Treatment} objects associated with the specified {@link Patient} ID.
|
||||||
|
*/
|
||||||
public List<Treatment> readTreatmentsByPatient(int patientId) throws SQLException {
|
public List<Treatment> readTreatmentsByPatient(int patientId) throws SQLException {
|
||||||
final String SQL = "SELECT * FROM treatment WHERE patientId = ?";
|
final String SQL = "SELECT * FROM treatment WHERE patientId = ?";
|
||||||
PreparedStatement statement = this.connection.prepareStatement(SQL);
|
PreparedStatement statement = this.connection.prepareStatement(SQL);
|
||||||
|
@ -82,6 +97,13 @@ public class TreatmentDao extends DaoImp<Treatment> {
|
||||||
return getListFromResultSet(result);
|
return getListFromResultSet(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieves a list of {@link Treatment}s associated with a specific
|
||||||
|
* {@link Nurse#id patient ID} from the database.
|
||||||
|
*
|
||||||
|
* @param nurseId The {@link Nurse#id ID} of the {@link Nurse} whose {@link Treatment}s are to be retrieved.
|
||||||
|
* @return A {@link List} of {@link Treatment} objects associated with the specified {@link Nurse} ID.
|
||||||
|
*/
|
||||||
public List<Treatment> readTreatmentsByNurse(int nurseId) throws SQLException {
|
public List<Treatment> readTreatmentsByNurse(int nurseId) throws SQLException {
|
||||||
final String SQL = "SELECT * FROM treatment WHERE nurseId = ?";
|
final String SQL = "SELECT * FROM treatment WHERE nurseId = ?";
|
||||||
PreparedStatement statement = this.connection.prepareStatement(SQL);
|
PreparedStatement statement = this.connection.prepareStatement(SQL);
|
||||||
|
|
|
@ -4,23 +4,44 @@ import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A utility class that holds utility methods for date conversion.
|
||||||
|
*
|
||||||
|
* @author Bernd Heidemann
|
||||||
|
*/
|
||||||
public class DateConverter {
|
public class DateConverter {
|
||||||
|
|
||||||
private static final String DATE_FORMAT = "yyyy-MM-dd";
|
private static final String DATE_FORMAT = "yyyy-MM-dd";
|
||||||
private static final String TIME_FORMAT = "HH:mm";
|
private static final String TIME_FORMAT = "HH:mm";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param date A date {@link String} in the format: yyyy-MM-dd.
|
||||||
|
* @return The converted date {@link String} as {@link LocalDate}.
|
||||||
|
*/
|
||||||
public static LocalDate convertStringToLocalDate(String date) {
|
public static LocalDate convertStringToLocalDate(String date) {
|
||||||
return LocalDate.parse(date, DateTimeFormatter.ofPattern(DATE_FORMAT));
|
return LocalDate.parse(date, DateTimeFormatter.ofPattern(DATE_FORMAT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param time A time {@link String} in the format: HH:mm.
|
||||||
|
* @return The converted time {@link String} as {@link LocalTime}.
|
||||||
|
*/
|
||||||
public static LocalTime convertStringToLocalTime(String time) {
|
public static LocalTime convertStringToLocalTime(String time) {
|
||||||
return LocalTime.parse(time, DateTimeFormatter.ofPattern(TIME_FORMAT));
|
return LocalTime.parse(time, DateTimeFormatter.ofPattern(TIME_FORMAT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param date A {@link LocalDate} which should be converted to a {@link String}.
|
||||||
|
* @return The converted {@link LocalDate} in the format: yyy-MM-dd.
|
||||||
|
*/
|
||||||
public static String convertLocalDateToString(LocalDate date) {
|
public static String convertLocalDateToString(LocalDate date) {
|
||||||
return date.format(DateTimeFormatter.ofPattern(DATE_FORMAT));
|
return date.format(DateTimeFormatter.ofPattern(DATE_FORMAT));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param time A {@link LocalTime} which should be converted to a {@link String}.
|
||||||
|
* @return The converted {@link LocalTime} in the format: HH:mm.
|
||||||
|
*/
|
||||||
public static String convertLocalTimeToString(LocalTime time) {
|
public static String convertLocalTimeToString(LocalTime time) {
|
||||||
return time.format(DateTimeFormatter.ofPattern(TIME_FORMAT));
|
return time.format(DateTimeFormatter.ofPattern(TIME_FORMAT));
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,8 +5,19 @@ import javafx.scene.control.Alert;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalTime;
|
import java.time.LocalTime;
|
||||||
|
|
||||||
public class Validator
|
/**
|
||||||
{
|
* A utility class for validating all kinds of data.
|
||||||
|
*
|
||||||
|
* @author Dominik Säume
|
||||||
|
* @author Ole Kück
|
||||||
|
*/
|
||||||
|
public class Validator {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Shows a modal with a specific validation error.
|
||||||
|
*
|
||||||
|
* @param type The type for which a validation error should be shown as {@link String}.
|
||||||
|
*/
|
||||||
public static void showValidationError(String type) {
|
public static void showValidationError(String type) {
|
||||||
Alert alert = new Alert(Alert.AlertType.ERROR);
|
Alert alert = new Alert(Alert.AlertType.ERROR);
|
||||||
alert.setTitle("Error");
|
alert.setTitle("Error");
|
||||||
|
@ -14,6 +25,12 @@ public class Validator
|
||||||
alert.setContentText("Invalid " + type + " !");
|
alert.setContentText("Invalid " + type + " !");
|
||||||
alert.showAndWait();
|
alert.showAndWait();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid date.
|
||||||
|
*
|
||||||
|
* @param text The date {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidDate(String text) {
|
public static boolean isValidDate(String text) {
|
||||||
if (text.isBlank()) {
|
if (text.isBlank()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -25,6 +42,12 @@ public class Validator
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link LocalDate} is a valid date for storage in the database.
|
||||||
|
*
|
||||||
|
* @param date The {@link LocalDate} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidDate(LocalDate date) {
|
public static boolean isValidDate(LocalDate date) {
|
||||||
if (date == null) {
|
if (date == null) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -36,6 +59,12 @@ public class Validator
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid time.
|
||||||
|
*
|
||||||
|
* @param text The time {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidTime(String text) {
|
public static boolean isValidTime(String text) {
|
||||||
if (text.isBlank()) {
|
if (text.isBlank()) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -47,6 +76,13 @@ public class Validator
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that two time {@link String}s are a valid time range.
|
||||||
|
*
|
||||||
|
* @param start The starting time {@link String}.
|
||||||
|
* @param end The ending time {@link String}.
|
||||||
|
*/
|
||||||
public static boolean isValidTimeRange(String start, String end) {
|
public static boolean isValidTimeRange(String start, String end) {
|
||||||
if (
|
if (
|
||||||
!isValidTime(start) || !isValidTime(end)
|
!isValidTime(start) || !isValidTime(end)
|
||||||
|
@ -59,24 +95,57 @@ public class Validator
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid description.
|
||||||
|
*
|
||||||
|
* @param text The {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidDescription(String text) {
|
public static boolean isValidDescription(String text) {
|
||||||
return !text.isBlank();
|
return !text.isBlank();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid first name.
|
||||||
|
*
|
||||||
|
* @param text The {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidFirstName(String text) {
|
public static boolean isValidFirstName(String text) {
|
||||||
return !text.isBlank();
|
return !text.isBlank();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid surname.
|
||||||
|
*
|
||||||
|
* @param text The {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidSurName(String text) {
|
public static boolean isValidSurName(String text) {
|
||||||
return !text.isBlank();
|
return !text.isBlank();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid phone number.
|
||||||
|
*
|
||||||
|
* @param text The {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidPhoneNumber(String text) {
|
public static boolean isValidPhoneNumber(String text) {
|
||||||
return !text.isBlank();
|
return !text.isBlank();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid care level.
|
||||||
|
*
|
||||||
|
* @param text The {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidCareLevel(String text) {
|
public static boolean isValidCareLevel(String text) {
|
||||||
return !text.isBlank();
|
return !text.isBlank();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Validate that a {@link String} is a valid room number.
|
||||||
|
*
|
||||||
|
* @param text The {@link String} to validate.
|
||||||
|
*/
|
||||||
public static boolean isValidRoomNumber(String text) {
|
public static boolean isValidRoomNumber(String text) {
|
||||||
return !text.isBlank();
|
return !text.isBlank();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue