From bf2520c6b4218d0489fb195e0b3059d5a662e318 Mon Sep 17 00:00:00 2001 From: Diamantis Tziotzios Date: Thu, 25 Jan 2024 10:17:44 +0200 Subject: [PATCH] WIP for new base --- .../executor/WordFileTransformer.java | 152 ++++---- .../transformer/model/enums/FileFormats.java | 2 +- .../transformer/model/visibility/Rule.java | 40 -- .../model/visibility/RuleMapper.java | 53 --- .../visibility/VisibilityContext.java | 44 --- .../services/visibility/VisibilityRule.java | 27 -- .../visibility/VisibilityRuleService.java | 17 - .../visibility/VisibilityRuleServiceImpl.java | 73 ---- .../visibility/VisibilityRuleSource.java | 25 -- .../DescriptionTemplateService.java | 31 -- .../transformer/utils/interfaces/Applier.java | 8 - .../utils/interfaces/Cloneable.java | 8 - .../utils/interfaces/ModelSerializer.java | 8 - .../transformer/utils/json/JavaToJson.java | 13 - .../transformer/utils/json/JsonSearcher.java | 81 ---- .../utils/json/MultiDateDeserializer.java | 41 -- .../transformer/utils/word/WordBuilder.java | 365 +++++++++--------- .../controller/FileTransformerController.java | 11 +- 18 files changed, 253 insertions(+), 746 deletions(-) delete mode 100644 core/src/main/java/eu/eudat/file/transformer/model/visibility/Rule.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/model/visibility/RuleMapper.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityContext.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRule.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleService.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleServiceImpl.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleSource.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/descriptionTemplate/DescriptionTemplateService.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Applier.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Cloneable.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/interfaces/ModelSerializer.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/json/JavaToJson.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/json/JsonSearcher.java delete mode 100644 core/src/main/java/eu/eudat/file/transformer/utils/json/MultiDateDeserializer.java 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 fd1d834..57cc3f9 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 @@ -4,21 +4,25 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.file.transformer.configuration.FilePathProperties; import eu.eudat.file.transformer.configuration.FileStorageProperties; import eu.eudat.file.transformer.configuration.PdfProperties; -import eu.eudat.file.transformer.entities.user.composite.PagedDatasetProfile; -import eu.eudat.file.transformer.enums.*; +import eu.eudat.file.transformer.enums.DescriptionStatus; +import eu.eudat.file.transformer.enums.DmpBlueprintFieldCategory; +import eu.eudat.file.transformer.enums.DmpStatus; import eu.eudat.file.transformer.enums.ReferenceType; -import eu.eudat.file.transformer.model.*; -import eu.eudat.file.transformer.model.dmpblueprintdefinition.ExtraField; -import eu.eudat.file.transformer.model.dmpblueprintdefinition.Field; -import eu.eudat.file.transformer.model.dmpblueprintdefinition.Section; -import eu.eudat.file.transformer.model.dmpblueprintdefinition.SystemField; +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.descriptiontemplate.DescriptionTemplateFileTransformerModel; +import eu.eudat.file.transformer.models.dmp.DmpFileTransformerModel; +import eu.eudat.file.transformer.models.dmp.DmpReferenceFileTransformerModel; +import eu.eudat.file.transformer.models.dmpblueprint.DmpBlueprintFileTransformerModel; +import eu.eudat.file.transformer.models.dmpblueprint.definition.ExtraFieldFileTransformerModelFileTransformerModel; +import eu.eudat.file.transformer.models.dmpblueprint.definition.FieldFileTransformerModel; +import eu.eudat.file.transformer.models.dmpblueprint.definition.SectionFileTransformerModel; +import eu.eudat.file.transformer.models.dmpblueprint.definition.SystemFieldFileTransformerModel; import eu.eudat.file.transformer.model.enums.FileFormats; -import eu.eudat.file.transformer.model.file.FileEnvelope; +import eu.eudat.file.transformer.models.misc.FileEnvelope; import eu.eudat.file.transformer.model.file.FileEnvelopeInternal; -import eu.eudat.file.transformer.model.file.FileFormat; -import eu.eudat.file.transformer.services.visibility.VisibilityRuleService; -import eu.eudat.file.transformer.services.visibility.VisibilityRuleServiceImpl; -import eu.eudat.file.transformer.utils.descriptionTemplate.DescriptionTemplateService; +import eu.eudat.file.transformer.models.reference.ReferenceFileTransformerModel;\ import eu.eudat.file.transformer.utils.pdf.PDFUtils; import eu.eudat.file.transformer.utils.types.ParagraphStyle; import eu.eudat.file.transformer.utils.word.WordBuilder; @@ -41,13 +45,8 @@ import java.math.BigInteger; import java.time.Instant; import java.util.*; @Component -public class WordFileTransformer implements FileTransformerExecutor { +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(), "PDF", "fa-file-pdf-o"), - new FileFormat(FileFormats.DOCX.getValue(), "Document", "fa-file-word-o")); - private final FilePathProperties fileTemplateProperties; private final FileStorageProperties fileStorageProperties; private final PdfProperties pdfProperties; @@ -64,8 +63,8 @@ public class WordFileTransformer implements FileTransformerExecutor { } @Override - public FileEnvelope exportDmp(DmpFileTransformerModel dmp, ExtraPropertiesModel properties) throws IOException { - FileFormats fileFormat = FileFormats.of(properties.getFormat()); + public FileEnvelope exportDmp(DmpFileTransformerModel dmp) throws IOException { + FileFormats fileFormat = FileFormats.of(dmp.getVariant()); return switch (fileFormat) { case DOCX -> getWordDocument(dmp); case PDF -> { @@ -76,7 +75,13 @@ public class WordFileTransformer implements FileTransformerExecutor { } @Override - public FileEnvelope exportDescription(DescriptionFileTransformerModel descriptionFileTransformerModel, ExtraPropertiesModel properties) throws InvalidApplicationException, IOException { + 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()); return switch (fileFormat) { case DOCX -> getDescriptionWordDocument(descriptionFileTransformerModel); @@ -86,22 +91,17 @@ public class WordFileTransformer implements FileTransformerExecutor { } }; } - + @Override - public DmpFileTransformerModel importFileToDmp(FileEnvelope envelope) { - //Nothing to do here + public DescriptionFileTransformerModel importDescription(FileEnvelope file) { return null; } @Override - public DescriptionFileTransformerModel importFileToDescription(FileEnvelope envelope) { - return null; - } - - @Override - public List getSupportedFileFormats() { - return FILE_FORMATS; + public FileTransformerConfiguration getConfiguration() { + return null; //TODO +// return this.zenodoProperties.getDepositConfiguration(); } private FileEnvelope getPdfDocument(FileEnvelopeInternal wordFile) throws IOException { @@ -126,22 +126,21 @@ public class WordFileTransformer implements FileTransformerExecutor { private FileEnvelopeInternal getWordDocument(DmpFileTransformerModel dmpEntity, Boolean versioned) throws IOException { WordBuilder wordBuilder = new WordBuilder(fileTemplateProperties, fileStorageProperties); - VisibilityRuleService visibilityRuleService = new VisibilityRuleServiceImpl(); - 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); - List grants = new ArrayList<>(); - List researchers = new ArrayList<>(); - List organizations = new ArrayList<>(); - List funders = new ArrayList<>(); - List projects = new ArrayList<>(); + List grants = new ArrayList<>(); + List researchers = new ArrayList<>(); + List organizations = new ArrayList<>(); + List funders = new ArrayList<>(); + List projects = new ArrayList<>(); if (dmpEntity.getDmpReferences() != null) { - grants = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Grants) && referenceFileModel.getIsActive().equals(IsActive.Active)).toList(); - researchers = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(reference -> reference.getType().equals(ReferenceType.Researcher)).toList(); - organizations = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Organizations)).toList(); - funders = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Funder) && referenceFileModel.getIsActive().equals(IsActive.Active)).toList(); - projects = dmpEntity.getDmpReferences().stream().filter(referenceFileModel -> referenceFileModel.getReference().getType().equals(ReferenceType.Project) && referenceFileModel.getReference().getIsActive().equals(IsActive.Active)).map(DmpReference::getReference).toList(); + grants = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Grants)).toList(); + researchers = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(reference -> reference.getType().equals(ReferenceType.Researcher)).toList(); + organizations = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Organizations)).toList(); + funders = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Funder)).toList(); + projects = dmpEntity.getDmpReferences().stream().filter(referenceFileModel -> referenceFileModel.getReference().getType().equals(ReferenceType.Project)).map(DmpReferenceFileTransformerModel::getReference).toList(); } // int powered_pos = document.getParagraphs().size() - 3; @@ -192,30 +191,30 @@ public class WordFileTransformer implements FileTransformerExecutor { // // Space below Datasets. // XWPFParagraph parBreakDatasets = document.createParagraph(); - DmpBlueprint dmpBlueprint = dmpEntity.getBlueprint(); - for(Section section: dmpBlueprint.getDefinition().getSections()){ - wordBuilder.addParagraphContent("Section " + section.getOrdinal(), document, ParagraphStyle.HEADER1, BigInteger.ZERO, 0); + DmpBlueprintFileTransformerModel dmpBlueprintFileTransformerModel = dmpEntity.getBlueprint(); + for(SectionFileTransformerModel sectionFileTransformerModel : dmpBlueprintFileTransformerModel.getDefinitionFileTransformerModel().getSections()){ + wordBuilder.addParagraphContent("Section " + sectionFileTransformerModel.getOrdinal(), document, ParagraphStyle.HEADER1, BigInteger.ZERO, 0); XWPFParagraph sectionInfoParagraph = document.createParagraph(); sectionInfoParagraph.setSpacingBetween(1.0); XWPFRun runSectionTitle = sectionInfoParagraph.createRun(); runSectionTitle.setText("Title: "); runSectionTitle.setColor("000000"); XWPFRun runSectionTitleText = sectionInfoParagraph.createRun(); - runSectionTitleText.setText(section.getLabel()); + runSectionTitleText.setText(sectionFileTransformerModel.getLabel()); runSectionTitleText.setColor("116a78"); XWPFParagraph sectionDescriptionParagraph = document.createParagraph(); XWPFRun runSectionDescription = sectionDescriptionParagraph.createRun(); runSectionDescription.setText("Description: "); runSectionDescription.setColor("000000"); XWPFRun runSectionDescriptionText = sectionDescriptionParagraph.createRun(); - runSectionDescriptionText.setText(section.getDescription()); + runSectionDescriptionText.setText(sectionFileTransformerModel.getDescription()); runSectionDescriptionText.setColor("116a78"); wordBuilder.addParagraphContent("Section Fields", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0); - section.getFields().sort(Comparator.comparingInt(Field::getOrdinal)); - for(Field field: section.getFields()){ - if(field.getCategory() == DmpBlueprintFieldCategory.System){ - SystemField systemField = (SystemField) field; + sectionFileTransformerModel.getFields().sort(Comparator.comparingInt(FieldFileTransformerModel::getOrdinal)); + for(FieldFileTransformerModel fieldFileTransformerModel : sectionFileTransformerModel.getFields()){ + if(fieldFileTransformerModel.getCategory() == DmpBlueprintFieldCategory.System){ + SystemFieldFileTransformerModel systemField = (SystemFieldFileTransformerModel) fieldFileTransformerModel; XWPFParagraph systemFieldParagraph = document.createParagraph(); systemFieldParagraph.setSpacingBetween(1.0); XWPFRun runSyStemFieldTitle = systemFieldParagraph.createRun(); @@ -252,14 +251,14 @@ public class WordFileTransformer implements FileTransformerExecutor { runDescription.setColor("116a78"); break; case Researchers: - for(Reference researcher: researchers){ + for(ReferenceFileTransformerModel researcher: researchers){ XWPFRun runResearcher = systemFieldInput.createRun(); runResearcher.setText("• " + researcher.getLabel()); runResearcher.setColor("116a78"); } break; case Organizations: - for(Reference organisation: organizations){ + for(ReferenceFileTransformerModel organisation: organizations){ XWPFRun runOrganisation = systemFieldInput.createRun(); runOrganisation.setText("• " + organisation.getLabel()); runOrganisation.setColor("116a78"); @@ -313,22 +312,22 @@ public class WordFileTransformer implements FileTransformerExecutor { } document.createParagraph(); } - else if(field.getCategory() == DmpBlueprintFieldCategory.Extra){ - ExtraField extraField = (ExtraField) field; + else if(fieldFileTransformerModel.getCategory() == DmpBlueprintFieldCategory.Extra){ + ExtraFieldFileTransformerModelFileTransformerModel extraFieldFileTransformerModel = (ExtraFieldFileTransformerModelFileTransformerModel) fieldFileTransformerModel; XWPFParagraph extraFieldParagraph = document.createParagraph(); extraFieldParagraph.setSpacingBetween(1.0); XWPFRun runExtraFieldLabel = extraFieldParagraph.createRun(); - runExtraFieldLabel.setText(extraField.getLabel()); + runExtraFieldLabel.setText(extraFieldFileTransformerModel.getLabel()); runExtraFieldLabel.setColor("116a78"); - if(extraField.getDescription() != null && !extraField.getDescription().isEmpty()){ + if(extraFieldFileTransformerModel.getDescription() != null && !extraFieldFileTransformerModel.getDescription().isEmpty()){ XWPFRun runExtraFieldDescription = extraFieldParagraph.createRun(); - runExtraFieldDescription.setText(extraField.getDescription()); + runExtraFieldDescription.setText(extraFieldFileTransformerModel.getDescription()); runExtraFieldDescription.setColor("116a78"); } XWPFRun runExtraFieldInput = extraFieldParagraph.createRun(); Map dmpProperties = objectMapper.readValue(dmpEntity.getProperties(), HashMap.class); - if (dmpProperties.containsKey(field.getId()) && dmpProperties.get(field.getId()) != null) { - runExtraFieldInput.setText((String) dmpProperties.get(field.getId())); + if (dmpProperties.containsKey(fieldFileTransformerModel.getId()) && dmpProperties.get(fieldFileTransformerModel.getId()) != null) { + runExtraFieldInput.setText((String) dmpProperties.get(fieldFileTransformerModel.getId())); } runExtraFieldInput.setColor("116a78"); } @@ -338,26 +337,25 @@ public class WordFileTransformer implements FileTransformerExecutor { final Boolean isPublic = dmpEntity.getPublicAfter() != null && dmpEntity.getPublicAfter().isAfter(Instant.now()); List descriptions = dmpEntity.getDescriptions().stream() .filter(item -> item.getStatus() != DescriptionStatus.Canceled) - .filter(item -> item.getIsActive() != IsActive.Inactive) .filter(item -> !isPublic && !isFinalized || item.getStatus() == DescriptionStatus.Finalized) - .filter(item -> item.getDmpDescriptionTemplate().getSectionId().equals(section.getId())) //TODO + .filter(item -> item.getSectionId().equals(sectionFileTransformerModel.getId())) //TODO .sorted(Comparator.comparing(DescriptionFileTransformerModel::getCreatedAt)).toList(); - List descriptionTemplates = descriptions.stream().map(DescriptionFileTransformerModel::getDescriptionTemplate).toList(); + List descriptionTemplateFileTransformerModels = descriptions.stream().map(DescriptionFileTransformerModel::getDescriptionTemplate).toList(); - if(!descriptionTemplates.isEmpty()){ + if(!descriptionTemplateFileTransformerModels.isEmpty()){ wordBuilder.addParagraphContent("Section descriptions", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0); wordBuilder.addParagraphContent("Description Templates", document, ParagraphStyle.HEADER4, BigInteger.ZERO, 0); - for(DescriptionTemplate descriptionTemplateEntity : descriptionTemplates){ + for(DescriptionTemplateFileTransformerModel descriptionTemplateFileTransformerModelEntity : descriptionTemplateFileTransformerModels){ XWPFParagraph templateParagraph = document.createParagraph(); XWPFRun runTemplateLabel = templateParagraph.createRun(); - runTemplateLabel.setText("• " + descriptionTemplateEntity.getLabel()); + runTemplateLabel.setText("• " + descriptionTemplateFileTransformerModelEntity.getLabel()); runTemplateLabel.setColor("116a78"); } descriptions .forEach(datasetEntity -> { - eu.eudat.file.transformer.model.DescriptionTemplate descriptionTemplateFileModel = datasetEntity.getDescriptionTemplate(); + DescriptionTemplateFileTransformerModel descriptionTemplateFileTransformerModelFileModel = datasetEntity.getDescriptionTemplate(); // Dataset Description custom style. XWPFParagraph datasetDescriptionParagraph = document.createParagraph(); @@ -394,7 +392,7 @@ public class WordFileTransformer implements FileTransformerExecutor { //runDatasetTemplate1.setBold(true); //runDatasetTemplate1.setFontSize(12); XWPFRun runDatasetTemplate = datasetTemplateParagraph.createRun(); - runDatasetTemplate.setText(descriptionTemplateFileModel.getLabel()); + runDatasetTemplate.setText(descriptionTemplateFileTransformerModelFileModel.getLabel()); runDatasetTemplate.setColor("116a78"); //runDatasetTemplate.setBold(true); //runDatasetTemplate.setFontSize(12); @@ -440,7 +438,7 @@ public class WordFileTransformer implements FileTransformerExecutor { runDatasetDescription1.setText("Description: "); runDatasetDescription1.setColor("000000"); XWPFRun runDatasetDescription = datasetDescParagraph.createRun(); - runDatasetDescription.setText(descriptionTemplateFileModel.getLabel()); + runDatasetDescription.setText(descriptionTemplateFileTransformerModelFileModel.getLabel()); runDatasetDescription.setColor("116a78"); //wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0); @@ -448,13 +446,7 @@ public class WordFileTransformer implements FileTransformerExecutor { try { - PagedDatasetProfile pagedDatasetProfile = DescriptionTemplateService.getPagedProfile(datasetEntity); - - visibilityRuleService.setProperties(datasetEntity.getProperties()); - visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules()); - //pagedDatasetProfile = this.objectMapper.readValue(this.objectMapper.writeValueAsString(pagedDatasetProfile), eu.eudat.file.transformer.model.descriptiontemplatedefinition.Definition.class); - - wordBuilder.build(document, pagedDatasetProfile, visibilityRuleService); + wordBuilder.build(document, datasetEntity.getDescriptionTemplate()); } catch (IOException e) { logger.error(e.getMessage(), e); } @@ -525,7 +517,6 @@ public class WordFileTransformer implements FileTransformerExecutor { throw new IllegalArgumentException("Dmp is invalid"); } XWPFDocument document = new XWPFDocument(new FileInputStream(ResourceUtils.getFile(fileTemplateProperties.getWordDescriptionTemplate()))); - VisibilityRuleService visibilityRuleService = new VisibilityRuleServiceImpl(); wordBuilder.fillFirstPage(dmpEntity, descriptionFileTransformerModelEntityEntity, document, true); wordBuilder.fillFooter(dmpEntity, descriptionFileTransformerModelEntityEntity, document, true); @@ -592,10 +583,7 @@ public class WordFileTransformer implements FileTransformerExecutor { }*/ // wordBuilder.addParagraphContent("Dataset Description", document, ParagraphStyle.HEADER2, BigInteger.ZERO); - PagedDatasetProfile pagedDatasetProfile = DescriptionTemplateService.getPagedProfile(descriptionFileTransformerModelEntityEntity); - visibilityRuleService.setProperties(descriptionFileTransformerModelEntityEntity.getProperties()); - visibilityRuleService.buildVisibilityContext(pagedDatasetProfile.getRules()); - wordBuilder.build(document, pagedDatasetProfile, visibilityRuleService); + wordBuilder.build(document, descriptionFileTransformerModelEntityEntity.getDescriptionTemplate()); String label = descriptionFileTransformerModelEntityEntity.getLabel().replaceAll("[^a-zA-Z0-9+ ]", ""); // File exportFile = new File(label + ".docx"); diff --git a/core/src/main/java/eu/eudat/file/transformer/model/enums/FileFormats.java b/core/src/main/java/eu/eudat/file/transformer/model/enums/FileFormats.java index c54d93a..cb45367 100644 --- a/core/src/main/java/eu/eudat/file/transformer/model/enums/FileFormats.java +++ b/core/src/main/java/eu/eudat/file/transformer/model/enums/FileFormats.java @@ -2,8 +2,8 @@ package eu.eudat.file.transformer.model.enums; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonValue; -import eu.eudat.file.transformer.entities.descriptiontemplate.fielddata.AutoCompleteDataEntity; import eu.eudat.file.transformer.enums.DatabaseEnum; +import eu.eudat.file.transformer.enums.DmpVersionStatus; import eu.eudat.file.transformer.enums.EnumUtils; import java.util.Map; diff --git a/core/src/main/java/eu/eudat/file/transformer/model/visibility/Rule.java b/core/src/main/java/eu/eudat/file/transformer/model/visibility/Rule.java deleted file mode 100644 index 82906ea..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/model/visibility/Rule.java +++ /dev/null @@ -1,40 +0,0 @@ -package eu.eudat.file.transformer.model.visibility; -public class Rule { - private String sourceField; - private String targetField; - private String requiredValue; - private String type; - - public String getSourceField() { - return sourceField; - } - - public void setSourceField(String sourceField) { - this.sourceField = sourceField; - } - - public String getTargetField() { - return targetField; - } - - public void setTargetField(String targetField) { - this.targetField = targetField; - } - - public String getRequiredValue() { - return requiredValue; - } - - public void setRequiredValue(String requiredValue) { - this.requiredValue = requiredValue; - } - - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - -} diff --git a/core/src/main/java/eu/eudat/file/transformer/model/visibility/RuleMapper.java b/core/src/main/java/eu/eudat/file/transformer/model/visibility/RuleMapper.java deleted file mode 100644 index bf97a2c..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/model/visibility/RuleMapper.java +++ /dev/null @@ -1,53 +0,0 @@ -package eu.eudat.file.transformer.model.visibility; - -import eu.eudat.file.transformer.model.descriptiontemplatedefinition.Definition; -import eu.eudat.file.transformer.model.descriptiontemplatedefinition.Field; -import eu.eudat.file.transformer.model.descriptiontemplatedefinition.FieldSet; -import eu.eudat.file.transformer.model.descriptiontemplatedefinition.Section; -import eu.eudat.file.transformer.model.descriptiontemplatedefinition.fielddata.BaseFieldData; - -import java.util.ArrayList; -import java.util.List; - -public class RuleMapper { - - public static List mapRulesFromDefinition(Definition definitionFileModel) { - return definitionFileModel.getSections().stream().flatMap(section -> mapRulesFromSection(section).stream()).toList(); - } - - private static List mapRulesFromSection(Section section) { - List rules = new ArrayList<>(); - if (!section.getSections().isEmpty()) { - rules.addAll(section.getSections().stream().flatMap(section1 -> mapRulesFromSection(section1).stream()).toList()); - } - if (!section.getFieldSets().isEmpty()) { - rules.addAll(section.getFieldSets().stream().flatMap(fieldSet -> mapRuleFromFieldSet(fieldSet).stream()).toList()); - } - - return rules; - } - - private static List mapRuleFromFieldSet(FieldSet fieldSet) { - List rules = new ArrayList<>(); - if (!fieldSet.getFields().isEmpty()) { - rules.addAll(fieldSet.getFields().stream().flatMap(field -> mapRules(field).stream()).toList()); - } - - return rules; - } - - private static List mapRules(Field field) { - List rules = new ArrayList<>(); - BaseFieldData data = field.getData(); - field.getVisibilityRules().forEach(visibilityRule -> { - Rule rule = new Rule(); - rule.setSourceField(field.getId()); - rule.setType(data.getFieldType().getValue()); - rule.setRequiredValue(visibilityRule.getValue()); - rule.setTargetField(visibilityRule.getTarget()); - rules.add(rule); - }); - - return rules; - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityContext.java b/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityContext.java deleted file mode 100644 index a31239b..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityContext.java +++ /dev/null @@ -1,44 +0,0 @@ -package eu.eudat.file.transformer.services.visibility; -import eu.eudat.file.transformer.entities.user.components.commons.Rule; - -import java.util.LinkedList; -import java.util.List; -import java.util.Optional; - -/** - * Created by ikalyvas on 3/5/2018. - */ -public class VisibilityContext { - private List visibilityRules = new LinkedList<>(); - - public List getVisibilityRules() { - return visibilityRules; - } - - public VisibilityRule get(String id) { - Optional rule = visibilityRules.stream().filter(item -> item.getVisibilityRuleTargetId().equals(id)).findFirst(); - if (rule.isPresent()) return rule.get(); - return null; - } - - public void buildVisibilityContext(List sources) { - sources.forEach(this::addToVisibilityRulesContext); - } - - private void addToVisibilityRulesContext(Rule item) { - VisibilityRuleSource source = new VisibilityRuleSource(); - source.setVisibilityRuleSourceId(item.getSourceField()); - source.setVisibilityRuleSourceValue(item.getRequiredValue()); - - Optional visibilityRuleOptional = visibilityRules.stream().filter(rule -> rule.getVisibilityRuleTargetId().equals(item.getTargetField())).findFirst(); - if (visibilityRuleOptional.isPresent()) visibilityRuleOptional.get().getVisibilityRuleSources().add(source); - else { - List sources = new LinkedList<>(); - sources.add(source); - VisibilityRule visibilityRule = new VisibilityRule(); - visibilityRule.setVisibilityRuleTargetId(item.getTargetField()); - visibilityRule.setVisibilityRuleSources(sources); - this.visibilityRules.add(visibilityRule); - } - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRule.java b/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRule.java deleted file mode 100644 index 223ebf7..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRule.java +++ /dev/null @@ -1,27 +0,0 @@ -package eu.eudat.file.transformer.services.visibility; - -import java.util.List; - -/** - * Created by ikalyvas on 3/5/2018. - */ -public class VisibilityRule { - private String visibilityRuleTargetId; - private List visibilityRuleSources; - - public String getVisibilityRuleTargetId() { - return visibilityRuleTargetId; - } - - public void setVisibilityRuleTargetId(String visibilityRuleTargetId) { - this.visibilityRuleTargetId = visibilityRuleTargetId; - } - - public List getVisibilityRuleSources() { - return visibilityRuleSources; - } - - public void setVisibilityRuleSources(List visibilityRuleSources) { - this.visibilityRuleSources = visibilityRuleSources; - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleService.java b/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleService.java deleted file mode 100644 index ae76002..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleService.java +++ /dev/null @@ -1,17 +0,0 @@ -package eu.eudat.file.transformer.services.visibility; - -import eu.eudat.file.transformer.entities.user.components.commons.Rule; -import eu.eudat.file.transformer.model.descriptionproperties.PropertyDefinition; - -import java.util.List; - -/** - * Created by ikalyvas on 3/5/2018. - */ -public interface VisibilityRuleService { - boolean isElementVisible(String id); - - void buildVisibilityContext(List sources); - - void setProperties(PropertyDefinition properties); -} diff --git a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleServiceImpl.java b/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleServiceImpl.java deleted file mode 100644 index bbbb8f8..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleServiceImpl.java +++ /dev/null @@ -1,73 +0,0 @@ -package eu.eudat.file.transformer.services.visibility; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.file.transformer.entities.user.components.commons.Rule; -import eu.eudat.file.transformer.model.descriptionproperties.Field; -import eu.eudat.file.transformer.model.descriptionproperties.PropertyDefinition; -import java.util.*; - -/** - * Created by ikalyvas on 3/5/2018. - */ -public class VisibilityRuleServiceImpl implements VisibilityRuleService { - private final Map elementVisibility = new HashMap<>(); - private PropertyDefinition properties; - private ObjectMapper mapper; - - public VisibilityRuleServiceImpl() { - this.mapper = new ObjectMapper(); - } - - public boolean isElementVisible(String id) { - return !this.elementVisibility.containsKey(id) || this.elementVisibility.get(id); - } - - public void setProperties(PropertyDefinition properties) { - this.properties = properties; - /*this.properties.entrySet().stream() - .filter(stringObjectEntry -> stringObjectEntry.getValue() instanceof String && ((String) stringObjectEntry.getValue()).startsWith("[") - && ((String) stringObjectEntry.getValue()).endsWith("]")) - .forEach(stringObjectEntry -> stringObjectEntry.setValue(parseArray((String) stringObjectEntry.getValue())));*/ - } - - private List parseArray(String original) { - String parsed = original.replace("[", "").replace("\"", "").replace("]", ""); - return Arrays.asList(parsed.split(",")); - } - - public void buildVisibilityContext(List sources) { - VisibilityContext visibilityContext = new VisibilityContext(); - visibilityContext.buildVisibilityContext(sources); - visibilityContext.getVisibilityRules().forEach(this::evaluateVisibility); - } - - private void evaluateVisibility(VisibilityRule rule) { - List sources = rule.getVisibilityRuleSources(); - for(VisibilityRuleSource source: sources){ - Field fieldFileModel = properties.getFields().stream().filter(fieldFileModel1 -> fieldFileModel1.getKey().equals(source.getVisibilityRuleSourceId())).findFirst().orElse(null); - if (fieldFileModel != null - && isContained(fieldFileModel, source.getVisibilityRuleSourceValue())) { - this.elementVisibility.put(rule.getVisibilityRuleTargetId(), true); - } else { - this.elementVisibility.put(rule.getVisibilityRuleTargetId(), - this.elementVisibility.getOrDefault(rule.getVisibilityRuleTargetId(), false)); - } - } - } - - private Boolean isContained(Field values, String source) { - try { - Object value = mapper.readValue(values.getValue(), Object.class); - if (value instanceof Collection) { - return ((Collection) value).contains(source); - } else { - if (value != null) { - return value.toString().equals(source); - } - return false; - } - } catch (JsonProcessingException e) { - return false; - } - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleSource.java b/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleSource.java deleted file mode 100644 index 4d4489f..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/services/visibility/VisibilityRuleSource.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.file.transformer.services.visibility; - -/** - * Created by ikalyvas on 3/5/2018. - */ -public class VisibilityRuleSource { - private String visibilityRuleSourceId; - private String visibilityRuleSourceValue; - - public String getVisibilityRuleSourceId() { - return visibilityRuleSourceId; - } - - public void setVisibilityRuleSourceId(String visibilityRuleSourceId) { - this.visibilityRuleSourceId = visibilityRuleSourceId; - } - - public String getVisibilityRuleSourceValue() { - return visibilityRuleSourceValue; - } - - public void setVisibilityRuleSourceValue(String visibilityRuleSourceValue) { - this.visibilityRuleSourceValue = visibilityRuleSourceValue; - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/descriptionTemplate/DescriptionTemplateService.java b/core/src/main/java/eu/eudat/file/transformer/utils/descriptionTemplate/DescriptionTemplateService.java deleted file mode 100644 index 55fbdee..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/descriptionTemplate/DescriptionTemplateService.java +++ /dev/null @@ -1,31 +0,0 @@ -package eu.eudat.file.transformer.utils.descriptionTemplate; - -import com.fasterxml.jackson.core.JsonProcessingException; -import eu.eudat.file.transformer.entities.descriptiontemplate.DefinitionEntity; -import eu.eudat.file.transformer.entities.user.composite.DatasetProfile; -import eu.eudat.file.transformer.entities.user.composite.PagedDatasetProfile; -import eu.eudat.file.transformer.model.DescriptionFileTransformerModel; -import eu.eudat.file.transformer.model.DescriptionTemplate; - -public class DescriptionTemplateService { - - public static PagedDatasetProfile getPagedProfile(DescriptionFileTransformerModel dataset) throws JsonProcessingException { - DatasetProfile datasetprofile = generateDatasetProfileModel(dataset.getDescriptionTemplate()); - datasetprofile.setStatus(dataset.getStatus().getValue()); - if (dataset.getProperties() != null) { - datasetprofile.fromJsonObject(dataset.getProperties().getFields()); - } - PagedDatasetProfile pagedDatasetProfile = new PagedDatasetProfile(); - pagedDatasetProfile.buildPagedDatasetProfile(datasetprofile); - return pagedDatasetProfile; - } - - public static DatasetProfile generateDatasetProfileModel(DescriptionTemplate profile) { - DefinitionEntity viewstyle = new DefinitionEntity().fromDefinition(profile.getDefinition()); - - DatasetProfile datasetprofile = new DatasetProfile(); - datasetprofile.buildProfile(viewstyle); - - return datasetprofile; - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Applier.java b/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Applier.java deleted file mode 100644 index a955bec..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Applier.java +++ /dev/null @@ -1,8 +0,0 @@ -package eu.eudat.file.transformer.utils.interfaces; - -/** - * Created by ikalyvas on 3/1/2018. - */ -public interface Applier { - void apply(A applier, V value); -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Cloneable.java b/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Cloneable.java deleted file mode 100644 index 5746c95..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/Cloneable.java +++ /dev/null @@ -1,8 +0,0 @@ -package eu.eudat.file.transformer.utils.interfaces; - -/** - * Created by ikalyvas on 2/5/2018. - */ -public interface Cloneable { - T clone(); -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/ModelSerializer.java b/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/ModelSerializer.java deleted file mode 100644 index 2e34cc1..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/interfaces/ModelSerializer.java +++ /dev/null @@ -1,8 +0,0 @@ -package eu.eudat.file.transformer.utils.interfaces; - - -import eu.eudat.file.transformer.entities.common.DatabaseModelDefinition; - -public interface ModelSerializer { - void fromDatabaseDefinition(T viewStyle, U model); -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/json/JavaToJson.java b/core/src/main/java/eu/eudat/file/transformer/utils/json/JavaToJson.java deleted file mode 100644 index b75f290..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/json/JavaToJson.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.eudat.file.transformer.utils.json; - -public class JavaToJson { - - public static String objectStringToJson(String object) { - String result = object.replaceAll("=", "\":\"") - .replaceAll("\\{", "{\"") - .replaceAll(", ", "\", \"") - .replaceAll("}", "\"}" ) - .replaceAll("}\", \"\\{", "}, {"); - return result; - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/json/JsonSearcher.java b/core/src/main/java/eu/eudat/file/transformer/utils/json/JsonSearcher.java deleted file mode 100644 index a5e33e6..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/json/JsonSearcher.java +++ /dev/null @@ -1,81 +0,0 @@ -package eu.eudat.file.transformer.utils.json; - -import com.fasterxml.jackson.databind.JsonNode; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.List; - -public class JsonSearcher { - - public static List findNodes(JsonNode root, String key, String value) { - return findNodes(root, key, value, false); - } - - public static List findNodes(JsonNode root, String key, String value, boolean parent) { - List nodes = new ArrayList<>(); - for (Iterator it = root.elements(); it.hasNext(); ) { - JsonNode node = it.next(); - int found = 0; - for (Iterator iter = node.fieldNames(); iter.hasNext(); ) { - String fieldName = iter.next(); - if (fieldName.equals(key)) { - if (node.get(fieldName).asText().equals(value) || node.get(fieldName).asText().startsWith(value)) { - if (parent) { - nodes.add(root); - } else { - nodes.add(node); - } - found++; - } - else if(node.get(fieldName).isArray()){ - for(JsonNode item: node.get(fieldName)){ - if(item.asText().equals(value) || item.asText().startsWith(value)){ - if (parent) { - nodes.add(root); - } else { - nodes.add(node); - } - found++; - } - } - } - } - - } - if (found == 0) { - nodes.addAll(findNodes(node, key, value, parent)); - } - } - return nodes; - } - - public static List getParentValues(JsonNode root, String childValue, String key) { - List values = new LinkedList<>(); - - for (Iterator it = root.elements(); it.hasNext(); ) { - JsonNode node = it.next(); - int found = 0; - for (Iterator iter = node.fieldNames(); iter.hasNext(); ) { - String fieldName = iter.next(); - if (fieldName.equals(key)) { - if (node.get(fieldName).asText().equals(childValue) || node.get(fieldName).asText().startsWith(childValue)) { - values.add(childValue); - found++; - } - } - - } - if (found == 0) { - values.addAll(getParentValues(node, childValue, key)); - if (!values.isEmpty() && node.has(key)) { - values.add(node.get(key).asText()); - values.remove(childValue); - } - } - } - - return values; - } -} diff --git a/core/src/main/java/eu/eudat/file/transformer/utils/json/MultiDateDeserializer.java b/core/src/main/java/eu/eudat/file/transformer/utils/json/MultiDateDeserializer.java deleted file mode 100644 index aa82f7d..0000000 --- a/core/src/main/java/eu/eudat/file/transformer/utils/json/MultiDateDeserializer.java +++ /dev/null @@ -1,41 +0,0 @@ -package eu.eudat.file.transformer.utils.json; - -import com.fasterxml.jackson.core.JsonParseException; -import com.fasterxml.jackson.core.JsonParser; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.databind.DeserializationContext; -import com.fasterxml.jackson.databind.deser.std.StdDeserializer; - -import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Arrays; -import java.util.Date; -import java.util.List; - -public class MultiDateDeserializer extends StdDeserializer { - - private static final List DATE_FORMATS = Arrays.asList("yyyy-MM-dd'T'HH:mm:ss'Z'", "yyyy-MM-dd'T'HH:mm:ss.S"); - - - public MultiDateDeserializer() { - super(Date.class); - } - - protected MultiDateDeserializer(Class vc) { - super(vc); - } - - @Override - public Date deserialize(JsonParser p, DeserializationContext ctxt) throws IOException, JsonProcessingException { - String text = p.getText(); - - for (String dateFormat: DATE_FORMATS) { - try { - return new SimpleDateFormat(dateFormat).parse(text); - } catch (ParseException ignored) { - } - } - throw new JsonParseException(p, "No supported Date format"); - } -} 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 87adf49..dc68d9a 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 @@ -5,18 +5,19 @@ import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.file.transformer.configuration.FilePathProperties; import eu.eudat.file.transformer.configuration.FileStorageProperties; -import eu.eudat.file.transformer.entities.descriptiontemplate.fielddata.*; -import eu.eudat.file.transformer.entities.user.components.datasetprofile.Field; -import eu.eudat.file.transformer.entities.user.components.datasetprofile.FieldSet; -import eu.eudat.file.transformer.entities.user.components.datasetprofile.Section; -import eu.eudat.file.transformer.entities.user.composite.DatasetProfilePage; -import eu.eudat.file.transformer.entities.user.composite.PagedDatasetProfile; -import eu.eudat.file.transformer.enums.FieldDataComboBoxType; import eu.eudat.file.transformer.enums.FieldType; -import eu.eudat.file.transformer.enums.IsActive; import eu.eudat.file.transformer.enums.ReferenceType; import eu.eudat.file.transformer.model.*; -import eu.eudat.file.transformer.services.visibility.VisibilityRuleService; +import eu.eudat.file.transformer.models.descriptiontemplate.DescriptionTemplateFileTransformerModel; +import eu.eudat.file.transformer.models.description.DescriptionFileTransformerModel; +import eu.eudat.file.transformer.models.descriptiontemplate.definition.FieldFileTransformerModel; +import eu.eudat.file.transformer.models.descriptiontemplate.definition.FieldSetFileTransformerModel; +import eu.eudat.file.transformer.models.descriptiontemplate.definition.PageFileTransformerModel; +import eu.eudat.file.transformer.models.descriptiontemplate.definition.SectionFileTransformerModel; +import eu.eudat.file.transformer.models.descriptiontemplate.definition.fielddata.*; +import eu.eudat.file.transformer.models.dmp.DmpFileTransformerModel; +import eu.eudat.file.transformer.models.dmp.DmpReferenceFileTransformerModel; +import eu.eudat.file.transformer.models.reference.ReferenceFileTransformerModel; import eu.eudat.file.transformer.utils.interfaces.ApplierWithValue; import eu.eudat.file.transformer.utils.pid.PidLoader; import eu.eudat.file.transformer.utils.types.ParagraphStyle; @@ -269,7 +270,7 @@ public class WordBuilder { }); } - public XWPFDocument build(XWPFDocument document, PagedDatasetProfile pagedDatasetProfile, VisibilityRuleService visibilityRuleService) throws IOException { + public XWPFDocument build(XWPFDocument document, DescriptionTemplateFileTransformerModel descriptionTemplate) throws IOException { // createPages(pagedDatasetProfile.getPages(), document, true, visibilityRuleService); // XWPFNumbering numbering = document.createNumbering(); // BigInteger tempNumId = BigInteger.ONE; @@ -284,50 +285,47 @@ public class WordBuilder { // BigInteger abstractNumID = numbering.addAbstractNum(abstractNum); // this.numId = numbering.addNum(abstractNumID); - createPages(pagedDatasetProfile.getPages(), document, false, visibilityRuleService); + createPages(descriptionTemplate.getDefinition().getPages(), document, false); return document; } - private void createPages(List datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing, VisibilityRuleService visibilityRuleService) { + private void createPages(List datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing) { datasetProfilePages.forEach(item -> { try { - createSections(item.getSections(), mainDocumentPart, ParagraphStyle.HEADER5, 0, createListing, visibilityRuleService, item.getOrdinal() + 1, null); + createSections(item.getSections(), mainDocumentPart, ParagraphStyle.HEADER5, 0, createListing, item.getOrdinal() + 1, null); } catch (Exception e) { logger.error(e.getMessage(), e); } }); } - private void createSections(List
sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, Integer page, String sectionString) { + private void createSections(List sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, Integer page, String sectionString) { if (createListing) this.addListing(mainDocumentPart, indent, false, true); boolean hasValue = false; - for (Section section: sections) { + for (SectionFileTransformerModel section: sections) { int paragraphPos = -1; String tempSectionString = sectionString != null ? sectionString + "." + (section.getOrdinal() + 1) : "" + (section.getOrdinal() + 1); - if (visibilityRuleService.isElementVisible(section.getId())) { - if (!createListing) { - XWPFParagraph paragraph = addParagraphContent(page + "." + tempSectionString + " " + section.getTitle(), mainDocumentPart, style, numId, indent); + if (!createListing) { + XWPFParagraph paragraph = addParagraphContent(page + "." + tempSectionString + " " + section.getTitle(), mainDocumentPart, style, numId, indent); // CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); // number.setVal(BigInteger.valueOf(indent)); - paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); - } - createSections(section.getSections(), mainDocumentPart, ParagraphStyle.HEADER5, indent+1, createListing, visibilityRuleService, page, tempSectionString); - hasValue = createCompositeFields(section.getCompositeFields(), mainDocumentPart, indent+1, createListing, visibilityRuleService, page, tempSectionString); + paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); + } + createSections(section.getSections(), mainDocumentPart, ParagraphStyle.HEADER5, indent + 1, createListing, page, tempSectionString); + hasValue = createCompositeFields(section.getFieldSets(), mainDocumentPart, indent + 1, createListing, page, tempSectionString); - if (!hasValue && paragraphPos > -1) { - mainDocumentPart.removeBodyElement(paragraphPos); - } + if (!hasValue && paragraphPos > -1) { + mainDocumentPart.removeBodyElement(paragraphPos); } } } - private Boolean createCompositeFields(List
compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, Integer page, String section) { + private Boolean createCompositeFields(List compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, Integer page, String section) { if (createListing) this.addListing(mainDocumentPart, indent, true, true); boolean hasValue = false; boolean returnedValue = false; - for (FieldSet compositeField: compositeFields) { - if (visibilityRuleService.isElementVisible(compositeField.getId()) && hasVisibleFields(compositeField, visibilityRuleService)) { + for (FieldSetFileTransformerModel compositeField: compositeFields) { char c = 'a'; int multiplicityItems = 0; boolean hasMultiplicityItems = false; @@ -338,12 +336,13 @@ public class WordBuilder { // CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); // number.setVal(BigInteger.valueOf(indent)); paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); - if(compositeField.getMultiplicity() != null && !compositeField.getMultiplicity().getTableView() && compositeField.getMultiplicityItems() != null && !compositeField.getMultiplicityItems().isEmpty()){ - XWPFParagraph paragraphInner = addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.TEXT, numId, indent); - paragraphPosInner = mainDocumentPart.getPosOfParagraph(paragraphInner); - hasMultiplicityItems = true; - multiplicityItems++; - } + //TODO: dtziotzios implement multiplicity +// if(compositeField.getMultiplicity() != null && !compositeField.getMultiplicity().getTableView() && compositeField.getMultiplicityItems() != null && !compositeField.getMultiplicityItems().isEmpty()){ +// XWPFParagraph paragraphInner = addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.TEXT, numId, indent); +// paragraphPosInner = mainDocumentPart.getPosOfParagraph(paragraphInner); +// hasMultiplicityItems = true; +// multiplicityItems++; +// } } XWPFTable tbl = null; XWPFTableRow row = null; @@ -352,15 +351,15 @@ public class WordBuilder { tbl = mainDocumentPart.createTable(); tbl.setTableAlignment(TableRowAlign.CENTER); mainDocumentPart.createParagraph(); - createHeadersInTable(compositeField.getFields(), tbl, visibilityRuleService); + createHeadersInTable(compositeField.getFields(), tbl); numOfRows = tbl.getRows().size(); row = tbl.createRow(); } if(compositeField.getMultiplicity() != null && compositeField.getMultiplicity().getTableView()) { - hasValue = createFieldsInTable(compositeField.getFields(), row, indent, createListing, visibilityRuleService, hasMultiplicityItems, numOfRows); + hasValue = createFieldsInTable(compositeField.getFields(), row, indent, createListing, hasMultiplicityItems, numOfRows); numOfRows++; } else { - hasValue = createFields(compositeField.getFields(), mainDocumentPart, indent, createListing, visibilityRuleService, hasMultiplicityItems); + hasValue = createFields(compositeField.getFields(), mainDocumentPart, indent, createListing, hasMultiplicityItems); } if(hasValue){ returnedValue = true; @@ -370,44 +369,45 @@ public class WordBuilder { multiplicityItems--; } //TODO: Multiplicity Items??? - if (compositeField.getMultiplicityItems() != null && !compositeField.getMultiplicityItems().isEmpty()) { - List
list = compositeField.getMultiplicityItems().stream().sorted(Comparator.comparingInt(FieldSet::getOrdinal)).collect(Collectors.toList()); - for (FieldSet multiplicityFieldset : list) { - paragraphPosInner = -1; - if(!compositeField.getMultiplicity().getTableView() && !createListing){ - c++; -// addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.HEADER6, numId); - XWPFParagraph paragraphInner = addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.TEXT, numId, indent); - paragraphPosInner = mainDocumentPart.getPosOfParagraph(paragraphInner); - hasMultiplicityItems = true; - multiplicityItems++; - } -// hasValue = createFields(multiplicityFieldset.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService, hasMultiplicityItems); - boolean hasValueInner = false; - if(compositeField.getMultiplicity().getTableView()) { - row = tbl.createRow(); - hasValueInner = createFieldsInTable(multiplicityFieldset.getFields(), row, indent, createListing, visibilityRuleService, hasMultiplicityItems, numOfRows); - numOfRows++; - } else { - hasValueInner = createFields(multiplicityFieldset.getFields(), mainDocumentPart, indent, createListing, visibilityRuleService, hasMultiplicityItems); - } -// if(hasValue){ - if(hasValueInner){ - hasValue = true; - returnedValue = true; - } else if(paragraphPosInner > -1){ - mainDocumentPart.removeBodyElement(paragraphPosInner); - c--; - multiplicityItems--; - } - } - if(multiplicityItems == 1) { - String text = mainDocumentPart.getLastParagraph().getRuns().get(0).getText(0); - if(text.equals("a. ")) { - mainDocumentPart.getLastParagraph().removeRun(0); - } - } - } + //TODO: dtziotzios implement multiplicity +// if (compositeField.getMultiplicityItems() != null && !compositeField.getMultiplicityItems().isEmpty()) { +// List list = compositeField.getMultiplicityItems().stream().sorted(Comparator.comparingInt(FieldSetFileTransformerModel::getOrdinal)).collect(Collectors.toList()); +// for (FieldSetFileTransformerModel multiplicityFieldset : list) { +// paragraphPosInner = -1; +// if(!compositeField.getMultiplicity().getTableView() && !createListing){ +// c++; +//// addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.HEADER6, numId); +// XWPFParagraph paragraphInner = addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.TEXT, numId, indent); +// paragraphPosInner = mainDocumentPart.getPosOfParagraph(paragraphInner); +// hasMultiplicityItems = true; +// multiplicityItems++; +// } +//// hasValue = createFields(multiplicityFieldset.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService, hasMultiplicityItems); +// boolean hasValueInner = false; +// if(compositeField.getMultiplicity().getTableView()) { +// row = tbl.createRow(); +// hasValueInner = createFieldsInTable(multiplicityFieldset.getFields(), row, indent, createListing, visibilityRuleService, hasMultiplicityItems, numOfRows); +// numOfRows++; +// } else { +// hasValueInner = createFields(multiplicityFieldset.getFields(), mainDocumentPart, indent, createListing, visibilityRuleService, hasMultiplicityItems); +// } +//// if(hasValue){ +// if(hasValueInner){ +// hasValue = true; +// returnedValue = true; +// } else if(paragraphPosInner > -1){ +// mainDocumentPart.removeBodyElement(paragraphPosInner); +// c--; +// multiplicityItems--; +// } +// } +// if(multiplicityItems == 1) { +// String text = mainDocumentPart.getLastParagraph().getRuns().get(0).getText(0); +// if(text.equals("a. ")) { +// mainDocumentPart.getLastParagraph().removeRun(0); +// } +// } +// } //TODO: Dataset Profile // if (hasValue && compositeField.getHasCommentField() && compositeField.getCommentFieldValue() != null && !compositeField.getCommentFieldValue().isEmpty() && !createListing) { // XWPFParagraph paragraph = addParagraphContent("Comment:\n"+compositeField.getCommentFieldValue(), mainDocumentPart, ParagraphStyle.HTML, numId, indent); @@ -417,28 +417,27 @@ public class WordBuilder { if (!hasValue && paragraphPos > -1) { mainDocumentPart.removeBodyElement(paragraphPos); } - } } return returnedValue; } - private void createHeadersInTable(List fields, XWPFTable table, VisibilityRuleService visibilityRuleService) { + private void createHeadersInTable(List fields, XWPFTable table) { boolean atLeastOneHeader = false; - List tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList()); + List tempFields = fields.stream().sorted(Comparator.comparingInt(FieldFileTransformerModel::getOrdinal)).collect(Collectors.toList()); int index = 0; XWPFTableRow row = table.getRow(0); - for (Field field: tempFields) { - if (visibilityRuleService.isElementVisible(field.getId()) && field.getExport()) { + for (FieldFileTransformerModel field: tempFields) { + if (field.getIncludeInExport()) { XWPFTableCell cell; - if(index == 0) { + if (index == 0) { cell = row.getCell(0); } else { cell = row.createCell(); } cell.setVerticalAlignment(XWPFTableCell.XWPFVertAlign.valueOf("CENTER")); - String label = ((BaseFieldDataEntity) field.getData()).getLabel(); - if(label != null && label != "") { + String label = ((BaseFieldDataFileTransformerModel) field.getData()).getLabel(); + if (label != null && label != "") { XWPFParagraph paragraph = cell.getParagraphs().get(0); paragraph.setIndentationFirstLine(50); XWPFRun run = paragraph.createRun(); @@ -459,17 +458,17 @@ public class WordBuilder { } } - private Boolean createFieldsInTable(List fields, XWPFTableRow mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, boolean hasMultiplicityItems, int numOfRows) { + private Boolean createFieldsInTable(List fields, XWPFTableRow mainDocumentPart, Integer indent, Boolean createListing, boolean hasMultiplicityItems, int numOfRows) { int numOfCells = 0; boolean hasValue = false; - List tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList()); - for (Field field: tempFields) { - if (visibilityRuleService.isElementVisible(field.getId()) && field.getExport()) { + List tempFields = fields.stream().sorted(Comparator.comparingInt(FieldFileTransformerModel::getOrdinal)).collect(Collectors.toList()); + for (FieldFileTransformerModel field: tempFields) { + if (field.getIncludeInExport()) { if (!createListing) { try { - if(((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.UPLOAD)){ + if(((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.UPLOAD)){ boolean isImage = false; - for(UploadDataEntity.Option type: ((UploadDataEntity)field.getData()).getTypes()){ + for(UploadOptionFileTransformerModel type: ((UploadDataFileTransformerModel)field.getData()).getTypes()){ String fileFormat = type.getValue(); if(IMAGE_TYPE_MAP.containsKey(fileFormat)){ isImage = true; @@ -477,8 +476,8 @@ public class WordBuilder { } } if(isImage){ - if (field.getValue() != null && !field.getValue().toString().isEmpty()) { - XWPFParagraph paragraph = addCellContent(mapper.convertValue(field.getValue(), Map.class), mainDocumentPart, ParagraphStyle.IMAGE, numId, 0, numOfRows, numOfCells, 0); + if (field.getData().getValue() != null && !field.getData().getValue().toString().isEmpty()) { + XWPFParagraph paragraph = addCellContent(mapper.convertValue(field.getData().getValue(), Map.class), mainDocumentPart, ParagraphStyle.IMAGE, numId, 0, numOfRows, numOfCells, 0); if (paragraph != null) { hasValue = true; } @@ -488,15 +487,15 @@ public class WordBuilder { } } } - else if (field.getValue() != null && !field.getValue().toString().isEmpty()) { + else if (field.getData().getValue() != null && !field.getData().getValue().toString().isEmpty()) { this.indent = indent; String format = this.formatter(field); - if (((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.TAGS)) { + if (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.TAGS)) { format = getCommaSeparatedFormatsFromJson(format, "name"); - } else if (((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.COMBO_BOX) && field.getData() instanceof AutoCompleteDataEntity) { + } else if (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.AUTO_COMPLETE)) { format = getCommaSeparatedFormatsFromJson(format, "label"); } - boolean isResearcher = ((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.RESEARCHERS); + boolean isResearcher = ((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.RESEARCHERS); if(format != null && !format.isEmpty()){ Object hasMultiAutoComplete = mapper.convertValue(field.getData(), Map.class).get("multiAutoComplete"); boolean isMultiAutoComplete = hasMultiAutoComplete != null && (boolean)hasMultiAutoComplete; @@ -528,7 +527,7 @@ public class WordBuilder { hasMultiplicityItems = false; } else{ - XWPFParagraph paragraph = addCellContent(format, mainDocumentPart, ((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent, numOfRows, numOfCells, numOfValuesInCell); + XWPFParagraph paragraph = addCellContent(format, mainDocumentPart, ((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent, numOfRows, numOfCells, numOfValuesInCell); numOfValuesInCell++; if(orcidResearcher){ XWPFHyperlinkRun run = paragraph.createHyperlinkRun("https://orcid.org/" + orcId); @@ -556,7 +555,7 @@ public class WordBuilder { hasValue = true; } else{ - XWPFParagraph paragraph = addCellContent(format, mainDocumentPart, ((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent, numOfRows, numOfCells, 0); + XWPFParagraph paragraph = addCellContent(format, mainDocumentPart, ((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent, numOfRows, numOfCells, 0); if (paragraph != null) { hasValue = true; } @@ -603,17 +602,17 @@ public class WordBuilder { } } - private Boolean createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, boolean hasMultiplicityItems) { + private Boolean createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, boolean hasMultiplicityItems) { if (createListing) this.addListing(mainDocumentPart, indent, false, false); boolean hasValue = false; - List tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList()); - for (Field field: tempFields) { - if (visibilityRuleService.isElementVisible(field.getId()) && field.getExport()) { + List tempFields = fields.stream().sorted(Comparator.comparingInt(FieldFileTransformerModel::getOrdinal)).collect(Collectors.toList()); + for (FieldFileTransformerModel field: tempFields) { + if (field.getIncludeInExport()) { if (!createListing) { try { - if(((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.UPLOAD)){ + if(((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.UPLOAD)){ boolean isImage = false; - for(UploadDataEntity.Option type: ((UploadDataEntity)field.getData()).getTypes()){ + for(UploadOptionFileTransformerModel type: ((UploadDataFileTransformerModel)field.getData()).getTypes()){ String fileFormat = type.getValue(); if(IMAGE_TYPE_MAP.containsKey(fileFormat)){ isImage = true; @@ -621,8 +620,8 @@ public class WordBuilder { } } if(isImage){ - if (field.getValue() != null && !field.getValue().toString().isEmpty()) { - XWPFParagraph paragraph = addParagraphContent(mapper.convertValue(field.getValue(), Map.class), mainDocumentPart, ParagraphStyle.IMAGE, numId, 0); + 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) { // CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); // number.setVal(BigInteger.valueOf(indent)); @@ -634,15 +633,15 @@ public class WordBuilder { } } } - else if (field.getValue() != null && !field.getValue().toString().isEmpty()) { + else if (field.getData().getValue() != null && !field.getData().getValue().toString().isEmpty()) { this.indent = indent; String format = this.formatter(field); - if (((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.TAGS)) { + if (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.TAGS)) { format = getCommaSeparatedFormatsFromJson(format, "name"); - } else if (((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.COMBO_BOX) && field.getData() instanceof AutoCompleteDataEntity) { + } else if (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.AUTO_COMPLETE)) { format = getCommaSeparatedFormatsFromJson(format, "label"); } - switch (((BaseFieldDataEntity) field.getData()).getFieldType()) { + switch (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType()) { case ORGANIZATIONS: case EXTERNAL_DATASETS: case PUBLICATIONS: @@ -650,7 +649,7 @@ public class WordBuilder { Object hasMultiAutoComplete = mapper.convertValue(field.getData(), Map.class).get("multiAutoComplete"); boolean isMultiAutoComplete = hasMultiAutoComplete != null && (boolean)hasMultiAutoComplete; if(!isMultiAutoComplete){ - Map value = mapper.readValue((String)field.getValue(), Map.class); + 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; @@ -663,11 +662,11 @@ public class WordBuilder { mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); List> values = new ArrayList<>(); try { - values = Arrays.asList(mapper.readValue(field.getValue().toString(), HashMap[].class)); + values = Arrays.asList(mapper.readValue(field.getData().getValue().toString(), HashMap[].class)); } catch (Exception e) { Map map = new HashMap<>(); - map.put("label", field.getValue()); + map.put("label", field.getData().getValue()); values.add(map); } if (values.size() > 1) { @@ -695,7 +694,7 @@ public class WordBuilder { } break; default: - boolean isResearcher = ((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.RESEARCHERS); + boolean isResearcher = ((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.RESEARCHERS); if(format != null && !format.isEmpty()){ Object hasMultiAutoComplete = mapper.convertValue(field.getData(), Map.class).get("multiAutoComplete"); boolean isMultiAutoComplete = hasMultiAutoComplete != null && (boolean)hasMultiAutoComplete; @@ -725,7 +724,7 @@ public class WordBuilder { hasMultiplicityItems = false; } else{ - XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, ((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent); + XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, ((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent); if(orcidResearcher){ XWPFHyperlinkRun run = paragraph.createHyperlinkRun("https://orcid.org/" + orcId); run.setText(orcId); @@ -754,7 +753,7 @@ public class WordBuilder { hasValue = true; } else { - XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, ((BaseFieldDataEntity) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent); + XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, ((BaseFieldDataFileTransformerModel) field.getData()).getFieldType().equals(FieldType.RICH_TEXT_AREA) ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId, indent); if (paragraph != null) { // CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); // number.setVal(BigInteger.valueOf(indent)); @@ -865,12 +864,11 @@ public class WordBuilder { } } - private String formatter(Field field) throws IOException { - FieldDataComboBoxType comboboxType = null; - if (field.getValue() == null) { + private String formatter(FieldFileTransformerModel field) throws IOException { + if (field.getData().getValue() == null) { return null; } - switch (((BaseFieldDataEntity) field.getData()).getFieldType()) { + switch (((BaseFieldDataFileTransformerModel) field.getData()).getFieldType()) { case RESEARCHERS: // case "projects": //TODO: Description Templatedefinition case ORGANIZATIONS: @@ -885,91 +883,86 @@ public class WordBuilder { case SERVICES: case TAGS: case CURRENCY: - comboboxType = FieldDataComboBoxType.Autocomplete; - case COMBO_BOX: { - if (comboboxType == null) { - comboboxType = ((ComboBoxDataEntity) field.getData()).getFieldSubType(); + case AUTO_COMPLETE: { + mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); + if (field.getData().getValue() == null) return null; + List> mapList = new ArrayList<>(); + if (!field.getData().getValue().equals("") && field.getData().getValue().toString() != null) { + try { + mapList = Arrays.asList(mapper.readValue(field.getData().getValue().toString(), HashMap[].class)); + } catch (Exception e) { + // logger.warn(e.getMessage(), e); + // logger.info("Moving to fallback parsing"); + Map map = new HashMap<>(); + map.put("label", field.getData().getValue().toString()); + mapList.add(map); + } } - if (comboboxType.equals(FieldDataComboBoxType.Autocomplete)) { - mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); - if (field.getValue() == null) return null; - List> mapList = new ArrayList<>(); - if (!field.getValue().equals("") && field.getValue().toString() != null) { - try { - mapList = Arrays.asList(mapper.readValue(field.getValue().toString(), HashMap[].class)); - }catch (Exception e) { - // logger.warn(e.getMessage(), e); - // logger.info("Moving to fallback parsing"); - Map map = new HashMap<>(); - map.put("label", field.getValue().toString()); - mapList.add(map); + StringBuilder sb = new StringBuilder(); + int index = 0; + for (Map map : mapList) { + for (Map.Entry entry : map.entrySet()) { + if (entry.getValue() != null && (entry.getKey().equals("label") || entry.getKey().equals("description") || entry.getKey().equals("name"))) { + sb.append(entry.getValue()); + break; } } - StringBuilder sb = new StringBuilder(); - int index = 0; - for (Map map: mapList) { - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() != null && (entry.getKey().equals("label") || entry.getKey().equals("description") || entry.getKey().equals("name"))) { - sb.append(entry.getValue()); - break; + if (index != mapList.size() - 1) sb.append(", "); + index++; + } + return sb.toString(); + } + case WORD_LIST: { + WordListDataFileTransformerModel wordListDataEntity = (WordListDataFileTransformerModel) field.getData(); + if (field.getData().getValue() != null) { + ComboBoxOptionFileTransformerModel selectedOption = null; + if (!wordListDataEntity.getOptions().isEmpty()) { + for (ComboBoxOptionFileTransformerModel option : wordListDataEntity.getOptions()) { + if (option.getValue().equals(field.getData().getValue())) { + selectedOption = option; } } - if (index != mapList.size() - 1) sb.append(", "); - index++; } - return sb.toString(); - } else if (comboboxType.equals(FieldDataComboBoxType.Wordlist)) { - WordListDataEntity wordListDataEntity = (WordListDataEntity) field.getData(); - if (field.getValue() != null){ - ComboBoxDataEntity.Option selectedOption = null; - if (!wordListDataEntity.getOptions().isEmpty()) { - for (ComboBoxDataEntity.Option option : wordListDataEntity.getOptions()) { - if (option.getValue().equals(field.getValue())) { - selectedOption = option; - } - } - } - return selectedOption != null ? selectedOption.getLabel() : field.getValue().toString(); - } - return ""; + return selectedOption != null ? selectedOption.getLabel() : field.getData().getValue().toString(); } + return ""; } case BOOLEAN_DECISION: - if (field.getValue() != null && field.getValue().equals("true")) return "Yes"; - if (field.getValue() != null && field.getValue().equals("false")) return "No"; + if (field.getData().getValue() != null && field.getData().getValue().equals("true")) return "Yes"; + if (field.getData().getValue() != null && field.getData().getValue().equals("false")) return "No"; return null; case RADIO_BOX: - return field.getValue() != null ? field.getValue().toString() : null; + return field.getData().getValue() != null ? field.getData().getValue().toString() : null; case CHECK_BOX: - CheckBoxDataEntity data = (CheckBoxDataEntity) field.getData(); - if (field.getValue() == null || field.getValue().equals("false")) return null; + LabelFieldDataFileTransformerModel data = (LabelFieldDataFileTransformerModel) field.getData(); + if (field.getData().getValue() == null || field.getData().getValue().equals("false")) return null; return data.getLabel(); case DATE_PICKER:{ Instant instant; - if (!((String)field.getValue()).isEmpty()) { + if (!((String)field.getData().getValue()).isEmpty()) { try { - instant = Instant.parse((String) field.getValue()); + instant = Instant.parse((String) field.getData().getValue()); } catch (DateTimeParseException ex) { - instant = LocalDate.parse((String) field.getValue()).atStartOfDay().toInstant(ZoneOffset.UTC); + instant = LocalDate.parse((String) field.getData().getValue()).atStartOfDay().toInstant(ZoneOffset.UTC); } - return field.getValue() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.systemDefault()).format(instant) : ""; + return field.getData().getValue() != null ? DateTimeFormatter.ofPattern("yyyy-MM-dd").withZone(ZoneId.systemDefault()).format(instant) : ""; } - return (String) field.getValue(); + return (String) field.getData().getValue(); } case FREE_TEXT: case TEXT_AREA: case RICH_TEXT_AREA: - return field.getValue() != null ? field.getValue().toString(): ""; + return field.getData().getValue() != null ? field.getData().getValue().toString(): ""; case DATASET_IDENTIFIER: case VALIDATION: - if (field.getValue() != null && !field.getValue().toString().isEmpty()) { + if (field.getData().getValue() != null && !field.getData().getValue().toString().isEmpty()) { Map identifierData; try { - identifierData = mapper.readValue(field.getValue().toString(), HashMap.class); + identifierData = mapper.readValue(field.getData().getValue().toString(), HashMap.class); } catch (Exception ex) { // logger.warn(ex.getLocalizedMessage(), ex); // logger.info("Reverting to custom parsing"); - identifierData = customParse(field.getValue().toString()); + identifierData = customParse(field.getData().getValue().toString()); } return "id: " + identifierData.get("identifier") + ", Type: " + identifierData.get("type"); } @@ -978,10 +971,6 @@ public class WordBuilder { return null; } - private boolean hasVisibleFields(FieldSet compositeFields, VisibilityRuleService visibilityRuleService) { - return compositeFields.getFields().stream().anyMatch(field -> visibilityRuleService.isElementVisible(field.getId()) && field.getExport()); - } - private Map customParse(String value) { Map result = new LinkedHashMap<>(); String parsedValue = value.replaceAll("[^a-zA-Z0-9\\s:=,]", ""); @@ -1016,15 +1005,15 @@ public class WordBuilder { int parPos = 0; int descrParPos = -1; XWPFParagraph descrPar = null; - List grants = new ArrayList<>(); - List researchers = new ArrayList<>(); - List organizations = new ArrayList<>(); - List funders = new ArrayList<>(); + List grants = new ArrayList<>(); + List researchers = new ArrayList<>(); + List organizations = new ArrayList<>(); + List funders = new ArrayList<>(); if (dmpEntity.getDmpReferences() != null) { - grants = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Grants) && referenceFileModel.getIsActive().equals(IsActive.Active)).toList(); - researchers = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(reference -> reference.getType().equals(ReferenceType.Researcher)).toList(); - organizations = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Organizations)).toList(); - funders = dmpEntity.getDmpReferences().stream().map(DmpReference::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Funder) && referenceFileModel.getIsActive().equals(IsActive.Active)).toList(); + grants = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Grants)).toList(); + researchers = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(reference -> reference.getType().equals(ReferenceType.Researcher)).toList(); + organizations = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Organizations)).toList(); + funders = dmpEntity.getDmpReferences().stream().map(DmpReferenceFileTransformerModel::getReference).filter(referenceFileModel -> referenceFileModel.getType().equals(ReferenceType.Funder)).toList(); } for(XWPFParagraph p: document.getParagraphs()){ List runs = p.getRuns(); @@ -1055,7 +1044,7 @@ public class WordBuilder { } else if(text.equals("{ARGOS.DMP.RESEARCHERS}")) { String researchersNames = ""; int i = 0; - for(Reference researcher : researchers){ + for(ReferenceFileTransformerModel researcher : researchers){ i++; researchersNames += researcher.getLabel() + (i < researchers.size() ? ", " : ""); } @@ -1065,7 +1054,7 @@ public class WordBuilder { } else if(text.equals("{ARGOS.DMP.ORGANIZATIONS}")) { String organisationsNames = ""; int i = 0; - for(Reference organisation : organizations){ + for(ReferenceFileTransformerModel organisation : organizations){ i++; organisationsNames += organisation.getLabel() + (i < organizations.size() ? ", " : ""); } diff --git a/web/src/main/java/eu/eudat/file/transformer/controller/FileTransformerController.java b/web/src/main/java/eu/eudat/file/transformer/controller/FileTransformerController.java index f5c87d7..ecbcc3f 100644 --- a/web/src/main/java/eu/eudat/file/transformer/controller/FileTransformerController.java +++ b/web/src/main/java/eu/eudat/file/transformer/controller/FileTransformerController.java @@ -1,11 +1,10 @@ package eu.eudat.file.transformer.controller; import eu.eudat.file.transformer.executor.FileTransformerExecutor; -import eu.eudat.file.transformer.model.DescriptionFileTransformerModel; -import eu.eudat.file.transformer.model.DmpFileTransformerModel; -import eu.eudat.file.transformer.model.ExtraPropertiesModel; -import eu.eudat.file.transformer.model.file.FileEnvelope; -import eu.eudat.file.transformer.model.file.FileFormat; +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.model.file.FileVariant; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; @@ -47,7 +46,7 @@ public class FileTransformerController { } @GetMapping("/formats") - public List getSupportedFormats() { + public List getSupportedFormats() { return fileTransformerExecutor.getSupportedFileFormats(); } }