From 2936cbbb7ae5e589447f344191c101bb585660a9 Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Thu, 23 Nov 2023 10:26:40 +0200 Subject: [PATCH 1/4] Adding dataset migration service --- .../java/eu/eudat/data/DescriptionEntity.java | 1 - .../migration/DatasetMigrationService.java | 99 +++++++++++++++++ .../DmpDatasetProfileMigrationService.java | 102 ++++++++++++++++++ .../eudat/migration/DmpMigrationService.java | 8 +- .../datasetwizard/DatasetWizardModel.java | 22 ++++ .../migration/MigrationController.java | 47 ++++++-- 6 files changed, 262 insertions(+), 17 deletions(-) create mode 100644 dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java create mode 100644 dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java index 833d6215f..59ccd8c68 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DescriptionEntity.java @@ -64,7 +64,6 @@ public class DescriptionEntity implements DataEntity { public static final String _isActive = "isActive"; @Column(name = "\"finalized_at\"") - @Convert(converter = DateToUTCConverter.class) private Instant finalizedAt; public static final String _finalizedAt = "finalizedAt"; diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java new file mode 100644 index 000000000..d65414b96 --- /dev/null +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java @@ -0,0 +1,99 @@ +package eu.old.eudat.migration; + +import com.fasterxml.jackson.core.JsonProcessingException; +import eu.eudat.commons.JsonHandlingService; +import eu.eudat.commons.enums.*; +import eu.eudat.data.DescriptionEntity; +import eu.old.eudat.data.entities.Dataset; +import eu.old.eudat.logic.services.operations.DatabaseRepository; +import eu.old.eudat.models.data.datasetwizard.DatasetWizardModel; +import eu.old.eudat.queryable.QueryableList; +import jakarta.persistence.EntityManager; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class DatasetMigrationService { + + private final DatabaseRepository databaseRepository; + + private final JsonHandlingService jsonHandlingService; + + private final EntityManager entityManager; + + public DatasetMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager) { + this.databaseRepository = databaseRepository; + this.jsonHandlingService = jsonHandlingService; + this.entityManager = entityManager; + } + + public QueryableList datasetQueryableList() { + return databaseRepository.getDatasetDao().asQueryable(); + } + + public List getDatasets(Integer skip, Integer take) { + List datasets = datasetQueryableList() + .orderBy((builder, root) -> builder.desc(root.get("created"))) + .skip(skip) + .take(take) + .toList(); + + return datasets.stream().map(x -> { + DatasetWizardModel dataset = new DatasetWizardModel(); + dataset.fromDataModel(x); + return dataset; + }).toList(); + } + + public List collectDatasetsInfo() throws JsonProcessingException { + List collectedInfoList = new ArrayList<>(); + List datasets = getDatasets(0, 4); + for (DatasetWizardModel datasetWizardModel : datasets) { + DatasetMigrationCollectedInfo datasetMigrationCollectedInfo = new DatasetMigrationCollectedInfo(); + + //Collect basic dataset information + DescriptionEntity descriptionEntity = new DescriptionEntity(); + descriptionEntity.setId(datasetWizardModel.getId()); + descriptionEntity.setDescription(datasetWizardModel.getDescription()); + descriptionEntity.setCreatedById(datasetWizardModel.getCreatedBy()); + descriptionEntity.setDmpId(datasetWizardModel.getDmp().getId()); + descriptionEntity.setLabel(datasetWizardModel.getLabel()); + if (datasetWizardModel.getCreated() != null) + descriptionEntity.setCreatedAt(datasetWizardModel.getCreated().toInstant()); + if (datasetWizardModel.getModified() != null) + descriptionEntity.setUpdatedAt(datasetWizardModel.getModified().toInstant()); + if (datasetWizardModel.getFinalized() != null) + descriptionEntity.setFinalizedAt(datasetWizardModel.getFinalized().toInstant()); + if (datasetWizardModel.getStatus() == 99) { + descriptionEntity.setIsActive(IsActive.Inactive); + descriptionEntity.setStatus(DescriptionStatus.Canceled); + } else { + descriptionEntity.setIsActive(IsActive.Active); + descriptionEntity.setStatus(DescriptionStatus.of(datasetWizardModel.getStatus())); + } +// descriptionEntity.setDmpDescriptionTemplateId(); //TODO MIGRATE DMPDESCRIPTIONTEMPLATES + + datasetMigrationCollectedInfo.descriptionEntity = descriptionEntity; + + collectedInfoList.add(datasetMigrationCollectedInfo); + } + return collectedInfoList; + } + + public String migrate() throws JsonProcessingException { + for (DatasetMigrationCollectedInfo collectedInfo : collectDatasetsInfo()) { + this.entityManager.persist(collectedInfo.descriptionEntity); + } + this.entityManager.flush(); + return "Migrated dmps"; + } + + public static class DatasetMigrationCollectedInfo { + + public DescriptionEntity descriptionEntity; + + } + +} diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java new file mode 100644 index 000000000..8dab50b20 --- /dev/null +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java @@ -0,0 +1,102 @@ +package eu.old.eudat.migration; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.core.JsonProcessingException; +import eu.eudat.commons.JsonHandlingService; +import eu.eudat.commons.enums.DescriptionStatus; +import eu.eudat.commons.enums.IsActive; +import eu.eudat.data.DescriptionEntity; +import eu.eudat.data.DmpDescriptionTemplateEntity; +import eu.old.eudat.data.entities.DMPDatasetProfile; +import eu.old.eudat.data.entities.Dataset; +import eu.old.eudat.logic.services.operations.DatabaseRepository; +import eu.old.eudat.models.data.datasetwizard.DatasetWizardModel; +import eu.old.eudat.queryable.QueryableList; +import jakarta.persistence.EntityManager; +import org.springframework.stereotype.Service; + +import java.time.Instant; +import java.util.ArrayList; +import java.util.List; + +@Service +public class DmpDatasetProfileMigrationService { + + private final DatabaseRepository databaseRepository; + + private final JsonHandlingService jsonHandlingService; + + private final EntityManager entityManager; + + public DmpDatasetProfileMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager) { + this.databaseRepository = databaseRepository; + this.jsonHandlingService = jsonHandlingService; + this.entityManager = entityManager; + } + + public QueryableList dmpDatasetProfileQueryableList() { + return databaseRepository.getDmpDatasetProfileDao().asQueryable(); + } + + public List getDatasets(Integer skip, Integer take) { + return dmpDatasetProfileQueryableList() +// .orderBy((builder, root) -> builder.desc(root.get("created"))) + .skip(skip) + .take(take) + .toList(); + } + + public List collectDatasetsInfo() throws JsonProcessingException { + List collectedInfoList = new ArrayList<>(); + List dmpDatasetProfiles = getDatasets(0, 4); + for (DMPDatasetProfile dmpDatasetProfile : dmpDatasetProfiles) { + DmpDatasetProfileMigrationCollectedInfo dmpDatasetProfileMigrationCollectedInfo = new DmpDatasetProfileMigrationCollectedInfo(); + + DmpDatasetProfileData data = jsonHandlingService.fromJson(DmpDatasetProfileData.class, dmpDatasetProfile.getData()); + + //Collect basic information + DmpDescriptionTemplateEntity dmpDescriptionTemplateEntity = new DmpDescriptionTemplateEntity(); + dmpDescriptionTemplateEntity.setDescriptionTemplateId(dmpDatasetProfile.getDatasetprofile().getId()); + dmpDescriptionTemplateEntity.setDmpId(dmpDatasetProfile.getDmp().getId()); + dmpDescriptionTemplateEntity.setCreatedAt(Instant.now()); + dmpDescriptionTemplateEntity.setUpdatedAt(Instant.now()); + dmpDescriptionTemplateEntity.setSectionId(null); //TODO + dmpDescriptionTemplateEntity.setIsActive(IsActive.Active); + + dmpDatasetProfileMigrationCollectedInfo.dmpDescriptionTemplateEntity = dmpDescriptionTemplateEntity; + + collectedInfoList.add(dmpDatasetProfileMigrationCollectedInfo); + } + return collectedInfoList; + } + + public String migrate() throws JsonProcessingException { + for (DmpDatasetProfileMigrationCollectedInfo collectedInfo : collectDatasetsInfo()) { +// this.entityManager.persist(collectedInfo.dmpDescriptionTemplateEntity); + } + this.entityManager.flush(); + return "Migrated dmps"; + } + + public static class DmpDatasetProfileMigrationCollectedInfo { + + public DmpDescriptionTemplateEntity dmpDescriptionTemplateEntity; + + } + + @JsonIgnoreProperties({"validationErrorModel"}) + public static class DmpDatasetProfileData { + + private List dmpSectionIndex; + + public List getDmpSectionIndex() { + return dmpSectionIndex; + } + + public void setDmpSectionIndex(List dmpSectionIndex) { + this.dmpSectionIndex = dmpSectionIndex; + } + + } + +} diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java index 5a176a6a2..857b793af 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java @@ -13,12 +13,9 @@ import eu.eudat.data.DmpEntity; import eu.old.eudat.data.entities.DMP; import eu.old.eudat.logic.services.operations.DatabaseRepository; import eu.old.eudat.models.data.dmp.DataManagementPlan; -import eu.old.eudat.publicapi.migration.MigrationController; import eu.old.eudat.queryable.QueryableList; import jakarta.persistence.EntityManager; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import java.util.ArrayList; @@ -44,7 +41,7 @@ public class DmpMigrationService { return databaseRepository.getDmpDao().asQueryable(); } - public List getDmps(@PathVariable("skip") Integer skip, @PathVariable("take") Integer take) { + public List getDmps(Integer skip, Integer take) { List dmps = dmpQueryableList() .orderBy((builder, root) -> builder.desc(root.get("created"))) .skip(skip) @@ -70,7 +67,7 @@ public class DmpMigrationService { //Collect basic dmp information DmpEntity dmpEntity = new DmpEntity(); - dmpEntity.setId(UUID.randomUUID()); + dmpEntity.setId(dataManagementPlan.getId()); dmpEntity.setLabel(dataManagementPlan.getLabel()); dmpEntity.setDescription(dataManagementPlan.getDescription()); if (dataManagementPlan.getCreator() != null) @@ -120,7 +117,6 @@ public class DmpMigrationService { return collectedInfoList; } - @Transactional public String migrate() throws JsonProcessingException { for (DmpMigrationCollectedInfo collectedInfo : collectDmpsInfo()) { this.entityManager.persist(collectedInfo.dmpEntity); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/datasetwizard/DatasetWizardModel.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/datasetwizard/DatasetWizardModel.java index 4fb8ee7f4..e4170bdfe 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/datasetwizard/DatasetWizardModel.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/datasetwizard/DatasetWizardModel.java @@ -22,6 +22,7 @@ public class DatasetWizardModel implements DataModel(); this.services = entity.getServices() != null ? entity.getServices().stream().map(item -> new eu.old.eudat.models.data.dataset.Service().fromDataModel(item.getService())).collect(Collectors.toList()) : new ArrayList<>(); this.created = entity.getCreated(); + this.createdBy = entity.getCreator().getId(); this.dmp = new DataManagementPlan().fromDataModelNoDatasets(entity.getDmp()); this.dmpSectionIndex = entity.getDmpSectionIndex(); this.externalDatasets = entity.getDatasetExternalDatasets() != null ? entity.getDatasetExternalDatasets().stream().map(item -> { @@ -196,6 +213,7 @@ public class DatasetWizardModel implements DataModel(); this.modified = entity.getModified(); + this.finalized = entity.getFinalizedAt(); return this; } @@ -251,7 +269,11 @@ public class DatasetWizardModel implements DataModel Date: Thu, 23 Nov 2023 10:34:44 +0200 Subject: [PATCH 2/4] Cleanup --- .../publicapi/migration/MigrationController.java | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java index 3f58b2ec9..1b1900ed0 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java @@ -2,16 +2,12 @@ package eu.old.eudat.publicapi.migration; import com.fasterxml.jackson.core.JsonProcessingException; import eu.old.eudat.migration.*; -import eu.eudat.commons.JsonHandlingService; -import eu.old.eudat.logic.services.operations.DatabaseRepository; -import eu.old.eudat.migration.DatasetMigrationService; -import eu.old.eudat.migration.DmpDatasetProfileMigrationService; -import eu.old.eudat.migration.DmpMigrationService; -import eu.old.eudat.migration.OrganizationMigrationService; import io.swagger.annotations.Api; -import jakarta.persistence.EntityManager; import org.springframework.transaction.annotation.Transactional; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; @Api(tags = "Migration") @RestController @@ -28,11 +24,8 @@ public class MigrationController { private final RegistryMigrationService registryMigrationService; private final ResearcherMigrationService researcherMigrationService; private final ServiceMigrationService serviceMigrationService; - private final DatasetMigrationService datasetMigrationService; - private final DmpDatasetProfileMigrationService dmpDatasetProfileMigrationService; - private final OrganizationMigrationService organizationMigrationService; public MigrationController( From e47a370088dcb84165846f152a32d7d9f90c77b5 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Thu, 23 Nov 2023 12:36:24 +0200 Subject: [PATCH 3/4] reference migrate --- .../DataRepositoryMigrationService.java | 23 ++++++++- .../ExternalDatasetMigrationService.java | 1 + .../migration/FunderMigrationService.java | 2 +- .../migration/GrantMigrationService.java | 47 +++++++++++++++++-- .../OrganizationMigrationService.java | 25 ++++++++-- .../migration/ProjectMigrationService.java | 46 ++++++++++++++++-- .../migration/RegistryMigrationService.java | 24 ++++++++-- .../migration/ResearcherMigrationService.java | 40 ++++++++++++++-- .../migration/ServiceMigrationService.java | 26 ++++++++-- 9 files changed, 210 insertions(+), 24 deletions(-) diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DataRepositoryMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DataRepositoryMigrationService.java index abcd4ef57..f61421759 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DataRepositoryMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DataRepositoryMigrationService.java @@ -1,8 +1,13 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.entities.DataRepositoryDao; import eu.old.eudat.data.entities.DataRepository; @@ -23,9 +28,13 @@ public class DataRepositoryMigrationService { private static final String InternalReferenceSource = "dmp"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public DataRepositoryMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public DataRepositoryMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -49,6 +58,8 @@ public class DataRepositoryMigrationService { String[] referenceParts = item.getReference().split(":", 2); boolean isInternal = referenceParts[0].equals(InternalReferenceSource); + + ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); @@ -61,6 +72,16 @@ public class DataRepositoryMigrationService { data.setReference(referenceParts[1]); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(isInternal? ReferenceSourceType.Internal : ReferenceSourceType.External); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + DefinitionEntity definitionEntity = new DefinitionEntity(); + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.setFields(List.of(fieldEntity)); + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } + this.entityManager.persist(data); } this.entityManager.flush(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ExternalDatasetMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ExternalDatasetMigrationService.java index f2b97d288..ae447b40b 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ExternalDatasetMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ExternalDatasetMigrationService.java @@ -54,6 +54,7 @@ public class ExternalDatasetMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); + data.setAbbreviation(item.getAbbreviation()); data.setIsActive(IsActive.Active); data.setType(ReferenceType.Datasets); data.setCreatedAt(item.getCreated().toInstant()); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/FunderMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/FunderMigrationService.java index d295e10c6..75b187400 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/FunderMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/FunderMigrationService.java @@ -54,7 +54,7 @@ public class FunderMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Funder); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/GrantMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/GrantMigrationService.java index 52f0f3656..8abcbb886 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/GrantMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/GrantMigrationService.java @@ -1,11 +1,15 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.entities.GrantDao; -import eu.old.eudat.data.entities.DMP; import eu.old.eudat.data.entities.Grant; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; @@ -13,6 +17,7 @@ import jakarta.persistence.EntityManager; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -24,9 +29,13 @@ public class GrantMigrationService { private static final String InternalReferenceSource = "dmp"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public GrantMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public GrantMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -54,7 +63,8 @@ public class GrantMigrationService { data.setId(item.getId()); data.setLabel(item.getLabel()); data.setDescription(item.getDescription()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setAbbreviation(item.getAbbreviation()); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Grants); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); @@ -62,6 +72,37 @@ public class GrantMigrationService { data.setReference(referenceParts[1]); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(isInternal ? ReferenceSourceType.Internal : ReferenceSourceType.External); + + DefinitionEntity definitionEntity = new DefinitionEntity(); + definitionEntity.setFields(new ArrayList<>()); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.getFields().add(fieldEntity); + } + + if (item.getStartdate() != null){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("startDate"); + fieldEntity.setDataType(ReferenceFieldDataType.Date); + fieldEntity.setValue(item.getStartdate().toInstant().toString()); + definitionEntity.getFields().add(fieldEntity); + } + + if (item.getEnddate() != null){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("endDate"); + fieldEntity.setDataType(ReferenceFieldDataType.Date); + fieldEntity.setValue(item.getEnddate().toInstant().toString()); + definitionEntity.getFields().add(fieldEntity); + } + + if (!definitionEntity.getFields().isEmpty()){ + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } + this.entityManager.persist(data); } this.entityManager.flush(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/OrganizationMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/OrganizationMigrationService.java index b26fd3719..220c489dd 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/OrganizationMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/OrganizationMigrationService.java @@ -1,11 +1,15 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.entities.OrganisationDao; -import eu.old.eudat.data.entities.DMP; import eu.old.eudat.data.entities.Organisation; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; @@ -13,7 +17,6 @@ import jakarta.persistence.EntityManager; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -25,9 +28,13 @@ public class OrganizationMigrationService { private static final String InternalReferenceSource = "Internal"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public OrganizationMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public OrganizationMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -56,7 +63,8 @@ public class OrganizationMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setAbbreviation(item.getAbbreviation()); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Organizations); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); @@ -64,6 +72,15 @@ public class OrganizationMigrationService { data.setAbbreviation(item.getAbbreviation()); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(isInternal? ReferenceSourceType.Internal : ReferenceSourceType.External); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + DefinitionEntity definitionEntity = new DefinitionEntity(); + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.setFields(List.of(fieldEntity)); + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } this.entityManager.persist(data); } this.entityManager.flush(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ProjectMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ProjectMigrationService.java index d6424013e..56e49ac8d 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ProjectMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ProjectMigrationService.java @@ -1,11 +1,15 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.entities.ProjectDao; -import eu.old.eudat.data.entities.DMP; import eu.old.eudat.data.entities.Project; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; @@ -13,6 +17,7 @@ import jakarta.persistence.EntityManager; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -24,9 +29,13 @@ public class ProjectMigrationService { private static final String InternalReferenceSource = "dmp"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public ProjectMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public ProjectMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -54,8 +63,9 @@ public class ProjectMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); + data.setAbbreviation(item.getAbbreviation()); data.setDescription(item.getDescription()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Project); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); @@ -63,6 +73,36 @@ public class ProjectMigrationService { data.setReference(referenceParts[1]); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(Project.ProjectType.INTERNAL.getValue().equals(item.getType())? ReferenceSourceType.Internal : ReferenceSourceType.External); + + DefinitionEntity definitionEntity = new DefinitionEntity(); + definitionEntity.setFields(new ArrayList<>()); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.getFields().add(fieldEntity); + } + + if (item.getStartdate() != null){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("startDate"); + fieldEntity.setDataType(ReferenceFieldDataType.Date); + fieldEntity.setValue(item.getStartdate().toInstant().toString()); + definitionEntity.getFields().add(fieldEntity); + } + + if (item.getEnddate() != null){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("endDate"); + fieldEntity.setDataType(ReferenceFieldDataType.Date); + fieldEntity.setValue(item.getEnddate().toInstant().toString()); + definitionEntity.getFields().add(fieldEntity); + } + + if (!definitionEntity.getFields().isEmpty()){ + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } this.entityManager.persist(data); } this.entityManager.flush(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/RegistryMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/RegistryMigrationService.java index b1f775ce2..f12d3a08b 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/RegistryMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/RegistryMigrationService.java @@ -1,11 +1,15 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.entities.RegistryDao; -import eu.old.eudat.data.entities.DMP; import eu.old.eudat.data.entities.Registry; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; @@ -24,9 +28,13 @@ public class RegistryMigrationService { private static final String InternalReferenceSource = "dmp"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public RegistryMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public RegistryMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -54,7 +62,8 @@ public class RegistryMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setAbbreviation(item.getAbbreviation()); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Registries); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); @@ -62,6 +71,15 @@ public class RegistryMigrationService { data.setReference(referenceParts[1]); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(isInternal? ReferenceSourceType.Internal : ReferenceSourceType.External); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + DefinitionEntity definitionEntity = new DefinitionEntity(); + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.setFields(List.of(fieldEntity)); + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } this.entityManager.persist(data); } this.entityManager.flush(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ResearcherMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ResearcherMigrationService.java index 0285ba0c2..d128042da 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ResearcherMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ResearcherMigrationService.java @@ -1,13 +1,15 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; -import eu.old.eudat.data.dao.entities.OrganisationDao; import eu.old.eudat.data.dao.entities.ResearcherDao; -import eu.old.eudat.data.entities.DMP; -import eu.old.eudat.data.entities.Organisation; import eu.old.eudat.data.entities.Researcher; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; @@ -15,6 +17,7 @@ import jakarta.persistence.EntityManager; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import java.util.ArrayList; import java.util.List; import java.util.Locale; @@ -26,9 +29,13 @@ public class ResearcherMigrationService { private static final String InternalReferenceSource = "dmp"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public ResearcherMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public ResearcherMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -56,7 +63,7 @@ public class ResearcherMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Researcher); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); @@ -64,6 +71,29 @@ public class ResearcherMigrationService { data.setReference(referenceParts[1]); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(isInternal? ReferenceSourceType.Internal : ReferenceSourceType.External); + + DefinitionEntity definitionEntity = new DefinitionEntity(); + definitionEntity.setFields(new ArrayList<>()); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.getFields().add(fieldEntity); + } + if (!this.conventionService.isNullOrEmpty(item.getPrimaryEmail())){ + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("primaryEmail"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getPrimaryEmail()); + definitionEntity.getFields().add(fieldEntity); + } + + + if (!definitionEntity.getFields().isEmpty()){ + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } + this.entityManager.persist(data); } this.entityManager.flush(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ServiceMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ServiceMigrationService.java index 30ab922dd..e03bda9d5 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ServiceMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/ServiceMigrationService.java @@ -1,11 +1,15 @@ package eu.old.eudat.migration; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceFieldDataType; import eu.eudat.commons.enums.ReferenceSourceType; import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.DefinitionEntity; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.convention.ConventionService; import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.entities.ServiceDao; -import eu.old.eudat.data.entities.DMP; import eu.old.eudat.logic.services.operations.DatabaseRepository; import gr.cite.tools.logging.LoggerService; import jakarta.persistence.EntityManager; @@ -23,9 +27,13 @@ public class ServiceMigrationService { private static final String InternalReferenceSource = "dmp"; private final DatabaseRepository databaseRepository; private final EntityManager entityManager; - public ServiceMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final ConventionService conventionService; + private final XmlHandlingService xmlHandlingService; + public ServiceMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager, ConventionService conventionService, XmlHandlingService xmlHandlingService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.conventionService = conventionService; + this.xmlHandlingService = xmlHandlingService; } public void migrate(){ @@ -53,8 +61,8 @@ public class ServiceMigrationService { ReferenceEntity data = new ReferenceEntity(); data.setId(item.getId()); data.setLabel(item.getLabel()); - data.setDescription(item.getLabel()); - data.setIsActive(DMP.DMPStatus.fromInteger(item.getStatus()).equals(DMP.DMPStatus.DELETED) ? IsActive.Inactive : IsActive.Active); + data.setAbbreviation(item.getAbbreviation()); + data.setIsActive(IsActive.Active); data.setType(ReferenceType.Services); data.setCreatedAt(item.getCreated().toInstant()); data.setUpdatedAt(item.getModified().toInstant()); @@ -62,6 +70,16 @@ public class ServiceMigrationService { data.setReference(referenceParts[1]); data.setSource(isInternal? "Internal" : referenceParts[0]); data.setSourceType(isInternal? ReferenceSourceType.Internal : ReferenceSourceType.External); + if (!this.conventionService.isNullOrEmpty(item.getUri())){ + DefinitionEntity definitionEntity = new DefinitionEntity(); + FieldEntity fieldEntity = new FieldEntity(); + fieldEntity.setCode("uri"); + fieldEntity.setDataType(ReferenceFieldDataType.Text); + fieldEntity.setValue(item.getUri()); + definitionEntity.setFields(List.of(fieldEntity)); + data.setDefinition(this.xmlHandlingService.toXmlSafe(definitionEntity)); + } + this.entityManager.persist(data); } this.entityManager.flush(); From 9433beaaa6b6a9ad7cf29fe9caa075c6928baa1c Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Thu, 23 Nov 2023 14:40:44 +0200 Subject: [PATCH 4/4] dmp migration changes --- .../main/java/eu/eudat/data/DmpEntity.java | 3 +- ...01.010_Align_DescriptionTemplate_table.sql | 70 +++-- ...012_Add_Dmp_description_template_table.sql | 2 +- .../migration/DatasetMigrationService.java | 2 +- .../DmpDatasetProfileMigrationService.java | 226 ++++++++++---- .../eudat/migration/DmpMigrationService.java | 279 ++++++++++++------ .../migration/MigrationController.java | 34 ++- 7 files changed, 428 insertions(+), 188 deletions(-) diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DmpEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DmpEntity.java index 7ab5cef94..5a12059f7 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DmpEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DmpEntity.java @@ -6,6 +6,7 @@ import eu.eudat.commons.enums.DmpVersionStatus; import eu.eudat.commons.enums.IsActive; import eu.eudat.data.converters.enums.DmpAccessTypeConverter; import eu.eudat.data.converters.enums.DmpStatusConverter; +import eu.eudat.data.converters.enums.DmpVersionStatusConverter; import eu.eudat.data.converters.enums.IsActiveConverter; import eu.eudat.data.old.queryableentity.DataEntity; import jakarta.persistence.*; @@ -35,7 +36,7 @@ public class DmpEntity implements DataEntity { public static final String _version = "version"; @Column(name = "version_status", nullable = false) - @Convert(converter = DmpStatusConverter.class) + @Convert(converter = DmpVersionStatusConverter.class) private DmpVersionStatus versionStatus; public static final String _versionStatus = "versionStatus"; diff --git a/dmp-db-scema/updates/00.01.010_Align_DescriptionTemplate_table.sql b/dmp-db-scema/updates/00.01.010_Align_DescriptionTemplate_table.sql index c90c23c39..026bed58a 100644 --- a/dmp-db-scema/updates/00.01.010_Align_DescriptionTemplate_table.sql +++ b/dmp-db-scema/updates/00.01.010_Align_DescriptionTemplate_table.sql @@ -1,51 +1,61 @@ -ALTER TABLE public."DescriptionTemplate" RENAME "ID" TO id; +DO $$DECLARE + this_version CONSTANT varchar := '00.01.010'; +BEGIN + PERFORM * FROM "DBVersion" WHERE version = this_version; + IF FOUND THEN RETURN; END IF; + + ALTER TABLE public."DescriptionTemplate" RENAME "ID" TO id; -ALTER TABLE public."DescriptionTemplate" RENAME "Label" TO label; + ALTER TABLE public."DescriptionTemplate" RENAME "Label" TO label; -ALTER TABLE public."DescriptionTemplate" RENAME "Definition" TO definition; + ALTER TABLE public."DescriptionTemplate" RENAME "Definition" TO definition; -ALTER TABLE public."DescriptionTemplate" RENAME "Status" TO status; + ALTER TABLE public."DescriptionTemplate" RENAME "Status" TO status; -ALTER TABLE public."DescriptionTemplate" RENAME "Created" TO created_at; + ALTER TABLE public."DescriptionTemplate" RENAME "Created" TO created_at; -ALTER TABLE public."DescriptionTemplate" RENAME "Modified" TO updated_at; + ALTER TABLE public."DescriptionTemplate" RENAME "Modified" TO updated_at; -ALTER TABLE public."DescriptionTemplate" RENAME "Description" TO description; + ALTER TABLE public."DescriptionTemplate" RENAME "Description" TO description; -ALTER TABLE public."DescriptionTemplate" RENAME "GroupId" TO group_id; + ALTER TABLE public."DescriptionTemplate" RENAME "GroupId" TO group_id; -ALTER TABLE public."DescriptionTemplate" RENAME "Version" TO version; + ALTER TABLE public."DescriptionTemplate" RENAME "Version" TO version; -ALTER TABLE public."DescriptionTemplate" RENAME "Language" TO "language"; + ALTER TABLE public."DescriptionTemplate" RENAME "Language" TO "language"; -ALTER TABLE public."DescriptionTemplate" RENAME "Type" TO "type"; + ALTER TABLE public."DescriptionTemplate" RENAME "Type" TO "type"; -ALTER TABLE public."DescriptionTemplate" ALTER COLUMN created_at TYPE timestamp without time zone ; + ALTER TABLE public."DescriptionTemplate" ALTER COLUMN created_at TYPE timestamp without time zone ; -ALTER TABLE public."DescriptionTemplate" ALTER COLUMN updated_at TYPE timestamp without time zone ; + ALTER TABLE public."DescriptionTemplate" ALTER COLUMN updated_at TYPE timestamp without time zone ; -ALTER TABLE public."DescriptionTemplate" ALTER COLUMN group_id DROP DEFAULT; + ALTER TABLE public."DescriptionTemplate" ALTER COLUMN group_id DROP DEFAULT; -ALTER TABLE public."DescriptionTemplate" ADD COLUMN is_active smallint; + ALTER TABLE public."DescriptionTemplate" ADD COLUMN is_active smallint; -UPDATE public."DescriptionTemplate" SET is_active = 1; + UPDATE public."DescriptionTemplate" SET is_active = 1; -UPDATE public."DescriptionTemplate" SET is_active = 0 where status = 99; -UPDATE public."DescriptionTemplate" SET status = 0 where is_active = 0; + UPDATE public."DescriptionTemplate" SET is_active = 0 where status = 99; + UPDATE public."DescriptionTemplate" SET status = 0 where is_active = 0; -ALTER TABLE public."DescriptionTemplate" ALTER COLUMN is_active SET NOT NULL; + ALTER TABLE public."DescriptionTemplate" ALTER COLUMN is_active SET NOT NULL; -ALTER TABLE public."DescriptionTemplate" ADD COLUMN version_status smallint; + ALTER TABLE public."DescriptionTemplate" ADD COLUMN version_status smallint; -UPDATE public."DescriptionTemplate" SET version_status = 1; + UPDATE public."DescriptionTemplate" SET version_status = 1; -UPDATE public."DescriptionTemplate" SET version_status = 0 where id in ( - select dt.id from public."DescriptionTemplate" as dt - where dt.version = - ( - select Max(f.version) - from public."DescriptionTemplate" as f where f.group_id=dt.group_id - ) -); + UPDATE public."DescriptionTemplate" SET version_status = 0 where id in ( + select dt.id from public."DescriptionTemplate" as dt + where dt.version = + ( + select Max(f.version) + from public."DescriptionTemplate" as f where f.group_id=dt.group_id + ) + ); -ALTER TABLE public."DescriptionTemplate" ALTER COLUMN version_status SET NOT NULL; \ No newline at end of file + ALTER TABLE public."DescriptionTemplate" ALTER COLUMN version_status SET NOT NULL; + + INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.010', '2023-11-02 12:00:00.000000+02', now(), 'Aling DescriptionTemplate table.'); + +END$$; \ No newline at end of file diff --git a/dmp-db-scema/updates/00.01.012_Add_Dmp_description_template_table.sql b/dmp-db-scema/updates/00.01.012_Add_Dmp_description_template_table.sql index 0bb8f804b..b771053d3 100644 --- a/dmp-db-scema/updates/00.01.012_Add_Dmp_description_template_table.sql +++ b/dmp-db-scema/updates/00.01.012_Add_Dmp_description_template_table.sql @@ -9,7 +9,7 @@ CREATE TABLE IF NOT EXISTS public."DmpDescriptionTemplate" "id" uuid NOT NULL, "dmp" uuid NOT NULL, "description_template" uuid NOT NULL, - "data" text COLLATE pg_catalog."default" NOT NULL, + "section_id" uuid NOT NULL, "created_at" timestamp without time zone NOT NULL DEFAULT now(), "updated_at" timestamp without time zone NOT NULL DEFAULT now(), "is_active" smallint NOT NULL DEFAULT 1, diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java index d65414b96..d93073775 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DatasetMigrationService.java @@ -49,7 +49,7 @@ public class DatasetMigrationService { public List collectDatasetsInfo() throws JsonProcessingException { List collectedInfoList = new ArrayList<>(); - List datasets = getDatasets(0, 4); + List datasets = getDatasets(0, Integer.MAX_VALUE); for (DatasetWizardModel datasetWizardModel : datasets) { DatasetMigrationCollectedInfo datasetMigrationCollectedInfo = new DatasetMigrationCollectedInfo(); diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java index 8dab50b20..d94452313 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpDatasetProfileMigrationService.java @@ -3,87 +3,199 @@ package eu.old.eudat.migration; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.commons.JsonHandlingService; -import eu.eudat.commons.enums.DescriptionStatus; +import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.IsActive; -import eu.eudat.data.DescriptionEntity; +import eu.eudat.commons.enums.ReferenceFieldDataType; +import eu.eudat.commons.enums.ReferenceSourceType; +import eu.eudat.commons.enums.ReferenceType; +import eu.eudat.commons.types.reference.FieldEntity; +import eu.eudat.data.DescriptionTemplateEntity; +import eu.eudat.data.DmpBlueprintEntity; import eu.eudat.data.DmpDescriptionTemplateEntity; +import eu.eudat.data.ReferenceEntity; +import eu.eudat.model.DmpBlueprint; +import eu.eudat.query.DescriptionTemplateQuery; +import eu.eudat.query.DmpBlueprintQuery; +import eu.old.eudat.data.dao.entities.DmpDatasetProfileDao; +import eu.old.eudat.data.dao.entities.ResearcherDao; import eu.old.eudat.data.entities.DMPDatasetProfile; -import eu.old.eudat.data.entities.Dataset; +import eu.old.eudat.data.entities.Researcher; import eu.old.eudat.logic.services.operations.DatabaseRepository; -import eu.old.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.old.eudat.queryable.QueryableList; +import gr.cite.tools.data.query.QueryFactory; +import gr.cite.tools.exception.MyApplicationException; +import gr.cite.tools.logging.LoggerService; import jakarta.persistence.EntityManager; +import jakarta.xml.bind.JAXBException; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; +import org.xml.sax.SAXException; +import eu.eudat.commons.types.dmpblueprint.DefinitionEntity; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; import java.time.Instant; -import java.util.ArrayList; -import java.util.List; +import java.util.*; @Service public class DmpDatasetProfileMigrationService { + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DmpDatasetProfileMigrationService.class)); private final DatabaseRepository databaseRepository; private final JsonHandlingService jsonHandlingService; - + private final QueryFactory queryFactory; + private final XmlHandlingService xmlHandlingService; + private static final int PageSize = 500; + private static final boolean TestMode = false; private final EntityManager entityManager; - public DmpDatasetProfileMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager) { + public DmpDatasetProfileMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, QueryFactory queryFactory, XmlHandlingService xmlHandlingService, EntityManager entityManager) { this.databaseRepository = databaseRepository; this.jsonHandlingService = jsonHandlingService; + this.queryFactory = queryFactory; + this.xmlHandlingService = xmlHandlingService; this.entityManager = entityManager; } - public QueryableList dmpDatasetProfileQueryableList() { - return databaseRepository.getDmpDatasetProfileDao().asQueryable(); + public void migrate() throws IOException, JAXBException, ParserConfigurationException, InstantiationException, IllegalAccessException, SAXException { + DmpDatasetProfileDao dmpDatasetProfileDao = databaseRepository.getDmpDatasetProfileDao(); + long total = dmpDatasetProfileDao.asQueryable().count(); + logger.debug("Migrate DmpDatasetProfile Total : " + total); + int page = 0; + + List items; + do { + items = dmpDatasetProfileDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("ID"))).skip(page * PageSize).take(PageSize).toList(); + if (items != null && !items.isEmpty()) { + logger.debug("Migrate DmpDatasetProfile " + page * PageSize + " of " + total); + + List dmpBlueprints = this.queryFactory.query(DmpBlueprintQuery.class).ids(items.stream().map(x-> x.getDmp().getProfile().getId()).distinct().toList()).collect(); + Map dmpBlueprintsMap = new HashMap<>(); + for (DmpBlueprintEntity dmpBlueprint : dmpBlueprints) { + DefinitionEntity definitionEntity = this.xmlHandlingService.fromXml(DefinitionEntity.class, dmpBlueprint.getDefinition()); + dmpBlueprintsMap.put(dmpBlueprint.getId(), definitionEntity); + } + + for (DMPDatasetProfile item : items) { + entityManager.detach(item); + + DmpDatasetProfileData profileData = jsonHandlingService.fromJson(DmpDatasetProfileData.class, item.getData()); + + if (profileData == null || profileData.dmpSectionIndex == null || profileData.dmpSectionIndex.isEmpty()){ + logger.error("Migrate DmpDatasetProfile " + item.getId() + " failed no section info "); + throw new MyApplicationException(); + } + DefinitionEntity definition = dmpBlueprintsMap.getOrDefault(item.getDmp().getProfile().getId(), null); + if (definition == null){ + logger.error("Migrate DmpDatasetProfile " + item.getId() + " failed blueprint definition not found for blueprint " + item.getDmp().getProfile().getId()); + } + + for (int sectionIndex: profileData.dmpSectionIndex) { + if (definition == null || definition.getSections() == null || definition.getSections().size() < sectionIndex) { + logger.error("Migrate DmpDatasetProfile " + item.getId() + " can nto found section id for section " + sectionIndex); + throw new MyApplicationException(); + } + UUID sectionId = definition.getSections().get(sectionIndex).getId(); + if (sectionId == null) { + logger.error("Migrate DmpDatasetProfile " + item.getId() + " can nto found section id for section " + sectionIndex); + throw new MyApplicationException(); + } + + DmpDescriptionTemplateEntity data = new DmpDescriptionTemplateEntity(); + data.setId(UUID.randomUUID()); + data.setDescriptionTemplateId(item.getDatasetprofile().getId()); + data.setDmpId(item.getDmp().getId()); + data.setCreatedAt(Instant.now()); + data.setUpdatedAt(Instant.now()); + data.setSectionId(sectionId); + data.setIsActive(IsActive.Active); + this.entityManager.persist(data); + } + } + this.entityManager.flush(); + + page++; + } + } while (items != null && !items.isEmpty() && !TestMode); } - - public List getDatasets(Integer skip, Integer take) { - return dmpDatasetProfileQueryableList() -// .orderBy((builder, root) -> builder.desc(root.get("created"))) - .skip(skip) - .take(take) - .toList(); - } - - public List collectDatasetsInfo() throws JsonProcessingException { - List collectedInfoList = new ArrayList<>(); - List dmpDatasetProfiles = getDatasets(0, 4); - for (DMPDatasetProfile dmpDatasetProfile : dmpDatasetProfiles) { - DmpDatasetProfileMigrationCollectedInfo dmpDatasetProfileMigrationCollectedInfo = new DmpDatasetProfileMigrationCollectedInfo(); - - DmpDatasetProfileData data = jsonHandlingService.fromJson(DmpDatasetProfileData.class, dmpDatasetProfile.getData()); - - //Collect basic information - DmpDescriptionTemplateEntity dmpDescriptionTemplateEntity = new DmpDescriptionTemplateEntity(); - dmpDescriptionTemplateEntity.setDescriptionTemplateId(dmpDatasetProfile.getDatasetprofile().getId()); - dmpDescriptionTemplateEntity.setDmpId(dmpDatasetProfile.getDmp().getId()); - dmpDescriptionTemplateEntity.setCreatedAt(Instant.now()); - dmpDescriptionTemplateEntity.setUpdatedAt(Instant.now()); - dmpDescriptionTemplateEntity.setSectionId(null); //TODO - dmpDescriptionTemplateEntity.setIsActive(IsActive.Active); - - dmpDatasetProfileMigrationCollectedInfo.dmpDescriptionTemplateEntity = dmpDescriptionTemplateEntity; - - collectedInfoList.add(dmpDatasetProfileMigrationCollectedInfo); - } - return collectedInfoList; - } - - public String migrate() throws JsonProcessingException { - for (DmpDatasetProfileMigrationCollectedInfo collectedInfo : collectDatasetsInfo()) { -// this.entityManager.persist(collectedInfo.dmpDescriptionTemplateEntity); - } - this.entityManager.flush(); - return "Migrated dmps"; - } - - public static class DmpDatasetProfileMigrationCollectedInfo { - - public DmpDescriptionTemplateEntity dmpDescriptionTemplateEntity; - - } - +// +// public QueryableList dmpDatasetProfileQueryableList() { +// return databaseRepository.getDmpDatasetProfileDao().asQueryable(); +// } +// +// public List getDatasets(Integer skip, Integer take) { +// return dmpDatasetProfileQueryableList() +//// .orderBy((builder, root) -> builder.desc(root.get("created"))) +// .skip(skip) +// .take(take) +// .toList(); +// } +// +// public List collectDatasetsInfo() throws Exception { +// List collectedInfoList = new ArrayList<>(); +// List items = getDatasets(0, 4); +// +// List dmpBlueprints = this.queryFactory.query(DmpBlueprintQuery.class).ids(items.stream().map(x-> x.getDmp().getProfile().getId()).distinct().toList()).collect(); +// Map dmpBlueprintsMap = new HashMap<>(); +// for (DmpBlueprintEntity dmpBlueprint : dmpBlueprints) { +// DefinitionEntity definitionEntity = this.xmlHandlingService.fromXml(DefinitionEntity.class, dmpBlueprint.getDefinition()); +// dmpBlueprintsMap.put(dmpBlueprint.getId(), definitionEntity); +// } +// +// for (DMPDatasetProfile item : items) { +// this.entityManager.detach(item); +// +// DmpDatasetProfileMigrationCollectedInfo dmpDatasetProfileMigrationCollectedInfo = new DmpDatasetProfileMigrationCollectedInfo(); +// +// DmpDatasetProfileData profileData = jsonHandlingService.fromJson(DmpDatasetProfileData.class, item.getData()); +// +// if (profileData == null || profileData.dmpSectionIndex == null || profileData.dmpSectionIndex.isEmpty()){ +// throw new Exception(); +// } +// DefinitionEntity definition = dmpBlueprintsMap.getOrDefault(item.getDmp().getProfile().getId(), null); +// if (definition == null){ +// throw new Exception(); +// } +// +// for (int sectionIndex: profileData.dmpSectionIndex) { +// if ( definition.getSections().size() < sectionIndex) { +// throw new Exception(); +// } +// UUID sectionId = definition.getSections().get(sectionIndex).getId(); +// +// DmpDescriptionTemplateEntity data = new DmpDescriptionTemplateEntity(); +// data.setDescriptionTemplateId(item.getDatasetprofile().getId()); +// data.setDmpId(item.getDmp().getId()); +// data.setCreatedAt(Instant.now()); +// data.setUpdatedAt(Instant.now()); +// data.setSectionId(sectionId); //TODO +// data.setIsActive(IsActive.Active); +// } +// +// +// +// dmpDatasetProfileMigrationCollectedInfo.dmpDescriptionTemplateEntity = data; +// +// collectedInfoList.add(dmpDatasetProfileMigrationCollectedInfo); +// } +// return collectedInfoList; +// } +// +// public String migrate() throws JsonProcessingException { +// for (DmpDatasetProfileMigrationCollectedInfo collectedInfo : collectDatasetsInfo()) { +//// this.entityManager.persist(collectedInfo.dmpDescriptionTemplateEntity); +// } +// this.entityManager.flush(); +// return "Migrated dmps"; +// } +// +// public static class DmpDatasetProfileMigrationCollectedInfo { +// +// public DmpDescriptionTemplateEntity dmpDescriptionTemplateEntity; +// +// } +// @JsonIgnoreProperties({"validationErrorModel"}) public static class DmpDatasetProfileData { diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java index 857b793af..e4a6e9914 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java @@ -9,27 +9,43 @@ import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.types.dmp.DmpBlueprintValueEntity; import eu.eudat.commons.types.dmp.DmpContactEntity; import eu.eudat.commons.types.dmp.DmpPropertiesEntity; +import eu.eudat.commons.types.dmpblueprint.DefinitionEntity; +import eu.eudat.data.DmpBlueprintEntity; +import eu.eudat.data.DmpDescriptionTemplateEntity; import eu.eudat.data.DmpEntity; +import eu.eudat.query.DmpBlueprintQuery; +import eu.old.eudat.data.dao.entities.DMPDao; +import eu.old.eudat.data.dao.entities.DmpDatasetProfileDao; import eu.old.eudat.data.entities.DMP; +import eu.old.eudat.data.entities.DMPDatasetProfile; import eu.old.eudat.logic.services.operations.DatabaseRepository; import eu.old.eudat.models.data.dmp.DataManagementPlan; import eu.old.eudat.queryable.QueryableList; +import gr.cite.tools.exception.MyApplicationException; +import gr.cite.tools.logging.LoggerService; import jakarta.persistence.EntityManager; +import jakarta.xml.bind.JAXBException; +import org.slf4j.LoggerFactory; import org.springframework.stereotype.Service; import org.springframework.web.bind.annotation.PathVariable; +import org.xml.sax.SAXException; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; +import java.time.Instant; +import java.util.*; @Service public class DmpMigrationService { + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DmpMigrationService.class)); private final DatabaseRepository databaseRepository; private final JsonHandlingService jsonHandlingService; private final EntityManager entityManager; + private static final int PageSize = 500; + private static final boolean TestMode = false; public DmpMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager) { this.databaseRepository = databaseRepository; @@ -37,98 +53,189 @@ public class DmpMigrationService { this.entityManager = entityManager; } - public QueryableList dmpQueryableList() { - return databaseRepository.getDmpDao().asQueryable(); - } + public void migrate() throws JsonProcessingException { + DMPDao dmpDao = databaseRepository.getDmpDao(); + long total = dmpDao.asQueryable().count(); + logger.debug("Migrate Dmp Total : " + total); + int page = 0; - public List getDmps(Integer skip, Integer take) { - List dmps = dmpQueryableList() - .orderBy((builder, root) -> builder.desc(root.get("created"))) - .skip(skip) - .take(take) - .toList(); + List items; + do { + items = dmpDao.asQueryable().orderBy((builder, root) -> builder.asc(root.get("created"))).orderBy((builder, root) -> builder.asc(root.get("ID"))).skip(page * PageSize).take(PageSize).toList(); + if (items != null && !items.isEmpty()) { + logger.debug("Migrate Dmp " + page * PageSize + " of " + total); - return dmps.stream().map(x -> { - DataManagementPlan dmp = new DataManagementPlan(); - dmp.fromDataModel(x); - return dmp; - }).toList(); - } + for (DMP item : items) { + //entityManager.detach(item); + + DataManagementPlan model = new DataManagementPlan(); + model.fromDataModel(item); - public List collectDmpsInfo() throws JsonProcessingException { - List collectedInfoList = new ArrayList<>(); - List dmps = getDmps(0, 4); - for (DataManagementPlan dataManagementPlan : dmps) { - DmpMigrationCollectedInfo dmpMigrationCollectedInfo = new DmpMigrationCollectedInfo(); + DmpPropertiesEntity dmpProperties = new DmpPropertiesEntity(); + dmpProperties.setDmpBlueprintValues(new ArrayList<>()); + dmpProperties.setContacts(new ArrayList<>()); - DmpPropertiesEntity dmpProperties = new DmpPropertiesEntity(); - dmpProperties.setDmpBlueprintValues(new ArrayList<>()); - dmpProperties.setContacts(new ArrayList<>()); + DmpEntity data = new DmpEntity(); + data.setId(model.getId()); + data.setLabel(model.getLabel()); + data.setDescription(model.getDescription()); + if (model.getCreator() != null) + data.setCreatorId(model.getCreator().getId()); + data.setGroupId(model.getGroupId()); + data.setVersion((short) model.getVersion()); + data.setVersionStatus(DmpVersionStatus.of((short) model.getVersionStatus())); + if (model.getCreated() != null) + data.setCreatedAt(model.getCreated().toInstant()); + if (model.getModified() != null) + data.setUpdatedAt(model.getModified().toInstant()); + if (model.getFinalized() != null) + data.setFinalizedAt(model.getFinalized().toInstant()); + data.setBlueprintId(model.getProfile().getId()); + if (model.getExtraProperties() != null) { + if (model.getExtraProperties().containsKey("language") && model.getExtraProperties().get("language") != null) + data.setLanguage((String) model.getExtraProperties().get("language")); + if (model.getExtraProperties().containsKey("visible") && model.getExtraProperties().get("visible") != null) + data.setAccessType((boolean) model.getExtraProperties().get("visible") ? DmpAccessType.Public : DmpAccessType.Restricted); + if (model.getExtraProperties().containsKey("contact") && model.getExtraProperties().get("contact") != null) { + DmpContactEntity contactEntity = new DmpContactEntity(); + contactEntity.setUserId((String) model.getExtraProperties().get("contact")); + dmpProperties.getContacts().add(contactEntity); + } + } + if (model.getProperties() != null) { + model.getProperties().forEach((key,val) -> { + DmpBlueprintValueEntity valueEntity = new DmpBlueprintValueEntity(); + valueEntity.setFieldId(key); + valueEntity.setValue((String) val); + dmpProperties.getDmpBlueprintValues().add(valueEntity); + }); + } + if (model.getStatus() == 99) { + data.setIsActive(IsActive.Inactive); + data.setStatus(DmpStatus.Draft); + } else { + data.setIsActive(IsActive.Active); + data.setStatus(DmpStatus.of((short) model.getStatus())); + } + data.setProperties(jsonHandlingService.toJson(dmpProperties)); - //Collect basic dmp information - DmpEntity dmpEntity = new DmpEntity(); - dmpEntity.setId(dataManagementPlan.getId()); - dmpEntity.setLabel(dataManagementPlan.getLabel()); - dmpEntity.setDescription(dataManagementPlan.getDescription()); - if (dataManagementPlan.getCreator() != null) - dmpEntity.setCreatorId(dataManagementPlan.getCreator().getId()); - dmpEntity.setGroupId(dataManagementPlan.getGroupId()); - dmpEntity.setVersion((short) dataManagementPlan.getVersion()); - dmpEntity.setVersionStatus(DmpVersionStatus.of((short) dataManagementPlan.getVersionStatus())); - if (dataManagementPlan.getCreated() != null) - dmpEntity.setCreatedAt(dataManagementPlan.getCreated().toInstant()); - if (dataManagementPlan.getModified() != null) - dmpEntity.setUpdatedAt(dataManagementPlan.getModified().toInstant()); - if (dataManagementPlan.getFinalized() != null) - dmpEntity.setFinalizedAt(dataManagementPlan.getFinalized().toInstant()); - dmpEntity.setBlueprintId(dataManagementPlan.getProfile().getId()); - if (dataManagementPlan.getExtraProperties() != null) { - if (dataManagementPlan.getExtraProperties().containsKey("language") && dataManagementPlan.getExtraProperties().get("language") != null) - dmpEntity.setLanguage((String) dataManagementPlan.getExtraProperties().get("language")); - if (dataManagementPlan.getExtraProperties().containsKey("visible") && dataManagementPlan.getExtraProperties().get("visible") != null) - dmpEntity.setAccessType((boolean) dataManagementPlan.getExtraProperties().get("visible") ? DmpAccessType.Public : DmpAccessType.Restricted); - if (dataManagementPlan.getExtraProperties().containsKey("contact") && dataManagementPlan.getExtraProperties().get("contact") != null) { - DmpContactEntity contactEntity = new DmpContactEntity(); - contactEntity.setUserId((String) dataManagementPlan.getExtraProperties().get("contact")); - dmpProperties.getContacts().add(contactEntity); + + if (data.getAccessType() == null) { + logger.warn("AccessType not found set to default for dmp " + item.getId()); + data.setAccessType(DmpAccessType.Restricted); //TODO + } + if (data.getLanguage() == null) { + logger.warn("Language not found set to default for dmp " + item.getId()); + data.setLanguage(""); //TODO + } + if (data.getCreatorId() == null){ + logger.warn("Migration skipped creator not found " + item.getId()); + continue; + } + + + this.entityManager.persist(data); + this.entityManager.flush(); } - } - if (dataManagementPlan.getProperties() != null) { - dataManagementPlan.getProperties().forEach((key,val) -> { - DmpBlueprintValueEntity valueEntity = new DmpBlueprintValueEntity(); - valueEntity.setFieldId(key); - valueEntity.setValue((String) val); - dmpProperties.getDmpBlueprintValues().add(valueEntity); - }); - } - if (dataManagementPlan.getStatus() == 99) { - dmpEntity.setIsActive(IsActive.Inactive); - } else { - dmpEntity.setIsActive(IsActive.Active); - dmpEntity.setStatus(DmpStatus.of((short) dataManagementPlan.getStatus())); - } - dmpEntity.setProperties(jsonHandlingService.toJson(dmpProperties)); - dmpMigrationCollectedInfo.dmpEntity = dmpEntity; - //Collect dmp Organization info - - collectedInfoList.add(dmpMigrationCollectedInfo); - } - return collectedInfoList; + page++; + } + } while (items != null && !items.isEmpty() && !TestMode); } - public String migrate() throws JsonProcessingException { - for (DmpMigrationCollectedInfo collectedInfo : collectDmpsInfo()) { - this.entityManager.persist(collectedInfo.dmpEntity); - } - this.entityManager.flush(); - return "Migrated dmps"; - } +// public QueryableList dmpQueryableList() { +// return databaseRepository.getDmpDao().asQueryable(); +// } +// +// public List getDmps(Integer skip, Integer take) { +// List dmps = dmpQueryableList() +// .orderBy((builder, root) -> builder.desc(root.get("created"))) +// .skip(skip) +// .take(take) +// .toList(); +// +// return dmps.stream().map(x -> { +// DataManagementPlan dmp = new DataManagementPlan(); +// dmp.fromDataModel(x); +// return dmp; +// }).toList(); +// } - public static class DmpMigrationCollectedInfo { - - public DmpEntity dmpEntity; - - } +// public List collectDmpsInfo() throws JsonProcessingException { +// List collectedInfoList = new ArrayList<>(); +// List dmps = getDmps(0, Integer.MAX_VALUE); +// for (DataManagementPlan dataManagementPlan : dmps) { +// DmpMigrationCollectedInfo dmpMigrationCollectedInfo = new DmpMigrationCollectedInfo(); +// +// DmpPropertiesEntity dmpProperties = new DmpPropertiesEntity(); +// dmpProperties.setDmpBlueprintValues(new ArrayList<>()); +// dmpProperties.setContacts(new ArrayList<>()); +// +// //Collect basic dmp information +// DmpEntity dmpEntity = new DmpEntity(); +// dmpEntity.setId(dataManagementPlan.getId()); +// dmpEntity.setLabel(dataManagementPlan.getLabel()); +// dmpEntity.setDescription(dataManagementPlan.getDescription()); +// if (dataManagementPlan.getCreator() != null) +// dmpEntity.setCreatorId(dataManagementPlan.getCreator().getId()); +// dmpEntity.setGroupId(dataManagementPlan.getGroupId()); +// dmpEntity.setVersion((short) dataManagementPlan.getVersion()); +// dmpEntity.setVersionStatus(DmpVersionStatus.of((short) dataManagementPlan.getVersionStatus())); +// if (dataManagementPlan.getCreated() != null) +// dmpEntity.setCreatedAt(dataManagementPlan.getCreated().toInstant()); +// if (dataManagementPlan.getModified() != null) +// dmpEntity.setUpdatedAt(dataManagementPlan.getModified().toInstant()); +// if (dataManagementPlan.getFinalized() != null) +// dmpEntity.setFinalizedAt(dataManagementPlan.getFinalized().toInstant()); +// dmpEntity.setBlueprintId(dataManagementPlan.getProfile().getId()); +// if (dataManagementPlan.getExtraProperties() != null) { +// if (dataManagementPlan.getExtraProperties().containsKey("language") && dataManagementPlan.getExtraProperties().get("language") != null) +// dmpEntity.setLanguage((String) dataManagementPlan.getExtraProperties().get("language")); +// if (dataManagementPlan.getExtraProperties().containsKey("visible") && dataManagementPlan.getExtraProperties().get("visible") != null) +// dmpEntity.setAccessType((boolean) dataManagementPlan.getExtraProperties().get("visible") ? DmpAccessType.Public : DmpAccessType.Restricted); +// if (dataManagementPlan.getExtraProperties().containsKey("contact") && dataManagementPlan.getExtraProperties().get("contact") != null) { +// DmpContactEntity contactEntity = new DmpContactEntity(); +// contactEntity.setUserId((String) dataManagementPlan.getExtraProperties().get("contact")); +// dmpProperties.getContacts().add(contactEntity); +// } +// } +// if (dataManagementPlan.getProperties() != null) { +// dataManagementPlan.getProperties().forEach((key,val) -> { +// DmpBlueprintValueEntity valueEntity = new DmpBlueprintValueEntity(); +// valueEntity.setFieldId(key); +// valueEntity.setValue((String) val); +// dmpProperties.getDmpBlueprintValues().add(valueEntity); +// }); +// } +// if (dataManagementPlan.getStatus() == 99) { +// dmpEntity.setIsActive(IsActive.Inactive); +// dmpEntity.setStatus(DmpStatus.Draft); +// } else { +// dmpEntity.setIsActive(IsActive.Active); +// dmpEntity.setStatus(DmpStatus.of((short) dataManagementPlan.getStatus())); +// } +// dmpEntity.setProperties(jsonHandlingService.toJson(dmpProperties)); +// dmpMigrationCollectedInfo.dmpEntity = dmpEntity; +// +// //Collect dmp Organization info +// +// collectedInfoList.add(dmpMigrationCollectedInfo); +// } +// return collectedInfoList; +// } +// +// public String migrate() throws JsonProcessingException { +// for (DmpMigrationCollectedInfo collectedInfo : collectDmpsInfo()) { +// this.entityManager.persist(collectedInfo.dmpEntity); +// } +// this.entityManager.flush(); +// return "Migrated dmps"; +// } +// +// public static class DmpMigrationCollectedInfo { +// +// public DmpEntity dmpEntity; +// +// } } diff --git a/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java index 1b1900ed0..a158d980b 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/publicapi/migration/MigrationController.java @@ -3,11 +3,16 @@ package eu.old.eudat.publicapi.migration; import com.fasterxml.jackson.core.JsonProcessingException; import eu.old.eudat.migration.*; import io.swagger.annotations.Api; +import jakarta.xml.bind.JAXBException; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import org.xml.sax.SAXException; + +import javax.xml.parsers.ParserConfigurationException; +import java.io.IOException; @Api(tags = "Migration") @RestController @@ -56,10 +61,11 @@ public class MigrationController { this.organizationMigrationService = organizationMigrationService; } - @GetMapping("dmps/migrate") + @GetMapping("dmps") @Transactional - public String migrateDmps() throws JsonProcessingException { - return this.dmpMigrationService.migrate(); + public boolean migrateDmps() throws JsonProcessingException { + this.dmpMigrationService.migrate(); + return true; } @GetMapping("datasets/migrate") @@ -68,18 +74,14 @@ public class MigrationController { return this.datasetMigrationService.migrate(); } - @GetMapping("dmp-dataset-profiles/migrate") + @GetMapping("dmp-dataset-profiles") @Transactional - public String migrateDmpDatasetProfiles() throws JsonProcessingException { - return this.dmpDatasetProfileMigrationService.migrate(); + public boolean migrateDmpDatasetProfiles() throws IOException, JAXBException, ParserConfigurationException, InstantiationException, IllegalAccessException, SAXException { + this.dmpDatasetProfileMigrationService.migrate(); + + return true; } - @GetMapping("organizations/migrate") - @Transactional - public boolean migrateOrganizations() { - this.organizationMigrationService.migrate(); - return true; - } @GetMapping("references") @Transactional @@ -94,8 +96,16 @@ public class MigrationController { this.researcherMigrationService.migrate(); this.serviceMigrationService.migrate(); return true; + } + + @GetMapping("organizations") + @Transactional + public boolean migrateOrganizations() { + this.organizationMigrationService.migrate(); + return true; } + @GetMapping("dataRepositories") @Transactional public boolean migrateDataRepositories() {