WIP for new base
This commit is contained in:
parent
654d4ef5c8
commit
bf2520c6b4
|
@ -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<FileFormat> 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);
|
||||
|
@ -89,19 +94,14 @@ 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<FileFormat> 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<Reference> grants = new ArrayList<>();
|
||||
List<Reference> researchers = new ArrayList<>();
|
||||
List<Reference> organizations = new ArrayList<>();
|
||||
List<Reference> funders = new ArrayList<>();
|
||||
List<Reference> projects = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> grants = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> researchers = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> organizations = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> funders = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> 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<DescriptionFileTransformerModel> 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<eu.eudat.file.transformer.model.DescriptionTemplate> descriptionTemplates = descriptions.stream().map(DescriptionFileTransformerModel::getDescriptionTemplate).toList();
|
||||
List<DescriptionTemplateFileTransformerModel> 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");
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
|
@ -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<Rule> mapRulesFromDefinition(Definition definitionFileModel) {
|
||||
return definitionFileModel.getSections().stream().flatMap(section -> mapRulesFromSection(section).stream()).toList();
|
||||
}
|
||||
|
||||
private static List<Rule> mapRulesFromSection(Section section) {
|
||||
List<Rule> 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<Rule> mapRuleFromFieldSet(FieldSet fieldSet) {
|
||||
List<Rule> rules = new ArrayList<>();
|
||||
if (!fieldSet.getFields().isEmpty()) {
|
||||
rules.addAll(fieldSet.getFields().stream().flatMap(field -> mapRules(field).stream()).toList());
|
||||
}
|
||||
|
||||
return rules;
|
||||
}
|
||||
|
||||
private static List<Rule> mapRules(Field field) {
|
||||
List<Rule> 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;
|
||||
}
|
||||
}
|
|
@ -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<VisibilityRule> visibilityRules = new LinkedList<>();
|
||||
|
||||
public List<VisibilityRule> getVisibilityRules() {
|
||||
return visibilityRules;
|
||||
}
|
||||
|
||||
public VisibilityRule get(String id) {
|
||||
Optional<VisibilityRule> rule = visibilityRules.stream().filter(item -> item.getVisibilityRuleTargetId().equals(id)).findFirst();
|
||||
if (rule.isPresent()) return rule.get();
|
||||
return null;
|
||||
}
|
||||
|
||||
public void buildVisibilityContext(List<Rule> sources) {
|
||||
sources.forEach(this::addToVisibilityRulesContext);
|
||||
}
|
||||
|
||||
private void addToVisibilityRulesContext(Rule item) {
|
||||
VisibilityRuleSource source = new VisibilityRuleSource();
|
||||
source.setVisibilityRuleSourceId(item.getSourceField());
|
||||
source.setVisibilityRuleSourceValue(item.getRequiredValue());
|
||||
|
||||
Optional<VisibilityRule> visibilityRuleOptional = visibilityRules.stream().filter(rule -> rule.getVisibilityRuleTargetId().equals(item.getTargetField())).findFirst();
|
||||
if (visibilityRuleOptional.isPresent()) visibilityRuleOptional.get().getVisibilityRuleSources().add(source);
|
||||
else {
|
||||
List<VisibilityRuleSource> sources = new LinkedList<>();
|
||||
sources.add(source);
|
||||
VisibilityRule visibilityRule = new VisibilityRule();
|
||||
visibilityRule.setVisibilityRuleTargetId(item.getTargetField());
|
||||
visibilityRule.setVisibilityRuleSources(sources);
|
||||
this.visibilityRules.add(visibilityRule);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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<VisibilityRuleSource> visibilityRuleSources;
|
||||
|
||||
public String getVisibilityRuleTargetId() {
|
||||
return visibilityRuleTargetId;
|
||||
}
|
||||
|
||||
public void setVisibilityRuleTargetId(String visibilityRuleTargetId) {
|
||||
this.visibilityRuleTargetId = visibilityRuleTargetId;
|
||||
}
|
||||
|
||||
public List<VisibilityRuleSource> getVisibilityRuleSources() {
|
||||
return visibilityRuleSources;
|
||||
}
|
||||
|
||||
public void setVisibilityRuleSources(List<VisibilityRuleSource> visibilityRuleSources) {
|
||||
this.visibilityRuleSources = visibilityRuleSources;
|
||||
}
|
||||
}
|
|
@ -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<Rule> sources);
|
||||
|
||||
void setProperties(PropertyDefinition properties);
|
||||
}
|
|
@ -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<String, Boolean> 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<String> parseArray(String original) {
|
||||
String parsed = original.replace("[", "").replace("\"", "").replace("]", "");
|
||||
return Arrays.asList(parsed.split(","));
|
||||
}
|
||||
|
||||
public void buildVisibilityContext(List<Rule> sources) {
|
||||
VisibilityContext visibilityContext = new VisibilityContext();
|
||||
visibilityContext.buildVisibilityContext(sources);
|
||||
visibilityContext.getVisibilityRules().forEach(this::evaluateVisibility);
|
||||
}
|
||||
|
||||
private void evaluateVisibility(VisibilityRule rule) {
|
||||
List<VisibilityRuleSource> 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;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package eu.eudat.file.transformer.utils.interfaces;
|
||||
|
||||
/**
|
||||
* Created by ikalyvas on 3/1/2018.
|
||||
*/
|
||||
public interface Applier<A, V> {
|
||||
void apply(A applier, V value);
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package eu.eudat.file.transformer.utils.interfaces;
|
||||
|
||||
/**
|
||||
* Created by ikalyvas on 2/5/2018.
|
||||
*/
|
||||
public interface Cloneable<T> {
|
||||
T clone();
|
||||
}
|
|
@ -1,8 +0,0 @@
|
|||
package eu.eudat.file.transformer.utils.interfaces;
|
||||
|
||||
|
||||
import eu.eudat.file.transformer.entities.common.DatabaseModelDefinition;
|
||||
|
||||
public interface ModelSerializer<T, U extends DatabaseModelDefinition> {
|
||||
void fromDatabaseDefinition(T viewStyle, U model);
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
}
|
|
@ -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<JsonNode> findNodes(JsonNode root, String key, String value) {
|
||||
return findNodes(root, key, value, false);
|
||||
}
|
||||
|
||||
public static List<JsonNode> findNodes(JsonNode root, String key, String value, boolean parent) {
|
||||
List<JsonNode> nodes = new ArrayList<>();
|
||||
for (Iterator<JsonNode> it = root.elements(); it.hasNext(); ) {
|
||||
JsonNode node = it.next();
|
||||
int found = 0;
|
||||
for (Iterator<String> 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<String> getParentValues(JsonNode root, String childValue, String key) {
|
||||
List<String> values = new LinkedList<>();
|
||||
|
||||
for (Iterator<JsonNode> it = root.elements(); it.hasNext(); ) {
|
||||
JsonNode node = it.next();
|
||||
int found = 0;
|
||||
for (Iterator<String> 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;
|
||||
}
|
||||
}
|
|
@ -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<Date> {
|
||||
|
||||
private static final List<String> 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");
|
||||
}
|
||||
}
|
|
@ -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<DatasetProfilePage> datasetProfilePages, XWPFDocument mainDocumentPart, Boolean createListing, VisibilityRuleService visibilityRuleService) {
|
||||
private void createPages(List<PageFileTransformerModel> 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<Section> sections, XWPFDocument mainDocumentPart, ParagraphStyle style, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, Integer page, String sectionString) {
|
||||
private void createSections(List<SectionFileTransformerModel> 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);
|
||||
// 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);
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private Boolean createCompositeFields(List<FieldSet> compositeFields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, Integer page, String section) {
|
||||
private Boolean createCompositeFields(List<FieldSetFileTransformerModel> 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<FieldSet> 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<FieldSetFileTransformerModel> 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("<i>Comment:</i>\n"+compositeField.getCommentFieldValue(), mainDocumentPart, ParagraphStyle.HTML, numId, indent);
|
||||
|
@ -418,27 +418,26 @@ public class WordBuilder {
|
|||
mainDocumentPart.removeBodyElement(paragraphPos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return returnedValue;
|
||||
}
|
||||
|
||||
private void createHeadersInTable(List<Field> fields, XWPFTable table, VisibilityRuleService visibilityRuleService) {
|
||||
private void createHeadersInTable(List<FieldFileTransformerModel> fields, XWPFTable table) {
|
||||
boolean atLeastOneHeader = false;
|
||||
List<Field> tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList());
|
||||
List<FieldFileTransformerModel> 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<Field> fields, XWPFTableRow mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, boolean hasMultiplicityItems, int numOfRows) {
|
||||
private Boolean createFieldsInTable(List<FieldFileTransformerModel> fields, XWPFTableRow mainDocumentPart, Integer indent, Boolean createListing, boolean hasMultiplicityItems, int numOfRows) {
|
||||
int numOfCells = 0;
|
||||
boolean hasValue = false;
|
||||
List<Field> tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList());
|
||||
for (Field field: tempFields) {
|
||||
if (visibilityRuleService.isElementVisible(field.getId()) && field.getExport()) {
|
||||
List<FieldFileTransformerModel> 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<Field> fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, boolean hasMultiplicityItems) {
|
||||
private Boolean createFields(List<FieldFileTransformerModel> fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, boolean hasMultiplicityItems) {
|
||||
if (createListing) this.addListing(mainDocumentPart, indent, false, false);
|
||||
boolean hasValue = false;
|
||||
List<Field> tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList());
|
||||
for (Field field: tempFields) {
|
||||
if (visibilityRuleService.isElementVisible(field.getId()) && field.getExport()) {
|
||||
List<FieldFileTransformerModel> 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<String, String> value = mapper.readValue((String)field.getValue(), Map.class);
|
||||
Map<String, String> 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<Map<String, Object>> 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 <String, Object> 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,29 +883,24 @@ public class WordBuilder {
|
|||
case SERVICES:
|
||||
case TAGS:
|
||||
case CURRENCY:
|
||||
comboboxType = FieldDataComboBoxType.Autocomplete;
|
||||
case COMBO_BOX: {
|
||||
if (comboboxType == null) {
|
||||
comboboxType = ((ComboBoxDataEntity) field.getData()).getFieldSubType();
|
||||
}
|
||||
if (comboboxType.equals(FieldDataComboBoxType.Autocomplete)) {
|
||||
case AUTO_COMPLETE: {
|
||||
mapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
|
||||
if (field.getValue() == null) return null;
|
||||
if (field.getData().getValue() == null) return null;
|
||||
List<Map<String, Object>> mapList = new ArrayList<>();
|
||||
if (!field.getValue().equals("") && field.getValue().toString() != null) {
|
||||
if (!field.getData().getValue().equals("") && field.getData().getValue().toString() != null) {
|
||||
try {
|
||||
mapList = Arrays.asList(mapper.readValue(field.getValue().toString(), HashMap[].class));
|
||||
}catch (Exception e) {
|
||||
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 <String, Object> map = new HashMap<>();
|
||||
map.put("label", field.getValue().toString());
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
map.put("label", field.getData().getValue().toString());
|
||||
mapList.add(map);
|
||||
}
|
||||
}
|
||||
StringBuilder sb = new StringBuilder();
|
||||
int index = 0;
|
||||
for (Map<String, Object> map: mapList) {
|
||||
for (Map<String, Object> map : mapList) {
|
||||
for (Map.Entry<String, Object> entry : map.entrySet()) {
|
||||
if (entry.getValue() != null && (entry.getKey().equals("label") || entry.getKey().equals("description") || entry.getKey().equals("name"))) {
|
||||
sb.append(entry.getValue());
|
||||
|
@ -918,58 +911,58 @@ public class WordBuilder {
|
|||
index++;
|
||||
}
|
||||
return sb.toString();
|
||||
} else if (comboboxType.equals(FieldDataComboBoxType.Wordlist)) {
|
||||
WordListDataEntity wordListDataEntity = (WordListDataEntity) field.getData();
|
||||
if (field.getValue() != null){
|
||||
ComboBoxDataEntity.Option selectedOption = null;
|
||||
}
|
||||
case WORD_LIST: {
|
||||
WordListDataFileTransformerModel wordListDataEntity = (WordListDataFileTransformerModel) field.getData();
|
||||
if (field.getData().getValue() != null) {
|
||||
ComboBoxOptionFileTransformerModel selectedOption = null;
|
||||
if (!wordListDataEntity.getOptions().isEmpty()) {
|
||||
for (ComboBoxDataEntity.Option option : wordListDataEntity.getOptions()) {
|
||||
if (option.getValue().equals(field.getValue())) {
|
||||
for (ComboBoxOptionFileTransformerModel option : wordListDataEntity.getOptions()) {
|
||||
if (option.getValue().equals(field.getData().getValue())) {
|
||||
selectedOption = option;
|
||||
}
|
||||
}
|
||||
}
|
||||
return selectedOption != null ? selectedOption.getLabel() : field.getValue().toString();
|
||||
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<String, String> 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<String, String> customParse(String value) {
|
||||
Map<String, String> 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<Reference> grants = new ArrayList<>();
|
||||
List<Reference> researchers = new ArrayList<>();
|
||||
List<Reference> organizations = new ArrayList<>();
|
||||
List<Reference> funders = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> grants = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> researchers = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> organizations = new ArrayList<>();
|
||||
List<ReferenceFileTransformerModel> 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<XWPFRun> 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() ? ", " : "");
|
||||
}
|
||||
|
|
|
@ -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<FileFormat> getSupportedFormats() {
|
||||
public List<FileVariant> getSupportedFormats() {
|
||||
return fileTransformerExecutor.getSupportedFileFormats();
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue