информация о SHA1 как метаданные к файлам

This commit is contained in:
2022-05-11 01:24:47 +03:00
parent 8f2e416678
commit 6ad5e0c0e7
5 changed files with 34 additions and 5 deletions

View File

@@ -2,4 +2,5 @@ apply plugin: 'java-library'
dependencies { dependencies {
api("com.squareup.okhttp3:okhttp:${okhttpVersion}") api("com.squareup.okhttp3:okhttp:${okhttpVersion}")
implementation("commons-io:commons-io:${commonsIoVersion}")
} }

View File

@@ -2,6 +2,7 @@ package ru.di9.mirror.core.handler;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import ru.di9.mirror.core.domain.FileInfo; import ru.di9.mirror.core.domain.FileInfo;
import ru.di9.mirror.core.entity.ArtifactEntity; import ru.di9.mirror.core.entity.ArtifactEntity;
import ru.di9.mirror.core.handler.response.GetFileResponse; import ru.di9.mirror.core.handler.response.GetFileResponse;
@@ -10,6 +11,7 @@ import ru.di9.mirror.core.storage.FileStorage;
import ru.di9.mirror.core.service.ExternalMavenService; import ru.di9.mirror.core.service.ExternalMavenService;
import java.io.InputStream; import java.io.InputStream;
import java.nio.charset.StandardCharsets;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
@@ -37,11 +39,11 @@ public class MavenHandler {
return optionalInputStream return optionalInputStream
.map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream)); .map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream));
} else { } else {
return findInMirrors(path, fileInfo.name(), artifactEntity); return findInMirrors(path, fileInfo, artifactEntity);
} }
} }
private Optional<GetFileResponse> findInMirrors(String path, String fileName, ArtifactEntity artifactEntity) { private Optional<GetFileResponse> findInMirrors(String path, FileInfo fileInfo, ArtifactEntity artifactEntity) {
Optional<InputStream> result; Optional<InputStream> result;
for (ExternalMavenService externalMavenService : externalMavenServices) { for (ExternalMavenService externalMavenService : externalMavenServices) {
final String nameForStore = "/" + externalMavenService.getId() + "/" + path; final String nameForStore = "/" + externalMavenService.getId() + "/" + path;
@@ -49,7 +51,7 @@ public class MavenHandler {
result = fileStorage.findByName(nameForStore); result = fileStorage.findByName(nameForStore);
if (result.isPresent()) { if (result.isPresent()) {
return result return result
.map(inputStream -> new GetFileResponse(fileName, inputStream)); .map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream));
} else { } else {
result = externalMavenService.getFile(path); result = externalMavenService.getFile(path);
if (result.isPresent()) { if (result.isPresent()) {
@@ -57,9 +59,18 @@ public class MavenHandler {
repository.save(artifactEntity); repository.save(artifactEntity);
} }
if (fileInfo.ext().equalsIgnoreCase("sha1")) {
try {
String sha1str = IOUtils.toString(result.get(), StandardCharsets.UTF_8);
fileStorage.setMetadata(nameForStore.substring(0, nameForStore.lastIndexOf(".")), "sha1", sha1str);
} catch (Exception e) {
throw new RuntimeException(e);
}
} else {
fileStorage.save(nameForStore, result.get()); fileStorage.save(nameForStore, result.get());
}
return fileStorage.findByName(nameForStore) return fileStorage.findByName(nameForStore)
.map(inputStream -> new GetFileResponse(fileName, inputStream)); .map(inputStream -> new GetFileResponse(fileInfo.name(), inputStream));
} }
} }
} }

View File

@@ -12,5 +12,7 @@ public interface FileStorage {
void save(String name, InputStream inputStream); void save(String name, InputStream inputStream);
void setMetadata(String name, String key, String value);
List<FileItem> list(String prefix); List<FileItem> list(String prefix);
} }

View File

@@ -12,6 +12,7 @@ import ru.di9.mirror.minio.exception.MinioException;
import java.io.InputStream; import java.io.InputStream;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.Optional; import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -35,6 +36,19 @@ public class MinioStorage implements FileStorage {
} }
} }
@Override
public void setMetadata(String name, String key, String value) {
try {
minioClient.setObjectTags(SetObjectTagsArgs.builder()
.bucket(bucket)
.object(name)
.tags(Map.of(key, value))
.build());
} catch (Exception e) {
throw new MinioException("Error set tags file", e);
}
}
@Override @Override
public Optional<InputStream> findByName(String name) { public Optional<InputStream> findByName(String name) {
try { try {

View File

@@ -5,6 +5,7 @@ ext {
springBootVerson = '2.6.6' springBootVerson = '2.6.6'
mongoDriver = '4.6.0' mongoDriver = '4.6.0'
okhttpVersion = '4.8.1' okhttpVersion = '4.8.1'
commonsIoVersion = '2.11.0'
// for tests only // for tests only
junitJupiterVersion = '5.5.2' junitJupiterVersion = '5.5.2'