From 3433f5850668fd275bd127c5b8111d9bc9243575 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Wed, 8 Jun 2022 16:23:49 +0300 Subject: [PATCH 1/7] Add ssl support for elasticsearch --- .../ElasticSearchConfiguration.java | 54 ++++++++++++++++--- .../config/application-devel.properties | 3 ++ 2 files changed, 51 insertions(+), 6 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/configurations/ElasticSearchConfiguration.java b/dmp-backend/web/src/main/java/eu/eudat/configurations/ElasticSearchConfiguration.java index e299035e1..49f7de4b4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/configurations/ElasticSearchConfiguration.java +++ b/dmp-backend/web/src/main/java/eu/eudat/configurations/ElasticSearchConfiguration.java @@ -4,11 +4,14 @@ import org.apache.http.HttpHost; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.CredentialsProvider; +import org.apache.http.conn.ssl.TrustSelfSignedStrategy; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.nio.conn.PoolingNHttpClientConnectionManager; import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor; import org.apache.http.nio.reactor.IOReactorException; import org.apache.http.nio.reactor.IOReactorExceptionHandler; +import org.apache.http.ssl.SSLContextBuilder; +import org.apache.http.ssl.SSLContexts; import org.elasticsearch.client.RestClient; import org.elasticsearch.client.RestHighLevelClient; import org.slf4j.Logger; @@ -18,7 +21,17 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; +import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.security.KeyStore; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; /** * Created by ikalyvas on 7/5/2018. @@ -56,12 +69,41 @@ public class ElasticSearchConfiguration { } }); - RestHighLevelClient client = new RestHighLevelClient( - RestClient.builder( - new HttpHost(this.environment.getProperty("elasticsearch.host"), - Integer.parseInt(this.environment.getProperty("elasticsearch.port")), "http")) - .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder - .setDefaultCredentialsProvider(credentialsProvider).setConnectionManager(new PoolingNHttpClientConnectionManager(ioReactor)))); + RestHighLevelClient client; + if(this.environment.getProperty("elasticsearch.usingssl", Boolean.class)){ + + Path caCertificatePath = Paths.get(this.environment.getProperty("elasticsearch.certPath")); + CertificateFactory factory = + CertificateFactory.getInstance("X.509"); + Certificate trustedCa; + try (InputStream is = Files.newInputStream(caCertificatePath)) { + trustedCa = factory.generateCertificate(is); + } + KeyStore trustStore = KeyStore.getInstance("pkcs12"); + trustStore.load(null, null); + trustStore.setCertificateEntry("ca", trustedCa); + + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(trustStore); + + SSLContext sslContext = SSLContext.getInstance("TLS"); + sslContext.init(null, tmf.getTrustManagers(), null); + + client = new RestHighLevelClient( + RestClient.builder( + new HttpHost(this.environment.getProperty("elasticsearch.host"), + Integer.parseInt(this.environment.getProperty("elasticsearch.port")), "https")) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider).setSSLContext(sslContext))); + } + else { + client = new RestHighLevelClient( + RestClient.builder( + new HttpHost(this.environment.getProperty("elasticsearch.host"), + Integer.parseInt(this.environment.getProperty("elasticsearch.port")), "http")) + .setHttpClientConfigCallback(httpClientBuilder -> httpClientBuilder + .setDefaultCredentialsProvider(credentialsProvider).setConnectionManager(new PoolingNHttpClientConnectionManager(ioReactor)))); + } return client; }catch (IOReactorException ex) { throw new RuntimeException(ex); diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties index 396776273..8ae02affd 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ b/dmp-backend/web/src/main/resources/config/application-devel.properties @@ -14,6 +14,9 @@ elasticsearch.port = 9200 elasticsearch.username=elastic elasticsearch.password= elasticsearch.index=dmps +elasticsearch.usingssl=false +elasticsearch.certPath = +elasticsearch.certKey = ####################ELK OVERRIDES CONFIGURATIONS########## http-logger.server-address = http://localhost:31311 From 73be5d9a981b0e324e7f8f738f41f763f399d2ff Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Wed, 8 Jun 2022 16:27:47 +0300 Subject: [PATCH 2/7] 1. export redesign: multiplicity #ref 7834, multiple select #ref 7836 2. fix bug in license api export --- .../mapper/prefilling/PrefillingMapper.java | 11 ++- .../utilities/documents/word/WordBuilder.java | 74 ++++++++++++------- .../resources/configurableLoginProviders.json | 22 +----- 3 files changed, 61 insertions(+), 46 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java index 4dc311f74..44b2f1be4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/mapper/prefilling/PrefillingMapper.java @@ -167,7 +167,16 @@ public class PrefillingMapper { List licenses = licenseManager.getLicenses("", ""); String finalParsedValue = parsedValue; licenses = licenses.stream().filter(license -> license.getPid().equals(finalParsedValue)).collect(Collectors.toList()); - properties.put(id, licenses); + boolean isMultiAutocomplete = node.isArray() ? node.get(0).get("data").get("multiAutoComplete").booleanValue() : node.get("data").get("multiAutoComplete").booleanValue(); + if(isMultiAutocomplete){ + List lic = new ArrayList<>(); + for(LicenseModel license: licenses){ + lic.add(mapper.writeValueAsString(license)); + } + properties.put(id, mapper.writeValueAsString(lic)); + } else { + properties.put(id, mapper.writeValueAsString(licenses.get(0))); + } } catch (NoURLFound | HugeResultSet e){ properties.put(id, parsedValue); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index f1b1f8e83..182cc8592 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -279,6 +279,7 @@ public class WordBuilder { for (FieldSet compositeField: compositeFields) { if (visibilityRuleService.isElementVisible(compositeField.getId()) && hasVisibleFields(compositeField, visibilityRuleService)) { char c = 'a'; + boolean hasMultiplicityItems = false; int paragraphPos = -1; if (compositeField.getTitle() != null && !compositeField.getTitle().isEmpty() && !createListing) { XWPFParagraph paragraph = addParagraphContent(page + "." + section + "." + (compositeField.getOrdinal() +1) + " " + compositeField.getTitle(), mainDocumentPart, ParagraphStyle.HEADER6, numId); @@ -286,10 +287,11 @@ public class WordBuilder { number.setVal(BigInteger.valueOf(indent)); paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); if(compositeField.getMultiplicityItems() != null && !compositeField.getMultiplicityItems().isEmpty()){ - addParagraphContent(c + ".\n", mainDocumentPart, ParagraphStyle.HEADER6, numId); + addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.HEADER6, numId); + hasMultiplicityItems = true; } } - hasValue = createFields(compositeField.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService); + hasValue = createFields(compositeField.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService, hasMultiplicityItems); if(hasValue){ returnedValue = true; } @@ -298,9 +300,10 @@ public class WordBuilder { for (FieldSet multiplicityFieldset : list) { if(!createListing){ c++; - addParagraphContent(c + ".\n", mainDocumentPart, ParagraphStyle.HEADER6, numId); + addParagraphContent(c + ". ", mainDocumentPart, ParagraphStyle.HEADER6, numId); + hasMultiplicityItems = true; } - hasValue = createFields(multiplicityFieldset.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService); + hasValue = createFields(multiplicityFieldset.getFields(), mainDocumentPart, 3, createListing, visibilityRuleService, hasMultiplicityItems); if(hasValue){ returnedValue = true; } @@ -319,19 +322,10 @@ public class WordBuilder { return returnedValue; } - private Boolean createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService) { + private Boolean createFields(List fields, XWPFDocument mainDocumentPart, Integer indent, Boolean createListing, VisibilityRuleService visibilityRuleService, boolean hasMultiplicityItems) { if (createListing) this.addListing(mainDocumentPart, indent, false, false); boolean hasValue = false; List tempFields = fields.stream().sorted(Comparator.comparingInt(Field::getOrdinal)).collect(Collectors.toList()); - List formats = tempFields.stream().filter(f -> { - try { - String fTemp = this.formatter(f); - return fTemp != null && !fTemp.isEmpty(); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } - return false; - }).collect(Collectors.toList()); for (Field field: tempFields) { if (visibilityRuleService.isElementVisible(field.getId()) && field.getExport()) { if (!createListing) { @@ -346,13 +340,16 @@ public class WordBuilder { } } if(isImage){ - if (!field.getValue().toString().isEmpty()) { + if (field.getValue() != null && !field.getValue().toString().isEmpty()) { XWPFParagraph paragraph = addParagraphContent(mapper.convertValue(field.getValue(), Map.class), mainDocumentPart, ParagraphStyle.IMAGE, numId); if (paragraph != null) { CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); number.setVal(BigInteger.valueOf(indent)); hasValue = true; } + if(hasMultiplicityItems){ + hasMultiplicityItems = false; + } } } } @@ -365,18 +362,45 @@ public class WordBuilder { format = getCommaSeparatedFormatsFromJson(format, "label"); } if(format != null && !format.isEmpty()){ - if(format.charAt(0) == '['){ - format = format.substring(1, format.length() - 1).replaceAll(",", ", "); - } - if(formats.size() > 1){ - format = "\t• " + format; + Object hasMultiAutoComplete = mapper.convertValue(field.getData(), Map.class).get("multiAutoComplete"); + boolean isMultiAutoComplete = hasMultiAutoComplete != null && (boolean)hasMultiAutoComplete; + boolean arrayStringFormat = format.charAt(0) == '['; + if(arrayStringFormat || isMultiAutoComplete){ + List values = (arrayStringFormat) ? Arrays.asList(format.substring(1, format.length() - 1).split(",[ ]*")) : Arrays.asList(format.split(",[ ]*")); + if(values.size() > 1) { + for (String val : values) { + format = "• " + val; + if(hasMultiplicityItems){ + mainDocumentPart.getLastParagraph().createRun().setText(format); + hasMultiplicityItems = false; + } + else{ + XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, field.getViewStyle().getRenderStyle().equals("richTextarea") ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId); + if (paragraph != null) { + CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); + number.setVal(BigInteger.valueOf(indent)); + hasValue = true; + } + } + format = null; + } + } + else if(values.size() == 1){ + format = values.get(0); + } } } - XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, field.getViewStyle().getRenderStyle().equals("richTextarea") ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId); - if (paragraph != null) { - CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); - number.setVal(BigInteger.valueOf(indent)); - hasValue = true; + if(hasMultiplicityItems){ + mainDocumentPart.getLastParagraph().createRun().setText(format); + hasMultiplicityItems = false; + } + else{ + XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, field.getViewStyle().getRenderStyle().equals("richTextarea") ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId); + if (paragraph != null) { + CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); + number.setVal(BigInteger.valueOf(indent)); + hasValue = true; + } } } } catch (IOException e) { diff --git a/dmp-backend/web/src/main/resources/configurableLoginProviders.json b/dmp-backend/web/src/main/resources/configurableLoginProviders.json index b3d8114b2..c569f0dd6 100644 --- a/dmp-backend/web/src/main/resources/configurableLoginProviders.json +++ b/dmp-backend/web/src/main/resources/configurableLoginProviders.json @@ -27,27 +27,9 @@ }, { "enabled": false, - "type": "", + "type": "saml2", "configurableLoginId": "", - "name": "", - "spEntityId": "", - "idpEntityId": "", - "idpUrl": "", - "idpArtifactUrl": "", - "idpMetadataUrl": "", - "assertionEncrypted": null, - "keyFormat": "", - "keyAlias": "", - "credentialPath": "", - "archivePassword": "", - "keyPassword": "", - "responseSigned": null, - "assertionSigned": null, - "usingFormat": "", - "configurableUserFromAttributes": null, - "attributeTypes": null, - "binding": "", - "logoUrl": "" + "name": "" } ] } From 941cca810329e53ddcb4a4b96c1927fcc813d387 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Fri, 10 Jun 2022 17:00:36 +0300 Subject: [PATCH 3/7] form-section-inner.component.html & form-section.component.html: Updated comment field to use instead of and . --- .../form-section-inner.component.html | 12 ++++++---- .../form-section/form-section.component.html | 24 ++++++++++++------- 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section-inner/form-section-inner.component.html b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section-inner/form-section-inner.component.html index d8ee36071..2d8594873 100644 --- a/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section-inner/form-section-inner.component.html +++ b/dmp-frontend/src/app/ui/misc/dataset-description-form/components/form-section/form-section-inner/form-section-inner.component.html @@ -28,10 +28,14 @@ {{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.MULTIPLICITY-ADD-ONE-FIELD' | translate}} - - - {{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.COMMENT-HINT' | translate}} - + + + + + + + + + + + + + + diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java index bdc9b1826..f4c4070eb 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DataManagementPlanManager.java @@ -1190,43 +1190,45 @@ public class DataManagementPlanManager { if (!dmpEntity.isPublic() && dmpEntity.getUsers().stream().filter(userInfo -> userInfo.getUser().getId() == principal.getId()).collect(Collectors.toList()).size() == 0) throw new UnauthorisedException(); - // DMP info on top of the document. - wordBuilder.addParagraphContent("Data Management Plan Information", document, ParagraphStyle.HEADER1, BigInteger.ZERO); - // DMP title custom style. - wordBuilder.addParagraphContent(dmpEntity.getLabel(), document, ParagraphStyle.HEADER2, BigInteger.ZERO); - wordBuilder.addParagraphContent(dmpEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO); + wordBuilder.fillFirstPage(dmpEntity, document); - wordBuilder.addParagraphContent("Funder", document, ParagraphStyle.HEADER3, BigInteger.ZERO); - if (dmpEntity.getGrant().getFunder() != null) - wordBuilder.addParagraphContent(dmpEntity.getGrant().getFunder().getLabel(), document, ParagraphStyle.TEXT, BigInteger.ZERO); - - wordBuilder.addParagraphContent("Grant", document, ParagraphStyle.HEADER3, BigInteger.ZERO); - wordBuilder.addParagraphContent(dmpEntity.getGrant().getLabel(), document, ParagraphStyle.TEXT, BigInteger.ZERO); - - wordBuilder.addParagraphContent("Organisations", document, ParagraphStyle.HEADER3, BigInteger.ZERO); - if (dmpEntity.getOrganisations().size() > 0) { - wordBuilder.addParagraphContent(dmpEntity.getOrganisations().stream().map(Organisation::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.TEXT, BigInteger.ZERO); - } - - wordBuilder.addParagraphContent("Researchers", document, ParagraphStyle.HEADER3, BigInteger.ZERO); - if (dmpEntity.getResearchers().size() > 0) { - wordBuilder.addParagraphContent(dmpEntity.getResearchers().stream().map(Researcher::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.TEXT, BigInteger.ZERO); - } - - /*wordBuilder.addParagraphContent("DMP Profile", document, ParagraphStyle.HEADER2, BigInteger.ZERO); - if (dmpEntity.getProfile() != null){ - wordBuilder.addParagraphContent(dmpEntity.getProfile().getLabel(), document, ParagraphStyle.TEXT, BigInteger.ZERO); - }*/ - - // Page break at the end of the DMP title. - XWPFParagraph parBreakDMP = document.createParagraph(); - parBreakDMP.setPageBreak(true); - - wordBuilder.addParagraphContent("Datasets", document, ParagraphStyle.HEADER1, BigInteger.ZERO); - // Space below Datasets. - XWPFParagraph parBreakDatasets = document.createParagraph(); +// // DMP info on top of the document. +// wordBuilder.addParagraphContent("Data Management Plan Information", document, ParagraphStyle.HEADER1, BigInteger.ZERO); +// // DMP title custom style. +// wordBuilder.addParagraphContent(dmpEntity.getLabel(), document, ParagraphStyle.HEADER2, BigInteger.ZERO); +// wordBuilder.addParagraphContent(dmpEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO); +// +// wordBuilder.addParagraphContent("Funder", document, ParagraphStyle.HEADER3, BigInteger.ZERO); +// if (dmpEntity.getGrant().getFunder() != null) +// wordBuilder.addParagraphContent(dmpEntity.getGrant().getFunder().getLabel(), document, ParagraphStyle.TEXT, BigInteger.ZERO); +// +// wordBuilder.addParagraphContent("Grant", document, ParagraphStyle.HEADER3, BigInteger.ZERO); +// wordBuilder.addParagraphContent(dmpEntity.getGrant().getLabel(), document, ParagraphStyle.TEXT, BigInteger.ZERO); +// +// wordBuilder.addParagraphContent("Organisations", document, ParagraphStyle.HEADER3, BigInteger.ZERO); +// if (dmpEntity.getOrganisations().size() > 0) { +// wordBuilder.addParagraphContent(dmpEntity.getOrganisations().stream().map(Organisation::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.TEXT, BigInteger.ZERO); +// } +// +// wordBuilder.addParagraphContent("Researchers", document, ParagraphStyle.HEADER3, BigInteger.ZERO); +// if (dmpEntity.getResearchers().size() > 0) { +// wordBuilder.addParagraphContent(dmpEntity.getResearchers().stream().map(Researcher::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.TEXT, BigInteger.ZERO); +// } +// +// /*wordBuilder.addParagraphContent("DMP Profile", document, ParagraphStyle.HEADER2, BigInteger.ZERO); +// if (dmpEntity.getProfile() != null){ +// wordBuilder.addParagraphContent(dmpEntity.getProfile().getLabel(), document, ParagraphStyle.TEXT, BigInteger.ZERO); +// }*/ +// +// // Page break at the end of the DMP title. +// XWPFParagraph parBreakDMP = document.createParagraph(); +// parBreakDMP.setPageBreak(true); +// +// wordBuilder.addParagraphContent("Datasets", document, ParagraphStyle.HEADER1, BigInteger.ZERO); +// // Space below Datasets. +// XWPFParagraph parBreakDatasets = document.createParagraph(); final Boolean isFinalized = dmpEntity.getStatus() == DMP.DMPStatus.FINALISED.getValue(); final Boolean isPublic = dmpEntity.isPublic(); dmpEntity.getDataset().stream() @@ -1251,73 +1253,79 @@ public class DataManagementPlanManager { //wordBuilder.addParagraphContent("Title: " + datasetEntity.getLabel(), document, ParagraphStyle.HEADER1, BigInteger.ZERO); XWPFParagraph datasetLabelParagraph = document.createParagraph(); datasetLabelParagraph.setStyle("Heading2"); + datasetLabelParagraph.setSpacingBetween(1.0); XWPFRun runDatasetTitle1 = datasetLabelParagraph.createRun(); runDatasetTitle1.setText("Title: "); - runDatasetTitle1.setBold(true); - runDatasetTitle1.setFontSize(12); + runDatasetTitle1.setColor("000000"); + //runDatasetTitle1.setBold(true); + //runDatasetTitle1.setFontSize(12); XWPFRun runDatasetTitle = datasetLabelParagraph.createRun(); runDatasetTitle.setText(datasetEntity.getLabel()); - runDatasetTitle.setColor("2E75B6"); - runDatasetTitle.setBold(true); - runDatasetTitle.setFontSize(12); + //runDatasetTitle.setColor("2E75B6"); + //runDatasetTitle.setBold(true); + //runDatasetTitle.setFontSize(12); XWPFParagraph datasetTemplateParagraph = document.createParagraph(); datasetTemplateParagraph.setStyle("Heading3"); XWPFRun runDatasetTemplate1 = datasetTemplateParagraph.createRun(); runDatasetTemplate1.setText("Template: "); - runDatasetTemplate1.setBold(true); - runDatasetTemplate1.setFontSize(12); + runDatasetTemplate1.setColor("000000"); + //runDatasetTemplate1.setBold(true); + //runDatasetTemplate1.setFontSize(12); XWPFRun runDatasetTemplate = datasetTemplateParagraph.createRun(); runDatasetTemplate.setText(datasetEntity.getProfile().getLabel()); - runDatasetTemplate.setColor("2E75B6"); - runDatasetTemplate.setBold(true); - runDatasetTemplate.setFontSize(12); + //runDatasetTemplate.setColor("2E75B6"); + //runDatasetTemplate.setBold(true); + //runDatasetTemplate.setFontSize(12); - /*XWPFParagraph externalReferencesParagraph = document.createParagraph(); - externalReferencesParagraph.setStyle("Heading3"); - XWPFRun externalReferencesRun = externalReferencesParagraph.createRun(); - externalReferencesRun.setText("External References"); - externalReferencesRun.setColor("2E75B6"); - externalReferencesRun.setBold(true); - externalReferencesRun.setFontSize(12); + document.createParagraph(); - wordBuilder.addParagraphContent("Data Repositories", document, ParagraphStyle.HEADER4, BigInteger.ZERO); - if (datasetEntity.getDatasetDataRepositories().size() > 0) { - wordBuilder.addParagraphContent(datasetEntity.getDatasetDataRepositories().stream().map(DatasetDataRepository::getDataRepository).map(DataRepository::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.TEXT, BigInteger.ZERO); - } - wordBuilder.addParagraphContent("External Datasets", document, ParagraphStyle.HEADER4, BigInteger.ZERO); - if (datasetEntity.getDatasetExternalDatasets().size() > 0) { - wordBuilder.addParagraphContent(datasetEntity.getDatasetExternalDatasets().stream().map(DatasetExternalDataset::getExternalDataset).map(ExternalDataset::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.TEXT, BigInteger.ZERO); - } - wordBuilder.addParagraphContent("Registries", document, ParagraphStyle.HEADER4, BigInteger.ZERO); - if (datasetEntity.getRegistries().size() > 0) { - wordBuilder.addParagraphContent(datasetEntity.getRegistries().stream().map(Registry::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.TEXT, BigInteger.ZERO); - } - wordBuilder.addParagraphContent("Services", document, ParagraphStyle.HEADER4, BigInteger.ZERO); - if (datasetEntity.getServices().size() > 0) { - wordBuilder.addParagraphContent(datasetEntity.getServices().stream().map(DatasetService::getService).map(Service::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.TEXT, BigInteger.ZERO); - } - *//*wordBuilder.addParagraphContent("Tags", document, ParagraphStyle.HEADER3, BigInteger.ZERO); - if (datasetEntity.().size() > 0) { - wordBuilder.addParagraphContent(datasetEntity.getServices().stream().map(DatasetService::getService).map(Service::getLabel).collect(Collectors.joining(", ")) - , document, ParagraphStyle.HEADER4, BigInteger.ZERO); - }*/ - - - wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO); +// /*XWPFParagraph externalReferencesParagraph = document.createParagraph(); +// externalReferencesParagraph.setStyle("Heading3"); +// XWPFRun externalReferencesRun = externalReferencesParagraph.createRun(); +// externalReferencesRun.setText("External References"); +// externalReferencesRun.setColor("2E75B6"); +// externalReferencesRun.setBold(true); +// externalReferencesRun.setFontSize(12); +// +// wordBuilder.addParagraphContent("Data Repositories", document, ParagraphStyle.HEADER4, BigInteger.ZERO); +// if (datasetEntity.getDatasetDataRepositories().size() > 0) { +// wordBuilder.addParagraphContent(datasetEntity.getDatasetDataRepositories().stream().map(DatasetDataRepository::getDataRepository).map(DataRepository::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.TEXT, BigInteger.ZERO); +// } +// wordBuilder.addParagraphContent("External Datasets", document, ParagraphStyle.HEADER4, BigInteger.ZERO); +// if (datasetEntity.getDatasetExternalDatasets().size() > 0) { +// wordBuilder.addParagraphContent(datasetEntity.getDatasetExternalDatasets().stream().map(DatasetExternalDataset::getExternalDataset).map(ExternalDataset::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.TEXT, BigInteger.ZERO); +// } +// wordBuilder.addParagraphContent("Registries", document, ParagraphStyle.HEADER4, BigInteger.ZERO); +// if (datasetEntity.getRegistries().size() > 0) { +// wordBuilder.addParagraphContent(datasetEntity.getRegistries().stream().map(Registry::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.TEXT, BigInteger.ZERO); +// } +// wordBuilder.addParagraphContent("Services", document, ParagraphStyle.HEADER4, BigInteger.ZERO); +// if (datasetEntity.getServices().size() > 0) { +// wordBuilder.addParagraphContent(datasetEntity.getServices().stream().map(DatasetService::getService).map(Service::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.TEXT, BigInteger.ZERO); +// } +// *//*wordBuilder.addParagraphContent("Tags", document, ParagraphStyle.HEADER3, BigInteger.ZERO); +// if (datasetEntity.().size() > 0) { +// wordBuilder.addParagraphContent(datasetEntity.getServices().stream().map(DatasetService::getService).map(Service::getLabel).collect(Collectors.joining(", ")) +// , document, ParagraphStyle.HEADER4, BigInteger.ZERO); +// }*/ +// +// +// wordBuilder.addParagraphContent(datasetEntity.getDescription(), document, ParagraphStyle.HTML, BigInteger.ZERO); // Dataset Description custom style. XWPFParagraph datasetDescriptionParagraph = document.createParagraph(); datasetDescriptionParagraph.setStyle("Heading3"); + datasetDescriptionParagraph.setSpacingBetween(1.5); XWPFRun datasetDescriptionRun = datasetDescriptionParagraph.createRun(); datasetDescriptionRun.setText("Dataset Description"); - datasetDescriptionRun.setColor("2E75B6"); - datasetDescriptionRun.setBold(true); - datasetDescriptionRun.setFontSize(12); + //datasetDescriptionRun.setColor("2E75B6"); + //datasetDescriptionRun.setBold(true); + datasetDescriptionRun.setFontSize(15); PagedDatasetProfile pagedDatasetProfile = datasetManager.getPagedProfile(dataset, datasetEntity); visibilityRuleService.setProperties(properties); @@ -1329,12 +1337,15 @@ public class DataManagementPlanManager { } // Page break at the end of the Dataset. XWPFParagraph parBreakDataset = document.createParagraph(); + parBreakDataset.setPageBreak(true); }); - // Removes the top empty headings. - for (int i = 0; i < 6; i++) { - document.removeBodyElement(0); - } +// // Removes the top empty headings. +// for (int i = 0; i < 6; i++) { +// document.removeBodyElement(0); +// } + + wordBuilder.fillFooter(dmpEntity, document); String fileName = "DMP_" + dmpEntity.getGrant().getLabel(); if (versioned) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index 182cc8592..94912f9b9 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -1,7 +1,11 @@ package eu.eudat.logic.utilities.documents.word; +import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; +import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.Organisation; +import eu.eudat.data.entities.Researcher; import eu.eudat.logic.services.forms.VisibilityRuleService; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; import eu.eudat.logic.utilities.interfaces.ApplierWithValue; @@ -31,6 +35,8 @@ import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.math.BigInteger; +import java.text.DateFormat; +import java.text.SimpleDateFormat; import java.time.Instant; import java.time.LocalDate; import java.time.ZoneId; @@ -282,7 +288,7 @@ public class WordBuilder { boolean hasMultiplicityItems = false; int paragraphPos = -1; if (compositeField.getTitle() != null && !compositeField.getTitle().isEmpty() && !createListing) { - XWPFParagraph paragraph = addParagraphContent(page + "." + section + "." + (compositeField.getOrdinal() +1) + " " + compositeField.getTitle(), mainDocumentPart, ParagraphStyle.HEADER6, numId); + XWPFParagraph paragraph = addParagraphContent("\t" + page + "." + section + "." + (compositeField.getOrdinal() +1) + " " + compositeField.getTitle(), mainDocumentPart, ParagraphStyle.HEADER6, numId); CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); number.setVal(BigInteger.valueOf(indent)); paragraphPos = mainDocumentPart.getPosOfParagraph(paragraph); @@ -361,6 +367,7 @@ public class WordBuilder { } else if (field.getViewStyle().getRenderStyle().equals("combobox") && field.getData() instanceof AutoCompleteData) { format = getCommaSeparatedFormatsFromJson(format, "label"); } + boolean isResearcher = field.getViewStyle().getRenderStyle().equals("researchers"); if(format != null && !format.isEmpty()){ Object hasMultiAutoComplete = mapper.convertValue(field.getData(), Map.class).get("multiAutoComplete"); boolean isMultiAutoComplete = hasMultiAutoComplete != null && (boolean)hasMultiAutoComplete; @@ -368,14 +375,36 @@ public class WordBuilder { if(arrayStringFormat || isMultiAutoComplete){ List values = (arrayStringFormat) ? Arrays.asList(format.substring(1, format.length() - 1).split(",[ ]*")) : Arrays.asList(format.split(",[ ]*")); if(values.size() > 1) { + boolean orcidResearcher; for (String val : values) { + orcidResearcher = false; + String orcId = null; + if(isResearcher && val.contains("orcid:")){ + orcId = val.substring(val.indexOf(':') + 1, val.indexOf(')')); + val = val.substring(0, val.indexOf(':') + 1); + orcidResearcher = true; + } format = "• " + val; if(hasMultiplicityItems){ mainDocumentPart.getLastParagraph().createRun().setText(format); + if(orcidResearcher){ + XWPFHyperlinkRun run = mainDocumentPart.getLastParagraph().createHyperlinkRun("https://orcid.org/" + orcId); + run.setText(orcId); + run.setUnderline(UnderlinePatterns.SINGLE); + run.setColor("0000FF"); + mainDocumentPart.getLastParagraph().createRun().setText(")"); + } hasMultiplicityItems = false; } else{ XWPFParagraph paragraph = addParagraphContent(format, mainDocumentPart, field.getViewStyle().getRenderStyle().equals("richTextarea") ? ParagraphStyle.HTML : ParagraphStyle.TEXT, numId); + if(orcidResearcher){ + XWPFHyperlinkRun run = paragraph.createHyperlinkRun("https://orcid.org/" + orcId); + run.setText(orcId); + run.setUnderline(UnderlinePatterns.SINGLE); + run.setColor("0000FF"); + paragraph.createRun().setText(")"); + } if (paragraph != null) { CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); number.setVal(BigInteger.valueOf(indent)); @@ -390,7 +419,7 @@ public class WordBuilder { } } } - if(hasMultiplicityItems){ + if(hasMultiplicityItems && format != null){ mainDocumentPart.getLastParagraph().createRun().setText(format); hasMultiplicityItems = false; } @@ -600,4 +629,97 @@ public class WordBuilder { } return result; } + + public void fillFirstPage(DMP dmpEntity, XWPFDocument document) { + 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.VERSION}")){ + text = text.replace("{ARGOS.DMP.VERSION}", "VERSION " + dmpEntity.getVersion()); + r.setText(text, 0); + } + else if(text.contains("{ARGOS.DMP.FUNDER}")){ + text = text.replace("{ARGOS.DMP.FUNDER}", dmpEntity.getGrant().getFunder().getLabel()); + r.setText(text, 0); + } + else if(text.contains("{ARGOS.DMP.GRANT}")){ + text = text.replace("{ARGOS.DMP.GRANT}", dmpEntity.getGrant().getLabel()); + r.setText(text, 0); + } + } + } + } + } + + int researchers = dmpEntity.getResearchers().size(); + int organizations = dmpEntity.getOrganisations().size(); + if(researchers > 0 || organizations > 0){ + XWPFTable tbl = document.getTables().get(0); + for(int i = (Integer.max(researchers, organizations) - 1); i > 0; i--) + tbl.createRow(); + Iterator it = tbl.getRows().iterator(); + it.next(); // skip first row + for(Researcher researcher : dmpEntity.getResearchers()){ + if(it.hasNext()){ + XWPFRun run = it.next().getCell(0).getParagraphs().get(0).createRun(); + run.setText(researcher.getLabel()); + run.setFontSize(17); + } + } + it = tbl.getRows().iterator(); + it.next(); + for(Organisation organisation : dmpEntity.getOrganisations()){ + if(it.hasNext()){ + XWPFParagraph p = it.next().getCell(1).getParagraphs().get(0); + XWPFRun run = p.createRun(); + run.setText(organisation.getLabel()); + run.setFontSize(17); + p.setAlignment(ParagraphAlignment.RIGHT); + } + } + } + } + + public void fillFooter(DMP dmpEntity, XWPFDocument document) { + document.getFooterList().forEach(xwpfFooter -> { + List runs = xwpfFooter.getParagraphs().get(0).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); + } + if(text.contains("{ARGOS.DMP.LICENSE}")){ + try{ + Map license = ((Map) mapper.readValue(dmpEntity.getExtraProperties(), Map.class).get("license")); + text = text.replace("{ARGOS.DMP.LICENSE}", license.get("pid")); + } + catch (JsonProcessingException | NullPointerException e){ + text = text.replace("{ARGOS.DMP.LICENSE}", "License: -"); + } + r.setText(text, 0); + } + if(text.contains("{ARGOS.DMP.DOI}")){ + String doi = dmpEntity.getDoi(); + if(doi != null) + text = text.replace("{ARGOS.DMP.DOI}", doi); + else + text = text.replace("{ARGOS.DMP.DOI}", "-"); + r.setText(text, 0); + } + if(text.contains("{ARGOS.DMP.LAST_MODIFIED}")){ + DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy"); + text = text.replace("{ARGOS.DMP.LAST_MODIFIED}", formatter.format(dmpEntity.getModified())); + r.setText(text, 0); + } + } + } + } + }); + } } diff --git a/dmp-backend/web/src/main/resources/documents/h2020.docx b/dmp-backend/web/src/main/resources/documents/h2020.docx index be91c70f9acbfa15612a111f98a9cf9c8ddb3c55..ad2567ceff539b6bfa0a427b7288b20ae7134f34 100644 GIT binary patch delta 39042 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 #3+4noI%Bu6ve=WZ4w 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 delta 11637 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 From 772a0418513599b056c3e632c0049e413889a434 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Tue, 14 Jun 2022 10:14:48 +0300 Subject: [PATCH 5/7] WordBuilder.java: #7837 - In exported file add comment filed as ParagraphStyle.HTML instead of ParagraphStyle.COMMENT. --- .../eu/eudat/logic/utilities/documents/word/WordBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index 94912f9b9..6fed9aae4 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -316,7 +316,7 @@ public class WordBuilder { } } if (hasValue && compositeField.getHasCommentField() && compositeField.getCommentFieldValue() != null && !compositeField.getCommentFieldValue().isEmpty() && !createListing) { - XWPFParagraph paragraph = addParagraphContent("Comment: " + compositeField.getCommentFieldValue(), mainDocumentPart, ParagraphStyle.COMMENT, numId); + XWPFParagraph paragraph = addParagraphContent("Comment:\n"+compositeField.getCommentFieldValue(), mainDocumentPart, ParagraphStyle.HTML, numId); CTDecimalNumber number = paragraph.getCTP().getPPr().getNumPr().addNewIlvl(); number.setVal(BigInteger.valueOf(indent)); } From 9c4d246ef5872da93669761672e0f4faa55c51b3 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 14 Jun 2022 10:24:35 +0300 Subject: [PATCH 6/7] heading changes on export template --- .../utilities/documents/word/WordBuilder.java | 12 ++++++------ .../src/main/resources/documents/h2020.docx | Bin 43707 -> 43734 bytes 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java index 94912f9b9..359d4d3d2 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/word/WordBuilder.java @@ -82,7 +82,7 @@ public class WordBuilder { XWPFParagraph paragraph = mainDocumentPart.createParagraph(); XWPFRun run = paragraph.createRun(); if (item != null) - run.setText(" " + item); + run.setText("" + item); run.setFontSize(11); return paragraph; }); @@ -115,7 +115,7 @@ public class WordBuilder { XWPFParagraph paragraph = mainDocumentPart.createParagraph(); paragraph.setStyle("Heading2"); XWPFRun run = paragraph.createRun(); - run.setText(" " + item); + run.setText("" + item); // run.setBold(true); // run.setFontSize(12); return paragraph; @@ -124,7 +124,7 @@ public class WordBuilder { XWPFParagraph paragraph = mainDocumentPart.createParagraph(); paragraph.setStyle("Heading3"); XWPFRun run = paragraph.createRun(); - run.setText(" " + item); + run.setText("" + item); // run.setBold(true); // run.setFontSize(11); return paragraph; @@ -140,14 +140,14 @@ public class WordBuilder { XWPFParagraph paragraph = mainDocumentPart.createParagraph(); paragraph.setStyle("Heading5"); XWPFRun run = paragraph.createRun(); - run.setText(" " + item); + run.setText("" + item); return paragraph; }); this.options.put(ParagraphStyle.HEADER6, (mainDocumentPart, item) -> { XWPFParagraph paragraph = mainDocumentPart.createParagraph(); paragraph.setStyle("Heading6"); XWPFRun run = paragraph.createRun(); - run.setText(" " + item); + run.setText("" + item); return paragraph; }); this.options.put(ParagraphStyle.FOOTER, (mainDocumentPart, item) -> { @@ -159,7 +159,7 @@ public class WordBuilder { this.options.put(ParagraphStyle.COMMENT, (mainDocumentPart, item) -> { XWPFParagraph paragraph = mainDocumentPart.createParagraph(); XWPFRun run = paragraph.createRun(); - run.setText(" " + item); + run.setText("" + item); run.setItalic(true); return paragraph; }); diff --git a/dmp-backend/web/src/main/resources/documents/h2020.docx b/dmp-backend/web/src/main/resources/documents/h2020.docx index ad2567ceff539b6bfa0a427b7288b20ae7134f34..3b30f8d94847f81ab495f99ccdf97757c08544e2 100644 GIT binary patch delta 7579 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 J=7N8e{s)37vDE+o delta 7548 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 Z1}c|;Ux8Vci^HS9a>{v7u!{c5{s*5hb*}&b From 2ecce0acb07dcf7c641c030984bec9200d57f8cb Mon Sep 17 00:00:00 2001 From: Diamantis Tziotzios Date: Tue, 14 Jun 2022 14:22:59 +0300 Subject: [PATCH 7/7] elastic conf changes --- .../main/resources/config/application-devel.properties | 3 --- .../src/main/resources/config/application.properties | 10 ++++++++++ 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/dmp-backend/web/src/main/resources/config/application-devel.properties b/dmp-backend/web/src/main/resources/config/application-devel.properties index 8ae02affd..396776273 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ b/dmp-backend/web/src/main/resources/config/application-devel.properties @@ -14,9 +14,6 @@ elasticsearch.port = 9200 elasticsearch.username=elastic elasticsearch.password= elasticsearch.index=dmps -elasticsearch.usingssl=false -elasticsearch.certPath = -elasticsearch.certKey = ####################ELK OVERRIDES CONFIGURATIONS########## http-logger.server-address = http://localhost:31311 diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties index e6d2f9a93..dafa101e4 100644 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ b/dmp-backend/web/src/main/resources/config/application.properties @@ -36,6 +36,16 @@ spring.mail.test-connection=false spring.mail.properties.mail.smtp.auth=false spring.mail.properties.mail.smtp.starttls.enable=false +####################ELASTIIC SEARCH TAGS OVERRIDES CONFIGURATIONS########## +elasticsearch.host= +elasticsearch.port= +elasticsearch.username= +elasticsearch.password= +elasticsearch.index= +elasticsearch.usingssl=false +elasticsearch.certPath= +elasticsearch.certKey= + ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.rda=RDACommonStandards.txt