diff --git a/core/pom.xml b/core/pom.xml
index 999fe2a..d87317a 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -18,7 +18,7 @@
21
21
1.0.0-SNAPSHOT
- 0.0.2
+ 0.0.3
diff --git a/core/src/main/java/eu/eudat/file/transformer/configuration/FileStorageProperties.java b/core/src/main/java/eu/eudat/file/transformer/configuration/FileStorageProperties.java
index c1f8ac1..5ba191d 100644
--- a/core/src/main/java/eu/eudat/file/transformer/configuration/FileStorageProperties.java
+++ b/core/src/main/java/eu/eudat/file/transformer/configuration/FileStorageProperties.java
@@ -6,13 +6,19 @@ import org.springframework.boot.context.properties.bind.ConstructorBinding;
@ConfigurationProperties(prefix = "file.storage")
public class FileStorageProperties {
private final String temp;
+ private final String transientPath;
@ConstructorBinding
- public FileStorageProperties(String temp) {
+ public FileStorageProperties(String temp, String transientPath) {
this.temp = temp;
+ this.transientPath = transientPath;
}
public String getTemp() {
return temp;
}
+
+ public String getTransientPath() {
+ return transientPath;
+ }
}
diff --git a/core/src/main/java/eu/eudat/file/transformer/executor/WordFileTransformer.java b/core/src/main/java/eu/eudat/file/transformer/executor/WordFileTransformer.java
index 57cc3f9..3c7ab22 100644
--- a/core/src/main/java/eu/eudat/file/transformer/executor/WordFileTransformer.java
+++ b/core/src/main/java/eu/eudat/file/transformer/executor/WordFileTransformer.java
@@ -22,8 +22,10 @@ import eu.eudat.file.transformer.models.dmpblueprint.definition.SystemFieldFileT
import eu.eudat.file.transformer.model.enums.FileFormats;
import eu.eudat.file.transformer.models.misc.FileEnvelope;
import eu.eudat.file.transformer.model.file.FileEnvelopeInternal;
-import eu.eudat.file.transformer.models.reference.ReferenceFileTransformerModel;\
+import eu.eudat.file.transformer.models.misc.FileFormat;
+import eu.eudat.file.transformer.models.reference.ReferenceFileTransformerModel;
import eu.eudat.file.transformer.utils.pdf.PDFUtils;
+import eu.eudat.file.transformer.utils.storage.FileStorageService;
import eu.eudat.file.transformer.utils.types.ParagraphStyle;
import eu.eudat.file.transformer.utils.word.WordBuilder;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
@@ -47,18 +49,25 @@ import java.util.*;
@Component
public class WordFileTransformer implements FileTransformerClient {
private final static Logger logger = LoggerFactory.getLogger(WordFileTransformer.class);
+
+ private final static List FILE_FORMATS = List.of(
+ new FileFormat(FileFormats.PDF.getValue(), true, "fa-file-pdf-o"),
+ new FileFormat(FileFormats.DOCX.getValue(), true, "fa-file-word-o"));
+
private final FilePathProperties fileTemplateProperties;
private final FileStorageProperties fileStorageProperties;
private final PdfProperties pdfProperties;
private final ApplicationContext applicationContext;
private final ObjectMapper objectMapper;
+ private final FileStorageService fileStorageService;
@Autowired
- public WordFileTransformer(FilePathProperties fileTemplateProperties, FileStorageProperties fileStorageProperties, PdfProperties pdfProperties, ApplicationContext applicationContext) {
+ public WordFileTransformer(FilePathProperties fileTemplateProperties, FileStorageProperties fileStorageProperties, PdfProperties pdfProperties, ApplicationContext applicationContext, FileStorageService fileStorageService) {
this.fileTemplateProperties = fileTemplateProperties;
this.fileStorageProperties = fileStorageProperties;
this.pdfProperties = pdfProperties;
this.applicationContext = applicationContext;
+ this.fileStorageService = fileStorageService;
this.objectMapper = new ObjectMapper();
}
@@ -75,14 +84,8 @@ public class WordFileTransformer implements FileTransformerClient {
}
@Override
- public DmpFileTransformerModel importDmp(FileEnvelope file) {
- //Nothing to do here
- return null;
- }
-
- @Override
- public FileEnvelope exportDescription(DescriptionFileTransformerModel descriptionFileTransformerModel) throws InvalidApplicationException, IOException {
- FileFormats fileFormat = FileFormats.of(properties.getFormat());
+ public FileEnvelope exportDescription(DescriptionFileTransformerModel descriptionFileTransformerModel, String format) throws InvalidApplicationException, IOException {
+ FileFormats fileFormat = FileFormats.of(format);
return switch (fileFormat) {
case DOCX -> getDescriptionWordDocument(descriptionFileTransformerModel);
case PDF -> {
@@ -91,17 +94,25 @@ public class WordFileTransformer implements FileTransformerClient {
}
};
}
-
+
@Override
- public DescriptionFileTransformerModel importDescription(FileEnvelope file) {
+ public DmpFileTransformerModel importDmp(FileEnvelope envelope) {
+ //Nothing to do here
+ return null;
+ }
+
+ @Override
+ public DescriptionFileTransformerModel importDescription(FileEnvelope envelope) {
return null;
}
@Override
public FileTransformerConfiguration getConfiguration() {
- return null; //TODO
-// return this.zenodoProperties.getDepositConfiguration();
+ FileTransformerConfiguration configuration = new FileTransformerConfiguration();
+ configuration.setFileTransformerId("docx/pdf");
+ configuration.setExportVariants(FILE_FORMATS);
+ return configuration;
}
private FileEnvelope getPdfDocument(FileEnvelopeInternal wordFile) throws IOException {
@@ -109,7 +120,7 @@ public class WordFileTransformer implements FileTransformerClient {
FileEnvelope result = new FileEnvelope();
result.setFilename(wordFile.getFilename().replaceAll(".docx", ".pdf"));
try (FileInputStream fis = new FileInputStream(pdfFile)) {
- result.setFile(fis.readAllBytes());
+ result.setFile(fileStorageService.storeFile(fis.readAllBytes()));
}
return result;
}
@@ -119,14 +130,14 @@ public class WordFileTransformer implements FileTransformerClient {
FileEnvelope result = new FileEnvelope();
result.setFilename(wordFile.getFilename());
try (FileInputStream fis = new FileInputStream(wordFile.getFile())) {
- result.setFile(fis.readAllBytes());
+ result.setFile(fileStorageService.storeFile(fis.readAllBytes()));
}
return result;
}
private FileEnvelopeInternal getWordDocument(DmpFileTransformerModel dmpEntity, Boolean versioned) throws IOException {
WordBuilder wordBuilder = new WordBuilder(fileTemplateProperties, fileStorageProperties);
-\ XWPFDocument document = new XWPFDocument(new FileInputStream(ResourceUtils.getFile(fileTemplateProperties.getWordTemplate())));
+ XWPFDocument document = new XWPFDocument(new FileInputStream(ResourceUtils.getFile(fileTemplateProperties.getWordTemplate())));
wordBuilder.fillFirstPage(dmpEntity, null, document, false);
@@ -505,7 +516,7 @@ public class WordFileTransformer implements FileTransformerClient {
FileEnvelope fileEnvelope = new FileEnvelope();
fileEnvelope.setFilename(wordFile.getFilename());
try (FileInputStream fis = new FileInputStream(wordFile.getFile())) {
- fileEnvelope.setFile(fis.readAllBytes());
+ fileEnvelope.setFile(fileStorageService.storeFile(fis.readAllBytes()));
}
return fileEnvelope;
}
diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/storage/FileStorageService.java b/core/src/main/java/eu/eudat/file/transformer/utils/storage/FileStorageService.java
new file mode 100644
index 0000000..5a08e1a
--- /dev/null
+++ b/core/src/main/java/eu/eudat/file/transformer/utils/storage/FileStorageService.java
@@ -0,0 +1,48 @@
+package eu.eudat.file.transformer.utils.storage;
+
+import eu.eudat.file.transformer.configuration.FileStorageProperties;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.nio.file.StandardOpenOption;
+import java.util.UUID;
+
+@Service
+public class FileStorageService {
+ private final static Logger logger = LoggerFactory.getLogger(FileStorageService.class);
+
+ private final FileStorageProperties properties;
+
+ @Autowired
+ public FileStorageService(FileStorageProperties properties) {
+ this.properties = properties;
+ }
+
+ public String storeFile(byte[] data) {
+ try {
+ String fileName = UUID.randomUUID().toString();
+ Path storagePath = Paths.get(properties.getTransientPath() + "/" + fileName);
+ Files.write(storagePath, data, StandardOpenOption.CREATE_NEW);
+ return fileName;
+ } catch (IOException e) {
+ logger.error(e.getMessage(), e);
+ }
+ return null;
+ }
+
+ public byte[] readFile(String fileRef) {
+ try (FileInputStream inputStream = new FileInputStream(properties.getTransientPath() + "/" + fileRef)) {
+ return inputStream.readAllBytes();
+ } catch (IOException e) {
+ logger.error(e.getMessage(), e);
+ }
+ return new byte[1];
+ }
+}
diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/word/WordBuilder.java b/core/src/main/java/eu/eudat/file/transformer/utils/word/WordBuilder.java
index dc68d9a..5c3667a 100644
--- a/core/src/main/java/eu/eudat/file/transformer/utils/word/WordBuilder.java
+++ b/core/src/main/java/eu/eudat/file/transformer/utils/word/WordBuilder.java
@@ -610,157 +610,149 @@ public class WordBuilder {
if (field.getIncludeInExport()) {
if (!createListing) {
try {
- if(((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.UPLOAD)){
- boolean isImage = false;
- for(UploadOptionFileTransformerModel type: ((UploadDataFileTransformerModel)field.getData()).getTypes()){
- String fileFormat = type.getValue();
- if(IMAGE_TYPE_MAP.containsKey(fileFormat)){
- isImage = true;
- break;
+ if (field.getData() != null) {
+ if (field.getData().getFieldType().equals(FieldType.UPLOAD)) {
+ boolean isImage = false;
+ for (UploadOptionFileTransformerModel type : ((UploadDataFileTransformerModel) field.getData()).getTypes()) {
+ String fileFormat = type.getValue();
+ if (IMAGE_TYPE_MAP.containsKey(fileFormat)) {
+ isImage = true;
+ break;
+ }
}
- }
- if(isImage){
- if (field.getData().getValue() != null && !field.getData().getValue().toString().isEmpty()) {
- XWPFParagraph paragraph = addParagraphContent(mapper.convertValue(field.getData().getValue(), Map.class), mainDocumentPart, ParagraphStyle.IMAGE, numId, 0);
- if (paragraph != null) {
+ if (isImage) {
+ if (field.getData().getValue() != null && !field.getData().getValue().isEmpty()) {
+ XWPFParagraph paragraph = addParagraphContent(mapper.convertValue(field.getData().getValue(), Map.class), mainDocumentPart, ParagraphStyle.IMAGE, numId, 0);
+ if (paragraph != null) {
// CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl();
// number.setVal(BigInteger.valueOf(indent));
- hasValue = true;
- }
- if(hasMultiplicityItems){
- hasMultiplicityItems = false;
- }
- }
- }
- }
- else if (field.getData().getValue() != null && !field.getData().getValue().toString().isEmpty()) {
- this.indent = indent;
- String format = this.formatter(field);
- if (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.TAGS)) {
- format = getCommaSeparatedFormatsFromJson(format, "name");
- } else if (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.AUTO_COMPLETE)) {
- format = getCommaSeparatedFormatsFromJson(format, "label");
- }
- switch (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType()) {
- case ORGANIZATIONS:
- case EXTERNAL_DATASETS:
- case PUBLICATIONS:
- if(format != null && !format.isEmpty()){
- Object hasMultiAutoComplete = mapper.convertValue(field.getData(), Map.class).get("multiAutoComplete");
- boolean isMultiAutoComplete = hasMultiAutoComplete != null && (boolean)hasMultiAutoComplete;
- if(!isMultiAutoComplete){
- Map value = mapper.readValue((String)field.getData().getValue(), Map.class);
- if(hasMultiplicityItems){
- createHypeLink(mainDocumentPart, format, value.get("pidTypeField"), value.get("pid"), true, false);
- hasMultiplicityItems = false;
- }
- else{
- createHypeLink(mainDocumentPart, format, value.get("pidTypeField"), value.get("pid"), false, false);
- }
- }
- else{
- mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
- List