clean up names

This commit is contained in:
Efstratios Giannopoulos 2024-05-24 14:00:46 +03:00
parent d6522a4a59
commit cc7a97eee6
1 changed files with 20 additions and 7 deletions

View File

@ -6,21 +6,19 @@ import gr.cite.tools.logging.LoggerService;
import gr.cite.tools.logging.MapLogEntry;
import org.opencdmp.commonmodels.models.FileEnvelopeModel;
import org.opencdmp.commonmodels.models.dmp.DmpModel;
import org.opencdmp.depositbase.repository.DepositConfiguration;
import org.opencdmp.deposit.zenodorepository.model.ZenodoDeposit;
import org.opencdmp.deposit.zenodorepository.model.builder.ZenodoBuilder;
import org.opencdmp.deposit.zenodorepository.service.storage.FileStorageService;
import org.opencdmp.depositbase.repository.DepositConfiguration;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.ParameterizedTypeReference;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.http.client.MultipartBodyBuilder;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.util.MultiValueMapAdapter;
import org.springframework.util.ResourceUtils;
import org.springframework.web.client.HttpClientErrorException;
import org.springframework.web.client.HttpServerErrorException;
@ -114,8 +112,7 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService {
FileEnvelopeModel pdfEnvelope = dmpModel.getPdfFile();
if (links == null || !links.containsKey(ZENODO_LINKS_BUCKET)) throw new MyApplicationException("bucket not found");
String addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + pdfEnvelope.getFilename() + "?access_token=" + zenodoToken;
String addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + cleanFileName(pdfEnvelope.getFilename()) + "?access_token=" + zenodoToken;
byte[] pdfFileBytes = null;
if (this.getConfiguration().isUseSharedStorage() && pdfEnvelope.getFileRef() != null && !pdfEnvelope.getFileRef().isBlank()) {
@ -130,7 +127,7 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService {
.retrieve().toEntity(Map.class).block();
FileEnvelopeModel rdaJsonEnvelope = dmpModel.getRdaJsonFile();
String jsonFileName = rdaJsonEnvelope.getFilename();
String jsonFileName = cleanFileName(rdaJsonEnvelope.getFilename());
addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + jsonFileName + "?access_token=" + zenodoToken;
byte[] rdaJsonBytes = null;
@ -143,7 +140,7 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService {
zenodoClient.put().uri(addFileUrl).headers(httpHeaders -> httpHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM)).body(BodyInserters.fromResource(new ByteArrayResource(rdaJsonBytes))).retrieve().toEntity(Map.class).block();
if (dmpModel.getSupportingFilesZip() != null) {
String supportingFilesZipName = dmpModel.getSupportingFilesZip().getFilename();
String supportingFilesZipName = cleanFileName(dmpModel.getSupportingFilesZip().getFilename());
addFileUrl = links.get(ZENODO_LINKS_BUCKET) + "/" + supportingFilesZipName + "?access_token=" + zenodoToken;
zenodoClient.put().uri(addFileUrl).body(BodyInserters.fromResource(new ByteArrayResource(supportingFilesZipName.getBytes()))).retrieve().toEntity(Map.class).block();
@ -168,6 +165,22 @@ public class ZenodoDepositServiceImpl implements ZenodoDepositService {
return null;
}
private static String cleanFileName(String name){
if (name == null || name.isEmpty()) return null;
int extensionIndex = name.lastIndexOf('.');
String extension = "";
String namePart = "";
if (extensionIndex > 0) {
extension = name.substring(extensionIndex + 1);
namePart = name.substring(0, extensionIndex);
}
if (!namePart.isEmpty()) namePart = namePart.replaceAll("[^a-zA-Z0-9_+ ]", "").replace(" ", "_").replace(",", "_");
return namePart + "." + extension;
}
private static LinkedHashMap<String, String> depositNewVersion(String zenodoToken, String zenodoUrl, String previousDOI, WebClient zenodoClient, ZenodoDeposit deposit) throws Exception {
Map<String, Object> createResponse;