From 152b5e497243bc18b9b2a2a468632f1bfd994db6 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Mon, 2 Oct 2017 21:12:34 +0200
Subject: [PATCH] Fixed #212 - month report kills performance (improved modal
 stage, server tag requests are causing delay)

---
 .../ui/controller/Controller.java             | 13 ++++++--
 .../ui/controller/ReportController.java       | 33 ++++++++++++++-----
 .../budgetmaster/languages/_de.properties     |  1 +
 .../budgetmaster/languages/_en.properties     |  1 +
 .../budgetmaster/logic/utils/Strings.java     |  1 +
 5 files changed, 38 insertions(+), 11 deletions(-)

diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java
index a268d30c4..2dbef46aa 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/Controller.java
@@ -164,6 +164,12 @@ public class Controller extends BaseController
 			
 			reportController = loadTab("/de/deadlocker8/budgetmaster/ui/fxml/ReportTab.fxml", tabReports);
 			reportController.init(this);
+			tabReports.selectedProperty().addListener((a,b,c)->{
+				if(c)
+				{
+					reportController.refresh();
+				}
+			});
 			
 			settingsController = loadTab("/de/deadlocker8/budgetmaster/ui/fxml/SettingsTab.fxml", tabSettings);
 			settingsController.init(this);		
@@ -327,12 +333,15 @@ public class Controller extends BaseController
 	{
 		homeController.refresh();
 		paymentController.refresh();
-		categoryController.refresh();
-		reportController.refresh();
+		categoryController.refresh();		
 		if(tabCharts.isSelected())
 		{
 			chartController.refresh();
 		}
+		if(tabReports.isSelected())
+		{
+			reportController.refresh();
+		}
 	}
 	
 	public ArrayList<CategoryBudget> getCategoryBudgets()
diff --git a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java
index fd9cc1114..a99a28ee7 100644
--- a/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java
+++ b/BudgetMasterClient/src/main/java/de/deadlocker8/budgetmasterclient/ui/controller/ReportController.java
@@ -557,14 +557,16 @@ public class ReportController implements Refreshable, Styleable
 
 	private void refreshTableView()
 	{
-		tableView.getItems().clear();
+		Platform.runLater(()->{tableView.getItems().clear();});
 
 		ArrayList<Payment> payments = controller.getPaymentHandler().getPayments();		
 		if(payments != null)
 		{
 			ArrayList<ReportItem> reportItems = createReportItems(payments);
-			ObservableList<ReportItem> objectsForTable = FXCollections.observableArrayList(reportItems);
-			tableView.setItems(objectsForTable);
+			Platform.runLater(()->{;
+				ObservableList<ReportItem> objectsForTable = FXCollections.observableArrayList(reportItems);
+				tableView.setItems(objectsForTable);
+			});
 		}
 	}
 	
@@ -761,6 +763,8 @@ public class ReportController implements Refreshable, Styleable
 	@Override
 	public void refresh()
 	{
+		Stage modalStage = UIHelpers.showModal(Localization.getString(Strings.TITLE_MODAL), Localization.getString(Strings.LOAD_REPORT_TAB), controller.getStage(), controller.getIcon());
+		
 		if(controller.getFilterSettings().equals(new FilterSettings()))
 		{
 			labelFilterActive.setVisible(false);
@@ -770,17 +774,28 @@ public class ReportController implements Refreshable, Styleable
 			labelFilterActive.setVisible(true);
 		}
 		
-		reportPreferences = getReportPreferences();
-		saveReportPreferences();
-		refreshTableView();
-		applyReportPreferences();
-		tableView.refresh();
-		
 		DateTime currentDate = controller.getCurrentDate();
 		String currentMonth = currentDate.toString("MM");
 	    String currentYear = currentDate.toString("YYYY");
 	   
 	    initialReportFileName = Localization.getString(Strings.REPORT_INITIAL_FILENAME, currentYear, currentMonth);
+		
+		reportPreferences = getReportPreferences();
+		saveReportPreferences();
+		
+		Worker.runLater(() -> {
+			refreshTableView();
+
+			Platform.runLater(() -> {
+				if(modalStage != null)
+				{
+					modalStage.close();
+				}
+				
+				applyReportPreferences();
+				tableView.refresh();
+			});
+		});
 	}
 
 	@Override
diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
index 13c3d86a0..cbf29d3b3 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_de.properties
@@ -38,6 +38,7 @@ title.tags=Das Tag-Eingabefeld
 # LOAD
 load.charts=Lade Diagramme...
 load.data=Lade Daten...
+load.report.tab=Lade Monatsbericht...
 load.report=Der Monatsbericht wird erstellt, bitte warten...
 load.database.export=Die Datenbank wird exportiert, bitte warten...
 load.database.import=Die Datenbank wird importiert, bitte warten...
diff --git a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
index fee2f5fa3..1620c6e72 100644
--- a/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
+++ b/BudgetMasterClient/src/main/resources/de/deadlocker8/budgetmaster/languages/_en.properties
@@ -38,6 +38,7 @@ title.tags=The Tag-Inputfield
 # LOAD
 load.charts=Loading Charts...
 load.data=Loading Data...
+load.report.tab=Loading Month Report...
 load.report=Please wait while the report is being generated...
 load.database.export=Please wait while the database is being exported...
 load.database.import=Please wait while the database is being imported...
diff --git a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
index 8cbd6e313..9ab0bee58 100644
--- a/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
+++ b/BudgetMasterCore/src/main/java/de/deadlocker8/budgetmaster/logic/utils/Strings.java
@@ -40,6 +40,7 @@ public class Strings
     //LOAD
     public static final String LOAD_CHARTS = "load.charts";
     public static final String LOAD_DATA = "load.data";
+    public static final String LOAD_REPORT_TAB = "load.report.tab";
     public static final String LOAD_REPORT = "load.report";
     public static final String LOAD_DATABASE_EXPORT = "load.database.export";
     public static final String LOAD_DATABASE_IMPORT = "load.database.import";
-- 
GitLab