From c50f5d325d9a844ed1b9736d6d086ef994a772db Mon Sep 17 00:00:00 2001 From: Robert Goldmann <deadlocker@gmx.de> Date: Tue, 29 Mar 2022 00:00:01 +0200 Subject: [PATCH] Fixed #690 - create default items after deletion to prevent deletion of newly created defaults --- .../budgetmaster/accounts/AccountService.java | 2 + .../categories/CategoryService.java | 2 + .../budgetmaster/charts/ChartService.java | 2 + .../database/DatabaseService.java | 81 +++---------------- .../budgetmaster/icon/IconService.java | 7 ++ .../budgetmaster/images/ImageService.java | 7 ++ .../budgetmaster/tags/TagService.java | 6 ++ .../templates/TemplateService.java | 2 + .../transactions/TransactionService.java | 2 + 9 files changed, 41 insertions(+), 70 deletions(-) diff --git a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java index 86c903e1e..233360c99 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/accounts/AccountService.java @@ -112,12 +112,14 @@ public class AccountService implements Resettable, AccessAllEntities<Account>, A @Override public void deleteAll() { + LOGGER.info("Resetting accounts..."); deselectAllAccounts(); User user = userRepository.findByName("Default"); user.setSelectedAccount(null); userRepository.save(user); accountRepository.deleteAll(); + LOGGER.info("All accounts reset."); } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java b/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java index 9086780d0..0d010094f 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/categories/CategoryService.java @@ -82,7 +82,9 @@ public class CategoryService implements Resettable, AccessAllEntities<Category>, @Override public void deleteAll() { + LOGGER.info("Resetting categories..."); categoryRepository.deleteAll(); + LOGGER.info("All categories reset."); } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java index b0beea706..c0c1bc979 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/charts/ChartService.java @@ -39,7 +39,9 @@ public class ChartService implements Resettable, AccessAllEntities<Chart> @Override public void deleteAll() { + LOGGER.info("Resetting charts..."); chartRepository.deleteAll(); + LOGGER.info("All charts reset."); } @SuppressWarnings("OptionalIsPresent") diff --git a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java index f9a6a9d0f..ae563e67a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/database/DatabaseService.java @@ -16,6 +16,7 @@ import de.deadlocker8.budgetmaster.icon.IconService; import de.deadlocker8.budgetmaster.images.Image; import de.deadlocker8.budgetmaster.images.ImageService; import de.deadlocker8.budgetmaster.repeating.RepeatingOption; +import de.deadlocker8.budgetmaster.services.Resettable; import de.deadlocker8.budgetmaster.settings.SettingsService; import de.deadlocker8.budgetmaster.tags.TagService; import de.deadlocker8.budgetmaster.templategroup.TemplateGroup; @@ -80,78 +81,18 @@ public class DatabaseService public void reset() { - resetTransactions(); - resetTemplates(); - resetCategories(); - resetAccounts(); - resetTags(); - resetCharts(); - resetIcons(); - resetImages(); - } - - private void resetAccounts() - { - LOGGER.info("Resetting accounts..."); - accountService.deleteAll(); - accountService.createDefaults(); - LOGGER.info("All accounts reset."); - } - - private void resetCategories() - { - LOGGER.info("Resetting categories..."); - categoryService.deleteAll(); - categoryService.createDefaults(); - LOGGER.info("All categories reset."); - } - - private void resetTransactions() - { - LOGGER.info("Resetting transactions..."); - transactionService.deleteAll(); - transactionService.createDefaults(); - LOGGER.info("All transactions reset."); - } - - private void resetTags() - { - LOGGER.info("Resetting tags..."); - tagService.deleteAll(); - tagService.createDefaults(); - LOGGER.info("All tags reset."); - } + final List<Resettable> services = List.of(this.transactionService, templateService, categoryService, accountService, tagService, chartService, iconService, imageService); - private void resetTemplates() - { - LOGGER.info("Resetting templates..."); - templateService.deleteAll(); - templateService.createDefaults(); - LOGGER.info("All templates reset."); - } - - private void resetCharts() - { - LOGGER.info("Resetting charts..."); - chartService.deleteAll(); - chartService.createDefaults(); - LOGGER.info("All charts reset."); - } - - private void resetImages() - { - LOGGER.info("Resetting images..."); - imageService.deleteAll(); - imageService.createDefaults(); - LOGGER.info("All images reset."); - } + for(Resettable service : services) + { + service.deleteAll(); + } - private void resetIcons() - { - LOGGER.info("Resetting icons..."); - iconService.deleteAll(); - iconService.createDefaults(); - LOGGER.info("All icons reset."); + // create defaults after deletion to avoid deletion of newly created defaults + for(Resettable service : services) + { + service.createDefaults(); + } } public void rotatingBackup(Path backupFolderPath) diff --git a/src/main/java/de/deadlocker8/budgetmaster/icon/IconService.java b/src/main/java/de/deadlocker8/budgetmaster/icon/IconService.java index 7b8e20718..e28ec2ed7 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/icon/IconService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/icon/IconService.java @@ -7,6 +7,8 @@ import de.deadlocker8.budgetmaster.images.ImageRepository; import de.deadlocker8.budgetmaster.services.Resettable; import de.deadlocker8.budgetmaster.templates.Template; import de.deadlocker8.budgetmaster.utils.ResourceNotFoundException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -17,6 +19,8 @@ import java.util.Optional; @Service public class IconService implements Resettable { + private static final Logger LOGGER = LoggerFactory.getLogger(IconService.class); + private final IconRepository iconRepository; private final ImageRepository imageRepository; @@ -36,6 +40,8 @@ public class IconService implements Resettable @Transactional public void deleteAll() { + LOGGER.info("Resetting icons..."); + final List<Icon> icons = iconRepository.findAll(); for(Icon icon : icons) { @@ -43,6 +49,7 @@ public class IconService implements Resettable } iconRepository.deleteAll(); + LOGGER.info("All icons reset."); } @Transactional diff --git a/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java b/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java index c336bb966..9d52c357b 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/images/ImageService.java @@ -5,6 +5,8 @@ import de.deadlocker8.budgetmaster.icon.IconService; import de.deadlocker8.budgetmaster.services.Resettable; import de.thecodelabs.utils.util.Localization; import org.apache.commons.lang3.ArrayUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -17,6 +19,9 @@ import java.util.Optional; @Service public class ImageService implements Resettable { + private static final Logger LOGGER = LoggerFactory.getLogger(ImageService.class); + + private final ImageRepository imageRepository; private final IconService iconService; @@ -36,6 +41,7 @@ public class ImageService implements Resettable @Transactional public void deleteAll() { + LOGGER.info("Resetting images..."); final List<Image> images = imageRepository.findAll(); for(Image image : images) { @@ -43,6 +49,7 @@ public class ImageService implements Resettable } imageRepository.deleteAll(); + LOGGER.info("All images reset."); } @Transactional diff --git a/src/main/java/de/deadlocker8/budgetmaster/tags/TagService.java b/src/main/java/de/deadlocker8/budgetmaster/tags/TagService.java index 054d4f5bc..87f43c724 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/tags/TagService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/tags/TagService.java @@ -3,6 +3,8 @@ package de.deadlocker8.budgetmaster.tags; import de.deadlocker8.budgetmaster.services.AccessAllEntities; import de.deadlocker8.budgetmaster.services.Resettable; import org.padler.natorder.NaturalOrderComparator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -13,6 +15,8 @@ import java.util.Map; @Service public class TagService implements Resettable, AccessAllEntities<Tag> { + private static final Logger LOGGER = LoggerFactory.getLogger(TagService.class); + private final TagRepository tagRepository; @Autowired @@ -29,7 +33,9 @@ public class TagService implements Resettable, AccessAllEntities<Tag> @Override public void deleteAll() { + LOGGER.info("Resetting tags..."); tagRepository.deleteAll(); + LOGGER.info("All tags reset."); } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java index 3e9a4a7a4..c6fa79bb6 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/templates/TemplateService.java @@ -60,7 +60,9 @@ public class TemplateService implements Resettable, AccessAllEntities<Template>, @Override public void deleteAll() { + LOGGER.info("Resetting templates..."); templateRepository.deleteAll(); + LOGGER.info("All templates reset."); } @Override diff --git a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java index 6e8d3e922..2b26fd35a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/transactions/TransactionService.java @@ -203,10 +203,12 @@ public class TransactionService implements Resettable @Override public void deleteAll() { + LOGGER.info("Resetting transactions..."); for(Transaction transaction : transactionRepository.findAll()) { deleteTransactionInRepo(transaction.getID()); } + LOGGER.info("All transactions reset."); } public void deleteTransactionsWithAccount(Account account) -- GitLab