|
|
|
|
@@ -28,8 +28,10 @@ import java.nio.file.Paths;
|
|
|
|
|
import java.util.ArrayList;
|
|
|
|
|
import java.util.Arrays;
|
|
|
|
|
import java.util.HashMap;
|
|
|
|
|
import java.util.HashSet;
|
|
|
|
|
import java.util.List;
|
|
|
|
|
import java.util.Map;
|
|
|
|
|
import java.util.Set;
|
|
|
|
|
import java.util.UUID;
|
|
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
import java.util.stream.Stream;
|
|
|
|
|
@@ -59,6 +61,7 @@ public class DatasetService {
|
|
|
|
|
|
|
|
|
|
private static final List<String> LABEL_DIRS = List.of("label-json", "label", "input1", "input2");
|
|
|
|
|
private static final List<String> REQUIRED_DIRS = Arrays.asList("train", "val", "test");
|
|
|
|
|
private static final List<String> CHECK_DIRS = List.of("label", "input1", "input2");
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 데이터셋 목록 조회
|
|
|
|
|
@@ -186,7 +189,8 @@ public class DatasetService {
|
|
|
|
|
// 압축 해제한 폴더 하위에 train,val,test 폴더 모두 존재하는지 확인
|
|
|
|
|
validateTrainValTestDirs(addReq.getFilePath() + addReq.getFileName().replace(".zip", ""));
|
|
|
|
|
|
|
|
|
|
// TODO : 압축 해제한 폴더의 갯수 맞는지 log 찍기
|
|
|
|
|
// 압축 해제한 폴더의 갯수 맞는지 log 찍기
|
|
|
|
|
validateDirFileCount(addReq.getFilePath() + addReq.getFileName().replace(".zip", ""));
|
|
|
|
|
|
|
|
|
|
// 해제한 폴더 읽어서 데이터 저장
|
|
|
|
|
List<Map<String, Object>> list =
|
|
|
|
|
@@ -473,4 +477,50 @@ public class DatasetService {
|
|
|
|
|
+ " (필수: train, val, test)");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public static void validateDirFileCount(String unzipRootDir) {
|
|
|
|
|
Path root = Paths.get(unzipRootDir);
|
|
|
|
|
|
|
|
|
|
for (String split : REQUIRED_DIRS) {
|
|
|
|
|
|
|
|
|
|
Path splitPath = root.resolve(split);
|
|
|
|
|
|
|
|
|
|
Map<String, Long> fileCountMap = new HashMap<>();
|
|
|
|
|
|
|
|
|
|
for (String subDir : CHECK_DIRS) { // input1, input2, label 폴더만 수행하기
|
|
|
|
|
|
|
|
|
|
Path subDirPath = splitPath.resolve(subDir);
|
|
|
|
|
|
|
|
|
|
if (!Files.isDirectory(subDirPath)) {
|
|
|
|
|
throw new CustomApiException(
|
|
|
|
|
ApiResponseCode.NOT_FOUND_DATA.getId(),
|
|
|
|
|
HttpStatus.CONFLICT,
|
|
|
|
|
split + " 폴더 하위에 " + subDir + " 폴더가 존재하지 않습니다.");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
long count;
|
|
|
|
|
try (Stream<Path> files = Files.list(subDirPath)) {
|
|
|
|
|
count = files.filter(Files::isRegularFile).count();
|
|
|
|
|
log.info("dir: " + subDirPath + ", count: " + count);
|
|
|
|
|
} catch (IOException e) {
|
|
|
|
|
throw new CustomApiException(
|
|
|
|
|
ApiResponseCode.NOT_FOUND_DATA.getId(),
|
|
|
|
|
HttpStatus.CONFLICT,
|
|
|
|
|
split + "/" + subDir + " 파일 개수 확인 중 오류 발생");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fileCountMap.put(subDir, count);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// 모든 폴더 파일 개수가 동일한지 확인
|
|
|
|
|
Set<Long> uniqueCounts = new HashSet<>(fileCountMap.values());
|
|
|
|
|
|
|
|
|
|
if (uniqueCounts.size() != 1) {
|
|
|
|
|
throw new CustomApiException(
|
|
|
|
|
ApiResponseCode.NOT_FOUND_DATA.getId(),
|
|
|
|
|
HttpStatus.CONFLICT,
|
|
|
|
|
split + " 데이터 파일 개수가 일치하지 않습니다. " + fileCountMap.toString());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|