110 lines
5.1 KiB
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;
|
|
}
|
|
}
|