From 695a7c78dd4adedf91c9b2a0df8ab85139126291 Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sat, 2 Mar 2019 14:50:21 +0100
Subject: [PATCH] #293 - handle if categories or tags are added, modified or
 deleted during one session

---
 .../services/FilterHelpersService.java        | 27 ++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/FilterHelpersService.java b/src/main/java/de/deadlocker8/budgetmaster/services/FilterHelpersService.java
index 66715d59e..34860d74a 100644
--- a/src/main/java/de/deadlocker8/budgetmaster/services/FilterHelpersService.java
+++ b/src/main/java/de/deadlocker8/budgetmaster/services/FilterHelpersService.java
@@ -23,17 +23,38 @@ public class FilterHelpersService
 
 	public FilterConfiguration getFilterConfiguration(HttpServletRequest request)
 	{
-		FilterConfiguration filterConfiguration;
 		Object sessionFilterConfiguration = request.getSession().getAttribute("filterConfiguration");
 		if(sessionFilterConfiguration == null)
 		{
-			filterConfiguration = FilterConfiguration.DEFAULT;
+			FilterConfiguration filterConfiguration = FilterConfiguration.DEFAULT;
 			filterConfiguration.setFilterCategories(getFilterCategories());
 			filterConfiguration.setFilterTags(getFilterTags());
 			return filterConfiguration;
 		}
 
-		return (FilterConfiguration)sessionFilterConfiguration;
+		// update categories and tags
+		FilterConfiguration filterConfiguration = (FilterConfiguration)sessionFilterConfiguration;
+		filterConfiguration.setFilterCategories(updateObjects(filterConfiguration.getFilterCategories(), getFilterCategories()));
+		filterConfiguration.setFilterTags(updateObjects(filterConfiguration.getFilterTags(), getFilterTags()));
+
+		return filterConfiguration;
+	}
+
+	private List<FilterObject> updateObjects(List<FilterObject> oldObjects, List<FilterObject> newObjects)
+	{
+		for(FilterObject newObject : newObjects)
+		{
+			for(FilterObject existingObject : oldObjects)
+			{
+				if(existingObject.getID().equals(newObject.getID()))
+				{
+					newObject.setInclude(existingObject.isInclude());
+					break;
+				}
+			}
+		}
+
+		return newObjects;
 	}
 
 	public List<FilterObject> getFilterCategories()
-- 
GitLab