From cd3c2500039c482677709664f691eb0c4d97fa66 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 24 Mar 2026 14:43:49 +0100 Subject: [PATCH 001/128] Added URLCharityScraper Added a web-scraper that will scrape relevant information for the charity about-us page. Currently supports scraping description String. --- .../team6/scraper/URLCharityScraper.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java new file mode 100644 index 00000000..4120dcca --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -0,0 +1,65 @@ +package ntnu.systemutvikling.team6.scraper; + +import java.time.Duration; +import java.util.List; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +public class URLCharityScraper { + ChromeOptions options; + WebDriver driver; + + public URLCharityScraper() { + this.options = new ChromeOptions(); + options.addArguments("--headless=new"); + options.addArguments("--window-size=1920,1080"); + options.addArguments("--disable-gpu"); + options.addArguments("--no-sandbox"); + options.addArguments("--disable-dev-shm-usage"); + + this.driver = new ChromeDriver(options); + } + + public boolean updateDescription() { + StringBuilder descriptionString = new StringBuilder(); + + try { + // URL for scraping approved organizations + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + wait.until( + ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); + + List description = driver.findElements(By.cssSelector(".information div")); + + for (WebElement element : description) { + descriptionString.append(element.getText()); + } + + // Check for if description is long and contains a "read more" link + List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); + + if (!doesReadMoreExist.isEmpty()) { + WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); + descReadMore.click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + + List extraDescription = driver.findElements(By.cssSelector(".extra-info")); + + for (WebElement webElement : extraDescription) { + descriptionString.append(webElement.getText()); + } + } + + } finally { + driver.quit(); + } + return true; + } +} From 30a5f0e61b0f07d2898996442076a91611ad52c1 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 24 Mar 2026 15:25:26 +0100 Subject: [PATCH 002/128] Updated URLCharityScraper Added method to get the URL of the logo. Converted WebDriverWait object to an object parameter, and initialize it in the constructor. --- .../team6/scraper/URLCharityScraper.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 4120dcca..ba1dda9d 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -13,6 +13,7 @@ public class URLCharityScraper { ChromeOptions options; WebDriver driver; + WebDriverWait wait; public URLCharityScraper() { this.options = new ChromeOptions(); @@ -23,6 +24,8 @@ public URLCharityScraper() { options.addArguments("--disable-dev-shm-usage"); this.driver = new ChromeDriver(options); + + this.wait = new WebDriverWait(driver, Duration.ofSeconds(30)); } public boolean updateDescription() { @@ -32,8 +35,7 @@ public boolean updateDescription() { // URL for scraping approved organizations driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - wait.until( + this.wait.until( ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); List description = driver.findElements(By.cssSelector(".information div")); @@ -48,7 +50,7 @@ public boolean updateDescription() { if (!doesReadMoreExist.isEmpty()) { WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); descReadMore.click(); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); List extraDescription = driver.findElements(By.cssSelector(".extra-info")); @@ -62,4 +64,21 @@ public boolean updateDescription() { } return true; } + + public boolean updateLogo() { + String logoURL = ""; + + try { + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); + + WebElement logo = driver.findElement(By.cssSelector(".logo > img")); + + logoURL = logo.getAttribute("src"); + } finally { + driver.close(); + } + return true; + } } From bc0cc72aac08448c0a8a1e1f9cc00cdf16cac586 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 24 Mar 2026 15:55:30 +0100 Subject: [PATCH 003/128] Updated URLCharityScraper Changed driver and wait initialization to be for each method instead of constructor. Added a method for getting categories from charity URL. --- .../team6/scraper/URLCharityScraper.java | 44 ++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index ba1dda9d..173785d1 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -1,6 +1,7 @@ package ntnu.systemutvikling.team6.scraper; import java.time.Duration; +import java.util.ArrayList; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -12,8 +13,6 @@ public class URLCharityScraper { ChromeOptions options; - WebDriver driver; - WebDriverWait wait; public URLCharityScraper() { this.options = new ChromeOptions(); @@ -22,20 +21,18 @@ public URLCharityScraper() { options.addArguments("--disable-gpu"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); - - this.driver = new ChromeDriver(options); - - this.wait = new WebDriverWait(driver, Duration.ofSeconds(30)); } public boolean updateDescription() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); StringBuilder descriptionString = new StringBuilder(); try { // URL for scraping approved organizations driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); - this.wait.until( + wait.until( ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); List description = driver.findElements(By.cssSelector(".information div")); @@ -50,7 +47,7 @@ public boolean updateDescription() { if (!doesReadMoreExist.isEmpty()) { WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); descReadMore.click(); - this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); List extraDescription = driver.findElements(By.cssSelector(".extra-info")); @@ -66,19 +63,46 @@ public boolean updateDescription() { } public boolean updateLogo() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); String logoURL = ""; try { driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); - this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); WebElement logo = driver.findElement(By.cssSelector(".logo > img")); logoURL = logo.getAttribute("src"); } finally { - driver.close(); + driver.quit(); } return true; } + + public boolean updateCategories() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + List categoriesList = new ArrayList<>(); + + try { + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".tag-label"))); + + List categories = driver.findElements(By.cssSelector(".tag-label")); + + for (WebElement element : categories) { + categoriesList.add(element.getText()); + } + + } finally { + driver.quit(); + } + + System.out.println(categoriesList); + + return true; + } } From e2e1796308c1f3e3f97d5b1d0a8b905389cc610d Mon Sep 17 00:00:00 2001 From: cathrkri Date: Thu, 26 Mar 2026 19:54:33 +0100 Subject: [PATCH 004/128] feat: add available organization layout --- helpmehelpapplication/src/main/main.iml | 11 + .../resources/fxml/availableOrganization.fxml | 759 ++++++++++++++++++ helpmehelpapplication/src/test/test.iml | 11 + 3 files changed, 781 insertions(+) create mode 100644 helpmehelpapplication/src/main/main.iml create mode 100644 helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml create mode 100644 helpmehelpapplication/src/test/test.iml diff --git a/helpmehelpapplication/src/main/main.iml b/helpmehelpapplication/src/main/main.iml new file mode 100644 index 00000000..908ad4f5 --- /dev/null +++ b/helpmehelpapplication/src/main/main.iml @@ -0,0 +1,11 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml b/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml new file mode 100644 index 00000000..277b54aa --- /dev/null +++ b/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml @@ -0,0 +1,759 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml b/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml index b40acf99..7520244e 100644 --- a/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/availableOrganization.fxml @@ -61,7 +61,8 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - + - - + + + + + - - - - - + + + + + - - - - + + + + - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - + + - - - - - - - - + - - - - - - - - - - - - + + - - - - - - - - - + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + - - - - - - + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - + + + + + + + + + + + - - - + + + + + + + + + + + - - - + + + + + + + + + + + - - - + + + + + + + + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + - - + - + spacing="70.0" + StackPane.alignment="CENTER"> - + - - - + - - + - + + - - + + - + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/edit.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/edit.fxml new file mode 100644 index 00000000..e69de29b diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/inbox.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/inbox.fxml new file mode 100644 index 00000000..e69de29b diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/payments.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/payments.fxml new file mode 100644 index 00000000..e69de29b diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/settings.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/settings.fxml new file mode 100644 index 00000000..e69de29b From 3cf79845bde0b5acc722321b288b9c01363bb549 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 24 Mar 2026 14:43:49 +0100 Subject: [PATCH 021/128] Added URLCharityScraper Added a web-scraper that will scrape relevant information for the charity about-us page. Currently supports scraping description String. --- .../team6/scraper/URLCharityScraper.java | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java new file mode 100644 index 00000000..4120dcca --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -0,0 +1,65 @@ +package ntnu.systemutvikling.team6.scraper; + +import java.time.Duration; +import java.util.List; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.chrome.ChromeDriver; +import org.openqa.selenium.chrome.ChromeOptions; +import org.openqa.selenium.support.ui.ExpectedConditions; +import org.openqa.selenium.support.ui.WebDriverWait; + +public class URLCharityScraper { + ChromeOptions options; + WebDriver driver; + + public URLCharityScraper() { + this.options = new ChromeOptions(); + options.addArguments("--headless=new"); + options.addArguments("--window-size=1920,1080"); + options.addArguments("--disable-gpu"); + options.addArguments("--no-sandbox"); + options.addArguments("--disable-dev-shm-usage"); + + this.driver = new ChromeDriver(options); + } + + public boolean updateDescription() { + StringBuilder descriptionString = new StringBuilder(); + + try { + // URL for scraping approved organizations + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); + wait.until( + ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); + + List description = driver.findElements(By.cssSelector(".information div")); + + for (WebElement element : description) { + descriptionString.append(element.getText()); + } + + // Check for if description is long and contains a "read more" link + List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); + + if (!doesReadMoreExist.isEmpty()) { + WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); + descReadMore.click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + + List extraDescription = driver.findElements(By.cssSelector(".extra-info")); + + for (WebElement webElement : extraDescription) { + descriptionString.append(webElement.getText()); + } + } + + } finally { + driver.quit(); + } + return true; + } +} From d2f0a5489f9f28b50c9cf0adee82655212480942 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 24 Mar 2026 15:25:26 +0100 Subject: [PATCH 022/128] Updated URLCharityScraper Added method to get the URL of the logo. Converted WebDriverWait object to an object parameter, and initialize it in the constructor. --- .../team6/scraper/URLCharityScraper.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 4120dcca..ba1dda9d 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -13,6 +13,7 @@ public class URLCharityScraper { ChromeOptions options; WebDriver driver; + WebDriverWait wait; public URLCharityScraper() { this.options = new ChromeOptions(); @@ -23,6 +24,8 @@ public URLCharityScraper() { options.addArguments("--disable-dev-shm-usage"); this.driver = new ChromeDriver(options); + + this.wait = new WebDriverWait(driver, Duration.ofSeconds(30)); } public boolean updateDescription() { @@ -32,8 +35,7 @@ public boolean updateDescription() { // URL for scraping approved organizations driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10)); - wait.until( + this.wait.until( ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); List description = driver.findElements(By.cssSelector(".information div")); @@ -48,7 +50,7 @@ public boolean updateDescription() { if (!doesReadMoreExist.isEmpty()) { WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); descReadMore.click(); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); List extraDescription = driver.findElements(By.cssSelector(".extra-info")); @@ -62,4 +64,21 @@ public boolean updateDescription() { } return true; } + + public boolean updateLogo() { + String logoURL = ""; + + try { + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); + + WebElement logo = driver.findElement(By.cssSelector(".logo > img")); + + logoURL = logo.getAttribute("src"); + } finally { + driver.close(); + } + return true; + } } From 1671e1e5c3642699b4c4538618f06b727c499fe4 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 24 Mar 2026 15:55:30 +0100 Subject: [PATCH 023/128] Updated URLCharityScraper Changed driver and wait initialization to be for each method instead of constructor. Added a method for getting categories from charity URL. --- .../team6/scraper/URLCharityScraper.java | 44 ++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index ba1dda9d..173785d1 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -1,6 +1,7 @@ package ntnu.systemutvikling.team6.scraper; import java.time.Duration; +import java.util.ArrayList; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -12,8 +13,6 @@ public class URLCharityScraper { ChromeOptions options; - WebDriver driver; - WebDriverWait wait; public URLCharityScraper() { this.options = new ChromeOptions(); @@ -22,20 +21,18 @@ public URLCharityScraper() { options.addArguments("--disable-gpu"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); - - this.driver = new ChromeDriver(options); - - this.wait = new WebDriverWait(driver, Duration.ofSeconds(30)); } public boolean updateDescription() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); StringBuilder descriptionString = new StringBuilder(); try { // URL for scraping approved organizations driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); - this.wait.until( + wait.until( ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); List description = driver.findElements(By.cssSelector(".information div")); @@ -50,7 +47,7 @@ public boolean updateDescription() { if (!doesReadMoreExist.isEmpty()) { WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); descReadMore.click(); - this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); List extraDescription = driver.findElements(By.cssSelector(".extra-info")); @@ -66,19 +63,46 @@ public boolean updateDescription() { } public boolean updateLogo() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); String logoURL = ""; try { driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); - this.wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); WebElement logo = driver.findElement(By.cssSelector(".logo > img")); logoURL = logo.getAttribute("src"); } finally { - driver.close(); + driver.quit(); } return true; } + + public boolean updateCategories() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + List categoriesList = new ArrayList<>(); + + try { + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".tag-label"))); + + List categories = driver.findElements(By.cssSelector(".tag-label")); + + for (WebElement element : categories) { + categoriesList.add(element.getText()); + } + + } finally { + driver.quit(); + } + + System.out.println(categoriesList); + + return true; + } } From 77dd08a9966266af4c029e530cc93426daed876d Mon Sep 17 00:00:00 2001 From: Roar Date: Wed, 1 Apr 2026 13:53:57 +0200 Subject: [PATCH 024/128] Updated URLCharityScraper Added method updateKeyNumbers() that gets the value of the 3 key number values by IK for the given charity. --- .../team6/scraper/URLCharityScraper.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 173785d1..9b643426 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -105,4 +105,50 @@ public boolean updateCategories() { return true; } + + public boolean updateKeyNumbers() { + WebDriver driver = new ChromeDriver(options); + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + String percentage; + WebElement element; + + try { + driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( + "//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']"))); + + element = driver.findElement( + By.xpath("//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']") + ); + + percentage = element.getAttribute("data-percentage"); + System.out.println(percentage); + + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( + "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']"))); + + element = driver.findElement( + By.xpath("//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']") + ); + + percentage = element.getAttribute("data-percentage"); + System.out.println(percentage); + + wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( + "//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']"))); + + element = driver.findElement( + By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']") + ); + + percentage = element.getAttribute("data-percentage"); + System.out.println(percentage); + + } finally { + driver.quit(); + } + + return true; + } } From 6cf3b0bba8932e1aca2bb8c9cec0bcfdc5719fbb Mon Sep 17 00:00:00 2001 From: Roar Date: Wed, 1 Apr 2026 14:21:33 +0200 Subject: [PATCH 025/128] Updated URLCharityScraper Fixed updateDescription so it doesn't output some of the text twice, and it now returns the String. --- .../team6/scraper/URLCharityScraper.java | 34 ++++++++----------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 9b643426..75709ecb 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -23,43 +23,37 @@ public URLCharityScraper() { options.addArguments("--disable-dev-shm-usage"); } - public boolean updateDescription() { + public String updateDescription(String url) { WebDriver driver = new ChromeDriver(options); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - StringBuilder descriptionString = new StringBuilder(); + StringBuilder descriptionString = new StringBuilder(); try { - // URL for scraping approved organizations - driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + driver.get(url); wait.until( ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); + // Check for if description is long and contains a "read more" link + List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); + + if (!doesReadMoreExist.isEmpty()) { + WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); + descReadMore.click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + } + List description = driver.findElements(By.cssSelector(".information div")); for (WebElement element : description) { descriptionString.append(element.getText()); } - // Check for if description is long and contains a "read more" link - List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); - - if (!doesReadMoreExist.isEmpty()) { - WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); - descReadMore.click(); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); - - List extraDescription = driver.findElements(By.cssSelector(".extra-info")); - - for (WebElement webElement : extraDescription) { - descriptionString.append(webElement.getText()); - } - } - } finally { driver.quit(); } - return true; + + return descriptionString.toString(); } public boolean updateLogo() { From e6efe6f71f6153a8a1337d647819c7bf84abc01b Mon Sep 17 00:00:00 2001 From: Roar Date: Wed, 1 Apr 2026 14:40:14 +0200 Subject: [PATCH 026/128] Updated URLCharityScraper Changed methods to return their values, and made the url a object parameter. --- .../team6/scraper/URLCharityScraper.java | 40 ++++++++++--------- 1 file changed, 22 insertions(+), 18 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 75709ecb..53aa2dc6 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -13,23 +13,25 @@ public class URLCharityScraper { ChromeOptions options; + String url; - public URLCharityScraper() { + public URLCharityScraper(String url) { this.options = new ChromeOptions(); options.addArguments("--headless=new"); options.addArguments("--window-size=1920,1080"); options.addArguments("--disable-gpu"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); + this.url = url; } - public String updateDescription(String url) { + public String updateDescription() { WebDriver driver = new ChromeDriver(options); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); StringBuilder descriptionString = new StringBuilder(); try { - driver.get(url); + driver.get(this.url); wait.until( ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); @@ -56,13 +58,13 @@ public String updateDescription(String url) { return descriptionString.toString(); } - public boolean updateLogo() { + public String updateLogo() { WebDriver driver = new ChromeDriver(options); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - String logoURL = ""; + String logoURL; try { - driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + driver.get(this.url); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); @@ -72,16 +74,16 @@ public boolean updateLogo() { } finally { driver.quit(); } - return true; + return logoURL; } - public boolean updateCategories() { + public List updateCategories() { WebDriver driver = new ChromeDriver(options); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); List categoriesList = new ArrayList<>(); try { - driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + driver.get(this.url); wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".tag-label"))); @@ -95,19 +97,18 @@ public boolean updateCategories() { driver.quit(); } - System.out.println(categoriesList); - - return true; + return categoriesList; } - public boolean updateKeyNumbers() { + public List updateKeyNumbers() { WebDriver driver = new ChromeDriver(options); WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); String percentage; WebElement element; + List keyNumbersList = new ArrayList<>(); try { - driver.get("https://www.innsamlingskontrollen.no/organisasjoner/anna-ministries/"); + driver.get(this.url); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( "//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']"))); @@ -117,7 +118,8 @@ public boolean updateKeyNumbers() { ); percentage = element.getAttribute("data-percentage"); - System.out.println(percentage); + + keyNumbersList.add(percentage); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']"))); @@ -127,7 +129,8 @@ public boolean updateKeyNumbers() { ); percentage = element.getAttribute("data-percentage"); - System.out.println(percentage); + + keyNumbersList.add(percentage); wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( "//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']"))); @@ -137,12 +140,13 @@ public boolean updateKeyNumbers() { ); percentage = element.getAttribute("data-percentage"); - System.out.println(percentage); + + keyNumbersList.add(percentage); } finally { driver.quit(); } - return true; + return keyNumbersList; } } From 017e820f4a5243aedbbe318b0931a2eea4886873 Mon Sep 17 00:00:00 2001 From: Roar Date: Wed, 1 Apr 2026 18:44:23 +0200 Subject: [PATCH 027/128] Updated URLCharityScraper Fixed method to get description to be more robust, and it now correctly spaces paragraphs. Made scraping methods private, and a public method to run them all. Restructured the class for easier testing with mockito. --- .../team6/scraper/URLCharityScraper.java | 202 +++++++++++------- 1 file changed, 120 insertions(+), 82 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 53aa2dc6..1aab6ae5 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -2,6 +2,7 @@ import java.time.Duration; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; @@ -12,141 +13,178 @@ import org.openqa.selenium.support.ui.WebDriverWait; public class URLCharityScraper { - ChromeOptions options; - String url; + private final String url; + private final WebDriver driver; + private String description; + private String logoURL; + private final List categories; + private final List keyValues; + + // Used for production public URLCharityScraper(String url) { - this.options = new ChromeOptions(); + this.categories = new ArrayList<>(); + this.keyValues = new ArrayList<>(); + ChromeOptions options = new ChromeOptions(); options.addArguments("--headless=new"); options.addArguments("--window-size=1920,1080"); options.addArguments("--disable-gpu"); options.addArguments("--no-sandbox"); options.addArguments("--disable-dev-shm-usage"); this.url = url; + this.driver = new ChromeDriver(options); + } + + // Used for testing + public URLCharityScraper(String url, WebDriver driver) { + this.categories = new ArrayList<>(); + this.keyValues = new ArrayList<>(); + this.url = url; + this.driver = driver; + } + + private void quitDriver() { + if (driver instanceof ChromeDriver) { + driver.quit(); + } } - public String updateDescription() { - WebDriver driver = new ChromeDriver(options); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - StringBuilder descriptionString = new StringBuilder(); + private void updateDescription() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + StringBuilder descriptionString = new StringBuilder(); - try { driver.get(this.url); wait.until( - ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); + ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); + + List firstDescription = driver.findElements(By.cssSelector(".information div p")); - // Check for if description is long and contains a "read more" link - List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); + for (WebElement element : firstDescription) { + if (element.getText().isBlank()) { + continue; + } + descriptionString.append(element.getText()).append("\n\n"); + } + // Check for if description is long and contains a "read more" link + List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); - if (!doesReadMoreExist.isEmpty()) { - WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); - descReadMore.click(); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); - } + if (!doesReadMoreExist.isEmpty()) { + WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); + descReadMore.click(); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); + } - List description = driver.findElements(By.cssSelector(".information div")); + List extraDescription = driver.findElements(By.cssSelector(".extra-info p")); - for (WebElement element : description) { - descriptionString.append(element.getText()); + for (WebElement element : extraDescription) { + if (element.getText().isBlank()) { + continue; + } + descriptionString.append(element.getText()).append("\n\n"); } - } finally { - driver.quit(); - } - return descriptionString.toString(); + this.description = descriptionString.toString(); } - public String updateLogo() { - WebDriver driver = new ChromeDriver(options); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - String logoURL; + private void updateLogo() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - try { - driver.get(this.url); + driver.get(this.url); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); - WebElement logo = driver.findElement(By.cssSelector(".logo > img")); + WebElement logo = driver.findElement(By.cssSelector(".logo > img")); - logoURL = logo.getAttribute("src"); - } finally { - driver.quit(); - } - return logoURL; + this.logoURL = logo.getAttribute("src"); } - public List updateCategories() { - WebDriver driver = new ChromeDriver(options); + private void updateCategories() { WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - List categoriesList = new ArrayList<>(); - - try { - driver.get(this.url); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".tag-label"))); + driver.get(this.url); - List categories = driver.findElements(By.cssSelector(".tag-label")); + wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".tag-label"))); - for (WebElement element : categories) { - categoriesList.add(element.getText()); - } + List categories = driver.findElements(By.cssSelector(".tag-label")); - } finally { - driver.quit(); + for (WebElement element : categories) { + this.categories.add(element.getText()); } - - return categoriesList; } - public List updateKeyNumbers() { - WebDriver driver = new ChromeDriver(options); - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - String percentage; - WebElement element; - List keyNumbersList = new ArrayList<>(); + private void updateKeyNumbers() { + WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + String percentage; + WebElement element; - try { - driver.get(this.url); + driver.get(this.url); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( - "//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']"))); + wait.until( + ExpectedConditions.visibilityOfElementLocated( + By.xpath( + "//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']"))); - element = driver.findElement( - By.xpath("//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']") - ); + element = + driver.findElement( + By.xpath("//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']")); - percentage = element.getAttribute("data-percentage"); + percentage = element.getAttribute("data-percentage"); - keyNumbersList.add(percentage); + this.keyValues.add(percentage); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( - "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']"))); + wait.until( + ExpectedConditions.visibilityOfElementLocated( + By.xpath( + "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']"))); - element = driver.findElement( - By.xpath("//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']") - ); + element = + driver.findElement( + By.xpath( + "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']")); - percentage = element.getAttribute("data-percentage"); + percentage = element.getAttribute("data-percentage"); - keyNumbersList.add(percentage); + this.keyValues.add(percentage); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath( - "//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']"))); + wait.until( + ExpectedConditions.visibilityOfElementLocated( + By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']"))); - element = driver.findElement( - By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']") - ); + element = + driver.findElement( + By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']")); - percentage = element.getAttribute("data-percentage"); + percentage = element.getAttribute("data-percentage"); - keyNumbersList.add(percentage); + this.keyValues.add(percentage); + } + public void scrapeCharityPage() { + try { + this.updateDescription(); + this.updateLogo(); + this.updateCategories(); + this.updateKeyNumbers(); } finally { - driver.quit(); + this.quitDriver(); } + } + + public String getDescription() { + return this.description; + } + + public String getLogoURL() { + return this.logoURL; + } + + public List getCategories() { + return Collections.unmodifiableList(this.categories); + } - return keyNumbersList; + public List getKeyValues() { + return Collections.unmodifiableList(this.keyValues); } } From 358aeb4c39e991c32d830a18373dae10a974d8ad Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:36:25 +0200 Subject: [PATCH 028/128] Updated URLCharityScraper Edited methods to return strings instead for easier uploading to database. --- .../team6/scraper/URLCharityScraper.java | 349 +++++++++++------- 1 file changed, 219 insertions(+), 130 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 1aab6ae5..7c5f88a5 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -12,6 +12,10 @@ import org.openqa.selenium.support.ui.ExpectedConditions; import org.openqa.selenium.support.ui.WebDriverWait; +/** + * Class for scraping the description, URL of the logo, string of categories, and key values of the charities + * registered in IK. + */ public class URLCharityScraper { private final String url; private final WebDriver driver; @@ -20,171 +24,256 @@ public class URLCharityScraper { private final List categories; private final List keyValues; - - // Used for production - public URLCharityScraper(String url) { - this.categories = new ArrayList<>(); - this.keyValues = new ArrayList<>(); - ChromeOptions options = new ChromeOptions(); - options.addArguments("--headless=new"); - options.addArguments("--window-size=1920,1080"); - options.addArguments("--disable-gpu"); - options.addArguments("--no-sandbox"); - options.addArguments("--disable-dev-shm-usage"); - this.url = url; - this.driver = new ChromeDriver(options); + /** + * Constructor used for production code. + * + *

It initializes the lists used for categories and keyValues, as well as defining the parameters used + * for the selenium Chromium-based browser that does the scraping.

+ * + * @param url the URL for the charity's webpage on IK + */ + public URLCharityScraper(String url) { + this.categories = new ArrayList<>(); + this.keyValues = new ArrayList<>(); + + ChromeOptions options = new ChromeOptions(); + options.addArguments("--headless=new"); + options.addArguments("--window-size=1920,1080"); + options.addArguments("--disable-gpu"); + options.addArguments("--no-sandbox"); + options.addArguments("--disable-dev-shm-usage"); + + this.url = url; + this.driver = new ChromeDriver(options); } - // Used for testing + /** + * Constructor used for testing. + * + *

It accepts both a url (in this case used as a dud) and a {@link WebDriver} as parameters. The WebDriver is + * passed to make testing easier.

+ * + * @param url the URL for the charity's webpage on IK (for this constructor it should not be a real URL) + * @param driver the {@code WebDriver} object used for scraping + */ public URLCharityScraper(String url, WebDriver driver) { - this.categories = new ArrayList<>(); - this.keyValues = new ArrayList<>(); - this.url = url; - this.driver = driver; + this.categories = new ArrayList<>(); + this.keyValues = new ArrayList<>(); + this.url = url; + this.driver = driver; } - private void quitDriver() { - if (driver instanceof ChromeDriver) { - driver.quit(); - } - } - - private void updateDescription() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - StringBuilder descriptionString = new StringBuilder(); - - driver.get(this.url); - - wait.until( - ExpectedConditions.numberOfElementsToBeMoreThan(By.cssSelector(".information div"), 0)); - - List firstDescription = driver.findElements(By.cssSelector(".information div p")); - - for (WebElement element : firstDescription) { - if (element.getText().isBlank()) { - continue; - } - descriptionString.append(element.getText()).append("\n\n"); - } - // Check for if description is long and contains a "read more" link - List doesReadMoreExist = driver.findElements(By.cssSelector("a.read-more")); - - if (!doesReadMoreExist.isEmpty()) { - WebElement descReadMore = driver.findElement(By.cssSelector("a.read-more")); - descReadMore.click(); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".extra-info"))); - } + /** + * Creates a {@link WebDriverWait} object for halting scraping until the correct pre-conditions are met. + * + * @return the {@code WebDriverWait} object to be used in the methods + */ + protected WebDriverWait createWait() { + return new WebDriverWait(driver, Duration.ofSeconds(30)); + } - List extraDescription = driver.findElements(By.cssSelector(".extra-info p")); + /** + * Calls the {@code findElements} method from the {@code WebDriver} object and returns a list of the returned + * {@link WebElement} objects. + * + * @param by a selector for {@code WebElement} objects + * @return a list of found {@code WebElement} objects matching the given selector + */ + protected List findElements(By by) { + return driver.findElements(by); + } - for (WebElement element : extraDescription) { - if (element.getText().isBlank()) { - continue; - } - descriptionString.append(element.getText()).append("\n\n"); - } + /** + * Calls the {@code findElement} method from the {@code WebDriver} object and returns a list of the returned + * {@code WebElement} objects. + * + * @param by a selector for {@code WebElement} objects + * @return a list of found {@code WebElement} objects matching the given selector + */ + protected WebElement findElement(By by) { + return driver.findElement(by); + } + /** + * Quits the driver instance, making it unusable. + */ + protected void closeDriver() { + driver.quit(); + } - this.description = descriptionString.toString(); - } + /** + * Scrapes the URL for the paragraphs containing the description of the charity. + */ + protected void updateDescription() { + WebDriverWait wait = createWait(); + StringBuilder descriptionString = new StringBuilder(); - private void updateLogo() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + wait.until(ExpectedConditions.numberOfElementsToBeMoreThan( + By.cssSelector(".information div"), 0)); - driver.get(this.url); + List firstDescription = + findElements(By.cssSelector(".information div p")); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".logo > img"))); + for (WebElement element : firstDescription) { + if (!element.getText().isBlank()) { + descriptionString.append(element.getText()).append("\n\n"); + } + } - WebElement logo = driver.findElement(By.cssSelector(".logo > img")); + List readMoreLinks = + findElements(By.cssSelector("a.read-more")); - this.logoURL = logo.getAttribute("src"); - } + if (!readMoreLinks.isEmpty()) { + WebElement readMore = findElement(By.cssSelector("a.read-more")); + readMore.click(); - private void updateCategories() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); + wait.until(ExpectedConditions.visibilityOfElementLocated( + By.cssSelector(".extra-info"))); + } - driver.get(this.url); + List extraDescription = + findElements(By.cssSelector(".extra-info p")); - wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".tag-label"))); + for (WebElement element : extraDescription) { + if (!element.getText().isBlank()) { + descriptionString.append(element.getText()).append("\n\n"); + } + } - List categories = driver.findElements(By.cssSelector(".tag-label")); + this.description = descriptionString.toString(); + } - for (WebElement element : categories) { - this.categories.add(element.getText()); - } - } + /** + * Scrapes the URL for the image URL of the logo for the charity. + */ + void updateLogo() { + WebDriverWait wait = createWait(); - private void updateKeyNumbers() { - WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(30)); - String percentage; - WebElement element; + wait.until(ExpectedConditions.visibilityOfElementLocated( + By.cssSelector(".logo > img"))); - driver.get(this.url); + WebElement logo = findElement(By.cssSelector(".logo > img")); + this.logoURL = logo.getAttribute("src"); + } - wait.until( - ExpectedConditions.visibilityOfElementLocated( - By.xpath( - "//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']"))); + /** + * Scrapes the URL for the category labels containing the categories for the charity. + */ + void updateCategories() { + WebDriverWait wait = createWait(); - element = - driver.findElement( - By.xpath("//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']")); + wait.until(ExpectedConditions.visibilityOfElementLocated( + By.cssSelector(".tag-label"))); - percentage = element.getAttribute("data-percentage"); + List elements = + findElements(By.cssSelector(".tag-label")); - this.keyValues.add(percentage); + for (WebElement element : elements) { + this.categories.add(element.getText()); + } + } - wait.until( - ExpectedConditions.visibilityOfElementLocated( - By.xpath( - "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']"))); + /** + * Scrapes the URL for the statistics of the charity; the percentage collected, the percentage that goes to the + * administration, and the percentage that is put towards the cause. + */ + void updateKeyValues() { + WebDriverWait wait = createWait(); - element = - driver.findElement( - By.xpath( - "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']")); + String percentage; + WebElement element; - percentage = element.getAttribute("data-percentage"); + wait.until(ExpectedConditions.visibilityOfElementLocated( + By.xpath("//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']"))); - this.keyValues.add(percentage); + element = findElement(By.xpath( + "//li[.//h2[normalize-space()='Innsamlingsprosent']]//div[@class='graph']")); + percentage = element.getAttribute("data-percentage"); + this.keyValues.add(percentage); - wait.until( - ExpectedConditions.visibilityOfElementLocated( - By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']"))); + wait.until(ExpectedConditions.visibilityOfElementLocated( + By.xpath("//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']"))); - element = - driver.findElement( - By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']")); + element = findElement(By.xpath( + "//li[.//h2[normalize-space()='Administrasjonsprosent']]//div[@class='graph']")); + percentage = element.getAttribute("data-percentage"); + this.keyValues.add(percentage); - percentage = element.getAttribute("data-percentage"); + wait.until(ExpectedConditions.visibilityOfElementLocated( + By.xpath("//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']"))); - this.keyValues.add(percentage); - } + element = findElement(By.xpath( + "//li[.//h2[normalize-space()='Formålsprosent']]//div[@class='graph']")); + percentage = element.getAttribute("data-percentage"); + this.keyValues.add(percentage); + } - public void scrapeCharityPage() { - try { - this.updateDescription(); - this.updateLogo(); - this.updateCategories(); - this.updateKeyNumbers(); - } finally { - this.quitDriver(); - } - } + /** + * Runs all the scraper methods at once, updating the object parameters. + */ + public void scrapeCharityPage() { + try { + driver.get(this.url); + + updateDescription(); + updateLogo(); + updateCategories(); + updateKeyValues(); + + } finally { + closeDriver(); + } + } - public String getDescription() { - return this.description; - } + /** + * Returns the description of the charity. + * + * @return a String containing the description of the charity. + */ + public String getDescription() { + return description; + } - public String getLogoURL() { - return this.logoURL; - } + /** + * Returns the URL of the logo for the charity. + * + * @return a String containing the URL for the logo of the charity. + */ + public String getLogoURL() { + return logoURL; + } - public List getCategories() { - return Collections.unmodifiableList(this.categories); - } + /** + * Returns a String of the categories for the charity with ',' as a delimiter. + * + * @return a String of strings containing the categories for the charity + */ + public String getCategories() { + StringBuilder categoriesString = new StringBuilder(); + + for (int i = 0; i < this.categories.size(); i++) { + categoriesString.append(this.categories.get(i)); + if (i < this.categories.size() - 1) { + categoriesString.append(","); + } + } + return categoriesString.toString(); + } - public List getKeyValues() { - return Collections.unmodifiableList(this.keyValues); - } -} + /** + * Returns a String of the key value percentages for the charity with ':' as a delimiter, verified by IK. + * + * @return a String of the key values for the charity- + */ + public String getKeyValues() { + StringBuilder keyValuesString = new StringBuilder(); + + for (int i = 0; i < this.keyValues.size(); i++) { + keyValuesString.append(this.keyValues.get(i)); + if (i < this.keyValues.size() - 1) { + keyValuesString.append(":"); + } + } + return keyValuesString.toString(); + } +} \ No newline at end of file From 2d81972144173aebc855829099e637fd9bec32df Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:38:10 +0200 Subject: [PATCH 029/128] Updated URLCharityScraper Removed unused collections import statement. --- .../ntnu/systemutvikling/team6/scraper/URLCharityScraper.java | 1 - 1 file changed, 1 deletion(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java index 7c5f88a5..11229196 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/scraper/URLCharityScraper.java @@ -2,7 +2,6 @@ import java.time.Duration; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; From 36628157cf2e271f960fb755617ae7ca00579f8e Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:39:35 +0200 Subject: [PATCH 030/128] Updated Charity Changed description parameter to only contain URL to pass to the URLCharityScraper --- .../ntnu/systemutvikling/team6/models/Charity.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java index d97d9968..2addc079 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java @@ -20,8 +20,8 @@ public class Charity { /* Name of the charity */ private String name; - /* Description of the charity's mission and activities */ - private String description; + /* URL of the charity */ + private String url; /* Is the charity verified? */ private String status; @@ -34,6 +34,7 @@ public class Charity { /* List that contains the charity's Feedbacks */ private List feedbacks; + /** * Contructor for creating a new charity. Taylored to match data given from Api. Other attributes * will just be initialized as empty @@ -48,7 +49,7 @@ public Charity( this.UUID = java.util.UUID.randomUUID(); this.org_number = org_number.replaceAll("\\s", ""); this.name = name; - this.description = "Les mer her: " + link; + this.url = link; this.is_pre_approved = is_pre_approved; this.status = status; this.feedbacks = new ArrayList<>(); @@ -74,7 +75,7 @@ public Charity( this.UUID = UUID.fromString(uuid); this.org_number = org_number.replaceAll("\\s", ""); this.name = name; - this.description = link; + this.url = link; this.is_pre_approved = is_pre_approved; this.status = status; this.feedbacks = new ArrayList<>(); @@ -110,8 +111,8 @@ public String getName() { return name; } - public String getDescription() { - return description; + public String getURL() { + return this.url; } /** Setter for verification status. This one sets the charity as verified. */ From 1a48b29023f6174ba6ccdad8f7b8023965012fe9 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:42:21 +0200 Subject: [PATCH 031/128] Updated DatabaseManager Added 4 new columns: description, logoURL, categories, and key_values to the create table method. Creates and calls a URLCharityScraper object on updating API values that populates these new columns using the URL for the charity given from the API. --- .../team6/database/DatabaseManager.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java index a4007a05..1095ef55 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java @@ -8,6 +8,7 @@ import ntnu.systemutvikling.team6.models.Donation; import ntnu.systemutvikling.team6.models.DonationRegistry; import ntnu.systemutvikling.team6.scraper.APICharityData; +import ntnu.systemutvikling.team6.scraper.URLCharityScraper; /** * Manages the Database with MySQL tables and JDBC. @@ -74,6 +75,10 @@ charity_name VARCHAR(255) NOT NULL, charity_link VARCHAR(255) NOT NULL, pre_approved TINYINT NOT NULL, status VARCHAR(255) NOT NULL, + description TEXT, + logoURL TEXT, + categories TEXT, + key_values TEXT, UNIQUE KEY unique_org_number (org_number) ) ENGINE=InnoDB; @@ -127,13 +132,17 @@ public void addAPIDataToTable(List charities) { conn.setAutoCommit(false); String sql_query = """ - INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_link, pre_approved, status) - VALUES (?, ?, ?, ?, ?, ?) + INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_link, pre_approved, status, description, logoURL, categories, key_values) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE charity_name = VALUES(charity_name), charity_link = VALUES(charity_link), pre_approved = VALUES(pre_approved), - status = VALUES(status) + status = VALUES(status), + description = VALUES(description), + logoURL = VALUES(logoURL), + categories = VALUES(categories), + key_values = VALUES(key_values) """; try (PreparedStatement ps = conn.prepareStatement(sql_query)) { @@ -143,12 +152,19 @@ INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_link, p } else { ps.setString(1, charity.getUUID().toString()); } + // Scrapes description, logo, categories, and key values from IK + URLCharityScraper urlScraper = new URLCharityScraper(charity.getURL()); + urlScraper.scrapeCharityPage(); ps.setString(2, charity.getOrg_number().replaceAll("\\s", "")); ps.setString(3, charity.getName()); - ps.setString(4, charity.getDescription()); + ps.setString(4, charity.getURL()); ps.setBoolean(5, charity.getPreApproved()); // Description is the link ps.setString(6, charity.getStatus()); + ps.setString(7, urlScraper.getDescription()); + ps.setString(8, urlScraper.getLogoURL()); + ps.setString(9, urlScraper.getCategories()); + ps.setString(10, urlScraper.getKeyValues()); ps.addBatch(); } From b9b372b3a19b2add127fdf968798edb49c768c46 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:44:44 +0200 Subject: [PATCH 032/128] Updated DatabaseManagerTest Changed getDescription test to use getURL instead. --- .../team6/database/DatabaseManagerTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java index 086ed696..f930abab 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java @@ -18,6 +18,20 @@ public void setUp() throws SQLException { this.dbManager = new DatabaseManager(); } + @Test + public void test() { + dbManager.createTables(); + + String org_number = "12345"; + String name = "Test Charity"; + String status = "approved"; + String url = "https://www.innsamlingskontrollen.no/organisasjoner/adra-norge-adventist-development-and-relief-agency-norway/"; + boolean is_pre_approved = false; + + Charity charity = new Charity(org_number, url, name, is_pre_approved, status); + dbManager.addAPIDataToTable(List.of(charity)); + } + // Make sure you're connected to the NTNU network for this to work @Test public void testConnectionShouldReturnTrue() { From 39aedbad12d8796d1c2f7a8ab3553ee227724590 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:47:51 +0200 Subject: [PATCH 033/128] Updated DatabaseManagerTest Changed getDescription test to use getURL instead. --- .../java/ntnu/systemutvikling/team6/models/CharityTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/CharityTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/CharityTest.java index e382fe59..8bcc6741 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/CharityTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/models/CharityTest.java @@ -37,7 +37,7 @@ public void testGettingNameShouldWork() { @Test public void testGettingDescriptionShouldWork() { - assertEquals("Les mer her: www.aaaa.com", charity.getDescription()); + assertEquals("www.aaaa.com", charity.getURL()); } /** Getter and setter for IsVerified should be able to switch between true and false */ From 0ec340b88012447d6b46bac30b7dfd7c0ff18ea5 Mon Sep 17 00:00:00 2001 From: Roar Date: Tue, 7 Apr 2026 08:51:45 +0200 Subject: [PATCH 034/128] Added URLCharityScraperTest Test file for URLCharityScraper with as much coverage as possible. --- .../team6/scraper/URLCharityScraperTest.java | 171 ++++++++++++++++++ 1 file changed, 171 insertions(+) create mode 100644 helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/scraper/URLCharityScraperTest.java diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/scraper/URLCharityScraperTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/scraper/URLCharityScraperTest.java new file mode 100644 index 00000000..d4378913 --- /dev/null +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/scraper/URLCharityScraperTest.java @@ -0,0 +1,171 @@ +package ntnu.systemutvikling.team6.scraper; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.openqa.selenium.By; +import org.openqa.selenium.WebDriver; +import org.openqa.selenium.WebElement; +import org.openqa.selenium.support.ui.WebDriverWait; + +import java.util.List; + +import static org.junit.jupiter.api.Assertions.*; +import static org.mockito.Mockito.*; + +class URLCharityScraperTest { + + private WebDriver driver; + private URLCharityScraper scraper; + + @BeforeEach + void setup() { + driver = mock(WebDriver.class); + + scraper = new URLCharityScraper("http://test", driver) { + @Override + protected WebDriverWait createWait() { + return mock(WebDriverWait.class); + } + + @Override + protected void closeDriver() { + } + }; + } + + @Test + void updateDescriptionShouldReturnCorrectDescriptionWithoutReadMore() { + WebElement p1 = mock(WebElement.class); + WebElement p2 = mock(WebElement.class); + + when(p1.getText()).thenReturn("Short description"); + when(p2.getText()).thenReturn(""); + + when(scraper.findElements(By.cssSelector(".information div p"))) + .thenReturn(List.of(p1, p2)); + + when(scraper.findElements(By.cssSelector("a.read-more"))) + .thenReturn(List.of()); + + when(scraper.findElements(By.cssSelector(".extra-info p"))) + .thenReturn(List.of()); + + scraper.updateDescription(); + + String result = scraper.getDescription(); + + assertTrue(result.contains("Short description"), + "First paragraph should be 'Short description'"); + assertFalse(result.isBlank(), + "Second paragraph should be blank."); + } + + @Test + void updateDescriptionShouldReturnCorrectDescriptionWithReadMore() { + WebElement p1 = mock(WebElement.class); + WebElement extra = mock(WebElement.class); + WebElement readMore = mock(WebElement.class); + + when(p1.getText()).thenReturn("Intro"); + when(extra.getText()).thenReturn("Extra info"); + + when(scraper.findElements(By.cssSelector(".information div p"))) + .thenReturn(List.of(p1)); + + when(scraper.findElements(By.cssSelector("a.read-more"))) + .thenReturn(List.of(readMore)); + + when(scraper.findElement(By.cssSelector("a.read-more"))) + .thenReturn(readMore); + + when(scraper.findElements(By.cssSelector(".extra-info p"))) + .thenReturn(List.of(extra)); + + scraper.updateDescription(); + + String result = scraper.getDescription(); + + verify(readMore).click(); + assertTrue(result.contains("Intro"), + "First paragraph should be 'Intro'"); + assertTrue(result.contains("Extra info"), + "Second paragraph should be 'Extra info'"); + } + + @Test + void updateLogoShouldReturnCorrectLogoURL() { + WebElement logo = mock(WebElement.class); + + when(scraper.findElement(By.cssSelector(".logo > img"))) + .thenReturn(logo); + + when(logo.getAttribute("src")).thenReturn("logo.png"); + + scraper.updateLogo(); + + assertEquals("logo.png", scraper.getLogoURL()); + } + + @Test + void updateCategoriesShouldReturnCorrectCategories() { + WebElement c1 = mock(WebElement.class); + WebElement c2 = mock(WebElement.class); + + when(c1.getText()).thenReturn("Health"); + when(c2.getText()).thenReturn("Education"); + + when(scraper.findElements(By.cssSelector(".tag-label"))) + .thenReturn(List.of(c1, c2)); + + scraper.updateCategories(); + + assertEquals("Health,Education", scraper.getCategories(), + "Should return a string that lists categories with ',' as a delimiter."); + } + + @Test + void updateKeyNumbersShouldReturnCorrectNumbers() { + WebElement e1 = mock(WebElement.class); + WebElement e2 = mock(WebElement.class); + WebElement e3 = mock(WebElement.class); + + when(e1.getAttribute("data-percentage")).thenReturn("80"); + when(e2.getAttribute("data-percentage")).thenReturn("10"); + when(e3.getAttribute("data-percentage")).thenReturn("90"); + + when(scraper.findElement(any(By.class))) + .thenReturn(e1, e2, e3); + + scraper.updateKeyValues(); + + System.out.println(scraper.getKeyValues()); + + assertEquals("80:10:90", scraper.getKeyValues(), + "Should return a string that lists key values with ':' as a delimiter."); + } + + @Test + void scrapeCharityPageShouldCallAllRelevantMethods() { + URLCharityScraper spyScraper = spy(scraper); + + doNothing().when(spyScraper).updateDescription(); + doNothing().when(spyScraper).updateLogo(); + doNothing().when(spyScraper).updateCategories(); + doNothing().when(spyScraper).updateKeyValues(); + + spyScraper.scrapeCharityPage(); + + // Url should be correct + verify(driver).get("http://test"); + // UpdateDescription should run + verify(spyScraper).updateDescription(); + // UpdateLogo should run + verify(spyScraper).updateLogo(); + // UpdateCategories should run + verify(spyScraper).updateCategories(); + // UpdateKeyValues should run + verify(spyScraper).updateKeyValues(); + } + + +} \ No newline at end of file From 38e7173c2969403a013d744f48fa1200344b8598 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 11:58:38 +0200 Subject: [PATCH 035/128] Feat: Sql scripts --- docs/Sql_script_v1.1.sql | 203 +++++++++++++++++++++++++++++++++++++ docs/Sql_script_v1.2.sql | 203 +++++++++++++++++++++++++++++++++++++ docs/Sql_scriptv1.0.sql | 213 +++++++++++++++++++++++++++++++++++++++ 3 files changed, 619 insertions(+) create mode 100644 docs/Sql_script_v1.1.sql create mode 100644 docs/Sql_script_v1.2.sql create mode 100644 docs/Sql_scriptv1.0.sql diff --git a/docs/Sql_script_v1.1.sql b/docs/Sql_script_v1.1.sql new file mode 100644 index 00000000..63104556 --- /dev/null +++ b/docs/Sql_script_v1.1.sql @@ -0,0 +1,203 @@ +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema apbaluna +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema apbaluna +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `apbaluna` DEFAULT CHARACTER SET utf8 ; +USE `apbaluna` ; + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Charities` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Charities` ( + `UUID_charities` CHAR(36) NOT NULL, + `org_number` VARCHAR(255) NOT NULL, + `charity_name` VARCHAR(255) NOT NULL, + `charity_description` VARCHAR(255) NOT NULL, + `charity_link` VARCHAR(255) NOT NULL, + `pre_approved` TINYINT NOT NULL, + `status` VARCHAR(255) NOT NULL, + PRIMARY KEY (`UUID_charities`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`User` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`User` ( + `UUID_User` CHAR(36) NOT NULL, + `user_name` VARCHAR(255) NOT NULL, + `user_email` VARCHAR(255) NOT NULL, + `role` VARCHAR(45) NOT NULL, + PRIMARY KEY (`UUID_User`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Donations` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Donations` ( + `UUID_Donations` CHAR(36) NOT NULL, + `amount` DECIMAL NOT NULL, + `date` DATE NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_Donations`), + INDEX `fk_Donations_Charities_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Donations_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Donations_Charities` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Donations_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Settings` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Settings` ( + `User_UUID_User` CHAR(36) NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `language` VARCHAR(45) NOT NULL, + `lightmode` TINYINT NOT NULL, + PRIMARY KEY (`User_UUID_User`), + INDEX `fk_Settings_User1_idx` (`User_UUID_User` ASC) VISIBLE, + CONSTRAINT `fk_Settings_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Messages` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Messages` ( + `UUID_message` CHAR(36) NOT NULL, + `message_title` VARCHAR(255) NOT NULL, + `message_content` VARCHAR(255) NOT NULL, + `message_date` DATE NOT NULL, + `sender_user_id` CHAR(36) NULL, + `sender_charity_id` CHAR(36) NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_message`), + INDEX `fk_Messages_User1_idx` (`sender_user_id` ASC) VISIBLE, + INDEX `fk_Messages_Charities1_idx` (`sender_charity_id` ASC) VISIBLE, + INDEX `fk_Messages_User2_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Messages_User1` + FOREIGN KEY (`sender_user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_Charities1` + FOREIGN KEY (`sender_charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_User2` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Feedback` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Feedback` ( + `UUID_feedback` CHAR(36) NOT NULL, + `feedback_comment` VARCHAR(255) NOT NULL, + `feedback_date` DATE NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_feedback`), + INDEX `fk_Feedback_Charities1_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Feedback_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Feedback_Charities1` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Feedback_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Categories` ( + `category_id` INT NOT NULL AUTO_INCREMENT, + `category` VARCHAR(255) NOT NULL, + PRIMARY KEY (`category_id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Charity_Categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Charity_Categories` ( + `Categories_category_id` INT NOT NULL, + `Charities_UUID_charities` CHAR(36) NOT NULL, + PRIMARY KEY (`Categories_category_id`, `Charities_UUID_charities`), + INDEX `fk_Categories_has_Charities_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + INDEX `fk_Categories_has_Charities_Categories1_idx` (`Categories_category_id` ASC) VISIBLE, + CONSTRAINT `fk_Categories_has_Charities_Categories1` + FOREIGN KEY (`Categories_category_id`) + REFERENCES `apbaluna`.`Categories` (`category_id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Categories_has_Charities_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`CharityUsers` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`CharityUsers` ( + `Charities_UUID_charities` CHAR(36) NOT NULL, + `User_UUID_User` CHAR(36) NOT NULL, + PRIMARY KEY (`Charities_UUID_charities`, `User_UUID_User`), + INDEX `fk_Charities_has_User_User1_idx` (`User_UUID_User` ASC) VISIBLE, + INDEX `fk_Charities_has_User_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + CONSTRAINT `fk_Charities_has_User_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Charities_has_User_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + +USE `apbaluna`; + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/docs/Sql_script_v1.2.sql b/docs/Sql_script_v1.2.sql new file mode 100644 index 00000000..4acb7589 --- /dev/null +++ b/docs/Sql_script_v1.2.sql @@ -0,0 +1,203 @@ +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema apbaluna +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema apbaluna +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `apbaluna` DEFAULT CHARACTER SET utf8 ; +USE `apbaluna` ; + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Charities` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Charities` ( + `UUID_charities` CHAR(36) NOT NULL, + `org_number` VARCHAR(255) NOT NULL, + `charity_name` VARCHAR(255) NOT NULL, + `charity_description` VARCHAR(255) NOT NULL, + `charity_link` VARCHAR(255) NOT NULL, + `pre_approved` TINYINT NOT NULL, + `status` VARCHAR(255) NOT NULL, + PRIMARY KEY (`UUID_charities`), + UNIQUE INDEX `org_number_UNIQUE` (`org_number` ASC) VISIBLE) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`User` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`User` ( + `UUID_User` CHAR(36) NOT NULL, + `user_name` VARCHAR(255) NOT NULL, + `user_email` VARCHAR(255) NOT NULL, + `role` VARCHAR(45) NOT NULL, + PRIMARY KEY (`UUID_User`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Donations` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Donations` ( + `UUID_Donations` CHAR(36) NOT NULL, + `amount` DECIMAL NOT NULL, + `date` DATE NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_Donations`), + INDEX `fk_Donations_Charities_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Donations_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Donations_Charities` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Donations_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Settings` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Settings` ( + `User_UUID_User` CHAR(36) NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `language` VARCHAR(45) NOT NULL, + `lightmode` TINYINT NOT NULL, + PRIMARY KEY (`User_UUID_User`), + INDEX `fk_Settings_User1_idx` (`User_UUID_User` ASC) VISIBLE, + CONSTRAINT `fk_Settings_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Messages` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Messages` ( + `UUID_message` CHAR(36) NOT NULL, + `message_title` VARCHAR(255) NOT NULL, + `message_content` VARCHAR(255) NOT NULL, + `message_date` DATE NOT NULL, + `sender_user_id` CHAR(36) NULL, + `sender_charity_id` CHAR(36) NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_message`), + INDEX `fk_Messages_User1_idx` (`sender_user_id` ASC) VISIBLE, + INDEX `fk_Messages_Charities1_idx` (`sender_charity_id` ASC) VISIBLE, + INDEX `fk_Messages_User2_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Messages_User1` + FOREIGN KEY (`sender_user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_Charities1` + FOREIGN KEY (`sender_charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_User2` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Feedback` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Feedback` ( + `UUID_feedback` CHAR(36) NOT NULL, + `feedback_comment` VARCHAR(255) NOT NULL, + `feedback_date` DATE NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_feedback`), + INDEX `fk_Feedback_Charities1_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Feedback_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Feedback_Charities1` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Feedback_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Categories` ( + `category_id` INT NOT NULL AUTO_INCREMENT, + `category` VARCHAR(255) NOT NULL, + PRIMARY KEY (`category_id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Charity_Categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Charity_Categories` ( + `Categories_category_id` INT NOT NULL, + `Charities_UUID_charities` CHAR(36) NOT NULL, + PRIMARY KEY (`Categories_category_id`, `Charities_UUID_charities`), + INDEX `fk_Categories_has_Charities_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + INDEX `fk_Categories_has_Charities_Categories1_idx` (`Categories_category_id` ASC) VISIBLE, + CONSTRAINT `fk_Categories_has_Charities_Categories1` + FOREIGN KEY (`Categories_category_id`) + REFERENCES `apbaluna`.`Categories` (`category_id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Categories_has_Charities_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`CharityUsers` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`CharityUsers` ( + `Charities_UUID_charities` CHAR(36) NOT NULL, + `User_UUID_User` CHAR(36) NOT NULL, + PRIMARY KEY (`Charities_UUID_charities`, `User_UUID_User`), + INDEX `fk_Charities_has_User_User1_idx` (`User_UUID_User` ASC) VISIBLE, + INDEX `fk_Charities_has_User_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + CONSTRAINT `fk_Charities_has_User_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Charities_has_User_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; diff --git a/docs/Sql_scriptv1.0.sql b/docs/Sql_scriptv1.0.sql new file mode 100644 index 00000000..529aac8f --- /dev/null +++ b/docs/Sql_scriptv1.0.sql @@ -0,0 +1,213 @@ +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema apbaluna +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema apbaluna +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `apbaluna` DEFAULT CHARACTER SET utf8 ; +USE `apbaluna` ; + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Charities` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Charities` ( + `UUID_charities` CHAR(36) NOT NULL, + `org_number` VARCHAR(255) NOT NULL, + `charity_name` VARCHAR(255) NOT NULL, + `charity_description` VARCHAR(255) NOT NULL, + `charity_link` VARCHAR(255) NOT NULL, + `pre_approved` TINYINT NOT NULL, + `status` VARCHAR(255) NOT NULL, + PRIMARY KEY (`UUID_charities`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`User` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`User` ( + `UUID_User` CHAR(36) NOT NULL, + `user_name` VARCHAR(255) NOT NULL, + `user_email` VARCHAR(255) NOT NULL, + `role` VARCHAR(45) NOT NULL, + PRIMARY KEY (`UUID_User`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Donations` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Donations` ( + `UUID_Donations` CHAR(36) NOT NULL, + `amount` DECIMAL NOT NULL, + `date` DATE NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_Donations`), + INDEX `fk_Donations_Charities_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Donations_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Donations_Charities` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Donations_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Settings` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Settings` ( + `User_UUID_User` CHAR(36) NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `language` VARCHAR(45) NOT NULL, + `lightmode` TINYINT NOT NULL, + PRIMARY KEY (`User_UUID_User`), + INDEX `fk_Settings_User1_idx` (`User_UUID_User` ASC) VISIBLE, + CONSTRAINT `fk_Settings_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Messages` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Messages` ( + `UUID_message` CHAR(36) NOT NULL, + `message_title` VARCHAR(255) NOT NULL, + `message_content` VARCHAR(255) NOT NULL, + `message_date` DATE NOT NULL, + `sender_user_id` CHAR(36) NULL, + `sender_charity_id` CHAR(36) NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_message`), + INDEX `fk_Messages_User1_idx` (`sender_user_id` ASC) VISIBLE, + INDEX `fk_Messages_Charities1_idx` (`sender_charity_id` ASC) VISIBLE, + INDEX `fk_Messages_User2_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Messages_User1` + FOREIGN KEY (`sender_user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_Charities1` + FOREIGN KEY (`sender_charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_User2` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Feedback` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Feedback` ( + `UUID_feedback` CHAR(36) NOT NULL, + `feedback_comment` VARCHAR(255) NOT NULL, + `feedback_date` DATE NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_feedback`), + INDEX `fk_Feedback_Charities1_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Feedback_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Feedback_Charities1` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Feedback_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Categories` ( + `category_id` INT NOT NULL AUTO_INCREMENT, + `category` VARCHAR(255) NOT NULL, + PRIMARY KEY (`category_id`)) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`Charity_Categories` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`Charity_Categories` ( + `Categories_category_id` INT NOT NULL, + `Charities_UUID_charities` CHAR(36) NOT NULL, + PRIMARY KEY (`Categories_category_id`, `Charities_UUID_charities`), + INDEX `fk_Categories_has_Charities_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + INDEX `fk_Categories_has_Charities_Categories1_idx` (`Categories_category_id` ASC) VISIBLE, + CONSTRAINT `fk_Categories_has_Charities_Categories1` + FOREIGN KEY (`Categories_category_id`) + REFERENCES `apbaluna`.`Categories` (`category_id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Categories_has_Charities_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `apbaluna`.`CharityUsers` +-- ----------------------------------------------------- +CREATE TABLE IF NOT EXISTS `apbaluna`.`CharityUsers` ( + `Charities_UUID_charities` CHAR(36) NOT NULL, + `User_UUID_User` CHAR(36) NOT NULL, + PRIMARY KEY (`Charities_UUID_charities`, `User_UUID_User`), + INDEX `fk_Charities_has_User_User1_idx` (`User_UUID_User` ASC) VISIBLE, + INDEX `fk_Charities_has_User_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + CONSTRAINT `fk_Charities_has_User_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Charities_has_User_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) +ENGINE = InnoDB; + +USE `apbaluna`; + +DELIMITER $$ +USE `apbaluna`$$ +CREATE DEFINER = CURRENT_USER TRIGGER `apbaluna`.`User_AFTER_INSERT` AFTER INSERT ON `User` FOR EACH ROW +BEGIN + INSERT INTO apbaluna.Settings (User_UUID_User, isAnonymous, language, lightmode) VALUES (NEW.UUID_User, 0, 'English', 0); +END$$ + + +DELIMITER ; + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; From 5d2a1580c2829d72149031adeb4ef83b3d271284 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 11:59:06 +0200 Subject: [PATCH 036/128] Feat: Updated createTables function to new tables --- .../team6/database/DatabaseManager.java | 245 +++++++++++++++--- 1 file changed, 212 insertions(+), 33 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java index a4007a05..a3bb4af4 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java @@ -62,48 +62,218 @@ public boolean testConnection() { * @throws RuntimeException if a {@link SQLException} occurs while creating the table */ public void createTables() { - String sql_query1 = + String Charities_table = """ -- ----------------------------------------------------- -- Table `HelpMeHelp`.`Charities` -- ----------------------------------------------------- - CREATE TABLE IF NOT EXISTS Charities ( - UUID_charities CHAR(36) PRIMARY KEY, - org_number VARCHAR(255) NOT NULL, - charity_name VARCHAR(255) NOT NULL, - charity_link VARCHAR(255) NOT NULL, - pre_approved TINYINT NOT NULL, - status VARCHAR(255) NOT NULL, - UNIQUE KEY unique_org_number (org_number) - ) ENGINE=InnoDB; - + CREATE TABLE IF NOT EXISTS `apbaluna`.`Charities` ( + `UUID_charities` CHAR(36) NOT NULL, + `org_number` VARCHAR(255) NOT NULL, + `charity_name` VARCHAR(255) NOT NULL, + `charity_description` VARCHAR(255) NOT NULL, + `charity_link` VARCHAR(255) NOT NULL, + `pre_approved` TINYINT NOT NULL, + `status` VARCHAR(255) NOT NULL, + PRIMARY KEY (`UUID_charities`), + UNIQUE INDEX `org_number_UNIQUE` (`org_number` ASC) VISIBLE) + ENGINE = InnoDB; """; - String sql_query2 = + String sql_query3 = """ -- ----------------------------------------------------- -- Table `HelpMeHelp`.`Donations` -- ----------------------------------------------------- - CREATE TABLE IF NOT EXISTS Donations ( + CREATE TABLE IF NOT EXISTS `apbaluna`.`Donations` ( `UUID_Donations` CHAR(36) NOT NULL, `amount` DECIMAL NOT NULL, `date` DATE NOT NULL, - `Charities_UUID_charities` CHAR(36) NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, PRIMARY KEY (`UUID_Donations`), - INDEX `fk_Donations_Charities_idx` (`Charities_UUID_charities` ASC) VISIBLE, + INDEX `fk_Donations_Charities_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Donations_User1_idx` (`user_id` ASC) VISIBLE, CONSTRAINT `fk_Donations_Charities` - FOREIGN KEY (`Charities_UUID_charities`) - REFERENCES Charities (`UUID_charities`) - ON DELETE CASCADE - ON UPDATE CASCADE) + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Donations_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) ENGINE = InnoDB; """; + String sql_query2 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`User` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`User` ( + `UUID_User` CHAR(36) NOT NULL, + `user_name` VARCHAR(255) NOT NULL, + `user_email` VARCHAR(255) NOT NULL, + `role` VARCHAR(45) NOT NULL, + PRIMARY KEY (`UUID_User`)) + ENGINE = InnoDB; + """; + + String sql_query4 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`Settings` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`Settings` ( + `User_UUID_User` CHAR(36) NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `language` VARCHAR(45) NOT NULL, + `lightmode` TINYINT NOT NULL, + PRIMARY KEY (`User_UUID_User`), + INDEX `fk_Settings_User1_idx` (`User_UUID_User` ASC) VISIBLE, + CONSTRAINT `fk_Settings_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + """; + + String sql_query5 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`Messages` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`Messages` ( + `UUID_message` CHAR(36) NOT NULL, + `message_title` VARCHAR(255) NOT NULL, + `message_content` VARCHAR(255) NOT NULL, + `message_date` DATE NOT NULL, + `sender_user_id` CHAR(36) NULL, + `sender_charity_id` CHAR(36) NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_message`), + INDEX `fk_Messages_User1_idx` (`sender_user_id` ASC) VISIBLE, + INDEX `fk_Messages_Charities1_idx` (`sender_charity_id` ASC) VISIBLE, + INDEX `fk_Messages_User2_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Messages_User1` + FOREIGN KEY (`sender_user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_Charities1` + FOREIGN KEY (`sender_charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Messages_User2` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + """; + + String sql_query6 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`Feedback` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`Feedback` ( + `UUID_feedback` CHAR(36) NOT NULL, + `feedback_comment` VARCHAR(255) NOT NULL, + `feedback_date` DATE NOT NULL, + `isAnonymous` TINYINT NOT NULL, + `charity_id` CHAR(36) NOT NULL, + `user_id` CHAR(36) NOT NULL, + PRIMARY KEY (`UUID_feedback`), + INDEX `fk_Feedback_Charities1_idx` (`charity_id` ASC) VISIBLE, + INDEX `fk_Feedback_User1_idx` (`user_id` ASC) VISIBLE, + CONSTRAINT `fk_Feedback_Charities1` + FOREIGN KEY (`charity_id`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Feedback_User1` + FOREIGN KEY (`user_id`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + """; + String sql_query7 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`Categories` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`Categories` ( + `category_id` INT NOT NULL AUTO_INCREMENT, + `category` VARCHAR(255) NOT NULL, + PRIMARY KEY (`category_id`)) + ENGINE = InnoDB; + """; + + String sql_query8 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`Charity_Categories` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`Charity_Categories` ( + `Categories_category_id` INT NOT NULL, + `Charities_UUID_charities` CHAR(36) NOT NULL, + PRIMARY KEY (`Categories_category_id`, `Charities_UUID_charities`), + INDEX `fk_Categories_has_Charities_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + INDEX `fk_Categories_has_Charities_Categories1_idx` (`Categories_category_id` ASC) VISIBLE, + CONSTRAINT `fk_Categories_has_Charities_Categories1` + FOREIGN KEY (`Categories_category_id`) + REFERENCES `apbaluna`.`Categories` (`category_id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Categories_has_Charities_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + """; + + String sql_query9 = + """ + -- ----------------------------------------------------- + -- Table `apbaluna`.`CharityUsers` + -- ----------------------------------------------------- + CREATE TABLE IF NOT EXISTS `apbaluna`.`CharityUsers` ( + `Charities_UUID_charities` CHAR(36) NOT NULL, + `User_UUID_User` CHAR(36) NOT NULL, + PRIMARY KEY (`Charities_UUID_charities`, `User_UUID_User`), + INDEX `fk_Charities_has_User_User1_idx` (`User_UUID_User` ASC) VISIBLE, + INDEX `fk_Charities_has_User_Charities1_idx` (`Charities_UUID_charities` ASC) VISIBLE, + CONSTRAINT `fk_Charities_has_User_Charities1` + FOREIGN KEY (`Charities_UUID_charities`) + REFERENCES `apbaluna`.`Charities` (`UUID_charities`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_Charities_has_User_User1` + FOREIGN KEY (`User_UUID_User`) + REFERENCES `apbaluna`.`User` (`UUID_User`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + """; try (Connection conn = connection.getMySqlConnection(); Statement s = conn.createStatement()) { - s.execute(sql_query1); + s.execute(Charities_table); s.execute(sql_query2); + s.execute(sql_query3); + s.execute(sql_query4); + s.execute(sql_query5); + s.execute(sql_query6); + s.execute(sql_query7); + s.execute(sql_query8); + s.execute(sql_query9); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("Error creating table."); @@ -127,8 +297,8 @@ public void addAPIDataToTable(List charities) { conn.setAutoCommit(false); String sql_query = """ - INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_link, pre_approved, status) - VALUES (?, ?, ?, ?, ?, ?) + INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_description, charity_link, pre_approved, status) + VALUES (?, ?, ?, ?, ?, ?, ?) ON DUPLICATE KEY UPDATE charity_name = VALUES(charity_name), charity_link = VALUES(charity_link), @@ -146,9 +316,10 @@ INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_link, p ps.setString(2, charity.getOrg_number().replaceAll("\\s", "")); ps.setString(3, charity.getName()); - ps.setString(4, charity.getDescription()); - ps.setBoolean(5, charity.getPreApproved()); // Description is the link - ps.setString(6, charity.getStatus()); + ps.setString(4, "Blank until webscraber works"); + ps.setString(5, charity.getDescription()); + ps.setBoolean(6, charity.getPreApproved()); // Description is the link + ps.setString(7, charity.getStatus()); ps.addBatch(); } @@ -159,7 +330,7 @@ INSERT INTO Charities (UUID_charities, org_number, charity_name, charity_link, p String createTemp = """ CREATE TEMPORARY TABLE temp_api_charities ( - org_number VARCHAR(20) PRIMARY KEY + org_number VARCHAR(255) PRIMARY KEY ) """; @@ -180,13 +351,21 @@ org_number VARCHAR(20) PRIMARY KEY } String deleteSql = - """ - DELETE FROM Charities c - WHERE NOT EXISTS ( - SELECT 1 - FROM temp_api_charities t - WHERE t.org_number = c.org_number - ) + """ + DELETE FROM Charities c + WHERE NOT EXISTS ( + SELECT 1 FROM temp_api_charities t + WHERE t.org_number = c.org_number + ) + AND NOT EXISTS ( + SELECT 1 FROM Donations d WHERE d.charity_id = c.UUID_charities + ) + AND NOT EXISTS ( + SELECT 1 FROM Feedback f WHERE f.charity_id = c.UUID_charities + ) + AND NOT EXISTS ( + SELECT 1 FROM CharityUsers cu WHERE cu.Charities_UUID_charities = c.UUID_charities + ); """; try (PreparedStatement ps = conn.prepareStatement(deleteSql)) { From 96eec1d98469bb3c149de577ed074525835ef084 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 12:01:43 +0200 Subject: [PATCH 037/128] Fix: Maven formatting and naming conventions --- helpmehelpapplication/pom.xml | 2 - .../systemutvikling/team6/HmHApplication.java | 4 + .../AvailableOrganizationController.java | 25 +- .../controller/CharityPageController.java | 1 + .../controller/DonationPageController.java | 1 + .../team6/controller/FrontpageController.java | 371 +++++++++--------- .../team6/database/DatabaseManager.java | 36 +- 7 files changed, 220 insertions(+), 220 deletions(-) diff --git a/helpmehelpapplication/pom.xml b/helpmehelpapplication/pom.xml index 1794a9e3..2fdce09e 100644 --- a/helpmehelpapplication/pom.xml +++ b/helpmehelpapplication/pom.xml @@ -111,6 +111,4 @@ - - \ No newline at end of file diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java index 293aa2da..2a8903ab 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java @@ -17,6 +17,7 @@ public class HmHApplication extends Application { @Override public void start(Stage stage) throws Exception { + /* FXMLLoader fxmlLoader = new FXMLLoader(HmHApplication.class.getResource("/fxml/frontPage.fxml")); Scene scene = new Scene(fxmlLoader.load()); @@ -31,6 +32,8 @@ public void start(Stage stage) throws Exception { stage.setFullScreen(true); stage.show(); + */ + } @Override @@ -59,6 +62,7 @@ public void init() { } catch (Exception e) { e.printStackTrace(); } + System.out.println("-- \n Init complete \n --"); } public static void main(String[] args) { diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java index 5f7a569f..e2c7abdc 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java @@ -15,12 +15,11 @@ /** * This controller represents the available organization page, where the user can search for a - * charity and choose to donate to it. It also has a button to return to the front page. - * The user can search for a charity by typing in the search field, - * and the charities that match the search query will be displayed. - * The user can click on a charity to see more details about it, - * or click on the featured charity to see more details about it. - * The user can also switch to the charity page or donation page for the selected charity. + * charity and choose to donate to it. It also has a button to return to the front page. The user + * can search for a charity by typing in the search field, and the charities that match the search + * query will be displayed. The user can click on a charity to see more details about it, or click + * on the featured charity to see more details about it. The user can also switch to the charity + * page or donation page for the selected charity. */ public class AvailableOrganizationController { @@ -31,12 +30,11 @@ public class AvailableOrganizationController { private List allCharities; /** - * This method is used to initialize the available organization page. - * It retrieves all charities from the database and sets up a listener on the search field - * to filter the charities based on the user's input. - * It also clears the cards container to prepare for displaying the filtered charities. - * The method is called automatically when the page is loaded, - * and it sets up the initial state of the page. + * This method is used to initialize the available organization page. It retrieves all charities + * from the database and sets up a listener on the search field to filter the charities based on + * the user's input. It also clears the cards container to prepare for displaying the filtered + * charities. The method is called automatically when the page is loaded, and it sets up the + * initial state of the page. */ @FXML public void initialize() { @@ -54,6 +52,7 @@ public void initialize() { /** * This method filters the charities based on the user's input in the search field. + * * @param query is the user's input in the search field, which is used to filter the charities. * @return a list of charities that match the search query. */ @@ -79,6 +78,7 @@ private List filterCharities(String query) { /** * This method displays the charities in the cards container. + * * @param charities is a list of charities to be displayed. */ private void displayCharities(List charities) { @@ -101,6 +101,7 @@ private void displayCharities(List charities) { /** * This method is used to set the initial search query in the search field. + * * @param query is the initial search query. */ @FXML diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java index de2e43e2..b52064f6 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java @@ -64,6 +64,7 @@ public void switchToDonationPage(ActionEvent event) { /** * This method is used to search for charities based on the input in the search field. + * * @param event is the event that triggered the search. */ @FXML diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java index dc7e0d8d..0ce757fa 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java @@ -135,6 +135,7 @@ private void showAlert(Alert.AlertType type, String title, String message) { /** * This method is used to handle the search action when the user clicks the search button. + * * @param event is the event that triggered the search. */ @FXML diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java index 2abff0be..f91877ca 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java @@ -4,7 +4,6 @@ import java.util.ArrayList; import java.util.List; import java.util.Random; - import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; @@ -27,198 +26,194 @@ * to the charity page and the donation page for the featured charity */ public class FrontpageController { - @FXML - private Charity featuredCharity; - @FXML - private FlowPane cardsContainer; - @FXML - private Label Carosel_Organisasjon; - @FXML - private Label Carosel_Beskrivelse; - @FXML - private Label Total_Orgnisasjon; - @FXML - private Label Total_Donations; - @FXML - private Label PreApproved_Percentage; - @FXML - private TextField frontSearchField; - @FXML - private CheckBox verifiedFilter; - @FXML - private CheckBox childrenFilter; - @FXML - private CheckBox healthFilter; - @FXML - private CheckBox emergencyAidFilter; - - private List allCharities = new ArrayList<>(); - - /** - * Initialize method for the front page. This method is called when the front page is loaded. It - * retrieves the list of charities and donations from the database. The list of charities is - * displayed as a list of cards, where each card represents a charity from the - * Innsamlingskontrollen. A random charity is selected to be featured on the page, and its name - * and description are displayed in the carousel section. The total number of charities, total - * amount of donations, and percentage of pre-approved charities are also displayed on the page. - */ - @FXML - public void initialize() { - try { - DatabaseManager db = new DatabaseManager(); - CharityRegistry charities = db.getCharitiesFromDB(); - DonationRegistry donations = db.getDonationFromDB(); - - allCharities = new ArrayList<>(charities.getAllCharities()); - displayCharities(allCharities); - - int charitiesSize = charities.getAllCharities().size(); - Random random = new Random(); - int randomIndex = random.nextInt(charitiesSize); - Charity randomCharity = charities.getAllCharities().get(randomIndex); - - this.featuredCharity = randomCharity; - Carosel_Organisasjon.setText(randomCharity.getName()); - Carosel_Beskrivelse.setText(randomCharity.getDescription()); - - Total_Orgnisasjon.setText(Integer.toString(charitiesSize)); - Total_Donations.setText( - Double.toString( - donations.getAllDonations().stream().mapToDouble(Donation::getAmount).sum())); - PreApproved_Percentage.setText( - String.format( - "%.2f", - charities.getAllCharities().stream().filter(Charity::getPreApproved).count() - * 100.0 - / charitiesSize) - + "%"); - } catch (Exception e) { - e.printStackTrace(); - } - } - - - /** - * This method is used to switch to the charity page for the selected charity - * - * @param event - */ - public void switchToCharityPage(ActionEvent event) { - LoaderScene.LoadScene("CharityPage", event, featuredCharity, null); - } - - /** - * This method is used to switch to the donation page for the selected charity. - * - * @param event - */ - public void switchToDonationPage(ActionEvent event) { - LoaderScene.LoadScene("DonationPage", event, featuredCharity, null); - } - - /** - * This method is used to filter the charities based on the selected filters. - * @param event is the event that triggered the filter. - */ - @FXML - public void handleCategoryFilterChange(ActionEvent event) { - displayCharities(getFilteredCharities()); + @FXML private Charity featuredCharity; + @FXML private FlowPane cardsContainer; + @FXML private Label Carosel_Organisasjon; + @FXML private Label Carosel_Beskrivelse; + @FXML private Label Total_Orgnisasjon; + @FXML private Label Total_Donations; + @FXML private Label PreApproved_Percentage; + @FXML private TextField frontSearchField; + @FXML private CheckBox verifiedFilter; + @FXML private CheckBox childrenFilter; + @FXML private CheckBox healthFilter; + @FXML private CheckBox emergencyAidFilter; + + private List allCharities = new ArrayList<>(); + + /** + * Initialize method for the front page. This method is called when the front page is loaded. It + * retrieves the list of charities and donations from the database. The list of charities is + * displayed as a list of cards, where each card represents a charity from the + * Innsamlingskontrollen. A random charity is selected to be featured on the page, and its name + * and description are displayed in the carousel section. The total number of charities, total + * amount of donations, and percentage of pre-approved charities are also displayed on the page. + */ + @FXML + public void initialize() { + try { + DatabaseManager db = new DatabaseManager(); + CharityRegistry charities = db.getCharitiesFromDB(); + DonationRegistry donations = db.getDonationFromDB(); + + allCharities = new ArrayList<>(charities.getAllCharities()); + displayCharities(allCharities); + + int charitiesSize = charities.getAllCharities().size(); + Random random = new Random(); + int randomIndex = random.nextInt(charitiesSize); + Charity randomCharity = charities.getAllCharities().get(randomIndex); + + this.featuredCharity = randomCharity; + Carosel_Organisasjon.setText(randomCharity.getName()); + Carosel_Beskrivelse.setText(randomCharity.getDescription()); + + Total_Orgnisasjon.setText(Integer.toString(charitiesSize)); + Total_Donations.setText( + Double.toString( + donations.getAllDonations().stream().mapToDouble(Donation::getAmount).sum())); + PreApproved_Percentage.setText( + String.format( + "%.2f", + charities.getAllCharities().stream().filter(Charity::getPreApproved).count() + * 100.0 + / charitiesSize) + + "%"); + } catch (Exception e) { + e.printStackTrace(); } - - /** - * This method is used to search for charities based on the input in the search field. - * @param event is the event that triggered the search. - */ - @FXML - public void handleFrontSearch(ActionEvent event) { - String query = frontSearchField.getText().trim(); - - if (query.isEmpty()) { - return; - } - - LoaderScene.LoadScene("availableOrganization", event, null, query); + } + + /** + * This method is used to switch to the charity page for the selected charity + * + * @param event + */ + public void switchToCharityPage(ActionEvent event) { + LoaderScene.LoadScene("CharityPage", event, featuredCharity, null); + } + + /** + * This method is used to switch to the donation page for the selected charity. + * + * @param event + */ + public void switchToDonationPage(ActionEvent event) { + LoaderScene.LoadScene("DonationPage", event, featuredCharity, null); + } + + /** + * This method is used to filter the charities based on the selected filters. + * + * @param event is the event that triggered the filter. + */ + @FXML + public void handleCategoryFilterChange(ActionEvent event) { + displayCharities(getFilteredCharities()); + } + + /** + * This method is used to search for charities based on the input in the search field. + * + * @param event is the event that triggered the search. + */ + @FXML + public void handleFrontSearch(ActionEvent event) { + String query = frontSearchField.getText().trim(); + + if (query.isEmpty()) { + return; } - /** - * This method is used to filter the charities based on the selected filters. - * @return a list of filtered charities. - */ - private List getFilteredCharities() { - if (!verifiedFilter.isSelected() - && !childrenFilter.isSelected() - && !healthFilter.isSelected() - && !emergencyAidFilter.isSelected()) { - return allCharities; - } - - List filteredCharities = new ArrayList<>(); - for (Charity charity : allCharities) { - if (matchesSelectedFilters(charity)) { - filteredCharities.add(charity); - } - } - return filteredCharities; + LoaderScene.LoadScene("availableOrganization", event, null, query); + } + + /** + * This method is used to filter the charities based on the selected filters. + * + * @return a list of filtered charities. + */ + private List getFilteredCharities() { + if (!verifiedFilter.isSelected() + && !childrenFilter.isSelected() + && !healthFilter.isSelected() + && !emergencyAidFilter.isSelected()) { + return allCharities; } - /** - * This method is used to check if a charity matches the selected filters. - * @param charity is the charity to be checked. - * @return true if the charity matches the selected filters, false otherwise. - */ - private boolean matchesSelectedFilters(Charity charity) { - return (verifiedFilter.isSelected() && charity.getPreApproved()) - || (childrenFilter.isSelected() && matchesKeywordCategory(charity, "children")) - || (healthFilter.isSelected() && matchesKeywordCategory(charity, "health")) - || (emergencyAidFilter.isSelected() && matchesKeywordCategory(charity, "emergency")); + List filteredCharities = new ArrayList<>(); + for (Charity charity : allCharities) { + if (matchesSelectedFilters(charity)) { + filteredCharities.add(charity); + } } - - /** - * This method is used to check if a charity matches a specific category. - * @param charity is the charity to be checked. - * @param category is the category to check against. - * @return true if the charity matches the category, false otherwise. - */ - private boolean matchesKeywordCategory(Charity charity, String category) { - String text = (charity.getName() + " " + charity.getDescription()).toLowerCase(); - - return switch (category) { - case "children" -> text.contains("child") - || text.contains("children") - || text.contains("barn") - || text.contains("youth") - || text.contains("young"); - case "health" -> text.contains("health") - || text.contains("medical") - || text.contains("helse") - || text.contains("hospital") - || text.contains("care"); - case "emergency" -> text.contains("emergency") - || text.contains("relief") - || text.contains("crisis") - || text.contains("aid") - || text.contains("disaster"); - default -> false; - }; - } - - /** - * This method is used to display the charities in the cards container. - * @param charities is the list of charities to be displayed. - */ - private void displayCharities(List charities) { - cardsContainer.getChildren().clear(); - - for (Charity charity : charities) { - try { - FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/organizationCard.fxml")); - Parent card = loader.load(); - OrganizationCardController cardController = loader.getController(); - cardController.setOrganization(charity); - cardsContainer.getChildren().add(card); - } catch (IOException e) { - throw new RuntimeException("Could not load organization card.", e); - } - } + return filteredCharities; + } + + /** + * This method is used to check if a charity matches the selected filters. + * + * @param charity is the charity to be checked. + * @return true if the charity matches the selected filters, false otherwise. + */ + private boolean matchesSelectedFilters(Charity charity) { + return (verifiedFilter.isSelected() && charity.getPreApproved()) + || (childrenFilter.isSelected() && matchesKeywordCategory(charity, "children")) + || (healthFilter.isSelected() && matchesKeywordCategory(charity, "health")) + || (emergencyAidFilter.isSelected() && matchesKeywordCategory(charity, "emergency")); + } + + /** + * This method is used to check if a charity matches a specific category. + * + * @param charity is the charity to be checked. + * @param category is the category to check against. + * @return true if the charity matches the category, false otherwise. + */ + private boolean matchesKeywordCategory(Charity charity, String category) { + String text = (charity.getName() + " " + charity.getDescription()).toLowerCase(); + + return switch (category) { + case "children" -> + text.contains("child") + || text.contains("children") + || text.contains("barn") + || text.contains("youth") + || text.contains("young"); + case "health" -> + text.contains("health") + || text.contains("medical") + || text.contains("helse") + || text.contains("hospital") + || text.contains("care"); + case "emergency" -> + text.contains("emergency") + || text.contains("relief") + || text.contains("crisis") + || text.contains("aid") + || text.contains("disaster"); + default -> false; + }; + } + + /** + * This method is used to display the charities in the cards container. + * + * @param charities is the list of charities to be displayed. + */ + private void displayCharities(List charities) { + cardsContainer.getChildren().clear(); + + for (Charity charity : charities) { + try { + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/organizationCard.fxml")); + Parent card = loader.load(); + OrganizationCardController cardController = loader.getController(); + cardController.setOrganization(charity); + cardsContainer.getChildren().add(card); + } catch (IOException e) { + throw new RuntimeException("Could not load organization card.", e); + } } + } } diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java index a3bb4af4..20972b29 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java @@ -62,7 +62,7 @@ public boolean testConnection() { * @throws RuntimeException if a {@link SQLException} occurs while creating the table */ public void createTables() { - String Charities_table = + String charitiesTable = """ -- ----------------------------------------------------- -- Table `HelpMeHelp`.`Charities` @@ -80,7 +80,7 @@ PRIMARY KEY (`UUID_charities`), ENGINE = InnoDB; """; - String sql_query3 = + String donationsTable = """ -- ----------------------------------------------------- -- Table `HelpMeHelp`.`Donations` @@ -106,7 +106,7 @@ FOREIGN KEY (`user_id`) ON UPDATE NO ACTION) ENGINE = InnoDB; """; - String sql_query2 = + String userTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`User` @@ -120,7 +120,7 @@ PRIMARY KEY (`UUID_User`)) ENGINE = InnoDB; """; - String sql_query4 = + String settingsTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`Settings` @@ -140,7 +140,7 @@ FOREIGN KEY (`User_UUID_User`) ENGINE = InnoDB; """; - String sql_query5 = + String messagesTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`Messages` @@ -175,7 +175,7 @@ FOREIGN KEY (`user_id`) ENGINE = InnoDB; """; - String sql_query6 = + String feedbackTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`Feedback` @@ -202,7 +202,7 @@ FOREIGN KEY (`user_id`) ON UPDATE NO ACTION) ENGINE = InnoDB; """; - String sql_query7 = + String categoriesTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`Categories` @@ -214,7 +214,7 @@ PRIMARY KEY (`category_id`)) ENGINE = InnoDB; """; - String sql_query8 = + String charityCategoriesTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`Charity_Categories` @@ -238,7 +238,7 @@ FOREIGN KEY (`Charities_UUID_charities`) ENGINE = InnoDB; """; - String sql_query9 = + String charityUserTable = """ -- ----------------------------------------------------- -- Table `apbaluna`.`CharityUsers` @@ -265,15 +265,15 @@ FOREIGN KEY (`User_UUID_User`) try (Connection conn = connection.getMySqlConnection(); Statement s = conn.createStatement()) { - s.execute(Charities_table); - s.execute(sql_query2); - s.execute(sql_query3); - s.execute(sql_query4); - s.execute(sql_query5); - s.execute(sql_query6); - s.execute(sql_query7); - s.execute(sql_query8); - s.execute(sql_query9); + s.execute(charitiesTable); + s.execute(userTable); + s.execute(donationsTable); + s.execute(settingsTable); + s.execute(messagesTable); + s.execute(feedbackTable); + s.execute(categoriesTable); + s.execute(charityCategoriesTable); + s.execute(charityUserTable); } catch (SQLException e) { e.printStackTrace(); throw new RuntimeException("Error creating table."); From 9457c264778b24f6c252a496afab32d8017bfcab Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 12:39:27 +0200 Subject: [PATCH 038/128] Fix: Better coding convention --- .../java/ntnu/systemutvikling/team6/HmHApplication.java | 7 +++++-- .../team6/controller/AvailableOrganizationController.java | 4 +++- .../team6/controller/FrontpageController.java | 4 +++- 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java index 2a8903ab..74bb73cd 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java @@ -9,6 +9,7 @@ import javafx.scene.Scene; import javafx.scene.image.Image; import javafx.stage.Stage; +import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.database.DatabaseManager; import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.models.CharityRegistry; @@ -40,7 +41,8 @@ public void start(Stage stage) throws Exception { public void init() { /* Test and create tables to MySQL if ain't any */ try { - DatabaseManager db = new DatabaseManager(); + DatabaseConnection conn = new DatabaseConnection(); + DatabaseManager db = new DatabaseManager(conn); db.testConnection(); db.createTables(); } catch (Exception e) { @@ -50,7 +52,8 @@ public void init() { try { HttpClient https = HttpClient.newHttpClient(); APICharityScraper scraper = new APICharityScraper(https); - DatabaseManager db = new DatabaseManager(); + DatabaseConnection conn = new DatabaseConnection(); + DatabaseManager db = new DatabaseManager(conn); if (scraper.checkConnection()) { CharityRegistry charityRegistry = scraper.parseJSON(scraper.getJSONData()); diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java index e2c7abdc..1d74e24c 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java @@ -9,6 +9,7 @@ import javafx.scene.Parent; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; +import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.database.DatabaseManager; import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.models.CharityRegistry; @@ -38,7 +39,8 @@ public class AvailableOrganizationController { */ @FXML public void initialize() { - DatabaseManager db = new DatabaseManager(); + DatabaseConnection conn = new DatabaseConnection(); + DatabaseManager db = new DatabaseManager(conn); CharityRegistry charities = db.getCharitiesFromDB(); allCharities = charities.getAllCharities(); diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java index f91877ca..1cad4ebf 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java @@ -12,6 +12,7 @@ import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; +import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.database.DatabaseManager; import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.models.CharityRegistry; @@ -52,7 +53,8 @@ public class FrontpageController { @FXML public void initialize() { try { - DatabaseManager db = new DatabaseManager(); + DatabaseConnection conn = new DatabaseConnection(); + DatabaseManager db = new DatabaseManager(conn); CharityRegistry charities = db.getCharitiesFromDB(); DonationRegistry donations = db.getDonationFromDB(); From a13676db14ccdb2fe2634480937e97a10ce837d2 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 12:39:49 +0200 Subject: [PATCH 039/128] Fix: Better coding convention --- docs/ER-Diagram v4.png | Bin 101459 -> 101502 bytes .../team6/DAO/DonationDAOTest.java | 3 ++- .../team6/database/DatabaseManagerTest.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/ER-Diagram v4.png b/docs/ER-Diagram v4.png index 225aaf5a4ba24b4c29de0c7f5998a4607e75742f..e031b2145c34a8cceb9ff092d02c8b43d62bce3e 100644 GIT binary patch literal 101502 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%0Ah{bKL1pj}}zJnJh%fom~9NMG@@ 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 diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/DAO/DonationDAOTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/DAO/DonationDAOTest.java index d3522ed3..b0f1accd 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/DAO/DonationDAOTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/DAO/DonationDAOTest.java @@ -17,7 +17,8 @@ class DonationDAOTest { @BeforeEach void setUp() { - DatabaseManager manager = new DatabaseManager(); + DatabaseConnection conn = new DatabaseConnection(); + DatabaseManager manager = new DatabaseManager(conn); manager.createTables(); charity = new Charity("123456", "https://test.org", "Test Charity", true, "approved"); diff --git a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java index 086ed696..25c214ef 100644 --- a/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java +++ b/helpmehelpapplication/src/test/java/ntnu/systemutvikling/team6/database/DatabaseManagerTest.java @@ -15,7 +15,8 @@ class DatabaseManagerTest { @BeforeEach public void setUp() throws SQLException { - this.dbManager = new DatabaseManager(); + DatabaseConnection conn = new DatabaseConnection(); + this.dbManager = new DatabaseManager(conn); } // Make sure you're connected to the NTNU network for this to work From 48b223576f5620802ad25828eeba2788b2ed6e70 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 12:40:41 +0200 Subject: [PATCH 040/128] On hold: Trying to implement feedback getter-method for database. Doesn't work until user is implemented. On hold. --- .../team6/database/DatabaseManager.java | 40 ++++++++++++++++--- .../systemutvikling/team6/models/Charity.java | 10 +++++ .../team6/models/Feedback.java | 24 +++++++++-- 3 files changed, 65 insertions(+), 9 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java index 20972b29..e72fc5d1 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java @@ -1,12 +1,11 @@ package ntnu.systemutvikling.team6.database; import java.sql.*; +import java.util.ArrayList; import java.util.List; import java.util.UUID; -import ntnu.systemutvikling.team6.models.Charity; -import ntnu.systemutvikling.team6.models.CharityRegistry; -import ntnu.systemutvikling.team6.models.Donation; -import ntnu.systemutvikling.team6.models.DonationRegistry; + +import ntnu.systemutvikling.team6.models.*; import ntnu.systemutvikling.team6.scraper.APICharityData; /** @@ -25,8 +24,8 @@ public class DatabaseManager { * Contractor for DatabaseManager. It uses a DatabaseConnection object that contains a connection * credentials. */ - public DatabaseManager() { - this.connection = new DatabaseConnection(); + public DatabaseManager(DatabaseConnection connection) { + this.connection = connection; } /** @@ -475,4 +474,33 @@ public DonationRegistry getDonationFromDB() { } return registry; } + public ArrayList getFeedbackforChairty(Charity charity){ + ArrayList Feedbacks = new ArrayList<>(); + Connection conn = null; + try { + conn = connection.getMySqlConnection(); + String sql_query = + """ + SELECT + * + FROM Feedback f + WHERE f.charity_id = ?; + """; + PreparedStatement stmt = conn.prepareStatement(sql_query); + stmt.setString(1, charity.getUUID().toString()); + ResultSet rs = stmt.executeQuery(sql_query); + + while (rs.next()){ + Feedback feedback = new Feedback( + + ) + } + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException(e); + } finally { + conn = null; + } + return Feedbacks + } } diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java index d97d9968..eaae8825 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Charity.java @@ -123,4 +123,14 @@ public void setVerified() { public void setUnverified() { this.status = "Veto"; } + + /** + * Set method for feedbacks. + * Primarily will be used to set feedbacks taken from database. + * + * @param feedbacks + */ + public void setFeedbacks(ArrayList feedbacks){ + this.feedbacks = feedbacks; + } } diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Feedback.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Feedback.java index 490c47e6..2f167c89 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Feedback.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/Feedback.java @@ -1,6 +1,8 @@ package ntnu.systemutvikling.team6.models; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.Date; import java.util.UUID; import ntnu.systemutvikling.team6.models.user.User; @@ -15,7 +17,7 @@ public class Feedback { private String comment; /* The date and time when the feedback was given */ - private LocalDateTime date; + private LocalDate date; /* Is the feedback given anonymously? */ private boolean isAnonymous; @@ -30,7 +32,23 @@ public Feedback(User user, String comment) { this.feedbackId = UUID.randomUUID(); this.user = user; this.comment = comment; - this.date = LocalDateTime.now(); + this.date = LocalDate.now(); + + this.isAnonymous = user.getSettings().isAnonymous(); + } + + /** + * Constructor for creating a new feedback, based on getting the data from DATABASE. + * + * @param user The user who gives the feedback. + * @param comment The content of the feedback. + */ + public Feedback(User user_id, String feedback_comment, LocalDate feedback_date) { + + this.feedbackId = UUID.randomUUID(); + this.user = user; + this.comment = comment; + this.date = feedback_date; this.isAnonymous = user.getSettings().isAnonymous(); } @@ -48,7 +66,7 @@ public String getComment() { return comment; } - public LocalDateTime getDate() { + public LocalDate getDate() { return date; } From 83f5f2d62e9d2761aa747642108783c86fcc6792 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 12:46:05 +0200 Subject: [PATCH 041/128] Feat: UserRegistry added --- .../team6/models/UserRegistry.java | 39 ++++++++++++++++++- 1 file changed, 38 insertions(+), 1 deletion(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/UserRegistry.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/UserRegistry.java index 514cbec1..3035d482 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/UserRegistry.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/UserRegistry.java @@ -1,3 +1,40 @@ package ntnu.systemutvikling.team6.models; -public class UserRegistry {} +import ntnu.systemutvikling.team6.models.user.User; + +import java.util.*; + +public class UserRegistry { + private final List Users; + + public UserRegistry() { + this.Users = new ArrayList<>(); + } + + public List getAllUsers() { + return Collections.unmodifiableList(Users); + } + + public Optional findUserById(UUID userUUID) { + if (userUUID == null) { + throw new IllegalArgumentException("DonationId can not be null."); + } + return Users.stream() + .filter(u -> userUUID.equals(u.getId())) + .findFirst(); + } + + public void addUser(User user) { + if (user == null) { + throw new IllegalArgumentException("Donation can not be null."); + } + Users.add(user); + } + + public boolean removeUserByUUID(UUID userUUID) { + if (userUUID == null) { + throw new IllegalArgumentException("DonationId can not be null."); + } + return Users.removeIf(user -> userUUID.equals(user.getId())); + } +} From b6369e958278d4a8baf9cde7c349171a5400dd2f Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 13:12:28 +0200 Subject: [PATCH 042/128] Feat: User password field added (whoops) --- docs/ER-Diagram v4.png | Bin 101502 -> 103822 bytes docs/ER-DiagramFile.mwb | Bin 16534 -> 16584 bytes docs/ER-DiagramFile.mwb.bak | Bin 16420 -> 16534 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/ER-Diagram v4.png b/docs/ER-Diagram v4.png index e031b2145c34a8cceb9ff092d02c8b43d62bce3e..bffbaf8ac4292e8b49a52934edebf3771ef0e7aa 100644 GIT binary patch delta 71996 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

$obShFc#50cjDC6hykaJEcpyk?w978fg&$ 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

$?;DqiqV^1TVDq}r7uLpKNq7$#b z6RvBRb&qPL#*_IX(!j~Ym}dGWvG4bXQ{|pO=_+9woB1YP4HMzc4?14=PSSH%4)Wk; z5Q}a134aT@<_R6}_DO4m4F!hV-LCOq&{3Nb9hDi!TFb!4r7&0Y zjXpSk9xgRC8CCDGKKAciXadwyx!cT?Uek}H1mcLObhuEQ3&l%+dS{4nZ*@S+%G;J0 zC|7Uk0t99lT@tIyC~0J!_L3_<{qaL~@9V9PI#;ngMAD7$BCD!dE-d9Jf8Z3e4#rc` z7>*7dCmU&!amcn2a-pVEBum@=M$}z+Naudo({Ph%pWx?h7K|WihXH~jsDAisZK|#+ zBLt52c3EIHq2*2>hBlUrCoijv@rMpsoR;!!az)o96AWx8Yn7y1S$vNyjhS{=HJ`g2 z{KhbWI^C8SM7DNC-L#P6-s<$jZ0#3omLvVs-N1EB=TCdT!5aVO`YtlIXg7`iDk2My zQ-hYDc0Fky$FS_UkvRY^&WbzsR8c*HJ_{@+h-RX+QC@?AXYHe&%M@R@iJ@--Ibx>q ze6?P65(#4tB~p(1a((tfyj+MR)fB4+>W8VVi@*83dEzg8ABOB^DEdYqRbJm1Go0?_ zOtiEWtj%-z&rB0nl!fGkU;giSqbtJK2kCX7%yd0>R6jH8b*sQ%k zWJ!ru&78u@T2sDeb`;YpZvE3~zD^|fg<(3)JC`Y~tMcV_tl&pE20;W_De@ zk#$QP#@W54OUB|AI42}+(`)1trIjYq{?N!})a@f7tmn5SG>mq+M%Gmdg3hlY8b+<- zY->}d=2^sx4CJ%L^dBkdWfHAT#fyx1k?+gr&=r6R6PQuA`T;;h%MjUkbC1hDB4B1Q z({>-HJ)_l0&wTgh^KsX@0@=|to<+Z$y7B535xX0NX!D++v(E7fsM%ONbzjIR5FD=i zi}L>6&OfJwk%#qHXY`~^lJ|F~rr9wEn{*uC>UuvqWCeMhLx%yVn9^stzOWC$j%L(Z z02N~3-^MWe6d2|Bc0E|fePnF2=0&f<-+@Ouow&YJp>^w#8QHP$&T zc;%b-Y_Z_SWJAd?J?D$uoAt9#5mW#oWx}3vVkk^0h~% z?xw2 zJZm@6ebI#~sfD-Ud*VYO9^KELyO(7C!@Rd+=jpg2eg~m-iP7`v_nA+?h!F66+t#(6 zuspzGt2dNn&@8f)l5{Z*Jn`R0X4yc>9#8HDe=DJHKR*oR+-&o(;?ia`B14*p1fE+@ z;)fi3T@{m0B^F!UPJ47&5B~u5Wjg1ZKF6Dwq+j#gOnw%`@mPG@#a*@vt0eW8z(M!! zxTIDw)zQ^$^mN3}Uv{ra^aNtod1WRfOAj7y*&X5w4LB+sV^zU?KAY!tOVc`w04gpG zX#Ywr0%;aE1>L%zz7k?ExqSB@cK;~!$;NfdP{(+;OXf0oZnOT8^?2ms2l}j&@;BPo z-G%P!-ue^;cp+e?O$)!#k^gw>ToQ*#BgAmO#|pjiLzyLq3-`- zj``(y_%&)S!|fIv9wh5>jv>^9^NgqT3F|s9gOh6-ovH|>>xb;T7MjJcLGSxHgY_r9 z?aH2=A1_L>fVK|5vf*UukjU;4}LhKq6Y1q(G=xGl5m1X<3J*R&^w z`hC^H*+ul1+JX8XhBvLUsN~iHX3Q^&n&cyS7O+K3`&xR4IYBovcbV%N#4$R^v05qP z%-2SbJOyS%4iHc7&PoV^g#@q7Dbfgyg%A*Q-!@Vj2CnA*n5DLh$lmD?IL#azX=!2@ zmDeWN-OVgFG@REBUsGSReLh|vWUSw}IzcYyqMy%krem@r%YT@pmwGpNu1Fj+Fp>jQWks52X+Mv(HmvrxdD?WhYtjyA%TV4DYt9;e$8C{CM_BJ zzvt6upgKObTo*chlpw+McD%d{sYmIeM1=kt6V#>u@NhF@#!ii>rxssz$SOtRv$Jq6 zgI6Si_Vvrk6(lX+VEWPdJn`=qsxv(*vEp$L06ofy>f$l;R8e*LJ7K(q42_r%`~3Gl z_xSg$X;+?2`t{Q8xAo7r`(&1+w@w5UhxuoQVY`(KcVprAYWXXCWR+J|9zB<3TU>8r zy=hg^FCP$tN#Dv>&a8i-K-Ghij3Ubh30% zo0k-Eah_u83w^4wz2uV0FXvT)7~qu2?owzfhF&AgLSb&gqifz3cAANse7GVG>oU{2 znsWPRJVR^GDto`oxAtHz_#74WFa2vJ;O`=@SDo8zh-ywY6uCB2TeZW!R-R4vfKpkk z5)4^RT%yxX9N{D!9ChgT&JRvwonMH#4BE2#Uw`hlSka`wj)c?6qRA}H6*H)CS$A*r z^|>hE;>cX6*eri?H8;2Kc@x;Z_I+ectv?;Xvq+sGEP&vtu9jA*b~sU;4ttA%2f)f# zX2La7xgW50Q|#}gtmJK2+PzU3ka(&W#0!yiOBG9|bgJBl>oSMNt*xWs6lqr9~_oA^IkF~^ZiowT&uM;PjJ>ug5Ybf8tZWRp`5Hj=t|!i(4S2#T|HH%#XxomQ8vr4e#5sH( zoBO$KU!`6{oub;dDI{V)_)*4^w;B#tI>N_LT_tvqQ45amJJ9Z<<{4=EwRIh*rwWcg z9^;g>ExrCATpVXl`}$j3<`6B?(?y2HuzT6^Lzf)!`(L+N5mVs+N8)1R&pSc-7UNn0 z>u>TE#-=|f@Tz~p0q1C(_`k4azgyz{tflQOthq``N9Hgas4ro7I#N8d@L#WAKi44P zKjFp1Jl_e}u~M1wNWp5O5I$LS_Q^a((6XODOq2^rTmvU_yX#@p)jOVFPU7S5!eWIH zJ|*Y#5hv$%{82Gx#21PfsCC8wnJ$3{%ON+6S$@PD*mScC;4V{(_iFAY#1MD0Z=l}4 z?pc3p`#!gO{F+@G96vk-AHR-5ZwR#C*gfx#EI&3bnFW5IDBuuzrnIo+i$aU={`fO@ zKpWBk@(^23$4~b|BoYM3ryNAT>}m>Bzw=mF9ErTkTJQ23Be>(mb}->uEoK_o0+>YkCq1I*~S26U_?rwejsWru+$gV(6@T0O4yNqn@(R#Y(9$fpK9pG!dnX>xrQ@Ew}FUe9elkd~*gETft=G4w}sr^+6 zWwEs$PCd24n8x2j;g?T{Rht}R0oCe)to<)PuI}3%TTv(0qt8oCmEg%qgGYt_cSw(a z--(1oaY0U$8BPcSHB>nk^!q*x@va_GR8|Q@ieL=!YeXzA@CRa!$*cdm(^E(hOsdav z*^cgph)6MsBR`2Dj$ZhJjhjtJg(4y&fvy>sY$yUS$YkmSBB?O<-V&9%Gdp$Wzy6i=H+2^_1qJ=gyEq}_%_5qu;D zk_R;&`+NRF#X??%cQ>E*uw=N3L;cZ_DJC(6?}%a3imCjD@c1|JTyJIefKV`RPh=7k z+)XRL_mg|bWma;4B`1Tlj)BKTbH5zl5~;YMk6vkG}ZQ3D+D*I}B*tYAIl5XH{ENt^8!j3gt{K#9{^@HKu zQAiGqa7CN_Hc@?FoK1NMgrvJv;)tVH2wxUzXjRR@A_q+U7}KKvh-YX%U&>lG{2t|e zEfH4i1a=~GDXsKilORnGEfM#}aWoQ+_522bnshZ0h@HTqw#hq&qIX>gfg1t}dRH2q z9h@^3EVW8H%m)5+-f00c7_fcU-hyci);?YHzTb=9B~<9eE7l(Ywr%5mW4o_Ri`EXu z7KB6=D<{L%#F=f&=FLRJ-^7+t#12)P#N!4lnnK~C)=%v1?ajLur`q%LJD4N>`s#ey zAk;TYs8+G_HNr%d8pbWDbu8zt!-8<_Emg`ZBucuN(Bh0c;2&RbSW^4Qn*O*0%k|?1f=ph9z?|5E@f1SEIABJ9Hf`v&X7k zD|HFP(k2?F#{IB<@Flo;auhj%@8`i#m(V zWyE>@Dk#B^v9dR)pF)*njh0=o6SdQqaFBZcN*yJ)rOFR*_n*EUMrKS*j0p}_5)n7A zGmNE5GQn5q16oxnld0*UAXTr|Y-d`U)gh3SVLB~~rD?X}eFtRswp04LuU5aSDpI9q zv;q_*I3LD-sHD*QrKhFM1DJ>O?->#qpxS3k{-qmr=yYk)JK9j zoEi*Nl=O|9>?|uMc}xj5hp$zC$S7?kGOu+08@6ojRXl?7ICxVs(Poh6$tpbLt2RbB zmf&ap2NnGsF_1Q5Bo8Y4B+)ptvdhLkwCXUgU%=32z(bwi!}hB{c`f*Va)8FsqgCus z(^A%;$2zp*(v}=BKjx)aBKXc+m}QQ_i;Ayk>C*9AW=im=xj7Cb&hMroNb)>gd#3uN>*59ERsmzl;2b zKFNXG8NGx0LiK*p3$_m(Skai)jm&|fyzR{36eUS#3fQVd`(mBqMH}7d#UAl}`_FI5 zMOj&!XY&}Mh70BV-gbyx*1y!P3oYVrGh6H!viW;!uL;V^$^U6`@VUFQM&HoNB8A;r z2X?c$TC%H9whi#=go9-Nx=STXDy}Igr}j^Sg9z_eYoK&lZ8+#Y(jE;|ai_e>Fe+xE z`Eb1fqk-aLTcFjS2CJh}kOG<<_%OmHNyKga&e-T#+W8iP)Ga$mY&J$>p#t zHC`9?EH(;5T%DX!m955U2J*xco-b0jWBhTZR%3BuP1|wDa@x zRoah_gt>|fiPOm-161b##b4tuYp!}x{EarYh%*9)HO98IdlX{crcGK;uQOK(#XeyM zmC?-Q8h+p)LMsPbdg(g-b-PEw=A({o)^$H!MDn}9psrv2bj9}h(lZ&08T#0SgwPyK38aOn#KS7xIPCvkSB=jR8C$!t1vxiQ^!k|UzmbxeDXgYO!rr2n;Hzwy!-jFV zA802~`8aY>ogt~zyy;&_2!p9qy#Y7AO$}dD z*`<_S|7P4g3)tW86=S%_IPzLp%%(2^vpoNR%0EnQ>_y6SnTNku6~FC#XkhCu`fXXj zcUtQA!R$}uabF&;g&FoX?PpI|6SAayCKeX=-7D3F#2@U^TBeUE>0c0v9A9TU^V`8h|CEL{>uvCGI~l`#z(uGpKjkPtWwu>Ov)Z;XI| zz{ps_-8{rY@;IAavoi|qYW4Wh;zxmxbSvc+bl3ow*Hl6d)aytoSEtjV7}U5_8b;g0 zZvbE0{h@3*sX^$f7fsh!|H>~a>I&N0Y@)r3jWfC&wGR#NVa3jj7#6-=A36(*nwXfR zI|M)y)TPy~QVkX_HmySec!1{TlUUB!;$5%(NE&QvWn2hcnfqr_eZR;2UN)vc@{Yk- zR6G%pC$7|=&9^Y-3q}$ATO`2C2pG15`45~NUz7#s1r@; ziZLV(8y?&2nC0rRbG>KiQqK=vd05>RfI$APue%)1*SaIPELn`43=Rz;1WWTn*Jx^L zQoXM`R^(W5y{Hn~Rq+|Gd>LQFlvKZFa*95cJ0J->4kH|f4qaBfMS#Sqs8>3VfKJff zcM-!5eUlF#fO7V53S363!7J~IA14fU#{r$Qe zI5&tP-}1=$;4ALp~37|axV z4;(6?zoTR4zK}wK%2yJBOV}{Qv^G)s0v)ivx;pw$DAp#V>)oP`>bf*nUieT)VviWj zi8~GDx^BR=I=HHx=Cxzpw!0%0G_K$?UMzt;nsW&g|L%*@;Yi-@8FC}dP@!%qeA5G? zDLx4yIfp`WhliVUg4O-ELT-sk@7b>~qJX=s?9f>*p+whrzNVI;38i7|-EjK~_ZZF; zcy#pGhs7;lw!_lG^0LXXY?ens>L6C^rofTKMpB*0C+D=`C8f>!sBPtbGbt#j)^wAQ z(a&Q&lF|Eb<1tw)vbf40T|i%>$zb>(*Bv?;RvhdueiiE02oJ}@;`Y?nJUH7!FQ9F| z{N#_@qW#bJuZ5b8ONGRwYd1(({u};uzuY1-TzmI=_*wm@;zN34dmnLM%pjKsPs1rJ zbmoFy^gbGOsLPFUJ@G}ngTs6ZsHyAyjkv9qgYcM}sy)h4ARSZbfOE7+7CGE`EF2A43??)L z#~N(meToo#WQ)rU#o4INwZ|nOAi%MtVUdn@4(Oo*v}fxy1kV;1g+gz~+Fq`nPd&vR zMl%4hF|+5EK$61#C#|PP#8_AVQe$h`54;7YFlKFiYlBNp9~4&ScesmmV+maX>>`Q* z+1EDmf_yovF69Jz=())bpIm3Z|9vwQ9aFC~QHLRu@b~tkwZ4Z{STH(ygi_-2V}ZbX zVEAU<;rhvq6arChvDMO){2h37geU$6XM(y&eSWSiKR+MLy2((SaYNnl*SL6JK~C9t zW>~VjriFN^X=it!9LDzD^=e=altmjD_+1|vlxhm}QbhZvk!ikq_`qW8?cc$=FDNhF zjVdtvJLl8%^_)D_dtKc$A5OL}x&?gP!2SvxCVbP=>TlDfGB+ur?@s1{Ca@`Sgv80o z$+$=#Qp=7ELX1S<4P*CLdhAEGOYI1?s?+tQrB zPKvZ3nzF1A?%`t)Hj@6l`T-|Gd8;X@gp5p8l+^Vh96mU7uwoDWKM-3fn+ot!H3iX^ z_>Nc*2<)z-8yXsN(4Z)SN3-`VqULL?Ct`^C*m-lZF|EO0BuJpe5h+~T_x#yAzrHnv zr$FOW)zH%V2iygZKE5LJqkKVtsA^w9-1k4+fypd%$_V)c-ms+6FM#mTzlCLG`PTXx zufTsHL}@h?kJx9z=68uEo2=hB(=#Zam9F5UdJm1zd?fvOe0%_vN9^lygsV$nDuUOYta5~zqiZsBNhqDd-Sd8!quTaIK3 zd0$vbNp&mtoEe8lM*}2#7}CNTrt3-L<01rG2bcR(wYB^iWd=~USA4@%Vi@u2tTst< zA)zq3{yUF3JEU}l@3sSmg!GX}b4>DP!U=P8xoTcwC~d7sU~*|;;o;#Gojr(;dAJ<+ zsA9*6L8GoLo5}cOM^WP9fjs{qFLw+UjRGnP$~XSLh3;e+Kr;qi}@5GVwa<#6H4W$TB@i;%?$lOpNAJ=O&%6!Ij))lK_&ON&0XGzyRh>pU^r_<{O z-hVE_%at($b}capNsd}IGrP&9V{6~mg{DsFRFv05rM|&*#d+`{mfS53wOvqVe+5vK z_1@nq5-e)bjnbFZ|8RRHuu;^m?-;!Gx5=YuPIV zoK$PH7D8}9#}9tj^`KvDnsMgl^nf_4xnpzLuJEfC=Ut0XtC7igq?cw0O!|8;kb#Z7 zcjT)RQA)|>>w1(R`(hyj-A}--Vvt4w7Yi2!dsyqP*MULf3nMz#$q6ns=T7}sM}a3N zGNE*~vm39xKo~i-OPRm_?vn{bseZq;7IT+Kl?(LyJ}ZCy4D96l?-c;A#I`BoJc@)5 z(XxS$?$nrjNRR9fBJ)KmGgGB7exEyo#xXF6{ZgvebX;;JtQmf}IoDJ9vG%BP&GvT2 z!u(1UL{;NFM=Q0+2x};;bS>YDs)8<-Agsl9Xi>zCNh0Kg}TP_fg z=$1}ht4@N&n1i)CYg8b%*1@S6O$kj&9&=@r(zwd^_R%e2;N(z=F(Q00xRxdsWR-=s zZPA^!ldp#V#Z1PHq{UK%@J5l{t~L+oDCS8;`F@v-eptEDBZQy|qHMk9O_(;Lnb)W> zF&uPou3+onj#cq{O%>DPLju7qz}nph2dRV$Es>+k`3^V1}FBW5G7ww^VXOJP)2 zWTzVR80=fR%4T5uU|QGy9*L_S%0x*Ty36MltBlLfNkz4$p`y~9!EC$or_g&~U;q-| zi(wut^%l4R;nBiRPNO!WS6m96Zxz8|yOzVq=&#^d6{eZ{(u@cuB5cq&AT+Y)XW%p^ zCjGwt{zhduh_n8b{u_u;oJ=_a1PzUYAn4cT=B9qz_qe!s?dk@1^O<#4Z~EPc1v~Bb z*fKvHz@QLaX4KT2gF-@X3BZLJ5wa2H8yKQ1^)pX-`uOzP`Lb+B9 zo0u41Lqhp83wzVi#?eO3*chhY+S(^OK|zK2y`6)+jhvH{#-1oOllkC$WOPzEkRDT~ zgZ!wiW?Qtd*t0pbc^wg>@iO4jUGVrrnS{%`E~iTpJ9$5#sm%bXqi)^F!uW$u@0bg) zWytfiKTF?02*agE!cAtByF|e23bMoJqN1XQU{ftmB9b^Lg977zEP`B`h10d|_~kxo zYnx7GyRPO;eA2edcI5Hjs;w>G{~NIdl?};>&#{=tlEJN=@2;(-J_A2Mx$;|M$Eu?| z;y!A3O*)rem6q76SIh89X)@lfDLBh>)Dnnwb#>7(8ArEPLn_p9LvQ~Jc`+#jGed-Y zFDy>|BdWd(j~Z_lD$t5hjPg4C{34rq#^*vu1nDpxV55%wxFsjpwaX0))4nOrn|`=& zFHE(nn6~pr9RT7jW?2NpP2tid@&lzPyqR6g0|QSxDcL5Q*;QHdq_$eN5OSw&1MB`tFm=O%?+1!)oR%5}Zy|w!fg(op3fu^Ib?%uo9>9+AvyqIo}>S9DgNejvF%gw7&C`0%-guP z@(rkH^i#hHGA)Il6NN8dM7EWUeI9yr_e(4F8=doigl;w7-Ggy(tttJXLT?^_w@65rk9OT=EmlZf@n$XP|5PV3Xl@j<4wq3{750Dm}Vk#Uf$=xAdOk4g^C3Vfv*GDfyDvCqwDIMfd=NABE}KXS0FY&XD1pIve1 z&3XhOq^acOm&a_NY|`_RWx3SHMpvPKcR6$Ziis%0YG6>^MZA%l`xPpH$2O)u!w7c0 z;ZNp= zO%m(d-d)78ihF({DocMioZkr=5ePPL_p9f%pWRqr9&hH?J8KW%B!1>I0Kqk1;J{iy zP|(Gy0y&%C-Gyf)er+U7YyB#Kb!{JqyzUa+VnT(GgrSN?$Hb41M2fO-E%zt90=9Z!} zv#n-e7DI0ubTy#8xfdf5_H0cvUVTAQy5yt(g}n;(kqgq z^u+juxzA=PS}6ZT#sdFlW7|p_SH^0C%zZfW%E}e>{04Ixur1xI)^Q_}- zU#=_Y`MSwG0sRLD4anJ0|I%Et03{+Dj?~_D(1{hSDWf+qln)PT&yRi)OJ5m!w0G-x zHMnMP3hOMmcd3&Jl3_uiN_6IVqHlitd?StVrvFs*Rj5euhvdJxtY7~{YC*>Va~GFO zvfp1Y_wXaNC6Kd`p^A`RHwn+GvW#=F2S8S(p;pl5*B`oHmo1n z=3t*A{0>EO#v;2oQ^4m=2|!|TT**}o!1Nq*jw?EK=PPu;FjfPq2@Y4_10)dfbKm4b zC%XH`2L`N)j9+tuYSthgco5osExDg@lFJlW>>2pemi_IwFZ(1bv3{}Lzq&nVS#zxlGR~zsOwrQt^halI(a;bUjW7Z}@Te5l7bFljEzS00 z)v$pdy+d;8j8dFM76Z;0=r@_FXa@oB{O*M4X$W-_P@I~ADkJNo zr{9>E$bjF5M@-HZ?^!iX9o35y)(!V+;PEXDjm7!aFla`@;tlHTj0hnAEn*IuryD`e z&Hz-|ISd}pN9SLtx;%RNg$-H=WDeV&zm*2zU-rIY;zX<(mHM9v9Z(>e=S>?&XL+05 z3v;=LOcxt{rw`&n{tB>BWN0<1+aN3?1l(h};Onp5y}h#eDnoxT!CfRIs*F#Zj?PO@ z(nOIq({DFW*Damcl?yeoiJ;YTmg@#CsAdQ;iljtn65KRp81b+X`M%hFzcArmtPU%9 zEB(t>oM*9K4=r0wLA-tzTN-`klI)_RL#%uTpUJ?+$mkSow@$U?bKZ&8DD^q(rw*p0 z1DRVE6U(~9#Cp)86+evEVa=|-zSnj^>HC(|*?~>I#g^Prv;@zOXE~XLEs(jqmx|B9 z9jZc5PxoIW*dGX4{J`rVqwl3vzCmX%jCXp@K}wCSc~nI^Ac$6O@-D}?kkGXdtOPW> zAEx+Id|p^Mf}Mm_!-04A=+`PU^nKFLSAl`}=@Gt8dTFUlK^{NwWn__X>sh(@3^8FK zSyE9MpsLXy*e0oGPeSzje*y~7p&{!k>!Rvi4O zkEq6Z!8`g}5U<07$h4Wbs80&@IW-ATqB|xqlO&!;ITz%v8qSRMr9*-!k>s(ECLKic z#iqprW>DmSvF9_&H0M%cUFZ}iRvuZx)wxJ}h~3c0U-5idRXmS#Dfl2AhZY#5CZ0(k~q z`fu;&NBgnABzKseDu?7QF^w0YF5SwW*9UsV69yTn-IEFu)v$}krqF%3aP7~pIP5yO z2tqa+xfmQBMH0=xe;e~NI56Z-Q3cC$G5%%)C)+nLM29rl_4!B%iL0ur0Fb+u!e@5K z8D4A_pQ)t3xU*`7+Uo188f46*^R^lHrlj6$e~(d4%OqRF3h+@&ss8zspqhmh&vGzL z+W*D3(ZaAWyZ^})B>$wu9d%u^@BW0Pujh>;9LLyWP8(h>*T0lJ^EbZ1QoCelBd8SA&wion9XVJ_E68m13K?Fc;(+ z(0~!-1w()Rx>>;{+*>p)Fgx49$@G3Z$;7O@|87Eo{XjwVD;!unQvx+VWQvMN`PBz= zbLI;*IB%girK%irO_=7CXT7=w-iMsOu=`Q;xKz@#Op01K|m1V32q3r zy=@xbyrWsZh%nKf9Z>H=DhaW=buyZR*rEz z;CC+_BLi98%RH}L9(!ScX@B!J)!AAS_s!*~6RGVP)WiacAg7O=Jz9lKX4+_5Z!DO@ zjh(bFJyhH~t=y`IO<+eB-cV2DRzz^bl{oz3{Ed{MYdd=WxKeV;Ch)B2`j4Qi$mM8Y zM$+d)7zOMa(OmE>2A(t~Sb(oR8t^|pk9~V16FPt?O#zVfERw9QE?G*aN7%5w&JFqs zcAmTv>%IPxoxuxsyoiaxFNv~o<*CpLJRV4bS`V|}$6e>9f&!{?4RA<@QZA$O zm2Q9%u-iQV-`82E~qn=hJrtZ$pe%O|9QJo8kfVTyNlgaPCMwf;8Sv3 z9P8vNn8jS5j8ltPY=A-GcY%B=ArTSqbO{>dgXXSW=+A}S4lp%gi!}-j!fdKE0{>sa zFE5P8Uxc-E_w+nBa(&MM(+No~3H0pyAT0*l+u0w#Y|Q6c18%>(*ETTl1?@V!!(P>B zl|@qCuSUU>2OttKlDkwQ!yc21bcK;?vOY9~NoM}MdD-N4qZ@z-Hqw#<0TR`q(`=d` z00sNN73Ad7SWHpHm2ZYo$(>1`)jw=!mvs87ob38duI0kz)BBfSUsH%6y99v6>K)+^ z<|AoN+as;_N6nx)t?$Q=S+gu9Jw5dK`2fq%ELZ`xwszrJBtr_p6e)P_k%?f_FOw6( z{0;U6fwP64j|hnLLf6(om!9+RNQgF>zT8(obOh;Bu;^u0TJUd`%yk#u3$8}BzrMDC zN^}uyPy*@Kve9U<@sKg^#Zdlp_bA)<9Mj4zm&!{m{HOyLG|%koXhd~loS4e{dtGrA zQKu>7#i)OJbnHPd5N;>4=7=DM^65W+riTIf;ZF|K3J=56SAQdjP$%@{V+X)?4kwrY z4#rC_lT*NS5}ZR)(R26ZS)39SBb#3=R|5a=sj@)kMZOqJ0-lUb6OHup4VNgqMH*SAE}K}A~+ABu+C*mP3&!VfKIg%4R4g; zua3tEO6%S&f}%6TXRR451QKL9W)bh{!!AVGrM79*3f2)aNE%B*-xa4G=)3jH; zmnV>^X`HweeoD~_bq(ai_=lo(4|yle^`u(G1Dx7zv3B9BQD8|6`!3|UR*qs;0Pk8R zdehS1bSJe`4dgb{3n9Cp%@nt2{+y;3xh@{ju$mu92wZRJm@_dnJ8wKJ(O@Yrh zN=RQY2|4V;!52W9^DldlDmVw9o`X-se2^V!85Rt`9e(dJ> zTbS>Z4>J-&yXmZmHZPcvL$H$tV&>;yDCUel=GhGL`wCzWpZd~So6?@!}m z93+_{(_!_7Bh77!Adge&U-qArybwv;ws@jCfZ^1lejMc`{A(;^tzCi6)~9npvL+HWLnO&TB>hHv_HY zG-nD5?>j8Inz|afSWr0$b}$*xVhw^3E;<3zuz71SAM6T|HIJvSv9%_cx@H}bS;o**-&A{Rpf@F#;j$Urmyq13bCm)nOPb*YtQ0W^{N@Kf`2%mMiCDhU9E!>Zj zq`EW!tYz+#ni$Jco!%+I z;}H+6mrynY8e&Y9y{>J2d|Iml{-@CHf6>{k)ClMT-OS+<(1Iyot&Pn@?U_;$nOI<= zl9o^KGdxfaiUHpG2wX_1RAWOzX-gc{ow*7pcH*VSOC2-#3jWYwv~X1{wt*SY7b%K8 z`xkhY-UZTfp@Vi6+hhr^{{#N&lT(_Ux0iBBoVM>E`g(d)xGAnskYD>phzEd5yl$kv zk&&(Cn^6-I;ph>k`Yn!`x7Z<|gL!l7ICznDJ(sH>kd{I@_1V7$Pq|X1KXc0~N}6>I z$BI-v?|Aqwn8T(P)Sf|L8)404KSerrs5!_%;7~V#Hl3g;&wne~lyr6Hb$Sl8Z3d5{?Kty(c47@qAFEf{2rvFF{R^a zxrk7(kh9&uw4&wOf}Hi^$JprTXe}LheHV@JUk~~xp9YP)a5xFjDt#y!Dzvj%h_@k5 z?pbxtuy`AA2m7y7;m6u3RcJx!VY=M{T_w=$b$v~xUtU-_I4LA4*{hr@arralzolYd zzkthl+R2W3gNh1GsG~vCWNzv&eEf713z2M06Bg~4BZVL&{WH6-kDhMhEL%V&ZTfv+ z@+4L8!5g%6@9o{5tFu0Qxz#kBv6`Hk`m$ryz6=4D5u(X}Ki=KViH-nRG)bz8VTteu z{VQVr&|-k@d=OZRrplD=#$P}@mR={tiXatS>g@b7_?aXG?_a8`DI)s+Q5$bcn=V$P z2~YTz_}=WaHNmtLDq3+(Nc#qOyJ`2hNuAZ-OG7!FnA5AlwT`I2duHqslCUUoCYB7b9ohpeh9dYonG;&dPL@IY-vMtf3FHpLHcokOcd96R1O2K!r5q!RH|cHnvc6&giZe4{ zX%^kz=zDhLDpVBHeHpXqxEp-*^tdimOzftB9cDW3rDH*{PPz7+5ZITErYIpLgX`0;A~HtU}e`XN?WK!c9`$ zYENdM3irD=10UzGd-U3-CaS?$F_-}N`i00#nuF(@@_&z;fPJ`*qR&Yul9^!J?N+KN z7RGa^l@I_iXbGr&3X6K)P~;HG4|E7rOHGrJUfuWIpi3xnTGMtpMbVqI48j z3I1vSKxYBBMeQwm-p(T0DCg>FzWMrRL4~v3%BVuMC^i|&^}RfN!nZYxJQZCrpcLP# zbi~pk%tw-6H63fT)}^41Rdf`>TIXbNkTy3_QaGoPR?JgrNneipW=x0oeWZA4j_`}O ztG;M40nzhqt$@9xvJGX()h%@VvA>X(3rsyQx6z&n~ ziv6i%m{3io@Y44pI~Bj4w|o3&GZ|ku&2T-`%epB;lH;R4iWV9~<_x(yg2NeyOytNS zG+{n8y818oo1V;Cqz2B{3 zS?xO)eKn*8=htqvTqt{G`gt58($~-Yd^UvunPxI(*Ff3)k2Sxg0!XG3rX<5E_o9t7rKB9PUI{lPuV< z!I-;}K*1;>-!M_om-|?yMMp>XVv!0|Z5(fYbH6!R1^IYQ%~Spl3_pnX-^C55m&Qv` zR4^iuyE$wwXjhG69=%&1qAIxOG2aQL_%3TcSlVI&)ZjB+UR@zV#x`gRG&dcP)I|-I zU)ARcqyYmIC-?obl;%%dnuf8hC&|~0Dey5-ZO~bBrV)k#3WG~`haSyijq*B+GYNg? zqV_wHsjgYly4V;f{1EAQ&(CY7V~^IG!_+7VScsTF%JpV0WbZ@JYIyLZ>C0j(HB3#d zT6$4H9D|oKBd(4GI^1LiF}*dpTpk7C+cN4&ru;C0ij?+VXmHbs;yS|(1^zlH<#hHNMWwl_POyetpk3@I7Yq10{m zAD?c}utac%q}O%wO?!2C(e({J=;tt}c7&1NeE*{t@DaI9er1XhmDOFm!F4a{4e!zO zVWT;)nrpY@X;w~+-(k#+neKhi1m+2hhbB8{C)``A0QI2Zv|YpN)6DvZV@;BFtxQDf zfq@J0QqjNwW=mPT{0Vj#NWieJb7?#xB%hMRcENJrn^#|Z`T@i8eBPFyx*S$ZxUBa%BO$+;`l zXfYhVNk<%&N?cLAs2fZFgwp9EEvD-g-2KVH5H_*#cxP$@2$V$ z6-}@EfMNmBVl|E8mwH)6(>1SBB-7D!?;R68=9}atiOL|;LAf4LE%xWO5qofy(g-e( z|;Oup;gb z(fymluX}jM6EWOfb#SbBO3L1z4yNM=flQ|B^Gu-HdA6iWu1thPoA7e`D`ht=CJ;Kk$a1ovKk!G1*$*9c0AXNfPss$HFeEjco(4mTOK zJutp+=mq_XC!Jw8I_TbkX7WyPKm!+AdeSu<`*Jm)_-hAlPtL-%$&T}2v6bn3?v zF9GM|7_21KpQAs`etZGfe5?o-pM;#V6&yw9hx?__7FbFly_QFF%g)l~vb8=*PM}Gb z5>CmMc0g7!3cCVdOrY^T?A5*J zfU}i|qF7%TH_Th6;G+hTkdTPd9{T3YUuB(b^b7`9KlILI&@JP(D`86g?sDuC#uRycINS3Ez9EwG)Ja)@|=CptvPnZ_uF3woQ%GKv?D)no3M% zTBNI>n?GF8n}Cm95~Bo ziS0;^a)*^m2163p2{3GMt=*VmVGJp7wGPYDw_0fGXGVAq)S{+jxQUHjfZj>`wnrJ^ zI%QlAYh}O2he}{4#`MV3rwfkrv!2_|CcojYg9Q{+tHcpmL(N@bM$e9N|CHduGEuL{ z>Wgq5h0xZAb+g4WV%6vJ$ws7J4L!yn^9%Yci)jTX21#Cm?DVw*+|PyF&0q6rf`^Yf z$BY@ccKGYBIV&}Ze9X2168(k_BtKiahuzHmO1QtCyw>}phKDdG$k6^tORTprT9rNy zb>MK^{k6ivVyFXq&mS$ft7gX3-*#J~ad7uRYZmi$s;{ij$zER9u)EB*bgAM8dBFM& z+n;8#e@^VgKnfZI|EBVL20FWOE3^T3et5X@iga>WaX)ZRR^Am*c3)VSZF{7rLB#O4 zld5KMJm_q1{9-)DYzQo?O0!r%6JbrxWnjuXa}K zueLDv?(_W+I+EgqFM7X%6{47B==|%wf&cRfXjsd^Vox#Cie0_)CzNy`UL+kyY=^jp zm*ed-8bTo7l8Jeohs-^zU+&1$L$BwPRmC9uhV6X!U994UKDU|DQLXV;-4&&Wm^F_3 za|n=DAhYGXv`gY?+qc=+iOt9HIMk)^3c5KTO!DAq$G(0$fqwin<18$Hn$jD(4+C)q zM(>*f72KsCAB>lVa+cdJ<`o5Q&cC8OC4l3?^gSnres|LfSN-X%yPnQX735l?1@6{0 zePjC4pog;Uk9qFb=4csw_q%TCLoNPkGn&x=WD6~rNTLi#mx9OQuofOZed2T{vzdnd z$uv_*e$hIV!GFKxW5MKzQ)52r>VmQ(uw9~?$<_@4f0&7p*w8T$ErMLe7>0kabt%8- z4ab@!=GY(Rz04GxSe~BOp3%{trN@A^XkVH|WOiKo+i1r)0de&5nk_sWv&DnE-~imx zxirxr1CzV&1j18f3sYdI6jj{eAi&jE)s?vOq>*W1L!~g^jY~KmIAinn9iTITb(tBm z6lq;JSn;K;7p`M&+Ivw@3*#gI<$coA=i|IvG}5~UmzthN0;uf?MtF3v;*o6=D&*`N z*KwBAwmwm|*O$u5%2HXOYmTp-E5IK1n9m5ia6|z?C_?F1*T08sQ9tHvFq+eIXiF20 zvkqQ}tAdB+u+K{2$s)w=T<-?ghjh1ZV|iWYdzG}k+_r^ztC;#~j<-kP-sf7i(y*e0 z8OE=-Y_lH|_h`!fJ`@2~0P^>qzejxDa_WJ$2H4ZEMbjvR%BVcWz! zAy{#G{-x!=@qxj9X!xtn*gL_9#e2{4t(E>c^Q2x>h+pyI?a`P1-J#SOhUkmEhITy) z3)-Qg77owOcaV(*KQgf;fstl9@a73PLez{XQl{ufySlEP<+DgM<^l||g1;5KPI<>i0pA7N z`HnlW^)~G5j7?wTP2v0CC>uRjpTi*O>0HzMNFo)t8-!pOHpBP#%M-1Ms@+YUTRykD zGRmErlksD(tuyo=XEU#ly!Sb$dr8ti&3L;XoG%5twqFVz94WH%3cAl2V-P=@KRI2& zPh{SiPKJ~(Lq`GnY-?;nG{FOWIsN)wZSKj4%YuiDh3bR9iecB~vu00G9&rpa7(OR; zo4aZ3nhiGP>Df978@lSgSU0|4^{G8IbHg28F?0Js_8F7!*sg%R5b`?+wK|`p>@R8= zM5)!6r=7}Y)t0SnZ8$mWl6B|2ba*}Ic;((4@~5X403(sMrQJ*J_PM%|#DgJkP!op-z{W-3@CCbOp1f>hSJzhq1iXHgZ=}nX9E?>c605_2#M( z2U^9MGU}zOgz9!yDTJ>Z@8%HWuHnLFTDdqm%yc|G3EF4=8l8Gvpe#FOPU*y|)=Y@{ zm=``c1D4+pL$72?X)F&XxSx`VsUTVJ-yr%*t;KuLc7l%H!P#G8<VmbXGuC$6^jy-4ro8_mr1P#_%3mFuA{j>%u_fP=h6!Z zEOB3wZBT)OOvfgsvF;4YH0YscVmMa6GB36D0KJ6+cGJnuku6X8?wR!A1`jOn;F)*c<0B!O}`(x2ajh)a|LLOYeb zw&pII)$ttPgZK5}p?vK6qTQd5%qvWaY}tBF`>K0HSxO`AhfaLrpF%EzR%=m=iYiKg zF*t}j37uOSl%UJY4-X}? zuCJ{jFN`8L!py+4zpVO=vTm}z-Mo@eho+|wFVZ(@G-B9Nr^NNc&=VX77?CGCoLL5^+Gx8yv2pr#ofkI)&sH{tyy5p` zV`Eb*RvXwnn{S6?hkSW=1(uZXNoa9V1K*OD+p&y&vb6BdBSyZ>`+f7#uD-OQ-q^lZ z;uq^%a);Qca$(hCc4XKbTvh+s`a6u!c!?fyL@}!0cQI=BQ=acenFJiHekuWtDiaph z7!iu$F&+W(sU&!0%m!0x8X5*b+Z=ZfV{{)SI0XcQRKR<0k`@$e?CFd};YNZ*m$CA3 zjY4s{$CXB3`|sqzJ3EOb|$nEPxcCwuSy#UR`H2kJiWm z`{Rqbk{$yE0_;6W*j}`Bj(70x@DSRByUTAdLJTj_vYTGqMIPzeltuuUcc%^#N@%Qx z4!_hvKH>G9+4m?N=FwLtFdcuDw0Td2$iX2Z1Cvu-H@9b~ra+(>2_1FEJ9_AP_SMX2rZ<3zV(xk(eREqtNZ`?ayDt*$!1Y z3@g;9m>w?#EjUs;LH{$lB*)Kpo$SZ~=3*jgOrvIX9#X&7-!?I_X$_enQhaI*FXOzz zpyF3Go@$gJYsodI3<~{?O-^9j`WKh`Yi1@XBbCq*#18EHQxbG262Uq`hpgc6O0H&) z|F!$m_h-83W$1O3oJ!D-mM@F-2k&*tP3AWIZf2bjQ+m4~5ZoF-T1;3i*AgF6_Fi+Y zrBK4X8u75(D%V-&Py9*1&C@4*5n-1uORNQ*?x8P?6t-+ zP9H+V{O6s>uD=L_G{xQQTwTK5m-bZdAlQnlp=6#F0@Mx-uPwPZKiDAi`TX~v-}EB| znR&npz%Zb9%wDhq+ZT1R+BG4&!_e!D!F%X-xhnRS|a+ zs`i938FASrHof6C`PJ&Fy(A~Nwu64ZdYDlb=h`DWL)#5!2*laI%%o$7RckNRsMQ&+ zSi#(s`m^YC4_yDy4!MFEO$1AW7mEERvX@4bIZjvWB&J1w6DIwg&rDnQ+nx~B;JL`YC z{q*EiHOJR|QTfN9{_%6_HJl~2$>=4CS`4JA+$pZ)jOW@UTxT(>UsVpM99YLF3A%o9 zZuiKTJ7azgWo+N*=6~&WyDo~n$dCAS^(q3qEnW0#zWXs{pevcW{U!QL-$gB-D3kvV zABO-fL4wS7^K(w5mnGj?0%TM85QMt7zAv&09PzLe zx;+i_6QNB{Z(3B(WO}p!LuU%1TM4@ZJPg@A2vw{@Ms z|9DSitTl9W9Lf()wMA$eZ8R&-7b1heLbOigP+q(M=NY|INJ<3ae?Po6C(DP~QMC1O zbp1BODo_a9)Z84*IhB~WSArUk?T@UbZUQp?_Bmw?W>ZaSAEG}w7`~WF<11EF<;M{T z-8Lx?=k}-uJ6&;$!$hPYvn3IVJ~dv7tZD~;VPrJ=xL+YU6xb+%zvd5ymG7E2xj&bTR=&1lDGke^ z(W-7vT}L$cQ^uvlT<8=cPmXDAGkx-{(|MDUfajCi<2K1EW;f(N#Bw>don4-LvM>(o#{SO6 zq&(;IurVg1m}{U2ghMHu3|FH4~^r67JWEy^0GQ*=CqQUwae$_%8%k!B~K`q zUo-|h&7QKGCMV;SlT<4V7E^2X(gR$qyKJ@VREo<~NPh|`mzy)OMeX~Fmt#A~`$xwFu-n@z?1P@jcinQ0gccz72mkY&ZZE0`v|fse!la+K zS!6To@5RG6luBLlX|?;*$J?WOei?-6NFE}Fjg7lwZMor4TWT$Q zO+X@fuS3)&;xDPVD7<6)j>^+8{6AHs`9s&RZjsnLErzXg>W?f;Q+G2%mW>XkE&xJ9 ziW?#XlET-`BD=~(xYXWr_krAb8SJ_HIcwI=7-D~NVyDN(NMU?l$Kfd}7KYF0?DBpG zx?Rm}1s0?PKm&9G12_JB%Vjxmt|WQ*qsz?Qui=K5hHCvp^L$8&SQclvKbhW(2vSAy zRnxFBcg&Q59~APMH7Xaz-j}Nh!0KJMz*<~4|9rMT6^MZFQATuRwK}+3G3};pn6D>d z=$bB?9RT^|; z8)T%X($gwgIr2i@^D=yD%H?@K`d;f{PTr{ib1vCRBt*JQxEVh^>-H6DQh4H&HY};i zehF-*{@UD^L274jYl#2etd0Z`DrOA~@cxX#uBIR;t#((B1{YjzUSH5V5CAVM^gqhNi8N*V2hNmBkz!L$$Fgx~wYA3~9~U&W(h_6z z${2GIiKsUW*0@H_rY6u+H8wzZuAO@RSd|X1U2yEGQ*F9?=lbuEf~rdODmNw*6X%kt zCf$p_E&G=_wJk~Ju@EJv4BsQM)UQAdu}6!i>ebcOYUL_dByUkuSSI}QiPYmlwgqSw5`dBH;BGKkS}8 ziM%)T&)q_eES`Z_gf{;tm*V-AKE`o4&?2xThax};ACK;sRQpfn0+9A+CVj6}r^N2T zY89|ih(Q6T($Nj6T_Z3qPB(T1^+V$6rar2$lBguns+atLGLfnrDm|JQ8jUL%Lm-%= z{W`Cg7ZzSXHtkxKtK9dY=picDQkH9@S3W7Z1m~*7N~Oh=+}!j!sA!TAI2ilm?i)2{ zY*VPOA&@fnQVY=>ARgX9Mh4s2%?+p|MSMQ+h13Z%=LVVo!1Hh1xDBStWKSQgMYvecDxC zJ-zzGGu5oFPd)yq%=l)Ng6B6_VWLl`Pbho)$G=H4767~p*VZoZOH`i~T%O{5n8c73 zoaTi(oFsR52i}K6vQ$fXXUxr`MeFF)=`!C*4#4=)y{DB0Ghnj9{9-lb-Q9t=mwkB> z$&trPnhov_ghJ;H%N)J53Dx6v?R3Chgc~*eq?Js*jI^|(okl6U@dYwZIwK?b7vkAW z-{YlGAeYoj?nBvi_V3W=49hDOydM8-^c(Q=yJ%MKX-{`l^HasORY9j)-nuBK$WVTTX4hRfzYchBK+G9GdH3$mXo_L^gT*lVsZHP5aDR4l9G=zX<;4ZA zUoEAq6=K{RI=@w&PT;5CMZ_-T$1&UUfMKmT3M7lC&w;pCy8`NV0L5d%jd(Km#{|Hy zoOAOaiwY|QRHnicMhvsF^Hbrt?EcBSy3+1^ek?65aRTzY$BEmu#RBbSE&W6Ep*bJ> zkB*F1gL7!U2r)xL`@#<{-``)CPVJ4g(OPuTs?ljHD|={5@BT=WNU%etM*igKi^u+b z65ElJ@~Hfm|5SP*pY}mW08xsvEgkQt>AXNVY1mA}fwK!dhEjuLChV zZ>5i&xaW9vrNZVg@rMDbNbiqk1o`6@phpQP|K&1AVke2(eixVD)1$ziELG0YR%-2P zVId|a2CBie7>?}XV^eglj}jltA9L05!zh_84RUJlZ~C+E{Uus6U;)T;1P^hm&tOsh zSiaQg(Ts?Vja?!mP@Y{hy*JmEmM0~DDVQxVCZj!iAgGpS`8cr zL7sTl)9^(#fZ@Xms}HxlPZmXSR)rw`G#&+d`@QtY5bqU!%Zbzy0_w;9Fed8w*0j3w zoDkRn=hMp4OopGpEz8u|<9%i2?ZWs>?)o`<*RgNp&IcZzrah4-Sf#yR_1%L4dfs_! zb=+{II^$^cuFs?xzf)Ebm1lqK&FPcUKcOT;?*~6p=IC|YAZbK|j~1D`{hz$fcnM4~ zAneEG@hdYmyKmT6@2T8voNW7$(D)vcd>7^gcWwHefKe~thmaJ-=kbD8mol;qyD)IJ zYGO+by&6WSyq&=ExlW5xz5R9_6#55xGk$kvD2_t;@`>N5_kQ2*n{j9Yy)lL2XFZo1 z-NbP^^^U-j#*zf^B#f3;nBX=5#%lHKcCW1&n^`woZpabj1<%i_9!FD^AUz-M9+ zgdX3*8rnZB8%jx$Ky{^rmlu^>%$~%4616|~I*#%Ct#H|jFhyr(W~Qcktvdu69k}w! zPl#lXb#)ojykGPiI$VA ze8CwP0brJs#4i#$x-CnA4caGThaB0;>@N?A65Q`sTn47vk+v1Za@Ko98c3`p_EFj$ zDBOK?5fDg*fLq=<{QRnYeH{v}kBRbbV;Nv3k^aGGYC*pm?_NjaXA|;20T2iolmLO_ z^RAa0Dg7hUaa4VVlFuvgWI*K|X!Vvc1|46lwwYzoO!5O?$i_;m`ra`!GlQZjEEv%F z(cT5+c~1$^pHVpY`u{7NIQo)Bg`o~skjzIYNdM2m#f$Xo4JCL)Tz7(+C{7%I74#}v zrdWh5lF%4o$<)`iZAv|SE@a{SgC1`=K`Hy&$7Q(NxOR;UZl*N zs$|EInz?RmmZ|mswYwd{!>?al><%16o9eX`c$;sjCD29n0=t;s71&R72l{cLhsW#L zJX<29q~tZ(o$NFX?QYC|yK42@4Ll|)Hp)Um>OXHtnM{ppR#5OVRGpE#8aSSxnG%!Y zkm9sP-g9gGTJukT9tkgRS#Bxbtb*zz)vk?C=$Z))n(r>o~qixw^U z58Q2RS@Yuqa5yff-c05oXi@V!Nj-@`Y3AI`5x#Ro9S(_qICxxt0*isk>s@P;@}(R& z7!r@K%T*x$bYH(+m z5VSJBUxMMtrwszDPA_=>qHM>HyWr$;ciL~3trLH#9q6wT(2TD?z|N5Doci{_=e`Ij z294lw{>RTxv+q9Y#oXWkl)^dE#Qb>A_QzQjuZ4jrZs`aGfKxNAvl#)cVZc|493Nk-!ead<#)jj_?lmN$p9{q4)B z0ur;Ha{f4S!0`olv<>hya(3qlPcH1-CoJO}$YWkI_uqT=eX_5f*QFUq?Ag25bJCvL z%Z=ZFw+GL@P(KNjg-VvkY_UCl;$`BN~w4FKe?ac?b!@s2plfIPZ?RoPz zCj_`s5txPco{-)498}f`IGKaTyntZ2QT$8-4$u%*+ zc+w{GF=#kZVBVIC;d%&7&A0CC^lDt(o{}qEtN7*bgdX1q2I}hSyCJdHYxdC5S7~Ak z3+t~asY)5!i`SjXyN+MnckS4Q3H1pRJ)Qv9V*u?inPt4~xrd+MH=#{xJamfOF#+eO#r=JH)Stu^I#rP8zq%mU|jnn<-hF6^1G zu`0-Il2LmbOR^WJIK4CNbCVSC+VW{#U0lxFJKY)Pw`-m?m6(=n`C+Q}xjbP0l+XkK D5MzIe delta 69539 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 diff --git a/docs/ER-DiagramFile.mwb b/docs/ER-DiagramFile.mwb index 64d953370ece8645f76d027e2fe074078cb0a310..ee90f5e991fd3956fff04df78f71d50ef4d0ed35 100644 GIT binary patch delta 15852 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 delta 15823 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

2Q5(-1j$jzgrVamnx7)-igoDE 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 diff --git a/docs/ER-DiagramFile.mwb.bak b/docs/ER-DiagramFile.mwb.bak index 7b4776f764e886437753d587db8d163f21070a61..64d953370ece8645f76d027e2fe074078cb0a310 100644 GIT binary patch delta 13456 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

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml b/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml index ce647b6f..ae37eb60 100644 --- a/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml @@ -23,7 +23,7 @@ - + @@ -91,7 +91,7 @@ - + @@ -219,6 +219,7 @@ + diff --git a/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml b/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml index e69de29b..45e9ac78 100644 --- a/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml @@ -0,0 +1,393 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml b/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml index e69de29b..b1b6bbec 100644 --- a/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml @@ -0,0 +1,584 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml b/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml index e69de29b..3f0c81d0 100644 --- a/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml @@ -0,0 +1,1130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml b/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml index ce647b6f..ae37eb60 100644 --- a/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/charityPage.fxml @@ -23,7 +23,7 @@ - + @@ -91,7 +91,7 @@ - + @@ -219,6 +219,7 @@ + diff --git a/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml b/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml index e69de29b..45e9ac78 100644 --- a/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/creater_user_site.fxml @@ -0,0 +1,393 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml b/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml index e69de29b..b1b6bbec 100644 --- a/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/dashboard.fxml @@ -0,0 +1,584 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + diff --git a/helpmehelpapplication/src/main/resources/fxml/components/navbar.fxml b/helpmehelpapplication/src/main/resources/fxml/components/navbar.fxml new file mode 100644 index 00000000..f3cca80f --- /dev/null +++ b/helpmehelpapplication/src/main/resources/fxml/components/navbar.fxml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/organizationCard.fxml b/helpmehelpapplication/src/main/resources/fxml/components/organizationCard.fxml similarity index 97% rename from helpmehelpapplication/src/main/resources/fxml/organizationCard.fxml rename to helpmehelpapplication/src/main/resources/fxml/components/organizationCard.fxml index 47ddc788..94cf11ff 100644 --- a/helpmehelpapplication/src/main/resources/fxml/organizationCard.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/components/organizationCard.fxml @@ -6,7 +6,7 @@ - + From 3d264243ad44884f82d4195d9928878fea136932 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:03:46 +0200 Subject: [PATCH 121/128] Feat: Tried to split navbar into a component with dedicated controller, also other compontens fall under compoennts --- .../team6/controller/{ => components}/LoaderScene.java | 5 ++++- .../{ => components}/OrganizationCardController.java | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) rename helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/{ => components}/LoaderScene.java (90%) rename helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/{ => components}/OrganizationCardController.java (94%) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java similarity index 90% rename from helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java rename to helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java index 12f7f9b3..30236e9a 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/LoaderScene.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/LoaderScene.java @@ -1,4 +1,4 @@ -package ntnu.systemutvikling.team6.controller; +package ntnu.systemutvikling.team6.controller.components; import java.io.IOException; import java.util.Objects; @@ -10,6 +10,9 @@ import javafx.scene.image.Image; import javafx.stage.Stage; import ntnu.systemutvikling.team6.HmHApplication; +import ntnu.systemutvikling.team6.controller.AvailableOrganizationController; +import ntnu.systemutvikling.team6.controller.CharityPageController; +import ntnu.systemutvikling.team6.controller.DonationPageController; import ntnu.systemutvikling.team6.models.Charity; /** diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/OrganizationCardController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrganizationCardController.java similarity index 94% rename from helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/OrganizationCardController.java rename to helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrganizationCardController.java index b0ce278a..7644bbf8 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/OrganizationCardController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/OrganizationCardController.java @@ -1,4 +1,4 @@ -package ntnu.systemutvikling.team6.controller; +package ntnu.systemutvikling.team6.controller.components; import javafx.event.ActionEvent; import javafx.fxml.FXML; From 99b02801b6a04d867b7d0820550984041ae47fbb Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:04:06 +0200 Subject: [PATCH 122/128] Feat: NavvarFoorterController attempt --- .../components/NavbarFooterController.java | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/NavbarFooterController.java diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/NavbarFooterController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/NavbarFooterController.java new file mode 100644 index 00000000..0075893f --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/NavbarFooterController.java @@ -0,0 +1,33 @@ +package ntnu.systemutvikling.team6.controller.components; + +import javafx.event.ActionEvent; +import javafx.fxml.FXML; +import javafx.scene.control.TextField; + +public interface NavbarFooterController { + + default void switchToFrontPage(ActionEvent event) { + System.out.println("Click!"); + LoaderScene.LoadScene("FrontPage", event, null, null); + } + + default void switchToAboutPage(ActionEvent event) { + System.out.println("Click!"); + LoaderScene.LoadScene("aboutPage", event, null, null); + } + + default void switchToProfilePage(ActionEvent event) { + System.out.println("Click!"); + LoaderScene.LoadScene("aboutPage", event, null, null); + } + + default void handleSearch(ActionEvent event) { + System.out.println("Click!"); + LoaderScene.LoadScene("aboutPage", event, null, null); + } + + default void switchToLoginPage(ActionEvent event) { + System.out.println("Click!"); + LoaderScene.LoadScene("aboutPage", event, null, null); + } +} From a305dece8cf52cefdb39cb2a8b85e6ce7f823909 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:04:44 +0200 Subject: [PATCH 123/128] Fix: Missing u.userdisplay on new user object --- .../team6/database/Readers/CharitySelect.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java index a3b5d324..cb39b223 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/CharitySelect.java @@ -60,13 +60,13 @@ public CharityRegistry getCharitiesFromDB() { c.UUID_charities, c.org_number, c.pre_approved, c.status, f.UUID_feedback, f.feedback_comment, f.feedback_date, f.isAnonymous, f.charity_id, f.user_id, cv.charity_name, cv.charity_link, cv.description, cv.logoURL, cv.key_values, cv.logoBLOB, - u.UUID_user, u.user_name, u.user_email, u.user_password, u.role, + u.UUID_user, u.user_displayname, u.user_name, u.user_email, u.user_password, u.role, cat.category FROM Charities c LEFT JOIN Feedback f ON f.charity_id = c.UUID_charities LEFT JOIN User u ON f.user_id = u.UUID_user LEFT JOIN Charity_Categories cc ON cc.Charities_UUID_charities = c.UUID_charities - LEFT JOIN Cateegories cat ON cat.category_id = cc.Categories_category_id + LEFT JOIN Cat|egories cat ON cat.category_id = cc.Categories_category_id INNER JOIN CharityVanity cv ON cv.UUID_charity = c.UUID_charities; """; Statement stmt = conn.createStatement(); @@ -110,6 +110,7 @@ public CharityRegistry getCharitiesFromDB() { User userWithMinimalSettingsAndInbox = new User( rs.getString("UUID_User"), + rs.getString("user_displayname"), rs.getString("user_name"), rs.getString("user_email"), rs.getString("user_password"), @@ -158,7 +159,7 @@ public ArrayList getFeedbackforCharityUUID(String charity_uuid) { """ SELECT f.UUID_feedback, f.feedback_comment, f.feedback_date, f.isAnonymous, f.charity_id, f.user_id, - u.UUID_user, u.user_name, u.user_email, u.user_password, u.role + u.UUID_user, u.user_displayname, u.user_name, u.user_email, u.user_password, u.role FROM Feedback f LEFT JOIN User u ON f.user_id = u.UUID_user WHERE f.charity_id = ?; @@ -171,6 +172,7 @@ public ArrayList getFeedbackforCharityUUID(String charity_uuid) { User userWithSettingsAndNoInbox = new User( rs.getString("UUID_User"), + rs.getString("user_displayname"), rs.getString("user_name"), rs.getString("user_email"), rs.getString("user_password"), From fce473ba0befc0107d86c326076dd938977b188a Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:04:51 +0200 Subject: [PATCH 124/128] Fix: Missing u.userdisplay on new user object --- .../systemutvikling/team6/database/Readers/DonationSelect.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java index 1183d750..fe4a5afe 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/Readers/DonationSelect.java @@ -59,7 +59,7 @@ public DonationRegistry getDonationFromDB() { SELECT d.UUID_Donations, d.amount, d.isAnonymous, d.date, d.charity_id, d.user_id, c.UUID_charities, c.org_number, c,pre_approved, c.status, - u.UUID_User, u.user_name, u.user_email, u.user_password, u.role + u.UUID_User, u.user_displayname u.user_name, u.user_email, u.user_password, u.role FROM Donations d INNER JOIN Charities c ON d.charity_id = c.UUID_charities INNER JOIN User u ON d.user_id = u.UUID_user @@ -79,6 +79,7 @@ public DonationRegistry getDonationFromDB() { User user = new User( rs.getString("UUID_User"), + rs.getString("user_displayname"), rs.getString("user_name"), rs.getString("user_email"), rs.getString("user_password"), From 68bbbd05ca87fe866136e27c8e44c441e332aaae Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:05:17 +0200 Subject: [PATCH 125/128] Fix: DonationDAO turned into non-static so changes --- .../team6/controller/DonationPageController.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java index c2712761..4a69ed54 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/DonationPageController.java @@ -7,7 +7,9 @@ import javafx.scene.control.ButtonType; import javafx.scene.control.Label; import javafx.scene.control.TextField; +import ntnu.systemutvikling.team6.controller.components.LoaderScene; import ntnu.systemutvikling.team6.database.DAO.DonationDAO; +import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.models.Charity; import ntnu.systemutvikling.team6.models.user.User; @@ -24,6 +26,8 @@ public class DonationPageController { @FXML private TextField donationSearchField; + private DonationDAO donationSender = new DonationDAO(new DatabaseConnection()); + /** * Initialize method for the donation page. Sets the charity name label to the name of the charity * that is being donated to. The charity is set from the original page it was called from when the @@ -116,7 +120,7 @@ public void Donate(ActionEvent event) { * @param amount */ public void processDonation(Charity charity, User user, double amount) { - DonationDAO.addDonation(charity, user, amount); + donationSender.addDonation(charity, user, amount); } /** From 8315fcf509277f9231515a5c6acfa0ce7669a21a Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:05:46 +0200 Subject: [PATCH 126/128] Feat: Attempt to make a base controller manual that everycontroller will expand --- .../controller/components/BaseController.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/BaseController.java diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/BaseController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/BaseController.java new file mode 100644 index 00000000..da4af23a --- /dev/null +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/components/BaseController.java @@ -0,0 +1,17 @@ +package ntnu.systemutvikling.team6.controller.components; + +import ntnu.systemutvikling.team6.service.AuthenticationService; + +public abstract class BaseController { + protected AuthenticationService authToken; + + public void setAuthToken(AuthenticationService authToken){ + this.authToken = authToken; + authTokenisSet(); + }; + protected void authTokenisSet(){} // Do stuff after authtoken is set, on each controller + + protected boolean isLoggedin(){ + return authToken.isLoggedin() && authToken != null; + } +} From c348161dbd454e387035f0ec08ada3a4524fba84 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:06:23 +0200 Subject: [PATCH 127/128] Feat: Attempt to use said base controller --- .../AvailableOrganizationController.java | 17 ++++++----------- .../team6/controller/CharityPageController.java | 11 +---------- .../team6/controller/FrontpageController.java | 14 ++++++++++++-- 3 files changed, 19 insertions(+), 23 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java index 47a36eb8..ee3a19f1 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/AvailableOrganizationController.java @@ -9,6 +9,10 @@ import javafx.scene.Parent; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; +import ntnu.systemutvikling.team6.controller.components.BaseController; +import ntnu.systemutvikling.team6.controller.components.LoaderScene; +import ntnu.systemutvikling.team6.controller.components.NavbarFooterController; +import ntnu.systemutvikling.team6.controller.components.OrganizationCardController; import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.database.Readers.CharitySelect; import ntnu.systemutvikling.team6.models.Charity; @@ -22,7 +26,7 @@ * on the featured charity to see more details about it. The user can also switch to the charity * page or donation page for the selected charity. */ -public class AvailableOrganizationController { +public class AvailableOrganizationController extends BaseController implements NavbarFooterController { @FXML private TextField searchField; @FXML private FlowPane cardsContainer; @@ -88,7 +92,7 @@ private void displayCharities(List charities) { for (Charity charity : charities) { try { - FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/organizationCard.fxml")); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/components/organizationCard.fxml")); Parent card = loader.load(); OrganizationCardController cardController = loader.getController(); @@ -115,15 +119,6 @@ public void setInitialSearch(String query) { searchField.setText(query); } - /** - * This method is used to switch to the front page. - * - * @param event action event from button click - */ - @FXML - public void switchToFrontPage(ActionEvent event) { - LoaderScene.LoadScene("FrontPage", event, charity, null); - } /** * This method is used to switch to the charity page for the selected charity. diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java index b52064f6..121ad3be 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/CharityPageController.java @@ -4,6 +4,7 @@ import javafx.fxml.FXML; import javafx.scene.control.Label; import javafx.scene.control.TextField; +import ntnu.systemutvikling.team6.controller.components.LoaderScene; import ntnu.systemutvikling.team6.models.Charity; /** @@ -40,16 +41,6 @@ public void setCharity(Charity charity) { CharityName.setText(charity.getName()); } - /** - * This method is used to switch to the front page. - * - * @param event - */ - @FXML - public void switchToFrontPage(ActionEvent event) { - System.out.println("Click"); - LoaderScene.LoadScene("FrontPage", event, charity, null); - } /** * This method is used to switch to the donation page. diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java index 91ac90cd..b5b45226 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/controller/FrontpageController.java @@ -12,6 +12,10 @@ import javafx.scene.control.Label; import javafx.scene.control.TextField; import javafx.scene.layout.FlowPane; +import ntnu.systemutvikling.team6.controller.components.BaseController; +import ntnu.systemutvikling.team6.controller.components.LoaderScene; +import ntnu.systemutvikling.team6.controller.components.NavbarFooterController; +import ntnu.systemutvikling.team6.controller.components.OrganizationCardController; import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.database.Readers.CharitySelect; import ntnu.systemutvikling.team6.database.Readers.DonationSelect; @@ -27,7 +31,7 @@ * it, or click on the featured charity to see more details about it. It also has buttons to switch * to the charity page and the donation page for the featured charity */ -public class FrontpageController { +public class FrontpageController extends BaseController implements NavbarFooterController { @FXML private Charity featuredCharity; @FXML private FlowPane cardsContainer; @FXML private Label Carosel_Organisasjon; @@ -43,6 +47,11 @@ public class FrontpageController { private List allCharities = new ArrayList<>(); + @Override + protected void authTokenisSet(){ + + } + /** * Initialize method for the front page. This method is called when the front page is loaded. It * retrieves the list of charities and donations from the database. The list of charities is @@ -88,6 +97,7 @@ public void initialize() { } } + /** * This method is used to switch to the charity page for the selected charity * @@ -210,7 +220,7 @@ private void displayCharities(List charities) { for (Charity charity : charities) { try { - FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/organizationCard.fxml")); + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/components/organizationCard.fxml")); Parent card = loader.load(); OrganizationCardController cardController = loader.getController(); cardController.setOrganization(charity); From b7599418449162f6d519c311b0f71a8c99ae63bf Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Wed, 15 Apr 2026 18:06:37 +0200 Subject: [PATCH 128/128] Fix: removed comment --- .../java/ntnu/systemutvikling/team6/HmHApplication.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java index a78be83e..966cf897 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/HmHApplication.java @@ -3,7 +3,12 @@ import static javafx.application.Application.launch; import java.net.http.HttpClient; +import java.util.Objects; + import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Scene; +import javafx.scene.image.Image; import javafx.stage.Stage; import ntnu.systemutvikling.team6.database.DatabaseConnection; import ntnu.systemutvikling.team6.database.DatabaseSetup; @@ -15,7 +20,6 @@ public class HmHApplication extends Application { @Override public void start(Stage stage) throws Exception { - /* FXMLLoader fxmlLoader = new FXMLLoader(HmHApplication.class.getResource("/fxml/frontPage.fxml")); Scene scene = new Scene(fxmlLoader.load()); @@ -30,8 +34,6 @@ public void start(Stage stage) throws Exception { stage.setFullScreen(true); stage.show(); - */ - } @Override

5WGcV>h-PDe>>U=P0q z`xzE*Q`aauX|vyrPcnT@{$lBHb~Rcw9t|O-OS93aY8W@xBD4p}!6zzOghI|KeW@>N zIu`5|sFo>xmEcxb+1hc&V7e-B1R!0TG5%vFz61=?i$t#iYpcCfvaKi^Ir)%_T!)9V zik>v3dmwi%ZHEt~t)~?2O&|b^Vok;sa$Eh*6Rq4<$Tt|0e{XBe zv5|WA`hv0OZVgo7>+*>5Hm`ZA2?lpn&r?C|&e^DH9?shGR~k&0fAhkB?<;(qxv0v< zEy+gN!(*4E7c0XRbN;kPM@7P&`e~TVNsWa>!}VCBkHg`j291E%z}qvb4)^z|0mqB} zqm9~!y`>8;b?zZnQgsz&aM=ait@L%yM z8LK9vhoT#H;n%ss&h&_I{W6Bt-qpbA!wVx5k`8~kNXK=E)IU}#sfg?G#a2D1i5J!_ zWIcuta22P%lT70X8-f+cqZ@Q?KE_rJIZZp~_Zc$3<&YDXtg!{l=c}bgCM=Ez4BE2sMd=SIP;@{&IZi`F(mf=BG8- zEP{@+sjP=F+`uB_3Z@cgw*)I!kwQR6&ZOzR4g@@2>UDQ7d15&$tVFm~7++lc&XU!5 zeUfm}Iy63B8~(*iSFA=Y&wykh&+k4CT>uLmhZEGw9W;k1ADZBA#Ex)t_v_4T?M~z8 z);k{w+E%r|PRTDc75wI}y;-Z*cTO7mxZBMM%iFv;Emf}qm)ZthX#pffF`yrEP64(R z0gV8DAfG>9{rJFj0u`a^-%l9zpQf-`i;S;z91SbKlr7=>5`DiL0(fvjyR7WHe4eJ? z9N)9PHd__johUo{kz;Vb6usRqFCd0{kOe#VzBbJj`dM2Q%%=9vGV|6<-|@Hg93IIS z85(vibT;cdIJEuBbn&AwCou{n1qpF5;v$8#m2}SOM$E1iND%}i*(R+~O@$Y9y^`7a+z^Kc#X10N z65Vq8DCM6nC;L7OA4O#Ao&5nfVP zp~hBiwll;Qobh!v$(JM3JLa@?wRPuK{UOSg%Z06~rsq~(q9SQdg76(Deq}4RoT7$Z zDFL(N0vooJs*?{gk&0-=6S8&cgiL=1oa>8)H7L3R%jCrMa(x<-SrqJ8hgMHIK4&f% zo`&HMEkh#dIiYtUUGx?}VoYNcf?tP0zZ&?sL)*#gSj`2D&H2zr%NGboOzsiq{vL2`Pt?X!Dpj@Hw-pUajl%;tce9lsvB z*){p9Tw5XZ%q91Ahi2D1f6nFxqunNdwr>Z{Qk$#Rpce<**UKWHaeAuAbH~N-lz^9+ z!JwyV>XBzF(ylp7gK7KgdizXuc=vQ^h5PY^?ObXW@iGl#kv_|EFTKq8WH}UWAOas1 z{9_VA!2-tLdkNU)`$hA5>4D{WDaWertz4y^$)6?jLlPc5UIbgLGRD3fhMl!7vCnz# zj~i2|mNWP-oJPe!!)L3Z!uOk@!;y;T+HK-4r-7}ZO5X0(6m6iR=c#%9&Y_{>Hbfd3 ziF*$U0dZep7~y0kSInh4M|}hCZ|@DNq7%8gc*S$~o3#KNg5Yak@g~mN-eEOnX!Jx*^I{S%@oB{RAtCYpUG z3a!kaTXX?L7!w4&Ph7})$}J+-sQbId?2KD@1c#pVxp~@Lr%|IameI|By_RLW@|;Ts zhbtcsHxI2_t?yZvzO$gRr8exXmv+6q-F{Zcs81C$?qXKRl|bMU2hkJpnd8s@7#wiS z?~AYTK6*IjmeyUZ_YGQ3G;A2HL~}=%Wo$}W^ZE(sy}$Z-cJ4B#>{QNSR%)&n?UH$? zObrZ!Xd*r;gE3SJX#)fz0`QxK>{y+}QaOtsLO)$a4N<*W7$m`1JdIu7fv%}Z3MMJ= zZo(v&sU@N2Tv3=U!*q!-e=`pJH0%9LsAN{0Pw+tX2N)U$CAng17Y-rl2CA%3zk=wf z_alJ8bw+j88+MqOWisP@{fGrPCR)zdb3*^pYb0@aXmMwGH5#3aII@5=MLp6ztKdgC z(H^`zFP&PdfzM&NBf;b)UD9gun7)O&8ahP#6h+W3sSwUNF~YO+45L2yj;5 z{?GQo*dZ|13GQ$*VdAo3xxxeSk|37~elZ|V!ymi_?I0A@plU;2yA!wKH}JDX*OxFD zj3A7F;LMCSf&e=`9?KF#qY{`lj`&|4*c{axhRKOAIF1soegTml?ZXCKUP>ko5%>4TnW~^Du%5C&Gmf0g{bH;kB60zr#txCIse#un2z%W1xz- zbyJff99p!ZipC>|8YZ6}euplSFFE!?4eX43-#skLLXt7Gdh$Y@9jaPnjUhtg6D&M=^A7-LCdS#}oQu!j)Q<`#O^;sz6r_v^ZER-7l( zdcv(t-w6{J&`OOf> zHal_)W!^6+DUAaTeHtc25(<|A&0L2_PWo$pCB<}DCtIVVia4$fa~YIjA0I-*k(drG z6mJBQB{wIMr~v(;Uw({Se3TrKgi`H(fHSe2OW~22o%;8=P#DA>?AYn_-*69+U|P}v zFMc*$_ZVpL2_UW4bd-ie0%~;fh z8Qwy12c^STgOz-FTIP@p-alJyTIvWf2+f(t^e_;229}K^G?3krYx|3=8!>DOmTKfD ze$cq}?@?>>vgVjHM9He*fHhe_>A)a>UxJ;D_p`e)8Q_i5m#{0Vu1#Cv5}Z#>Lq<=C zWQ>wRe8fc&1tz+9+3^TC?BhevzP*`R-DH-kme(rUcwv`)~x<9r7bU~Wfq<}q@0&T&cm;>&| z1|)|B1Vfc?4ZsME^!y3oTUrt=pFzuARQuICx~^|b&AXY~9cZ>W?rnK%u`24u`u_Pa z7u#$QE~f80_w2|AVuPF*<#=_|NN!0_Edaw_BRh?yT6k1?{;fp1z;z>w*{9&!08kT^ zxEOvg^!xUC0(7+04ctsP)jolYDr{r>bHwuv`oA-n6_5*i7P-c*29x&(D`0I>Q_ngo z&_JVwq?TOp_bLva!n2rxL^LttTF=uFYtFIaheN3sRzf*%3-zBIT*g1?dlt=rJFbIU zoj~lIYcPS_h#XL9&ZXEeoyFxsgi?_}Jq?NK5(mL_*?H;*paj#3z;G%wZQ>U3W-H}D zso_y1ABMqECV47IBldgvq&_ z*A;Q(pJ2~xd70^YM9~mLD|w_n4Jc3e{&!k)_>Z16vFcD~YVHj}!}%7kgAu#Ku8ws@pHqXG7WgrgI}ZE!)utXf za#Im|u#kiz5Nnbna)qBLh4}ggndB%b;u21jDd2{g$c>WX--ZOgw)vKm>6caWU&rN0 zVCnNbY~u=7xze|oVk6${q}&cS{M#&m_~pOCR|=wPZAsBvE!3bjdT?UjpYy(sy*|~E z2lfnG=cELoK1j$Ha`f{trb8n0&;AMbP8S@QW6%HHYI9>I`>{W%5}|Sdk%YxD^@Y=6sG><-Z3)GDP3YY*QE8f!t2u<^0dk zlC212aBuxcX4~)XvbdtNihNzwA?B~v+hYfobfd(~?X5~NwR6bo{|}k)5Y&H#8(B7J z*9t7(^WlNvAfi~inr%3f$xteZZrZI%Hi1agh;!Ro{&bkirG8SqJ?4pv`0WCF>RvK$ zm0w&llVdpa&ouux;`dt3Y0;f-(ch(9?>ug@S8x_9TaDG0)blf<=mz?v2M43}dtRF| za?su3Y7Mco6JkRUH~C|#W@I@1L7uFpy8I&jcE?v2o_hzQhpXjx^S{l}vrQ^;p<9lJ zt-Na$8X8{I9IJBRp03uz!yhg5lMlTGr|f=#eHEWt z_vMhk)5dyk28Jd|>T2j^Yp7*e*KybZ=J3r0;E5J>bFHHkaLm9$a>&H`d+5tS+Od`Y z#X&>`XD#T=v1_$NkCFSIC10STt*jNKl4Zq3){*Q@vaJq9y926|C28xpf%bHy-V>}A zdh&O<_Tl;9Xac0>L%O;I=mmZd)gbei-Y<6fVZNEs`zSIHvFy=VuUN8 zI_C^STW2COcBX^=KmJ(+>l%x(sp7P|R31a6qapj*rSXmx;eErXhgS|ZUEQbLEqk@2 z&sRZ@t@f|M{Yvce*mrL}h5Y=rh;`Do)w_|{C+5u0mevA+&TFFtDVDBZJ=m3;Gh?pJ!5Q0uu^Jn;2KdtLD! z2#RR!MQu|~71M>ShU+6Lqu^LaeYLU@rrgcw+(eD$;T72y4qw${6-iYH>FTpzSzltx zI>a*~F#2A#q{p>TVZ*6$>q+d3! z>^U{S zry+WGP>~>7^S7+gOx3_;xF7%+(1E)tDwiA_mzm6(u6%j~pu6^~eF_R=L}__v&ko(1 z)9=Hg+a)aij_>jLkiSnk@NWC|;0XBh`_#1?u6fTEY&++L<5ItLxsXOKl03`sZMC%A zKI|L$N0C)L{)@th{x@p_^>28&gzBf-LKflv&Huj#*WS_0j-Qto{J)VLFPDaUo<=0} z|2vukX%S`T`hQjUPv!rN=0Med8J_=?Q&E715rzG4zQ@Z2LM%oC{SCq=Mh49U`64Fz Fe*jcb4$J@m From d615a1aeb0e0b0427ce172fd24ec3ebe0436a924 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 13:22:08 +0200 Subject: [PATCH 043/128] Feat: User object has a another constructor taylored for getting data from Database --- .../team6/models/user/User.java | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java index ef590006..dded1557 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java @@ -68,6 +68,46 @@ public User( this.settings = settings; this.inbox = inbox; } + /** + * Creates a new user taylored for getting info from DATABASE. + * Settings and inbox can be set on a later date throught another method in databaseManager class + * + * @param uuid gives the user a unique identifier with UUID + * @param name the name of the user + * @param email the email of the user + * @param password the password for the user + * @param role users role + * @throws IllegalArgumentException if any required argument is invalid. + */ + public User( + String uuid, String name, String email, String password, String role) { + + if (uuid == null || uuid.isBlank()) { + throw new IllegalArgumentException("UUID cannot be null or blank."); + } + + if (name == null || name.isBlank()) { + throw new IllegalArgumentException("Name cannot be null or blank."); + } + + if (email == null || email.isBlank() || !email.contains("@") || !email.contains(".")) { + throw new IllegalArgumentException( + "Email cannot be null or blank," + " and must contain '@' and '.'"); + } + + if (role == null) { + throw new IllegalArgumentException("Role cannot be null"); + } + + + this.id = UUID.fromString(uuid); + this.name = name; + this.email = email; + this.passwordHash = password; + this.role = Role.valueOf(role); + this.settings = null; + this.inbox = null; + } // Add Getters From 416f75cce055609fe41281f57638f5d9d2cddc2b Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 13:49:42 +0200 Subject: [PATCH 044/128] Feat: Two new methods for DataManager: GetUser (return user) and getUsers(returns a UserRegistry) --- .../team6/database/DatabaseManager.java | 69 ++++++++++++++++++- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java index e72fc5d1..16e77b67 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/database/DatabaseManager.java @@ -6,6 +6,7 @@ import java.util.UUID; import ntnu.systemutvikling.team6.models.*; +import ntnu.systemutvikling.team6.models.user.User; import ntnu.systemutvikling.team6.scraper.APICharityData; /** @@ -114,6 +115,7 @@ FOREIGN KEY (`user_id`) `UUID_User` CHAR(36) NOT NULL, `user_name` VARCHAR(255) NOT NULL, `user_email` VARCHAR(255) NOT NULL, + `user_password` VARCHAR(255) NOT NULL, `role` VARCHAR(45) NOT NULL, PRIMARY KEY (`UUID_User`)) ENGINE = InnoDB; @@ -424,6 +426,66 @@ public CharityRegistry getCharitiesFromDB() { } return registry; } + public UserRegistry getUsersFromDB(){ + UserRegistry registry = null; + Connection conn = null; + try { + conn = connection.getMySqlConnection(); + String sql_query = + """ + SELECT UUID_User, user_name, user_email, user_password, role FROM User + """; + Statement stmt = conn.createStatement(); + ResultSet rs = stmt.executeQuery(sql_query); + + while (rs.next()) { + User user = new User( + rs.getString("UUID_User"), + rs.getString("user_name"), + rs.getString("user_email"), + rs.getString("user_password"), + rs.getString("role") + ); + registry.addUser(user); + } + } catch (SQLException e) { + e.printStackTrace(); + throw new RuntimeException("ERROR: Something went wrong during updating charities table."); + } + return registry; + } + + public User getUserFromDBUuid(UUID uuid){ + User user = null; + Connection conn = null; + try { + conn = connection.getMySqlConnection(); + String sql_query = + """ + SELECT UUID_User, user_name, user_email, user_password, role FROM User + WHERE UUID_User = ?; + """; + PreparedStatement stmt = conn.prepareStatement(sql_query); + stmt.setString(1, uuid.toString()); + stmt.setMaxRows(1); + ResultSet rs = stmt.executeQuery(); + + while (rs.next()) { + user = new User( + rs.getString("UUID_User"), + rs.getString("user_name"), + rs.getString("user_email"), + rs.getString("user_password"), + rs.getString("role") + ); + } + } catch (SQLException e) { + e.printStackTrace(); + throw new RuntimeException("ERROR: Something went wrong during updating charities table."); + } + return user; + } + public DonationRegistry getDonationFromDB() { DonationRegistry registry = null; @@ -474,7 +536,8 @@ public DonationRegistry getDonationFromDB() { } return registry; } - public ArrayList getFeedbackforChairty(Charity charity){ + public ArrayList setFeedbackforChairty(Charity charity){ + /* ArrayList Feedbacks = new ArrayList<>(); Connection conn = null; try { @@ -501,6 +564,8 @@ public ArrayList getFeedbackforChairty(Charity charity){ } finally { conn = null; } - return Feedbacks + + */ + return null; } } From 8db6609e1e7a5a7a570e4f41e854a4a280f09db6 Mon Sep 17 00:00:00 2001 From: AdrianBalunan Date: Tue, 7 Apr 2026 14:08:07 +0200 Subject: [PATCH 045/128] Feat: User set methods (for database) --- .../team6/models/user/User.java | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java index dded1557..4c3f1087 100644 --- a/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java +++ b/helpmehelpapplication/src/main/java/ntnu/systemutvikling/team6/models/user/User.java @@ -16,18 +16,17 @@ public class User { private static final PasswordHasher passwordHasher = new PasswordHasher(); - private final UUID id; + private UUID id; private String name; private String email; private String passwordHash; - private final Role role; - private final Settings settings; - private final Inbox inbox; + private Role role; + private Settings settings; + private Inbox inbox; /** * Creates a new user. * - * @param id gives the user a unique identifier with UUID * @param name the name of the user * @param email the email of the user * @param password the password for the user @@ -186,4 +185,18 @@ public void setEmail(String email) { public boolean checkPassword(String password) { return passwordHasher.isValidPassword(password, passwordHash); } + + public void setSettings(Settings settings){ + if (settings == null){ + throw new IllegalArgumentException("Settings cannot be null"); + } + this.settings = settings; + } + + public void setInbox(Inbox inbox){ + if (inbox == null){ + throw new IllegalArgumentException("Inbox cannot be null"); + } + this.inbox = inbox; + } } From aed58fdf404da32598a5ff89c39db07890f223a1 Mon Sep 17 00:00:00 2001 From: meenakshijay1005-netizen Date: Tue, 7 Apr 2026 19:28:37 +0200 Subject: [PATCH 046/128] changes in xml --- .../fxml/profile_organization.fxml/edit.fxml | 242 ++++++++++++++++ .../fxml/profile_organization.fxml/inbox.fxml | 263 +++++++++++++++++ .../profile_organization.fxml/payments.fxml | 266 ++++++++++++++++++ .../profile_organization.fxml/settings.fxml | 225 +++++++++++++++ 4 files changed, 996 insertions(+) diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/edit.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/edit.fxml index e69de29b..ddc5f4a9 100644 --- a/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/edit.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/profile_organization.fxml/edit.fxml @@ -0,0 +1,242 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - + - + + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/helpmehelpapplication/src/main/resources/fxml/profile_org_Inbox.fxml b/helpmehelpapplication/src/main/resources/fxml/profile_org_Inbox.fxml index adff16fb..e369d53c 100644 --- a/helpmehelpapplication/src/main/resources/fxml/profile_org_Inbox.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/profile_org_Inbox.fxml @@ -6,258 +6,303 @@ + + + + - - + - + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - + - - + - + - - - + + + + + + + - + - + + - - + + - + - + - + - - - + - + + - + - + + - - + + - + - + - + - - - + - + + + + + + + + + + + + + + + + + + - + - + - - - + + - + - + - + - + - + - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml b/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml index e69de29b..3f0c81d0 100644 --- a/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml +++ b/helpmehelpapplication/src/main/resources/fxml/available_organizations.fxml @@ -0,0 +1,1130 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +