From e08ddb677f2dbd40a097a448aebded9f45f67a46 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Sun, 24 Apr 2022 14:26:46 +0300 Subject: [PATCH] =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D0=BE=D1=82=D0=BE=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=B7=D0=B5=D1=80=D0=BA?= =?UTF-8?q?=D0=B0=D0=BB=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20?= =?UTF-8?q?Maven=20Central?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/IndexOfMavenController.java | 3 +- .../mirror/controller/MavenController.java | 3 +- .../services/MavenCentralStorageService.java | 26 ++++++++++ .../services/MirroredStorageService.java | 47 +++++++++++++++++++ 4 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 src/main/java/ru/di9/mirror/services/MavenCentralStorageService.java create mode 100644 src/main/java/ru/di9/mirror/services/MirroredStorageService.java diff --git a/src/main/java/ru/di9/mirror/controller/IndexOfMavenController.java b/src/main/java/ru/di9/mirror/controller/IndexOfMavenController.java index 1adf2c9..9ee9663 100644 --- a/src/main/java/ru/di9/mirror/controller/IndexOfMavenController.java +++ b/src/main/java/ru/di9/mirror/controller/IndexOfMavenController.java @@ -1,5 +1,6 @@ package ru.di9.mirror.controller; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.io.InputStreamResource; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -24,7 +25,7 @@ import java.util.Optional; public class IndexOfMavenController { private final StorageService storageService; - public IndexOfMavenController(StorageService storageService) { + public IndexOfMavenController(@Qualifier("mirroredStorageService") StorageService storageService) { this.storageService = storageService; } diff --git a/src/main/java/ru/di9/mirror/controller/MavenController.java b/src/main/java/ru/di9/mirror/controller/MavenController.java index d36ac9a..d9b92c0 100644 --- a/src/main/java/ru/di9/mirror/controller/MavenController.java +++ b/src/main/java/ru/di9/mirror/controller/MavenController.java @@ -1,6 +1,7 @@ package ru.di9.mirror.controller; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.core.io.InputStreamResource; import org.springframework.core.io.Resource; import org.springframework.http.HttpHeaders; @@ -25,7 +26,7 @@ import java.util.Optional; public class MavenController { private final StorageService storageService; - public MavenController(StorageService storageService) { + public MavenController(@Qualifier("mirroredStorageService") StorageService storageService) { this.storageService = storageService; } diff --git a/src/main/java/ru/di9/mirror/services/MavenCentralStorageService.java b/src/main/java/ru/di9/mirror/services/MavenCentralStorageService.java new file mode 100644 index 0000000..5dab733 --- /dev/null +++ b/src/main/java/ru/di9/mirror/services/MavenCentralStorageService.java @@ -0,0 +1,26 @@ +package ru.di9.mirror.services; + +import org.springframework.stereotype.Service; +import ru.di9.mirror.domain.FileRecord; +import ru.di9.mirror.domain.WalkerResult; + +import java.io.InputStream; +import java.util.Optional; + +@Service +public class MavenCentralStorageService implements StorageService { + @Override + public Optional getFile(String path) { + return Optional.empty(); + } + + @Override + public void putFile(String path, InputStream inputStream) { + throw new UnsupportedOperationException(); + } + + @Override + public Optional walker(String path) { + throw new UnsupportedOperationException(); + } +} diff --git a/src/main/java/ru/di9/mirror/services/MirroredStorageService.java b/src/main/java/ru/di9/mirror/services/MirroredStorageService.java new file mode 100644 index 0000000..90d18c9 --- /dev/null +++ b/src/main/java/ru/di9/mirror/services/MirroredStorageService.java @@ -0,0 +1,47 @@ +package ru.di9.mirror.services; + +import org.springframework.stereotype.Service; +import ru.di9.mirror.domain.FileRecord; +import ru.di9.mirror.domain.WalkerResult; + +import java.io.InputStream; +import java.util.Optional; + +@Service +public class MirroredStorageService implements StorageService { + + private final FileStorageService fileStorageService; + private final MavenCentralStorageService mavenCentralStorageService; + + public MirroredStorageService(FileStorageService fileStorageService, + MavenCentralStorageService mavenCentralStorageService) { + this.fileStorageService = fileStorageService; + this.mavenCentralStorageService = mavenCentralStorageService; + } + + @Override + public Optional getFile(String path) { + Optional optional; + + optional = fileStorageService.getFile(path); + if (optional.isPresent()) { + return optional; + } + + mavenCentralStorageService.getFile(path).ifPresent(fileRecord -> + fileStorageService.putFile(fileRecord.name(), fileRecord.inputStream())); + + + return fileStorageService.getFile(path); + } + + @Override + public void putFile(String path, InputStream inputStream) { + fileStorageService.putFile(path, inputStream); + } + + @Override + public Optional walker(String path) { + return fileStorageService.walker(path); + } +}