From 2cac9f9c98cb87644a31972d4aa73dbc21566a6a Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Sat, 12 Feb 2022 23:39:37 +0100 Subject: [PATCH] #649 - Update spring boot and fix circular dependencies --- pom.xml | 2 +- .../budgetmaster/advices/ServiceAdvice.java | 10 +-- .../authentication/WebSecurityConfig.java | 4 +- .../services/UpdateCheckService.java | 34 ------- .../settings/SettingsController.java | 9 +- .../settings/SettingsService.java | 11 +-- .../budgetmaster/update/ArtifactBean.java | 21 +++++ .../BudgetMasterUpdateConfiguration.java | 89 +++++++++++++++++++ .../update/BudgetMasterUpdateService.java | 73 ++++----------- .../resources/templates/helpers/navbar.ftl | 2 +- .../resources/templates/settings/settings.ftl | 6 +- 11 files changed, 146 insertions(+), 115 deletions(-) delete mode 100644 src/main/java/de/deadlocker8/budgetmaster/services/UpdateCheckService.java create mode 100644 src/main/java/de/deadlocker8/budgetmaster/update/ArtifactBean.java create mode 100644 src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateConfiguration.java diff --git a/pom.xml b/pom.xml index 5db62dbb8..59af88c90 100644 --- a/pom.xml +++ b/pom.xml @@ -35,7 +35,7 @@ <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> - <version>2.5.6</version> + <version>2.6.3</version> <relativePath/> </parent> diff --git a/src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java b/src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java index f26e72102..023fe551e 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java +++ b/src/main/java/de/deadlocker8/budgetmaster/advices/ServiceAdvice.java @@ -3,7 +3,7 @@ package de.deadlocker8.budgetmaster.advices; import de.deadlocker8.budgetmaster.services.CurrencyService; import de.deadlocker8.budgetmaster.services.DateService; import de.deadlocker8.budgetmaster.services.HelpersService; -import de.deadlocker8.budgetmaster.services.UpdateCheckService; +import de.deadlocker8.budgetmaster.update.BudgetMasterUpdateService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ModelAttribute; @@ -21,7 +21,7 @@ public class ServiceAdvice CurrencyService currencyService; @Autowired - UpdateCheckService updateCheckService; + BudgetMasterUpdateService updateService; @ModelAttribute("helpers") public HelpersService getHelpers() @@ -41,9 +41,9 @@ public class ServiceAdvice return currencyService; } - @ModelAttribute("updateCheckService") - public UpdateCheckService getUpdateCheckService() + @ModelAttribute("updateService") + public BudgetMasterUpdateService getUpdateService() { - return updateCheckService; + return updateService; } } \ No newline at end of file diff --git a/src/main/java/de/deadlocker8/budgetmaster/authentication/WebSecurityConfig.java b/src/main/java/de/deadlocker8/budgetmaster/authentication/WebSecurityConfig.java index 9ee223b29..a574f32be 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/authentication/WebSecurityConfig.java +++ b/src/main/java/de/deadlocker8/budgetmaster/authentication/WebSecurityConfig.java @@ -64,8 +64,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter .permitAll(); } - @Autowired - public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception + @Override + protected void configure(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService).passwordEncoder(bCryptPasswordEncoder()); } diff --git a/src/main/java/de/deadlocker8/budgetmaster/services/UpdateCheckService.java b/src/main/java/de/deadlocker8/budgetmaster/services/UpdateCheckService.java deleted file mode 100644 index 0756936f4..000000000 --- a/src/main/java/de/deadlocker8/budgetmaster/services/UpdateCheckService.java +++ /dev/null @@ -1,34 +0,0 @@ -package de.deadlocker8.budgetmaster.services; - -import de.deadlocker8.budgetmaster.update.BudgetMasterUpdateService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -@Service -public class UpdateCheckService -{ - private final BudgetMasterUpdateService budgetMasterUpdateService; - - @Autowired - public UpdateCheckService(BudgetMasterUpdateService budgetMasterUpdateService) - { - this.budgetMasterUpdateService = budgetMasterUpdateService; - } - - public boolean isUpdateAvailable() - { - try - { - return budgetMasterUpdateService.getUpdateService().isUpdateAvailable(); - } - catch(NullPointerException e) - { - return false; - } - } - - public String getAvailableVersionString() - { - return budgetMasterUpdateService.getAvailableVersionString(); - } -} diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java index 55e2c70e3..5512a051a 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsController.java @@ -13,7 +13,6 @@ import de.deadlocker8.budgetmaster.database.accountmatches.AccountMatchList; import de.deadlocker8.budgetmaster.database.model.BackupDatabase; import de.deadlocker8.budgetmaster.services.ImportResultItem; import de.deadlocker8.budgetmaster.services.ImportService; -import de.deadlocker8.budgetmaster.services.UpdateCheckService; import de.deadlocker8.budgetmaster.update.BudgetMasterUpdateService; import de.deadlocker8.budgetmaster.utils.LanguageType; import de.deadlocker8.budgetmaster.utils.Mappings; @@ -101,13 +100,12 @@ public class SettingsController extends BaseController private final CategoryService categoryService; private final ImportService importService; private final BudgetMasterUpdateService budgetMasterUpdateService; - private final UpdateCheckService updateCheckService; private final BackupService backupService; private final List<Integer> SEARCH_RESULTS_PER_PAGE_OPTIONS = Arrays.asList(10, 20, 25, 30, 50, 100); @Autowired - public SettingsController(SettingsService settingsService, DatabaseService databaseService, AccountService accountService, CategoryService categoryService, ImportService importService, BudgetMasterUpdateService budgetMasterUpdateService, UpdateCheckService updateCheckService, BackupService backupService) + public SettingsController(SettingsService settingsService, DatabaseService databaseService, AccountService accountService, CategoryService categoryService, ImportService importService, BudgetMasterUpdateService budgetMasterUpdateService, BackupService backupService) { this.settingsService = settingsService; this.databaseService = databaseService; @@ -115,7 +113,6 @@ public class SettingsController extends BaseController this.categoryService = categoryService; this.importService = importService; this.budgetMasterUpdateService = budgetMasterUpdateService; - this.updateCheckService = updateCheckService; this.backupService = backupService; } @@ -422,9 +419,9 @@ public class SettingsController extends BaseController { budgetMasterUpdateService.getUpdateService().fetchCurrentVersion(); - if(updateCheckService.isUpdateAvailable()) + if(budgetMasterUpdateService.isUpdateAvailable()) { - WebRequestUtils.putNotification(request, new Notification(Localization.getString("notification.settings.update.available", updateCheckService.getAvailableVersionString()), NotificationType.INFO)); + WebRequestUtils.putNotification(request, new Notification(Localization.getString("notification.settings.update.available", budgetMasterUpdateService.getAvailableVersionString()), NotificationType.INFO)); } return ReturnValues.REDIRECT_ALL_ENTITIES; } diff --git a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java index b9430d145..a56eafa39 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/settings/SettingsService.java @@ -21,13 +21,9 @@ import java.util.Optional; public class SettingsService { private static final Logger LOGGER = LoggerFactory.getLogger(SettingsService.class); - private final SettingsRepository settingsRepository; - - @Autowired - private SettingsService settingsService; - @Autowired - private UserRepository userRepository; + private final SettingsRepository settingsRepository; + private final UserRepository userRepository; @Autowired public SettingsService(SettingsRepository settingsRepository, UserRepository userRepository) @@ -37,9 +33,10 @@ public class SettingsService } @PostConstruct + @Transactional public void postInit() { - this.settingsService.createDefaultSettingsIfNotExists(); + this.createDefaultSettingsIfNotExists(); } @Transactional diff --git a/src/main/java/de/deadlocker8/budgetmaster/update/ArtifactBean.java b/src/main/java/de/deadlocker8/budgetmaster/update/ArtifactBean.java new file mode 100644 index 000000000..836548fcb --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/update/ArtifactBean.java @@ -0,0 +1,21 @@ +package de.deadlocker8.budgetmaster.update; + +import de.deadlocker8.budgetmaster.Build; +import de.thecodelabs.versionizer.config.Artifact; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +@Component +public class ArtifactBean +{ + @Bean + public Artifact artifact() + { + Artifact newArtifact = new Artifact(); + newArtifact.setVersion(Build.getInstance().getVersionName()); + newArtifact.setGroupId("de.deadlocker8"); + newArtifact.setArtifactId("BudgetMaster"); + newArtifact.setArtifactType(Artifact.ArtifactType.RUNTIME); + return newArtifact; + } +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateConfiguration.java b/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateConfiguration.java new file mode 100644 index 000000000..f9fa300eb --- /dev/null +++ b/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateConfiguration.java @@ -0,0 +1,89 @@ +package de.deadlocker8.budgetmaster.update; + +import de.deadlocker8.budgetmaster.Main; +import de.thecodelabs.storage.settings.Storage; +import de.thecodelabs.storage.settings.StorageTypes; +import de.thecodelabs.utils.util.SystemUtils; +import de.thecodelabs.versionizer.VersionizerItem; +import de.thecodelabs.versionizer.config.Artifact; +import de.thecodelabs.versionizer.config.Repository; +import de.thecodelabs.versionizer.model.RemoteFile; +import de.thecodelabs.versionizer.service.UpdateService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.system.ApplicationHome; +import org.springframework.context.annotation.Bean; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import java.io.File; +import java.nio.file.Paths; + +@Component +public class BudgetMasterUpdateConfiguration +{ + private UpdateService.Strategy updateStrategy; + private String executablePath; + private RemoteFile.FileType fileType; + private boolean isRunningFromSource = true; + + private final Artifact artifact; + + @Autowired + public BudgetMasterUpdateConfiguration(Artifact artifact) + { + this.artifact = artifact; + } + + @PostConstruct + private void postInit() { + final File source = new ApplicationHome().getSource(); + executablePath = null; + updateStrategy = UpdateService.Strategy.JAR; + fileType = RemoteFile.FileType.JAR; + + SystemUtils.setIsJarHook(new IsJarFileHook()); + SystemUtils.setIsExeHook(new IsExeFileHook()); + + if(source != null) + { + isRunningFromSource = false; + executablePath = source.getAbsolutePath(); + if(executablePath.toLowerCase().endsWith(".exe")) + { + updateStrategy = UpdateService.Strategy.EXE; + fileType = RemoteFile.FileType.EXE; + } + } + } + + @Bean + public UpdateService updateService() + { + ClassLoader classLoader = Main.class.getClassLoader(); + Repository repository = Storage.load(classLoader.getResourceAsStream("repositories.json"), StorageTypes.JSON, Repository.class); + + VersionizerItem versionizerItem = new VersionizerItem(repository, executablePath); + UpdateService versionizerUpdateService = UpdateService.startVersionizer(versionizerItem, updateStrategy, UpdateService.InteractionType.HEADLESS, UpdateService.RepositoryType.RELEASE); + if(executablePath != null) + { + versionizerUpdateService.addArtifact(artifact, Paths.get(executablePath)); + } + return versionizerUpdateService; + } + + @Bean + public String executablePath() { + return executablePath; + } + + @Bean + public RemoteFile.FileType fileType() { + return fileType; + } + + @Bean + public boolean runningFromSource() + { + return isRunningFromSource; + } +} diff --git a/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateService.java b/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateService.java index 45a53aefe..d1785ae6c 100644 --- a/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateService.java +++ b/src/main/java/de/deadlocker8/budgetmaster/update/BudgetMasterUpdateService.java @@ -1,28 +1,19 @@ package de.deadlocker8.budgetmaster.update; import de.deadlocker8.budgetmaster.Build; -import de.deadlocker8.budgetmaster.Main; import de.deadlocker8.budgetmaster.settings.SettingsService; -import de.thecodelabs.storage.settings.Storage; -import de.thecodelabs.storage.settings.StorageTypes; -import de.thecodelabs.utils.util.SystemUtils; -import de.thecodelabs.versionizer.VersionizerItem; import de.thecodelabs.versionizer.config.Artifact; -import de.thecodelabs.versionizer.config.Repository; import de.thecodelabs.versionizer.model.RemoteFile; import de.thecodelabs.versionizer.model.Version; import de.thecodelabs.versionizer.service.UpdateService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.boot.system.ApplicationHome; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.ApplicationEventPublisher; -import org.springframework.context.annotation.Bean; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; -import java.io.File; -import java.nio.file.Paths; import java.text.MessageFormat; @Service @@ -42,32 +33,16 @@ public class BudgetMasterUpdateService @Autowired private ApplicationEventPublisher applicationEventPublisher; - private boolean isRunningFromSource = true; + @Autowired(required = false) + @Qualifier("executablePath") private String executablePath; - private UpdateService.Strategy updateStrategy; - private RemoteFile.FileType fileType; - - public BudgetMasterUpdateService() - { - File source = new ApplicationHome().getSource(); - executablePath = null; - updateStrategy = UpdateService.Strategy.JAR; - fileType = RemoteFile.FileType.JAR; - SystemUtils.setIsJarHook(new IsJarFileHook()); - SystemUtils.setIsExeHook(new IsExeFileHook()); + @Autowired + private RemoteFile.FileType fileType; - if(source != null) - { - isRunningFromSource = false; - executablePath = source.getAbsolutePath(); - if(executablePath.toLowerCase().endsWith(".exe")) - { - updateStrategy = UpdateService.Strategy.EXE; - fileType = RemoteFile.FileType.EXE; - } - } - } + @Autowired + @Qualifier("runningFromSource") + private boolean isRunningFromSource; @Scheduled(cron = "${versionizer.service.cron}") public void updateSearchTask() @@ -85,35 +60,21 @@ public class BudgetMasterUpdateService } } - @Bean - public Artifact artifact() + public UpdateService getUpdateService() { - Artifact newArtifact = new Artifact(); - newArtifact.setVersion(Build.getInstance().getVersionName()); - newArtifact.setGroupId("de.deadlocker8"); - newArtifact.setArtifactId("BudgetMaster"); - newArtifact.setArtifactType(Artifact.ArtifactType.RUNTIME); - return newArtifact; + return updateService; } - @Bean - public UpdateService updateService() + public boolean isUpdateAvailable() { - ClassLoader classLoader = Main.class.getClassLoader(); - Repository repository = Storage.load(classLoader.getResourceAsStream("repositories.json"), StorageTypes.JSON, Repository.class); - - VersionizerItem versionizerItem = new VersionizerItem(repository, executablePath); - UpdateService versionizerUpdateService = UpdateService.startVersionizer(versionizerItem, updateStrategy, UpdateService.InteractionType.HEADLESS, UpdateService.RepositoryType.RELEASE); - if(executablePath != null) + try { - versionizerUpdateService.addArtifact(artifact, Paths.get(executablePath)); + return updateService.isUpdateAvailable(); + } + catch(NullPointerException e) + { + return false; } - return versionizerUpdateService; - } - - public UpdateService getUpdateService() - { - return updateService; } public String getAvailableVersionString() diff --git a/src/main/resources/templates/helpers/navbar.ftl b/src/main/resources/templates/helpers/navbar.ftl index 87d700e53..11d6892eb 100644 --- a/src/main/resources/templates/helpers/navbar.ftl +++ b/src/main/resources/templates/helpers/navbar.ftl @@ -27,7 +27,7 @@ <@itemDivider/> <@itemLogout locale.getString("menu.logout") "lock"/> - <#if updateCheckService.isUpdateAvailable()> + <#if updateService.isUpdateAvailable()> <@itemDivider/> <@itemUpdate "/settings/update", locale.getString("menu.update"), "system_update"/> </#if> diff --git a/src/main/resources/templates/settings/settings.ftl b/src/main/resources/templates/settings/settings.ftl index 222d16ea7..b38541c90 100644 --- a/src/main/resources/templates/settings/settings.ftl +++ b/src/main/resources/templates/settings/settings.ftl @@ -198,14 +198,14 @@ </div> </div> <div class="left-align"> - <#if updateCheckService.getAvailableVersionString() == "-"> + <#if updateService.getAvailableVersionString() == "-"> <#if settings.isUseDarkTheme()> <#assign bannerClasses="background-grey text-black"> <#else> <#assign bannerClasses="background-grey text-white"> </#if> <#else> - <#if updateCheckService.isUpdateAvailable()> + <#if updateService.isUpdateAvailable()> <#assign bannerClasses="background-orange text-black"> <#else> <#assign bannerClasses="background-green text-white"> @@ -213,7 +213,7 @@ </#if> <div class="banner ${bannerClasses}"> - ${updateCheckService.getAvailableVersionString()} + ${updateService.getAvailableVersionString()} </div> </div> </div> -- GitLab