From 251a354a1f3f6580360bbd88c738e00a0c58d051 Mon Sep 17 00:00:00 2001 From: Thilo Schwarz Date: Sat, 4 Jul 2026 19:16:12 +0200 Subject: [PATCH] Rename `jvs` to `jdvs` in codebase and configurations, clean up unused imports, and refactor `RepoConfigLoader` for improved loading logic and initialization --- pom.xml | 2 +- .../{JvsConfig.java => JdvsConfig.java} | 4 +- .../thischwa/jdvs/service/GitService.java | 8 ++-- .../thischwa/jdvs/service/JavadocService.java | 6 +-- .../jdvs/service/RepoConfigLoader.java | 37 +++++-------------- .../jdvs/service/UpdateScheduler.java | 30 +++++++++++++-- .../codes/thischwa/jdvs/web/WebConfig.java | 10 ++--- src/main/resources/application.yml | 16 +++++--- 8 files changed, 62 insertions(+), 51 deletions(-) rename src/main/java/codes/thischwa/jdvs/config/{JvsConfig.java => JdvsConfig.java} (89%) diff --git a/pom.xml b/pom.xml index 031c8df..b423d18 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ 4.0.0 codes.thischwa - jvc + jdvc 0.1.0-SNAPSHOT JavadocViewerService diff --git a/src/main/java/codes/thischwa/jdvs/config/JvsConfig.java b/src/main/java/codes/thischwa/jdvs/config/JdvsConfig.java similarity index 89% rename from src/main/java/codes/thischwa/jdvs/config/JvsConfig.java rename to src/main/java/codes/thischwa/jdvs/config/JdvsConfig.java index deedc8b..1e545cb 100644 --- a/src/main/java/codes/thischwa/jdvs/config/JvsConfig.java +++ b/src/main/java/codes/thischwa/jdvs/config/JdvsConfig.java @@ -8,9 +8,9 @@ import org.springframework.context.annotation.Configuration; @Configuration @ConfigurationProperties(prefix = "jdvs") @Data -public class JvsConfig { - private String configPath; +public class JdvsConfig { private String baseDir; + private boolean cleanOnStart; private boolean runOnStart; private List repositories; diff --git a/src/main/java/codes/thischwa/jdvs/service/GitService.java b/src/main/java/codes/thischwa/jdvs/service/GitService.java index 623abe0..5fe606b 100644 --- a/src/main/java/codes/thischwa/jdvs/service/GitService.java +++ b/src/main/java/codes/thischwa/jdvs/service/GitService.java @@ -1,6 +1,6 @@ package codes.thischwa.jdvs.service; -import codes.thischwa.jdvs.config.JvsConfig; +import codes.thischwa.jdvs.config.JdvsConfig; import codes.thischwa.jdvs.model.GitRepository; import java.io.File; import java.io.IOException; @@ -20,10 +20,10 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor @Slf4j public class GitService { - private final JvsConfig jvsConfig; + private final JdvsConfig jdvsConfig; public Optional updateAndCheckoutLatestTag(GitRepository repoEntity) { - Path repoPath = Path.of(jvsConfig.getBaseDir(), "repos", repoEntity.getName()); + Path repoPath = Path.of(jdvsConfig.getBaseDir(), "repos", repoEntity.getName()); try { Git git; if (Files.exists(repoPath)) { @@ -58,6 +58,6 @@ public class GitService { } public File getRepoDirectory(String name) { - return Path.of(jvsConfig.getBaseDir(), "repos", name).toFile(); + return Path.of(jdvsConfig.getBaseDir(), "repos", name).toFile(); } } diff --git a/src/main/java/codes/thischwa/jdvs/service/JavadocService.java b/src/main/java/codes/thischwa/jdvs/service/JavadocService.java index b3d4536..2e5cee4 100644 --- a/src/main/java/codes/thischwa/jdvs/service/JavadocService.java +++ b/src/main/java/codes/thischwa/jdvs/service/JavadocService.java @@ -1,6 +1,6 @@ package codes.thischwa.jdvs.service; -import codes.thischwa.jdvs.config.JvsConfig; +import codes.thischwa.jdvs.config.JdvsConfig; import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -17,10 +17,10 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor @Slf4j public class JavadocService { - private final JvsConfig jvsConfig; + private final JdvsConfig jdvsConfig; public boolean generateJavadoc(String projectName, File repoDir) { - File outputDir = Path.of(jvsConfig.getBaseDir(), "javadoc", projectName).toFile(); + File outputDir = Path.of(jdvsConfig.getBaseDir(), "javadoc", projectName).toFile(); if (!outputDir.exists()) { outputDir.mkdirs(); } diff --git a/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java b/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java index c783698..b8aa595 100644 --- a/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java +++ b/src/main/java/codes/thischwa/jdvs/service/RepoConfigLoader.java @@ -1,13 +1,9 @@ package codes.thischwa.jdvs.service; -import codes.thischwa.jdvs.config.JvsConfig; +import codes.thischwa.jdvs.config.JdvsConfig; import codes.thischwa.jdvs.model.GitRepository; import codes.thischwa.jdvs.repository.GitRepositoryRepository; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; -import jakarta.annotation.PostConstruct; import java.io.File; -import java.io.IOException; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -16,33 +12,20 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor @Slf4j public class RepoConfigLoader { - private final JvsConfig jvsConfig; + private final JdvsConfig jdvsConfig; private final GitRepositoryRepository repository; - @PostConstruct public void loadConfig() { - File configFile = new File(jvsConfig.getConfigPath()); - if (!configFile.exists()) { - log.info("Configuration file {} not found.", jvsConfig.getConfigPath()); - return; - } - - ObjectMapper mapper = new ObjectMapper(new YAMLFactory()); - try { - JvsConfig yamlConfig = mapper.readValue(configFile, JvsConfig.class); - if (yamlConfig.getRepositories() != null) { - for (JvsConfig.RepoConfig repoCfg : yamlConfig.getRepositories()) { - if (repository.findByName(repoCfg.getName()).isEmpty()) { - GitRepository repo = new GitRepository(); - repo.setName(repoCfg.getName()); - repo.setUrl(repoCfg.getUrl()); - repository.save(repo); - log.info("Repository {} added from configuration.", repoCfg.getName()); - } + if (jdvsConfig.getRepositories() != null) { + for (JdvsConfig.RepoConfig repoCfg : jdvsConfig.getRepositories()) { + if (repository.findByName(repoCfg.getName()).isEmpty()) { + GitRepository repo = new GitRepository(); + repo.setName(repoCfg.getName()); + repo.setUrl(repoCfg.getUrl()); + repository.save(repo); + log.info("Repository {} added from configuration.", repoCfg.getName()); } } - } catch (IOException e) { - log.error("Error reading configuration file", e); } } } diff --git a/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java b/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java index f2ae2b2..116ddd8 100644 --- a/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java +++ b/src/main/java/codes/thischwa/jdvs/service/UpdateScheduler.java @@ -1,10 +1,14 @@ package codes.thischwa.jdvs.service; -import codes.thischwa.jdvs.config.JvsConfig; +import codes.thischwa.jdvs.config.JdvsConfig; import codes.thischwa.jdvs.model.GitRepository; import codes.thischwa.jdvs.repository.GitRepositoryRepository; import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.LocalDateTime; +import java.util.Comparator; import java.util.List; import java.util.Optional; import lombok.RequiredArgsConstructor; @@ -21,16 +25,36 @@ public class UpdateScheduler { private final GitRepositoryRepository repository; private final GitService gitService; private final JavadocService javadocService; - private final JvsConfig jvsConfig; + private final JdvsConfig jdvsConfig; + private final RepoConfigLoader repoConfigLoader; @EventListener(ApplicationReadyEvent.class) public void onApplicationReady() { - if (jvsConfig.isRunOnStart()) { + if (jdvsConfig.isCleanOnStart()) { + log.info("'jdvs.clean-on-start' is enabled – cleaning base directory and database."); + cleanBaseDir(); + repository.deleteAll(); + } + repoConfigLoader.loadConfig(); + if (jdvsConfig.isRunOnStart()) { log.info("'jdvs.run-on-start' is enabled – running initial update."); updateAll(); } } + private void cleanBaseDir() { + Path baseDir = Path.of(jdvsConfig.getBaseDir()); + if (!Files.exists(baseDir)) { + return; + } + try (var stream = Files.walk(baseDir)) { + stream.sorted(Comparator.reverseOrder()).map(Path::toFile).forEach(File::delete); + log.info("Deleted base directory: {}", baseDir); + } catch (IOException e) { + log.error("Failed to delete base directory: {}", baseDir, e); + } + } + @Scheduled(cron = "${jdvs.cron}") public void updateAll() { log.info("Starting scheduled update of repositories..."); diff --git a/src/main/java/codes/thischwa/jdvs/web/WebConfig.java b/src/main/java/codes/thischwa/jdvs/web/WebConfig.java index ea36992..118173b 100644 --- a/src/main/java/codes/thischwa/jdvs/web/WebConfig.java +++ b/src/main/java/codes/thischwa/jdvs/web/WebConfig.java @@ -1,6 +1,6 @@ package codes.thischwa.jdvs.web; -import codes.thischwa.jdvs.config.JvsConfig; +import codes.thischwa.jdvs.config.JdvsConfig; import java.nio.file.Path; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; @@ -8,15 +8,15 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { - private final JvsConfig jvsConfig; + private final JdvsConfig jdvsConfig; - public WebConfig(JvsConfig jvsConfig) { - this.jvsConfig = jvsConfig; + public WebConfig(JdvsConfig jdvsConfig) { + this.jdvsConfig = jdvsConfig; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { - String javadocPath = Path.of(jvsConfig.getBaseDir(), "javadoc").toAbsolutePath().toUri().toString(); + String javadocPath = Path.of(jdvsConfig.getBaseDir(), "javadoc").toAbsolutePath().toUri().toString(); if (!javadocPath.endsWith("/")) { javadocPath += "/"; } diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index e370df0..db4abbe 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -1,4 +1,14 @@ +jdvs: + base-dir: ./javadoc-storage + cron: 0 0/15 * * * ? + clean-on-start: false + run-on-start: false + +## import of the individual configuration settings spring: + config: + import: optional:file:./jdvs.yml + datasource: url: jdbc:h2:file:./database/jdvsdb driverClassName: org.h2.Driver @@ -8,9 +18,3 @@ spring: database-platform: org.hibernate.dialect.H2Dialect hibernate: ddl-auto: none - -jdvs: - config-path: ./jdvs.yml - base-dir: ./javadoc-storage - cron: 0 0/15 * * * ? - run-on-start: false