Skip to content

Commit

Permalink
Merge branch 'main' into jefferson-experiment
Browse files Browse the repository at this point in the history
  • Loading branch information
spokenbird committed Apr 23, 2024
2 parents 2a4cb46 + 65acfe3 commit c6cfebb
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 21 deletions.
14 changes: 4 additions & 10 deletions src/main/java/org/ladocuploader/app/cli/SubmissionTransfer.java
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import org.ladocuploader.app.data.enums.TransmissionStatus;
import org.ladocuploader.app.data.enums.TransmissionType;
import org.ladocuploader.app.submission.StringEncryptor;
import org.ladocuploader.app.utils.SubmissionUtilities;
import org.slf4j.MDC;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.domain.Sort;
Expand Down Expand Up @@ -217,17 +218,10 @@ private void packageUploadedDocuments(String batchIndex, ZipOutputStream zos, St
return;
}
log.info("Number of uploaded docs to transfer: %s".formatted(userFiles.size()));
Map<String, Integer> filenameDuplicates = new HashMap<>();
int fileCount = 0;
for (UserFile userFile : userFiles) {
// Account for files of the same name
String docUploadFilename = userFile.getOriginalName();
filenameDuplicates.putIfAbsent(docUploadFilename, 0);
filenameDuplicates.computeIfPresent(docUploadFilename, (s, i) -> i + 1);
Integer filecount = filenameDuplicates.get(docUploadFilename);
if (filecount > 1) {
docUploadFilename = "%s_%s".formatted(filecount, docUploadFilename);
}

fileCount += 1;
String docUploadFilename = SubmissionUtilities.createFileNameForUploadedDocument(submission, userFile, fileCount, userFiles.size());
ZipEntry docEntry = new ZipEntry(batchIndex + "/" + subfolder + "/" + docUploadFilename);
docEntry.setSize(userFile.getFilesize().longValue());
zos.putNextEntry(docEntry);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.ladocuploader.app.data.TransmissionRepository;
import org.ladocuploader.app.data.enums.TransmissionStatus;
import org.ladocuploader.app.data.enums.TransmissionType;
import org.ladocuploader.app.utils.SubmissionUtilities;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.data.domain.Sort;
import org.springframework.scheduling.annotation.Scheduled;
Expand Down Expand Up @@ -234,7 +235,8 @@ private Map<String, Object> zipFiles(List<Submission> submissions, String zipFil
fileCount += 1;
String fileName = userFile.getOriginalName();
log.info("filename is: " + fileName);
ZipEntry docEntry = new ZipEntry(subfolder + String.format("%02d", fileCount) + "_" + userFile.getOriginalName().replaceAll("[/:\\\\]", "_"));
String formattedFileName = SubmissionUtilities.createFileNameForUploadedDocument(submission, userFile, fileCount, userFiles.size());
ZipEntry docEntry = new ZipEntry(subfolder + formattedFileName);
docEntry.setSize(userFile.getFilesize().longValue());
zos.putNextEntry(docEntry);
CloudFile docFile = fileRepository.get(userFile.getRepositoryPath());
Expand Down
13 changes: 13 additions & 0 deletions src/main/java/org/ladocuploader/app/utils/SubmissionUtilities.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package org.ladocuploader.app.utils;

import formflow.library.data.Submission;
import formflow.library.data.UserFile;
import java.time.ZoneId;
import org.ladocuploader.app.data.enums.Parish;

import java.text.DecimalFormat;
Expand Down Expand Up @@ -302,4 +304,15 @@ public static String getHouseholdMemberNameByFileId(UUID fileId, Submission subm
}
return "";
}

public static String createFileNameForUploadedDocument(Submission submission, UserFile userFile, int currentFileCount, int totalFiles) {
String documentType = userFile.getDocTypeLabel();
String fileType = userFile.getOriginalName().substring(userFile.getOriginalName().lastIndexOf("."));
String fileOwner = submission.getInputData().get("documentOwner_wildcard_" + userFile.getFileId())
.toString().replace(" ", "_");
String cstTime = submission.getSubmittedAt().atZoneSameInstant(ZoneId.of("America/Chicago"))
.format(DateTimeFormatter.ofPattern("MMddyyyyHHmm"));
String fileCountString = String.format("%d_of_%d", currentFileCount, totalFiles);
return String.format("%s_%s_%s_%s%s", fileOwner, documentType, fileCountString, cstTime, fileType);
}
}
32 changes: 22 additions & 10 deletions src/test/java/org/ladocuploader/app/cli/SubmissionTransferTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@
import formflow.library.file.CloudFile;
import formflow.library.file.CloudFileRepository;
import formflow.library.pdf.PdfService;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import org.apache.commons.io.FileUtils;
import org.jetbrains.annotations.NotNull;
import org.junit.jupiter.api.BeforeEach;
Expand Down Expand Up @@ -122,9 +124,15 @@ public void transmitZipFile() throws IOException {
assertThat(fileNames, hasItem("output/00050000000/1/SNAP_application.pdf"));
assertThat(fileNames, hasItem("output/00050000000/2/"));
assertThat(fileNames, hasItem("output/00050000000/2/SNAP_application.pdf"));
assertThat(fileNames, hasItem("output/00050000000/2/originalFilename.png"));
assertThat(fileNames, hasItem("output/00050000000/2/2_originalFilename.png"));
assertThat(fileNames, hasItem("output/00050000000/2/weird/:\\filename.jpg"));
assertThat(fileNames, hasItem(String.format("output/00050000000/2/Other_McOtherson_BirthCertificate_1_of_3_%s.png",
submissionWithDocs.getSubmittedAt().atZoneSameInstant(ZoneId.of("America/Chicago"))
.format(DateTimeFormatter.ofPattern("MMddyyyyHHmm")))));
assertThat(fileNames, hasItem(String.format("output/00050000000/2/Other_McOtherson_DriversLicense_2_of_3_%s.png",
submissionWithDocs.getSubmittedAt().atZoneSameInstant(ZoneId.of("America/Chicago"))
.format(DateTimeFormatter.ofPattern("MMddyyyyHHmm")))));
assertThat(fileNames, hasItem(String.format("output/00050000000/2/Other_McOtherson_Other_3_of_3_%s.jpg",
submissionWithDocs.getSubmittedAt().atZoneSameInstant(ZoneId.of("America/Chicago"))
.format(DateTimeFormatter.ofPattern("MMddyyyyHHmm")))));
assertThat(fileNames, hasItem("output/00050000000.txt"));
assertEquals(8, fileNames.size());

Expand Down Expand Up @@ -207,14 +215,17 @@ private Submission queueSubmissionWithDocs() {
"signature", "Other McOtherson sig"
))).build();
submissionRepository.save(submission);
UUID docId1 = saveUserFile(submission, "applicant1_birth-certificate.jpeg", "originalFilename.png");
UUID docId2 = saveUserFile(submission, "applicant1_license.jpeg", "originalFilename.png");
UUID docId3 = saveUserFile(submission, "applicant1_pay-stub.png", "weird/:\\filename.jpg");
saveTransmissionRecord(submission);
UUID docId1 = saveUserFile(submission, "applicant1_birth-certificate.jpeg", "originalFilename.png", "BirthCertificate");
UUID docId2 = saveUserFile(submission, "applicant1_license.jpeg", "originalFilename.png", "DriversLicense");
UUID docId3 = saveUserFile(submission, "applicant1_pay-stub.png", "weird/:\\filename.jpg", "Other");
submission.getInputData().putAll(Map.of("documentOwner_wildcard_" + docId1, "Other McOtherson",
"documentOwner_wildcard_" + docId2, "Other McOtherson",
"documentOwner_wildcard_" + docId3, "Other McOtherson"));
submission.getInputData().putAll(Map.of("uploadDocuments", "[\"%s\",\"%s\",\"%s\"]".formatted(docId1, docId2, docId3),
"docType_wildcard_" + docId1, "BirthCertificate",
"docType_wildcard_" + docId2, "Other",
"docType_wildcard_" + docId3, "DriversLicense"));
"docType_wildcard_" + docId2, "DriversLicense",
"docType_wildcard_" + docId3, "Other"));
saveTransmissionRecord(submission);
submissionRepository.save(submission);

Stream.of("applicant1_birth-certificate.jpeg", "applicant1_license.jpeg", "applicant1_pay-stub.png")
Expand Down Expand Up @@ -256,11 +267,12 @@ private void saveTransmissionRecord(Submission submission) {
transmissionRepository.save(transmission);
}

private UUID saveUserFile(Submission submission, String repoPath, String originalName) {
private UUID saveUserFile(Submission submission, String repoPath, String originalName, String docTypeLabel) {
UserFile docFile = new UserFile();
docFile.setFilesize(10.0f);
docFile.setSubmission(submission);
docFile.setRepositoryPath(repoPath);
docFile.setDocTypeLabel(docTypeLabel);
docFile.setOriginalName(originalName);
userFileRepository.save(docFile);
return docFile.getFileId();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package org.ladocuploader.app.utils;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.junit.jupiter.api.Assertions.*;

import formflow.library.data.Submission;
import formflow.library.data.UserFile;
import java.time.OffsetDateTime;
import java.util.Map;
import java.util.UUID;
import org.junit.jupiter.api.Test;
import org.ladocuploader.app.testutils.TestUtils;

class SubmissionUtilitiesTest {

@Test
public void testFileNameGeneration() {
// Mock objects
Submission submission = new Submission();
UserFile userFile = new UserFile();
UUID uuid = UUID.randomUUID();
userFile.setFileId(uuid);
userFile.setOriginalName("foo.pdf");
userFile.setDocTypeLabel("test");
submission.setInputData(Map.of("documentOwner_wildcard_" + uuid, "John Doe"));
submission.setSubmittedAt(TestUtils.makeOffsetDateTime("2024-04-18"));

int currentFileCount = 1;
int totalFiles = 3;

// Expected output

// Call the method to generate the file name
String generatedFileName = SubmissionUtilities.createFileNameForUploadedDocument(submission, userFile, currentFileCount, totalFiles);

// Assert the output matches the expected result
assertThat(generatedFileName).isEqualTo("John_Doe_test_1_of_3_041820240300.pdf");
}
}

0 comments on commit c6cfebb

Please sign in to comment.