From 42ce1500d601de3b620e83b9f2c5cf002263e3b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20S=C3=A4ume?= Date: Tue, 21 May 2024 18:51:17 +0200 Subject: [PATCH] #8: Implement User Permissions System Base and usage with Tabs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Dominik Säume --- db/nursingHome.db | Bin 57344 -> 57344 bytes src/main/java/de/hitec/nhplus/Main.java | 12 +- .../de/hitec/nhplus/fixtures/Fixtures.java | 2 +- .../hitec/nhplus/fixtures/NurseFixture.java | 6 + .../de/hitec/nhplus/fixtures/UserFixture.java | 36 +++- .../hitec/nhplus/login/LoginController.java | 1 - .../de/hitec/nhplus/login/Permissions.java | 8 + src/main/java/de/hitec/nhplus/login/User.java | 37 ++-- .../hitec/nhplus/login/database/UserDao.java | 10 +- .../nhplus/main/MainWindowController.java | 195 +++++------------- .../de/hitec/nhplus/utils/tab/TabManager.java | 82 ++++++++ .../de/hitec/nhplus/utils/tab/TabStruct.java | 13 ++ .../de/hitec/nhplus/main/MainWindowView.fxml | 23 +-- 13 files changed, 221 insertions(+), 204 deletions(-) create mode 100644 src/main/java/de/hitec/nhplus/login/Permissions.java create mode 100644 src/main/java/de/hitec/nhplus/utils/tab/TabManager.java create mode 100644 src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java diff --git a/db/nursingHome.db b/db/nursingHome.db index 87428bb3d43c31c3f5bde0589499552b4549ff9d..a9425efc94456bbfae2730033cadf4cb9ee29098 100644 GIT binary patch delta 1265 zcmYjR4^R|U7~gmMZuj<%yLZ=d-4G%i6r2vo&2S}(D9i$SCS;HY09dHM89H3Yp zwdPDhG(kghGex4={CuNSG8L+S>!icJ_Pwd*AoH-}n38 zd$VQzWLZC1`N%_}S%M&B*w!8}R~7oW7JD~Yo21lBgcME^GAEpr_DU{`tn?YGgMM9n zg)%T-Q31j~KCG%E#Vp|v(P}(;b53b6#2^5JP##3z_w2#o3G88Go1IcXMzY&D3B4JL zBiXGOXt^9(DyLcq#-k#EeVS6Ig>#5r&z%IzU2X;T%0%zK-P;* za;*rx0CbeHiCihY1j~)A&NU#J!md2_Db5?sa8B7S6(H5VzMwqaW}x;{9=(pdH(lOn zRxWQOgs3QW*`<#4q(87(jRu?9Xt9YIhaag1mLhAR5lS5ENMBHZ zHQ@+_h6$tsd_$0jB1ZtZHWfn(ViS0b5?gQ&=sLkLe6E0>StvQbc@(h79R8#RJZR8$ zI~>VLh&UG=Ux}1zU!~}IgVki%KG2nyXS7B|MRDg+b~nQec{5CvdqJ6=Ks87!>yhbQ zngE^5o&zaDmF)1c84GQG$>J{WlwB=9J^HKltu|X%pCn}dx80q0qxX%3MU02hrS{0| zn&GWO!7=5E!0AGg>1#)ZF9UgWbc?T(XYgvqwO~Hpk%1b{!h4a zTi-Jy?hoQdIw@u9jf~H_Ze46yYCEi=k2ghCznJ^;;Ko27O{f0zlC-uR)pH#sJ$E&3 zpV9L7g7qiU>kl=)RubBN61o@@pa>K9c3n)^_U~T+TfR+jT@;`?En-tF(Ox5e5ittcj*Sa+-3>B+XxHt(I$mc^eO`s+8 zH@bnQ@zOE0QHWyz-V>7eLkge(X9^%7830#Ry9sm$EucB%b}1^aq5vVE4*8KJ`B5Ms fNrvIM0a_%`qD#?#6Dfp%4|yn7)qC9ZsuIC}?)IH_ delta 823 zcmYjPYe*DP6rMYG=g!QoyLUESHr#6Uhn8WbracMlN0hIMv_cDV$thgjN3*kQ4{F^c zgAh?>Q|m`-ZGk9?><|%x8WFjL(Zj6hVK0N;7AR>2&1ixb4u|u7=kamQt?q}_{jec^ zo+gtZ2!mp??{#Bp#u5cxE?m?b{t|j>iZFEO+ptmBuXVBKm}{(?u3|)Liq584Ih_+J zcrxaQJix{PGV7T1naYH0)=|YTk@Aop298!qPqkBM<6&gpxkCC*Es|=H6$Vy$r3ktP zd{PCStkDJvMJYtD0!SLBF946^V-f%@H#5rstlW5@3)EN zE_Mqv1E*K;@KCoIT7X*td8deQFTt{24=;%N9B2iiz}rNJLTDi#`OhG&Q)$5DK@(6D zNi}jJj#YHfN=rlT+&NB!kQR}GNB+Bl<{-rFGM(LkV@(zlTf}?B?FTCPgS?QoCL>E~ z-&PXVlyYIsc8(!&3W3k!6ge?rA@1CO8G+;hu&reH#lqxY7|=1J@AeLY(HmFSB{n}#oa|LHg#mmE5MH({`FudgOG zY^fMp+p-}$ZPLH^amrO}zwxE#)v5T}wsL@oSY?*C%=KfdJ=C4#@%v3xx;pB~I+*+G zML6|aPUyh#50UiFmuuHYoxg%_M~nm4izDxj+g2vt^A)*+yE4C;zP8u&)Ve?KI8m%` z3PpmWdp { diff --git a/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java b/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java index 0ea398b..5897378 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java +++ b/src/main/java/de/hitec/nhplus/fixtures/Fixtures.java @@ -46,7 +46,7 @@ public class Fixtures { medicationFixture.setupTable(connection); medicationFixture.load(); - UserFixture userFixture = new UserFixture(); + UserFixture userFixture = new UserFixture(nursesByName); userFixture.dropTable(connection); userFixture.setupTable(connection); userFixture.load(); diff --git a/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java b/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java index c5d0c0f..3da00ed 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java +++ b/src/main/java/de/hitec/nhplus/fixtures/NurseFixture.java @@ -54,6 +54,12 @@ public class NurseFixture implements Fixture { true )); + nurses.add(new Nurse( + "Maria", + "Höller", + "666" + )); + NurseDao dao = DaoFactory.getInstance().createNurseDAO(); for (Nurse nurse : nurses) { dao.create(nurse); diff --git a/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java b/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java index 2fff14f..7b3550f 100644 --- a/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java +++ b/src/main/java/de/hitec/nhplus/fixtures/UserFixture.java @@ -2,9 +2,10 @@ package de.hitec.nhplus.fixtures; import de.hitec.nhplus.Main; import de.hitec.nhplus.datastorage.DaoFactory; +import de.hitec.nhplus.login.Permissions; import de.hitec.nhplus.login.User; import de.hitec.nhplus.login.database.UserDao; -import de.hitec.nhplus.medication.Medication; +import de.hitec.nhplus.nurse.Nurse; import java.io.InputStream; import java.nio.charset.StandardCharsets; @@ -16,6 +17,13 @@ public class UserFixture implements Fixture{ private static final String SCHEMA = "/de/hitec/nhplus/login/database/User.sql"; private static final String PERMISSION_SCHEMA = "/de/hitec/nhplus/login/database/UserPermission.sql"; private static final String TO_NURSE_SCHEMA = "/de/hitec/nhplus/login/database/UserToNurse.sql"; + + private final Map nursesByName; + + public UserFixture(Map nursesByName) { + this.nursesByName = nursesByName; + } + @Override public void dropTable(Connection connection) throws SQLException { connection.createStatement().execute("DROP TABLE IF EXISTS user"); @@ -54,9 +62,7 @@ public class UserFixture implements Fixture{ User udo = new User( "udo", - null, - null, - Integer.parseInt("00000001", 2), + Permissions.OWNER, null ); udo.setPassword("uD0_187!"); @@ -64,14 +70,28 @@ public class UserFixture implements Fixture{ User maria = new User( "maria", - null, - null, - 0, - null + Permissions.NURSE, + nursesByName.get("Maria") ); maria.setPassword("H!mm3lf4hrt"); users.add(maria); + User werner = new User( + "werner", + Permissions.MANAGEMENT, + null + ); + werner.setPassword("TurboSchraube42!"); + users.add(werner); + + User fullPermissionsTestUser = new User( + "test", + -1, + null + ); + fullPermissionsTestUser.setPassword(""); + users.add(fullPermissionsTestUser); + UserDao dao = DaoFactory.getInstance().createUserDAO(); Map usersByUsername = new HashMap<>(); for (User user : users){ diff --git a/src/main/java/de/hitec/nhplus/login/LoginController.java b/src/main/java/de/hitec/nhplus/login/LoginController.java index dca1cd7..bec7101 100644 --- a/src/main/java/de/hitec/nhplus/login/LoginController.java +++ b/src/main/java/de/hitec/nhplus/login/LoginController.java @@ -88,6 +88,5 @@ public class LoginController { } catch (SQLException | NoSuchAlgorithmException exception) { exception.printStackTrace(); } - } } diff --git a/src/main/java/de/hitec/nhplus/login/Permissions.java b/src/main/java/de/hitec/nhplus/login/Permissions.java new file mode 100644 index 0000000..8420986 --- /dev/null +++ b/src/main/java/de/hitec/nhplus/login/Permissions.java @@ -0,0 +1,8 @@ +package de.hitec.nhplus.login; + +public class Permissions { + public final static int EVERYBODY = 0b0; + public final static int NURSE = 0b1; + public final static int MANAGEMENT = 0b10; + public final static int OWNER = 0b100; +} diff --git a/src/main/java/de/hitec/nhplus/login/User.java b/src/main/java/de/hitec/nhplus/login/User.java index 0621b9d..50e604f 100644 --- a/src/main/java/de/hitec/nhplus/login/User.java +++ b/src/main/java/de/hitec/nhplus/login/User.java @@ -9,6 +9,7 @@ import java.security.SecureRandom; public class User { + private int id; private String username; private byte[] passwordSalt; @@ -34,30 +35,13 @@ public class User { public User( String username, - byte[] passwordSalt, - byte[] passwordHash, int permissions, Nurse nurse ) { this.username = username; - this.passwordSalt = passwordSalt; - this.passwordHash = passwordHash; this.permissions = permissions; this.nurse = nurse; } - - public int getId() { - return id; - } - - public byte[] getPasswordSalt() { - return passwordSalt; - } - - public byte[] getPasswordHash() { - return passwordHash; - } - public void setPassword(String password) { try { SecureRandom random = new SecureRandom(); @@ -72,6 +56,25 @@ public class User { } } + public boolean hasNursePermissions(){ + return (permissions & Permissions.NURSE) != 0; + } + public boolean hasAdminPermissions(){ + return (permissions & Permissions.MANAGEMENT) != 0; + } + + public int getId() { + return id; + } + + public byte[] getPasswordSalt() { + return passwordSalt; + } + + public byte[] getPasswordHash() { + return passwordHash; + } + public String getUsername() { return username; } diff --git a/src/main/java/de/hitec/nhplus/login/database/UserDao.java b/src/main/java/de/hitec/nhplus/login/database/UserDao.java index 8807ca1..915ec08 100644 --- a/src/main/java/de/hitec/nhplus/login/database/UserDao.java +++ b/src/main/java/de/hitec/nhplus/login/database/UserDao.java @@ -86,7 +86,7 @@ public class UserDao implements Dao { statement.setBytes(3, user.getPasswordHash()); statement.execute(); - ResultSet generatedKeys = connection.createStatement().executeQuery("SELECT id FROM user"); + ResultSet generatedKeys = connection.createStatement().executeQuery("SELECT last_insert_rowid()"); connection.commit(); //Finish SQL Transaction connection.setAutoCommit(true); //Switch back Mode @@ -112,13 +112,11 @@ public class UserDao implements Dao { INSERT INTO user__nurse (userId, nurseId) VALUES (?, ?); - - """; PreparedStatement nurseStatement = this.connection.prepareStatement(nurseSQL); - permissionStatement.setInt(1, newId); - permissionStatement.setInt(2, user.getNurse().getId()); - permissionStatement.execute(); + nurseStatement.setInt(1, newId); + nurseStatement.setInt(2, user.getNurse().getId()); + nurseStatement.execute(); } @Override diff --git a/src/main/java/de/hitec/nhplus/main/MainWindowController.java b/src/main/java/de/hitec/nhplus/main/MainWindowController.java index 293ba41..9d0e857 100644 --- a/src/main/java/de/hitec/nhplus/main/MainWindowController.java +++ b/src/main/java/de/hitec/nhplus/main/MainWindowController.java @@ -1,17 +1,15 @@ package de.hitec.nhplus.main; -import de.hitec.nhplus.Main; -import de.hitec.nhplus.nurse.Nurse; +import de.hitec.nhplus.login.Permissions; +import de.hitec.nhplus.login.User; +import de.hitec.nhplus.utils.tab.TabManager; +import de.hitec.nhplus.utils.tab.TabStruct; +import javafx.event.Event; import javafx.fxml.FXML; -import javafx.fxml.FXMLLoader; -import javafx.scene.control.SelectionModel; import javafx.scene.control.Tab; import javafx.scene.control.TabPane; -import javafx.scene.layout.AnchorPane; -import javafx.scene.layout.BorderPane; -import java.io.IOException; -import java.util.Objects; +import java.util.List; /** * Controller for the main window of the application, which holds all tabs. @@ -23,153 +21,58 @@ import java.util.Objects; */ public class MainWindowController { @FXML - private TabPane mainTabPane; - @FXML - private AnchorPane patientPage; - @FXML - private Tab patientTab; - @FXML - private AnchorPane treatmentPage; - @FXML - private Tab treatmentTab; - @FXML - private Tab nurseTab; - @FXML - private TabPane nurseTabPane; - @FXML - private AnchorPane activeNursePage; - @FXML - private Tab activeNurseTab; - @FXML - private AnchorPane lockedNursePage; - @FXML - private Tab lockedNurseTab; - @FXML - private AnchorPane medicationPage; - @FXML - private Tab medicationTab; + public TabPane mainTabPane; + + private User user; + private TabManager tabManager; /** - * Initialization method that is called after the binding of all the fields. + * JavaFX Initialization method that is called after the binding of all the fields. + * + * @param user The logged in {@link User}. */ @FXML - public void initialize() { - loadPatientPage(); - mainTabPane.getSelectionModel().select(patientTab); - - patientTab.setOnSelectionChanged(event -> loadPatientPage()); - treatmentTab.setOnSelectionChanged(event -> loadTreatmentsPage()); - nurseTab.setOnSelectionChanged(event -> loadNursePage()); - medicationTab.setOnSelectionChanged(event -> loadMedicationPage()); - - - nurseTabPane.getSelectionModel().select(activeNurseTab); - - activeNurseTab.setOnSelectionChanged(event -> loadActiveNursePage()); - lockedNurseTab.setOnSelectionChanged(event -> loadLockedNursePage()); + public void initialize(User user) { + this.user = user; + this.tabManager = new TabManager(user); + setupTabs(); } /** - * Loads the patient page into its tab. + * Sets up all Tabs Accessible, with help of the {@link TabManager}. */ - private void loadPatientPage() { - try { - BorderPane patientsPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/patient/AllPatientView.fxml")) - ); - patientPage.getChildren().setAll(patientsPane); - AnchorPane.setTopAnchor(patientsPane, 0d); - AnchorPane.setBottomAnchor(patientsPane, 0d); - AnchorPane.setLeftAnchor(patientsPane, 0d); - AnchorPane.setRightAnchor(patientsPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } + private void setupTabs() { + tabManager.setupTab(mainTabPane, new TabStruct( + "Patienten", + "/de/hitec/nhplus/patient/AllPatientView.fxml", + Permissions.NURSE + )); + tabManager.setupTab(mainTabPane, new TabStruct( + "Behandlungen", + "/de/hitec/nhplus/treatment/AllTreatmentView.fxml", + Permissions.NURSE + )); + tabManager.setupSubTabPane(mainTabPane, "Pfleger", Permissions.EVERYBODY, List.of( + new TabStruct( + "Pfleger", + "/de/hitec/nhplus/nurse/AllNurseView.fxml", + Permissions.NURSE | Permissions.MANAGEMENT + ), + new TabStruct( + "Gesperrte Pfleger", + "/de/hitec/nhplus/nurse/LockedNurseView.fxml", + Permissions.MANAGEMENT | Permissions.OWNER + ) + )); + tabManager.setupTab(mainTabPane, new TabStruct( + "Medikamente", + "/de/hitec/nhplus/medication/AllMedicationView.fxml", + Permissions.MANAGEMENT + )); - /** - * Loads the {@link } page into its tab. - */ - private void loadTreatmentsPage() { - try { - BorderPane treatmentsPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/treatment/AllTreatmentView.fxml")) - ); - treatmentPage.getChildren().setAll(treatmentsPane); - AnchorPane.setTopAnchor(treatmentsPane, 0d); - AnchorPane.setBottomAnchor(treatmentsPane, 0d); - AnchorPane.setLeftAnchor(treatmentsPane, 0d); - AnchorPane.setRightAnchor(treatmentsPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - /** - * Loads the nurse page into its tab. - */ - private void loadNursePage() { - SelectionModel selectionModel = nurseTabPane.getSelectionModel(); - Tab selectedTab = selectionModel.getSelectedItem(); - if(selectedTab == activeNurseTab){ - loadActiveNursePage(); - } - if(selectedTab == lockedNurseTab){ - loadLockedNursePage(); - } - } - - /** - * Loads the active {@link Nurse} page into its tab. - */ - private void loadActiveNursePage() { - try { - BorderPane activeNursePane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/nurse/AllNurseView.fxml")) - ); - activeNursePage.getChildren().setAll(activeNursePane); - AnchorPane.setTopAnchor(activeNursePane, 0d); - AnchorPane.setBottomAnchor(activeNursePane, 0d); - AnchorPane.setLeftAnchor(activeNursePane, 0d); - AnchorPane.setRightAnchor(activeNursePane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - /** - * Loads the locked {@link Nurse} page into its tab. - */ - private void loadLockedNursePage() { - try { - BorderPane lockedNursePane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/nurse/LockedNurseView.fxml")) - ); - lockedNursePage.getChildren().setAll(lockedNursePane); - AnchorPane.setTopAnchor(lockedNursePane, 0d); - AnchorPane.setBottomAnchor(lockedNursePane, 0d); - AnchorPane.setLeftAnchor(lockedNursePane, 0d); - AnchorPane.setRightAnchor(lockedNursePane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } - } - - /** - * Loads the medication page into its tab. - */ - private void loadMedicationPage() { - try { - BorderPane medicationPane = FXMLLoader.load( - Objects.requireNonNull(Main.class.getResource("/de/hitec/nhplus/medication/AllMedicationView.fxml")) - ); - medicationPage.getChildren().setAll(medicationPane); - AnchorPane.setTopAnchor(medicationPane, 0d); - AnchorPane.setBottomAnchor(medicationPane, 0d); - AnchorPane.setLeftAnchor(medicationPane, 0d); - AnchorPane.setRightAnchor(medicationPane, 0d); - } catch (IOException exception) { - exception.printStackTrace(); - } + Tab defaultTab = mainTabPane.getTabs().get(0); + mainTabPane.getSelectionModel().select(defaultTab); + defaultTab.getOnSelectionChanged().handle(new Event(Event.ANY)); } } diff --git a/src/main/java/de/hitec/nhplus/utils/tab/TabManager.java b/src/main/java/de/hitec/nhplus/utils/tab/TabManager.java new file mode 100644 index 0000000..16a67ba --- /dev/null +++ b/src/main/java/de/hitec/nhplus/utils/tab/TabManager.java @@ -0,0 +1,82 @@ +package de.hitec.nhplus.utils.tab; + +import de.hitec.nhplus.Main; +import de.hitec.nhplus.login.Permissions; +import de.hitec.nhplus.login.User; +import javafx.event.Event; +import javafx.event.EventHandler; +import javafx.fxml.FXMLLoader; +import javafx.scene.control.Tab; +import javafx.scene.control.TabPane; +import javafx.scene.layout.AnchorPane; +import javafx.scene.layout.BorderPane; + +import java.io.IOException; +import java.util.List; +import java.util.Objects; + +public class TabManager { + private final User user; + + public TabManager(User user) { + this.user = user; + } + + private boolean hasPermissions(int requiredPermissions, int permissions) { + return requiredPermissions == Permissions.EVERYBODY + || (permissions & requiredPermissions) != 0; + } + + public void setupTab(TabPane tabPane, TabStruct tabStruct) { + if (!hasPermissions(tabStruct.requiredPermissions, user.getPermissions())) { + return; + } + Tab tab = new Tab(); + tab.setText(tabStruct.title); + AnchorPane pane = new AnchorPane(); + tab.setContent(pane); + tab.setOnSelectionChanged(loadTabEventHandler(tabStruct, pane)); + tabPane.getTabs().add(tab); + } + + private EventHandler loadTabEventHandler(TabStruct tabStruct, AnchorPane pane) { + return event -> { + try { + BorderPane patientsPane = FXMLLoader.load( + Objects.requireNonNull(Main.class.getResource(tabStruct.view)) + ); + pane.getChildren().setAll(patientsPane); + AnchorPane.setTopAnchor(patientsPane, 0d); + AnchorPane.setBottomAnchor(patientsPane, 0d); + AnchorPane.setLeftAnchor(patientsPane, 0d); + AnchorPane.setRightAnchor(patientsPane, 0d); + } catch (IOException exception) { + exception.printStackTrace(); + } + }; + } + + public void setupSubTabPane(TabPane parentTabPane, String title, int requiredPermissions, List subTabs) { + if (!hasPermissions(requiredPermissions, user.getPermissions())) { + return; + } + Tab tab = new Tab(); + tab.setText(title); + TabPane subTabPane = new TabPane(); + subTabPane.setTabClosingPolicy(TabPane.TabClosingPolicy.UNAVAILABLE); + tab.setContent(subTabPane); + subTabs.forEach(tabStruct -> setupTab(subTabPane, tabStruct)); + if (subTabPane.getTabs().isEmpty()) { + return; + } + tab.setOnSelectionChanged(loadSubTabPaneEventHandler(subTabPane)); + parentTabPane.getTabs().add(tab); + } + + private EventHandler loadSubTabPaneEventHandler(TabPane tabPane) { + return event -> { + Tab tab = tabPane.getSelectionModel().getSelectedItem(); + tab.getOnSelectionChanged().handle(new Event(Event.ANY)); + }; + } +} diff --git a/src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java b/src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java new file mode 100644 index 0000000..9a49919 --- /dev/null +++ b/src/main/java/de/hitec/nhplus/utils/tab/TabStruct.java @@ -0,0 +1,13 @@ +package de.hitec.nhplus.utils.tab; + +public class TabStruct { + public String title; + public String view; + public int requiredPermissions; + + public TabStruct(String title, String view, int requiredPermissions) { + this.title = title; + this.view = view; + this.requiredPermissions = requiredPermissions; + } +} \ No newline at end of file diff --git a/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml b/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml index c5316ea..033a28e 100644 --- a/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml +++ b/src/main/resources/de/hitec/nhplus/main/MainWindowView.fxml @@ -1,31 +1,10 @@ - - - - - - - - - - - - - - - - - - - - - +/> \ No newline at end of file