From c5f93b3607b8b7ec277a74b83d9dd66c7a9007ca Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 26 Feb 2023 21:09:35 +0100
Subject: [PATCH] #728 - improve access to request attributes

---
 .../settings/SettingsController.java          | 12 +++----
 .../TransactionImportController.java          | 32 +++----------------
 .../src/main/resources/application.properties |  2 ++
 3 files changed, 13 insertions(+), 33 deletions(-)

diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
index 2e14ae09f..1df27b2c3 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
@@ -86,7 +86,7 @@ public class SettingsController extends BaseController
 
 	private static class RequestAttributeNames
 	{
-		public static final String DATABASE = "database";
+		public static final String DATABASE_TO_IMPORT = "databaseToImport";
 		public static final String IMPORT_TEMPLATE_GROUPS = "importTemplatesGroups";
 		public static final String IMPORT_TEMPLATES = "importTemplates";
 		public static final String IMPORT_CHARTS = "importCharts";
@@ -123,7 +123,7 @@ public class SettingsController extends BaseController
 	public String settings(WebRequest request, Model model)
 	{
 		prepareBasicModel(model, settingsService.getSettings());
-		request.removeAttribute(RequestAttributeNames.DATABASE, RequestAttributes.SCOPE_SESSION);
+		request.removeAttribute(RequestAttributeNames.DATABASE_TO_IMPORT, RequestAttributes.SCOPE_SESSION);
 		request.removeAttribute(RequestAttributeNames.IMPORT_TEMPLATE_GROUPS, RequestAttributes.SCOPE_SESSION);
 		request.removeAttribute(RequestAttributeNames.IMPORT_TEMPLATES, RequestAttributes.SCOPE_SESSION);
 		request.removeAttribute(RequestAttributeNames.IMPORT_CHARTS, RequestAttributes.SCOPE_SESSION);
@@ -375,7 +375,7 @@ public class SettingsController extends BaseController
 			DatabaseParser importer = new DatabaseParser(jsonString);
 			InternalDatabase database = importer.parseDatabaseFromJSON();
 
-			request.setAttribute(RequestAttributeNames.DATABASE, database, RequestAttributes.SCOPE_SESSION);
+			request.setAttribute(RequestAttributeNames.DATABASE_TO_IMPORT, database, RequestAttributes.SCOPE_SESSION);
 			return ReturnValues.REDIRECT_IMPORT_DATABASE_STEP_1;
 		}
 		catch(Exception e)
@@ -391,7 +391,7 @@ public class SettingsController extends BaseController
 	@GetMapping("/database/import/step1")
 	public String importStepOne(WebRequest request, Model model)
 	{
-		model.addAttribute(ModelAttributes.DATABASE, request.getAttribute(RequestAttributeNames.DATABASE, RequestAttributes.SCOPE_SESSION));
+		model.addAttribute(ModelAttributes.DATABASE, request.getAttribute(RequestAttributeNames.DATABASE_TO_IMPORT, RequestAttributes.SCOPE_SESSION));
 		return ReturnValues.IMPORT_DATABASE_STEP_1;
 	}
 
@@ -401,8 +401,8 @@ public class SettingsController extends BaseController
 									@RequestParam(value = "TEMPLATE_GROUP", required = false) boolean importTemplateGroups,
 									@RequestParam(value = "CHART", required = false) boolean importCharts)
 	{
-		final InternalDatabase database = (InternalDatabase) request.getAttribute(RequestAttributeNames.DATABASE, RequestAttributes.SCOPE_SESSION);
-		request.removeAttribute(RequestAttributeNames.DATABASE, RequestAttributes.SCOPE_SESSION);
+		final InternalDatabase database = (InternalDatabase) request.getAttribute(RequestAttributeNames.DATABASE_TO_IMPORT, RequestAttributes.SCOPE_SESSION);
+		request.removeAttribute(RequestAttributeNames.DATABASE_TO_IMPORT, RequestAttributes.SCOPE_SESSION);
 
 		prepareBasicModel(model, settingsService.getSettings());
 
diff --git a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java
index f868c4ed1..2644ca87e 100644
--- a/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java
+++ b/BudgetMasterServer/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionImportController.java
@@ -79,11 +79,11 @@ public class TransactionImportController extends BaseController
 	{
 		request.removeAttribute(RequestAttributeNames.CURRENT_CSV_TRANSACTION, RequestAttributes.SCOPE_SESSION);
 
-		// copy session attributes to model, otherwise they are not available in freemarker
-		fillModelAttributeFromRequestSessionOrDefault(model, RequestAttributeNames.CSV_IMPORT, request, new CsvImport(null, ";", StandardCharsets.UTF_8.name(), 0));
-		fillModelAttributeFromRequestSession(model, RequestAttributeNames.CSV_ROWS, request);
-		fillModelAttributeFromRequestSession(model, RequestAttributeNames.CSV_TRANSACTIONS, request);
-		fillModelAttributeFromRequestSession(model, RequestAttributeNames.ERRORS_COLUMN_SETTINGS, request);
+		final Object attribute = request.getAttribute(RequestAttributeNames.CSV_IMPORT, RequestAttributes.SCOPE_SESSION);
+		if(attribute == null)
+		{
+			model.addAttribute(RequestAttributeNames.CSV_IMPORT, new CsvImport(null, ";", StandardCharsets.UTF_8.name(), 0));
+		}
 
 		final Object bindingResult = request.getAttribute(RequestAttributeNames.ERROR_UPLOAD, RequestAttributes.SCOPE_SESSION);
 		if(bindingResult != null)
@@ -98,28 +98,6 @@ public class TransactionImportController extends BaseController
 		return ReturnValues.TRANSACTION_IMPORT;
 	}
 
-	private void fillModelAttributeFromRequestSessionOrDefault(Model model, String attributeName, WebRequest request, Object defaultValue)
-	{
-		final Object attribute = request.getAttribute(attributeName, RequestAttributes.SCOPE_SESSION);
-		if(attribute == null)
-		{
-			model.addAttribute(attributeName, defaultValue);
-		}
-		else
-		{
-			model.addAttribute(attributeName, attribute);
-		}
-	}
-
-	private void fillModelAttributeFromRequestSession(Model model, String attributeName, WebRequest request)
-	{
-		final Object attribute = request.getAttribute(attributeName, RequestAttributes.SCOPE_SESSION);
-		if(attribute != null)
-		{
-			model.addAttribute(attributeName, attribute);
-		}
-	}
-
 	@PostMapping("/upload")
 	public String upload(WebRequest request,
 						 @ModelAttribute("CsvImport") CsvImport csvImport,
diff --git a/BudgetMasterServer/src/main/resources/application.properties b/BudgetMasterServer/src/main/resources/application.properties
index d0e399902..c34aaf105 100644
--- a/BudgetMasterServer/src/main/resources/application.properties
+++ b/BudgetMasterServer/src/main/resources/application.properties
@@ -15,6 +15,8 @@ logging.level.de.deadlocker8=DEBUG
 spring.freemarker.template-loader-path= classpath:/templates
 spring.freemarker.suffix=.ftl
 
+spring.freemarker.expose-session-attributes=true
+
 versionizer.service.cron=0 0 12 * * *
 
 app.name=@project.artifactId@
-- 
GitLab