From 519e15bc8978eae304343455a7b8c168eba89251 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Fri, 22 Mar 2024 18:32:14 +0200 Subject: [PATCH] builder changes --- .../WordFileTransformerService.java | 151 +++---- .../word/WordBuilderImpl.java | 384 ++++++++++++------ pom.xml | 2 +- web/src/main/resources/documents/h2020.docx | Bin 30266 -> 30872 bytes .../resources/documents/h2020_dataset.docx | Bin 20315 -> 28298 bytes 5 files changed, 314 insertions(+), 223 deletions(-) diff --git a/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/WordFileTransformerService.java b/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/WordFileTransformerService.java index 96fd7f2..046d650 100644 --- a/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/WordFileTransformerService.java +++ b/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/WordFileTransformerService.java @@ -2,6 +2,7 @@ package eu.eudat.file.transformer.service.wordfiletransformer; import eu.eudat.commonmodels.enums.DescriptionStatus; import eu.eudat.commonmodels.enums.DmpAccessType; +import eu.eudat.commonmodels.enums.DmpBlueprintSystemFieldType; import eu.eudat.commonmodels.enums.DmpStatus; import eu.eudat.commonmodels.models.dmp.DmpBlueprintValueModel; import eu.eudat.commonmodels.models.dmp.DmpModel; @@ -189,24 +190,8 @@ public class WordFileTransformerService implements FileTransformerClient { } private void buildDmpSection(DmpModel dmpEntity, SectionModel sectionModel, XWPFDocument document) throws InvalidApplicationException { - this.wordBuilder.addParagraphContent("Section " + sectionModel.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(sectionModel.getLabel()); - runSectionTitleText.setColor("116a78"); - XWPFParagraph sectionDescriptionParagraph = document.createParagraph(); - XWPFRun runSectionDescription = sectionDescriptionParagraph.createRun(); - runSectionDescription.setText("Description: "); - runSectionDescription.setColor("000000"); - XWPFRun runSectionDescriptionText = sectionDescriptionParagraph.createRun(); - runSectionDescriptionText.setText(sectionModel.getDescription()); - runSectionDescriptionText.setColor("116a78"); + this.wordBuilder.addParagraphContent(sectionModel.getOrdinal() + ". " + sectionModel.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO, 0); - this.wordBuilder.addParagraphContent("Section Fields", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0); if (sectionModel.getFields() != null) { sectionModel.getFields().sort(Comparator.comparingInt(FieldModel::getOrdinal)); for (FieldModel fieldModel : sectionModel.getFields()) { @@ -235,14 +220,13 @@ public class WordFileTransformerService implements FileTransformerClient { List descriptionTemplateModels = descriptions.stream().map(DescriptionModel::getDescriptionTemplate).toList(); if (descriptionTemplateModels.isEmpty()) return; - this.wordBuilder.addParagraphContent("Section descriptions", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0); - this.wordBuilder.addParagraphContent("Description Templates", document, ParagraphStyle.HEADER4, BigInteger.ZERO, 0); - for (DescriptionTemplateModel descriptionTemplateModelEntity : descriptionTemplateModels) { - XWPFParagraph templateParagraph = document.createParagraph(); - XWPFRun runTemplateLabel = templateParagraph.createRun(); - runTemplateLabel.setText("• " + descriptionTemplateModelEntity.getLabel()); - runTemplateLabel.setColor("116a78"); - } + wordBuilder.addParagraphContent("Descriptions", document, ParagraphStyle.HEADER2, BigInteger.ZERO, 0); +// for (DescriptionTemplateModel descriptionTemplateModelEntity : descriptionTemplateModels) { +// XWPFParagraph templateParagraph = document.createParagraph(); +// XWPFRun runTemplateLabel = templateParagraph.createRun(); +// runTemplateLabel.setText("• " + descriptionTemplateModelEntity.getLabel()); +// runTemplateLabel.setColor("116a78"); +// } for (DescriptionModel descriptionModel : descriptions){ buildSectionDescription(document, descriptionModel); @@ -260,40 +244,32 @@ public class WordFileTransformerService implements FileTransformerClient { datasetDescriptionParagraph.setStyle("Heading4"); datasetDescriptionParagraph.setSpacingBetween(1.5); XWPFRun datasetDescriptionRun = datasetDescriptionParagraph.createRun(); - datasetDescriptionRun.setText("Dataset Description"); + datasetDescriptionRun.setText(descriptionModel.getLabel()); datasetDescriptionRun.setFontSize(15); + XWPFParagraph descriptionParagraph = document.createParagraph(); + wordBuilder.addParagraphContent(descriptionModel.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0); - // Custom style for the Dataset title. - XWPFParagraph datasetLabelParagraph = document.createParagraph(); - datasetLabelParagraph.setSpacingBetween(1.0); - XWPFRun runDatasetTitle1 = datasetLabelParagraph.createRun(); - runDatasetTitle1.setText("Title: "); - runDatasetTitle1.setColor("000000"); - XWPFRun runDatasetTitle = datasetLabelParagraph.createRun(); - runDatasetTitle.setText(descriptionModel.getLabel()); - runDatasetTitle.setColor("116a78"); XWPFParagraph datasetTemplateParagraph = document.createParagraph(); XWPFRun runDatasetTemplate1 = datasetTemplateParagraph.createRun(); runDatasetTemplate1.setText("Template: "); runDatasetTemplate1.setColor("000000"); - XWPFRun runDatasetTemplate = datasetTemplateParagraph.createRun(); runDatasetTemplate.setText(descriptionTemplateModelFileModel != null ? descriptionTemplateModelFileModel.getLabel() : ""); runDatasetTemplate.setColor("116a78"); + XWPFParagraph datasetDescParagraph = document.createParagraph(); XWPFRun runDatasetDescription1 = datasetDescParagraph.createRun(); - runDatasetDescription1.setText("Description: "); + runDatasetDescription1.setText("Type: "); runDatasetDescription1.setColor("000000"); XWPFRun runDatasetDescription = datasetDescParagraph.createRun(); - runDatasetDescription.setText(descriptionTemplateModelFileModel != null ? descriptionTemplateModelFileModel.getLabel() : ""); + //runDatasetDescription.setText(descriptionTemplateModelFileModel != null && descriptionTemplateModelFileModel.getType() != null ? descriptionTemplateModelFileModel.getType().getName() : ""); //TODO runDatasetDescription.setColor("116a78"); document.createParagraph(); - try { this.wordBuilder.build(document, descriptionModel.getDescriptionTemplate(), descriptionModel.getProperties(), new VisibilityServiceImpl(descriptionModel.getVisibilityStates())); } catch (IOException e) { @@ -314,7 +290,6 @@ public class WordFileTransformerService implements FileTransformerClient { } case Extra -> buildDmpSectionExtraField(dmpEntity, document, (ExtraFieldModel) fieldModel); case ReferenceType -> { - buildDmpSectionFieldTitleDescription(document, fieldModel); buildDmpSectionReferenceTypeField(dmpEntity, document, (ReferenceTypeFieldModel) fieldModel); } default -> throw new InvalidApplicationException("Invalid type " + fieldModel.getCategory()); @@ -327,78 +302,59 @@ public class WordFileTransformerService implements FileTransformerClient { if (document == null) throw new IllegalArgumentException("Document required"); if (referenceField.getReferenceType() == null) throw new IllegalArgumentException("ReferenceField type required"); if (referenceField.getReferenceType().getCode() == null && !referenceField.getReferenceType().getCode().isBlank()) throw new IllegalArgumentException("ReferenceField type code required"); - - XWPFParagraph systemFieldInput = document.createParagraph(); - systemFieldInput.setSpacingBetween(1.0); - XWPFRun runInput = systemFieldInput.createRun(); - runInput.setText("Input: "); - runInput.setColor("000000"); + + XWPFParagraph systemFieldParagraph = document.createParagraph(); + XWPFRun runSyStemFieldTitle = systemFieldParagraph.createRun(); + runSyStemFieldTitle.setText(referenceField.getLabel() + ": "); + runSyStemFieldTitle.setColor("000000"); + List referenceModels = this.getReferenceModelOfTypeCode(dmpEntity, referenceField.getReferenceType().getCode(), referenceField.getId()); for (ReferenceModel reference : referenceModels) { - XWPFRun runResearcher = systemFieldInput.createRun(); - runResearcher.setText("• " + reference.getLabel()); + XWPFRun runResearcher = systemFieldParagraph.createRun(); + if (this.wordFileTransformerServiceProperties.getResearcherReferenceCode().equalsIgnoreCase(referenceField.getReferenceType().getCode()) || + this.wordFileTransformerServiceProperties.getOrganizationReferenceCode().equalsIgnoreCase(referenceField.getReferenceType().getCode()) + ) runResearcher.addBreak(); + if (this.wordFileTransformerServiceProperties.getLicenceReferenceCode().equalsIgnoreCase(referenceField.getReferenceType().getCode())) runResearcher.setText(reference.getReference()); + else runResearcher.setText(reference.getLabel()); runResearcher.setColor("116a78"); } document.createParagraph(); } - - private void buildDmpSectionFieldTitleDescription(XWPFDocument document, FieldModel fieldModel){ - if (fieldModel == null) throw new IllegalArgumentException("FieldModel required"); - if (document == null) throw new IllegalArgumentException("Document required"); - XWPFParagraph systemFieldParagraph = document.createParagraph(); - systemFieldParagraph.setSpacingBetween(1.0); - XWPFRun runSyStemFieldTitle = systemFieldParagraph.createRun(); - runSyStemFieldTitle.setText("Title: "); - runSyStemFieldTitle.setColor("000000"); - XWPFRun runSystemFieldTitleText = systemFieldParagraph.createRun(); - runSystemFieldTitleText.setText(fieldModel.getLabel()); - runSystemFieldTitleText.setColor("116a78"); - if (fieldModel.getDescription() != null && !fieldModel.getDescription().isEmpty()) { - XWPFParagraph systemFieldDescription = document.createParagraph(); - systemFieldDescription.setSpacingBetween(1.0); - XWPFRun runSyStemFieldDescription = systemFieldDescription.createRun(); - runSyStemFieldDescription.setText("Description: "); - runSyStemFieldDescription.setColor("000000"); - XWPFRun runSystemFieldDescriptionText = systemFieldDescription.createRun(); - runSystemFieldDescriptionText.setText(fieldModel.getDescription()); - runSystemFieldDescriptionText.setColor("116a78"); - } - } private void buildDmpSectionSystemField(DmpModel dmpEntity, XWPFDocument document, SystemFieldModel systemField) throws InvalidApplicationException { if (systemField == null) throw new IllegalArgumentException("SystemField required"); if (dmpEntity == null) throw new IllegalArgumentException("DmpEntity required"); if (document == null) throw new IllegalArgumentException("Document required"); + + if (DmpBlueprintSystemFieldType.Language.equals(systemField.getSystemFieldType())) return; + + + XWPFParagraph systemFieldParagraph = document.createParagraph(); + XWPFRun runSyStemFieldTitle = systemFieldParagraph.createRun(); + runSyStemFieldTitle.setText(systemField.getLabel() + ": "); + runSyStemFieldTitle.setColor("000000"); - XWPFParagraph systemFieldInput = document.createParagraph(); - systemFieldInput.setSpacingBetween(1.0); - XWPFRun runInput = systemFieldInput.createRun(); - runInput.setText("Input: "); - runInput.setColor("000000"); switch (systemField.getSystemFieldType()) { case Title: - XWPFRun runTitle = systemFieldInput.createRun(); + XWPFRun runTitle = systemFieldParagraph.createRun(); runTitle.setText(dmpEntity.getLabel()); runTitle.setColor("116a78"); break; case Description: - XWPFRun runDescription = systemFieldInput.createRun(); - runDescription.setText(dmpEntity.getDescription()); - runDescription.setColor("116a78"); + wordBuilder.addParagraphContent(dmpEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0); break; case AccessRights: if (dmpEntity.getAccessType() != null) { - XWPFRun runAccessRights = systemFieldInput.createRun(); + XWPFRun runAccessRights = systemFieldParagraph.createRun(); runAccessRights.setText(dmpEntity.getAccessType().equals(DmpAccessType.Public) ? "Public" : "Restricted"); //TODO - //runAccessRights.setText(dmpProperties.get("visible").toString()); runAccessRights.setColor("116a78"); } break; case Contact: if (dmpEntity.getCreator() != null) { - XWPFRun runContact = systemFieldInput.createRun(); - runContact.setText(dmpEntity.getCreator().getName()); + XWPFRun runContact = systemFieldParagraph.createRun(); + runContact.setText(dmpEntity.getCreator() == null ? "" : dmpEntity.getCreator().getName()); runContact.setColor("116a78"); } break; @@ -411,24 +367,31 @@ public class WordFileTransformerService implements FileTransformerClient { document.createParagraph(); } - private void buildDmpSectionExtraField(DmpModel dmpEntity, XWPFDocument document, ExtraFieldModel extraFieldModel) { + private void buildDmpSectionExtraField(DmpModel dmpEntity, XWPFDocument document, ExtraFieldModel extraFieldModel) throws InvalidApplicationException { if (extraFieldModel == null) throw new IllegalArgumentException("ExtraFieldModel required"); XWPFParagraph extraFieldParagraph = document.createParagraph(); extraFieldParagraph.setSpacingBetween(1.0); XWPFRun runExtraFieldLabel = extraFieldParagraph.createRun(); - runExtraFieldLabel.setText(extraFieldModel.getLabel()); - runExtraFieldLabel.setColor("116a78"); - if (extraFieldModel.getDescription() != null && !extraFieldModel.getDescription().isEmpty()) { - XWPFRun runExtraFieldDescription = extraFieldParagraph.createRun(); - runExtraFieldDescription.setText(extraFieldModel.getDescription()); - runExtraFieldDescription.setColor("116a78"); - } + runExtraFieldLabel.setText(extraFieldModel.getLabel() + ": "); + runExtraFieldLabel.setColor("000000"); + XWPFRun runExtraFieldInput = extraFieldParagraph.createRun(); DmpBlueprintValueModel dmpBlueprintValueModel = dmpEntity.getProperties() != null && dmpEntity.getProperties().getDmpBlueprintValues() != null ? dmpEntity.getProperties().getDmpBlueprintValues().stream().filter(x -> extraFieldModel.getId().equals(x.getFieldId())).findFirst().orElse(null) : null; if (dmpBlueprintValueModel != null && dmpBlueprintValueModel.getValue() != null) { - runExtraFieldInput.setText(dmpBlueprintValueModel.getValue()); + switch (extraFieldModel.getDataType()) { + case RichTex: + wordBuilder.addParagraphContent(dmpBlueprintValueModel.getValue(), document, ParagraphStyle.HTML, BigInteger.ZERO, 0); + break; + case Number: + case Text: + case Date: + runExtraFieldInput.setText(dmpBlueprintValueModel.getValue()); + runExtraFieldInput.setColor("116a78"); + break; + default: + throw new InvalidApplicationException("Invalid type " + extraFieldModel.getDataType()); + } } - runExtraFieldInput.setColor("116a78"); } private String getDmpFileName(DmpModel dmpModel, String extension){ diff --git a/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/word/WordBuilderImpl.java b/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/word/WordBuilderImpl.java index c51bf69..ceb5e2b 100644 --- a/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/word/WordBuilderImpl.java +++ b/core/src/main/java/eu/eudat/file/transformer/service/wordfiletransformer/word/WordBuilderImpl.java @@ -22,12 +22,11 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.util.Units; import org.apache.poi.xwpf.usermodel.*; import org.apache.xmlbeans.XmlCursor; +import org.apache.xmlbeans.XmlObject; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.NodeTraversor; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTAbstractNum; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTLvl; -import org.openxmlformats.schemas.wordprocessingml.x2006.main.STNumberFormat; +import org.openxmlformats.schemas.wordprocessingml.x2006.main.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.config.ConfigurableBeanFactory; @@ -45,6 +44,7 @@ import java.math.BigInteger; import java.time.ZoneId; import java.time.format.DateTimeFormatter; import java.util.*; +import java.util.stream.Collectors; import static org.apache.poi.xwpf.usermodel.Document.*; @@ -301,82 +301,103 @@ public class WordBuilderImpl implements WordBuilder { } } } + - private Boolean createFieldSetFields(List fieldSetModels, PropertyDefinitionModel propertyDefinitionModel, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, Integer page, String section, VisibilityService visibilityService) { - if (createListing) this.addListing(indent, true, true); + private Boolean createFieldSetFields(List fieldSetModels, PropertyDefinitionModel propertyDefinitionModel,XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, Integer page, String section, VisibilityService visibilityService) { + if (createListing) this.addListing(indent,true, true); boolean hasValue = false; boolean returnedValue = false; - for (FieldSetModel fieldSetModel : fieldSetModels) { - if(!visibilityService.isVisible(fieldSetModel.getId(), fieldSetModel.getOrdinal())) continue; - + for (FieldSetModel fieldSetModel: fieldSetModels) { PropertyDefinitionFieldSetModel propertyDefinitionFieldSetModel = propertyDefinitionModel.getFieldSets().getOrDefault(fieldSetModel.getId(), null); List propertyDefinitionFieldSetItemModels = propertyDefinitionFieldSetModel != null && propertyDefinitionFieldSetModel.getItems() != null ? propertyDefinitionFieldSetModel.getItems() : new ArrayList<>(); propertyDefinitionFieldSetItemModels = propertyDefinitionFieldSetItemModels.stream().sorted(Comparator.comparingInt(PropertyDefinitionFieldSetItemModel::getOrdinal)).toList(); + if (propertyDefinitionFieldSetItemModels.stream().anyMatch(x-> visibilityService.isVisible(fieldSetModel.getId(), x.getOrdinal())) ) { - char c = 'a'; - int multiplicityItems = 0; - boolean hasMultiplicityItems = false; - int paragraphPos = -1; - - if (fieldSetModel.getTitle() != null && !fieldSetModel.getTitle().isEmpty() && !createListing) { - XWPFParagraph paragraph = addParagraphContent(page + "." + section + "." + (fieldSetModel.getOrdinal() + 1) + " " + fieldSetModel.getTitle(), mainDocumentPart, ParagraphStyle.HEADER6, numId, indent); - paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); - } - - if (!propertyDefinitionFieldSetItemModels.isEmpty()) { - if (fieldSetModel.getMultiplicity() != null) { - if (fieldSetModel.getMultiplicity().getTableView()) { - XWPFTable tbl = mainDocumentPart.createTable(); - int numOfRows = 0; - - tbl.setTableAlignment(TableRowAlign.CENTER); - mainDocumentPart.createParagraph(); - createHeadersInTable(fieldSetModel.getFields(), tbl, visibilityService); - numOfRows = tbl.getRows().size(); - - for (PropertyDefinitionFieldSetItemModel propertyDefinitionFieldSetItemModel : propertyDefinitionFieldSetItemModels) { - XWPFTableRow row = tbl.createRow(); - hasValue = createFieldsInTable(fieldSetModel, propertyDefinitionFieldSetItemModel, row, indent, createListing, false, numOfRows, visibilityService); - numOfRows++; - if (hasValue) returnedValue = true; + char c = 'a'; + int multiplicityItems = 0; + boolean hasMultiplicityItems = false; + int paragraphPos = -1; + int paragraphPosInner = -1; + if (fieldSetModel.getTitle() != null && !fieldSetModel.getTitle().isEmpty() && !createListing) { + XWPFParagraph paragraph = addParagraphContent(page + "." + section + "." + (fieldSetModel.getOrdinal() +1) + " " + fieldSetModel.getTitle(), mainDocumentPart, ParagraphStyle.HEADER6, numId, indent); +// CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); +// number.setVal(BigInteger.valueOf(indent)); + paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); + if(!fieldSetModel.getMultiplicity().getTableView() && propertyDefinitionFieldSetItemModels.size() > 1){ + XWPFParagraph paragraphInner = addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.TEXT, numId, indent); + paragraphPosInner = mainDocumentPart.getPosOfParagraph(paragraphInner); + hasMultiplicityItems = true; + multiplicityItems++; + } + } + XWPFTable tbl = null; + XWPFTableRow row = null; + int numOfRows = 0; + if(fieldSetModel.getMultiplicity().getTableView()) { + tbl = mainDocumentPart.createTable(); + tbl.setTableAlignment(TableRowAlign.CENTER); + mainDocumentPart.createParagraph(); + createHeadersInTable(fieldSetModel.getFields(), tbl, visibilityService); + numOfRows = tbl.getRows().size(); + row = tbl.createRow(); + } + if(fieldSetModel.getMultiplicity().getTableView()) { + hasValue = createFieldsInTable(fieldSetModel, propertyDefinitionFieldSetItemModels.getFirst(), row, indent, createListing, hasMultiplicityItems, numOfRows, visibilityService); + numOfRows++; + } else { + hasValue = createFields(fieldSetModel, propertyDefinitionFieldSetItemModels.getFirst(), mainDocumentPart, indent, createListing, hasMultiplicityItems, visibilityService); + } + if(hasValue){ + returnedValue = true; + } else if(paragraphPosInner > -1){ + mainDocumentPart.removeBodyElement(paragraphPosInner); + c--; + multiplicityItems--; + } + if (propertyDefinitionFieldSetItemModels.size() > 1) { + for (PropertyDefinitionFieldSetItemModel multiplicityFieldset : propertyDefinitionFieldSetItemModels.stream().skip(1).toList()) { + paragraphPosInner = -1; + if(!fieldSetModel.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++; } - } else { - for (PropertyDefinitionFieldSetItemModel propertyDefinitionFieldSetItemModel : propertyDefinitionFieldSetItemModels) { - int paragraphPosInner = -1; - if (!fieldSetModel.getMultiplicity().getTableView() && !createListing) { - XWPFParagraph paragraphInner = addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.TEXT, numId, indent); - c++; - paragraphPosInner = mainDocumentPart.getPosOfParagraph(paragraphInner); - hasMultiplicityItems = true; - multiplicityItems++; - } - hasValue = createFields(fieldSetModel, propertyDefinitionFieldSetItemModel, mainDocumentPart, indent, createListing, hasMultiplicityItems, visibilityService); - if (hasValue) { - returnedValue = true; - } else if (paragraphPosInner > -1) { - mainDocumentPart.removeBodyElement(paragraphPosInner); - c--; - multiplicityItems--; - } +// hasValue = createFields(multiplicityFieldset.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService, hasMultiplicityItems); + boolean hasValueInner = false; + if(fieldSetModel.getMultiplicity().getTableView()) { + row = tbl.createRow(); + hasValueInner = createFieldsInTable(fieldSetModel, multiplicityFieldset, row, indent, createListing, hasMultiplicityItems, numOfRows, visibilityService); + numOfRows++; + } else { + hasValueInner = createFields(fieldSetModel,multiplicityFieldset, mainDocumentPart, indent, createListing, hasMultiplicityItems, visibilityService); + } +// 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().getFirst().getText(0); - if (text.equals("a. ")) { + if(multiplicityItems == 1) { + String text = mainDocumentPart.getLastParagraph().getRuns().get(0).getText(0); + if(text.equals("a. ")) { mainDocumentPart.getLastParagraph().removeRun(0); } } - } else { - hasValue = createFields(fieldSetModel, propertyDefinitionFieldSetItemModels.getFirst(), mainDocumentPart, indent, createListing, false, visibilityService); } if (hasValue && propertyDefinitionFieldSetItemModels.getFirst().getComment() != null && !propertyDefinitionFieldSetItemModels.getFirst().getComment().isEmpty() && !createListing) { - addParagraphContent("Comment:\n"+ propertyDefinitionFieldSetItemModels.getFirst().getComment(), mainDocumentPart, ParagraphStyle.HTML, numId, indent); + addParagraphContent("Comment:\n"+ propertyDefinitionFieldSetItemModels.getFirst().getComment(), mainDocumentPart, ParagraphStyle.HTML, numId, indent); + } + if (!hasValue && paragraphPos > -1) { + mainDocumentPart.removeBodyElement(paragraphPos); } - } - - if (!hasValue && paragraphPos > -1) { - mainDocumentPart.removeBodyElement(paragraphPos); } } @@ -389,9 +410,9 @@ public class WordBuilderImpl implements WordBuilder { int index = 0; XWPFTableRow row = table.getRow(0); for (FieldModel field: tempFields) { - if (field.getIncludeInExport() && visibilityService.isVisible(field.getId(), field.getOrdinal())) { + if (field.getIncludeInExport() && visibilityService.isVisible(field.getId(), 0)) { XWPFTableCell cell; - if (index == 0) { + if(index == 0) { cell = row.getCell(0); } else { cell = row.createCell(); @@ -425,7 +446,7 @@ public class WordBuilderImpl implements WordBuilder { boolean hasValue = false; List tempFields = fieldSetModel.getFields().stream().sorted(Comparator.comparingInt(FieldModel::getOrdinal)).toList(); for (FieldModel field: tempFields) { - if (field.getIncludeInExport() && visibilityService.isVisible(field.getId(), fieldSetModel.getOrdinal())) { + if (field.getIncludeInExport() && visibilityService.isVisible(field.getId(), propertyDefinitionFieldSetItemModel.getOrdinal())) { if (!createListing) { try { eu.eudat.commonmodels.models.description.FieldModel fieldValueModel = propertyDefinitionFieldSetItemModel.getFields().getOrDefault(field.getId(), null); @@ -576,7 +597,7 @@ public class WordBuilderImpl implements WordBuilder { boolean hasValue = false; List tempFields = fieldSetModel.getFields().stream().sorted(Comparator.comparingInt(FieldModel::getOrdinal)).toList(); for (FieldModel field: tempFields) { - if (field.getIncludeInExport() && visibilityService.isVisible(field.getId(), fieldSetModel.getOrdinal())) { + if (field.getIncludeInExport() && visibilityService.isVisible(field.getId(), propertyDefinitionFieldSetItemModel.getOrdinal())) { if (!createListing) { try { eu.eudat.commonmodels.models.description.FieldModel fieldValueModel = propertyDefinitionFieldSetItemModel.getFields().getOrDefault(field.getId(), null); @@ -604,7 +625,7 @@ public class WordBuilderImpl implements WordBuilder { } else if (fieldValueModel != null) { this.indent = indent; String format = this.formatter(field, fieldValueModel); - Boolean isMultiAutoComplete = false; + boolean isMultiAutoComplete = false; boolean isResearcher = false; boolean isOrganization = false; boolean isExternalDataset = false; @@ -885,94 +906,79 @@ public class WordBuilderImpl implements WordBuilder { int parPos = 0; int descrParPos = -1; - XWPFParagraph descrPar = null; List grants = this.getReferenceModelOfTypeCode(dmpEntity, this.wordFileTransformerServiceProperties.getGrantReferenceCode()); List researchers = this.getReferenceModelOfTypeCode(dmpEntity, this.wordFileTransformerServiceProperties.getResearcherReferenceCode()); List organizations = this.getReferenceModelOfTypeCode(dmpEntity, this.wordFileTransformerServiceProperties.getOrganizationReferenceCode()); List funders = this.getReferenceModelOfTypeCode(dmpEntity, this.wordFileTransformerServiceProperties.getFunderReferenceCode()); - - for(XWPFParagraph p: document.getParagraphs()){ - List runs = p.getRuns(); - if(runs != null){ - for(XWPFRun r : runs){ - String text = r.getText(0); - if(text != null){ - if(text.contains("{ARGOS.DMP.TITLE}")) { - text = text.replace("{ARGOS.DMP.TITLE}", dmpEntity.getLabel()); - r.setText(text, 0); - } else if(text.contains("{ARGOS.DMP.VERSION}")) { - text = text.replace("{ARGOS.DMP.VERSION}", "Version " + dmpEntity.getVersion()); - r.setText(text, 0); - } else if(descriptionModel != null && text.contains("{ARGOS.DATASET.TITLE}")) { - text = text.replace("{ARGOS.DATASET.TITLE}", descriptionModel.getLabel()); - r.setText(text, 0); - } else if((text.contains("{ARGOS.DMP.DESCRIPTION}") && !isDescription) || (descriptionModel != null && text.contains("{ARGOS.DATASET.DESCRIPTION}") && isDescription)) { - descrParPos = parPos; - descrPar = p; - if(!isDescription) { - text = text.replace("{ARGOS.DMP.DESCRIPTION}", ""); - } else { - text = text.replace("{ARGOS.DATASET.DESCRIPTION}", ""); - } - r.setText(text, 0); - } else if(text.equals("{ARGOS.DMP.RESEARCHERS}")) { - StringBuilder researchersNames = new StringBuilder(); - int i = 0; - for(ReferenceModel researcher : researchers){ - i++; - researchersNames.append(researcher.getLabel()).append(i < researchers.size() ? ", " : ""); - } - text = text.replace("{ARGOS.DMP.RESEARCHERS}", researchersNames.toString()); - r.setText(text, 0); - r.setFontSize(17); - } else if(text.equals("{ARGOS.DMP.ORGANIZATIONS}")) { - StringBuilder organisationsNames = new StringBuilder(); - int i = 0; - for(ReferenceModel organisation : organizations){ - i++; - organisationsNames.append(organisation.getLabel()).append(i < organizations.size() ? ", " : ""); - } - text = text.replace("{ARGOS.DMP.ORGANIZATIONS}", organisationsNames.toString()); - r.setText(text, 0); - r.setFontSize(17); - } - } - } - } - parPos++; - } - if((descrParPos != -1) && (dmpEntity.getDescription() != null) && !isDescription) { + XWPFParagraph descrPar = null; + for(XWPFParagraph p: document.getParagraphs()){ + + if( dmpEntity != null) { + this.replaceTextSegment(p, "'{ARGOS.DMP.TITLE}'", dmpEntity.getLabel()); + this.replaceTextSegment(p, "'{ARGOS.DMP.VERSION}'", "Version " + dmpEntity.getVersion()); + } + if( descriptionModel != null) { + this.replaceTextSegment(p, "'{ARGOS.DATASET.TITLE}'", descriptionModel.getLabel()); + } + + String researchersNames = ""; + int i = 0; + for(ReferenceModel researcher : researchers){ + i++; + researchersNames += researcher.getLabel() + (i < researchers.size() ? ", " : ""); + } + this.replaceTextSegment(p, "'{ARGOS.DMP.RESEARCHERS}'", researchersNames, 15); + + String organisationsNames = ""; + i = 0; + for(ReferenceModel organisation : organizations){ + i++; + organisationsNames += organisation.getLabel() + (i < organizations.size() ? ", " : ""); + } + this.replaceTextSegment(p, "'{ARGOS.DMP.ORGANIZATIONS}'", organisationsNames, 15); + + if(this.textSegmentExists(p,"'{ARGOS.DMP.DESCRIPTION}'")) { + descrParPos = parPos; + descrPar = p; + this.replaceTextSegment(p, "'{ARGOS.DMP.DESCRIPTION}'", ""); + } + if(this.textSegmentExists(p,"'{ARGOS.DATASET.DESCRIPTION}'")) { + descrParPos = parPos; + descrPar = p; + this.replaceTextSegment(p, "'{ARGOS.DATASET.DESCRIPTION}'", ""); + } + } + if((descrParPos != -1) && (dmpEntity!=null) && (dmpEntity.getDescription() != null) && !isDescription) { XmlCursor cursor = descrPar.getCTP().newCursor(); cursor.toNextSibling(); - Document htmlDoc = Jsoup.parse((dmpEntity.getDescription()).replaceAll("\n", "
")); + Document htmlDoc = Jsoup.parse(((String)dmpEntity.getDescription()).replaceAll("\n", "
")); HtmlToWorldBuilder htmlToWorldBuilder = new HtmlToWorldBuilder(descrPar, 0, cursor); NodeTraversor.traverse(htmlToWorldBuilder, htmlDoc); } if((descrParPos != -1) && (descriptionModel != null) && (descriptionModel.getDescription() != null) && isDescription) { XmlCursor cursor = descrPar.getCTP().newCursor(); cursor.toNextSibling(); - Document htmlDoc = Jsoup.parse(( descriptionModel.getDescription()).replaceAll("\n", "
")); + Document htmlDoc = Jsoup.parse(((String)descriptionModel.getDescription()).replaceAll("\n", "
")); HtmlToWorldBuilder htmlToWorldBuilder = new HtmlToWorldBuilder(descrPar, 0, cursor); NodeTraversor.traverse(htmlToWorldBuilder, htmlDoc); } - XWPFTable tbl = document.getTables().getFirst(); + XWPFTable tbl = document.getTables().get(0); Iterator it = tbl.getRows().iterator(); it.next(); // skip first row if(it.hasNext() && !funders.isEmpty()){ - XWPFParagraph p = it.next().getCell(0).getParagraphs().getFirst(); + XWPFParagraph p = it.next().getCell(0).getParagraphs().get(0); XWPFRun run = p.createRun(); run.setText(funders.getFirst().getLabel()); - run.setFontSize(17); + run.setFontSize(15); p.setAlignment(ParagraphAlignment.CENTER); } it = tbl.getRows().iterator(); it.next(); - if(it.hasNext() && !grants.isEmpty()){ - XWPFParagraph p = it.next().getCell(1).getParagraphs().getFirst(); + XWPFParagraph p = it.next().getCell(1).getParagraphs().get(0); XWPFRun run = p.createRun(); String text = grants.getFirst().getLabel(); String reference = grants.getFirst().getReference(); @@ -981,11 +987,133 @@ public class WordBuilderImpl implements WordBuilder { text += parts.length > 1 ? "/ No "+parts[parts.length - 1] : ""; } run.setText(text); - run.setFontSize(17); + run.setFontSize(15); p.setAlignment(ParagraphAlignment.CENTER); } } + private boolean textSegmentExists(XWPFParagraph paragraph, String textToFind) { + TextSegment foundTextSegment = null; + PositionInParagraph startPos = new PositionInParagraph(0, 0, 0); + while((foundTextSegment = this.searchText(paragraph, textToFind, startPos)) != null) { + return true; + } + return false; + } + + private void replaceTextSegment(XWPFParagraph paragraph, String textToFind, String replacement) { + this.replaceTextSegment(paragraph, textToFind, replacement, null); + } + private void replaceTextSegment(XWPFParagraph paragraph, String textToFind, String replacement, Integer fontSize) { + TextSegment foundTextSegment = null; + PositionInParagraph startPos = new PositionInParagraph(0, 0, 0); + while((foundTextSegment = this.searchText(paragraph, textToFind, startPos)) != null) { // search all text segments having text to find + + System.out.println(foundTextSegment.getBeginRun()+":"+foundTextSegment.getBeginText()+":"+foundTextSegment.getBeginChar()); + System.out.println(foundTextSegment.getEndRun()+":"+foundTextSegment.getEndText()+":"+foundTextSegment.getEndChar()); + + // maybe there is text before textToFind in begin run + XWPFRun beginRun = paragraph.getRuns().get(foundTextSegment.getBeginRun()); + String textInBeginRun = beginRun.getText(foundTextSegment.getBeginText()); + String textBefore = textInBeginRun.substring(0, foundTextSegment.getBeginChar()); // we only need the text before + + // maybe there is text after textToFind in end run + XWPFRun endRun = paragraph.getRuns().get(foundTextSegment.getEndRun()); + String textInEndRun = endRun.getText(foundTextSegment.getEndText()); + String textAfter = textInEndRun.substring(foundTextSegment.getEndChar() + 1); // we only need the text after + + if (foundTextSegment.getEndRun() == foundTextSegment.getBeginRun()) { + textInBeginRun = textBefore + replacement + textAfter; // if we have only one run, we need the text before, then the replacement, then the text after in that run + } else { + textInBeginRun = textBefore + replacement; // else we need the text before followed by the replacement in begin run + endRun.setText(textAfter, foundTextSegment.getEndText()); // and the text after in end run + } + + beginRun.setText(textInBeginRun, foundTextSegment.getBeginText()); + if (fontSize != null) { + beginRun.setFontSize(fontSize); + } + // runs between begin run and end run needs to be removed + for (int runBetween = foundTextSegment.getEndRun() - 1; runBetween > foundTextSegment.getBeginRun(); runBetween--) { + paragraph.removeRun(runBetween); // remove not needed runs + } + + } + } + + private TextSegment searchText(XWPFParagraph paragraph, String searched, PositionInParagraph startPos) { + int startRun = startPos.getRun(), + startText = startPos.getText(), + startChar = startPos.getChar(); + int beginRunPos = 0, candCharPos = 0; + boolean newList = false; + + //CTR[] rArray = paragraph.getRArray(); //This does not contain all runs. It lacks hyperlink runs for ex. + java.util.List runs = paragraph.getRuns(); + + int beginTextPos = 0, beginCharPos = 0; //must be outside the for loop + + //for (int runPos = startRun; runPos < rArray.length; runPos++) { + for (int runPos = startRun; runPos < runs.size(); runPos++) { + //int beginTextPos = 0, beginCharPos = 0, textPos = 0, charPos; //int beginTextPos = 0, beginCharPos = 0 must be outside the for loop + int textPos = 0, charPos; + //CTR ctRun = rArray[runPos]; + CTR ctRun = runs.get(runPos).getCTR(); + XmlCursor c = ctRun.newCursor(); + c.selectPath("./*"); + try { + while (c.toNextSelection()) { + XmlObject o = c.getObject(); + if (o instanceof CTText) { + if (textPos >= startText) { + String candidate = ((CTText) o).getStringValue(); + if (runPos == startRun) { + charPos = startChar; + } else { + charPos = 0; + } + + for (; charPos < candidate.length(); charPos++) { + if ((candidate.charAt(charPos) == searched.charAt(0)) && (candCharPos == 0)) { + beginTextPos = textPos; + beginCharPos = charPos; + beginRunPos = runPos; + newList = true; + } + if (candidate.charAt(charPos) == searched.charAt(candCharPos)) { + if (candCharPos + 1 < searched.length()) { + candCharPos++; + } else if (newList) { + TextSegment segment = new TextSegment(); + segment.setBeginRun(beginRunPos); + segment.setBeginText(beginTextPos); + segment.setBeginChar(beginCharPos); + segment.setEndRun(runPos); + segment.setEndText(textPos); + segment.setEndChar(charPos); + return segment; + } + } else { + candCharPos = 0; + } + } + } + textPos++; + } else if (o instanceof CTProofErr) { + c.removeXml(); + } else if (o instanceof CTRPr) { + //do nothing + } else { + candCharPos = 0; + } + } + } finally { + c.dispose(); + } + } + return null; + } + @Override public void fillFooter(DmpModel dmpEntity, DescriptionModel descriptionModel, XWPFDocument document) { if (dmpEntity == null) throw new IllegalArgumentException("DmpEntity required"); diff --git a/pom.xml b/pom.xml index 505ac24..70e9fe1 100644 --- a/pom.xml +++ b/pom.xml @@ -25,7 +25,7 @@ gr.cite.opendmp file-transformer-base - 0.0.8 + 0.0.9 org.yaml diff --git a/web/src/main/resources/documents/h2020.docx b/web/src/main/resources/documents/h2020.docx index b0e721ab0234053b1488fd2d6b2b8af8a066d1c2..a434d2226036d90555be66e0f2f3d49f9ac4fd9a 100644 GIT binary patch delta 16142 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 E09DRZVgLXD delta 15449 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