file-transformer-rda-json/core/src/main/java/eu/eudat/file/transformer/service/rdafiletransformer/RdaFileTransformerService.java

110 lines
5.1 KiB
Java

package eu.eudat.file.transformer.service.rdafiletransformer;
import eu.eudat.commonmodels.models.FileEnvelopeModel;
import eu.eudat.commonmodels.models.description.DescriptionModel;
import eu.eudat.commonmodels.models.dmp.DmpModel;
import eu.eudat.file.transformer.enums.FileTransformerEntityType;
import eu.eudat.file.transformer.interfaces.FileTransformerClient;
import eu.eudat.file.transformer.interfaces.FileTransformerConfiguration;
import eu.eudat.file.transformer.models.misc.FileFormat;
import eu.eudat.file.transformer.model.rda.Dataset;
import eu.eudat.file.transformer.model.rda.Dmp;
import eu.eudat.file.transformer.model.rda.RDAModel;
import eu.eudat.file.transformer.model.rda.mapper.DatasetRDAMapper;
import eu.eudat.file.transformer.model.rda.mapper.DmpRDAMapper;
import eu.eudat.file.transformer.service.json.JsonHandlingService;
import eu.eudat.file.transformer.service.storage.FileStorageService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import javax.management.InvalidApplicationException;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class RdaFileTransformerService implements FileTransformerClient {
private final DmpRDAMapper dmpRDAMapper;
private final DatasetRDAMapper descriptionRDAMapper;
private final FileStorageService storageService;
private final RdaFileTransformerServiceProperties properties;
private final JsonHandlingService jsonHandlingService;
private final static List<FileTransformerEntityType> FILE_TRANSFORMER_ENTITY_TYPES = List.of(FileTransformerEntityType.Dmp);
@Autowired
public RdaFileTransformerService(DmpRDAMapper dmpRDAMapper, DatasetRDAMapper descriptionRDAMapper, FileStorageService storageService, RdaFileTransformerServiceProperties properties, JsonHandlingService jsonHandlingService) {
this.dmpRDAMapper = dmpRDAMapper;
this.descriptionRDAMapper = descriptionRDAMapper;
this.storageService = storageService;
this.properties = properties;
this.jsonHandlingService = jsonHandlingService;
}
@Override
public FileEnvelopeModel exportDmp(DmpModel dmpFileTransformerModel, String variant) throws IOException {
Dmp dmp = this.dmpRDAMapper.toRDA(dmpFileTransformerModel);
RDAModel rdaModel = new RDAModel();
rdaModel.setDmp(dmp);
String dmpJson = jsonHandlingService.toJsonSafe(rdaModel);
byte[] bytes = dmpJson.getBytes(StandardCharsets.UTF_8);
FileEnvelopeModel wordFile = new FileEnvelopeModel();
if (this.getConfiguration().isUseSharedStorage()) {
String fileRef = this.storageService.storeFile(bytes);
wordFile.setFileRef(fileRef);
} else {
wordFile.setFile(bytes);
}
wordFile.setFilename(dmpFileTransformerModel.getLabel() + ".json");
return wordFile;
}
@Override
public FileEnvelopeModel exportDescription(DescriptionModel descriptionFileTransformerModel, String format) throws InvalidApplicationException, IOException {
Dmp dmp = this.dmpRDAMapper.toRDA(descriptionFileTransformerModel.getDmp());
Map<String, Object> datasetExtraData = new HashMap<>();
datasetExtraData.put("dmp", dmp);
Dataset dataset = this.descriptionRDAMapper.toRDA(descriptionFileTransformerModel, datasetExtraData);
String dmpJson = jsonHandlingService.toJsonSafe(dataset);
byte[] bytes = dmpJson.getBytes(StandardCharsets.UTF_8);
FileEnvelopeModel wordFile = new FileEnvelopeModel();
if (this.getConfiguration().isUseSharedStorage()) {
String fileRef = this.storageService.storeFile(bytes);
wordFile.setFileRef(fileRef);
} else {
wordFile.setFile(bytes);
}
wordFile.setFilename(descriptionFileTransformerModel.getLabel() + ".json");
return wordFile;
}
@Override
public DmpModel importDmp(FileEnvelopeModel envelope) {
throw new UnsupportedOperationException("import not supported");
}
@Override
public DescriptionModel importDescription(FileEnvelopeModel envelope) {
throw new UnsupportedOperationException("import not supported");
}
@Override
public FileTransformerConfiguration getConfiguration() {
List<FileFormat> supportedFormats = List.of(new FileFormat("json", false, null));
FileTransformerConfiguration configuration = new FileTransformerConfiguration();
configuration.setFileTransformerId(this.properties.getTransformerId());
configuration.setExportVariants(supportedFormats);
configuration.setExportEntityTypes(FILE_TRANSFORMER_ENTITY_TYPES);
configuration.setImportVariants(null);
configuration.setUseSharedStorage(this.properties.isUseSharedStorage());
return configuration;
}
}