From e22e348330504f243c96d2bb9fab40ef42cab468 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 21 Feb 2023 11:41:07 +0200 Subject: [PATCH 01/16] cleanup unused code --- .../main/java/eu/eudat/controllers/DMPs.java | 19 +--- .../java/eu/eudat/controllers/Datasets.java | 2 +- .../managers/DataManagementPlanManager.java | 71 --------------- .../src/app/core/services/dmp/dmp.service.ts | 4 - .../ui/dmp/overview/dmp-overview.component.ts | 86 ------------------- 5 files changed, 2 insertions(+), 180 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index efc212e5e..3e421e8fc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -9,12 +9,10 @@ import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.Dataset; import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.data.query.items.table.dmp.DataManagementPlanTableRequest; -import eu.eudat.data.query.items.table.dmp.DataManagmentPlanPublicTableRequest; import eu.eudat.exceptions.datamanagementplan.DMPNewVersionException; import eu.eudat.exceptions.datamanagementplan.DMPWithDatasetsDeleteException; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.managers.DataManagementPlanManager; -import eu.eudat.logic.managers.DatasetManager; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.security.claims.ClaimedAuthorities; import eu.eudat.logic.services.ApiContext; @@ -152,7 +150,7 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/publicOverview/{id}"}) public @ResponseBody - ResponseEntity getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { + ResponseEntity> getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { // try { DataManagementPlanOverviewModel dataManagementPlan = this.dataManagementPlanManager.getOverviewSingle(id, principal, true); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(dataManagementPlan)); @@ -321,21 +319,6 @@ public class DMPs extends BaseController { } } - /* - * DOI Generation - * */ - - @RequestMapping(method = RequestMethod.POST, value = {"/createZenodoDoi/{id}"}) - public ResponseEntity> createZenodoDoi(@PathVariable String id, Principal principal) { - try { - String zenodoDOI = this.dataManagementPlanManager.createZenodoDoi(UUID.fromString(id), principal); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).message("Successfully created DOI for Data Datamanagement Plan in question.").payload(zenodoDOI)); - } catch (Exception e) { - logger.error(e.getMessage(), e); - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message("Failed to create DOI for the Data Management Plan: " + e.getMessage())); - } - } - /* * Data Index * */ diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java index 94a17913b..8c5b003fa 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Datasets.java @@ -117,7 +117,7 @@ public class Datasets extends BaseController { @RequestMapping(method = RequestMethod.GET, value = {"/publicOverview/{id}"}) public @ResponseBody - ResponseEntity getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { + ResponseEntity> getOverviewSinglePublic(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) throws Exception { // try { DatasetOverviewModel dataset = this.datasetManager.getOverviewSingle(id, principal, true); return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).payload(dataset)); 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 25ab0217a..02c05a5a2 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 @@ -1064,9 +1064,6 @@ public class DataManagementPlanManager { }); UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); sendNotification(dmp, user, NotificationType.DMP_PUBLISH); -// if (dmp.getDois() != null && !dmp.getDois().isEmpty()) { -// this.createZenodoDoi(dmp.getId(), principal, true); -// } } @Transactional @@ -2067,74 +2064,6 @@ public class DataManagementPlanManager { } } - public String createZenodoDoi(UUID id, Principal principal) throws Exception { - return this.createZenodoDoi(id, principal, false); - } - - public String createZenodoDoi(UUID id, Principal principal, boolean update) throws Exception { - DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(id); - if (!isUserOwnerOfDmp(dmp, principal)) - throw new Exception("User is not authorized to invoke this action"); - if (!dmp.getStatus().equals(DMP.DMPStatus.FINALISED.getValue())) - throw new Exception("DMP is not finalized"); - /*if (dmp.getDoi() != null) - throw new Exception("DMP already has a DOI");*/ - - FileEnvelope file = getWordDocument(id.toString(), principal, configLoader); - String name = file.getFilename().substring(0, file.getFilename().length() - 5); - File pdfFile = PDFUtils.convertToPDF(file, environment); - String fileName = name + ".pdf"; - ResponseEntity jsonFile; - try { - jsonFile = getRDAJsonDocument(id.toString(), principal); - } catch (Exception e) { - throw e; - } - String previousDOI = this.getPreviousDOI(dmp.getGroupId(), dmp.getId(), "Zenodo"); - - File supportingFilesZip = this.createSupportingFilesZip(dmp); - - DMPDepositModel dmpDepositModel = DMPToDepositMapper.fromDMP(dmp, pdfFile, fileName, jsonFile, supportingFilesZip, previousDOI); - - String zenodoToken = ""; - try { - if (this.userManager.isDOITokenValid(principal)) { - zenodoToken = principal.getZenodoToken(); - } - } catch (NonValidTokenException e) { - zenodoToken = this.environment.getProperty("zenodo.access_token"); - } - - String finalDoi = null; - for(RepositoryDeposit repo: this.repositoriesDeposit) { //temp - if(repo.getConfiguration().getRepositoryId().equals("Zenodo")) { - finalDoi = repo.deposit(dmpDepositModel, zenodoToken); - if (finalDoi != null) { - EntityDoi doiEntity = new EntityDoi(); - doiEntity.setId(UUID.randomUUID()); - doiEntity.setEntityType(EntityDoi.EntityType.DMP); - doiEntity.setDoi(finalDoi); - doiEntity.setRepositoryId("Zenodo"); - Date now = new Date(); - doiEntity.setCreatedAt(now); - doiEntity.setUpdatedAt(now); - doiEntity.setEntityId(dmp); - apiContext.getOperationsContext().getDatabaseRepository().getEntityDoiDao().createOrUpdate(doiEntity); - - dmp.getDois().add(doiEntity); - apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(dmp); - } - } - } - if(supportingFilesZip != null) { - Files.deleteIfExists(supportingFilesZip.toPath()); - } - Files.deleteIfExists(pdfFile.toPath()); - Files.deleteIfExists(file.getFile().toPath()); - - return finalDoi; - } - public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception { DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId())); if (!isUserOwnerOfDmp(dmp, principal)) diff --git a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts index ce1bc9d0d..c85650c00 100644 --- a/dmp-frontend/src/app/core/services/dmp/dmp.service.ts +++ b/dmp-frontend/src/app/core/services/dmp/dmp.service.ts @@ -114,10 +114,6 @@ export class DmpService { return this.http.post(`${this.actionUrl}updateusers/${id}`, users, { headers: this.headers }); } - getDoi(id: string): Observable { - return this.http.post(this.actionUrl + 'createZenodoDoi/' + id, { headers: this.headers }); - } - getDynamicField(requestItem: RequestItem): any { return this.http.post(this.actionUrl + 'dynamic', requestItem, { headers: this.headers }); } diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts index 6e83b0dcf..ea14b095e 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts @@ -838,90 +838,4 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit { // return url; // } - // getDoi(dmp: DmpOverviewModel) { - // this.userService.hasDOIToken().subscribe(response => { - // this.hasDOIToken = true; - // this.showConfirmationDOIDialog(dmp); - // }, error => { - // this.hasDOIToken = false; - // this.showErrorConfirmationDOIDialog(error.error.message, dmp); - // }); - // } - - // showConfirmationDOIDialog(dmp: DmpOverviewModel) { - // const dialogRef = this.dialog.open(ConfirmationDialogComponent, { - // maxWidth: '600px', - // restoreFocus: false, - // data: { - // message: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ZENODO-DOI', { 'username': this.hasDOIToken ? this.authentication.current().zenodoEmail : 'default' }), - // confirmButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CONFIRM'), - // cancelButton: this.language.instant('GENERAL.CONFIRMATION-DIALOG.ACTIONS.CANCEL'), - // } - // }); - // dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { - // if (result) { - // this.dmpService.getDoi(dmp.id) - // .pipe(takeUntil(this._destroyed)) - // .subscribe( - // complete => { - // this.onDOICallbackSuccess(); - // this.dmp.doi = complete; - // }, - // error => this.onDeleteCallbackError(error) - // ); - // } - // }); - // } - - // showErrorConfirmationDOIDialog(message: string, dmp: DmpOverviewModel) { - // const dialogRef = this.dialog.open(MultipleChoiceDialogComponent, { - // maxWidth: '600px', - // restoreFocus: false, - // data: { - // message: message ? this.language.instant(message) : this.language.instant('GENERAL.ERRORS.HTTP-REQUEST-ERROR'), - // titles: [this.language.instant('DMP-OVERVIEW.MULTIPLE-DIALOG.ZENODO-LOGIN'), this.language.instant('DMP-OVERVIEW.MULTIPLE-DIALOG.USE-DEFAULT')] - // } - // }); - // dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(result => { - // switch (result) { - // case 0: - // // this.authentication.logout(); - // // this.router.navigate(['/login/external/zenodo']); - // this.showOauth2Dialog(this.getAccessUrl(), dmp); - // break; - // case 1: - // this.showConfirmationDOIDialog(dmp); - // break; - // } - // }); - // } - - // showOauth2Dialog(url: string, dmp: DmpOverviewModel) { - // this.oauth2DialogService.login(url) - // .pipe(takeUntil(this._destroyed)) - // .subscribe(result => { - // if (result !== undefined) { - // if (result.oauthCode !== undefined && result.oauthCode !== null && !this.oauthLock) { - // this.userService.registerDOIToken(result.oauthCode, this.configurationService.app + 'oauth2') - // .pipe(takeUntil(this._destroyed)) - // .subscribe(() => { - // this.hasDOIToken = true; - // this.showConfirmationDOIDialog(dmp); - // }); - // this.oauthLock = true; - // } - // } else { - // this.oauthLock = false; - // } - // }); - // } - - // onDOICallbackSuccess(): void { - // this.uiNotificationService.snackBarNotification(this.language.instant('DMP-EDITOR.SNACK-BAR.SUCCESSFUL-DOI'), SnackBarNotificationLevel.Success); - // } - - // onDOICallbackError(error) { - // this.uiNotificationService.snackBarNotification(error.error.message ? error.error.message : this.language.instant('DMP-EDITOR.SNACK-BAR.UNSUCCESSFUL-DOI'), SnackBarNotificationLevel.Error); - // } - } From 9a8fc5e92e85643efc6de1ba45ff596566fcab12 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 21 Feb 2023 11:46:44 +0200 Subject: [PATCH 02/16] schematics implementation, xml import export of dataset profiles --- .../main/java/eu/eudat/controllers/Admin.java | 6 + .../logic/managers/DatasetProfileManager.java | 15 +- .../eudat/logic/proxy/config/Schematic.java | 25 ++ .../config/configloaders/ConfigLoader.java | 2 + .../configloaders/DefaultConfigLoader.java | 24 ++ .../ExportXmlBuilderDatasetProfile.java | 9 + .../datasetProfileModel/Fields/Field.java | 18 + .../datasetProfileModel/Fields/Schematic.java | 19 + .../Fields/Schematics.java | 20 ++ .../components/datasetprofile/Field.java | 10 + .../datasetprofiledefinition/Field.java | 28 ++ .../user/components/datasetprofile/Field.java | 12 + .../web/src/main/resources/Schematics.json | 330 ++++++++++++++++++ .../config/application-devel.properties | 1 + .../resources/config/application.properties | 1 + .../admin/dataset-profile/dataset-profile.ts | 1 + .../dataset-profile.service.ts | 4 + .../admin/field-editor-model.ts | 3 + ...ataset-profile-editor-field.component.html | 10 +- .../dataset-profile-editor-field.component.ts | 15 +- .../src/assets/resources/skipDisable.json | 1 + 21 files changed, 545 insertions(+), 9 deletions(-) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Schematic.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematic.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematics.java create mode 100644 dmp-backend/web/src/main/resources/Schematics.json diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java index 7a7e32a19..905ac88e3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java @@ -194,4 +194,10 @@ public class Admin extends BaseController { public ResponseEntity getRDACommonStandards(@ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(configLoader.getRdaProperties())); } + + @RequestMapping(method = RequestMethod.GET, value = {"/getSchematics"}, produces = "application/json") + public ResponseEntity>> getSchematics(@RequestParam(value = "query", required = false) String query, @ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) { + List schematics = this.datasetProfileManager.getSchematics(query); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(schematics)); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index c34231f90..12fd713ed 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -10,6 +10,8 @@ import eu.eudat.data.query.items.item.datasetprofile.DatasetProfileAutocompleteR import eu.eudat.data.query.items.table.datasetprofile.DatasetProfileTableRequestItem; import eu.eudat.exceptions.datasetprofile.DatasetProfileNewVersionException; import eu.eudat.logic.builders.model.models.DataTableDataBuilder; +import eu.eudat.logic.proxy.config.Schematic; +import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.logic.utilities.builders.XmlBuilder; @@ -62,14 +64,16 @@ public class DatasetProfileManager { private ApiContext apiContext; private DatabaseRepository databaseRepository; private Environment environment; + private ConfigLoader configLoader; private final MetricsManager metricsManager; @Autowired - public DatasetProfileManager(ApiContext apiContext, Environment environment, MetricsManager metricsManager) { + public DatasetProfileManager(ApiContext apiContext, Environment environment, ConfigLoader configLoader, MetricsManager metricsManager) { this.apiContext = apiContext; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); this.environment = environment; + this.configLoader = configLoader; this.metricsManager = metricsManager; } @@ -363,4 +367,13 @@ public class DatasetProfileManager { } } + + public List getSchematics(String query) { + List schematics = configLoader.getSchematics(); + List filteredSchematics = schematics.stream().map(Schematic::getName).collect(Collectors.toList()); + if(query != null && !query.isEmpty()){ + filteredSchematics = schematics.stream().filter(x -> x.getCategory().contains(query) || x.getName().contains(query)).map(Schematic::getName).collect(Collectors.toList()); + } + return filteredSchematics; + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Schematic.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Schematic.java new file mode 100644 index 000000000..8904ce91e --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/Schematic.java @@ -0,0 +1,25 @@ +package eu.eudat.logic.proxy.config; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class Schematic { + + @JsonProperty("category") + private String category; + @JsonProperty("name") + private String name; + + public String getCategory() { + return category; + } + public void setCategory(String category) { + this.category = category; + } + + public String getName() { + return name; + } + public void setName(String name) { + this.name = name; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java index 175442eda..7f12daa06 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java @@ -1,6 +1,7 @@ package eu.eudat.logic.proxy.config.configloaders; import eu.eudat.logic.proxy.config.ExternalUrls; +import eu.eudat.logic.proxy.config.Schematic; import eu.eudat.logic.security.customproviders.ConfigurableProvider.entities.ConfigurableProviders; import org.apache.poi.xwpf.usermodel.XWPFDocument; @@ -10,6 +11,7 @@ import java.util.Map; public interface ConfigLoader { ExternalUrls getExternalUrls(); List getRdaProperties(); + List getSchematics(); XWPFDocument getDocument(); XWPFDocument getDatasetDocument(); ConfigurableProviders getConfigurableProviders(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java index 36c6d3ac3..ee196de25 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java @@ -1,8 +1,10 @@ package eu.eudat.logic.proxy.config.configloaders; +import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.logic.proxy.config.ExternalUrls; +import eu.eudat.logic.proxy.config.Schematic; import eu.eudat.logic.security.customproviders.ConfigurableProvider.entities.ConfigurableProviders; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.slf4j.Logger; @@ -36,6 +38,7 @@ public class DefaultConfigLoader implements ConfigLoader { private ExternalUrls externalUrls; private List rdaProperties; + private List schematics; private XWPFDocument document; private XWPFDocument datasetDocument; private ConfigurableProviders configurableProviders; @@ -84,6 +87,19 @@ public class DefaultConfigLoader implements ConfigLoader { rdaProperties = rdaList; } + private void setSchematics() { + String filePath = environment.getProperty("configuration.schematics"); + logger.info("Loaded also config file: " + filePath); + if (filePath != null) { + try { + schematics = mapper.readValue(getStreamFromPath(filePath), new TypeReference>(){}); + } + catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + } + private void setDocument() { String filePath = environment.getProperty("configuration.h2020template"); logger.info("Loaded also config file: " + filePath); @@ -179,6 +195,14 @@ public class DefaultConfigLoader implements ConfigLoader { return rdaProperties; } + public List getSchematics() { + if (schematics == null) { + schematics = new ArrayList<>(); + this.setSchematics(); + } + return schematics; + } + public XWPFDocument getDocument() { this.setDocument(); return document; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java index 2cf12e68d..7f4442e5f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java @@ -169,6 +169,15 @@ public class ExportXmlBuilderDatasetProfile { rdaProperty.setTextContent(field.getRdaProperty()); elementField.appendChild(rdaProperty); } + if (field.getSchematics() != null) { + Element schematics = element.createElement("schematics"); + field.getSchematics().forEach(schematic -> { + Element schematicChild = element.createElement("schematic"); + schematicChild.setTextContent(schematic); + schematics.appendChild(schematicChild); + }); + elementField.appendChild(schematics); + } if (field.getValidations() != null) { Element validations = element.createElement("validations"); field.getValidations().forEach(validation -> { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java index 89e66e869..e6527bc9f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java @@ -31,6 +31,8 @@ public class Field { private String rdaProperty; + private Schematics schematics; + @XmlAttribute(name = "id") public String getId() { return id; @@ -112,6 +114,14 @@ public class Field { this.rdaProperty = rdaProperty; } + @XmlElement(name = "schematics") + public Schematics getSchematics() { + return schematics; + } + + public void setSchematics(Schematics schematics) { + this.schematics = schematics; + } public eu.eudat.models.data.admin.components.datasetprofile.Field toAdminCompositeModelSection() { eu.eudat.models.data.admin.components.datasetprofile.Field fieldEntity =new eu.eudat.models.data.admin.components.datasetprofile.Field(); @@ -132,6 +142,14 @@ public class Field { fieldEntity.setData(data.toMap((Element) this.data)); } fieldEntity.setRdaCommonStandard(this.rdaProperty); + List schematicsList = new LinkedList<>(); + if (this.schematics != null && this.schematics.getSchematics() != null) { + for (Schematic schematic : this.schematics.getSchematics()) { + if (schematic != null && schematic.getSchematic() != null && !schematic.getSchematic().isEmpty()) + schematicsList.add(schematic.getSchematic()); + } + } + fieldEntity.setSchematics(schematicsList); return fieldEntity; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematic.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematic.java new file mode 100644 index 000000000..f960693e8 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematic.java @@ -0,0 +1,19 @@ +package eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.Fields; + +import javax.xml.bind.annotation.XmlRootElement; +import javax.xml.bind.annotation.XmlValue; + +@XmlRootElement(name = "schematic") +public class Schematic { + + private String schematic; + + @XmlValue + public String getSchematic() { + return schematic; + } + public void setSchematic(String schematic) { + this.schematic = schematic; + } + +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematics.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematics.java new file mode 100644 index 000000000..e098752ca --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Schematics.java @@ -0,0 +1,20 @@ +package eu.eudat.logic.utilities.documents.xml.datasetProfileXml.datasetProfileModel.Fields; + +import javax.xml.bind.annotation.XmlElement; +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +@XmlRootElement(name = "schematics") +public class Schematics { + + private List schematics; + + @XmlElement(name = "schematic") + public List getSchematics() { + return schematics; + } + + public void setSchematics(List schematics) { + this.schematics = schematics; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java index f9c29e236..2d1e053c3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java @@ -46,6 +46,7 @@ public class Field implements ViewStyleDefinition schematics; private String value; private ViewStyle viewStyle; private String datatype; @@ -77,6 +78,13 @@ public class Field implements ViewStyleDefinition getSchematics() { + return schematics; + } + public void setSchematics(List schematics) { + this.schematics = schematics; + } + public String getValue() { return value; } @@ -153,6 +161,7 @@ public class Field implements ViewStyleDefinition schematics; private String numbering; private ViewStyle viewStyle; private DefaultValue defaultValue; @@ -49,6 +50,13 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable getSchematics() { + return schematics; + } + public void setSchematics(List schematics) { + this.schematics = schematics; + } + public ViewStyle getViewStyle() { return viewStyle; } @@ -108,6 +116,13 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable(); + Element schematics = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "schematics"); + if(schematics != null){ + NodeList schematicElements = schematics.getChildNodes(); + for (int temp = 0; temp < schematicElements.getLength(); temp++) { + Node schematicElement = schematicElements.item(temp); + if (schematicElement.getNodeType() == Node.ELEMENT_NODE) { + this.schematics.add(schematicElement.getTextContent()); + } + } + } + Element dataElement = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "data"); Element defaultValue = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "defaultValue"); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java index 8bd186cd4..2205e9f18 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java @@ -40,6 +40,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin private List validations; private Visibility visible; private String rdaProperty; + private List schematics; private Boolean export; @@ -162,6 +163,14 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin this.rdaProperty = rdaProperty; } + public List getSchematics() { + return schematics; + } + + public void setSchematics(List schematics) { + this.schematics = schematics; + } + public Boolean getExport() { return export; } @@ -182,6 +191,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin newField.data = this.data; newField.validations = this.validations; newField.rdaProperty = this.rdaProperty; + newField.schematics = this.schematics; newField.numbering = "mult" + index + "_" + this.numbering; newField.export = this.export; return newField; @@ -197,6 +207,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin field.setVisible(this.visible); field.setValidations(this.validations); field.setRdaCommonStandard(this.rdaProperty); + field.setSchematics(this.schematics); field.setExport(this.export); return field; } @@ -212,6 +223,7 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin this.visible = item.getVisible(); this.validations = item.getValidations(); this.rdaProperty = item.getRdaCommonStandard(); + this.schematics = item.getSchematics(); this.export = item.getExport(); } diff --git a/dmp-backend/web/src/main/resources/Schematics.json b/dmp-backend/web/src/main/resources/Schematics.json new file mode 100644 index 000000000..78e22f26f --- /dev/null +++ b/dmp-backend/web/src/main/resources/Schematics.json @@ -0,0 +1,330 @@ +[ + { + "category": "rda", + "name": "rda.dataset.data_quality_assurance" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.access_url" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.available_until" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.byte_size" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.data_access" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.description" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.download_url" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.format" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.availability" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.backup_frequency" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.backup_type" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.certified_with" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.description" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.geo_location" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.pid_system" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.storage_type" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.supports_versioning" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.title" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.host.url" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.license.license_ref" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.license.start_date" + }, + { + "category": "rda", + "name": "rda.dataset.distribution.title" + }, + { + "category": "rda", + "name": "rda.dataset.keyword" + }, + { + "category": "rda", + "name": "rda.dataset.language" + }, + { + "category": "rda", + "name": "rda.dataset.metadata.description" + }, + { + "category": "rda", + "name": "rda.dataset.metadata.language" + }, + { + "category": "rda", + "name": "rda.dataset.metadata.metadata_standard_id" + }, + { + "category": "rda", + "name": "rda.dataset.metadata.metadata_standard_id.identifier" + }, + { + "category": "rda", + "name": "rda.dataset.metadata.metadata_standard_id.type" + }, + { + "category": "rda", + "name": "rda.dataset.personal_data" + }, + { + "category": "rda", + "name": "rda.dataset.preservation_statement" + }, + { + "category": "rda", + "name": "rda.dataset.security_and_privacy" + }, + { + "category": "rda", + "name": "rda.dataset.security_and_privacy.description" + }, + { + "category": "rda", + "name": "rda.dataset.security_and_privacy.title" + }, + { + "category": "rda", + "name": "rda.dataset.sensitive_data" + }, + { + "category": "rda", + "name": "rda.dataset.technical_resource.description" + }, + { + "category": "rda", + "name": "rda.dataset.technical_resource.name" + }, + { + "category": "rda", + "name": "rda.dataset.title" + }, + { + "category": "rda", + "name": "rda.dataset.type" + }, + { + "category": "rda", + "name": "rda.dataset.issued" + }, + { + "category": "rda", + "name": "rda.dataset.dataset_id" + }, + { + "category": "rda", + "name": "rda.dataset.dataset_id.identifier" + }, + { + "category": "rda", + "name": "rda.dataset.dataset_id.type" + }, + { + "category": "rda", + "name": "rda.dataset.description" + }, + { + "category": "rda", + "name": "rda.dmp.contact" + }, + { + "category": "rda", + "name": "rda.dmp.contact.contact_id.identifier" + }, + { + "category": "rda", + "name": "rda.dmp.contact.contact_id.type" + }, + { + "category": "rda", + "name": "rda.dmp.contact.mbox" + }, + { + "category": "rda", + "name": "rda.dmp.contact.name" + }, + { + "category": "rda", + "name": "rda.dmp.contributor" + }, + { + "category": "rda", + "name": "rda.dmp.contributor.contributor_id.identifier" + }, + { + "category": "rda", + "name": "rda.dmp.contributor.contributor_id.type" + }, + { + "category": "rda", + "name": "rda.dmp.contributor.mbox" + }, + { + "category": "rda", + "name": "rda.dmp.contributor.name" + }, + { + "category": "rda", + "name": "rda.dmp.contributor.role" + }, + { + "category": "rda", + "name": "rda.dmp.cost" + }, + { + "category": "rda", + "name": "rda.dmp.cost.currency_code" + }, + { + "category": "rda", + "name": "rda.dmp.cost.description" + }, + { + "category": "rda", + "name": "rda.dmp.cost.title" + }, + { + "category": "rda", + "name": "rda.dmp.cost.value" + }, + { + "category": "rda", + "name": "rda.dmp.created" + }, + { + "category": "rda", + "name": "rda.dmp.description" + }, + { + "category": "rda", + "name": "rda.dmp.dmp_id" + }, + { + "category": "rda", + "name": "rda.dmp.dmp_id.identifier" + }, + { + "category": "rda", + "name": "rda.dmp.dmp_id.type" + }, + { + "category": "rda", + "name": "rda.dmp.ethical_issues_description" + }, + { + "category": "rda", + "name": "rda.dmp.ethical_issues_exist" + }, + { + "category": "rda", + "name": "rda.dmp.ethical_issues_report" + }, + { + "category": "rda", + "name": "rda.dmp.language" + }, + { + "category": "rda", + "name": "rda.dmp.modified" + }, + { + "category": "rda", + "name": "rda.dmp.project" + }, + { + "category": "rda", + "name": "rda.dmp.project.description" + }, + { + "category": "rda", + "name": "rda.dmp.project.end" + }, + { + "category": "rda", + "name": "rda.dmp.project.funding" + }, + { + "category": "rda", + "name": "rda.dmp.project.funding.funder_id.identifier" + }, + { + "category": "rda", + "name": "rda.dmp.project.funding.funder_id.type" + }, + { + "category": "rda", + "name": "rda.dmp.project.funding.funding_status" + }, + { + "category": "rda", + "name": "rda.dmp.project.funding.grant_id.identifier" + }, + { + "category": "rda", + "name": "rda.dmp.project.funding.grant_id.type" + }, + { + "category": "rda", + "name": "rda.dmp.project.start" + }, + { + "category": "rda", + "name": "rda.dmp.dmp.project.title" + }, + { + "category": "rda", + "name": "rda.dmp.title" + } +] \ No newline at end of file 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 3b9d687c5..93823c96d 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ b/dmp-backend/web/src/main/resources/config/application-devel.properties @@ -24,6 +24,7 @@ pdf.converter.url=http://localhost:3000/ ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.rda=RDACommonStandards.txt +configuration.schematics=Schematics.json configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=configurableLoginProviders.json diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties index 6829aed8a..64a1841bf 100644 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ b/dmp-backend/web/src/main/resources/config/application.properties @@ -50,6 +50,7 @@ elasticsearch.certKey= ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml configuration.rda=RDACommonStandards.txt +configuration.schematics=Schematics.json configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=configurableLoginProviders.json diff --git a/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts b/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts index 01890e243..c676f56e6 100644 --- a/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts +++ b/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts @@ -60,6 +60,7 @@ export interface Field { visible: Visibility; validations: ValidationType[]; rdaCommonStandard: string; + schematics: string[]; export: boolean; } diff --git a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts index 66208bd08..8aa031baa 100644 --- a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts +++ b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts @@ -90,4 +90,8 @@ export class DatasetProfileService extends BaseService { this.rdaCommonStandardsLoading = false; }); } + + searchSchematics(like: string): Observable { + return this.http.get(this.actionUrl + "getSchematics?query=" + like); + } } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts index 59afcd724..0e57f4172 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts @@ -48,6 +48,7 @@ export class FieldEditorModel extends BaseFormModel { public data: FieldDataEditorModel; public validations: ValidationType[] = []; public rdaCommonStandard: string; + public schematics: string[]; public export: boolean = true; fromModel(item: Field): FieldEditorModel { @@ -59,6 +60,7 @@ export class FieldEditorModel extends BaseFormModel { this.viewStyle = new ViewStyleEditorModel().fromModel(item.viewStyle); this.visible = new VisibilityEditorModel().fromModel(item.visible); this.rdaCommonStandard = item.rdaCommonStandard; + this.schematics = item.schematics; this.export = item.export; if (item.data) { @@ -106,6 +108,7 @@ export class FieldEditorModel extends BaseFormModel { ordinal: [{ value: this.ordinal, disabled: (disabled && !skipDisable.includes('FieldEditorModel.ordinal')) }], validations: [{ value: this.validations, disabled: (disabled && !skipDisable.includes('FieldEditorModel.validations')) }], rdaCommonStandard: [{value: this.rdaCommonStandard, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.rdaCommonStandard')) }], + schematics: [{ value: this.schematics, disabled: (disabled && !skipDisable.includes('FieldEditorModel.schematics')) }], export: [{value: this.export, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.export'))}] }); diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html index ffed9ee2f..07490cd11 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.html @@ -227,13 +227,9 @@ --> - {{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.RDA-COMMON-STANDARDS' | translate}} - - -- - - {{property}} - - + Schematics + + {{'DATASET-PROFILE-EDITOR.STEPS.FORM.COMPOSITE-FIELD.FIELDS.EXPORT' | translate}} diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts index 17663e5aa..9b68efc11 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts @@ -6,7 +6,7 @@ import {DatasetProfileService} from '@app/core/services/dataset-profile/dataset- import {EnumUtils} from '@app/core/services/utilities/enum-utils.service'; import {RuleEditorModel} from '@app/ui/admin/dataset-profile/admin/rule-editor-model'; import {BaseComponent} from '@common/base/base.component'; -import {Subscription} from 'rxjs'; +import {Observable, Subscription} from 'rxjs'; import {ViewStyleType} from './view-style-enum'; import {DatasetProfileComboBoxType} from '@app/core/common/enum/dataset-profile-combo-box-type'; import {ErrorStateMatcher} from '@angular/material/core'; @@ -44,6 +44,8 @@ import { WordListFieldData } from '@app/core/model/dataset-profile-definition/field-data/field-data'; import {ConfigurationService} from "@app/core/services/configuration/configuration.service"; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { map } from 'rxjs/operators'; @Component({ selector: 'app-dataset-profile-editor-field-component', @@ -73,6 +75,17 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements //rdaCommonStandards = this.datasetProfileService.getRDACommonStandards(); //GK: Don't do that again. The service has a weird async behaviour. + schematicsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { + filterFn: this.filterSchematics.bind(this), + initialItems: (excludedItems: any[]) => this.filterSchematics('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x !== resultItem)))), + displayFn: (item) => item, + titleFn: (item) => item + } + + filterSchematics(value: string): Observable { + return this.datasetProfileService.searchSchematics(value); + } + constructor( public enumUtils: EnumUtils, public datasetProfileService: DatasetProfileService, diff --git a/dmp-frontend/src/assets/resources/skipDisable.json b/dmp-frontend/src/assets/resources/skipDisable.json index 4a76eb406..74d60d5df 100644 --- a/dmp-frontend/src/assets/resources/skipDisable.json +++ b/dmp-frontend/src/assets/resources/skipDisable.json @@ -12,5 +12,6 @@ "WordListFieldDataEditorModel.label", "FieldDataOptionEditorModel.label", "FieldSetEditorModel.rdaCommonStandard", + "FieldSetEditorModel.schematics", "FieldSetEditorModel.export" ] From 0c57bba0b46feccc555e6c11127c8b1fcafed846 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 21 Feb 2023 11:57:34 +0200 Subject: [PATCH 03/16] rda json dmp import/export --- .../eudat/logic/managers/DatasetManager.java | 2 +- .../logic/utilities/json/JsonSearcher.java | 12 ++ .../models/rda/mapper/CostRDAMapper.java | 14 +- .../models/rda/mapper/DatasetIdRDAMapper.java | 37 +++- .../models/rda/mapper/DatasetRDAMapper.java | 62 +++--- .../rda/mapper/DistributionRDAMapper.java | 181 +++++++++++------- .../models/rda/mapper/HostRDAMapper.java | 14 +- .../models/rda/mapper/LicenseRDAMapper.java | 40 ++-- .../models/rda/mapper/MetadataRDAMapper.java | 25 ++- .../mapper/SecurityAndPrivacyRDAMapper.java | 27 ++- .../mapper/TechnicalResourceRDAMapper.java | 25 ++- 11 files changed, 319 insertions(+), 120 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java index 20dd25807..cfc7081b0 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetManager.java @@ -1136,7 +1136,7 @@ public class DatasetManager { List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().query(criteria).stream().map(eu.eudat.elastic.entities.Dataset::getTags).flatMap(Collection::stream).filter(StreamDistinctBy.distinctByKey(Tag::getId)).collect(Collectors.toList()); Set tagNodes = new HashSet<>(); tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "renderStyle", "tags", true)); - tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "rdaProperty", "dataset.keyword")); + tagNodes.addAll(JsonSearcher.findNodes(propertiesJson, "schematics", "rda.dataset.keyword")); if(wizardModel.getTags() == null){ wizardModel.setTags(new ArrayList<>()); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java index 6e53aed30..d5cab1d19 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/json/JsonSearcher.java @@ -29,6 +29,18 @@ public class JsonSearcher { } 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++; + } + } + } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java index aa76750d7..0c6a340f8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/CostRDAMapper.java @@ -31,7 +31,19 @@ public class CostRDAMapper { public static List toRDAList(List nodes) throws JsonProcessingException { Map rdaMap = new HashMap<>(); for(JsonNode node: nodes){ - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dmp.cost")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } String rdaValue = node.get("value").asText(); if(rdaValue == null || (rdaValue.isEmpty() && !node.get("value").isArray())){ continue; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetIdRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetIdRDAMapper.java index 345fdebff..f3e690e75 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetIdRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetIdRDAMapper.java @@ -27,7 +27,19 @@ public class DatasetIdRDAMapper { public static DatasetId toRDA(List nodes) { DatasetId data = new DatasetId(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.dataset_id")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } String rdaValue = node.get("value").asText(); if(rdaValue == null || rdaValue.isEmpty()){ continue; @@ -77,20 +89,25 @@ public class DatasetIdRDAMapper { public static Map toProperties(DatasetId rda, JsonNode node) { Map properties = new HashMap<>(); - List idNodes = JsonSearcher.findNodes(node, "rdaProperty", "dataset.dataset_id"); + List idNodes = JsonSearcher.findNodes(node, "schematics", "rda.dataset.dataset_id"); for (JsonNode idNode: idNodes) { for (DatasetIdProperties datasetIdProperties : DatasetIdProperties.values()) { - if (idNode.get("rdaProperty").asText().endsWith(datasetIdProperties.getName())) { - switch (datasetIdProperties) { - case IDENTIFIER: - properties.put(idNode.get("id").asText(), rda.getIdentifier()); - break; - case TYPE: - properties.put(idNode.get("id").asText(), rda.getType().value()); + JsonNode schematics = idNode.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().endsWith(datasetIdProperties.getName())){ + switch (datasetIdProperties) { + case IDENTIFIER: + properties.put(idNode.get("id").asText(), rda.getIdentifier()); + break; + case TYPE: + properties.put(idNode.get("id").asText(), rda.getType().value()); + break; + } break; + } } - } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java index 39b4187c3..c1a2d9dbc 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DatasetRDAMapper.java @@ -59,32 +59,32 @@ public class DatasetRDAMapper { ObjectMapper mapper = new ObjectMapper(); String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition()); JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson); - List idNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.dataset_id"); + List idNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.dataset_id"); if (!idNodes.isEmpty()) { rda.setDatasetId(DatasetIdRDAMapper.toRDA(idNodes)); } if (rda.getDatasetId() == null) { rda.setDatasetId(new DatasetId(dataset.getId().toString(), DatasetId.Type.OTHER)); } - List typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type"); + List typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.type"); if (!typeNodes.isEmpty() && !typeNodes.get(0).get("value").asText().isEmpty()) { rda.setType(typeNodes.get(0).get("value").asText()); } else { rda.setType("DMP Dataset"); } - List languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language"); + List languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.language"); if (!languageNodes.isEmpty() && !languageNodes.get(0).get("value").asText().isEmpty()) { rda.setLanguage(Language.fromValue(languageNodes.get(0).get("value").asText())); } else { rda.setLanguage(LanguageRDAMapper.mapLanguageIsoToRDAIso(dataset.getProfile().getLanguage())); } - List metadataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.metadata"); + List metadataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.metadata"); if (!metadataNodes.isEmpty()) { rda.setMetadata(MetadataRDAMapper.toRDAList(metadataNodes)); }else{ rda.setMetadata(new ArrayList<>()); } - List qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.data_quality_assurance"); + List qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.data_quality_assurance"); if (!qaNodes.isEmpty()) { /*rda.setDataQualityAssurance(qaNodes.stream().map(qaNode -> qaNode.get("value").asText()).collect(Collectors.toList())); for (int i = 0; i < qaNodes.size(); i++) { @@ -115,17 +115,17 @@ public class DatasetRDAMapper { }else{ rda.setDataQualityAssurance(new ArrayList<>()); } - List preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.preservation_statement"); + List preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.preservation_statement"); if (!preservationNodes.isEmpty() && !preservationNodes.get(0).get("value").asText().isEmpty()) { rda.setPreservationStatement(preservationNodes.get(0).get("value").asText()); } - List distributionNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.distribution"); + List distributionNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.distribution"); if (!distributionNodes.isEmpty()) { rda.setDistribution(DistributionRDAMapper.toRDAList(distributionNodes)); }else{ rda.setDistribution(new ArrayList<>()); } - List keywordNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.keyword"); + List keywordNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.keyword"); if (!keywordNodes.isEmpty()) { rda.setKeyword(keywordNodes.stream().map(keywordNode -> { JsonNode value = keywordNode.get("value"); @@ -142,7 +142,7 @@ public class DatasetRDAMapper { List tags = apiContext.getOperationsContext().getElasticRepository().getDatasetRepository().findDocument(dataset.getId().toString()).getTags().stream().map(Tag::getName).collect(Collectors.toList()); rda.setKeyword(tags); } - List personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.personal_data"); + List personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.personal_data"); if (!personalDataNodes.isEmpty()) { try{ rda.setPersonalData(personalDataNodes.stream().map(personalDataNode -> Dataset.PersonalData.fromValue(personalDataNode.get("value").asText())).findFirst().get()); @@ -152,13 +152,13 @@ public class DatasetRDAMapper { } else { rda.setPersonalData(Dataset.PersonalData.UNKNOWN); } - List securityAndPrivacyNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.security_and_privacy"); + List securityAndPrivacyNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.security_and_privacy"); if (!securityAndPrivacyNodes.isEmpty()) { rda.setSecurityAndPrivacy(SecurityAndPrivacyRDAMapper.toRDAList(securityAndPrivacyNodes)); }else{ rda.setSecurityAndPrivacy(new ArrayList<>()); } - List sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data"); + List sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.sensitive_data"); if (!sensitiveDataNodes.isEmpty()) { try{ rda.setSensitiveData(sensitiveDataNodes.stream().map(sensitiveDataNode -> Dataset.SensitiveData.fromValue(sensitiveDataNode.get("value").asText())).findFirst().get()); @@ -168,35 +168,47 @@ public class DatasetRDAMapper { } else { rda.setSensitiveData(Dataset.SensitiveData.UNKNOWN); } - List technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.technical_resource"); + List technicalResourceNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.technical_resource"); if (!technicalResourceNodes.isEmpty()) { rda.setTechnicalResource(TechnicalResourceRDAMapper.toRDAList(technicalResourceNodes)); }else{ rda.setTechnicalResource(new ArrayList<>()); } - List issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.issued"); + List issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.issued"); if (!issuedNodes.isEmpty() && !issuedNodes.get(0).get("value").asText().isEmpty()) { rda.setIssued(issuedNodes.get(0).get("value").asText()); } - List contributorNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dmp.contributor"); + List contributorNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dmp.contributor"); if (!contributorNodes.isEmpty()) { dmp.getContributor().addAll(contributorNodes.stream().map(contributorNode -> { JsonNode value = contributorNode.get("value"); if (value.isArray()) { return StreamSupport.stream(value.spliterator(), false).map(node -> ContributorRDAMapper.toRDA(node.asText())).collect(Collectors.toList()); } else { - return Collections.singletonList(new Contributor()); // return null kalutera + return Collections.singletonList(new Contributor()); } }).flatMap(Collection::stream).collect(Collectors.toList())); } - List costNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dmp.cost"); + List costNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dmp.cost"); if (!costNodes.isEmpty()) { dmp.getCost().addAll(CostRDAMapper.toRDAList(costNodes)); } - List ethicsNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dmp.ethical_issues"); + List ethicsNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dmp.ethical_issues"); if (!ethicsNodes.isEmpty()) { for(JsonNode node: ethicsNodes){ - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dmp.ethical_issues")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } String rdaValue = node.get("value").asText(); if(rdaValue == null || rdaValue.isEmpty()){ continue; @@ -276,12 +288,12 @@ public class DatasetRDAMapper { String datasetDescriptionJson = mapper.writeValueAsString(datasetWizardModel.getDatasetProfileDefinition()); JsonNode datasetDescriptionObj = mapper.readTree(datasetDescriptionJson); - List typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.type"); + List typeNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.type"); if (!typeNodes.isEmpty()) { properties.put(typeNodes.get(0).get("id").asText(), rda.getType()); } - List languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.language"); + List languageNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.language"); if (!languageNodes.isEmpty() && rda.getLanguage() != null) { properties.put(languageNodes.get(0).get("id").asText(), rda.getLanguage().value()); } @@ -298,7 +310,7 @@ public class DatasetRDAMapper { for (int i = 0; i < qaIds.size(); i++) { properties.put(qaIds.get(i), rda.getDataQualityAssurance().get(i)); }*/ - List qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.data_quality_assurance"); + List qaNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.data_quality_assurance"); if (!qaNodes.isEmpty() && rda.getDataQualityAssurance() != null && !rda.getDataQualityAssurance().isEmpty()) { ObjectMapper m = new ObjectMapper(); List qas = new ArrayList<>(rda.getDataQualityAssurance()); @@ -310,12 +322,12 @@ public class DatasetRDAMapper { } } - List preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.preservation_statement"); + List preservationNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.preservation_statement"); if (!preservationNodes.isEmpty()) { properties.put(preservationNodes.get(0).get("id").asText(), rda.getPreservationStatement()); } - List issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.issued"); + List issuedNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.issued"); if (!issuedNodes.isEmpty()) { properties.put(issuedNodes.get(0).get("id").asText(), rda.getIssued()); } @@ -351,7 +363,7 @@ public class DatasetRDAMapper { } } - List personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.personal_data"); + List personalDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.personal_data"); if (!personalDataNodes.isEmpty()) { properties.put(personalDataNodes.get(0).get("id").asText(), rda.getPersonalData().value()); } @@ -360,7 +372,7 @@ public class DatasetRDAMapper { properties.putAll(SecurityAndPrivacyRDAMapper.toProperties(rda.getSecurityAndPrivacy())); } - List sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "rdaProperty", "dataset.sensitive_data"); + List sensitiveDataNodes = JsonSearcher.findNodes(datasetDescriptionObj, "schematics", "rda.dataset.sensitive_data"); if (!sensitiveDataNodes.isEmpty()) { properties.put(sensitiveDataNodes.get(0).get("id").asText(), rda.getSensitiveData().value()); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java index f5bc36f34..547927c94 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DistributionRDAMapper.java @@ -24,7 +24,10 @@ public class DistributionRDAMapper { Map rdaMap = new HashMap<>(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = getRdaDistributionProperty(node); + if(rdaProperty.isEmpty()){ + continue; + } String rdaValue = node.get("value").asText(); //if(rdaValue == null || rdaValue.isEmpty()){ if(rdaValue == null || (rdaValue.isEmpty() && !node.get("value").isArray())){ @@ -79,7 +82,16 @@ public class DistributionRDAMapper { rda.setAdditionalProperty(ImportPropertyName.BYTE_SIZE.getName(), node.get("id").asText()); break; case LICENSE: - List licenseNodes = nodes.stream().filter(lnode -> lnode.get("rdaProperty").asText().toLowerCase().contains("license")).collect(Collectors.toList()); + List licenseNodes = nodes.stream().filter(lnode -> { + if(lnode.get("schematics").isArray()){ + for(JsonNode schematic: lnode.get("schematics")){ + if(schematic.asText().startsWith("rda.dataset.distribution.license")){ + return true; + } + } + } + return false; + }).collect(Collectors.toList()); License license = LicenseRDAMapper.toRDA(licenseNodes); rda.setLicense(license != null? Collections.singletonList(license): new ArrayList<>()); break; @@ -182,71 +194,77 @@ public class DistributionRDAMapper { public static Map toProperties(Distribution rda, JsonNode root) { Map properties = new HashMap<>(); - List distributionNodes = JsonSearcher.findNodes(root, "rdaProperty", "dataset.distribution"); + List distributionNodes = JsonSearcher.findNodes(root, "schematics", "rda.dataset.distribution"); for (JsonNode distributionNode: distributionNodes) { for (ExportPropertyName exportPropertyName: ExportPropertyName.values()) { - if (distributionNode.get("rdaProperty").asText().contains(exportPropertyName.getName())) { - switch (exportPropertyName) { - case ACCESS_URL: - properties.put(distributionNode.get("id").asText(), rda.getAccessUrl()); - break; - case DESCRIPTION: - properties.put(distributionNode.get("id").asText(), rda.getDescription()); - break; - case TITLE: - properties.put(distributionNode.get("id").asText(), rda.getTitle()); - break; - case AVAILABLE_UNTIL: - properties.put(distributionNode.get("id").asText(), rda.getAvailableUntil()); - break; - case DOWNLOAD_URL: - if (rda.getDownloadUrl() != null) { - properties.put(distributionNode.get("id").asText(), rda.getDownloadUrl().toString()); - } - break; - case DATA_ACCESS: - properties.put(distributionNode.get("id").asText(), rda.getDataAccess().value()); - break; - case BYTE_SIZE: - if (rda.getByteSize() != null) { - properties.put(distributionNode.get("id").asText(), rda.getByteSize().toString()); - } - break; - case FORMAT: - if (rda.getFormat() != null && !rda.getFormat().isEmpty()) { - String style = distributionNode.get("viewStyle").get("renderStyle").asText(); - if(style.equals("combobox")) { - if (distributionNode.get("data").get("type").asText().equals("autocomplete")) { - Map additionalProperties = rda.getAdditionalProperties(); - List standardFormats = new ArrayList<>(); - rda.getAdditionalProperties().forEach((key, value) -> { - try { - if (key.matches("format\\d+")) { - standardFormats.add(additionalProperties.get(key)); - properties.put(distributionNode.get("id").asText(), mapper.writeValueAsString(standardFormats)); - } - } catch (JsonProcessingException e) { - logger.error(e.getMessage(), e); - } - }); + JsonNode schematics = distributionNode.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().contains(exportPropertyName.getName())){ + switch (exportPropertyName) { + case ACCESS_URL: + properties.put(distributionNode.get("id").asText(), rda.getAccessUrl()); + break; + case DESCRIPTION: + properties.put(distributionNode.get("id").asText(), rda.getDescription()); + break; + case TITLE: + properties.put(distributionNode.get("id").asText(), rda.getTitle()); + break; + case AVAILABLE_UNTIL: + properties.put(distributionNode.get("id").asText(), rda.getAvailableUntil()); + break; + case DOWNLOAD_URL: + if (rda.getDownloadUrl() != null) { + properties.put(distributionNode.get("id").asText(), rda.getDownloadUrl().toString()); } - } - else if(style.equals("freetext")){ - properties.put(distributionNode.get("id").asText(), String.join(", ", rda.getFormat())); - } - } - break; - case LICENSE: - if (rda.getLicense() != null && !rda.getLicense().isEmpty()) { - properties.putAll(LicenseRDAMapper.toProperties(rda.getLicense().get(0), root)); - } - break; - case HOST: - if (rda.getHost() != null) { - properties.putAll(HostRDAMapper.toProperties(rda.getHost())); + break; + case DATA_ACCESS: + properties.put(distributionNode.get("id").asText(), rda.getDataAccess().value()); + break; + case BYTE_SIZE: + if (rda.getByteSize() != null) { + properties.put(distributionNode.get("id").asText(), rda.getByteSize().toString()); + } + break; + case FORMAT: + if (rda.getFormat() != null && !rda.getFormat().isEmpty()) { + String style = distributionNode.get("viewStyle").get("renderStyle").asText(); + if(style.equals("combobox")) { + if (distributionNode.get("data").get("type").asText().equals("autocomplete")) { + Map additionalProperties = rda.getAdditionalProperties(); + List standardFormats = new ArrayList<>(); + rda.getAdditionalProperties().forEach((key, value) -> { + try { + if (key.matches("format\\d+")) { + standardFormats.add(additionalProperties.get(key)); + properties.put(distributionNode.get("id").asText(), mapper.writeValueAsString(standardFormats)); + } + } catch (JsonProcessingException e) { + logger.error(e.getMessage(), e); + } + }); + } + } + else if(style.equals("freetext")){ + properties.put(distributionNode.get("id").asText(), String.join(", ", rda.getFormat())); + } + } + break; + case LICENSE: + if (rda.getLicense() != null && !rda.getLicense().isEmpty()) { + properties.putAll(LicenseRDAMapper.toProperties(rda.getLicense().get(0), root)); + } + break; + case HOST: + if (rda.getHost() != null) { + properties.putAll(HostRDAMapper.toProperties(rda.getHost())); + } + break; } break; + } } } } @@ -258,7 +276,10 @@ public class DistributionRDAMapper { public static Distribution toRDA(List nodes) { Distribution rda = new Distribution(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = getRdaDistributionProperty(node); + if(rdaProperty.isEmpty()){ + continue; + } String rdaValue = node.get("value").asText(); for (ExportPropertyName exportPropertyName: ExportPropertyName.values()) { if (rdaProperty.contains(exportPropertyName.getName())) { @@ -288,11 +309,29 @@ public class DistributionRDAMapper { rda.setFormat(Collections.singletonList(rdaValue)); break; case LICENSE: - List licenseNodes = nodes.stream().filter(lnode -> lnode.get("rdaProperty").asText().toLowerCase().contains("license")).collect(Collectors.toList()); + List licenseNodes = nodes.stream().filter(lnode -> { + if(lnode.get("schematics").isArray()){ + for(JsonNode schematic: lnode.get("schematics")){ + if(schematic.asText().startsWith("rda.dataset.distribution.license")){ + return true; + } + } + } + return false; + }).collect(Collectors.toList()); rda.setLicense(Collections.singletonList(LicenseRDAMapper.toRDA(licenseNodes))); break; case HOST: - List hostNodes = nodes.stream().filter(lnode -> lnode.get("rdaProperty").asText().toLowerCase().contains("host")).collect(Collectors.toList()); + List hostNodes = nodes.stream().filter(lnode -> { + if(lnode.get("schematics").isArray()){ + for(JsonNode schematic: lnode.get("schematics")){ + if(schematic.asText().startsWith("rda.dataset.distribution.host")){ + return true; + } + } + } + return false; + }).collect(Collectors.toList()); rda.setHost(HostRDAMapper.toRDA(hostNodes, "0")); break; } @@ -333,6 +372,20 @@ public class DistributionRDAMapper { return rda; } + private static String getRdaDistributionProperty(JsonNode node) { + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.distribution")){ + rdaProperty = schematic.asText(); + break; + } + } + } + return rdaProperty; + } + private static Distribution getRelative( Map rdaMap, String numbering) { return rdaMap.entrySet().stream().filter(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering) > 0) .max(Comparator.comparingInt(entry -> MyStringUtils.getFirstDifference(entry.getKey(), numbering))).map(Map.Entry::getValue).orElse(new Distribution()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/HostRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/HostRDAMapper.java index 5fb92aab1..ca69c5cfb 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/HostRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/HostRDAMapper.java @@ -19,7 +19,19 @@ public class HostRDAMapper { public static Host toRDA(List nodes, String numbering) { Host rda = new Host(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.distribution.host")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } if (rdaProperty.contains("host")) { int firstDiff = MyStringUtils.getFirstDifference(numbering, node.get("numbering").asText()); if (firstDiff == -1 || firstDiff >= 2) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/LicenseRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/LicenseRDAMapper.java index b23ff204b..8b2cc84e3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/LicenseRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/LicenseRDAMapper.java @@ -17,7 +17,19 @@ public class LicenseRDAMapper { public static License toRDA(List nodes) { License rda = new License(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.distribution.license")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } String value = node.get("value").asText(); if(value == null || value.isEmpty()){ continue; @@ -78,20 +90,26 @@ public class LicenseRDAMapper { public static Map toProperties(License rda, JsonNode root) { Map properties = new HashMap<>(); - List licenseNodes = JsonSearcher.findNodes(root, "rdaProperty", "dataset.distribution.license"); + List licenseNodes = JsonSearcher.findNodes(root, "schematics", "rda.dataset.distribution.license"); for (JsonNode licenseNode: licenseNodes) { for (LicenceProperties licenceProperty: LicenceProperties.values()) { - if (licenseNode.get("rdaProperty").asText().endsWith(licenceProperty.getName())) { - switch (licenceProperty) { - case LICENSE_REF: - if (rda.getLicenseRef() != null) { - properties.put(licenseNode.get("id").asText(), rda.getLicenseRef().toString()); + JsonNode schematics = licenseNode.get("schematics"); + if(schematics.isArray()) { + for (JsonNode schematic : schematics) { + if (schematic.asText().endsWith(licenceProperty.getName())) { + switch (licenceProperty) { + case LICENSE_REF: + if (rda.getLicenseRef() != null) { + properties.put(licenseNode.get("id").asText(), rda.getLicenseRef().toString()); + } + break; + case START_DATE: + properties.put(licenseNode.get("id").asText(), rda.getStartDate()); + break; } - break; - case START_DATE: - properties.put(licenseNode.get("id").asText(), rda.getStartDate()); - break; + } + break; } } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/MetadataRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/MetadataRDAMapper.java index f8b7fdf28..fd9eb1d13 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/MetadataRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/MetadataRDAMapper.java @@ -20,7 +20,19 @@ public class MetadataRDAMapper { Map rdaMap = new HashMap<>(); List rdas = new ArrayList<>(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.metadata")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } JsonNode rdaValue = node.get("value"); for (PropertyName propertyName: PropertyName.values()) { @@ -119,7 +131,16 @@ public class MetadataRDAMapper { public static Metadatum toRDA(JsonNode node) { Metadatum rda = new Metadatum(); - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.metadata")){ + rdaProperty = schematic.asText(); + break; + } + } + } JsonNode rdaValue = node.get("value"); if (rdaProperty.contains("metadata_standard_id")) { if (rdaValue instanceof ArrayNode) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/SecurityAndPrivacyRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/SecurityAndPrivacyRDAMapper.java index a178b6802..85f494917 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/SecurityAndPrivacyRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/SecurityAndPrivacyRDAMapper.java @@ -16,7 +16,19 @@ public class SecurityAndPrivacyRDAMapper { Map rdaMap = new HashMap<>(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.security_and_privacy")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } String rdaValue = node.get("value").asText(); if(rdaValue == null || rdaValue.isEmpty()){ continue; @@ -69,8 +81,17 @@ public class SecurityAndPrivacyRDAMapper { public static SecurityAndPrivacy toRDA(JsonNode node) { SecurityAndPrivacy rda = new SecurityAndPrivacy(); - String rdaProperty = node.get("rdaProperty").asText(); - String value =node.get("value").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.security_and_privacy")){ + rdaProperty = schematic.asText(); + break; + } + } + } + String value = node.get("value").asText(); if (rdaProperty.contains("description")) { rda.setDescription(value); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/TechnicalResourceRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/TechnicalResourceRDAMapper.java index d38788e4a..709ee5ef3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/TechnicalResourceRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/TechnicalResourceRDAMapper.java @@ -16,7 +16,19 @@ public class TechnicalResourceRDAMapper { Map rdaMap = new HashMap<>(); for (JsonNode node: nodes) { - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.technical_resource")){ + rdaProperty = schematic.asText(); + break; + } + } + } + else{ + continue; + } String rdaValue = node.get("value").asText(); if(rdaValue == null || rdaValue.isEmpty()){ continue; @@ -70,7 +82,16 @@ public class TechnicalResourceRDAMapper { public static TechnicalResource toRDA(JsonNode node) { TechnicalResource rda = new TechnicalResource(); - String rdaProperty = node.get("rdaProperty").asText(); + String rdaProperty = ""; + JsonNode schematics = node.get("schematics"); + if(schematics.isArray()){ + for(JsonNode schematic: schematics){ + if(schematic.asText().startsWith("rda.dataset.technical_resource")){ + rdaProperty = schematic.asText(); + break; + } + } + } String value = node.get("value").asText(); if (rdaProperty.contains("description")) { From b273ca4ed7d87fa1fd4ea5e3bc64d3f5e5d73763 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 21 Feb 2023 12:44:48 +0200 Subject: [PATCH 04/16] search for schematics fields in prefilling --- .../eu/eudat/logic/mapper/prefilling/PrefillingMapper.java | 6 +++--- 1 file changed, 3 insertions(+), 3 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 44b2f1be4..9efc1e713 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 @@ -112,17 +112,17 @@ public class PrefillingMapper { throw e; } } else { - List nodes = JsonSearcher.findNodes(parentNode, "rdaProperty", prefillingMapping.getMaDmpTarget()); + List nodes = JsonSearcher.findNodes(parentNode, "schematics", "rda." + prefillingMapping.getMaDmpTarget()); // zenodo prefilling customizations if(type.equals("zenodo")){ if(prefillingMapping.getMaDmpTarget().equals("dataset.distribution.data_access")){ if(parsedValue != null && parsedValue.equals("open")){ - List issuedNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.issued"); + List issuedNodes = JsonSearcher.findNodes(parentNode, "schematics", "rda.dataset.issued"); if(!issuedNodes.isEmpty()){ String issuedIdNode = issuedNodes.get(0).get("id").asText(); String issuedValue = (String) properties.get(issuedIdNode); - List licStartDateNodes = JsonSearcher.findNodes(parentNode, "rdaProperty", "dataset.distribution.license.start_date"); + List licStartDateNodes = JsonSearcher.findNodes(parentNode, "schematics", "rda.dataset.distribution.license.start_date"); for (JsonNode licStartDateNode : licStartDateNodes) { String licStartDateId = licStartDateNode.get(0) != null ? licStartDateNode.get(0).get("id").asText() : licStartDateNode.get("id").asText(); properties.put(licStartDateId, issuedValue); From e2505039dfb92f32bf43a245ca5c9dc7c1848d23 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 21 Feb 2023 14:09:33 +0200 Subject: [PATCH 05/16] cleanup unused code --- .../main/java/eu/eudat/controllers/Users.java | 10 --- .../managers/DataManagementPlanManager.java | 26 ------- .../eu/eudat/logic/managers/UserManager.java | 27 +------ .../web/src/main/resources/DOI_Funder.json | 70 ------------------- .../config/application-devel.properties | 3 - .../config/application-docker.properties | 4 -- .../resources/config/application.properties | 1 - .../app/core/services/user/user.service.ts | 5 -- .../overview/dataset-overview.component.ts | 1 - .../ui/dmp/overview/dmp-overview.component.ts | 2 - 10 files changed, 3 insertions(+), 146 deletions(-) delete mode 100644 dmp-backend/web/src/main/resources/DOI_Funder.json diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java index 2a7c56f5a..88a020232 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Users.java @@ -88,16 +88,6 @@ public class Users extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(dataTable).status(ApiMessageCode.NO_MESSAGE)); } - @RequestMapping(method = RequestMethod.GET, value = {"/hasDOIToken"}, consumes = "application/json", produces = "application/json") - public @ResponseBody - ResponseEntity> hasDOIToken(Principal principal) throws NullEmailException { - try { - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(this.userManager.isDOITokenValid(principal)).status(ApiMessageCode.NO_MESSAGE)); - } catch (NonValidTokenException | ExpiredTokenException | IOException e) { - return ResponseEntity.status(460).body(new ResponseItem().payload(false).status(ApiMessageCode.ERROR_MESSAGE).message(e.getMessage())); - } - } - @Transactional @RequestMapping(method = RequestMethod.POST, value = {"/registerDOIToken"}, consumes = "application/json", produces = "application/json") public @ResponseBody 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 02c05a5a2..38b08e0ed 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 @@ -2038,32 +2038,6 @@ public class DataManagementPlanManager { return null; } - private String getUnpublishedDOI(String DOI, String token, Integer version) { - try { - RestTemplate restTemplate = new RestTemplate(); - HttpHeaders headers = new HttpHeaders(); - headers.setAccept(Collections.singletonList(MediaType.APPLICATION_JSON)); - headers.setContentType(MediaType.APPLICATION_JSON); - Map createResponse = null; - LinkedHashMap links = null; - LinkedHashMap metadata = null; - String listUrl = this.environment.getProperty("zenodo.url") + "deposit/depositions" + "?q=conceptdoi:\"" + DOI + "\"&access_token=" + token; - ResponseEntity listResponses = restTemplate.getForEntity(listUrl, Map[].class); - createResponse = listResponses.getBody()[0]; - metadata = (LinkedHashMap) createResponse.get("metadata"); - links = (LinkedHashMap) createResponse.get("links"); - - if (metadata.get("version").equals(version.toString())) { - return links.get("publish"); - } else { - return null; - } - }catch (Exception e) { - logger.warn(e.getMessage(), e); - return null; - } - } - public Doi createDoi(DepositRequest depositRequest, Principal principal) throws Exception { DMP dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(UUID.fromString(depositRequest.getDmpId())); if (!isUserOwnerOfDmp(dmp, principal)) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java index e7b00d0e6..3820bdfa7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UserManager.java @@ -159,31 +159,10 @@ public class UserManager { return dataTableData; } - public Boolean isDOITokenValid(Principal principal) throws NonValidTokenException, ExpiredTokenException, IOException { - if (principal.getZenodoToken() != null && !principal.getZenodoToken().isEmpty()) { - if (Instant.now().isBefore(principal.getZenodoDuration())) { - return true; - } - try { - this.updateDOIToken(ZenodoAccessType.REFRESH_TOKEN, principal.getZenodoRefresh(), this.environment.getProperty("zenodo.login.redirect_uri"), principal); - return true; - }catch (Exception e) { - this.deleteDOIToken(principal); - throw new ExpiredTokenException("Zenodo Token is expired."); - } - } - throw new NonValidTokenException("This account has no Zenodo Token"); - } - public void registerDOIToken(DOIRequest doiRequest, Principal principal) throws IOException { - this.updateDOIToken(ZenodoAccessType.AUTHORIZATION_CODE, doiRequest.getZenodoRequest().getCode(), doiRequest.getRedirectUri(), principal); - } - - private void updateDOIToken(ZenodoAccessType accessType, String code, String redirectUri, Principal principal) throws IOException { - ZenodoResponseToken responseToken = this.zenodoCustomProvider.getAccessToken(accessType, code - , this.environment.getProperty("zenodo.login.client_id") - , this.environment.getProperty("zenodo.login.client_secret") - , redirectUri); + ZenodoResponseToken responseToken = this.zenodoCustomProvider.getAccessToken(ZenodoAccessType.AUTHORIZATION_CODE, + doiRequest.getZenodoRequest().getCode(), this.environment.getProperty("zenodo.login.client_id"), + this.environment.getProperty("zenodo.login.client_secret"), doiRequest.getRedirectUri()); Map settings = new HashMap<>(); settings.put("zenodoEmail", responseToken.getEmail()); settings.put("zenodoRefresh", responseToken.getRefreshToken()); diff --git a/dmp-backend/web/src/main/resources/DOI_Funder.json b/dmp-backend/web/src/main/resources/DOI_Funder.json deleted file mode 100644 index 9f1c4856d..000000000 --- a/dmp-backend/web/src/main/resources/DOI_Funder.json +++ /dev/null @@ -1,70 +0,0 @@ -[ - { - "Funder": "Australian Research Council", - "DOI": "10.13039/501100000923" - }, - { - "Funder": "Austrian Science Fund", - "DOI": "10.13039/501100002428" - }, - { - "Funder": "European Commission", - "DOI": "10.13039/501100000780" - }, - { - "Funder": "European Environment Agency", - "DOI": "10.13039/501100000806" - }, - { - "Funder": "Academy of Finland", - "DOI": "10.13039/501100002341" - }, - { - "Funder": "Hrvatska Zaklada za Znanost", - "DOI": "10.13039/501100004488" - }, - { - "Funder": "Fundação para a Ciência e a Tecnologia", - "DOI": "10.13039/501100001871" - }, - { - "Funder": "Ministarstvo Prosvete, Nauke i Tehnološkog Razvoja", - "DOI": "10.13039/501100004564" - }, - { - "Funder": "Ministarstvo Znanosti, Obrazovanja i Sporta", - "DOI": "10.13039/501100006588" - }, - { - "Funder": "National Health and Medical Research Council", - "DOI": "10.13039/501100000925" - }, - { - "Funder": "National Institutes of Health", - "DOI": "10.13039/100000002" - }, - { - "Funder": "National Science Foundation", - "DOI": "10.13039/100000001" - }, - { - "Funder": "Nederlandse Organisatie voor Wetenschappelijk Onderzoek", - "DOI": "10.13039/501100003246" - }, - { - "Funder": "Research Councils", - "DOI": "10.13039/501100000690" - }, - { - "Funder": "Schweizerischer Nationalfonds zur Förderung der wissenschaftlichen Forschung", - "DOI": "10.13039/501100001711" - }, - { - "Funder": "Science Foundation Ireland", - "DOI": "10.13039/501100001602" - }, - { - "Funder": "Wellcome Trust", - "DOI": "10.13039/100004440" - } -] \ No newline at end of file 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 93823c96d..cf3de51df 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ b/dmp-backend/web/src/main/resources/config/application-devel.properties @@ -28,7 +28,6 @@ configuration.schematics=Schematics.json configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json ####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## email.invite=classpath:templates/email/email.html @@ -79,8 +78,6 @@ conf_email.expiration_time_seconds=14400 conf_email.subject=OpenDMP email confirmation #############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token zenodo.login.client_id= zenodo.login.client_secret= diff --git a/dmp-backend/web/src/main/resources/config/application-docker.properties b/dmp-backend/web/src/main/resources/config/application-docker.properties index 1bb017e6e..53d24cdb3 100644 --- a/dmp-backend/web/src/main/resources/config/application-docker.properties +++ b/dmp-backend/web/src/main/resources/config/application-docker.properties @@ -27,7 +27,6 @@ configuration.rda=RDACommonStandards.txt configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json ####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## email.invite=classpath:templates/email/email.html @@ -100,14 +99,11 @@ conf_email.expiration_time_seconds=14400 conf_email.subject=OpenDMP email confirmation #############ZENODO CONFIGURATIONS######### -zenodo.url=https://sandbox.zenodo.org/api/ -zenodo.access_token= zenodo.login.access_token_url=https://sandbox.zenodo.org/oauth/token zenodo.login.client_id= zenodo.login.client_secret= zenodo.login.redirect_uri=http://localhost:8080/login/external/zenodo - #############CONTACT EMAIL CONFIGURATIONS######### contact_email.mail= logging.config=classpath:logging/logback-${spring.profiles.active}.xml diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties index 64a1841bf..ad3562d79 100644 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ b/dmp-backend/web/src/main/resources/config/application.properties @@ -54,7 +54,6 @@ configuration.schematics=Schematics.json configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=configurableLoginProviders.json -configuration.doi_funder=DOI_Funder.json ####################EMAIL FILE TEMPLATES OVERRIDES CONFIGURATIONS########## email.invite=file:templates/email/email.html diff --git a/dmp-frontend/src/app/core/services/user/user.service.ts b/dmp-frontend/src/app/core/services/user/user.service.ts index 6f387e813..b190322da 100644 --- a/dmp-frontend/src/app/core/services/user/user.service.ts +++ b/dmp-frontend/src/app/core/services/user/user.service.ts @@ -57,11 +57,6 @@ export class UserService { return this.http.post(this.actionUrl + 'find', email, {headers: this.headers}); } - public hasDOIToken(): Observable { - const url = this.actionUrl + 'hasDOIToken'; - return this.http.get(url, { headers: this.headers }); - } - public registerDOIToken(code: string, redirectUri: string): Observable { const url = this.actionUrl + 'registerDOIToken'; return this.http.post(url, {zenodoRequest: {code: code}, redirectUri: redirectUri}, { headers: this.headers }); diff --git a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts index 750f98a47..cd695878c 100644 --- a/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts +++ b/dmp-frontend/src/app/ui/dataset/overview/dataset-overview.component.ts @@ -53,7 +53,6 @@ export class DatasetOverviewComponent extends BaseComponent implements OnInit { breadCrumbs: Observable = observableOf(); isUserOwner: boolean; expand = false; - hasDOIToken = false; researchers: ResearcherModel[]; users: UserInfoListingModel[]; lockStatus: Boolean; diff --git a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts index ea14b095e..cbc4afbe4 100644 --- a/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts +++ b/dmp-frontend/src/app/ui/dmp/overview/dmp-overview.component.ts @@ -64,7 +64,6 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit { breadCrumbs: Observable = observableOf(); isUserOwner: boolean; expand = false; - hasDOIToken = false; lockStatus: Boolean; textMessage: any; versions: VersionListingModel[]; @@ -510,7 +509,6 @@ export class DmpOverviewComponent extends BaseComponent implements OnInit { if (result.length > 0) { this.dmp.dois = result; this.selectedModel = this.dmp.dois[this.dmp.dois.length - 1]; - this.hasDOIToken = true; } } From c35bc2efed13a98f7ddc1bb482c62a4a9510c58b Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Mon, 27 Mar 2023 14:52:37 +0300 Subject: [PATCH 06/16] remove rda property from models --- .../main/java/eu/eudat/controllers/Admin.java | 4 --- .../config/configloaders/ConfigLoader.java | 1 - .../ExportXmlBuilderDatasetProfile.java | 5 ---- .../datasetProfileModel/Fields/Field.java | 12 --------- .../components/datasetprofile/Field.java | 9 ------- .../datasetprofiledefinition/Field.java | 25 +++++-------------- .../user/components/datasetprofile/Field.java | 12 --------- .../config/application-devel.properties | 1 - .../config/application-docker.properties | 1 - .../config/application-production.properties | 1 - .../resources/config/application.properties | 1 - .../admin/dataset-profile/dataset-profile.ts | 1 - .../dataset-profile.service.ts | 16 ------------ .../admin/field-editor-model.ts | 3 --- .../dataset-profile-editor-field.component.ts | 3 --- .../src/assets/resources/skipDisable.json | 1 - 16 files changed, 6 insertions(+), 90 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java index 905ac88e3..1e0c39925 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Admin.java @@ -190,10 +190,6 @@ public class Admin extends BaseController { .status(ApiMessageCode.SUCCESS_MESSAGE).message("")); } - @RequestMapping(method = RequestMethod.GET, value = {"/getRDACommonStandards"}, produces = "application/json") - public ResponseEntity getRDACommonStandards(@ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) { - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(configLoader.getRdaProperties())); - } @RequestMapping(method = RequestMethod.GET, value = {"/getSchematics"}, produces = "application/json") public ResponseEntity>> getSchematics(@RequestParam(value = "query", required = false) String query, @ClaimedAuthorities(claims = {ADMIN, DATASET_PROFILE_MANAGER}) Principal principal) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java index 7f12daa06..73966417c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/ConfigLoader.java @@ -10,7 +10,6 @@ import java.util.Map; public interface ConfigLoader { ExternalUrls getExternalUrls(); - List getRdaProperties(); List getSchematics(); XWPFDocument getDocument(); XWPFDocument getDatasetDocument(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java index 7f4442e5f..60f2da9e1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/ExportXmlBuilderDatasetProfile.java @@ -164,11 +164,6 @@ public class ExportXmlBuilderDatasetProfile { numbering.setTextContent(field.getNumbering()); elementField.appendChild(numbering); } - if (field.getRdaProperty() != null) { - Element rdaProperty = element.createElement("rdaProperty"); - rdaProperty.setTextContent(field.getRdaProperty()); - elementField.appendChild(rdaProperty); - } if (field.getSchematics() != null) { Element schematics = element.createElement("schematics"); field.getSchematics().forEach(schematic -> { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java index e6527bc9f..f6436a446 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/datasetProfileXml/datasetProfileModel/Fields/Field.java @@ -29,8 +29,6 @@ public class Field { private Object data; - private String rdaProperty; - private Schematics schematics; @XmlAttribute(name = "id") @@ -105,15 +103,6 @@ public class Field { this.data = data; } - @XmlElement(name = "rdaProperty") - public String getRdaProperty() { - return rdaProperty; - } - - public void setRdaProperty(String rdaProperty) { - this.rdaProperty = rdaProperty; - } - @XmlElement(name = "schematics") public Schematics getSchematics() { return schematics; @@ -141,7 +130,6 @@ public class Field { if (data != null) { fieldEntity.setData(data.toMap((Element) this.data)); } - fieldEntity.setRdaCommonStandard(this.rdaProperty); List schematicsList = new LinkedList<>(); if (this.schematics != null && this.schematics.getSchematics() != null) { for (Schematic schematic : this.schematics.getSchematics()) { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java index 2d1e053c3..63bd89b6d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/components/datasetprofile/Field.java @@ -45,7 +45,6 @@ public class Field implements ViewStyleDefinition schematics; private String value; private ViewStyle viewStyle; @@ -71,12 +70,6 @@ public class Field implements ViewStyleDefinition getSchematics() { return schematics; @@ -160,7 +153,6 @@ public class Field implements ViewStyleDefinition { private String id; private int ordinal; - private String rdaCommonStandard; private List schematics; private String numbering; private ViewStyle viewStyle; @@ -43,13 +42,6 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable getSchematics() { return schematics; } @@ -113,14 +105,13 @@ public class Field implements DatabaseViewStyleDefinition, XmlSerializable(); Element schematics = (Element) XmlBuilder.getNodeFromListByTagName(element.getChildNodes(), "schematics"); if(schematics != null){ diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java index 2205e9f18..46f11ded7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/user/components/datasetprofile/Field.java @@ -39,7 +39,6 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin private List multiplicityItems; private List validations; private Visibility visible; - private String rdaProperty; private List schematics; private Boolean export; @@ -155,14 +154,6 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin this.numbering = numbering; } - public String getRdaProperty() { - return rdaProperty; - } - - public void setRdaProperty(String rdaProperty) { - this.rdaProperty = rdaProperty; - } - public List getSchematics() { return schematics; } @@ -190,7 +181,6 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin newField.defaultValue = this.defaultValue; newField.data = this.data; newField.validations = this.validations; - newField.rdaProperty = this.rdaProperty; newField.schematics = this.schematics; newField.numbering = "mult" + index + "_" + this.numbering; newField.export = this.export; @@ -206,7 +196,6 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin field.setDefaultValue(this.defaultValue); field.setVisible(this.visible); field.setValidations(this.validations); - field.setRdaCommonStandard(this.rdaProperty); field.setSchematics(this.schematics); field.setExport(this.export); return field; @@ -222,7 +211,6 @@ public class Field implements Comparable, PropertiesModelBuilder, ViewStyleDefin this.defaultValue = item.getDefaultValue(); this.visible = item.getVisible(); this.validations = item.getValidations(); - this.rdaProperty = item.getRdaCommonStandard(); this.schematics = item.getSchematics(); this.export = item.getExport(); } 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 cf3de51df..5d3aca18b 100644 --- a/dmp-backend/web/src/main/resources/config/application-devel.properties +++ b/dmp-backend/web/src/main/resources/config/application-devel.properties @@ -23,7 +23,6 @@ pdf.converter.url=http://localhost:3000/ ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt configuration.schematics=Schematics.json configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx diff --git a/dmp-backend/web/src/main/resources/config/application-docker.properties b/dmp-backend/web/src/main/resources/config/application-docker.properties index 53d24cdb3..075203f35 100644 --- a/dmp-backend/web/src/main/resources/config/application-docker.properties +++ b/dmp-backend/web/src/main/resources/config/application-docker.properties @@ -23,7 +23,6 @@ pdf.converter.url=http://opendmp-pdf:3000/ ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=configurableLoginProviders.json diff --git a/dmp-backend/web/src/main/resources/config/application-production.properties b/dmp-backend/web/src/main/resources/config/application-production.properties index 296798080..61118ce55 100644 --- a/dmp-backend/web/src/main/resources/config/application-production.properties +++ b/dmp-backend/web/src/main/resources/config/application-production.properties @@ -17,7 +17,6 @@ pdf.converter.url=http://docsbox-web/ ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx configuration.configurable_login_providers=ConfigurableLoginProviders.json diff --git a/dmp-backend/web/src/main/resources/config/application.properties b/dmp-backend/web/src/main/resources/config/application.properties index ad3562d79..36a28a8bb 100644 --- a/dmp-backend/web/src/main/resources/config/application.properties +++ b/dmp-backend/web/src/main/resources/config/application.properties @@ -49,7 +49,6 @@ elasticsearch.certKey= ####################CONFIGURATION FILES OVERRIDES CONFIGURATIONS########## configuration.externalUrls=externalUrls/ExternalUrls.xml -configuration.rda=RDACommonStandards.txt configuration.schematics=Schematics.json configuration.h2020template=documents/h2020.docx configuration.h2020datasettemplate=documents/h2020_dataset.docx diff --git a/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts b/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts index c676f56e6..8f8ec30d7 100644 --- a/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts +++ b/dmp-frontend/src/app/core/model/admin/dataset-profile/dataset-profile.ts @@ -59,7 +59,6 @@ export interface Field { data: any; visible: Visibility; validations: ValidationType[]; - rdaCommonStandard: string; schematics: string[]; export: boolean; } diff --git a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts index 8aa031baa..a62b3beaa 100644 --- a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts +++ b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts @@ -19,9 +19,6 @@ import { ConfigurationService } from '../configuration/configuration.service'; @Injectable() export class DatasetProfileService extends BaseService { - private rdaCommonStandards: String[]; - private rdaCommonStandardsLoading: boolean; - private actionUrl: string; private headers = new HttpHeaders(); @@ -78,19 +75,6 @@ export class DatasetProfileService extends BaseService { return this.http.post(this.actionUrl + "upload", formData, { params: params }); } - getRDACommonStandards(): String[] { - if (!this.rdaCommonStandards && !this.rdaCommonStandardsLoading) { this.getRDACommonStandardsInternal(); } - return this.rdaCommonStandards; - } - - private getRDACommonStandardsInternal() { - this.rdaCommonStandardsLoading = true; - return this.http.get(this.actionUrl + "getRDACommonStandards").pipe(takeUntil(this._destroyed)).subscribe(x => { - this.rdaCommonStandards = x; - this.rdaCommonStandardsLoading = false; - }); - } - searchSchematics(like: string): Observable { return this.http.get(this.actionUrl + "getSchematics?query=" + like); } diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts index 0e57f4172..2ef81df2e 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/admin/field-editor-model.ts @@ -47,7 +47,6 @@ export class FieldEditorModel extends BaseFormModel { public visible: VisibilityEditorModel = new VisibilityEditorModel(); public data: FieldDataEditorModel; public validations: ValidationType[] = []; - public rdaCommonStandard: string; public schematics: string[]; public export: boolean = true; @@ -59,7 +58,6 @@ export class FieldEditorModel extends BaseFormModel { this.validations = item.validations; this.viewStyle = new ViewStyleEditorModel().fromModel(item.viewStyle); this.visible = new VisibilityEditorModel().fromModel(item.visible); - this.rdaCommonStandard = item.rdaCommonStandard; this.schematics = item.schematics; this.export = item.export; @@ -107,7 +105,6 @@ export class FieldEditorModel extends BaseFormModel { page: [{ value: this.page, disabled: (disabled && !skipDisable.includes('FieldEditorModel.page')) }], ordinal: [{ value: this.ordinal, disabled: (disabled && !skipDisable.includes('FieldEditorModel.ordinal')) }], validations: [{ value: this.validations, disabled: (disabled && !skipDisable.includes('FieldEditorModel.validations')) }], - rdaCommonStandard: [{value: this.rdaCommonStandard, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.rdaCommonStandard')) }], schematics: [{ value: this.schematics, disabled: (disabled && !skipDisable.includes('FieldEditorModel.schematics')) }], export: [{value: this.export, disabled: (disabled && !skipDisable.includes('FieldSetEditorModel.export'))}] }); diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts index 9b68efc11..1fe1f6a81 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/editor/components/field/dataset-profile-editor-field.component.ts @@ -72,9 +72,6 @@ export class DatasetProfileEditorFieldComponent extends BaseComponent implements @Output() delete = new EventEmitter(); - - //rdaCommonStandards = this.datasetProfileService.getRDACommonStandards(); //GK: Don't do that again. The service has a weird async behaviour. - schematicsAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { filterFn: this.filterSchematics.bind(this), initialItems: (excludedItems: any[]) => this.filterSchematics('').pipe(map(result => result.filter(resultItem => (excludedItems || []).map(x => x !== resultItem)))), diff --git a/dmp-frontend/src/assets/resources/skipDisable.json b/dmp-frontend/src/assets/resources/skipDisable.json index 74d60d5df..b0d92f82e 100644 --- a/dmp-frontend/src/assets/resources/skipDisable.json +++ b/dmp-frontend/src/assets/resources/skipDisable.json @@ -11,7 +11,6 @@ "FreeTextFieldDataEditorModel.label", "WordListFieldDataEditorModel.label", "FieldDataOptionEditorModel.label", - "FieldSetEditorModel.rdaCommonStandard", "FieldSetEditorModel.schematics", "FieldSetEditorModel.export" ] From 969df0357ade0d7b533ef4a82d73875bd0e7511a Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Mon, 27 Mar 2023 14:58:45 +0300 Subject: [PATCH 07/16] migrate rda properties in dataset profiles definitions in db to schematics --- .../controllers/ManagementController.java | 43 ++++++++++++++++ .../logic/managers/DatasetProfileManager.java | 50 ++++++++++++++++++ dmp-frontend/src/app/app-routing.module.ts | 7 +++ .../maintenance-tasks.service.ts | 20 ++++++++ .../maintenance-tasks.component.html | 8 +++ .../maintenance-tasks.component.scss | 7 +++ .../maintenance-tasks.component.ts | 51 +++++++++++++++++++ .../maintenance-tasks.module.ts | 23 +++++++++ .../maintenance-tasks.routing.ts | 15 ++++++ 9 files changed, 224 insertions(+) create mode 100644 dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java create mode 100644 dmp-frontend/src/app/core/services/maintenance-tasks/maintenance-tasks.service.ts create mode 100644 dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html create mode 100644 dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.scss create mode 100644 dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts create mode 100644 dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.module.ts create mode 100644 dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.routing.ts diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java new file mode 100644 index 000000000..45e810b23 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/ManagementController.java @@ -0,0 +1,43 @@ +package eu.eudat.controllers; + +import eu.eudat.exceptions.datasetprofile.DatasetProfileNewVersionException; +import eu.eudat.logic.managers.DatasetProfileManager; +import eu.eudat.logic.security.claims.ClaimedAuthorities; +import eu.eudat.logic.services.ApiContext; +import eu.eudat.models.data.admin.composite.DatasetProfile; +import eu.eudat.models.data.helpers.responses.ResponseItem; +import eu.eudat.models.data.security.Principal; +import eu.eudat.types.ApiMessageCode; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import javax.transaction.Transactional; + +import static eu.eudat.types.Authorities.ADMIN; + +@RestController +@CrossOrigin +@RequestMapping(value = {"/api/management/"}) +public class ManagementController extends BaseController { + + private DatasetProfileManager datasetProfileManager; + + @Autowired + public ManagementController(ApiContext apiContext, DatasetProfileManager datasetProfileManager){ + super(apiContext); + this.datasetProfileManager = datasetProfileManager; + } + + @Transactional + @RequestMapping(method = RequestMethod.POST, value = {"/addSchematics"}) + public ResponseEntity addSchematicsInDatasetProfiles(@ClaimedAuthorities(claims = {ADMIN}) Principal principal) throws Exception { + try { + this.datasetProfileManager.addSchematicsInDatasetProfiles(); + return ResponseEntity.status(HttpStatus.OK).body(null); + } catch (Exception exception) { + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.ERROR_MESSAGE).message(exception.getMessage())); + } + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java index 12fd713ed..2f9f87d23 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DatasetProfileManager.java @@ -45,9 +45,17 @@ import org.springframework.web.client.RestTemplate; import org.springframework.web.multipart.MultipartFile; import org.w3c.dom.Document; import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; import javax.activation.MimetypesFileTypeMap; import javax.transaction.Transactional; +import javax.xml.transform.OutputKeys; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerException; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; import javax.xml.xpath.*; import java.io.*; import java.nio.file.Files; @@ -376,4 +384,46 @@ public class DatasetProfileManager { } return filteredSchematics; } + + public void addSchematicsInDatasetProfiles() throws XPathExpressionException { + List datasetProfiles = this.databaseRepository.getDatasetProfileDao().getAll().toList(); + for(DatasetProfile datasetProfile: datasetProfiles){ + Document document = XmlBuilder.fromXml(datasetProfile.getDefinition()); + XPathFactory xpathFactory = XPathFactory.newInstance(); + XPath xpath = xpathFactory.newXPath(); + XPathExpression expr = xpath.compile("//rdaCommonStandard"); + NodeList rdaProperties = (NodeList) expr.evaluate(document, XPathConstants.NODESET); + for(int i = 0; i < rdaProperties.getLength(); i++){ + Node rdaPropertyNode = rdaProperties.item(i); + String rdaProperty = rdaPropertyNode.getTextContent(); + Element schematics = document.createElement("schematics"); + Node fieldParent = rdaPropertyNode.getParentNode(); + if(rdaProperty != null && !rdaProperty.isEmpty()){ + Element schematic = document.createElement("schematic"); + schematic.setTextContent(rdaProperty); + schematics.appendChild(schematic); + } + fieldParent.insertBefore(schematics, rdaPropertyNode); + fieldParent.removeChild(rdaPropertyNode); + } + try { + DOMSource domSource = new DOMSource(document); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + TransformerFactory tf = TransformerFactory.newInstance(); + Transformer transformer = tf.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.transform(domSource, result); + String newDefinition = writer.toString(); + if(newDefinition != null){ + + } + datasetProfile.setDefinition(newDefinition); + this.databaseRepository.getDatasetProfileDao().createOrUpdate(datasetProfile); + } + catch(TransformerException ex) { + logger.error(ex.getMessage(), ex); + } + } + } } diff --git a/dmp-frontend/src/app/app-routing.module.ts b/dmp-frontend/src/app/app-routing.module.ts index 120a88ec1..3cba707ac 100644 --- a/dmp-frontend/src/app/app-routing.module.ts +++ b/dmp-frontend/src/app/app-routing.module.ts @@ -224,6 +224,13 @@ const appRoutes: Routes = [ title: 'GENERAL.TITLES.INDEX-MANAGMENT' }, }, + { + path: 'maintenance-tasks', + loadChildren: () => import('./ui/admin/maintenance-tasks/maintenance-tasks.module').then(m => m.MaintenanceTasksModule), + data: { + breadcrumb: true + }, + }, { path: 'login/admin', loadChildren: () => import('./ui/auth/admin-login/admin-login.module').then(m => m.AdminLoginModule), diff --git a/dmp-frontend/src/app/core/services/maintenance-tasks/maintenance-tasks.service.ts b/dmp-frontend/src/app/core/services/maintenance-tasks/maintenance-tasks.service.ts new file mode 100644 index 000000000..babdd7137 --- /dev/null +++ b/dmp-frontend/src/app/core/services/maintenance-tasks/maintenance-tasks.service.ts @@ -0,0 +1,20 @@ +import { Injectable } from "@angular/core"; +import { BaseService } from "@common/base/base.service"; +import { Observable } from "rxjs"; +import { ConfigurationService } from "../configuration/configuration.service"; +import { BaseHttpService } from "../http/base-http.service"; + +@Injectable() +export class MaintenanceTasksService extends BaseService { + + private actionUrl: string; + + constructor(private http: BaseHttpService, configurationService: ConfigurationService) { + super(); + this.actionUrl = configurationService.server + 'management/'; + } + + migrateSchematics(): Observable { + return this.http.post(this.actionUrl + 'addSchematics/', null); + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html new file mode 100644 index 000000000..f3193d329 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.html @@ -0,0 +1,8 @@ +
+ +
+
Warning: Danger zone. Irreversible action!
+ +
+
+
diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.scss b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.scss new file mode 100644 index 000000000..0faaf9e53 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.scss @@ -0,0 +1,7 @@ +.root { + padding-bottom: 2em; + + .button { + margin: 5px; + } +} \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts new file mode 100644 index 000000000..54c811e25 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.component.ts @@ -0,0 +1,51 @@ +import { Component, OnInit } from '@angular/core'; +import { BaseComponent } from '@common/base/base.component'; +import { takeUntil } from 'rxjs/operators'; +import { UiNotificationService, SnackBarNotificationLevel } from '@app/core/services/notification/ui-notification-service'; +import { TranslateService } from '@ngx-translate/core'; +import { Router } from '@angular/router'; +import { MaintenanceTasksService } from '@app/core/services/maintenance-tasks/maintenance-tasks.service'; + +@Component({ + selector: 'app-maintenance-tasks', + templateUrl: './maintenance-tasks.component.html', + styleUrls: ['./maintenance-tasks.component.scss'] +}) +export class MaintenanceTasksComponent extends BaseComponent implements OnInit { + + constructor( + private maintenanceTasksService: MaintenanceTasksService, + private uiNotificationService: UiNotificationService, + private translate: TranslateService, + private router: Router, + ) { + super(); + } + + ngOnInit(): void { + } + + migrateSchematics(ev: Event) { + (ev.srcElement as HTMLButtonElement).disabled = true; + this.maintenanceTasksService.migrateSchematics().pipe(takeUntil(this._destroyed)).subscribe( + response => { + (ev.srcElement as HTMLButtonElement).disabled = false; + this.onCallbackSuccess(); + }, + error => { + (ev.srcElement as HTMLButtonElement).disabled = false; + this.onCallbackError(error); + } + ); + } + + onCallbackSuccess(): void { + this.uiNotificationService.snackBarNotification( this.translate.instant('GENERAL.SNACK-BAR.SUCCESSFUL-UPDATE'), SnackBarNotificationLevel.Success); + this.router.navigate(['/reload']).then(() => this.router.navigate(['/maintenance-tasks'])); + } + + onCallbackError(error: any) { + this.uiNotificationService.snackBarNotification( error, SnackBarNotificationLevel.Error); + } + +} diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.module.ts b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.module.ts new file mode 100644 index 000000000..fe1988755 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.module.ts @@ -0,0 +1,23 @@ +import { NgModule } from '@angular/core'; + +import { MaintenanceTasksRoutingModule } from './maintenance-tasks.routing'; +import { MaintenanceTasksComponent } from './maintenance-tasks.component'; +import { CommonUiModule } from '@common/ui/common-ui.module'; +import { CommonFormsModule } from '@common/forms/common-forms.module'; +import { ConfirmationDialogModule } from '@common/modules/confirmation-dialog/confirmation-dialog.module'; +import { MaintenanceTasksService } from '@app/core/services/maintenance-tasks/maintenance-tasks.service'; + + +@NgModule({ + declarations: [MaintenanceTasksComponent], + imports: [ + CommonUiModule, + CommonFormsModule, + ConfirmationDialogModule, + MaintenanceTasksRoutingModule + ], + providers: [ + MaintenanceTasksService + ] +}) +export class MaintenanceTasksModule { } \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.routing.ts b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.routing.ts new file mode 100644 index 000000000..daec08ac0 --- /dev/null +++ b/dmp-frontend/src/app/ui/admin/maintenance-tasks/maintenance-tasks.routing.ts @@ -0,0 +1,15 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; +import { MaintenanceTasksComponent } from './maintenance-tasks.component'; +import { AdminAuthGuard } from '@app/core/admin-auth-guard.service'; + + +const routes: Routes = [ + { path: '', component: MaintenanceTasksComponent, canActivate: [AdminAuthGuard] }, +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule] +}) +export class MaintenanceTasksRoutingModule { } \ No newline at end of file From 376bb2ca5376529d4417473ff8166aced7097e54 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Mon, 27 Mar 2023 14:59:47 +0300 Subject: [PATCH 08/16] changes in dmp deposit model --- .../mapper/DMPToDepositMapper.java | 72 +++++++++++++++++-- 1 file changed, 68 insertions(+), 4 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java b/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java index 2997f534c..e47e7a95e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/security/repositorydeposit/mapper/DMPToDepositMapper.java @@ -1,29 +1,45 @@ package eu.eudat.logic.security.repositorydeposit.mapper; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.data.entities.*; import eu.eudat.depositinterface.models.*; -import org.springframework.http.ResponseEntity; +import eu.eudat.logic.utilities.builders.XmlBuilder; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; +import javax.xml.xpath.*; import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; public class DMPToDepositMapper { - public static DMPDepositModel fromDMP(DMP entity, File pdfFile, String fileName, ResponseEntity jsonFile, File supportingFilesZip, String previousDOI) { + private static final Logger logger = LoggerFactory.getLogger(DMPToDepositMapper.class); + private static final ObjectMapper mapper = new ObjectMapper(); + + public static DMPDepositModel fromDMP(DMP entity, FileEnvelope pdfFile, FileEnvelope jsonFile, File supportingFilesZip, String previousDOI) { DMPDepositModel deposit = new DMPDepositModel(); deposit.setId(entity.getId()); deposit.setVersion(entity.getVersion()); deposit.setLabel(entity.getLabel()); deposit.setDescription(entity.getDescription()); deposit.setPublic(entity.isPublic()); + deposit.setDatasets(entity.getDataset().stream().map(DMPToDepositMapper::fromDataset).collect(Collectors.toList())); deposit.setUsers(entity.getUsers().stream().map(DMPToDepositMapper::fromUserDMP).collect(Collectors.toSet())); deposit.setOrganisations(entity.getOrganisations().stream().map(DMPToDepositMapper::fromOrganisation).collect(Collectors.toSet())); deposit.setResearchers(entity.getResearchers().stream().map(DMPToDepositMapper::fromResearcher).collect(Collectors.toSet())); deposit.setGrant(fromGrant(entity.getGrant())); deposit.setPdfFile(pdfFile); - deposit.setPdfFileName(fileName); - deposit.setRdaJson(jsonFile); + deposit.setRdaJsonFile(jsonFile); deposit.setSupportingFilesZip(supportingFilesZip); deposit.setPreviousDOI(previousDOI); @@ -31,6 +47,54 @@ public class DMPToDepositMapper { return deposit; } + private static DatasetDepositModel fromDataset(Dataset entity){ + DatasetDepositModel deposit = new DatasetDepositModel(); + deposit.setLabel(entity.getLabel()); + deposit.setDescription(entity.getDescription()); + deposit.setProfileDefinition(entity.getProfile().getDefinition()); + deposit.setProperties(entity.getProperties()); + deposit.setFields(fromDefinitionAndProperties(deposit.getProfileDefinition(), deposit.getProperties())); + return deposit; + } + + private static List fromDefinitionAndProperties(String definition, String properties){ + List deposit = new ArrayList<>(); + try { + + Map datasetAnswers = mapper.readValue(properties, HashMap.class); + + Document document = XmlBuilder.fromXml(definition); + XPathFactory xpathFactory = XPathFactory.newInstance(); + XPath xpath = xpathFactory.newXPath(); + XPathExpression expr = xpath.compile("//schematics"); + NodeList schematics = (NodeList) expr.evaluate(document, XPathConstants.NODESET); + for (int i = 0; i < schematics.getLength(); i++) { + Node schematicsNode = schematics.item(i); + NodeList schematicsList = schematicsNode.getChildNodes(); + DatasetFieldsDepositModel fieldDeposit = new DatasetFieldsDepositModel(); + List schematicsDeposit = new ArrayList<>(); + if(schematicsList != null){ + for(int j = 0; j < schematicsList.getLength(); j++){ + Node schematic = schematicsList.item(j); + if(schematic.getTextContent().matches(".*\\w+.*")) { + schematicsDeposit.add(schematic.getTextContent()); + } + } + } + fieldDeposit.setSchematics(schematicsDeposit); + String fieldId = schematicsNode.getParentNode().getAttributes().getNamedItem("id").getNodeValue(); + String value = (String) datasetAnswers.get(fieldId); + fieldDeposit.setValue(value); + deposit.add(fieldDeposit); + } + } + catch (XPathExpressionException | JsonProcessingException ex){ + logger.error(ex.getMessage(), ex); + return null; + } + return deposit; + } + private static UserDMPDepositModel fromUserDMP(UserDMP entity){ UserDMPDepositModel deposit = new UserDMPDepositModel(); deposit.setUser(fromUserInfo(entity.getUser())); From a90f21b6aaf4373735d5cd8622044f5b683d415b Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Mon, 27 Mar 2023 15:21:12 +0300 Subject: [PATCH 09/16] fix issues in dmp xml export --- .../managers/DataManagementPlanManager.java | 70 +++++++++++++++++-- .../documents/xml/ExportXmlBuilder.java | 5 ++ 2 files changed, 71 insertions(+), 4 deletions(-) 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 38b08e0ed..b54ad96d6 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 @@ -1453,6 +1453,40 @@ public class DataManagementPlanManager { } dmpElement.appendChild(dmpProfileElement); + Element dmpContactElement = xmlDoc.createElement("contact"); + Element dmpContactName = xmlDoc.createElement("name"); + Element dmpContactEmail = xmlDoc.createElement("email"); + if(dmp.getCreator() != null){ + dmpContactName.setTextContent(dmp.getCreator().getName()); + dmpContactEmail.setTextContent(dmp.getCreator().getEmail()); + } + else{ + Iterator users = dmp.getUsers().iterator(); + if(users.hasNext()){ + UserDMP creator = users.next(); + dmpContactName.setTextContent(creator.getUser().getName()); + dmpContactEmail.setTextContent(creator.getUser().getEmail()); + } + } + dmpContactElement.appendChild(dmpContactName); + dmpContactElement.appendChild(dmpContactEmail); + dmpElement.appendChild(dmpContactElement); + + Element dmpContributorsElement = xmlDoc.createElement("contributors"); + Iterator users = dmp.getUsers().iterator(); + while(users.hasNext()){ + Element dmpContributorElement = xmlDoc.createElement("contributor"); + Element dmpContributorName = xmlDoc.createElement("name"); + Element dmpContributorEmail= xmlDoc.createElement("email"); + UserDMP contributor = users.next(); + dmpContributorName.setTextContent(contributor.getUser().getName()); + dmpContributorEmail.setTextContent(contributor.getUser().getEmail()); + dmpContributorElement.appendChild(dmpContributorName); + dmpContributorElement.appendChild(dmpContributorEmail); + dmpContributorsElement.appendChild(dmpContributorElement); + } + dmpElement.appendChild(dmpContributorsElement); + // Funder. Element funder = xmlDoc.createElement("funder"); Element funderLabel = xmlDoc.createElement("label"); @@ -1461,6 +1495,13 @@ public class DataManagementPlanManager { funderId.setTextContent(dmp.getGrant().getFunder().getId().toString()); funder.appendChild(funderLabel); funder.appendChild(funderId); + if(dmp.getGrant().getFunder().getReference() != null){ + String referencePrefix = dmp.getGrant().getFunder().getReference().split(":")[0]; + String shortReference = dmp.getGrant().getFunder().getReference().substring(referencePrefix.length() + 1); + Element funderReference = xmlDoc.createElement("reference"); + funderReference.setTextContent(shortReference); + funder.appendChild(funderReference); + } dmpElement.appendChild(funder); // Grant. Element grant = xmlDoc.createElement("grant"); @@ -1470,15 +1511,31 @@ public class DataManagementPlanManager { grantId.setTextContent(dmp.getGrant().getId().toString()); grant.appendChild(grantLabel); grant.appendChild(grantId); + if(dmp.getGrant().getReference() != null) { + String referencePrefix = dmp.getGrant().getReference().split(":")[0]; + String shortReference = dmp.getGrant().getReference().substring(referencePrefix.length() + 1); + Element grantReference = xmlDoc.createElement("reference"); + grantReference.setTextContent(shortReference); + grant.appendChild(grantReference); + } dmpElement.appendChild(grant); // Project. Element project = xmlDoc.createElement("project"); - Element projectLabel = xmlDoc.createElement("label"); Element projectId = xmlDoc.createElement("id"); - projectLabel.setTextContent(dmp.getProject().getLabel()); + Element projectLabel = xmlDoc.createElement("label"); + Element projectDescription = xmlDoc.createElement("description"); + Element projectStartDate = xmlDoc.createElement("start"); + Element projectEndDate = xmlDoc.createElement("end"); projectId.setTextContent(dmp.getProject().getId().toString()); - project.appendChild(projectLabel); + projectLabel.setTextContent(dmp.getProject().getLabel()); + projectDescription.setTextContent(dmp.getProject().getDescription()); + projectStartDate.setTextContent(dmp.getProject().getStartdate().toString()); + projectEndDate.setTextContent(dmp.getProject().getEnddate().toString()); project.appendChild(projectId); + project.appendChild(projectLabel); + project.appendChild(projectDescription); + project.appendChild(projectStartDate); + project.appendChild(projectEndDate); dmpElement.appendChild(project); Element organisationsElement = xmlDoc.createElement("organisations"); @@ -1510,8 +1567,13 @@ public class DataManagementPlanManager { for (Dataset dataset : datasets) { Element datasetElement = xmlDoc.createElement("dataset"); - Element datsetProfileElement = xmlDoc.createElement("profile"); datasetElement.setAttribute("name", dataset.getLabel()); + + Element datasetDescriptionElement = xmlDoc.createElement("description"); + datasetElement.appendChild(datasetDescriptionElement); + datasetDescriptionElement.setTextContent(dataset.getDescription()); + + Element datsetProfileElement = xmlDoc.createElement("profile"); datasetElement.appendChild(datsetProfileElement); datsetProfileElement.setTextContent(dataset.getProfile().getId().toString()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java index 9c8a591b4..ae8c43490 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/utilities/documents/xml/ExportXmlBuilder.java @@ -86,6 +86,11 @@ public class ExportXmlBuilder { composite.appendChild(title); } composite.appendChild(createFields(compositeField.getFields(), visibilityRuleService, element)); + if(compositeField.getHasCommentField()){ + Element comment = element.createElement("comment"); + comment.setTextContent(compositeField.getCommentFieldValue()); + composite.appendChild(comment); + } elementComposites.appendChild(composite); } From 18ccb3ca0c5ecff8e16e739bf8de67dcda9abb1c Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Mon, 27 Mar 2023 15:24:50 +0300 Subject: [PATCH 10/16] changes in dmp deposit model --- .../main/java/eu/eudat/controllers/DMPs.java | 16 ++++++- .../managers/DataManagementPlanManager.java | 44 ++++++++----------- 2 files changed, 34 insertions(+), 26 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java index 3e421e8fc..a2a1926f6 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/DMPs.java @@ -182,7 +182,21 @@ public class DMPs extends BaseController { public @ResponseBody ResponseEntity getRDAJsonDocument(@PathVariable String id, @ClaimedAuthorities(claims = {Authorities.ADMIN, Authorities.MANAGER, Authorities.USER, Authorities.ANONYMOUS}) Principal principal) { try { - return this.dataManagementPlanManager.getRDAJsonDocument(id, principal); + FileEnvelope rdaJsonDocument = this.dataManagementPlanManager.getRDAJsonDocument(id, principal); + + HttpHeaders responseHeaders = new HttpHeaders(); + responseHeaders.setContentLength(rdaJsonDocument.getFile().length()); + responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); + responseHeaders.set("Content-Disposition", "attachment;filename=" + rdaJsonDocument.getFilename()); + responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition"); + responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type"); + + InputStream resource = new FileInputStream(rdaJsonDocument.getFile()); + byte[] content = org.apache.poi.util.IOUtils.toByteArray(resource); + resource.close(); + Files.deleteIfExists(rdaJsonDocument.getFile().toPath()); + + return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK); } catch (Exception e) { return ResponseEntity.status(HttpStatus.EXPECTATION_FAILED).body(new ResponseItem<>().message(e.getMessage()).status(ApiMessageCode.ERROR_MESSAGE)); } 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 b54ad96d6..96e12f15d 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 @@ -1615,13 +1615,12 @@ public class DataManagementPlanManager { return fileEnvelope; } - public ResponseEntity getRDAJsonDocument(String id, Principal principal) throws Exception { + public FileEnvelope getRDAJsonDocument(String id, Principal principal) throws Exception { eu.eudat.data.entities.DMP dmp = databaseRepository.getDmpDao().find(UUID.fromString(id)); if (!dmp.isPublic() && dmp.getUsers().stream().noneMatch(userInfo -> userInfo.getUser().getId() == principal.getId())) throw new UnauthorisedException(); -// RDAExportModel rdaExportModel = new RDAExportModel().fromDataModel(dmp, datasetManager, principal); - final Boolean isFinalized = dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue(); - final Boolean isPublic = dmp.isPublic(); + final boolean isFinalized = dmp.getStatus() == DMP.DMPStatus.FINALISED.getValue(); + final boolean isPublic = dmp.isPublic(); dmp.setDataset(dmp.getDataset().stream() .filter(dataset -> dataset.getStatus() != Dataset.Status.DELETED.getValue() && dataset.getStatus() != Dataset.Status.CANCELED.getValue()) @@ -1629,15 +1628,12 @@ public class DataManagementPlanManager { .collect(Collectors.toSet())); String result = rdaManager.convertToRDA(dmp); - /*ObjectMapper mapper = new ObjectMapper(); - mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);*/ - String fileName = "DMP_" + dmp.getGrant().getLabel() + "_" + dmp.getVersion();//dmp.getLabel(); + String fileName = "DMP_" + dmp.getGrant().getLabel() + "_" + dmp.getVersion(); fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", "").replace(" ", "_").replace(",", "_"); String uuid = UUID.randomUUID().toString(); File file = new File(this.environment.getProperty("temp.temp") + uuid + ".json"); OutputStream output = new FileOutputStream(file); try { -// mapper.writeValue(file, rdaExportModel); output.write(result.getBytes()); output.flush(); output.close(); @@ -1645,18 +1641,10 @@ public class DataManagementPlanManager { logger.error(e.getMessage(), e); } - InputStream resource = new FileInputStream(file); - HttpHeaders responseHeaders = new HttpHeaders(); - responseHeaders.setContentLength(file.length()); - responseHeaders.setContentType(MediaType.APPLICATION_OCTET_STREAM); - responseHeaders.set("Content-Disposition", "attachment;filename=" + fileName + ".json"); - responseHeaders.set("Access-Control-Expose-Headers", "Content-Disposition"); - responseHeaders.get("Access-Control-Expose-Headers").add("Content-Type"); - - byte[] content = org.apache.poi.util.IOUtils.toByteArray(resource); - resource.close(); - Files.deleteIfExists(file.toPath()); - return new ResponseEntity<>(content, responseHeaders, HttpStatus.OK); + FileEnvelope rdaJsonDocument = new FileEnvelope(); + rdaJsonDocument.setFilename(fileName + ".json"); + rdaJsonDocument.setFile(file); + return rdaJsonDocument; } public ResponseEntity getDocument(String id, String contentType, Principal principal, ConfigLoader configLoader) throws InstantiationException, IllegalAccessException, IOException { @@ -2112,18 +2100,22 @@ public class DataManagementPlanManager { FileEnvelope file = getWordDocument(depositRequest.getDmpId(), principal, configLoader); String name = file.getFilename().substring(0, file.getFilename().length() - 5).replaceAll("[^a-zA-Z0-9_+ ]", "").replace(" ", "_").replace(",", "_"); File pdfFile = PDFUtils.convertToPDF(file, environment); - String fileName = name + ".pdf"; - ResponseEntity jsonFile; + eu.eudat.depositinterface.models.FileEnvelope pdfEnvelope = new eu.eudat.depositinterface.models.FileEnvelope(); + pdfEnvelope.setFile(pdfFile); + pdfEnvelope.setFilename(name + ".pdf"); + eu.eudat.depositinterface.models.FileEnvelope rdaJsonFile = new eu.eudat.depositinterface.models.FileEnvelope(); try { - jsonFile = getRDAJsonDocument(depositRequest.getDmpId(), principal); + FileEnvelope rdaJsonDocument = getRDAJsonDocument(depositRequest.getDmpId(), principal); + rdaJsonFile.setFile(rdaJsonDocument.getFile()); + rdaJsonFile.setFilename(rdaJsonDocument.getFilename()); } catch (Exception e) { - throw e; + logger.error(e.getMessage(), e); } String previousDOI = this.getPreviousDOI(dmp.getGroupId(), dmp.getId(), depositRequest.getRepositoryId()); File supportingFilesZip = this.createSupportingFilesZip(dmp); - DMPDepositModel dmpDepositModel = DMPToDepositMapper.fromDMP(dmp, pdfFile, fileName, jsonFile, supportingFilesZip, previousDOI); + DMPDepositModel dmpDepositModel = DMPToDepositMapper.fromDMP(dmp, pdfEnvelope, rdaJsonFile, supportingFilesZip, previousDOI); Optional repo = this.repositoriesDeposit.stream().filter(x -> x.getConfiguration().getRepositoryId().equals(depositRequest.getRepositoryId())).findFirst(); String finalDoi = repo.map(r -> { @@ -2157,10 +2149,12 @@ public class DataManagementPlanManager { if(supportingFilesZip != null) { Files.deleteIfExists(supportingFilesZip.toPath()); } + Files.deleteIfExists(rdaJsonFile.getFile().toPath()); Files.deleteIfExists(pdfFile.toPath()); Files.deleteIfExists(file.getFile().toPath()); return doiModel; + } private File createSupportingFilesZip(DMP dmp) throws IOException { From 18a200f099a87fcd04dafefd68c1ea49d6325f27 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Mon, 27 Mar 2023 15:25:19 +0300 Subject: [PATCH 11/16] no message --- .../configloaders/DefaultConfigLoader.java | 29 ------------------- 1 file changed, 29 deletions(-) diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java index ee196de25..4cf992a80 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/proxy/config/configloaders/DefaultConfigLoader.java @@ -37,7 +37,6 @@ public class DefaultConfigLoader implements ConfigLoader { private static final ObjectMapper mapper = new ObjectMapper(); private ExternalUrls externalUrls; - private List rdaProperties; private List schematics; private XWPFDocument document; private XWPFDocument datasetDocument; @@ -67,26 +66,6 @@ public class DefaultConfigLoader implements ConfigLoader { } } - private void setRdaProperties() { - String filePath = environment.getProperty("configuration.rda"); - logger.info("Loaded also config file: " + filePath); - BufferedReader reader; - List rdaList = new LinkedList<>(); - try { - reader = new BufferedReader(new InputStreamReader(getStreamFromPath(filePath))); - String line = reader.readLine(); - while (line != null) { - rdaList.add(line); - line = reader.readLine(); - } - reader.close(); - } catch (IOException | NullPointerException e) { - logger.error(e.getMessage(), e); - } - - rdaProperties = rdaList; - } - private void setSchematics() { String filePath = environment.getProperty("configuration.schematics"); logger.info("Loaded also config file: " + filePath); @@ -187,14 +166,6 @@ public class DefaultConfigLoader implements ConfigLoader { return externalUrls; } - public List getRdaProperties() { - if (rdaProperties == null) { - rdaProperties = new ArrayList<>(); - this.setRdaProperties(); - } - return rdaProperties; - } - public List getSchematics() { if (schematics == null) { schematics = new ArrayList<>(); From b6b7a2444caa63bb637d404b4a169cd2a4ec7115 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Thu, 30 Mar 2023 11:44:00 +0300 Subject: [PATCH 12/16] add xml attributes in dmp xml export --- .../managers/DataManagementPlanManager.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) 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 96e12f15d..ab35fbb2d 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 @@ -1573,10 +1573,14 @@ public class DataManagementPlanManager { datasetElement.appendChild(datasetDescriptionElement); datasetDescriptionElement.setTextContent(dataset.getDescription()); - Element datsetProfileElement = xmlDoc.createElement("profile"); + Element datsetProfileElement = xmlDoc.createElement("profile-id"); datasetElement.appendChild(datsetProfileElement); datsetProfileElement.setTextContent(dataset.getProfile().getId().toString()); + Element datsetProfileLabelElement = xmlDoc.createElement("profile-label"); + datasetElement.appendChild(datsetProfileLabelElement); + datsetProfileLabelElement.setTextContent(dataset.getProfile().getLabel()); + DatasetWizardModel datasetWizardModel = new DatasetWizardModel(); Map properties = new HashMap<>(); if (dataset.getProperties() != null) { @@ -1594,12 +1598,18 @@ public class DataManagementPlanManager { // Get DatasetProfiles from DMP to add to XML. for (DatasetProfile datasetProfile : dmp.getAssociatedDmps()) { Element profile = xmlDoc.createElement("profile"); - Element profileLabel = xmlDoc.createElement("profilelabel"); - profileLabel.setTextContent(datasetProfile.getLabel()); - profile.appendChild(profileLabel); Element profileId = xmlDoc.createElement("profileId"); profileId.setTextContent(datasetProfile.getId().toString()); profile.appendChild(profileId); + Element profileGroupId = xmlDoc.createElement("profileGroupId"); + profileGroupId.setTextContent(datasetProfile.getGroupId().toString()); + profile.appendChild(profileGroupId); + Element profileLabel = xmlDoc.createElement("profileLabel"); + profileLabel.setTextContent(datasetProfile.getLabel()); + profile.appendChild(profileLabel); + Element profileVersion = xmlDoc.createElement("profileVersion"); + profileVersion.setTextContent(String.valueOf(datasetProfile.getVersion())); + profile.appendChild(profileVersion); profiles.appendChild(profile); } dmpElement.appendChild(profiles); From 63c866d74fb663069339a2fd88b901ba475ee36e Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Thu, 30 Mar 2023 11:44:50 +0300 Subject: [PATCH 13/16] set creator in new/cloned/newVersioned dmp --- .../eu/eudat/logic/managers/DataManagementPlanManager.java | 3 +++ 1 file changed, 3 insertions(+) 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 ab35fbb2d..8c4e995e5 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 @@ -481,6 +481,7 @@ public class DataManagementPlanManager { checkDmpValidationRules(newDmp); } UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); + newDmp.setCreator(user); createOrganisationsIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getOrganisationDao()); createResearchersIfTheyDontExist(newDmp, apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao(), user); @@ -645,6 +646,7 @@ public class DataManagementPlanManager { if (latestVersionDMP.get(0).getVersion().equals(oldDmp.getVersion())) { DMP newDmp = dataManagementPlan.toDataModel(); UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + newDmp.setCreator(user); createOrganisationsIfTheyDontExist(newDmp, databaseRepository.getOrganisationDao()); createResearchersIfTheyDontExist(newDmp, databaseRepository.getResearcherDao(), user); @@ -705,6 +707,7 @@ public class DataManagementPlanManager { DMP newDmp = dataManagementPlan.toDataModel(); UserInfo user = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserInfoBuilder.class).id(principal.getId()).build(); + newDmp.setCreator(user); createOrganisationsIfTheyDontExist(newDmp, databaseRepository.getOrganisationDao()); createResearchersIfTheyDontExist(newDmp, databaseRepository.getResearcherDao(), user); From f822e0688175eb907e82bc19579e62dc63bccbcd Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Sun, 9 Apr 2023 13:21:08 +0300 Subject: [PATCH 14/16] upload new version for dataset template from xml file --- .../dataset-profile.service.ts | 7 +++-- .../dataset-profile-listing.component.html | 3 ++ .../dataset-profile-listing.component.ts | 29 +++++++++++++++++++ dmp-frontend/src/assets/i18n/en.json | 7 +++++ 4 files changed, 44 insertions(+), 2 deletions(-) diff --git a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts index a62b3beaa..1c30b086c 100644 --- a/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts +++ b/dmp-frontend/src/app/core/services/dataset-profile/dataset-profile.service.ts @@ -65,14 +65,17 @@ export class DatasetProfileService extends BaseService { return this.httpClient.get(this.actionUrl + 'getXml/' + id, { responseType: 'blob', observe: 'response', headers: headerXml }); } - uploadFile(file: FileList, labelSent: string): Observable> { + uploadFile(file: FileList, labelSent: string, datasetProfileId?: string): Observable> { const params = new BaseHttpParams(); params.interceptorContext = { excludedInterceptors: [InterceptorType.JSONContentType] }; const formData = new FormData(); formData.append('file', file[0], labelSent); - return this.http.post(this.actionUrl + "upload", formData, { params: params }); + return (datasetProfileId === undefined || datasetProfileId == null) + ? this.http.post(this.actionUrl + "upload", formData, { params: params }) + : this.http.post(this.actionUrl + "upload/" + datasetProfileId, formData, { params: params }); + } searchSchematics(like: string): Observable { diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html index ca7500119..c1036626b 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.html @@ -60,6 +60,9 @@ + diff --git a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts index 4a9246688..cfb0315f6 100644 --- a/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts +++ b/dmp-frontend/src/app/ui/admin/dataset-profile/listing/dataset-profile-listing.component.ts @@ -123,6 +123,35 @@ export class DatasetProfileListingComponent extends BaseComponent implements OnI this.router.navigate(['dataset-profiles/newversion/' + id]); } + newVersionFromFile(id: string, label: string): void { + const dialogRef = this.dialog.open(DialogConfirmationUploadDatasetProfiles, { + width: '500px', + restoreFocus: false, + data: { + message: this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML-FILE-TITLE', {datasetName: label}), + confirmButton: this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML'), + cancelButton: this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML-FILE-CANCEL'), + name: "", + file: FileList, + sucsess: false + } + }); + dialogRef.afterClosed().pipe(takeUntil(this._destroyed)).subscribe(data => { + if (data && data.sucsess && data.name != null && data.file != null) { + this.datasetService.uploadFile(data.file, data.name, id) + .pipe(takeUntil(this._destroyed)) + .subscribe(_=>{ + this.uiNotificationService.snackBarNotification(this.language.instant('DATASET-WIZARD.NEW-VERSION-FROM-FILE.NEW-VERSION-XML-SUCCESSFUL'), SnackBarNotificationLevel.Success); + this.refresh(); + }, + error=>{ + this.uiNotificationService.snackBarNotification(error.message, SnackBarNotificationLevel.Error); + } + ); + } + }); + } + viewVersions(rowId, rowLabel) { this.router.navigate(['/dataset-profiles/versions/' + rowId], { queryParams: { groupLabel: rowLabel } }); } diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index e4d542f3f..afdd899e3 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -765,6 +765,12 @@ "UPLOAD-XML-IMPORT": "File", "UPLOAD-XML-FILE-CANCEL": "Cancel" }, + "NEW-VERSION-FROM-FILE": { + "NEW-VERSION-XML": "Import", + "NEW-VERSION-XML-FILE-TITLE": "New Version from File for {{datasetName}}", + "NEW-VERSION-XML-FILE-CANCEL": "Cancel", + "NEW-VERSION-XML-SUCCESSFUL": "New Version successfully uploaded" + }, "DIALOGUE": { "TITLE": "Copy Dataset to DMP", "DMP-SEARCH": { @@ -930,6 +936,7 @@ "VIEW": "View", "CLONE": "Clone", "NEW-VERSION": "New Version", + "NEW-VERSION-FROM-FILE": "New Version from File", "VIEW-VERSIONS": "All Dataset Template Versions", "DELETE": "Delete", "CREATE-DATASET-TEMPLATE": "Create Dataset Template" From 8293535bb0c1b46554fb9e5eb04f5d6cfd8dfe32 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 18 Apr 2023 09:41:01 +0300 Subject: [PATCH 15/16] add zenodo properties in schematics --- .../web/src/main/resources/Schematics.json | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/dmp-backend/web/src/main/resources/Schematics.json b/dmp-backend/web/src/main/resources/Schematics.json index 78e22f26f..00d4e3101 100644 --- a/dmp-backend/web/src/main/resources/Schematics.json +++ b/dmp-backend/web/src/main/resources/Schematics.json @@ -326,5 +326,49 @@ { "category": "rda", "name": "rda.dmp.title" + }, + { + "category": "zenodo", + "name": "zenodo.related_identifiers" + }, + { + "category": "zenodo", + "name": "zenodo.related_identifiers.relation" + }, + { + "category": "zenodo", + "name": "zenodo.related_identifiers.identifier" + }, + { + "category": "zenodo", + "name": "zenodo.communities" + }, + { + "category": "zenodo", + "name": "zenodo.grants" + }, + { + "category": "zenodo", + "name": "zenodo.creators" + }, + { + "category": "zenodo", + "name": "zenodo.contributors" + }, + { + "category": "zenodo", + "name": "zenodo.keywords" + }, + { + "category": "zenodo", + "name": "zenodo.references" + }, + { + "category": "zenodo", + "name": "zenodo.notes" + }, + { + "category": "zenodo", + "name": "zenodo.publication_date" } ] \ No newline at end of file From 11a9abae42c31a4606aff11dcc30e85bb6c30c13 Mon Sep 17 00:00:00 2001 From: Aldo Mihasi Date: Tue, 18 Apr 2023 10:51:13 +0300 Subject: [PATCH 16/16] version change in base deposit repository --- dmp-backend/web/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dmp-backend/web/pom.xml b/dmp-backend/web/pom.xml index f774d2446..040999296 100644 --- a/dmp-backend/web/pom.xml +++ b/dmp-backend/web/pom.xml @@ -34,7 +34,7 @@ gr.cite.opendmp repositorydepositbase - 1.0.1 + 1.0.2