file-transformer-rda-json/core/src/main/java/eu/eudat/file/transformer/executor/RdaFileTransformer.java

94 lines
4.4 KiB
Java

package eu.eudat.file.transformer.executor;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import eu.eudat.file.transformer.interfaces.FileTransformerClient;
import eu.eudat.file.transformer.interfaces.FileTransformerConfiguration;
import eu.eudat.file.transformer.models.description.DescriptionFileTransformerModel;
import eu.eudat.file.transformer.models.dmp.DmpFileTransformerModel;
import eu.eudat.file.transformer.models.misc.FileEnvelope;
import eu.eudat.file.transformer.models.misc.FileFormat;
import eu.eudat.file.transformer.rda.Dataset;
import eu.eudat.file.transformer.rda.Dmp;
import eu.eudat.file.transformer.rda.RDAModel;
import eu.eudat.file.transformer.rda.mapper.DatasetRDAMapper;
import eu.eudat.file.transformer.rda.mapper.DmpRDAMapper;
import eu.eudat.file.transformer.utils.service.storage.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.management.InvalidApplicationException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.text.SimpleDateFormat;
import java.util.List;
@Service
public class RdaFileTransformer implements FileTransformerClient {
private final DmpRDAMapper dmpRDAMapper;
private final DatasetRDAMapper descriptionRDAMapper;
private final ObjectMapper mapper;
private final FileStorageService fileStorageService;
@Autowired
public RdaFileTransformer(DmpRDAMapper dmpRDAMapper, DatasetRDAMapper descriptionRDAMapper, FileStorageService fileStorageService) {
this.dmpRDAMapper = dmpRDAMapper;
this.descriptionRDAMapper = descriptionRDAMapper;
this.fileStorageService = fileStorageService;
mapper = new ObjectMapper();
mapper.registerModule(new JavaTimeModule());
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
}
@Override
public FileEnvelope exportDmp(DmpFileTransformerModel dmpFileTransformerModel) throws InvalidApplicationException, IOException {
Dmp dmp = this.dmpRDAMapper.toRDA(dmpFileTransformerModel);
RDAModel rdaModel = new RDAModel();
rdaModel.setDmp(dmp);
String dmpJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rdaModel);
FileEnvelope result = new FileEnvelope();
result.setFilename(dmpFileTransformerModel.getLabel() + ".json");
result.setFile(this.fileStorageService.storeFile(dmpJson.getBytes(StandardCharsets.UTF_8)));
return result;
}
@Override
public FileEnvelope exportDescription(DescriptionFileTransformerModel descriptionFileTransformerModel, String format) throws InvalidApplicationException, IOException {
Dataset dataset = this.descriptionRDAMapper.toRDA(descriptionFileTransformerModel, this.dmpRDAMapper.toRDA(descriptionFileTransformerModel.getDmp()));
String dmpJson = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(dataset);
FileEnvelope result = new FileEnvelope();
result.setFilename(descriptionFileTransformerModel.getLabel() + ".json");
result.setFile(this.fileStorageService.storeFile(dmpJson.getBytes(StandardCharsets.UTF_8)));
return result;
}
@Override
public DmpFileTransformerModel importDmp(FileEnvelope fileEnvelope) {
/*try { //TODO
String jsonString = String.valueOf(this.fileStorageService.readFile(fileEnvelope.getFile()));
RDAModel rda = mapper.readValue(jsonString, RDAModel.class);
DmpFileTransformerModel model = this.dmpRDAMapper.toEntity(rda.getDmp(), )
} catch (JsonProcessingException e) {
}*/
return null;
}
@Override
public DescriptionFileTransformerModel importDescription(FileEnvelope fileEnvelope) {
return null;
}
@Override
public FileTransformerConfiguration getConfiguration() {
List<FileFormat> supportedFormats = List.of(new FileFormat("json", false, null));
FileTransformerConfiguration configuration = new FileTransformerConfiguration();
configuration.setFileTransformerId("json");
configuration.setExportVariants(supportedFormats);
configuration.setImportVariants(supportedFormats);
return configuration;
}
}