From d6e54e6bd72f8cd3dca04fca12e80204d4185937 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Fri, 15 Apr 2022 22:02:56 +0200
Subject: [PATCH] #691 - fixed display of collected import error messages

---
 .../budgetmaster/services/ImportService.java       | 14 +++++++-------
 .../budgetmaster/settings/SettingsController.java  |  4 ++--
 .../unit/database/ImportServiceTest.java           |  5 +++--
 3 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java b/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java
index c498c5981..f19eed4ba 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/ImportService.java
@@ -42,7 +42,6 @@ public class ImportService
 
 
 	private InternalDatabase database;
-	private List<String> collectedErrorMessages;
 
 	@Autowired
 	public ImportService(CategoryRepository categoryRepository, TransactionRepository transactionRepository, TemplateGroupRepository templateGroupRepository, TemplateRepository templateRepository,
@@ -63,7 +62,6 @@ public class ImportService
 	public List<ImportResultItem> importDatabase(InternalDatabase database, AccountMatchList accountMatchList, Boolean importTemplateGroups, Boolean importTemplates, Boolean importCharts)
 	{
 		this.database = database;
-		this.collectedErrorMessages = new ArrayList<>();
 
 		final List<ImportResultItem> importResultItems = new ArrayList<>();
 
@@ -82,7 +80,7 @@ public class ImportService
 		}
 		else
 		{
-			importResultItems.add(new ImportResultItem(EntityType.TEMPLATE_GROUP, 0, 0, collectedErrorMessages));
+			importResultItems.add(new ImportResultItem(EntityType.TEMPLATE_GROUP, 0, 0, List.of()));
 		}
 
 		if(importTemplates)
@@ -92,7 +90,7 @@ public class ImportService
 		}
 		else
 		{
-			importResultItems.add(new ImportResultItem(EntityType.TEMPLATE, 0, 0, collectedErrorMessages));
+			importResultItems.add(new ImportResultItem(EntityType.TEMPLATE, 0, 0, List.of()));
 		}
 
 		if(importCharts)
@@ -101,7 +99,7 @@ public class ImportService
 		}
 		else
 		{
-			importResultItems.add(new ImportResultItem(EntityType.CHART, 0, 0, collectedErrorMessages));
+			importResultItems.add(new ImportResultItem(EntityType.CHART, 0, 0, List.of()));
 		}
 
 		LOGGER.debug("Updating repeating transactions...");
@@ -116,8 +114,10 @@ public class ImportService
 		return database;
 	}
 
-	public List<String> getCollectedErrorMessages()
+	public List<String> getCollectedErrorMessages(List<ImportResultItem> importResultItems)
 	{
-		return collectedErrorMessages;
+		return importResultItems.stream()
+				.flatMap(importResultItem -> importResultItem.getCollectedErrorMessages().stream())
+				.toList();
 	}
 }
diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
index 5512a051a..815babc6d 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java
@@ -60,7 +60,7 @@ public class SettingsController extends BaseController
 		public static final String AVAILABLE_ACCOUNTS = "availableAccounts";
 		public static final String ACCOUNT_MATCH_LIST = "accountMatchList";
 		public static final String IMPORT_RESULT_ITEMS = "importResultItems";
-		public static final String ERROR_MESSAGES = "errorMessage";
+		public static final String ERROR_MESSAGES = "errorMessages";
 		public static final String PERFORM_UPDATE = "performUpdate";
 		public static final String UPDATE_STRING = "updateString";
 		public static final String SETTINGS = "settings";
@@ -409,7 +409,7 @@ public class SettingsController extends BaseController
 
 		final List<ImportResultItem> importResultItems = importService.importDatabase(database, accountMatchList, importTemplateGroups, importTemplates, importCharts);
 		model.addAttribute(ModelAttributes.IMPORT_RESULT_ITEMS, importResultItems);
-		model.addAttribute(ModelAttributes.ERROR_MESSAGES, importService.getCollectedErrorMessages());
+		model.addAttribute(ModelAttributes.ERROR_MESSAGES, importService.getCollectedErrorMessages(importResultItems));
 
 		return ReturnValues.IMPORT_DATABASE_RESULT;
 	}
diff --git a/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java b/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java
index 7edc422d2..00f4d3f32 100644
--- a/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java
+++ b/src/test/java/de/deadlocker8/budgetmaster/unit/database/ImportServiceTest.java
@@ -22,6 +22,7 @@ import de.deadlocker8.budgetmaster.repeating.RepeatingOption;
 import de.deadlocker8.budgetmaster.repeating.RepeatingTransactionUpdater;
 import de.deadlocker8.budgetmaster.repeating.endoption.RepeatingEndAfterXTimes;
 import de.deadlocker8.budgetmaster.repeating.modifier.RepeatingModifierDays;
+import de.deadlocker8.budgetmaster.services.ImportResultItem;
 import de.deadlocker8.budgetmaster.services.ImportService;
 import de.deadlocker8.budgetmaster.tags.Tag;
 import de.deadlocker8.budgetmaster.tags.TagRepository;
@@ -144,7 +145,7 @@ class ImportServiceTest
 		final AccountMatchList accountMatchList = new AccountMatchList(matches);
 
 		// act
-		importService.importDatabase(importedDatabase, accountMatchList, true, true, true);
+		final List<ImportResultItem> importResultItems = importService.importDatabase(importedDatabase, accountMatchList, true, true, true);
 		final InternalDatabase databaseResult = importService.getDatabase();
 
 		// assert images
@@ -384,7 +385,7 @@ class ImportServiceTest
 						transactionRepeatingTransfer,
 						transactionIncomeWithTags);
 
-		assertThat(importService.getCollectedErrorMessages()).isEmpty();
+		assertThat(importService.getCollectedErrorMessages(importResultItems)).isEmpty();
 	}
 
 	private Icon createIcon(int ID, String builtinIdentifier, String fontColor, Image image)
-- 
GitLab