From f6a6bab04df0ca700149752a299e295ea4c0e151 Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Tue, 21 Nov 2023 11:41:11 +0200 Subject: [PATCH 01/15] Migration controller refactoring --- .../migration/MigrationController.java | 36 +++++++++++++------ 1 file changed, 26 insertions(+), 10 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 feab18f1b..2fad20958 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 @@ -1,14 +1,16 @@ package eu.old.eudat.publicapi.migration; -import eu.eudat.commons.enums.DmpAccessType; -import eu.eudat.commons.enums.DmpStatus; -import eu.eudat.commons.enums.DmpVersionStatus; -import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.*; import eu.eudat.data.DmpEntity; +import eu.eudat.data.ReferenceEntity; import eu.old.eudat.data.dao.criteria.DataManagementPlanCriteria; +import eu.old.eudat.data.dao.criteria.OrganisationCriteria; +import eu.old.eudat.data.dao.entities.DMPDao; import eu.old.eudat.data.entities.DMP; +import eu.old.eudat.data.entities.Organisation; import eu.old.eudat.logic.services.operations.DatabaseRepository; import eu.old.eudat.models.data.dmp.DataManagementPlan; +import eu.old.eudat.queryable.QueryableList; import io.swagger.annotations.Api; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; @@ -35,23 +37,32 @@ public class MigrationController { this.entityManager = entityManager; } + public QueryableList dmpQueryableList() { + return databaseRepository.getDmpDao().asQueryable(); + } + + public QueryableList organizationQueryableList() { + return databaseRepository.getOrganisationDao().asQueryable(); + } + + @GetMapping("dmps/all/count") + public Long count() { + return dmpQueryableList().count(); + } + @GetMapping("dmps/all/{skip}/{take}") public List getDmps(@PathVariable("skip") Integer skip, @PathVariable("take") Integer take) { - DataManagementPlanCriteria criteria = new DataManagementPlanCriteria(); - List dmps = databaseRepository.getDmpDao() - .getWithCriteria(criteria) + List dmps = dmpQueryableList() .orderBy((builder, root) -> builder.desc(root.get("created"))) .skip(skip) .take(take) .toList(); - List results = dmps.stream().map(x -> { + return dmps.stream().map(x -> { DataManagementPlan dmp = new DataManagementPlan(); dmp.fromDataModel(x); return dmp; }).toList(); - - return results; } @GetMapping("dmps/collectInfo") @@ -88,6 +99,11 @@ public class MigrationController { dmpEntity.setStatus(DmpStatus.of((short) dataManagementPlan.getStatus())); } dmpMigrationCollectedInfo.dmpEntity = dmpEntity; + + //Collect dmp Organization info + + + collectedInfoList.add(dmpMigrationCollectedInfo); } return collectedInfoList; From 64d92e864d7f7a92a04d1d7273dffe457e06b114 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 11:49:15 +0200 Subject: [PATCH 02/15] user clean up --- .../eu/eudat/data/UserCredentialEntity.java | 20 +- .../main/java/eu/eudat/data/UserEntity.java | 23 +- .../java/eu/eudat/data/UserRoleEntity.java | 18 +- .../java/eu/eudat/data/old/FileUpload.java | 2 +- .../main/java/eu/eudat/data/old/Grant.java | 4 +- .../main/java/eu/eudat/data/old/Project.java | 4 +- ...estedDescriptionTemplateElasticEntity.java | 3 +- .../eudat/data/dao/entities/UserInfoDao.java | 15 - .../data/dao/entities/UserInfoDaoImpl.java | 82 ------ .../eudat/data/dao/entities/UserRoleDao.java | 19 -- .../data/dao/entities/UserRoleDaoImpl.java | 72 ----- .../dao/entities/security/CredentialDao.java | 13 - .../entities/security/CredentialDaoImpl.java | 62 ---- .../item/userinfo/UserInfoRequestItem.java | 21 -- .../userinfo/UserInfoTableRequestItem.java | 29 -- .../main/java/eu/eudat/query/DMPQuery.java | 24 +- .../eu/eudat/query/DatasetProfileQuery.java | 14 - .../main/java/eu/eudat/query/GrantQuery.java | 24 +- .../main/java/eu/eudat/query/LockQuery.java | 24 +- .../java/eu/eudat/query/UserQueryOld.java | 37 --- .../controllers/EmailMergeConfirmation.java | 31 +- .../controllers/EmailUnlinkConfirmation.java | 25 +- .../controllers/UserInvitationController.java | 22 +- .../java/eu/eudat/criteria/DMPCriteria.java | 2 +- .../java/eu/eudat/criteria/GrantCriteria.java | 2 +- .../java/eu/eudat/criteria/UserCriteria.java | 11 +- .../logic/managers/ContactEmailManager.java | 3 +- .../managers/DataManagementPlanManager.java | 32 +-- .../managers/EmailConfirmationManager.java | 32 ++- .../logic/managers/InvitationsManager.java | 49 ++-- .../MergeEmailConfirmationManager.java | 35 +-- .../logic/managers/NotificationManager.java | 8 +- .../logic/managers/QuickWizardManager.java | 17 +- .../logic/managers/ResearcherManager.java | 8 +- .../UnlinkEmailConfirmationManager.java | 13 +- .../eu/eudat/logic/managers/UserManager.java | 268 ++++++++---------- .../operations/DatabaseRepository.java | 7 - .../operations/DatabaseRepositoryImpl.java | 36 --- .../models/data/dmp/DataManagementPlan.java | 17 -- .../dmp/DataManagementPlanEditorModel.java | 33 +-- .../DataManagementPlanNewVersionModel.java | 26 -- .../models/data/invitation/Invitation.java | 8 +- .../java/eu/eudat/models/data/lock/Lock.java | 16 +- .../models/data/notiication/Notification.java | 12 +- .../data/quickwizard/DmpQuickWizardModel.java | 8 +- .../models/data/userinfo/UserCredential.java | 21 -- .../eudat/models/data/userinfo/UserInfo.java | 74 ----- .../userinfo/UserInfoInvitationModel.java | 48 ---- .../data/userinfo/UserListingModel.java | 98 ------- .../data/userinfo/UserMergeRequestModel.java | 29 -- .../models/data/userinfo/UserProfile.java | 142 ---------- .../data/userinfo/UserUnlinkRequestModel.java | 30 -- 52 files changed, 343 insertions(+), 1330 deletions(-) delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserCredential.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserListingModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserMergeRequestModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserUnlinkRequestModel.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java index eafc129cb..8575b8ed8 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserCredentialEntity.java @@ -11,7 +11,7 @@ import java.util.UUID; @Entity @Table(name = "\"UserCredential\"") -public class UserCredentialEntity implements DataEntity { +public class UserCredentialEntity { @Id @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) @@ -63,22 +63,4 @@ public class UserCredentialEntity implements DataEntity tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java index 0cee2ccd9..adc57a4c3 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserEntity.java @@ -13,7 +13,7 @@ import java.util.*; @Entity @Table(name = "\"User\"") -public class UserEntity implements DataEntity { +public class UserEntity { @Id @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) @@ -92,25 +92,4 @@ public class UserEntity implements DataEntity { public void setUpdatedAt(Instant updatedAt) { this.updatedAt = updatedAt; } - - - - - @Override - public void update(UserEntity entity) { - this.name = entity.getName(); - this.additionalInfo = entity.getAdditionalInfo(); - } - - @Override - public UUID getKeys() { - return this.id; - } - - @Override - public UserEntity buildFromTuple(List tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java index 461f7f17a..4e414822b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserRoleEntity.java @@ -12,7 +12,7 @@ import java.util.UUID; @Entity @Table(name = "\"UserRole\"") -public class UserRoleEntity implements DataEntity { +public class UserRoleEntity { @Id @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) private UUID id; @@ -65,20 +65,4 @@ public class UserRoleEntity implements DataEntity { this.createdAt = createdAt; } - @Override - public void update(UserRoleEntity entity) { - - } - - @Override - public UUID getKeys() { - return this.id; - } - - @Override - public UserRoleEntity buildFromTuple(List tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java index 609a62354..977855fcb 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/FileUpload.java @@ -122,7 +122,7 @@ public class FileUpload implements DataEntity { public FileUpload buildFromTuple(List tuple, List fields, String base) { String currentBase = base.isEmpty() ? "" : base + "."; if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - this.creator = tuple.stream().map(x -> new UserEntity().buildFromTuple(tuple, fields , base.isEmpty() ? "creator" : base + "." + "creator")).collect(Collectors.toList()).get(0); +// this.creator = tuple.stream().map(x -> new UserEntity().buildFromTuple(tuple, fields , base.isEmpty() ? "creator" : base + "." + "creator")).collect(Collectors.toList()).get(0); return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java index 85231dfe0..78ddc52aa 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Grant.java @@ -292,8 +292,8 @@ public class Grant implements DataEntity { if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); // if (fields.contains(currentBase + "dmps")) // this.dmps = tuple.stream().map(x -> new DMP().buildFromTuple(Arrays.asList(x), fields, currentBase + "dmps")).collect(Collectors.toSet()); - if (fields.contains(currentBase + "creationUser")) - this.creationUser = tuple.stream().map(x -> new UserEntity().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); +// if (fields.contains(currentBase + "creationUser")) +// this.creationUser = tuple.stream().map(x -> new UserEntity().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java b/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java index b2c211140..5d765c9eb 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/old/Project.java @@ -282,8 +282,8 @@ public class Project implements DataEntity { if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); // if (fields.contains(currentBase + "dmps")) // this.dmps = tuple.stream().map(x -> new DMP().buildFromTuple(Arrays.asList(x), fields, currentBase + "dmps")).collect(Collectors.toSet()); - if (fields.contains(currentBase + "creationUser")) - this.creationUser = tuple.stream().map(x -> new UserEntity().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); +// if (fields.contains(currentBase + "creationUser")) +// this.creationUser = tuple.stream().map(x -> new UserEntity().buildFromTuple(Arrays.asList(x), fields, currentBase + "creationUser")).collect(Collectors.toList()).get(0); return this; } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/elastic/data/nested/NestedDescriptionTemplateElasticEntity.java b/dmp-backend/core/src/main/java/eu/eudat/elastic/data/nested/NestedDescriptionTemplateElasticEntity.java index fc2ae5a27..8ac9f49d4 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/elastic/data/nested/NestedDescriptionTemplateElasticEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/elastic/data/nested/NestedDescriptionTemplateElasticEntity.java @@ -21,8 +21,7 @@ public class NestedDescriptionTemplateElasticEntity { private String label; public final static String _label = "label"; - - + @Field(value = NestedDescriptionTemplateElasticEntity._versionStatus, type = FieldType.Short) private DescriptionTemplateVersionStatus versionStatus; public final static String _versionStatus = "versionStatus"; diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java deleted file mode 100644 index 3abbc3f8c..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDao.java +++ /dev/null @@ -1,15 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.dao.DatabaseAccessLayer; -import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.UserEntity; -import eu.eudat.queryable.QueryableList; - -import java.util.UUID; - -public interface UserInfoDao extends DatabaseAccessLayer { - - QueryableList getWithCriteria(UserInfoCriteria criteria); - - QueryableList getAuthenticated(QueryableList users, UUID principalId); -} \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java deleted file mode 100644 index aa5a6b4f3..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserInfoDaoImpl.java +++ /dev/null @@ -1,82 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.dao.DatabaseAccess; -import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.data.UserEntity; -import eu.eudat.queryable.QueryableList; -import eu.eudat.queryable.types.FieldSelectionType; -import eu.eudat.queryable.types.SelectionField; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -import javax.management.InvalidApplicationException; -import java.util.Arrays; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -@Component("userInfoDao") -public class UserInfoDaoImpl extends DatabaseAccess implements UserInfoDao { - - @Autowired - public UserInfoDaoImpl(DatabaseService databaseService) { - super(databaseService); - } - - @Override - public QueryableList getWithCriteria(UserInfoCriteria criteria) { - QueryableList users = this.getDatabaseService().getQueryable(UserEntity.class); - users.where(((builder, root) -> builder.equal(root.get("userStatus"), 0))); - if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) - users.where((builder, root) -> root.join("userRoles").get("role").in(criteria.getAppRoles())); - if (criteria.getLike() != null) - users.where((builder, root) -> builder.or(builder.like(builder.upper(root.get("name")), "%" + criteria.getLike().toUpperCase() + "%"), builder.like(root.get("email"), "%" + criteria.getLike() + "%"))); - if (criteria.getEmail() != null) - users.where((builder, root) -> builder.equal(root.get("email"), criteria.getEmail())); - if (criteria.getCollaboratorLike() != null) - users.where((builder, root) -> builder.or(builder.like(builder.upper(root.get("name")), "%" + criteria.getCollaboratorLike().toUpperCase() + "%"), builder.like(root.get("email"), "%" + criteria.getCollaboratorLike() + "%"))); - return users; - } - - @Override - public QueryableList getAuthenticated(QueryableList users, UUID principalId) { - users.initSubQuery(UUID.class).where((builder, root) -> - builder.and(root.join("dmps").get("id").in( - users.subQuery((builder1, root1) -> builder1.equal(root1.get("id"), principalId), - Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmps:id")))), - builder.notEqual(root.get("id"), principalId))); - return users; - } - - @Override - public UserEntity createOrUpdate(UserEntity item) { - return this.getDatabaseService().createOrUpdate(item, UserEntity.class); - } - - @Override - public UserEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle(); - } - - @Override - public void delete(UserEntity item) { - this.getDatabaseService().delete(item); - } - - @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(UserEntity.class); - } - - @Async - @Override - public CompletableFuture createOrUpdateAsync(UserEntity item) { - return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); - } - - @Override - public UserEntity find(UUID id, String hint) { - throw new UnsupportedOperationException(); - } -} \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java deleted file mode 100644 index 7c268cac0..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDao.java +++ /dev/null @@ -1,19 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.dao.DatabaseAccessLayer; -import eu.eudat.data.dao.criteria.UserRoleCriteria; -import eu.eudat.data.UserEntity; -import eu.eudat.data.UserRoleEntity; -import eu.eudat.queryable.QueryableList; - -import javax.management.InvalidApplicationException; -import java.util.List; -import java.util.UUID; - - -public interface UserRoleDao extends DatabaseAccessLayer { - - QueryableList getWithCriteria(UserRoleCriteria criteria); - - List getUserRoles(UserEntity userInfo) throws InvalidApplicationException; -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java deleted file mode 100644 index 7c0c4b158..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserRoleDaoImpl.java +++ /dev/null @@ -1,72 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.dao.DatabaseAccess; -import eu.eudat.data.dao.criteria.UserRoleCriteria; -import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.data.UserEntity; -import eu.eudat.data.UserRoleEntity; -import eu.eudat.queryable.QueryableList; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -import javax.management.InvalidApplicationException; -import java.util.List; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - - -@Component("userRoleDao") -public class UserRoleDaoImpl extends DatabaseAccess implements UserRoleDao { - - @Autowired - public UserRoleDaoImpl(DatabaseService databaseService) { - super(databaseService); - } - - @Override - public UserRoleEntity createOrUpdate(UserRoleEntity item) { - return this.getDatabaseService().createOrUpdate(item, UserRoleEntity.class); - } - - @Override - public UserRoleEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserRoleEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); - } - - @Override - public List getUserRoles(UserEntity userInfo) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserRoleEntity.class).where((builder, root) -> builder.equal(root.get("userInfo"), userInfo)).toList(); - } - - @Override - public void delete(UserRoleEntity item) { - this.getDatabaseService().delete(item); - } - - @Override - public QueryableList getWithCriteria(UserRoleCriteria criteria) { - QueryableList query = this.getDatabaseService().getQueryable(UserRoleEntity.class); - if (criteria.getLike() != null) - query.where((builder, root) -> builder.equal(root.get("userInfo").get("name"), criteria.getLike())); - if (criteria.getAppRoles() != null && !criteria.getAppRoles().isEmpty()) - query.where((builder, root) -> root.get("role").in(criteria.getAppRoles())); - return query; - } - - @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(UserRoleEntity.class); - } - - @Async - @Override - public CompletableFuture createOrUpdateAsync(UserRoleEntity item) { - return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); - } - - @Override - public UserRoleEntity find(UUID id, String hint) { - throw new UnsupportedOperationException(); - } -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java deleted file mode 100644 index 878692e37..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDao.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.eudat.data.dao.entities.security; - -import eu.eudat.data.UserCredentialEntity; -import eu.eudat.data.dao.DatabaseAccessLayer; - -import javax.management.InvalidApplicationException; -import java.util.UUID; - - -public interface CredentialDao extends DatabaseAccessLayer { - - UserCredentialEntity getLoggedInCredentials(String username, String secret, Integer provider) throws InvalidApplicationException; -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java deleted file mode 100644 index 662e6d304..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/security/CredentialDaoImpl.java +++ /dev/null @@ -1,62 +0,0 @@ -package eu.eudat.data.dao.entities.security; - -import eu.eudat.data.UserCredentialEntity; -import eu.eudat.data.dao.DatabaseAccess; -import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.queryable.QueryableList; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import javax.management.InvalidApplicationException; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - - -@Component("credentialDao") -public class CredentialDaoImpl extends DatabaseAccess implements CredentialDao { - - @Autowired - public CredentialDaoImpl(DatabaseService databaseService) { - super(databaseService); - } - - @Override - public UserCredentialEntity createOrUpdate(UserCredentialEntity item) { - return this.getDatabaseService().createOrUpdate(item, UserCredentialEntity.class); - } - - @Override - public UserCredentialEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserCredentialEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); - } - - @Override - public UserCredentialEntity getLoggedInCredentials(String username, String secret, Integer provider) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserCredentialEntity.class).where(((builder, root) -> - builder.and( - builder.equal(root.get("publicValue"), username), - builder.equal(root.get("secret"), secret), - builder.equal(root.get("provider"), provider) - ))).getSingleOrDefault(); - } - - @Override - public void delete(UserCredentialEntity item) { - this.getDatabaseService().delete(item); - } - - @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(UserCredentialEntity.class); - } - - @Override - public CompletableFuture createOrUpdateAsync(UserCredentialEntity item) { - return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); - } - - @Override - public UserCredentialEntity find(UUID id, String hint) { - throw new UnsupportedOperationException(); - } -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java deleted file mode 100644 index 0c8f8b1a2..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/item/userinfo/UserInfoRequestItem.java +++ /dev/null @@ -1,21 +0,0 @@ -package eu.eudat.data.query.items.item.userinfo; - -import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.UserEntity; -import eu.eudat.data.query.definition.Query; -import eu.eudat.queryable.QueryableList; - - -public class UserInfoRequestItem extends Query { - @Override - public QueryableList applyCriteria() { - QueryableList users = this.getQuery(); - if (this.getCriteria().getAppRoles() != null && !this.getCriteria().getAppRoles().isEmpty()) - users.where((builder, root) -> root.join("userRoles").get("role").in(this.getCriteria().getAppRoles())); - if (this.getCriteria().getLike() != null) - users.where((builder, root) -> builder.or(builder.like(builder.upper(root.get("name")), "%" + this.getCriteria().getLike().toUpperCase() + "%"), builder.like(root.get("email"), "%" + this.getCriteria().getLike() + "%"))); - if (this.getCriteria().getEmail() != null) - users.where((builder, root) -> builder.equal(root.get("email"), this.getCriteria().getEmail())); - return users; - } -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java deleted file mode 100644 index 229eeeb0d..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/userinfo/UserInfoTableRequestItem.java +++ /dev/null @@ -1,29 +0,0 @@ -package eu.eudat.data.query.items.table.userinfo; - -import eu.eudat.data.dao.criteria.UserInfoCriteria; -import eu.eudat.data.UserEntity; -import eu.eudat.data.query.definition.TableQuery; -import eu.eudat.queryable.QueryableList; - -import java.util.UUID; - - -public class UserInfoTableRequestItem extends TableQuery { - - @Override - public QueryableList applyCriteria() { - QueryableList users = this.getQuery(); - if (this.getCriteria().getAppRoles() != null && !this.getCriteria().getAppRoles().isEmpty()) - users.where((builder, root) -> root.join("userRoles").get("role").in(this.getCriteria().getAppRoles())); - if (this.getCriteria().getLike() != null) - users.where((builder, root) -> builder.or(builder.like(builder.upper(root.get("name")), "%" + this.getCriteria().getLike().toUpperCase() + "%"), builder.like(root.get("email"), "%" + this.getCriteria().getLike() + "%"))); - if (this.getCriteria().getEmail() != null) - users.where((builder, root) -> builder.equal(root.get("email"), this.getCriteria().getEmail())); - return users; - } - - @Override - public QueryableList applyPaging(QueryableList items) { - return null; - } -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java index afef738d8..c2d9ba5a4 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/DMPQuery.java @@ -23,7 +23,7 @@ public class DMPQuery extends Query { private String label; private int version; private GrantQuery grantQuery; - private UserQueryOld userQuery; +// private UserQueryOld userQuery; private DatasetQuery datasetQuery; private List statuses; private Date created; @@ -101,13 +101,13 @@ public class DMPQuery extends Query { this.modified = modified; } - public UserQueryOld getUserQuery() { - return userQuery; - } - - public void setUserQuery(UserQueryOld userQuery) { - this.userQuery = userQuery; - } +// public UserQueryOld getUserQuery() { +// return userQuery; +// } +// +// public void setUserQuery(UserQueryOld userQuery) { +// this.userQuery = userQuery; +// } public DatasetQuery getDatasetQuery() { return datasetQuery; @@ -129,10 +129,10 @@ public class DMPQuery extends Query { if (this.getStatuses() != null && !this.getStatuses().isEmpty()) { query.where((builder, root) -> root.get("status").in(this.getStatuses())); } - if (this.userQuery != null) { - Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); - query.where((builder, root) -> root.get("creator").get("id").in(userInfoSubQuery)); - } +// if (this.userQuery != null) { +// Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); +// query.where((builder, root) -> root.get("creator").get("id").in(userInfoSubQuery)); +// } if(this.datasetQuery != null){ Subquery datasetSubQuery = this.datasetQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.COMPOSITE_FIELD, "dmp:id"))); query.where((builder, root) -> root.get("id").in(datasetSubQuery )); diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java deleted file mode 100644 index 750fbae53..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/query/DatasetProfileQuery.java +++ /dev/null @@ -1,14 +0,0 @@ -package eu.eudat.query; - -public class DatasetProfileQuery { - - private UserQueryOld userQuery; - - public UserQueryOld getUserQuery() { - return userQuery; - } - - public void setUserQuery(UserQueryOld userQuery) { - this.userQuery = userQuery; - } -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java index 84ca64ab7..14f5e375b 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/GrantQuery.java @@ -23,7 +23,7 @@ public class GrantQuery extends Query { private List statuses; private Date created; private Date modified; - private UserQueryOld userQuery; +// private UserQueryOld userQuery; public GrantQuery(DatabaseAccessLayer databaseAccessLayer) { super(databaseAccessLayer); @@ -81,13 +81,13 @@ public class GrantQuery extends Query { this.modified = modified; } - public UserQueryOld getUserQuery() { - return userQuery; - } - - public void setUserQuery(UserQueryOld userQuery) { - this.userQuery = userQuery; - } +// public UserQueryOld getUserQuery() { +// return userQuery; +// } +// +// public void setUserQuery(UserQueryOld userQuery) { +// this.userQuery = userQuery; +// } @Override public QueryableList getQuery() throws InvalidApplicationException { @@ -98,10 +98,10 @@ public class GrantQuery extends Query { query.where((builder, root) -> root.get("id").in(this.ids)); if (this.getStatuses() != null && !this.getStatuses().isEmpty()) query.where((builder, root) -> root.get("status").in(this.getStatuses())); - if (this.userQuery != null) { - Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); - query.where((builder, root) -> root.get("creationUser").get("id").in(userInfoSubQuery)); - } +// if (this.userQuery != null) { +// Subquery userInfoSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); +// query.where((builder, root) -> root.get("creationUser").get("id").in(userInfoSubQuery)); +// } if (!this.getSelectionFields().isEmpty() && this.getSelectionFields() != null) { query.withFields(this.getSelectionFields()); } diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java b/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java index 8fb2be0df..ead721b73 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java +++ b/dmp-backend/data/src/main/java/eu/eudat/query/LockQuery.java @@ -19,7 +19,7 @@ public class LockQuery extends Query { private UUID id; private UUID target; - private UserQueryOld userQuery; +// private UserQueryOld userQuery; private Date touchedAt; public UUID getId() { @@ -38,13 +38,13 @@ public class LockQuery extends Query { this.target = target; } - public UserQueryOld getUserQuery() { - return userQuery; - } - - public void setUserQuery(UserQueryOld userQuery) { - this.userQuery = userQuery; - } +// public UserQueryOld getUserQuery() { +// return userQuery; +// } +// +// public void setUserQuery(UserQueryOld userQuery) { +// this.userQuery = userQuery; +// } public Date getTouchedAt() { return touchedAt; @@ -71,10 +71,10 @@ public class LockQuery extends Query { if (this.target != null) { query.where(((builder, root) -> builder.equal(root.get("target"), this.target))); } - if (this.userQuery != null) { - Subquery userSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); - query.where((builder, root) -> root.get("lockedBy").get("id").in(userSubQuery)); - } +// if (this.userQuery != null) { +// Subquery userSubQuery = this.userQuery.getQuery().query(Arrays.asList(new SelectionField(FieldSelectionType.FIELD, "id"))); +// query.where((builder, root) -> root.get("lockedBy").get("id").in(userSubQuery)); +// } return query; } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java b/dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java deleted file mode 100644 index 9720ff51f..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/query/UserQueryOld.java +++ /dev/null @@ -1,37 +0,0 @@ -package eu.eudat.query; - -import eu.eudat.data.dao.DatabaseAccessLayer; -import eu.eudat.data.UserEntity; -import eu.eudat.queryable.QueryableList; - -import java.util.List; -import java.util.UUID; - -public class UserQueryOld extends Query { - - private UUID id; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public UserQueryOld(DatabaseAccessLayer databaseAccessLayer) { - super(databaseAccessLayer); - } - - public UserQueryOld(DatabaseAccessLayer databaseAccessLayer, List selectionFields) { - super(databaseAccessLayer, selectionFields); - } - - @Override - public QueryableList getQuery() { - QueryableList query = this.databaseAccessLayer.asQueryable(); - if (this.id != null) - query.where((builder, root) -> builder.equal(root.get("id"), this.id)); - return query; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java index 1caf004ea..dacb1186d 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailMergeConfirmation.java @@ -5,7 +5,6 @@ import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.managers.MergeEmailConfirmationManager; import eu.eudat.models.data.helpers.responses.ResponseItem; -import eu.eudat.models.data.userinfo.UserMergeRequestModel; import eu.eudat.types.ApiMessageCode; import gr.cite.commons.web.authz.service.AuthorizationService; import org.springframework.beans.factory.annotation.Autowired; @@ -48,19 +47,19 @@ public class EmailMergeConfirmation { } } - @Transactional - @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public @ResponseBody - ResponseEntity sendConfirmatioEmail(@RequestBody UserMergeRequestModel requestModel) { - this.authorizationService.authorizeForce(Permission.AuthenticatedRole); - try { - this.emailConfirmationManager.sendConfirmationEmail(requestModel.getEmail(), requestModel.getUserId(), requestModel.getProvider()); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); - } catch (Exception ex) { - if (ex instanceof HasConfirmedEmailException) { - return ResponseEntity.status(HttpStatus.FOUND).body(new ResponseItem().status(ApiMessageCode.WARN_MESSAGE)); - } - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); - } - } +// @Transactional +// @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") +// public @ResponseBody +// ResponseEntity sendConfirmatioEmail(@RequestBody UserMergeRequestModel requestModel) { +// this.authorizationService.authorizeForce(Permission.AuthenticatedRole); +// try { +// this.emailConfirmationManager.sendConfirmationEmail(requestModel.getEmail(), requestModel.getUserId(), requestModel.getProvider()); +// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); +// } catch (Exception ex) { +// if (ex instanceof HasConfirmedEmailException) { +// return ResponseEntity.status(HttpStatus.FOUND).body(new ResponseItem().status(ApiMessageCode.WARN_MESSAGE)); +// } +// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE)); +// } +// } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailUnlinkConfirmation.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailUnlinkConfirmation.java index dfb6cd10c..92a246dda 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailUnlinkConfirmation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/EmailUnlinkConfirmation.java @@ -5,7 +5,6 @@ import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.managers.UnlinkEmailConfirmationManager; import eu.eudat.models.data.helpers.responses.ResponseItem; -import eu.eudat.models.data.userinfo.UserUnlinkRequestModel; import eu.eudat.types.ApiMessageCode; import gr.cite.commons.web.authz.service.AuthorizationService; import org.springframework.beans.factory.annotation.Autowired; @@ -48,16 +47,16 @@ public class EmailUnlinkConfirmation { } } - @Transactional - @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") - public @ResponseBody - ResponseEntity sendUnlinkConfirmationEmail(@RequestBody UserUnlinkRequestModel requestModel) { - this.authorizationService.authorizeForce(Permission.AuthenticatedRole); - try { - this.unlinkEmailConfirmationManager.sendConfirmationEmail(requestModel.getEmail(), requestModel.getUserId(), requestModel.getProvider()); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); - } catch (Exception ex) { - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).message("Could not send unlink email.")); - } - } +// @Transactional +// @RequestMapping(method = RequestMethod.POST, consumes = "application/json", produces = "application/json") +// public @ResponseBody +// ResponseEntity sendUnlinkConfirmationEmail(@RequestBody UserUnlinkRequestModel requestModel) { +// this.authorizationService.authorizeForce(Permission.AuthenticatedRole); +// try { +// this.unlinkEmailConfirmationManager.sendConfirmationEmail(requestModel.getEmail(), requestModel.getUserId(), requestModel.getProvider()); +// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE)); +// } catch (Exception ex) { +// return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(new ResponseItem().status(ApiMessageCode.NO_MESSAGE).message("Could not send unlink email.")); +// } +// } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java index 014e24bd2..dd179c592 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/UserInvitationController.java @@ -1,12 +1,10 @@ package eu.eudat.controllers; import eu.eudat.authorization.Permission; -import eu.eudat.data.query.items.item.userinfo.UserInfoRequestItem; import eu.eudat.logic.managers.InvitationsManager; import eu.eudat.logic.services.ApiContext; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.invitation.Invitation; -import eu.eudat.models.data.userinfo.UserInfoInvitationModel; import eu.eudat.types.ApiMessageCode; import gr.cite.commons.web.authz.service.AuthorizationService; import org.springframework.beans.factory.annotation.Autowired; @@ -57,14 +55,14 @@ public class UserInvitationController extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().status(ApiMessageCode.SUCCESS_MESSAGE).payload(dmpId)); } - @RequestMapping(method = RequestMethod.POST, value = {"/getUsers"}, consumes = "application/json", produces = "application/json") - public @ResponseBody -// ResponseEntity>> getUsers() throws IllegalAccessException, InstantiationException { - ResponseEntity>> getUsers(@RequestBody UserInfoRequestItem userInfoRequestItem) throws IllegalAccessException, InstantiationException, InvalidApplicationException { -// List users = invitationsManager.getUsers(principal); - this.authorizationService.authorizeForce(Permission.AuthenticatedRole); - - List users = invitationsManager.getUsersWithCriteria(userInfoRequestItem); - return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(users)); - } +// @RequestMapping(method = RequestMethod.POST, value = {"/getUsers"}, consumes = "application/json", produces = "application/json") +// public @ResponseBody +//// ResponseEntity>> getUsers() throws IllegalAccessException, InstantiationException { +// ResponseEntity>> getUsers(@RequestBody UserInfoRequestItem userInfoRequestItem) throws IllegalAccessException, InstantiationException, InvalidApplicationException { +//// List users = invitationsManager.getUsers(principal); +// this.authorizationService.authorizeForce(Permission.AuthenticatedRole); +// +// List users = invitationsManager.getUsersWithCriteria(userInfoRequestItem); +// return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().status(ApiMessageCode.SUCCESS_MESSAGE).payload(users)); +// } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/criteria/DMPCriteria.java b/dmp-backend/web/src/main/java/eu/eudat/criteria/DMPCriteria.java index 0db1cc5b5..5260be439 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/criteria/DMPCriteria.java +++ b/dmp-backend/web/src/main/java/eu/eudat/criteria/DMPCriteria.java @@ -143,7 +143,7 @@ public class DMPCriteria { DMPQuery dmpQuery = new DMPQuery(dao.getDmpDao(), fields); if (this.id != null) dmpQuery.setId(this.id.getValue()); if (this.grant != null) dmpQuery.setGrantQuery(this.grant.buildQuery(dao)); - if (this.creator != null) dmpQuery.setUserQuery(this.creator.buildQuery(dao)); +// if (this.creator != null) dmpQuery.setUserQuery(this.creator.buildQuery(dao)); if (this.dataset != null) dmpQuery.setDatasetQuery(this.dataset.buildQuery(dao)); return dmpQuery; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/criteria/GrantCriteria.java b/dmp-backend/web/src/main/java/eu/eudat/criteria/GrantCriteria.java index 2c6e0b21d..1b88e7694 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/criteria/GrantCriteria.java +++ b/dmp-backend/web/src/main/java/eu/eudat/criteria/GrantCriteria.java @@ -103,7 +103,7 @@ public class GrantCriteria { List fields = this.buildFields(""); GrantQuery query = new GrantQuery(dao.getGrantDao(), fields); query.setId(this.id.getValue()); - if (this.creator != null) query.setUserQuery(this.creator.buildQuery(dao)); +// if (this.creator != null) query.setUserQuery(this.creator.buildQuery(dao)); return query; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java b/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java index 1fa9d281b..a6874888c 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java +++ b/dmp-backend/web/src/main/java/eu/eudat/criteria/UserCriteria.java @@ -7,7 +7,8 @@ import com.fasterxml.jackson.databind.ObjectReader; import com.fasterxml.jackson.databind.node.JsonNodeType; import eu.eudat.criteria.entities.Criteria; import eu.eudat.logic.services.operations.DatabaseRepository; -import eu.eudat.query.UserQueryOld; +import eu.eudat.model.User; +import eu.eudat.query.UserQuery; import java.io.IOException; import java.util.*; @@ -57,10 +58,10 @@ public class UserCriteria { return new LinkedList<>(fields); } - public UserQueryOld buildQuery(DatabaseRepository dao) { + public UserQuery buildQuery(DatabaseRepository dao) { List fields = this.buildFields(""); - UserQueryOld query = new UserQueryOld(dao.getUserInfoDao(), fields); - if (this.id != null) query.setId(this.id.getValue()); - return query; +// UserQuery query = new UserQuery(dao.getUserInfoDao(), fields); +// if (this.id != null) query.setId(this.id.getValue()); + return null; } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java index e9ffb1cd2..d6f271d55 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ContactEmailManager.java @@ -7,6 +7,7 @@ import eu.eudat.model.UserContactInfo; import eu.eudat.models.data.ContactEmail.ContactEmailModel; import eu.eudat.models.data.ContactEmail.PublicContactEmailModel; import eu.eudat.query.UserContactInfoQuery; +import eu.eudat.query.UserQuery; import eu.eudat.service.mail.SimpleMail; import gr.cite.tools.data.query.Ordering; import gr.cite.tools.data.query.QueryFactory; @@ -34,7 +35,7 @@ public class ContactEmailManager { } public void sendContactEmail(ContactEmailModel contactEmailModel) throws MessagingException, InvalidApplicationException { - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); SimpleMail mail = new SimpleMail(); UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).userIds(user.getId()); query.setOrder(new Ordering().addAscending(UserContactInfo._ordinal)); 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 c88105a79..dcd400449 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 @@ -35,6 +35,7 @@ import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.commons.types.xml.XmlBuilder; import eu.eudat.model.file.FileEnvelope; import eu.eudat.query.DmpDescriptionTemplateQuery; +import eu.eudat.query.UserQuery; import eu.eudat.utilities.pdf.PDFUtils; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; import eu.eudat.logic.utilities.documents.word.WordBuilder; @@ -55,7 +56,6 @@ import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.listingmodels.*; import eu.eudat.models.data.project.ProjectDMPEditorModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; -import eu.eudat.models.data.userinfo.UserListingModel; import eu.eudat.query.DescriptionTemplateQuery; import eu.eudat.query.DmpBlueprintQuery; import eu.eudat.queryable.QueryableList; @@ -275,7 +275,7 @@ public class DataManagementPlanManager { QueryableList datasetItems = apiContext.getOperationsContext().getDatabaseRepository().getDatasetDao().getWithCriteria(datasetCriteria) .orderBy((builder, root) -> builder.desc(root.get("modified"))); if (principal != null) { - UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal); + UserEntity userInfo = this.queryFactory.query(UserQuery.class).ids(principal).first(); List roles = new ArrayList<>(); roles.add(0); roles.add(1); @@ -505,7 +505,7 @@ public class DataManagementPlanManager { if (newDmp.getStatus().equals(DmpStatus.Finalized)) { checkDmpValidationRules(newDmp); } - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); newDmp.setCreatorId(user.getId()); DmpBlueprintEntity dmpBlueprint = this.queryFactory.query(DmpBlueprintQuery.class).ids(newDmp.getBlueprintId()).first(); @@ -582,7 +582,7 @@ public class DataManagementPlanManager { if (dataManagementPlan.getUsers() != null && !dataManagementPlan.getUsers().isEmpty()) { clearUsers(newDmp); for (UserInfoListingModel userListing : dataManagementPlan.getUsers()) { - UserEntity tempUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userListing.getId()); + UserEntity tempUser = this.queryFactory.query(UserQuery.class).ids(userListing.getId()).first(); assignUser(dmp, tempUser, DmpUserRole.of((short)userListing.getRole())); } } @@ -621,8 +621,8 @@ public class DataManagementPlanManager { } } - if (dataManagementPlan.getAssociatedUsers().size() == 0) - assignUser(newDmp, user); +// if (dataManagementPlan.getAssociatedUsers().size() == 0) +// assignUser(newDmp, user); UUID dmpId = newDmp.getId(); //TODO @@ -668,7 +668,7 @@ public class DataManagementPlanManager { if (tempDMP.getStatus().equals(DmpStatus.Finalized)) { checkDmpValidationRules(tempDMP); } - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); DmpBlueprintEntity dmpBlueprint = this.queryFactory.query(DmpBlueprintQuery.class).ids(tempDMP.getBlueprintId()).first(); if(this.dmpBlueprintService.fieldInBlueprint(dmpBlueprint, DmpBlueprintSystemFieldType.Organizations)) { @@ -1230,7 +1230,7 @@ public class DataManagementPlanManager { // } // }); }); - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); sendNotification(dmp, user, NotificationType.DMP_PUBLISH); } @@ -1316,7 +1316,7 @@ public class DataManagementPlanManager { UUID dmpId = dmp.getId(); // dmp.setUsers(new HashSet<>(apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), dmpId)).toList())); //TODO //this.updateIndex(dmp); //TODO - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); sendNotification(dmp, user, NotificationType.DMP_FINALISED); metricsManager.decreaseValue(MetricNames.DMP, 1, MetricNames.DRAFT); metricsManager.increaseValue(MetricNames.DMP, 1, MetricNames.FINALIZED); @@ -1350,7 +1350,7 @@ public class DataManagementPlanManager { throw new Exception("User does not have the privilege to do this action."); clearUsers(dmp); for (UserInfoListingModel userListing : users) { - UserEntity tempUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userListing.getId()); + UserEntity tempUser = this.queryFactory.query(UserQuery.class).ids(userListing.getId()).first(); assignUser(dmp, tempUser, DmpUserRole.of((short)userListing.getRole())); } @@ -1824,14 +1824,14 @@ public class DataManagementPlanManager { Element dmpContactName = xmlDoc.createElement("name"); Element dmpContactEmail = xmlDoc.createElement("email"); if(dmp.getCreatorId() != null){ - dmpContactName.setTextContent(this.databaseRepository.getUserInfoDao().find(dmp.getCreatorId()).getName()); + dmpContactName.setTextContent(this.queryFactory.query(UserQuery.class).ids(dmp.getCreatorId()).first().getName()); //TODO dmpContactEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(dmp.getCreator()).getEmail()); } else{ Iterator users = new ArrayList().iterator(); //TODO dmp.getUsers().iterator(); if(users.hasNext()){ DmpUserEntity creator = users.next(); - dmpContactName.setTextContent(this.databaseRepository.getUserInfoDao().find(creator.getUserId()).getName()); + dmpContactName.setTextContent(this.queryFactory.query(UserQuery.class).ids(creator.getUserId()).first().getName()); //TODO .setTextContent(this.databaseRepository.getUserInfoDao().find(creator.getUser()).getEmail()); } } @@ -1846,7 +1846,7 @@ public class DataManagementPlanManager { Element dmpContributorName = xmlDoc.createElement("name"); Element dmpContributorEmail= xmlDoc.createElement("email"); DmpUserEntity contributor = users.next(); - dmpContributorName.setTextContent(this.databaseRepository.getUserInfoDao().find(contributor.getUserId()).getName()); + dmpContributorName.setTextContent(this.queryFactory.query(UserQuery.class).ids(contributor.getUserId()).first().getName()); //TODO dmpContributorEmail.setTextContent(this.databaseRepository.getUserInfoDao().find(contributor.getUser()).getEmail()); dmpContributorElement.appendChild(dmpContributorName); dmpContributorElement.appendChild(dmpContributorEmail); @@ -2245,7 +2245,7 @@ public class DataManagementPlanManager { researchers.add(researcher); } - List associatedUsers = new LinkedList<>(); + //List associatedUsers = new LinkedList<>(); List dynamicFields = new LinkedList<>(); // Sets properties. @@ -2254,7 +2254,7 @@ public class DataManagementPlanManager { dm.setProfiles(associatedProfiles); dm.setOrganisations(organisations); // Sets organisations property. dm.setResearchers(researchers); // Sets researchers property. - dm.setAssociatedUsers(associatedUsers); // Sets associatedUsers property. + //dm.setAssociatedUsers(associatedUsers); // Sets associatedUsers property. dm.setDynamicFields(dynamicFields); // Sets dynamicFields property. //dm.setDefinition(dmpProfile); //ObjectMapper mapper = new ObjectMapper(); @@ -2328,7 +2328,7 @@ public class DataManagementPlanManager { for (MultipartFile file: files) { DmpEntity dmp = rdaManager.convertToEntity(new String(file.getBytes(), "UTF-8"), profiles); dmp.setLabel(file.getOriginalFilename()); - UserEntity me = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity me = this.queryFactory.query(UserQuery.class).ids(dmp.getCreatorId()).first(); dmp.setUpdatedAt(Instant.now()); dmp.setCreatorId(me.getId()); //TODO diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java index 4664eda64..b33baca6e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/EmailConfirmationManager.java @@ -1,13 +1,14 @@ package eu.eudat.logic.managers; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.old.EmailConfirmation; import eu.eudat.data.UserEntity; import eu.eudat.exceptions.emailconfirmation.HasConfirmedEmailException; import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; +import eu.eudat.query.UserQuery; +import gr.cite.tools.data.query.QueryFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -20,12 +21,14 @@ public class EmailConfirmationManager { private ApiContext apiContext; private DatabaseRepository databaseRepository; private final UserScope userScope; + private final QueryFactory queryFactory; @Autowired - public EmailConfirmationManager(ApiContext apiContext, UserScope userScope) { + public EmailConfirmationManager(ApiContext apiContext, UserScope userScope, QueryFactory queryFactory) { this.apiContext = apiContext; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); this.userScope = userScope; + this.queryFactory = queryFactory; } public void confirmEmail(String token) throws TokenExpiredException, HasConfirmedEmailException, InvalidApplicationException { @@ -33,8 +36,7 @@ public class EmailConfirmationManager { .getDatabaseRepository().getLoginConfirmationEmailDao().asQueryable() .where((builder, root) -> builder.equal(root.get("token"), UUID.fromString(token))).getSingle(); - UserEntity user = databaseRepository.getUserInfoDao().asQueryable() - .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(loginConfirmationEmail.getUserId()).first(); // if (user.getEmail() != null) //TODO // throw new HasConfirmedEmailException("User already has confirmed his Email."); @@ -45,12 +47,12 @@ public class EmailConfirmationManager { loginConfirmationEmail.setIsConfirmed(true); // Checks if mail is used by another user. If it is, merges the new the old. - Long existingUsers = databaseRepository.getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), loginConfirmationEmail.getEmail())).count(); + Long existingUsers = this.queryFactory.query(UserQuery.class).emails(loginConfirmationEmail.getEmail()).count(); if (existingUsers > 0) { - UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); +// UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); // credential.setEmail(loginConfirmationEmail.getEmail()); //TODO - databaseRepository.getCredentialDao().createOrUpdate(credential); - UserEntity oldUser = databaseRepository.getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), loginConfirmationEmail.getEmail())).getSingle(); +// databaseRepository.getCredentialDao().createOrUpdate(credential); + UserEntity oldUser = this.queryFactory.query(UserQuery.class).emails(loginConfirmationEmail.getEmail()).first(); mergeNewUserToOld(user, oldUser); // expireUserToken(user); //TODO: Authn databaseRepository.getLoginConfirmationEmailDao().createOrUpdate(loginConfirmationEmail); @@ -58,9 +60,9 @@ public class EmailConfirmationManager { } // user.setEmail(loginConfirmationEmail.getEmail()); //TODO - databaseRepository.getUserInfoDao().createOrUpdate(user); - UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() - .where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); +// databaseRepository.getUserInfoDao().createOrUpdate(user); +// UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() +// .where((builder, root) -> builder.equal(root.get("userId"), user.getId())).getSingle(); // if(credential.getEmail() == null){//TODO // credential.setEmail(user.getEmail()); // databaseRepository.getCredentialDao().createOrUpdate(credential); @@ -69,7 +71,7 @@ public class EmailConfirmationManager { } public void sendConfirmationEmail(String email) throws HasConfirmedEmailException, InvalidApplicationException { - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); // if (user.getEmail() != null) //TODO // throw new HasConfirmedEmailException("User already has confirmed his Email."); @@ -82,8 +84,8 @@ public class EmailConfirmationManager { } private void mergeNewUserToOld(UserEntity newUser, UserEntity oldUser) throws InvalidApplicationException { - UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), newUser.getId())).getSingle(); - credential.setUserId(oldUser.getId()); - databaseRepository.getCredentialDao().createOrUpdate(credential); +// UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), newUser.getId())).getSingle(); +// credential.setUserId(oldUser.getId()); +// databaseRepository.getCredentialDao().createOrUpdate(credential); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java index 1b10e490a..942145cb8 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/InvitationsManager.java @@ -5,11 +5,10 @@ import eu.eudat.commons.scope.user.UserScope; import eu.eudat.data.DmpEntity; import eu.eudat.data.DmpUserEntity; import eu.eudat.data.UserEntity; -import eu.eudat.data.query.items.item.userinfo.UserInfoRequestItem; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.services.ApiContext; +import eu.eudat.model.User; import eu.eudat.models.data.invitation.Invitation; -import eu.eudat.models.data.userinfo.UserInfoInvitationModel; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -49,8 +48,8 @@ public class InvitationsManager { item.setId(existingUser.getId()); } }); - List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); - List alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()); + List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); + List alreadySignedInUsersEntities = new ArrayList<>(); //alreadySignedInUsers.stream().map(User::toDataModel).collect(Collectors.toList()); List userInfoToUserDmp = new LinkedList<>(); for (UserEntity userInfo : alreadySignedInUsersEntities) { DmpUserEntity userDMP = new DmpUserEntity(); @@ -65,11 +64,11 @@ public class InvitationsManager { }*/ } DmpEntity dataManagementPlan = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); - apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()), dataManagementPlan, invitation.getRole(), principalUser); +// apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(UserInfoInvitationModel::toDataModel).collect(Collectors.toList()), dataManagementPlan, invitation.getRole(), principalUser); apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userInfoToUserDmp, dataManagementPlan); } - public List getUsers() throws InstantiationException, IllegalAccessException, InvalidApplicationException { + public List getUsers() throws InstantiationException, IllegalAccessException, InvalidApplicationException { /*UserInfo principalUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); List users = apiContext.getOperationsContext().getDatabaseRepository().getUserAssociationDao().getAssociated(principalUser).stream().map(userAssociation -> { if (userAssociation.getFirstUser().getId().equals(principal.getId())) { @@ -85,28 +84,28 @@ public class InvitationsManager { // .where(((builder, root) -> builder.notEqual(root.get("isActive"), IsActive.Inactive))), this.userScope.getUserId(), Stream.of(0, 1).collect(Collectors.toList())) // .toList().stream().map(DmpEntity::getUsers).flatMap(Collection::stream).map(DmpUser::getUser) // .filter(userInfo -> !userInfo.getId().equals(this.userScope.getUserIdSafe())).filter(StreamDistinctBy.distinctByKey(UserInfo::getId)).collect(Collectors.toList()); - List userModels = users.stream().map(userInfo -> new UserInfoInvitationModel().fromDataModel(userInfo)).collect(Collectors.toList()); + List userModels = new ArrayList<>(); //users.stream().map(userInfo -> new User().fromDataModel(userInfo)).collect(Collectors.toList()); return userModels; } - public List getUsersWithCriteria(UserInfoRequestItem userInfoRequestItem) throws IllegalAccessException, InstantiationException, InvalidApplicationException { - //TODO -// List users = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao() -// .getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable() -// .where(((builder, root) -> -// builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()))), this.userScope.getUserId(), Stream.of(0, 1).collect(Collectors.toList())) -// .toList().stream().map(DMP::getUsers).flatMap(Collection::stream).map(UserDMP::getUser) -// .filter(userInfo -> !userInfo.getId().equals(this.userScope.getUserIdSafe())).filter(StreamDistinctBy.distinctByKey(UserInfo::getId)) -// .filter(userInfo -> (userInfoRequestItem == null || userInfoRequestItem.getCriteria() == null || userInfoRequestItem.getCriteria().getLike() == null -// || userInfo.getName().toLowerCase().contains(userInfoRequestItem.getCriteria().getLike().toLowerCase()) -// || (userInfo.getEmail().toLowerCase().contains(userInfoRequestItem.getCriteria().getLike().toLowerCase())))) -// .collect(Collectors.toList()); -//// .where((builder, root) -> builder.like(builder.upper(root.get("name")), "%" + userInfoRequestItem.getCriteria().getLike().toUpperCase() + "%")) -// -// List userModels = users.stream().map(userInfo -> new UserInfoInvitationModel().fromDataModel(userInfo)).collect(Collectors.toList()); -// return userModels; - return new ArrayList<>(); - } +// public List getUsersWithCriteria(UserInfoRequestItem userInfoRequestItem) throws IllegalAccessException, InstantiationException, InvalidApplicationException { +// //TODO +//// List users = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao() +//// .getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable() +//// .where(((builder, root) -> +//// builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue()))), this.userScope.getUserId(), Stream.of(0, 1).collect(Collectors.toList())) +//// .toList().stream().map(DMP::getUsers).flatMap(Collection::stream).map(UserDMP::getUser) +//// .filter(userInfo -> !userInfo.getId().equals(this.userScope.getUserIdSafe())).filter(StreamDistinctBy.distinctByKey(UserInfo::getId)) +//// .filter(userInfo -> (userInfoRequestItem == null || userInfoRequestItem.getCriteria() == null || userInfoRequestItem.getCriteria().getLike() == null +//// || userInfo.getName().toLowerCase().contains(userInfoRequestItem.getCriteria().getLike().toLowerCase()) +//// || (userInfo.getEmail().toLowerCase().contains(userInfoRequestItem.getCriteria().getLike().toLowerCase())))) +//// .collect(Collectors.toList()); +////// .where((builder, root) -> builder.like(builder.upper(root.get("name")), "%" + userInfoRequestItem.getCriteria().getLike().toUpperCase() + "%")) +//// +//// List userModels = users.stream().map(userInfo -> new UserInfoInvitationModel().fromDataModel(userInfo)).collect(Collectors.toList()); +//// return userModels; +// return new ArrayList<>(); +// } public UUID assignUserAcceptedInvitation(UUID invitationID) throws UnauthorisedException, JAXBException, IOException, InvalidApplicationException { //TODO diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java index e3df1a4e6..6c350c6e0 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java @@ -2,7 +2,6 @@ package eu.eudat.logic.managers; import eu.eudat.commons.enums.IsActive; import eu.eudat.commons.scope.user.UserScope; -import eu.eudat.data.UserCredentialEntity; import eu.eudat.data.DmpUserEntity; import eu.eudat.data.old.EmailConfirmation; import eu.eudat.data.UserEntity; @@ -11,6 +10,8 @@ import eu.eudat.exceptions.emailconfirmation.TokenExpiredException; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; +import eu.eudat.query.UserQuery; +import gr.cite.tools.data.query.QueryFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -30,13 +31,15 @@ public class MergeEmailConfirmationManager { private DatabaseRepository databaseRepository; // private DmpRepository dmpRepository; private final UserScope userScope; + private final QueryFactory queryFactory; @Autowired - public MergeEmailConfirmationManager(ApiContext apiContext, UserScope userScope) { + public MergeEmailConfirmationManager(ApiContext apiContext, UserScope userScope, QueryFactory queryFactory) { this.apiContext = apiContext; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); // this.dmpRepository = apiContext.getOperationsContext().getElasticRepository().getDmpRepository(); this.userScope = userScope; + this.queryFactory = queryFactory; } @Transactional @@ -48,14 +51,12 @@ public class MergeEmailConfirmationManager { if (loginConfirmationEmail.getExpiresAt().compareTo(new Date()) < 0) throw new TokenExpiredException("Token has expired."); - UserEntity userToBeMerged = databaseRepository.getUserInfoDao().asQueryable() - .where((builder, root) -> builder.equal(root.get("id"), loginConfirmationEmail.getUserId())).getSingle(); + UserEntity userToBeMerged = this.queryFactory.query(UserQuery.class).ids(loginConfirmationEmail.getUserId()).first(); String userToBeMergedEmail = ""; //TODO userToBeMerged.getEmail(); try { Map map = new ObjectMapper().readValue(loginConfirmationEmail.getData(), HashMap.class); UUID otherUserId = UUID.fromString((String) map.get("userId")); - UserEntity user = databaseRepository.getUserInfoDao().asQueryable() - .where((builder, root) -> builder.equal(root.get("id"), otherUserId)).getSingle(); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(otherUserId).first(); // Checks if mail is used by another user. If it is, merges the new the old. mergeNewUserToOld(user, userToBeMerged, Integer.valueOf((String) map.get("provider"))); @@ -70,7 +71,7 @@ public class MergeEmailConfirmationManager { } public void sendConfirmationEmail(String email, UUID userId, Integer provider) throws HasConfirmedEmailException, InvalidApplicationException { - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); //TODO // if (user.getEmail() != null && !user.getEmail().equals(email)) { // apiContext.getUtilitiesService().getConfirmationEmailService().createMergeConfirmationEmail( @@ -85,9 +86,9 @@ public class MergeEmailConfirmationManager { @Transactional private void mergeNewUserToOld(UserEntity newUser, UserEntity oldUser, Integer provider) throws InvalidApplicationException { - UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.and(builder.equal(root.get("userId"), oldUser.getId()), builder.equal(root.get("provider"), provider))).getSingle(); - credential.setUserId(newUser.getId()); - databaseRepository.getCredentialDao().createOrUpdate(credential); +// UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.and(builder.equal(root.get("userId"), oldUser.getId()), builder.equal(root.get("provider"), provider))).getSingle(); +// credential.setUserId(newUser.getId()); +// databaseRepository.getCredentialDao().createOrUpdate(credential); List userDmps = databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("user"), oldUser)).toList(); userDmps.forEach(userDmp -> { userDmp.setUserId(newUser.getId()); @@ -129,12 +130,12 @@ public class MergeEmailConfirmationManager { // } oldUser.setIsActive(IsActive.Inactive); //TODO oldUser.setEmail(null); - List credentials = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), oldUser.getId())).toList(); - credentials.forEach(cred -> { - if (cred.getId() != credential.getId()) { - databaseRepository.getCredentialDao().delete(cred); - } - }); - databaseRepository.getUserInfoDao().createOrUpdate(oldUser); +// List credentials = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.equal(root.get("userId"), oldUser.getId())).toList(); +// credentials.forEach(cred -> { +// if (cred.getId() != credential.getId()) { +// databaseRepository.getCredentialDao().delete(cred); +// } +// }); +// databaseRepository.getUserInfoDao().createOrUpdate(oldUser); } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java index 7ccac814a..85fd36e4f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/NotificationManager.java @@ -6,8 +6,10 @@ import eu.eudat.data.UserEntity; import eu.eudat.commons.enums.old.notification.ActiveStatus; import eu.eudat.commons.enums.old.notification.NotifyState; import eu.eudat.logic.services.ApiContext; +import eu.eudat.query.UserQuery; import eu.eudat.service.mail.MailService; import eu.eudat.service.mail.SimpleMail; +import gr.cite.tools.data.query.QueryFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -26,12 +28,14 @@ public class NotificationManager { private ApiContext apiContext; private Environment environment; private MailService mailService; + private final QueryFactory queryFactory; @Autowired - public NotificationManager(ApiContext apiContext, Environment environment, MailService mailService) { + public NotificationManager(ApiContext apiContext, Environment environment, MailService mailService, QueryFactory queryFactory) { this.apiContext = apiContext; this.environment = environment; this.mailService = mailService; + this.queryFactory = queryFactory; } @Transactional @@ -52,7 +56,7 @@ public class NotificationManager { notification.setUpdatedAt(new Date()); try { Map data = new ObjectMapper().readValue(notification.getData(), HashMap.class); - UserEntity userInfo = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(UUID.fromString(data.get("userId"))); + UserEntity userInfo = this.queryFactory.query(UserQuery.class).ids(UUID.fromString(data.get("userId"))).first(); String subjectTemplate = ""; String contentTemplate = ""; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java index ea313e396..9e8d41e70 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java @@ -9,6 +9,8 @@ import eu.eudat.data.old.*; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.models.data.dmp.DataManagementPlan; +import eu.eudat.query.UserQuery; +import gr.cite.tools.data.query.QueryFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -22,13 +24,16 @@ public class QuickWizardManager { private ApiContext apiContext; private DatabaseRepository databaseRepository; private DatasetManager datasetManager; + + private final QueryFactory queryFactory; private final UserScope userScope; @Autowired - public QuickWizardManager(ApiContext apiContext, DatasetManager datasetManager, UserScope userScope) { + public QuickWizardManager(ApiContext apiContext, DatasetManager datasetManager, QueryFactory queryFactory, UserScope userScope) { this.apiContext = apiContext; this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); this.datasetManager = datasetManager; + this.queryFactory = queryFactory; this.userScope = userScope; } @@ -40,13 +45,13 @@ public class QuickWizardManager { public Grant createOrUpdate(eu.eudat.models.data.grant.Grant grant) throws ParseException, IOException, InvalidApplicationException { Grant grantEntity = grant.toDataModel(); grantEntity.setType(Grant.GrantType.INTERNAL.getValue()); - grantEntity.setCreationUser(databaseRepository.getUserInfoDao().find(this.userScope.getUserId())); + grantEntity.setCreationUser(this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first()); return databaseRepository.getGrantDao().createOrUpdate(grantEntity); } public Project createOrUpdate(eu.eudat.models.data.project.Project project) throws InvalidApplicationException { Project projectEntity = project.toDataModel(); - projectEntity.setCreationUser(databaseRepository.getUserInfoDao().find(this.userScope.getUserId())); + projectEntity.setCreationUser(this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first()); return databaseRepository.getProjectDao().createOrUpdate(projectEntity); } @@ -56,7 +61,7 @@ public class QuickWizardManager { //TODO //newDmp.getGrant().setFunder(funderEntity); } - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first(); createFunderIfItDoesntExist(newDmp, user); createGrantIfItDoesntExist(newDmp, user); //TODO @@ -69,8 +74,8 @@ public class QuickWizardManager { //TODO //apiContext.getOperationsContext().getDatabaseRepository().getGrantDao().createOrUpdate(newDmp.getGrant()); DmpEntity dmpret = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().createOrUpdate(newDmp); - if (dataManagementPlan.getAssociatedUsers().size() == 0) - assignUser(newDmp, user, apiContext); +// if (dataManagementPlan.getAssociatedUsers().size() == 0) +// assignUser(newDmp, user, apiContext); // this.updateIndex(dmpret); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ResearcherManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ResearcherManager.java index 9a24752e6..769d5d8c1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ResearcherManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ResearcherManager.java @@ -11,8 +11,10 @@ import eu.eudat.data.query.items.item.researcher.ResearcherCriteriaRequest; import eu.eudat.logic.proxy.config.exceptions.HugeResultSet; import eu.eudat.logic.proxy.config.exceptions.NoURLFound; import eu.eudat.logic.proxy.fetching.RemoteFetcher; +import eu.eudat.query.UserQuery; import eu.eudat.queryable.QueryableList; import eu.eudat.logic.services.ApiContext; +import gr.cite.tools.data.query.QueryFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; @@ -31,18 +33,20 @@ public class ResearcherManager { private RemoteFetcher remoteFetcher; private ConfigLoader configLoader; private final UserScope userScope; + private final QueryFactory queryFactory; @Autowired - public ResearcherManager(ApiContext apiContext, ConfigLoader configLoader, UserScope userScope) { + public ResearcherManager(ApiContext apiContext, ConfigLoader configLoader, UserScope userScope, QueryFactory queryFactory) { this.apiContext = apiContext; this.remoteFetcher = apiContext.getOperationsContext().getRemoteFetcher(); this.configLoader = configLoader; this.userScope = userScope; + this.queryFactory = queryFactory; } public Researcher create(eu.eudat.models.data.researcher.Researcher researcher) throws Exception { Researcher researcherEntity = researcher.toDataModel(); - researcherEntity.setCreationUser(apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId())); + researcherEntity.setCreationUser(this.queryFactory.query(UserQuery.class).ids(this.userScope.getUserId()).first()); return apiContext.getOperationsContext().getDatabaseRepository().getResearcherDao().createOrUpdate(researcherEntity); } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java index bf42959f6..37e66cf3b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/UnlinkEmailConfirmationManager.java @@ -11,6 +11,7 @@ import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.model.UserContactInfo; import eu.eudat.query.UserContactInfoQuery; +import eu.eudat.query.UserQuery; import gr.cite.tools.data.query.Ordering; import gr.cite.tools.data.query.QueryFactory; import org.slf4j.Logger; @@ -71,15 +72,15 @@ public class UnlinkEmailConfirmationManager { @Transactional private void unlinkUser(String emailTobeUnlinked, Integer provider) throws InvalidApplicationException { - UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() - .where((builder, root) -> builder.and(builder.equal(root.get("email"), emailTobeUnlinked), builder.equal(root.get("provider"), provider))).getSingle(); - if(credential != null) { - databaseRepository.getCredentialDao().delete(credential); - } +// UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable() +// .where((builder, root) -> builder.and(builder.equal(root.get("email"), emailTobeUnlinked), builder.equal(root.get("provider"), provider))).getSingle(); +// if(credential != null) { +// databaseRepository.getCredentialDao().delete(credential); +// } } public void sendConfirmationEmail(String email, UUID userId, Integer provider) throws InvalidApplicationException { - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); + UserEntity user = this.queryFactory.query(UserQuery.class).ids(userId).first(); UserContactInfoQuery query = this.queryFactory.query(UserContactInfoQuery.class).userIds(user.getId()); query.setOrder(new Ordering().addAscending(UserContactInfo._ordinal)); if (query.first().getValue() != null && !query.first().getValue().equals(email)) { 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 bf836d44a..73cdf98a9 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 @@ -1,49 +1,27 @@ package eu.eudat.logic.managers; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.authorization.Permission; import eu.eudat.commons.scope.user.UserScope; import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity; -import eu.eudat.data.UserCredentialEntity; -import eu.eudat.data.DmpEntity; -import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; -import eu.eudat.data.dao.entities.UserInfoDao; -import eu.eudat.data.DescriptionTemplateEntity; -import eu.eudat.data.UserEntity; -import eu.eudat.data.UserRoleEntity; -import eu.eudat.data.query.items.table.userinfo.UserInfoTableRequestItem; -import eu.eudat.logic.builders.entity.UserRoleBuilder; -import eu.eudat.logic.builders.model.models.DataTableDataBuilder; -import eu.eudat.logic.services.ApiContext; import eu.eudat.commons.types.xml.XmlBuilder; -import eu.eudat.models.HintedModelFactory; -import eu.eudat.models.data.dmp.DataManagementPlan; -import eu.eudat.models.data.helpers.common.DataTableData; -import eu.eudat.models.data.userinfo.UserCredential; -import eu.eudat.models.data.userinfo.UserListingModel; -import eu.eudat.models.data.userinfo.UserProfile; +import eu.eudat.data.DescriptionTemplateEntity; +import eu.eudat.data.UserCredentialEntity; +import eu.eudat.data.UserEntity; +import eu.eudat.logic.services.ApiContext; import eu.eudat.query.UserCredentialQuery; -import eu.eudat.queryable.QueryableList; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.query.QueryFactory; -import org.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.core.env.Environment; -import org.springframework.http.HttpHeaders; -import org.springframework.http.HttpStatus; -import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.w3c.dom.Document; import org.w3c.dom.Element; import javax.management.InvalidApplicationException; -import java.io.*; -import java.nio.file.Files; -import java.util.*; -import java.util.stream.Collectors; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; @Component public class UserManager { @@ -75,125 +53,125 @@ public class UserManager { return datasetprofile; } - public DataTableData getPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { - QueryableList users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()).withHint(HintedModelFactory.getHint(UserListingModel.class)); - QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); - - List modelUsers = pagedUsers.select(item -> new UserListingModel().fromDataModel(item)); - return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).totalCount(users.count()).data(modelUsers).build(); - } +// public DataTableData getPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { +// QueryableList users = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().getWithCriteria(userInfoTableRequestItem.getCriteria()).withHint(HintedModelFactory.getHint(UserListingModel.class)); +// QueryableList pagedUsers = PaginationManager.applyPaging(users, userInfoTableRequestItem); +// +// List modelUsers = pagedUsers.select(item -> new UserListingModel().fromDataModel(item)); +// return apiContext.getOperationsContext().getBuilderFactory().getBuilder(DataTableDataBuilder.class).totalCount(users.count()).data(modelUsers).build(); +// } - public List getCredentials(UUID userId) throws InvalidApplicationException { - List results = new ArrayList<>(); - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); - List credentials = this.queryFactory.query(UserCredentialQuery.class).userIds(user.getId()).collect(); - credentials.forEach(credential -> { - UserCredential userCredential = new UserCredential(); - results.add(userCredential); - }); - return results; - } +// public List getCredentials(UUID userId) throws InvalidApplicationException { +// List results = new ArrayList<>(); +// UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); +// List credentials = this.queryFactory.query(UserCredentialQuery.class).userIds(user.getId()).collect(); +// credentials.forEach(credential -> { +// UserCredential userCredential = new UserCredential(); +// results.add(userCredential); +// }); +// return results; +// } - public UserProfile getSingle(UUID userId) throws Exception { - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); - UserProfile profile = new UserProfile().fromDataModel(user); - List roles = new LinkedList<>(); - DataManagementPlanCriteria criteria = new DataManagementPlanCriteria(); - criteria.setAllVersions(false); - QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria); - List dmps = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, userId, roles).take(5).toList(); - profile.setAssociatedDmps(dmps.stream().map(x -> new DataManagementPlan().fromDataModel(x)).collect(Collectors.toList())); - return profile; - } +// public UserProfile getSingle(UUID userId) throws Exception { +// UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); +// UserProfile profile = new UserProfile().fromDataModel(user); +// List roles = new LinkedList<>(); +// DataManagementPlanCriteria criteria = new DataManagementPlanCriteria(); +// criteria.setAllVersions(false); +// QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(criteria); +// List dmps = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, userId, roles).take(5).toList(); +// profile.setAssociatedDmps(dmps.stream().map(x -> new DataManagementPlan().fromDataModel(x)).collect(Collectors.toList())); +// return profile; +// } - public void editRoles(UserListingModel user) throws InvalidApplicationException { - UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(user.getId()); - //userInfo.getUserRoles().stream().forEach(item -> apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().delete(item)); //TODO - for (String role : user.getAppRoles()) { - UserRoleEntity userRole = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build(); - apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); - } - } +// public void editRoles(UserListingModel user) throws InvalidApplicationException { +// UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(user.getId()); +// //userInfo.getUserRoles().stream().forEach(item -> apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().delete(item)); //TODO +// for (String role : user.getAppRoles()) { +// UserRoleEntity userRole = apiContext.getOperationsContext().getBuilderFactory().getBuilder(UserRoleBuilder.class).role(role).userInfo(userInfo).build(); +// apiContext.getOperationsContext().getDatabaseRepository().getUserRoleDao().createOrUpdate(userRole); +// } +// } - public void updateSettings(Map settings) throws IOException, InvalidApplicationException { - UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); - apiContext.getOperationsContext().getDatabaseRepository().detachEntity(userInfo); - HashMap result = - new ObjectMapper().readValue(userInfo.getAdditionalInfo(), HashMap.class); - userInfo.setName(settings.entrySet().stream().filter(entry -> entry.getKey().equals("name")).filter(Objects::nonNull).map(entry -> entry.getValue().toString()).findFirst().orElse(userInfo.getName())); - settings.remove("name"); - result.putAll(settings); - userInfo.setAdditionalInfo(new JSONObject(result).toString()); - apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() - .createOrUpdate(userInfo); - } - - public DataTableData getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { - UserInfoDao userInfoDao = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao(); - QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); - - List colaborators = userInfoDao.getAuthenticated(users, this.userScope.getUserId()) - .withHint(HintedModelFactory.getHint(UserListingModel.class)) - .select(colaborator -> new UserListingModel().fromDataModel(colaborator)); - - DataTableData dataTableData = new DataTableData<>(); - dataTableData.setData(colaborators); - dataTableData.setTotalCount((long) colaborators.size()); - return dataTableData; - } - - public ResponseEntity exportToCsv() throws IOException, InvalidApplicationException { - - this.authorizationService.authorizeForce(Permission.AdminRole); - - List users = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().toList(); - StringBuilder resultBuilder = new StringBuilder(); - resultBuilder.append("User Id").append(",").append("User Name").append(",").append("User Email").append("\n"); - users.stream().forEach(user -> resultBuilder.append(user.getId().toString()).append(",") - .append(user.getName()).append(",") -//TODO .append(user.getEmail()).append("\n") - ); - String result = resultBuilder.toString(); - String fileName = "Users_dump";//dmp.getLabel(); - fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", ""); - String uuid = UUID.randomUUID().toString(); - File file = new File(this.environment.getProperty("temp.temp") + uuid + ".csv"); - OutputStream output = new FileOutputStream(file); - try { -// mapper.writeValue(file, rdaExportModel); - output.write(result.getBytes()); - output.flush(); - output.close(); - } catch (IOException e) { - 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 + ".csv"); - 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); - } - - public UserProfile getFromEmail(String email) throws InvalidApplicationException { - UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle(); - return new UserProfile().fromDataModel(user); - } - - public Long countActiveUsers(){ //TODO: Authn - return 0L; - //return apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().asQueryable().where(((builder, root) -> builder.greaterThan(root.get("expiresAt"), new Date()))).count(); - } - - public Long countAllUsers() throws InvalidApplicationException { - return apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().count(); - } +// public void updateSettings(Map settings) throws IOException, InvalidApplicationException { +// UserEntity userInfo = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(this.userScope.getUserId()); +// apiContext.getOperationsContext().getDatabaseRepository().detachEntity(userInfo); +// HashMap result = +// new ObjectMapper().readValue(userInfo.getAdditionalInfo(), HashMap.class); +// userInfo.setName(settings.entrySet().stream().filter(entry -> entry.getKey().equals("name")).filter(Objects::nonNull).map(entry -> entry.getValue().toString()).findFirst().orElse(userInfo.getName())); +// settings.remove("name"); +// result.putAll(settings); +// userInfo.setAdditionalInfo(new JSONObject(result).toString()); +// apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao() +// .createOrUpdate(userInfo); +// } +// +// public DataTableData getCollaboratorsPaged(UserInfoTableRequestItem userInfoTableRequestItem) throws Exception { +// UserInfoDao userInfoDao = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao(); +// QueryableList users = userInfoDao.getWithCriteria(userInfoTableRequestItem.getCriteria()); +// +// List colaborators = userInfoDao.getAuthenticated(users, this.userScope.getUserId()) +// .withHint(HintedModelFactory.getHint(UserListingModel.class)) +// .select(colaborator -> new UserListingModel().fromDataModel(colaborator)); +// +// DataTableData dataTableData = new DataTableData<>(); +// dataTableData.setData(colaborators); +// dataTableData.setTotalCount((long) colaborators.size()); +// return dataTableData; +// } +// +// public ResponseEntity exportToCsv() throws IOException, InvalidApplicationException { +// +// this.authorizationService.authorizeForce(Permission.AdminRole); +// +// List users = this.apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().toList(); +// StringBuilder resultBuilder = new StringBuilder(); +// resultBuilder.append("User Id").append(",").append("User Name").append(",").append("User Email").append("\n"); +// users.stream().forEach(user -> resultBuilder.append(user.getId().toString()).append(",") +// .append(user.getName()).append(",") +////TODO .append(user.getEmail()).append("\n") +// ); +// String result = resultBuilder.toString(); +// String fileName = "Users_dump";//dmp.getLabel(); +// fileName = fileName.replaceAll("[^a-zA-Z0-9+ ]", ""); +// String uuid = UUID.randomUUID().toString(); +// File file = new File(this.environment.getProperty("temp.temp") + uuid + ".csv"); +// OutputStream output = new FileOutputStream(file); +// try { +//// mapper.writeValue(file, rdaExportModel); +// output.write(result.getBytes()); +// output.flush(); +// output.close(); +// } catch (IOException e) { +// 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 + ".csv"); +// 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); +// } +// +// public UserProfile getFromEmail(String email) throws InvalidApplicationException { +// UserEntity user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().where((builder, root) -> builder.equal(root.get("email"), email)).getSingle(); +// return new UserProfile().fromDataModel(user); +// } +// +// public Long countActiveUsers(){ //TODO: Authn +// return 0L; +// //return apiContext.getOperationsContext().getDatabaseRepository().getUserTokenDao().asQueryable().where(((builder, root) -> builder.greaterThan(root.get("expiresAt"), new Date()))).count(); +// } +// +// public Long countAllUsers() throws InvalidApplicationException { +// return apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().asQueryable().count(); +// } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java index 382b0a481..f34d34e2a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java @@ -1,7 +1,6 @@ package eu.eudat.logic.services.operations; import eu.eudat.data.dao.entities.*; -import eu.eudat.data.dao.entities.security.CredentialDao; public interface DatabaseRepository { @@ -25,14 +24,8 @@ public interface DatabaseRepository { ServiceDao getServiceDao(); - UserInfoDao getUserInfoDao(); - - UserRoleDao getUserRoleDao(); - InvitationDao getInvitationDao(); - CredentialDao getCredentialDao(); - ExternalDatasetDao getExternalDatasetDao(); UserDatasetProfileDao getUserDatasetProfileDao(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java index 1369f35b2..640653026 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java @@ -1,7 +1,6 @@ package eu.eudat.logic.services.operations; import eu.eudat.data.dao.entities.*; -import eu.eudat.data.dao.entities.security.CredentialDao; import jakarta.persistence.EntityManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -29,16 +28,10 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { private ServiceDao serviceDao; - private UserInfoDao userInfoDao; - private InvitationDao invitationDao; - private CredentialDao credentialDao; - private ExternalDatasetDao externalDatasetDao; - private UserRoleDao userRoleDao; - private UserDatasetProfileDao userDatasetProfileDao; private UserDmpDao userDmpDao; @@ -110,10 +103,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { } @Autowired - private void setUserInfoDao(UserInfoDao userInfoDao) { - this.userInfoDao = userInfoDao; - } - @Override public DataRepositoryDao getDataRepositoryDao() { return dataRepositoryDao; @@ -164,11 +153,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { return serviceDao; } - @Override - public UserInfoDao getUserInfoDao() { - return userInfoDao; - } - @Override public InvitationDao getInvitationDao() { return invitationDao; @@ -179,16 +163,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { this.invitationDao = invitationDao; } - @Override - public CredentialDao getCredentialDao() { - return credentialDao; - } - - @Autowired - public void setCredentialDao(CredentialDao credentialDao) { - this.credentialDao = credentialDao; - } - @Override public ExternalDatasetDao getExternalDatasetDao() { return externalDatasetDao; @@ -199,16 +173,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { this.externalDatasetDao = externalDatasetDao; } - @Override - public UserRoleDao getUserRoleDao() { - return userRoleDao; - } - - @Autowired - public void setUserRoleDao(UserRoleDao userRoleDao) { - this.userRoleDao = userRoleDao; - } - @Autowired public void setEntityManager(EntityManager entityManager) { this.entityManager = entityManager; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index 6a31886d4..5eb05b7e1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -16,7 +16,6 @@ import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.grant.Grant; import eu.eudat.models.data.project.Project; -import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; import java.util.*; @@ -36,9 +35,7 @@ public class DataManagementPlan implements DataModel organisations; private List researchers; - private List associatedUsers; private List extraFields; - private eu.eudat.models.data.userinfo.UserInfo creator; private Date modified; private Date created; private List dynamicFields; @@ -78,13 +75,6 @@ public class DataManagementPlan implements DataModel getAssociatedUsers() { - return associatedUsers; - } - public void setAssociatedUsers(List associatedUsers) { - this.associatedUsers = associatedUsers; - } - public int getVersion() { return version; } @@ -120,13 +110,6 @@ public class DataManagementPlan implements DataModel getProfiles() { return profiles; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java index 7908ca5bb..d21a12d56 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java @@ -1,23 +1,19 @@ package eu.eudat.models.data.dmp; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.data.DmpBlueprintEntity; import eu.eudat.data.DmpEntity; -import eu.eudat.data.old.*; import eu.eudat.models.DataModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.funder.FunderDMPEditorModel; +import eu.eudat.models.data.grant.GrantDMPEditorModel; import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.listingmodels.UserInfoListingModel; -import eu.eudat.models.data.grant.GrantDMPEditorModel; import eu.eudat.models.data.project.ProjectDMPEditorModel; -import eu.eudat.models.data.userinfo.UserListingModel; -import net.minidev.json.JSONObject; -import java.util.*; -import java.util.stream.Collectors; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.UUID; public class DataManagementPlanEditorModel implements DataModel { private UUID id; @@ -33,9 +29,7 @@ public class DataManagementPlanEditorModel implements DataModel organisations; private List researchers; - private List associatedUsers; private List extraFields; - private eu.eudat.models.data.userinfo.UserInfo creator; private Date modified; private Date created; private List dynamicFields; @@ -74,16 +68,6 @@ public class DataManagementPlanEditorModel implements DataModel getAssociatedUsers() { - return associatedUsers; - } - public void setAssociatedUsers(List associatedUsers) { - this.associatedUsers = associatedUsers; - } - - public int getVersion() { - return version; - } public void setVersion(int version) { this.version = version; } @@ -116,13 +100,6 @@ public class DataManagementPlanEditorModel implements DataModel getProfiles() { return profiles; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java index acc41f13d..0b83a8f83 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanNewVersionModel.java @@ -11,8 +11,6 @@ import eu.eudat.models.data.dataset.Dataset; import eu.eudat.models.data.funder.FunderDMPEditorModel; import eu.eudat.models.data.grant.GrantDMPEditorModel; import eu.eudat.models.data.project.ProjectDMPEditorModel; -import eu.eudat.models.data.userinfo.UserInfo; -import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,9 +35,6 @@ public class DataManagementPlanNewVersionModel implements DataModel organisations; private List researchers; - private List associatedUsers; - private eu.eudat.models.data.userinfo.UserInfo creator; - private Date created; private List datasets; private ProjectDMPEditorModel project; private FunderDMPEditorModel funder; @@ -115,27 +110,6 @@ public class DataManagementPlanNewVersionModel implements DataModel getAssociatedUsers() { - return associatedUsers; - } - public void setAssociatedUsers(List associatedUsers) { - this.associatedUsers = associatedUsers; - } - - public UserInfo getCreator() { - return creator; - } - public void setCreator(UserInfo creator) { - this.creator = creator; - } - - public Date getCreated() { - return created; - } - public void setCreated(Date created) { - this.created = created; - } - public List getDatasets() { return datasets; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java index 1e3746cee..1f61973df 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/invitation/Invitation.java @@ -1,6 +1,6 @@ package eu.eudat.models.data.invitation; -import eu.eudat.models.data.userinfo.UserInfoInvitationModel; +import eu.eudat.model.User; import java.util.List; import java.util.UUID; @@ -8,7 +8,7 @@ import java.util.UUID; public class Invitation { private UUID dataManagementPlan; - private List users; + private List users; private Integer role; public UUID getDataManagementPlan() { @@ -19,11 +19,11 @@ public class Invitation { this.dataManagementPlan = dataManagementPlan; } - public List getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/lock/Lock.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/lock/Lock.java index 46d8e5e9c..1ab6afa73 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/lock/Lock.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/lock/Lock.java @@ -1,7 +1,7 @@ package eu.eudat.models.data.lock; +import eu.eudat.model.User; import eu.eudat.models.DataModel; -import eu.eudat.models.data.userinfo.UserInfo; import java.util.Date; import java.util.UUID; @@ -9,7 +9,7 @@ import java.util.UUID; public class Lock implements DataModel { private UUID id; private UUID target; - private UserInfo lockedBy; + private User lockedBy; private Date lockedAt; private Date touchedAt; @@ -29,14 +29,6 @@ public class Lock implements DataModel { this.target = target; } - public UserInfo getLockedBy() { - return lockedBy; - } - - public void setLockedBy(UserInfo lockedBy) { - this.lockedBy = lockedBy; - } - public Date getLockedAt() { return lockedAt; } @@ -57,7 +49,7 @@ public class Lock implements DataModel { public Lock fromDataModel(eu.eudat.data.old.Lock entity) { this.id = entity.getId(); this.target = entity.getTarget(); - this.lockedBy = new UserInfo().fromDataModel(entity.getLockedBy()); +// this.lockedBy = new UserInfo().fromDataModel(entity.getLockedBy()); this.lockedAt = entity.getLockedAt(); this.touchedAt = entity.getTouchedAt(); return this; @@ -70,7 +62,7 @@ public class Lock implements DataModel { entity.setTarget(this.getTarget()); entity.setLockedAt(this.getLockedAt()); entity.setTouchedAt(this.getTouchedAt()); - entity.setLockedBy(this.getLockedBy().toDataModel()); +// entity.setLockedBy(this.getLockedBy().toDataModel()); return entity; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/notiication/Notification.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/notiication/Notification.java index 44897e010..ecb099360 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/notiication/Notification.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/notiication/Notification.java @@ -4,8 +4,8 @@ import eu.eudat.commons.enums.old.notification.ActiveStatus; import eu.eudat.commons.enums.old.notification.ContactType; import eu.eudat.commons.enums.old.notification.NotificationType; import eu.eudat.commons.enums.old.notification.NotifyState; +import eu.eudat.model.User; import eu.eudat.models.DataModel; -import eu.eudat.models.data.userinfo.UserInfo; import java.util.Date; import java.util.UUID; @@ -13,7 +13,7 @@ import java.util.UUID; public class Notification implements DataModel { private UUID id; - private UserInfo userId; + private User userId; private ActiveStatus isActive; private NotificationType type; private ContactType contactTypeHint; @@ -33,11 +33,11 @@ public class Notification implements DataModel user = new LinkedList<>(); - eu.eudat.models.data.userinfo.UserInfo userInfo = new eu.eudat.models.data.userinfo.UserInfo(); + List user = new LinkedList<>(); + User userInfo = new User(); userInfo.setId(userScope.getUserId()); - dataManagementPlanEntity.setAssociatedUsers(user); +// dataManagementPlanEntity.setAssociatedUsers(user); dataManagementPlanEntity.setExtraProperties(new HashMap<>()); dataManagementPlanEntity.getExtraProperties().put("language", this.language); dataManagementPlanEntity.getExtraProperties().put("visible", false); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserCredential.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserCredential.java deleted file mode 100644 index 93f3a1fa3..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserCredential.java +++ /dev/null @@ -1,21 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import eu.eudat.commons.enums.ProviderType; - -public class UserCredential { - private String email; - private ProviderType provider; - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - public ProviderType getProvider() { - return provider; - } - public void setProvider(ProviderType provider) { - this.provider = provider; - } - -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java deleted file mode 100644 index 9dbe36f56..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfo.java +++ /dev/null @@ -1,74 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import eu.eudat.data.UserEntity; -import eu.eudat.models.DataModel; - -import java.time.Instant; -import java.util.UUID; - -public class UserInfo implements DataModel { - private UUID id; - - - private String name = null; - - private Instant created = null; - - // private String additionalinfo; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Instant getCreated() { - return created; - } - - public void setCreated(Instant created) { - this.created = created; - } - - - /*public String getAdditionalinfo() { - return additionalinfo; - } - - public void setAdditionalinfo(String additionalinfo) { - this.additionalinfo = additionalinfo; - }*/ - - @Override - public UserInfo fromDataModel(UserEntity entity) { - this.name = entity.getName(); - this.id = entity.getId(); - return this; - } - - @Override - public UserEntity toDataModel() { - UserEntity entity = new UserEntity(); - entity.setId(this.getId()); - entity.setName(this.getName()); - //entity.setAdditionalinfo(this.getAdditionalinfo()); - entity.setCreatedAt(this.getCreated()); -// entity.setVerified_email(this.getVerified_email()); - return entity; - } - - @Override - public String getHint() { - return null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java deleted file mode 100644 index 544d63668..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserInfoInvitationModel.java +++ /dev/null @@ -1,48 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import eu.eudat.data.UserEntity; -import eu.eudat.models.DataModel; - -import java.util.UUID; - - -public class UserInfoInvitationModel implements DataModel { - private UUID id; - private String name; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - @Override - public UserInfoInvitationModel fromDataModel(UserEntity entity) { - this.id = entity.getId(); - this.name = entity.getName(); - return this; - } - - @Override - public UserEntity toDataModel() { - UserEntity userInfo = new UserEntity(); - userInfo.setId(this.id); - userInfo.setName(this.name); - return userInfo; - } - - @Override - public String getHint() { - return null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserListingModel.java deleted file mode 100644 index 707c6cd1f..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserListingModel.java +++ /dev/null @@ -1,98 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import eu.eudat.data.UserEntity; -import eu.eudat.models.DataModel; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.time.Instant; -import java.util.*; - - -public class UserListingModel implements DataModel { - private static final Logger logger = LoggerFactory.getLogger(UserListingModel.class); - - private UUID id; - private String name; - private Instant created; - //private String additionalinfo; - private List appRoles; - private String avatarUrl; - - public UUID getId() { - return id; - } - public void setId(UUID id) { - this.id = id; - } - - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public Instant getCreated() { - return created; - } - public void setCreated(Instant created) { - this.created = created; - } - - /*public String getAdditionalinfo() { - return additionalinfo; - } - public void setAdditionalinfo(String additionalinfo) { - this.additionalinfo = additionalinfo; - }*/ - - public List getAppRoles() { - return appRoles; - } - public void setAppRoles(List appRoles) { - this.appRoles = appRoles; - } - - public String getAvatarUrl() { - return avatarUrl; - } - public void setAvatarUrl(String avatarUrl) { - this.avatarUrl = avatarUrl; - } - @Override - public UserListingModel fromDataModel(UserEntity entity) { - this.id = entity.getId(); - this.name = entity.getName(); - this.created = entity.getCreatedAt(); - // this.additionalinfo = entity.getAdditionalinfo(); - //TODO -// this.appRoles = entity.getUserRoles().stream().map(item -> item.getRole()).collect(Collectors.toList()); -// if (entity.getAdditionalinfo() != null) { -// try { -// Map additionalInfo = new ObjectMapper().readValue(entity.getAdditionalinfo(), HashMap.class); -// this.avatarUrl = (String) additionalInfo.get("avatarUrl"); -// } catch (IOException e) { -// logger.error(e.getMessage(), e); -// } -// } - return this; - } - - @Override - public UserEntity toDataModel() throws Exception { - UserEntity userInfo = new UserEntity(); - userInfo.setId(this.id); - userInfo.setName(this.name); - userInfo.setCreatedAt(this.created); - // userInfo.setAdditionalinfo(this.additionalinfo); - - return userInfo; - } - - @Override - public String getHint() { - return "userInfo"; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserMergeRequestModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserMergeRequestModel.java deleted file mode 100644 index 5a60b5b2b..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserMergeRequestModel.java +++ /dev/null @@ -1,29 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import java.util.UUID; - -public class UserMergeRequestModel { - private UUID userId; - private String email; - private Integer provider; - public UUID getUserId() { - return userId; - } - public void setUserId(UUID userId) { - this.userId = userId; - } - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - - public Integer getProvider() { - return provider; - } - - public void setProvider(Integer provider) { - this.provider = provider; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java deleted file mode 100644 index 50f971863..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserProfile.java +++ /dev/null @@ -1,142 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.data.UserEntity; -import eu.eudat.models.DataModel; -import eu.eudat.models.data.dmp.DataManagementPlan; -import eu.eudat.models.data.dmp.Organisation; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import java.io.IOException; -import java.util.*; - -/** - * Created by ikalyvas on 8/24/2018. - */ -public class UserProfile implements DataModel { - private static final Logger logger = LoggerFactory.getLogger(UserProfile.class); - - private UUID id; - private String name; - private List associatedDmps; - private Map language; - private String timezone; - private Map culture; - private String avatarUrl; - private Organisation organization; - private String roleOrganization; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - /*public String getAdditionalinfo() { - return additionalinfo; - } - - public void setAdditionalinfo(String additionalinfo) { - this.additionalinfo = additionalinfo; - }*/ - - public List getAssociatedDmps() { - return associatedDmps; - } - - public void setAssociatedDmps(List associatedDmps) { - this.associatedDmps = associatedDmps; - } - - - public Map getLanguage() { - return language; - } - - public void setLanguage(Map language) { - this.language = language; - } - - public String getTimezone() { - return timezone; - } - - public void setTimezone(String timezone) { - this.timezone = timezone; - } - - public Map getCulture() { - return culture; - } - - public void setCulture(Map culture) { - this.culture = culture; - } - - public String getAvatarUrl() { - return avatarUrl; - } - - public void setAvatarUrl(String avatarUrl) { - this.avatarUrl = avatarUrl; - } - - - - public Organisation getOrganization() { - return organization; - } - - public void setOrganization(Organisation organization) { - this.organization = organization; - } - - public String getRoleOrganization() { - return roleOrganization; - } - - public void setRoleOrganization(String roleOrganization) { - this.roleOrganization = roleOrganization; - } - - @Override - public UserProfile fromDataModel(UserEntity entity) { - this.id = entity.getId(); - this.name = entity.getName(); - //this.additionalinfo = entity.getAdditionalinfo(); - try { - Map additionalInfo = new ObjectMapper().readValue(entity.getAdditionalInfo(), HashMap.class); - this.language = (Map)additionalInfo.get("language"); - this.culture = (Map) additionalInfo.get("culture"); - this.timezone = (String) additionalInfo.get("timezone"); - this.avatarUrl = (String) additionalInfo.get("avatarUrl"); - this.organization = Organisation.fromMap((HashMap) additionalInfo.get("organization")); - this.roleOrganization = (String) additionalInfo.get("roleOrganization"); - } catch (IOException e) { - logger.error(e.getMessage(), e); - } - return this; - } - - @Override - public UserEntity toDataModel() throws Exception { - return null; - } - - @Override - public String getHint() { - return null; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserUnlinkRequestModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserUnlinkRequestModel.java deleted file mode 100644 index 5ce0b0c77..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/userinfo/UserUnlinkRequestModel.java +++ /dev/null @@ -1,30 +0,0 @@ -package eu.eudat.models.data.userinfo; - -import java.util.UUID; - -public class UserUnlinkRequestModel { - private UUID userId; - private String email; - private Integer provider; - - public UUID getUserId() { - return userId; - } - public void setUserId(UUID userId) { - this.userId = userId; - } - - public String getEmail() { - return email; - } - public void setEmail(String email) { - this.email = email; - } - - public Integer getProvider() { - return provider; - } - public void setProvider(Integer provider) { - this.provider = provider; - } -} From e62d765796aae44949ed565b98a7576c68a2ab0a Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 12:15:29 +0200 Subject: [PATCH 03/15] code clean up --- .../java/eu/eudat/data/DmpUserEntity.java | 17 +----- .../data/UserDescriptionTemplateEntity.java | 19 +----- .../dao/entities/UserDatasetProfileDao.java | 12 ---- .../entities/UserDatasetProfileDaoImpl.java | 53 ---------------- .../eudat/data/dao/entities/UserDmpDao.java | 12 ---- .../data/dao/entities/UserDmpDaoImpl.java | 56 ----------------- .../main/java/eu/eudat/controllers/DMPs.java | 4 +- .../managers/DataManagementPlanManager.java | 42 ++++++------- .../eudat/logic/managers/DatasetManager.java | 3 +- .../MergeEmailConfirmationManager.java | 10 +-- .../logic/managers/QuickWizardManager.java | 2 +- .../operations/DatabaseRepository.java | 4 -- .../operations/DatabaseRepositoryImpl.java | 23 ------- .../data/admin/composite/DatasetProfile.java | 9 ++- .../recent/model/RecentActivityModel.java | 8 +-- .../recent/model/RecentDatasetModel.java | 5 -- .../recent/model/RecentDmpModel.java | 2 - .../data/dataset/DatasetOverviewModel.java | 10 ++- .../models/data/dmp/DataManagementPlan.java | 16 ++--- .../dmp/DataManagementPlanEditorModel.java | 8 +-- .../DataManagementPlanListingModel.java | 7 ++- .../DataManagementPlanOverviewModel.java | 7 ++- .../listingmodels/DatasetListingModel.java | 7 ++- .../listingmodels/UserInfoListingModel.java | 61 ------------------- .../DataManagementPlanPublicListingModel.java | 8 +-- .../DatasetPublicListingModel.java | 8 +-- .../DataManagementPlanPublicModel.java | 8 +-- .../models/user/UserInfoPublicModel.java | 60 ------------------ 28 files changed, 75 insertions(+), 406 deletions(-) delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDao.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDaoImpl.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDao.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java delete mode 100644 dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DmpUserEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DmpUserEntity.java index 1ed6aa352..25b0267ff 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DmpUserEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DmpUserEntity.java @@ -13,7 +13,7 @@ import java.util.UUID; @Entity @Table(name = "\"DmpUser\"") -public class DmpUserEntity implements DataEntity { +public class DmpUserEntity { @Id @Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)") @@ -108,19 +108,4 @@ public class DmpUserEntity implements DataEntity { public void setIsActive(IsActive isActive) { this.isActive = isActive; } - - @Override - public void update(Object entity) { - - } - - @Override - public Object getKeys() { - return null; - } - - @Override - public Object buildFromTuple(List tuple, List fields, String base) { - return null; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/UserDescriptionTemplateEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/UserDescriptionTemplateEntity.java index bcf09cf14..6846e2336 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/UserDescriptionTemplateEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/UserDescriptionTemplateEntity.java @@ -14,7 +14,7 @@ import java.util.UUID; @Entity @Table(name = "\"UserDescriptionTemplate\"") -public class UserDescriptionTemplateEntity implements DataEntity { +public class UserDescriptionTemplateEntity { @Id @Column(name = "id", columnDefinition = "uuid", updatable = false, nullable = false) private UUID id; @@ -102,21 +102,4 @@ public class UserDescriptionTemplateEntity implements DataEntity tuple, List fields, String base) { - String currentBase = base.isEmpty() ? "" : base + "."; - if (fields.contains(currentBase + "id")) this.id = EntityBinder.fromTuple(tuple, currentBase + "id"); - return this; - } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDao.java deleted file mode 100644 index 9367fd3f2..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDao.java +++ /dev/null @@ -1,12 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.UserDescriptionTemplateEntity; -import eu.eudat.data.dao.DatabaseAccessLayer; - -import java.util.UUID; - -/** - * Created by ikalyvas on 2/8/2018. - */ -public interface UserDatasetProfileDao extends DatabaseAccessLayer { -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDaoImpl.java deleted file mode 100644 index 56ddb29c4..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDatasetProfileDaoImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.UserDescriptionTemplateEntity; -import eu.eudat.data.dao.DatabaseAccess; -import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.queryable.QueryableList; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -import javax.management.InvalidApplicationException; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -@Component("userDatasetProfileDao") -public class UserDatasetProfileDaoImpl extends DatabaseAccess implements UserDatasetProfileDao { - - @Autowired - public UserDatasetProfileDaoImpl(DatabaseService databaseService) { - super(databaseService); - } - - @Override - public UserDescriptionTemplateEntity createOrUpdate(UserDescriptionTemplateEntity item) { - return this.getDatabaseService().createOrUpdate(item, UserDescriptionTemplateEntity.class); - } - - @Override - public UserDescriptionTemplateEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(UserDescriptionTemplateEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); - } - - @Override - public void delete(UserDescriptionTemplateEntity item) { - this.getDatabaseService().delete(item); - } - - @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(UserDescriptionTemplateEntity.class); - } - - @Async - @Override - public CompletableFuture createOrUpdateAsync(UserDescriptionTemplateEntity item) { - return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); - } - - @Override - public UserDescriptionTemplateEntity find(UUID id, String hint) { - throw new UnsupportedOperationException(); - } -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDao.java deleted file mode 100644 index b403535ae..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDao.java +++ /dev/null @@ -1,12 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.dao.DatabaseAccessLayer; - -import java.util.UUID; - -/** - * Created by ikalyvas on 2/8/2018. - */ -public interface UserDmpDao extends DatabaseAccessLayer { -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java deleted file mode 100644 index 0ba524661..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/UserDmpDaoImpl.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.dao.DatabaseAccess; -import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.queryable.QueryableList; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Component; - -import javax.management.InvalidApplicationException; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -/** - * Created by ikalyvas on 2/8/2018. - */ -@Component("userDmpDao") -public class UserDmpDaoImpl extends DatabaseAccess implements UserDmpDao { - - @Autowired - public UserDmpDaoImpl(DatabaseService databaseService) { - super(databaseService); - } - - @Override - public DmpUserEntity createOrUpdate(DmpUserEntity item) { - return this.getDatabaseService().createOrUpdate(item, DmpUserEntity.class); - } - - @Override - public DmpUserEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(DmpUserEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingleOrDefault(); - } - - @Override - public void delete(DmpUserEntity item) { - this.getDatabaseService().delete(item); - } - - @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(DmpUserEntity.class); - } - - @Async - @Override - public CompletableFuture createOrUpdateAsync(DmpUserEntity item) { - return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); - } - - @Override - public DmpUserEntity find(UUID id, String hint) { - throw new UnsupportedOperationException(); - } -} 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 12f6fb4bd..196180c26 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 @@ -17,6 +17,7 @@ import eu.eudat.logic.managers.DataManagementPlanManager; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.operations.DatabaseRepository; +import eu.eudat.model.DmpUser; import eu.eudat.model.file.FileEnvelope; import eu.eudat.utilities.pdf.PDFUtils; import eu.eudat.models.data.datasetprofile.DatasetProfileListingModel; @@ -27,7 +28,6 @@ import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.helpers.responses.ResponseItem; import eu.eudat.models.data.listingmodels.DataManagementPlanListingModel; import eu.eudat.models.data.listingmodels.DataManagementPlanOverviewModel; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.listingmodels.VersionListingModel; import eu.eudat.query.DMPQuery; import eu.eudat.types.ApiMessageCode; @@ -353,7 +353,7 @@ public class DMPs extends BaseController { @RequestMapping(method = RequestMethod.POST, value = {"/updateusers/{id}"}) - public ResponseEntity> updateUsers(@PathVariable String id, @RequestBody List users) { + public ResponseEntity> updateUsers(@PathVariable String id, @RequestBody List users) { this.authorizationService.authorizeForce(Permission.AuthenticatedRole); try { 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 dcd400449..a494b2858 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 @@ -27,6 +27,7 @@ import eu.eudat.exceptions.security.ForbiddenException; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.logic.builders.entity.UserInfoBuilder; import eu.eudat.logic.proxy.config.configloaders.ConfigLoader; +import eu.eudat.model.DmpUser; import eu.eudat.model.mapper.deposit.DMPToDepositMapper; import eu.eudat.logic.services.ApiContext; import eu.eudat.logic.services.forms.VisibilityRuleService; @@ -34,8 +35,7 @@ import eu.eudat.logic.services.forms.VisibilityRuleServiceImpl; import eu.eudat.logic.services.operations.DatabaseRepository; import eu.eudat.commons.types.xml.XmlBuilder; import eu.eudat.model.file.FileEnvelope; -import eu.eudat.query.DmpDescriptionTemplateQuery; -import eu.eudat.query.UserQuery; +import eu.eudat.query.*; import eu.eudat.utilities.pdf.PDFUtils; import eu.eudat.logic.utilities.documents.types.ParagraphStyle; import eu.eudat.logic.utilities.documents.word.WordBuilder; @@ -56,8 +56,6 @@ import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.listingmodels.*; import eu.eudat.models.data.project.ProjectDMPEditorModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; -import eu.eudat.query.DescriptionTemplateQuery; -import eu.eudat.query.DmpBlueprintQuery; import eu.eudat.queryable.QueryableList; import eu.eudat.service.dmpblueprint.DmpBlueprintService; import eu.eudat.types.MetricNames; @@ -535,15 +533,14 @@ public class DataManagementPlanManager { newDmp.setCreatedAt(dmp.getCreatedAt() == null ? Instant.now() : dmp.getCreatedAt()); DmpEntity finalNewDmp = newDmp; - this.databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> root.get("dmp").in(finalNewDmp.getId())).toList(); - if (this.databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> root.get("dmp").in(finalNewDmp.getId())).toList()!= null && - this.databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> root.get("dmp").in(finalNewDmp.getId())).toList().stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUserId())) + if (this.queryFactory.query(DmpUserQuery.class).dmpIds(finalNewDmp.getId()).collect() != null && + this.queryFactory.query(DmpUserQuery.class).dmpIds(finalNewDmp.getId()).collect().stream().filter(userInfo -> this.userScope.getUserIdSafe().equals(userInfo.getUserId())) .collect(Collectors.toList()).size() == 0) { - List userDMPList = new ArrayList<>(this.databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> root.get("dmp").in(finalNewDmp.getId())).toList()); - for (UserInfoListingModel userInfoListingModel : dataManagementPlan.getUsers()) { + List userDMPList = new ArrayList<>(this.queryFactory.query(DmpUserQuery.class).dmpIds(finalNewDmp.getId()).collect()); + for (DmpUser userInfoListingModel : dataManagementPlan.getUsers()) { for (DmpUserEntity userDMP : userDMPList) { if (!(userDMP.getUserId().equals(userInfoListingModel.getId()))) { - apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().delete(userDMP); +// apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().delete(userDMP); } } } @@ -581,9 +578,9 @@ public class DataManagementPlanManager { if (dataManagementPlan.getUsers() != null && !dataManagementPlan.getUsers().isEmpty()) { clearUsers(newDmp); - for (UserInfoListingModel userListing : dataManagementPlan.getUsers()) { + for (DmpUser userListing : dataManagementPlan.getUsers()) { UserEntity tempUser = this.queryFactory.query(UserQuery.class).ids(userListing.getId()).first(); - assignUser(dmp, tempUser, DmpUserRole.of((short)userListing.getRole())); + assignUser(dmp, tempUser, userListing.getRole()); } } @@ -782,14 +779,13 @@ public class DataManagementPlanManager { copyDatasets(newDmp, databaseRepository.getDatasetDao()); - databaseRepository - .getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("dmp").get("id"), oldDmp.getId())) - .toList().stream().forEach(userDMP -> { + this.queryFactory.query(DmpUserQuery.class).dmpIds(oldDmp.getId()).collect() + .stream().forEach(userDMP -> { DmpUserEntity temp = new DmpUserEntity(); temp.setUserId(userDMP.getUserId()); temp.setRole(userDMP.getRole()); temp.setDmp(newDmp.getId()); - apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(temp); +// apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(temp); }); //TODO @@ -1344,14 +1340,14 @@ public class DataManagementPlanManager { metricsManager.increaseValue(MetricNames.DMP, 1, MetricNames.DRAFT); } - public void updateUsers(UUID id, List users) throws Exception { + public void updateUsers(UUID id, List users) throws Exception { DmpEntity dmp = this.apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(id); if (!isUserOwnerOfDmp(dmp)) throw new Exception("User does not have the privilege to do this action."); clearUsers(dmp); - for (UserInfoListingModel userListing : users) { + for (DmpUser userListing : users) { UserEntity tempUser = this.queryFactory.query(UserQuery.class).ids(userListing.getId()).first(); - assignUser(dmp, tempUser, DmpUserRole.of((short)userListing.getRole())); + assignUser(dmp, tempUser, userListing.getRole()); } } @@ -2410,12 +2406,12 @@ public class DataManagementPlanManager { userDMP.setDmp(dmp.getId()); userDMP.setUserId(userInfo.getId()); userDMP.setRole(role); - databaseRepository.getUserDmpDao().createOrUpdate(userDMP); +// databaseRepository.getUserDmpDao().createOrUpdate(userDMP); } private void clearUsers(DmpEntity dmp) throws InvalidApplicationException { - List userDMPs = apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().asQueryable().where(((builder, root) -> builder.equal(root.get("dmp").get("id"), dmp.getId()))).toList(); - userDMPs.forEach(userDMP -> apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().delete(userDMP)); + List userDMPs = this.queryFactory.query(DmpUserQuery.class).dmpIds(dmp.getId()).collect(); +// userDMPs.forEach(userDMP -> apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().delete(userDMP)); } private void assignGrandUserIfInternal(DmpEntity dmp, UserEntity user) { @@ -2681,7 +2677,7 @@ public class DataManagementPlanManager { * */ private void sendNotification(DmpEntity dmp, UserEntity user, NotificationType notificationType) throws InvalidApplicationException { - List userDMPS = databaseRepository.getUserDmpDao().asQueryable().where(((builder, root) -> builder.equal(root.get("dmp").get("id"), dmp.getId()))).toList(); + List userDMPS = this.queryFactory.query(DmpUserQuery.class).dmpIds(dmp.getId()).collect(); for (DmpUserEntity userDMP : userDMPS) { if (!userDMP.getUserId().equals(user.getId())) { Notification notification = new Notification(); 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 6364e848c..9c466cad1 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 @@ -51,6 +51,7 @@ import eu.eudat.models.data.listingmodels.DatasetListingModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.query.DescriptionTemplateQuery; import eu.eudat.query.DmpDescriptionTemplateQuery; +import eu.eudat.query.DmpUserQuery; import eu.eudat.query.UserContactInfoQuery; import eu.eudat.queryable.QueryableList; import eu.eudat.types.MetricNames; @@ -728,7 +729,7 @@ public class DatasetManager { } private void sendNotification(DescriptionEntity descriptionEntity, DmpEntity dmp, UserEntity user, NotificationType notificationType) throws InvalidApplicationException { - List userDMPS = databaseRepository.getUserDmpDao().asQueryable().where(((builder, root) -> builder.equal(root.get("dmp").get("id"), dmp.getId()))).toList(); + List userDMPS = this.queryFactory.query(DmpUserQuery.class).dmpIds(dmp.getId()).collect(); for (DmpUserEntity userDMP : userDMPS) { if (!userDMP.getUserId().equals(user.getId())) { Notification notification = new Notification(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java index 6c350c6e0..5c38f7978 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/MergeEmailConfirmationManager.java @@ -89,11 +89,11 @@ public class MergeEmailConfirmationManager { // UserCredentialEntity credential = databaseRepository.getCredentialDao().asQueryable().where((builder, root) -> builder.and(builder.equal(root.get("userId"), oldUser.getId()), builder.equal(root.get("provider"), provider))).getSingle(); // credential.setUserId(newUser.getId()); // databaseRepository.getCredentialDao().createOrUpdate(credential); - List userDmps = databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("user"), oldUser)).toList(); - userDmps.forEach(userDmp -> { - userDmp.setUserId(newUser.getId()); - databaseRepository.getUserDmpDao().createOrUpdate(userDmp); - }); +// List userDmps = databaseRepository.getUserDmpDao().asQueryable().where((builder, root) -> builder.equal(root.get("user"), oldUser)).toList(); +// userDmps.forEach(userDmp -> { +// userDmp.setUserId(newUser.getId()); +// databaseRepository.getUserDmpDao().createOrUpdate(userDmp); +// }); //TODO // try { // diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java index 9e8d41e70..afc5d6a3f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/QuickWizardManager.java @@ -93,7 +93,7 @@ public class QuickWizardManager { userDMP.setDmp(dmp.getId()); userDMP.setUserId(userInfo.getId()); userDMP.setRole(DmpUserRole.User); - apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP); + //apiContext.getOperationsContext().getDatabaseRepository().getUserDmpDao().createOrUpdate(userDMP); } private void createGrantIfItDoesntExist(DmpEntity newDmp, UserEntity userInfo) throws InvalidApplicationException { diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java index f34d34e2a..d00343413 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java @@ -28,10 +28,6 @@ public interface DatabaseRepository { ExternalDatasetDao getExternalDatasetDao(); - UserDatasetProfileDao getUserDatasetProfileDao(); - - UserDmpDao getUserDmpDao(); - ContentDao getContentDao(); EmailConfirmationDao getLoginConfirmationEmailDao(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java index 640653026..476878e5f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java @@ -32,10 +32,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { private ExternalDatasetDao externalDatasetDao; - private UserDatasetProfileDao userDatasetProfileDao; - - private UserDmpDao userDmpDao; - private ContentDao contentDao; private EmailConfirmationDao loginConfirmationEmailDao; @@ -178,16 +174,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { this.entityManager = entityManager; } - @Override - public UserDmpDao getUserDmpDao() { - return userDmpDao; - } - - @Autowired - public void setUserDmpDao(UserDmpDao userDmpDao) { - this.userDmpDao = userDmpDao; - } - @Override public ContentDao getContentDao() { return this.contentDao; @@ -248,15 +234,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { this.notificationDao = notificationDao; } - @Override - public UserDatasetProfileDao getUserDatasetProfileDao() { - return userDatasetProfileDao; - } - - @Autowired - public void setUserDatasetProfileDao(UserDatasetProfileDao userDatasetProfileDao) { - this.userDatasetProfileDao = userDatasetProfileDao; - } @Override public FileUploadDao getFileUploadDao() { diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/composite/DatasetProfile.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/composite/DatasetProfile.java index 3811c6698..3e90cd0c3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/composite/DatasetProfile.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/admin/composite/DatasetProfile.java @@ -1,11 +1,10 @@ package eu.eudat.models.data.admin.composite; import eu.eudat.commons.types.descriptiontemplate.DefinitionEntity; -import eu.eudat.commons.types.descriptiontemplate.SectionEntity; import eu.eudat.logic.utilities.builders.ModelBuilder; +import eu.eudat.model.DmpUser; import eu.eudat.models.data.admin.components.datasetprofile.Page; import eu.eudat.models.data.admin.components.datasetprofile.Section; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import java.util.ArrayList; import java.util.Collections; @@ -21,7 +20,7 @@ public class DatasetProfile { private Short status; private Short version; private String language; - private List users; + private List users; public String getLabel() { @@ -74,10 +73,10 @@ public class DatasetProfile { this.language = language; } - public List getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java index 537cd675e..6451a01ca 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentActivityModel.java @@ -1,8 +1,8 @@ package eu.eudat.models.data.dashboard.recent.model; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.data.old.queryableentity.DataEntity; import java.util.Date; @@ -20,7 +20,7 @@ public abstract class RecentActivityModel users; + private List users; private Boolean isPublic; public String getId() { @@ -111,11 +111,11 @@ public abstract class RecentActivityModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDatasetModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDatasetModel.java index a6f965c67..fd842d71b 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDatasetModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDatasetModel.java @@ -1,11 +1,6 @@ package eu.eudat.models.data.dashboard.recent.model; import eu.eudat.data.DescriptionEntity; -import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; - -import java.util.Date; -import java.util.stream.Collectors; public class RecentDatasetModel extends RecentActivityModel { private String dmp; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDmpModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDmpModel.java index 4a183110c..91bbb67b7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDmpModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dashboard/recent/model/RecentDmpModel.java @@ -1,14 +1,12 @@ package eu.eudat.models.data.dashboard.recent.model; import eu.eudat.data.DmpEntity; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.urls.DatasetUrlListing; import jakarta.transaction.Transactional; import java.util.List; import java.util.Map; import java.util.UUID; -import java.util.stream.Collectors; public class RecentDmpModel extends RecentActivityModel { private Map extraProperties; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java index b0b74354c..77a9cdd9a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dataset/DatasetOverviewModel.java @@ -2,17 +2,15 @@ package eu.eudat.models.data.dataset; import eu.eudat.commons.enums.DescriptionStatus; import eu.eudat.data.DescriptionEntity; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; import eu.eudat.models.data.grant.GrantOverviewModel; import eu.eudat.models.data.listingmodels.DataManagementPlanOverviewModel; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import java.time.Instant; -import java.util.Date; import java.util.List; import java.util.UUID; -import java.util.stream.Collectors; public class DatasetOverviewModel implements DataModel { @@ -20,7 +18,7 @@ public class DatasetOverviewModel implements DataModel users; + private List users; private DataManagementPlanOverviewModel dmp; private GrantOverviewModel grant; private String description; @@ -56,11 +54,11 @@ public class DatasetOverviewModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java index 5eb05b7e1..bf7e23b5f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlan.java @@ -1,25 +1,17 @@ package eu.eudat.models.data.dmp; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.eudat.commons.enums.DescriptionStatus; -import eu.eudat.commons.enums.IsActive; -import eu.eudat.data.DmpBlueprintEntity; import eu.eudat.data.DmpEntity; -import eu.eudat.data.old.*; +import eu.eudat.model.DmpUser; import eu.eudat.model.doi.Doi; import eu.eudat.models.DataModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.funder.Funder; import eu.eudat.models.data.helpermodels.Tuple; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.grant.Grant; import eu.eudat.models.data.project.Project; -import net.minidev.json.JSONObject; import java.util.*; -import java.util.stream.Collectors; public class DataManagementPlan implements DataModel { private UUID id; @@ -40,7 +32,7 @@ public class DataManagementPlan implements DataModel dynamicFields; private Map properties; - private List users; + private List users; private List dois; private Project project; private Funder funder; @@ -174,10 +166,10 @@ public class DataManagementPlan implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java index d21a12d56..c6e2d6ce1 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/DataManagementPlanEditorModel.java @@ -1,13 +1,13 @@ package eu.eudat.models.data.dmp; import eu.eudat.data.DmpEntity; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.models.data.datasetwizard.DatasetWizardModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.eudat.models.data.funder.FunderDMPEditorModel; import eu.eudat.models.data.grant.GrantDMPEditorModel; import eu.eudat.models.data.helpermodels.Tuple; -import eu.eudat.models.data.listingmodels.UserInfoListingModel; import eu.eudat.models.data.project.ProjectDMPEditorModel; import java.util.Date; @@ -34,7 +34,7 @@ public class DataManagementPlanEditorModel implements DataModel dynamicFields; private Map properties; - private List users; + private List users; private List datasetsToBeFinalized; private ProjectDMPEditorModel project; private FunderDMPEditorModel funder; @@ -164,10 +164,10 @@ public class DataManagementPlanEditorModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java index c917628d4..12eb0c3e5 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanListingModel.java @@ -2,6 +2,7 @@ package eu.eudat.models.data.listingmodels; import eu.eudat.data.DmpEntity; import eu.eudat.data.old.Grant; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.models.data.urls.DatasetUrlListing; @@ -22,7 +23,7 @@ public class DataManagementPlanListingModel implements DataModel datasets; - private List users; + private List users; private Date finalizedAt; private Boolean isPublic; private Date publishedAt; @@ -91,10 +92,10 @@ public class DataManagementPlanListingModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java index f1680b11f..d8953765f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DataManagementPlanOverviewModel.java @@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import eu.eudat.commons.enums.DescriptionStatus; import eu.eudat.commons.enums.IsActive; import eu.eudat.data.DmpEntity; +import eu.eudat.model.DmpUser; import eu.eudat.model.doi.Doi; import eu.eudat.models.DataModel; import eu.eudat.models.data.dataset.DatasetOverviewModel; @@ -32,7 +33,7 @@ public class DataManagementPlanOverviewModel implements DataModel datasets; private List associatedProfiles; private List researchers; - private List users; + private List users; private String description; private boolean isPublic; private Date publishedAt; @@ -130,10 +131,10 @@ public class DataManagementPlanOverviewModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java index 127b4f525..5d755024a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/DatasetListingModel.java @@ -2,6 +2,7 @@ package eu.eudat.models.data.listingmodels; import eu.eudat.commons.enums.DescriptionStatus; import eu.eudat.data.DescriptionEntity; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.models.data.datasetprofile.DatasetProfileOverviewModel; @@ -23,7 +24,7 @@ public class DatasetListingModel implements DataModel users; + private List users; private Boolean isPublic; public String getId() { @@ -118,11 +119,11 @@ public class DatasetListingModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java deleted file mode 100644 index ea22f0806..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/listingmodels/UserInfoListingModel.java +++ /dev/null @@ -1,61 +0,0 @@ -package eu.eudat.models.data.listingmodels; - -import eu.eudat.commons.enums.DmpUserRole; -import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.UserEntity; -import eu.eudat.models.DataModel; - -import java.util.UUID; - -public class UserInfoListingModel implements DataModel { - - private UUID id; - private String name; - private int role; - - public UUID getId() { - return id; - } - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public int getRole() { - return role; - } - public void setRole(int role) { - this.role = role; - } - - @Override - public UserInfoListingModel fromDataModel(DmpUserEntity entity) { -// this.id = entity.getUser().getId(); //TODO -// this.name = entity.getUser().getName(); -// this.role = entity.getRole(); -// this.email = entity.getUser().getEmail(); - return this; - } - - @Override - public DmpUserEntity toDataModel() { - DmpUserEntity entity = new DmpUserEntity(); - entity.setId(this.getId()); - entity.setRole(DmpUserRole.of((short) this.getRole())); - UserEntity userInfo = new UserEntity(); - userInfo.setName(this.getName()); -// entity.setUser(userInfo); - return entity; - } - - @Override - public String getHint() { - return "UserInfoListingModel"; - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DataManagementPlanPublicListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DataManagementPlanPublicListingModel.java index 3b9934352..f0aeb65ed 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DataManagementPlanPublicListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DataManagementPlanPublicListingModel.java @@ -2,9 +2,9 @@ package eu.eudat.publicapi.models.listingmodels; import eu.eudat.data.DmpEntity; import eu.eudat.data.old.Grant; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.publicapi.models.researcher.ResearcherPublicModel; -import eu.eudat.publicapi.models.user.UserInfoPublicModel; import java.util.*; import java.util.stream.Collectors; @@ -17,7 +17,7 @@ public class DataManagementPlanPublicListingModel implements DataModel users; + private List users; private List researchers; private Date finalizedAt; private Date publishedAt; @@ -71,10 +71,10 @@ public class DataManagementPlanPublicListingModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DatasetPublicListingModel.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DatasetPublicListingModel.java index 1fb90f6ab..98ef1b213 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DatasetPublicListingModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/listingmodels/DatasetPublicListingModel.java @@ -1,9 +1,9 @@ package eu.eudat.publicapi.models.listingmodels; import eu.eudat.data.DescriptionEntity; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.publicapi.models.datasetprofile.DatasetProfilePublicModel; -import eu.eudat.publicapi.models.user.UserInfoPublicModel; import java.util.Date; import java.util.List; @@ -21,7 +21,7 @@ public class DatasetPublicListingModel implements DataModel users; + private List users; public String getId() { return id; @@ -107,11 +107,11 @@ public class DatasetPublicListingModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/overviewmodels/DataManagementPlanPublicModel.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/overviewmodels/DataManagementPlanPublicModel.java index 9ba70c9af..64cddf2d3 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/overviewmodels/DataManagementPlanPublicModel.java +++ b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/overviewmodels/DataManagementPlanPublicModel.java @@ -9,6 +9,7 @@ import eu.eudat.data.DescriptionEntity; import eu.eudat.data.DescriptionTemplateEntity; import eu.eudat.commons.types.xml.XmlBuilder; import eu.eudat.data.DmpEntity; +import eu.eudat.model.DmpUser; import eu.eudat.models.DataModel; import eu.eudat.models.data.user.composite.PagedDatasetProfile; import eu.eudat.publicapi.models.associatedprofile.AssociatedProfilePublicModel; @@ -16,7 +17,6 @@ import eu.eudat.publicapi.models.doi.DoiPublicModel; import eu.eudat.publicapi.models.grant.GrantPublicOverviewModel; import eu.eudat.publicapi.models.organisation.OrganizationPublicModel; import eu.eudat.publicapi.models.researcher.ResearcherPublicModel; -import eu.eudat.publicapi.models.user.UserInfoPublicModel; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -37,7 +37,7 @@ public class DataManagementPlanPublicModel implements DataModel datasets; private List associatedProfiles; private List researchers; - private List users; + private List users; private String description; private Date publishedAt; private List dois; @@ -127,10 +127,10 @@ public class DataManagementPlanPublicModel implements DataModel getUsers() { + public List getUsers() { return users; } - public void setUsers(List users) { + public void setUsers(List users) { this.users = users; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java b/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java deleted file mode 100644 index fb8e60643..000000000 --- a/dmp-backend/web/src/main/java/eu/eudat/publicapi/models/user/UserInfoPublicModel.java +++ /dev/null @@ -1,60 +0,0 @@ -package eu.eudat.publicapi.models.user; - -import eu.eudat.commons.enums.DmpUserRole; -import eu.eudat.data.DmpUserEntity; -import eu.eudat.data.UserEntity; -import eu.eudat.models.DataModel; - -import java.util.UUID; - -public class UserInfoPublicModel implements DataModel { - private UUID id; - private String name; - private int role; - - public UUID getId() { - return id; - } - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - public void setName(String name) { - this.name = name; - } - - public int getRole() { - return role; - } - public void setRole(int role) { - this.role = role; - } - - @Override - public UserInfoPublicModel fromDataModel(DmpUserEntity entity) { -// this.id = entity.getUser().getId(); //TODO -// this.name = entity.getUser().getName(); -// this.role = entity.getRole().getValue(); -// this.email = entity.getUser().getEmail(); - return this; - } - - @Override - public DmpUserEntity toDataModel() { - DmpUserEntity entity = new DmpUserEntity(); - entity.setId(this.getId()); - entity.setRole(DmpUserRole.of((short)this.getRole())); - UserEntity userInfo = new UserEntity(); - userInfo.setName(this.getName()); -// entity.setUser(userInfo); - return entity; - } - - @Override - public String getHint() { - return "UserInfoListingModel"; - } -} From e1985368aa2cbbb2c4f54bb5eed11d218bc26a5a Mon Sep 17 00:00:00 2001 From: amentis Date: Tue, 21 Nov 2023 12:51:26 +0200 Subject: [PATCH 04/15] add dependencies to reference type source base --- .../DependencyPropertyEntity.java | 44 +++ ...enceTypeSourceBaseConfigurationEntity.java | 15 +- ...ferenceTypeSourceBaseDependencyEntity.java | 55 ++++ .../DependencyPropertyBuilder.java | 59 ++++ ...nceTypeSourceBaseConfigurationBuilder.java | 8 +- ...erenceTypeSourceBaseDependencyBuilder.java | 62 ++++ ...SourceExternalApiConfigurationBuilder.java | 2 +- ...ourceStaticOptionConfigurationBuilder.java | 2 +- .../model/censorship/ReferenceTypeCensor.java | 2 +- .../DependencyPropertyCensor.java} | 10 +- .../ReferenceTypeDefinitionCensor.java | 2 +- .../ReferenceTypeFieldCensor.java | 2 +- ...enceTypeSourceBaseConfigurationCensor.java | 45 +++ ...ferenceTypeSourceBaseDependencyCensor.java | 45 +++ .../DependencyPropertyPersist.java | 43 +++ ...nceTypeSourceBaseConfigurationPersist.java | 13 + ...erenceTypeSourceBaseDependencyPersist.java | 58 ++++ .../DependencyProperty.java | 38 +++ .../ReferenceTypeSourceBaseConfiguration.java | 13 + .../ReferenceTypeSourceBaseDependency.java | 52 ++++ .../eu/eudat/query/ReferenceTypeQuery.java | 2 +- .../deposit/RepositoryDepositService.java | 14 +- .../ReferenceTypeServiceImpl.java | 36 +++ .../services/references/ReferenceService.java | 102 +++++-- .../model/reference-type/reference-type.ts | 28 ++ .../reference-type/reference-type.service.ts | 60 ++++ .../services/utilities/enum-utils.service.ts | 25 ++ .../reference-type-editor.component.html | 279 ++++++++++++------ .../reference-type-editor.component.scss | 2 +- .../editor/reference-type-editor.component.ts | 276 +++++++++++------ .../editor/reference-type-editor.model.ts | 163 +++++++++- .../editor/reference-type-editor.resolver.ts | 10 +- dmp-frontend/src/assets/i18n/en.json | 44 ++- 33 files changed, 1385 insertions(+), 226 deletions(-) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/DependencyPropertyEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseDependencyEntity.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/DependencyPropertyBuilder.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceBaseDependencyBuilder.java rename dmp-backend/core/src/main/java/eu/eudat/model/censorship/{referencetype/ReferenceTypeSourceBaseConfigurationCensor.java => referencetypedefinition/DependencyPropertyCensor.java} (74%) rename dmp-backend/core/src/main/java/eu/eudat/model/censorship/{referencetype => referencetypedefinition}/ReferenceTypeDefinitionCensor.java (97%) rename dmp-backend/core/src/main/java/eu/eudat/model/censorship/{referencetype => referencetypedefinition}/ReferenceTypeFieldCensor.java (95%) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseConfigurationCensor.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseDependencyCensor.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/DependencyPropertyPersist.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseDependencyPersist.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/DependencyProperty.java create mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseDependency.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/DependencyPropertyEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/DependencyPropertyEntity.java new file mode 100644 index 000000000..da2f13a20 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/DependencyPropertyEntity.java @@ -0,0 +1,44 @@ +package eu.eudat.commons.types.referencetype; + +import jakarta.xml.bind.annotation.XmlAccessType; +import jakarta.xml.bind.annotation.XmlAccessorType; +import jakarta.xml.bind.annotation.XmlAttribute; +import jakarta.xml.bind.annotation.XmlRootElement; + +@XmlRootElement(name = "property") +@XmlAccessorType(XmlAccessType.FIELD) +public class DependencyPropertyEntity { + + @XmlAttribute(name = "code") + private String code; + + @XmlAttribute(name = "target") + private String target; + + @XmlAttribute(name = "required") + private Boolean required; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public Boolean getRequired() { + return required; + } + + public void setRequired(Boolean required) { + this.required = required; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseConfigurationEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseConfigurationEntity.java index 81faad415..ead9bec7c 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseConfigurationEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseConfigurationEntity.java @@ -2,6 +2,9 @@ package eu.eudat.commons.types.referencetype; import eu.eudat.commons.enums.ReferenceTypeSourceType; import jakarta.xml.bind.annotation.XmlElement; +import jakarta.xml.bind.annotation.XmlElementWrapper; + +import java.util.List; public abstract class ReferenceTypeSourceBaseConfigurationEntity { @@ -12,7 +15,7 @@ public abstract class ReferenceTypeSourceBaseConfigurationEntity { private Integer ordinal; private ReferenceTypeSourceType type; - + private List dependencies; public ReferenceTypeSourceType getType() { return type; } @@ -48,4 +51,14 @@ public abstract class ReferenceTypeSourceBaseConfigurationEntity { public void setType(ReferenceTypeSourceType type) { this.type = type; } + + public List getDependencies() { + return dependencies; + } + + @XmlElementWrapper + @XmlElement(name = "dependency") + public void setDependencies(List dependencies) { + this.dependencies = dependencies; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseDependencyEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseDependencyEntity.java new file mode 100644 index 000000000..394662da7 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/ReferenceTypeSourceBaseDependencyEntity.java @@ -0,0 +1,55 @@ +package eu.eudat.commons.types.referencetype; + +import jakarta.xml.bind.annotation.*; + +import java.util.List; + +@XmlRootElement(name = "dependency") +@XmlAccessorType(XmlAccessType.FIELD) +public class ReferenceTypeSourceBaseDependencyEntity { + @XmlAttribute(name = "referenceTypeCode") + private String referenceTypeCode; + + @XmlAttribute(name = "key") + private String key; + + @XmlAttribute(name = "required") + private Boolean required; + + @XmlElementWrapper(name = "properties") + @XmlElement(name = "property") + private List properties; + + + public String getReferenceTypeCode() { + return referenceTypeCode; + } + + public void setReferenceTypeCode(String referenceTypeCode) { + this.referenceTypeCode = referenceTypeCode; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public Boolean getRequired() { + return required; + } + + public void setRequired(Boolean required) { + this.required = required; + } + + public List getProperties() { + return properties; + } + + public void setProperties(List properties) { + this.properties = properties; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/DependencyPropertyBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/DependencyPropertyBuilder.java new file mode 100644 index 000000000..40323dc92 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/DependencyPropertyBuilder.java @@ -0,0 +1,59 @@ +package eu.eudat.model.builder.referencetypedefinition; + +import eu.eudat.authorization.AuthorizationFlags; +import eu.eudat.commons.types.referencetype.DependencyPropertyEntity; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.builder.BaseBuilder; +import eu.eudat.model.referencetypedefinition.DependencyProperty; +import gr.cite.tools.data.builder.BuilderFactory; +import gr.cite.tools.exception.MyApplicationException; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.*; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class DependencyPropertyBuilder extends BaseBuilder { + + private final BuilderFactory builderFactory; + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + @Autowired + public DependencyPropertyBuilder( + ConventionService conventionService, BuilderFactory builderFactory) { + super(conventionService, new LoggerService(LoggerFactory.getLogger(DependencyPropertyBuilder.class))); + this.builderFactory = builderFactory; + } + + public DependencyPropertyBuilder authorize(EnumSet values) { + this.authorize = values; + return this; + } + + @Override + public List build(FieldSet fields, List data) throws MyApplicationException { + this.logger.debug("building for {} items requesting {} fields", Optional.ofNullable(data).map(List::size).orElse(0), Optional.ofNullable(fields).map(FieldSet::getFields).map(Set::size).orElse(0)); + this.logger.trace(new DataLogEntry("requested fields", fields)); + if (fields == null || data == null || fields.isEmpty()) + return new ArrayList<>(); + + List models = new ArrayList<>(); + for (DependencyPropertyEntity d : data) { + DependencyProperty m = new DependencyProperty(); + if (fields.hasField(this.asIndexer(DependencyProperty._code))) m.setCode(d.getCode()); + if (fields.hasField(this.asIndexer(DependencyProperty._target))) m.setTarget(d.getTarget()); + if (fields.hasField(this.asIndexer(DependencyProperty._required))) m.setRequired(d.getRequired()); + + models.add(m); + } + this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); + return models; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceBaseConfigurationBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceBaseConfigurationBuilder.java index fdc496cdc..0732d118e 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceBaseConfigurationBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceBaseConfigurationBuilder.java @@ -5,6 +5,7 @@ import eu.eudat.commons.types.referencetype.ReferenceTypeSourceBaseConfiguration import eu.eudat.convention.ConventionService; import eu.eudat.model.builder.BaseBuilder; import eu.eudat.model.referencetypedefinition.ReferenceTypeSourceBaseConfiguration; +import gr.cite.tools.data.builder.BuilderFactory; import gr.cite.tools.exception.MyApplicationException; import gr.cite.tools.fieldset.FieldSet; import gr.cite.tools.logging.DataLogEntry; @@ -21,12 +22,14 @@ import java.util.*; public abstract class ReferenceTypeSourceBaseConfigurationBuilder extends BaseBuilder { protected EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + protected final BuilderFactory builderFactory; @Autowired public ReferenceTypeSourceBaseConfigurationBuilder( ConventionService conventionService, - LoggerService logger) { + LoggerService logger, BuilderFactory builderFactory) { super(conventionService, logger); + this.builderFactory = builderFactory; } public ReferenceTypeSourceBaseConfigurationBuilder authorize(EnumSet values) { @@ -44,6 +47,7 @@ public abstract class ReferenceTypeSourceBaseConfigurationBuilder(); + FieldSet dependenciesFields = fields.extractPrefixed(this.asPrefix(Model._dependencies)); List models = new ArrayList<>(); for (Entity d : data) { Model m = this.getInstance(); @@ -51,6 +55,8 @@ public abstract class ReferenceTypeSourceBaseConfigurationBuilder { + + private final BuilderFactory builderFactory; + private EnumSet authorize = EnumSet.of(AuthorizationFlags.None); + + @Autowired + public ReferenceTypeSourceBaseDependencyBuilder( + ConventionService conventionService, BuilderFactory builderFactory) { + super(conventionService, new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceBaseDependencyBuilder.class))); + this.builderFactory = builderFactory; + } + + public ReferenceTypeSourceBaseDependencyBuilder authorize(EnumSet values) { + this.authorize = values; + return this; + } + + @Override + public List build(FieldSet fields, List data) throws MyApplicationException { + this.logger.debug("building for {} items requesting {} fields", Optional.ofNullable(data).map(List::size).orElse(0), Optional.ofNullable(fields).map(FieldSet::getFields).map(Set::size).orElse(0)); + this.logger.trace(new DataLogEntry("requested fields", fields)); + if (fields == null || data == null || fields.isEmpty()) + return new ArrayList<>(); + + FieldSet propertiesFields = fields.extractPrefixed(this.asPrefix(ReferenceTypeSourceBaseDependency._properties)); + + List models = new ArrayList<>(); + for (ReferenceTypeSourceBaseDependencyEntity d : data) { + ReferenceTypeSourceBaseDependency m = new ReferenceTypeSourceBaseDependency(); + if (fields.hasField(this.asIndexer(ReferenceTypeSourceBaseDependency._referenceTypeCode))) m.setReferenceTypeCode(d.getReferenceTypeCode()); + if (fields.hasField(this.asIndexer(ReferenceTypeSourceBaseDependency._key))) m.setKey(d.getKey()); + if (fields.hasField(this.asIndexer(ReferenceTypeSourceBaseDependency._required))) m.setRequired(d.getRequired()); + if (!propertiesFields.isEmpty() && d.getProperties() != null) m.setProperties(this.builderFactory.builder(DependencyPropertyBuilder.class).authorize(this.authorize).build(propertiesFields, d.getProperties())); + + models.add(m); + } + this.logger.debug("build {} items", Optional.of(models).map(List::size).orElse(0)); + return models; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceExternalApiConfigurationBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceExternalApiConfigurationBuilder.java index 81827876a..fd6df6401 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceExternalApiConfigurationBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceExternalApiConfigurationBuilder.java @@ -25,7 +25,7 @@ public class ReferenceTypeSourceExternalApiConfigurationBuilder extends Referenc @Autowired public ReferenceTypeSourceExternalApiConfigurationBuilder( ConventionService conventionService, BuilderFactory builderFactory) { - super(conventionService, new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceExternalApiConfigurationBuilder.class))); + super(conventionService, new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceExternalApiConfigurationBuilder.class)), builderFactory); this.builderFactory = builderFactory; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceStaticOptionConfigurationBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceStaticOptionConfigurationBuilder.java index dfd06af8b..fe78fc243 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceStaticOptionConfigurationBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/ReferenceTypeSourceStaticOptionConfigurationBuilder.java @@ -25,7 +25,7 @@ public class ReferenceTypeSourceStaticOptionConfigurationBuilder extends Referen @Autowired public ReferenceTypeSourceStaticOptionConfigurationBuilder( ConventionService conventionService, BuilderFactory builderFactory) { - super(conventionService, new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceStaticOptionConfigurationBuilder.class))); + super(conventionService, new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceStaticOptionConfigurationBuilder.class)), builderFactory); this.builderFactory = builderFactory; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/ReferenceTypeCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/ReferenceTypeCensor.java index 15e2582d0..42987894d 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/ReferenceTypeCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/ReferenceTypeCensor.java @@ -3,7 +3,7 @@ package eu.eudat.model.censorship; import eu.eudat.authorization.Permission; import eu.eudat.convention.ConventionService; import eu.eudat.model.ReferenceType; -import eu.eudat.model.censorship.referencetype.ReferenceTypeDefinitionCensor; +import eu.eudat.model.censorship.referencetypedefinition.ReferenceTypeDefinitionCensor; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.censor.CensorFactory; import gr.cite.tools.fieldset.FieldSet; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeSourceBaseConfigurationCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/DependencyPropertyCensor.java similarity index 74% rename from dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeSourceBaseConfigurationCensor.java rename to dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/DependencyPropertyCensor.java index 54d71217c..9c8ac04ca 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeSourceBaseConfigurationCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/DependencyPropertyCensor.java @@ -1,4 +1,4 @@ -package eu.eudat.model.censorship.referencetype; +package eu.eudat.model.censorship.referencetypedefinition; import eu.eudat.authorization.Permission; import eu.eudat.convention.ConventionService; @@ -16,14 +16,14 @@ import java.util.UUID; @Component @Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class ReferenceTypeSourceBaseConfigurationCensor extends BaseCensor { +public class DependencyPropertyCensor extends BaseCensor { - private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceBaseConfigurationCensor.class)); + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DependencyPropertyCensor.class)); protected final AuthorizationService authService; - public ReferenceTypeSourceBaseConfigurationCensor(ConventionService conventionService, - AuthorizationService authService) { + public DependencyPropertyCensor(ConventionService conventionService, + AuthorizationService authService) { super(conventionService); this.authService = authService; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeDefinitionCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeDefinitionCensor.java similarity index 97% rename from dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeDefinitionCensor.java rename to dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeDefinitionCensor.java index 2eb0c7966..7be330405 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeDefinitionCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeDefinitionCensor.java @@ -1,4 +1,4 @@ -package eu.eudat.model.censorship.referencetype; +package eu.eudat.model.censorship.referencetypedefinition; import eu.eudat.authorization.Permission; import eu.eudat.convention.ConventionService; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeFieldCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeFieldCensor.java similarity index 95% rename from dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeFieldCensor.java rename to dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeFieldCensor.java index a17c67573..b9dff5d9f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetype/ReferenceTypeFieldCensor.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeFieldCensor.java @@ -1,4 +1,4 @@ -package eu.eudat.model.censorship.referencetype; +package eu.eudat.model.censorship.referencetypedefinition; import eu.eudat.authorization.Permission; import eu.eudat.convention.ConventionService; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseConfigurationCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseConfigurationCensor.java new file mode 100644 index 000000000..04a715aee --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseConfigurationCensor.java @@ -0,0 +1,45 @@ +package eu.eudat.model.censorship.referencetypedefinition; + +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.censorship.BaseCensor; +import eu.eudat.model.referencetypedefinition.ReferenceTypeSourceBaseConfiguration; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class ReferenceTypeSourceBaseConfigurationCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceBaseConfigurationCensor.class)); + + protected final AuthorizationService authService; + protected final CensorFactory censorFactory; + + public ReferenceTypeSourceBaseConfigurationCensor(ConventionService conventionService, + AuthorizationService authService, CensorFactory censorFactory) { + super(conventionService); + this.authService = authService; + this.censorFactory = censorFactory; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + + this.authService.authorizeForce(Permission.BrowseReferenceType); + FieldSet dependenciesFields = fields.extractPrefixed(this.asIndexerPrefix(ReferenceTypeSourceBaseConfiguration._dependencies)); + this.censorFactory.censor(ReferenceTypeSourceBaseDependencyCensor.class).censor(dependenciesFields, userId); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseDependencyCensor.java b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseDependencyCensor.java new file mode 100644 index 000000000..29386f0fa --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/censorship/referencetypedefinition/ReferenceTypeSourceBaseDependencyCensor.java @@ -0,0 +1,45 @@ +package eu.eudat.model.censorship.referencetypedefinition; + +import eu.eudat.authorization.Permission; +import eu.eudat.convention.ConventionService; +import eu.eudat.model.censorship.BaseCensor; +import eu.eudat.model.referencetypedefinition.ReferenceTypeSourceBaseDependency; +import gr.cite.commons.web.authz.service.AuthorizationService; +import gr.cite.tools.data.censor.CensorFactory; +import gr.cite.tools.fieldset.FieldSet; +import gr.cite.tools.logging.DataLogEntry; +import gr.cite.tools.logging.LoggerService; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.config.ConfigurableBeanFactory; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; + +import java.util.UUID; + +@Component +@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) +public class ReferenceTypeSourceBaseDependencyCensor extends BaseCensor { + + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(ReferenceTypeSourceBaseDependencyCensor.class)); + + protected final AuthorizationService authService; + protected final CensorFactory censorFactory; + + public ReferenceTypeSourceBaseDependencyCensor(ConventionService conventionService, + AuthorizationService authService, CensorFactory censorFactory) { + super(conventionService); + this.authService = authService; + this.censorFactory = censorFactory; + } + + public void censor(FieldSet fields, UUID userId) { + logger.debug(new DataLogEntry("censoring fields", fields)); + if (fields == null || fields.isEmpty()) + return; + + this.authService.authorizeForce(Permission.BrowseReferenceType); + FieldSet propertiesFields = fields.extractPrefixed(this.asIndexerPrefix( ReferenceTypeSourceBaseDependency._properties)); + this.censorFactory.censor(DependencyPropertyCensor.class).censor(propertiesFields, userId); + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/DependencyPropertyPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/DependencyPropertyPersist.java new file mode 100644 index 000000000..ecfcd8bc5 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/DependencyPropertyPersist.java @@ -0,0 +1,43 @@ +package eu.eudat.model.persist.referencetypedefinition; + + +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +public class DependencyPropertyPersist { + + @NotNull(message = "{validation.empty}") + @NotEmpty(message = "{validation.empty}") + private String code; + + @NotNull(message = "{validation.empty}") + @NotEmpty(message = "{validation.empty}") + private String target; + + @NotNull(message = "{validation.empty}") + private Boolean required; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public Boolean getRequired() { + return required; + } + + public void setRequired(Boolean required) { + this.required = required; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseConfigurationPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseConfigurationPersist.java index 9a7b5f481..63a3c93c5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseConfigurationPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseConfigurationPersist.java @@ -4,9 +4,12 @@ import com.fasterxml.jackson.annotation.JsonSubTypes; import com.fasterxml.jackson.annotation.JsonTypeInfo; import eu.eudat.commons.enums.ReferenceTypeSourceType; import eu.eudat.commons.validation.ValidEnum; +import jakarta.validation.Valid; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; +import java.util.List; + @JsonTypeInfo( use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, @@ -32,6 +35,8 @@ public abstract class ReferenceTypeSourceBaseConfigurationPersist { @ValidEnum(message = "{validation.empty}") private ReferenceTypeSourceType type; + @Valid + private List dependencies; public String getKey() { return key; @@ -64,4 +69,12 @@ public abstract class ReferenceTypeSourceBaseConfigurationPersist { public void setType(ReferenceTypeSourceType type) { this.type = type; } + + public List getDependencies() { + return dependencies; + } + + public void setDependencies(List dependencies) { + this.dependencies = dependencies; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseDependencyPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseDependencyPersist.java new file mode 100644 index 000000000..f1a88bf8f --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/ReferenceTypeSourceBaseDependencyPersist.java @@ -0,0 +1,58 @@ +package eu.eudat.model.persist.referencetypedefinition; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; + +import java.util.List; + +public class ReferenceTypeSourceBaseDependencyPersist { + + @NotNull(message = "{validation.empty}") + @NotEmpty(message = "{validation.empty}") + private String referenceTypeCode; + + @NotNull(message = "{validation.empty}") + @NotEmpty(message = "{validation.empty}") + private String key; + + @NotNull(message = "{validation.empty}") + private Boolean required; + + @NotNull(message = "{validation.empty}") + @Valid + private List properties; + + + public String getReferenceTypeCode() { + return referenceTypeCode; + } + + public void setReferenceTypeCode(String referenceTypeCode) { + this.referenceTypeCode = referenceTypeCode; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public Boolean getRequired() { + return required; + } + + public void setRequired(Boolean required) { + this.required = required; + } + + public List getProperties() { + return properties; + } + + public void setProperties(List properties) { + this.properties = properties; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/DependencyProperty.java b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/DependencyProperty.java new file mode 100644 index 000000000..3cfde1e92 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/DependencyProperty.java @@ -0,0 +1,38 @@ +package eu.eudat.model.referencetypedefinition; + + +public class DependencyProperty { + + public final static String _code = "code"; + private String code; + + public final static String _target = "target"; + private String target; + + public final static String _required = "required"; + private Boolean required; + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getTarget() { + return target; + } + + public void setTarget(String target) { + this.target = target; + } + + public Boolean getRequired() { + return required; + } + + public void setRequired(Boolean required) { + this.required = required; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseConfiguration.java b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseConfiguration.java index 38505db48..5621c4c23 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseConfiguration.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseConfiguration.java @@ -2,6 +2,8 @@ package eu.eudat.model.referencetypedefinition; import eu.eudat.commons.enums.ReferenceTypeSourceType; +import java.util.List; + public abstract class ReferenceTypeSourceBaseConfiguration { @@ -17,6 +19,9 @@ public abstract class ReferenceTypeSourceBaseConfiguration { public final static String _type = "type"; private ReferenceTypeSourceType type; + public final static String _dependencies = "dependencies"; + private List dependencies; + public ReferenceTypeSourceType getType() { return type; } @@ -48,4 +53,12 @@ public abstract class ReferenceTypeSourceBaseConfiguration { public void setOrdinal(Integer ordinal) { this.ordinal = ordinal; } + + public List getDependencies() { + return dependencies; + } + + public void setDependencies(List dependencies) { + this.dependencies = dependencies; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseDependency.java b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseDependency.java new file mode 100644 index 000000000..5f3f0cc35 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/ReferenceTypeSourceBaseDependency.java @@ -0,0 +1,52 @@ +package eu.eudat.model.referencetypedefinition; + + +import java.util.List; + +public class ReferenceTypeSourceBaseDependency { + + public final static String _referenceTypeCode = "referenceTypeCode"; + private String referenceTypeCode; + + public final static String _key = "key"; + private String key; + + public final static String _required = "required"; + private Boolean required; + + public final static String _properties = "properties"; + private List properties; + + + public String getReferenceTypeCode() { + return referenceTypeCode; + } + + public void setReferenceTypeCode(String referenceTypeCode) { + this.referenceTypeCode = referenceTypeCode; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public Boolean getRequired() { + return required; + } + + public void setRequired(Boolean required) { + this.required = required; + } + + public List getProperties() { + return properties; + } + + public void setProperties(List properties) { + this.properties = properties; + } +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceTypeQuery.java b/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceTypeQuery.java index 7bc0e599b..cba845bd5 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceTypeQuery.java +++ b/dmp-backend/core/src/main/java/eu/eudat/query/ReferenceTypeQuery.java @@ -142,7 +142,7 @@ public class ReferenceTypeQuery extends QueryBase { predicates.add(inClause); } if (this.codes != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(ReferenceEntity._type)); + CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(ReferenceTypeEntity._code)); for (String item : this.codes) inClause.value(item); predicates.add(inClause); diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/deposit/RepositoryDepositService.java b/dmp-backend/core/src/main/java/eu/eudat/service/deposit/RepositoryDepositService.java index 7014175eb..02cf92191 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/deposit/RepositoryDepositService.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/deposit/RepositoryDepositService.java @@ -23,8 +23,8 @@ import eu.eudat.service.entitydoi.EntityDoiService; import eu.eudat.utilities.pdf.PDFUtils; import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.commons.web.oidc.apikey.ApiKeyCacheService; -import gr.cite.commons.web.oidc.apikey.webflux.ApiKeyExchangeFilterFunction; -import gr.cite.commons.web.oidc.apikey.webflux.ApiKeyWebfluxModel; +//import gr.cite.commons.web.oidc.apikey.webflux.ApiKeyExchangeFilterFunction; +//import gr.cite.commons.web.oidc.apikey.webflux.ApiKeyWebfluxModel; import gr.cite.tools.data.query.Ordering; import gr.cite.tools.fieldset.BaseFieldSet; import gr.cite.tools.fieldset.FieldSet; @@ -83,11 +83,11 @@ public class RepositoryDepositService { DepositProperties.DepositSource source = depositProperties.getSources().stream().filter(depositSource -> depositSource.getCodes().contains(repoId)).findFirst().orElse(null); if (source != null) { String host = URI.create(source.getUrl()).getHost(); - ApiKeyWebfluxModel apiKeyWebfluxModel = new ApiKeyWebfluxModel(host + "_" + source.getClientId(), source.getIssuerUrl(), source.getClientId(), source.getClientSecret(), source.getScope()); - ApiKeyExchangeFilterFunction apiKeyExchangeFilterFunction = new ApiKeyExchangeFilterFunction(this.apiKeyCacheService, apiKeyWebfluxModel); - DepositRepository repository = new DepositRepository(webClientBuilder.baseUrl(source.getUrl() + "/api/deposit").filters(exchangeFilterFunctions -> exchangeFilterFunctions.add(apiKeyExchangeFilterFunction)).build()); - source.getCodes().forEach(code -> this.clients.put(code, repository)); - return repository; +// ApiKeyWebfluxModel apiKeyWebfluxModel = new ApiKeyWebfluxModel(host + "_" + source.getClientId(), source.getIssuerUrl(), source.getClientId(), source.getClientSecret(), source.getScope()); +// ApiKeyExchangeFilterFunction apiKeyExchangeFilterFunction = new ApiKeyExchangeFilterFunction(this.apiKeyCacheService, apiKeyWebfluxModel); +// DepositRepository repository = new DepositRepository(webClientBuilder.baseUrl(source.getUrl() + "/api/deposit").filters(exchangeFilterFunctions -> exchangeFilterFunctions.add(apiKeyExchangeFilterFunction)).build()); +// source.getCodes().forEach(code -> this.clients.put(code, repository)); +// return repository; } return null; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java index 094612d92..b63f62450 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java @@ -185,6 +185,13 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService { data.setLabel(persist.getLabel()); data.setOrdinal(persist.getOrdinal()); + if (!this.conventionService.isListNullOrEmpty(persist.getDependencies())){ + data.setDependencies(new ArrayList<>()); + for (ReferenceTypeSourceBaseDependencyPersist dependencyPersist: persist.getDependencies()) { + data.getDependencies().add(this.buildDependencyEntity(dependencyPersist)); + } + } + return data; } @@ -249,6 +256,35 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService { return data; } + private @NotNull ReferenceTypeSourceBaseDependencyEntity buildDependencyEntity(ReferenceTypeSourceBaseDependencyPersist persist){ + ReferenceTypeSourceBaseDependencyEntity data = new ReferenceTypeSourceBaseDependencyEntity(); + if (persist == null) return data; + + data.setReferenceTypeCode(persist.getReferenceTypeCode()); + data.setKey(persist.getKey()); + data.setRequired(persist.getRequired()); + + if (!this.conventionService.isListNullOrEmpty(persist.getProperties())){ + data.setProperties(new ArrayList<>()); + for (DependencyPropertyPersist propertyPersist: persist.getProperties()) { + data.getProperties().add(this.buildPropertyEntity(propertyPersist)); + } + } + + return data; + } + + private @NotNull DependencyPropertyEntity buildPropertyEntity(DependencyPropertyPersist persist){ + DependencyPropertyEntity data = new DependencyPropertyEntity(); + if (persist == null) return data; + + data.setCode(persist.getCode()); + data.setTarget(persist.getTarget()); + data.setRequired(persist.getRequired()); + + return data; + } + public void deleteAndSave(UUID id) throws MyForbiddenException, InvalidApplicationException { logger.debug("deleting : {}", id); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java index 3daeff910..1aa4ea04a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/references/ReferenceService.java @@ -51,6 +51,7 @@ import gr.cite.tools.logging.LoggerService; import gr.cite.tools.logging.MapLogEntry; import jakarta.persistence.EntityManager; import jakarta.xml.bind.JAXBException; +import net.minidev.json.JSONArray; import org.jetbrains.annotations.NotNull; import org.slf4j.LoggerFactory; import org.springframework.context.MessageSource; @@ -323,7 +324,7 @@ public class ReferenceService { Map map = new HashMap<>(); source.getOptions().forEach(option -> { map.put(option.getCode(), option.getValue()); - map.put("label", source.getLabel()); + map.put("tag", source.getLabel()); map.put("key", source.getKey()); }); results.add(map); @@ -373,7 +374,7 @@ public class ReferenceService { .collect(Collectors.toList())); } if (fetchStrategy == FetchStrategy.FIRST) - return results.getResults().stream().peek(x -> x.put("label", label)).peek(x -> x.put("key", key)).collect(Collectors.toList()); + return results.getResults().stream().peek(x -> x.put("tag", label)).peek(x -> x.put("key", key)).collect(Collectors.toList()); if (results.getPagination() != null && results.getPagination().get("pages") != null) //if has more pages, add them to the pages set for (int i = 2; i <= results.getPagination().get("pages"); i++) @@ -394,7 +395,7 @@ public class ReferenceService { Results remainingResults = optionalResults.orElseGet(Results::new); remainingResults.getResults().addAll(results.getResults()); - return remainingResults.getResults().stream().peek(x -> x.put("label", label)).peek(x -> x.put("key", key)).collect(Collectors.toList()); + return remainingResults.getResults().stream().peek(x -> x.put("tag", label)).peek(x -> x.put("key", key)).collect(Collectors.toList()); } else { return new LinkedList<>(); @@ -404,17 +405,29 @@ public class ReferenceService { private String replaceLookupFields(String urlPath, ReferenceDefinitionSearchLookup lookup, String firstPage, List queries){ String completedPath = urlPath; - if (urlPath.contains("{like}")){ + if (urlPath.contains("openaire") || urlPath.contains("orcid") ){ if (lookup.getLike() != null) { + completedPath = completedPath.replace("{query}", lookup.getLike()); completedPath = completedPath.replace("{like}", lookup.getLike()); } else { + completedPath = completedPath.replace("{query}", "*"); completedPath = completedPath.replace("{like}", "*"); } } - if (urlPath.contains("{page}")){ + if (urlPath.contains("{like}")){ + if (lookup.getLike() != null) { + completedPath = completedPath.replace("{like}", lookup.getLike()); + } else { + completedPath = completedPath.replace("{like}", ""); + } + } + + if (urlPath.contains("{page}")) { if (lookup.getPage() != null && lookup.getPage().getOffset() > 0) { completedPath = completedPath.replace("{page}", String.valueOf(lookup.getPage().getOffset())); + } else if (firstPage != null) { + completedPath = completedPath.replace("{page}", firstPage); } else { completedPath = completedPath.replace("{page}", "1"); } @@ -428,13 +441,6 @@ public class ReferenceService { } } - if (urlPath.contains("openaire")){ - if (lookup.getLike() != null) { - completedPath = completedPath.replace("{query}", lookup.getLike()); - } else { - completedPath = completedPath.replace("{query}", "*"); - } - } return completedPath; } @@ -485,20 +491,76 @@ public class ReferenceService { private static List> parseData (DocumentContext jsonContext, ResultsConfigurationEntity resultsEntity) { List > rawData = jsonContext.read(resultsEntity.getResultsArrayPath()); List> parsedData = new ArrayList<>(); - rawData.forEach(stringObjectMap -> { + + for (Map stringObjectMap: rawData){ Map map = new HashMap<>(); - resultsEntity.getFieldsMapping().forEach(field ->{ + for(ResultFieldsMappingConfigurationEntity field: resultsEntity.getFieldsMapping()){ String pathValue = field.getResponsePath(); - if (stringObjectMap.containsKey(pathValue)){ - map.put(field.getCode(), stringObjectMap.get(pathValue)); + if (!pathValue.contains(".")){ + if (stringObjectMap.containsKey(pathValue)) { + //map.put(field.getCode(), stringObjectMap.get(pathValue)); + map.put(field.getCode(), normalizeValue(stringObjectMap.get(pathValue))); + } + }else { + if (stringObjectMap.containsKey(pathValue.split("\\.")[0])){ + String value = null; + Object fieldObj = stringObjectMap.get(pathValue.split("\\.")[0]); + if (fieldObj != null){ + if (fieldObj instanceof Map){ + Object o = ((Map) fieldObj).get(pathValue.split("\\.")[1]); + if(o instanceof String){ + value = (String)o; + } + else if(o instanceof Integer){ + value = String.valueOf(o); + } + } else if (fieldObj instanceof List) { + Object o = ((List>) fieldObj).get(0).get(pathValue.split("\\.")[1]); + if(o instanceof String){ + value = (String)o; + } + else if(o instanceof Integer){ + value = String.valueOf(o); + } + } + } + if (value != null){ + map.put(field.getCode(), value); + } + } } - }); + } parsedData.add(map); - - - }); + } return parsedData; } + private static String normalizeValue(Object value) { + if (value instanceof JSONArray) { + JSONArray jarr = (JSONArray) value; + if (jarr.get(0) instanceof String) { + return jarr.get(0).toString(); + } else { + for (Object o : jarr) { + if ((o instanceof Map) && ((Map) o).containsKey("content")) { + try { + return ((Map) o).get("content"); + } + catch (ClassCastException e){ + if(((Map) o).get("content") instanceof Integer) { + return String.valueOf(((Map) o).get("content")); + } + return null; + } + } + } + } + } else if (value instanceof Map) { + String key = ((Map)value).containsKey("$") ? "$" : "content"; + return ((Map)value).get(key); + } + return value != null ? value.toString() : null; + } + } diff --git a/dmp-frontend/src/app/core/model/reference-type/reference-type.ts b/dmp-frontend/src/app/core/model/reference-type/reference-type.ts index 95792312a..3feaad017 100644 --- a/dmp-frontend/src/app/core/model/reference-type/reference-type.ts +++ b/dmp-frontend/src/app/core/model/reference-type/reference-type.ts @@ -26,6 +26,7 @@ export interface ReferenceTypeSourceBaseConfiguration extends ReferenceTypeSourc key: string; label: string; ordinal: number; + dependencies: ReferenceTypeSourceBaseDependency[]; } export interface ReferenceTypeSourceExternalApiConfiguration{ @@ -77,6 +78,19 @@ export interface ReferenceTypeStaticOption{ value: string; } +export interface ReferenceTypeSourceBaseDependency{ + referenceTypeCode: string; + key: string; + required: boolean; + properties: DependencyProperty[]; +} + +export interface DependencyProperty{ + code: string; + target: string; + required: boolean; +} + // Persist @@ -103,6 +117,7 @@ export interface ReferenceTypeSourceBaseConfigurationPersist extends ReferenceTy key: string; label: string; ordinal: number; + dependencies?: ReferenceTypeSourceBaseDependencyPersist[]; } export interface ReferenceTypeSourceExternalApiConfigurationPersist{ @@ -155,3 +170,16 @@ export interface ReferenceTypeStaticOptionPersist{ code: string; value: string; } + +export interface ReferenceTypeSourceBaseDependencyPersist{ + referenceTypeCode: string; + key: string; + required: boolean; + properties: DependencyPropertyPersist[]; +} + +export interface DependencyPropertyPersist{ + code: string; + target: string; + required: boolean; +} diff --git a/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts b/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts index b83bd3539..8aebac210 100644 --- a/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts +++ b/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts @@ -8,6 +8,11 @@ import { ConfigurationService } from '../configuration/configuration.service'; import { BaseHttpV2Service } from '../http/base-http-v2.service'; import { ReferenceTypeLookup } from '@app/core/query/reference-type.lookup'; import { ReferenceType, ReferenceTypePersist } from '@app/core/model/reference-type/reference-type'; +import { SingleAutoCompleteConfiguration } from '@app/library/auto-complete/single/single-auto-complete-configuration'; +import { MultipleAutoCompleteConfiguration } from '@app/library/auto-complete/multiple/multiple-auto-complete-configuration'; +import { IsActive } from '@app/core/common/enum/is-active.enum'; +import { nameof } from 'ts-simple-nameof'; +import { ReferenceTypeEditorResolver } from '@app/ui/admin/reference-type/editor/reference-type-editor.resolver'; @Injectable() export class ReferenceTypeService { @@ -51,4 +56,59 @@ export class ReferenceTypeService { catchError((error: any) => throwError(error))); } + // LOOKUP + + public static DefaultReferenceTypeLookup(): ReferenceTypeLookup{ + const lookup = new ReferenceTypeLookup(); + + lookup.project = { + fields: [ + ...ReferenceTypeEditorResolver.lookupFields() + ] + }; + lookup.order = { items: [nameof(x => x.code)] }; + lookup.page = { offset: 0, size: 100 }; + lookup.isActive = [IsActive.Active]; + return lookup; + } + + // + // Autocomplete Commons + // + // + public singleAutocompleteConfiguration: SingleAutoCompleteConfiguration = { + initialItems: (data?: any) => this.query(this.buildAutocompleteLookup()).pipe(map(x => x.items)), + filterFn: (searchQuery: string, data?: any) => this.query(this.buildAutocompleteLookup(searchQuery)).pipe(map(x => x.items)), + getSelectedItem: (selectedItem: any) => this.query(this.buildAutocompleteLookup(null, null, [selectedItem])).pipe(map(x => x.items[0])), + displayFn: (item: ReferenceType) => item.name, + titleFn: (item: ReferenceType) => item.name, + valueAssign: (item: ReferenceType) => item.id, + }; + + public multipleAutocompleteConfiguration: MultipleAutoCompleteConfiguration = { + initialItems: (excludedItems: any[], data?: any) => this.query(this.buildAutocompleteLookup(null, excludedItems ? excludedItems : null)).pipe(map(x => x.items)), + filterFn: (searchQuery: string, excludedItems: any[]) => this.query(this.buildAutocompleteLookup(searchQuery, excludedItems)).pipe(map(x => x.items)), + getSelectedItems: (selectedItems: any[]) => this.query(this.buildAutocompleteLookup(null, null, selectedItems)).pipe(map(x => x.items)), + displayFn: (item: ReferenceType) => item.name, + titleFn: (item: ReferenceType) => item.name, + valueAssign: (item: ReferenceType) => item.id, + }; + + private buildAutocompleteLookup(like?: string, excludedIds?: Guid[], ids?: Guid[]): ReferenceTypeLookup { + const lookup: ReferenceTypeLookup = new ReferenceTypeLookup(); + lookup.page = { size: 100, offset: 0 }; + if (excludedIds && excludedIds.length > 0) { lookup.excludedIds = excludedIds; } + if (ids && ids.length > 0) { lookup.ids = ids; } + lookup.isActive = [IsActive.Active]; + lookup.project = { + fields: [ + nameof(x => x.id), + nameof(x => x.name) + ] + }; + lookup.order = { items: [nameof(x => x.name)] }; + if (like) { lookup.like = this.filterService.transformLike(like); } + return lookup; + } + } \ No newline at end of file diff --git a/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts b/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts index e5485c9f9..b359d8171 100644 --- a/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts +++ b/dmp-frontend/src/app/core/services/utilities/enum-utils.service.ts @@ -17,6 +17,9 @@ import { DescriptionTemplateTypeStatus } from '@app/core/common/enum/description import { DmpBlueprintSystemFieldType } from '@app/core/common/enum/dmp-blueprint-system-field-type'; import { DmpBlueprintStatus } from '@app/core/common/enum/dmp-blueprint-status'; import { DescriptionTemplateStatus } from '@app/core/common/enum/description-template-status'; +import { ReferenceFieldDataType } from '@app/core/common/enum/reference-field-data-type'; +import { ReferenceTypeSourceType } from '@app/core/common/enum/reference-type-source-type'; +import { ReferenceTypeExternalApiHTTPMethodType } from '@app/core/common/enum/reference-type-external-api-http-method-type'; @Injectable() export class EnumUtils { @@ -235,4 +238,26 @@ export class EnumUtils { case DmpBlueprintExtraFieldDataType.ExternalAutocomplete: return this.language.instant('TYPES.DMP-BLUEPRINT-EXTRA-FIELD-DATA-TYPE.EXTERNAL-AUTOCOMPLETE'); } } + + toReferenceTypeSourceTypeString(status: ReferenceTypeSourceType): string { + switch (status) { + case ReferenceTypeSourceType.API: return this.language.instant('TYPES.REFERENCE-TYPE-SOURCE-TYPE.API'); + case ReferenceTypeSourceType.STATIC: return this.language.instant('TYPES.REFERENCE-TYPE-SOURCE-TYPE.STATIC'); + } + } + + toReferenceFieldDataTypeString(status: ReferenceFieldDataType): string { + switch (status) { + case ReferenceFieldDataType.Text: return this.language.instant('TYPES.REFERENCE-FIELD-DATA-TYPE.TEXT'); + case ReferenceFieldDataType.Date: return this.language.instant('TYPES.REFERENCE-FIELD-DATA-TYPE.DATE'); + } + } + + + toReferenceTypeExternalApiHTTPMethodTypeString(status: ReferenceTypeExternalApiHTTPMethodType): string { + switch (status) { + case ReferenceTypeExternalApiHTTPMethodType.GET: return this.language.instant('TYPES.REFERENCE-TYPE-EXTERNAL-API-HTTP-METHOD-TYPE.GET'); + case ReferenceTypeExternalApiHTTPMethodType.POST: return this.language.instant('TYPES.REFERENCE-TYPE-EXTERNAL-API-HTTP-METHOD-TYPE.POST'); + } + } } diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html index 1f621af05..90eec2012 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html @@ -1,4 +1,4 @@ -
+
@@ -16,12 +16,6 @@ {{'REFERENCE-TYPE-EDITOR.ACTIONS.DELETE' | translate}}
-
+
@@ -65,16 +60,15 @@ - Reference Type Fields + -
-
-
+
+
@@ -83,7 +77,7 @@
-
@@ -101,7 +95,7 @@
- Description + {{'REFERENCE-TYPE-EDITOR.FIELDS.DESCRIPTION' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -119,8 +113,8 @@ {{'REFERENCE-TYPE-EDITOR.FIELDS.DATA-TYPE' | translate}} - - {{dataType.name}} + + {{enumUtils.toReferenceFieldDataTypeString(fieldDataType)}} @@ -141,16 +135,16 @@ - Reference Type Source + - +
-
+
@@ -158,7 +152,7 @@ {{'REFERENCE-TYPE-EDITOR.FIELDS.SOURCE-CONFIGURATION' | translate}} {{sourceIndex + 1}}
-
@@ -190,10 +184,10 @@
- Source Type + {{'REFERENCE-TYPE-EDITOR.FIELDS.SOURCE-TYPE' | translate}} - - {{vis.name}} + + {{enumUtils.toReferenceTypeSourceTypeString(sourceType)}} @@ -201,7 +195,7 @@
-
+
{{'REFERENCE-TYPE-EDITOR.FIELDS.URL' | translate}} @@ -220,7 +214,7 @@
- Content Type + {{'REFERENCE-TYPE-EDITOR.FIELDS.CONTENT-TYPE' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -228,7 +222,7 @@
- First Page + {{'REFERENCE-TYPE-EDITOR.FIELDS.FIRST-PAGE' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -236,10 +230,10 @@
- HTTP Method + {{'REFERENCE-TYPE-EDITOR.FIELDS.HTTP-METHOD' | translate}} - - {{vis.name}} + + {{enumUtils.toReferenceTypeExternalApiHTTPMethodTypeString(httpMethod)}} @@ -247,8 +241,8 @@
- - Request Body + + {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUEST-BODY' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -256,7 +250,7 @@
- Filter Type + {{'REFERENCE-TYPE-EDITOR.FIELDS.FILTER-TYPE' | translate}}ype {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -266,7 +260,7 @@

{{'REFERENCE-TYPE-EDITOR.FIELDS.RESULTS' | translate}}

- Results Path + {{'REFERENCE-TYPE-EDITOR.FIELDS.RESULTS-PATH' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -274,7 +268,7 @@
-
+
@@ -284,7 +278,7 @@
-
+ + +
{{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} - + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -336,10 +332,10 @@
- Method + {{'REFERENCE-TYPE-EDITOR.FIELDS.HTTP-METHOD' | translate}} - - {{vis.name}} + + {{enumUtils.toReferenceTypeExternalApiHTTPMethodTypeString(httpMethod)}} @@ -348,7 +344,7 @@
- Token Path + {{'REFERENCE-TYPE-EDITOR.FIELDS.TOKEN-PATH' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -356,7 +352,7 @@
- Request Body + {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUEST-BODY' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -364,7 +360,7 @@
- Type + {{'REFERENCE-TYPE-EDITOR.FIELDS.TYPE' | translate}} {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -374,8 +370,8 @@

{{'REFERENCE-TYPE-EDITOR.FIELDS.QUERIES' | translate}}

-
-
+
+
@@ -383,44 +379,46 @@

{{'REFERENCE-TYPE-EDITOR.FIELDS.QUERY' | translate}} {{queryIndex + 1}}

-
-
- - Condition - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - Separator - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - Value - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - {{'REFERENCE-TYPE-EDITOR.FIELDS.ORDINAL' | translate}} - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.CONDITION' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.SEPARATOR' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.VALUE' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.ORDINAL' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
@@ -428,10 +426,10 @@
-
+

{{'REFERENCE-TYPE-EDITOR.FIELDS.OPTIONS' | translate}}

-
+
@@ -441,7 +439,7 @@
-
+ +
{{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} - + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -481,9 +481,120 @@
-
- + +

{{'REFERENCE-TYPE-EDITOR.FIELDS.DEPENDENCIES' | translate}} + +

+
+
+
+ +
+
+

{{'REFERENCE-TYPE-EDITOR.FIELDS.DEPENDENCY' | translate}} {{dependencyIndex + 1}}

+
+
+ +
+
+
+ +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} + + + {{referenceType.code}} + + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.KEY' | translate}} + + + {{key}} + + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUIRED' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ +

{{'REFERENCE-TYPE-EDITOR.FIELDS.PROPERTIES' | translate}} + +

+
+
+
+
+
+

{{'REFERENCE-TYPE-EDITOR.FIELDS.PROPERTY' | translate}} {{propertyIndex + 1}}

+
+
+ +
+
+
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} + + + {{code}} + + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.TARGET' | translate}} + + + {{targetCode}} + + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUIRED' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ +
+
+
+
+
+
+
diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.scss b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.scss index 4372160ca..a6f1e5ed7 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.scss +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.scss @@ -1,4 +1,4 @@ -.dmp-blueprint-editor { +.reference-type-editor { margin-top: 1.3rem; margin-left: 1em; margin-right: 3em; diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts index ec0baa33b..cce9f394f 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts @@ -25,27 +25,13 @@ import { TranslateService } from '@ngx-translate/core'; import { map, takeUntil } from 'rxjs/operators'; import { ReferenceTypeEditorResolver } from './reference-type-editor.resolver'; import { ReferenceTypeEditorService } from './reference-type-editor.service'; -import { QueryConfigEditorModel, ReferenceTypeEditorModel, ReferenceTypeFieldEditorModel, ReferenceTypeSourceBaseConfigurationEditorModel, ReferenceTypeStaticOptionEditorModel, ResultFieldsMappingConfigurationEditorModel } from './reference-type-editor.model'; +import { DependencyPropertyEditorModel, QueryConfigEditorModel, ReferenceTypeEditorModel, ReferenceTypeFieldEditorModel, ReferenceTypeSourceBaseConfigurationEditorModel, ReferenceTypeSourceBaseDependencyEditorModel, ReferenceTypeStaticOptionEditorModel, ResultFieldsMappingConfigurationEditorModel } from './reference-type-editor.model'; import { ReferenceFieldDataType } from '@app/core/common/enum/reference-field-data-type'; import { ReferenceTypeSourceType } from '@app/core/common/enum/reference-type-source-type'; import { ReferenceTypeExternalApiHTTPMethodType } from '@app/core/common/enum/reference-type-external-api-http-method-type'; +import { ReferenceTypeLookup } from '@app/core/query/reference-type.lookup'; -export interface visibleDataType { - name: string; - type: ReferenceFieldDataType; -} - -export interface visibleSourceType { - name: string; - type: ReferenceTypeSourceType; -} - -export interface visibleHTTPMethodType { - name: string; - type: ReferenceTypeExternalApiHTTPMethodType; -} - @Component({ selector: 'app-reference-type-editor-component', templateUrl: 'reference-type-editor.component.html', @@ -58,7 +44,17 @@ export class ReferenceTypeEditorComponent extends BaseEditor source.dependencies.forEach(dependency => { + this.selectedReferenceTypeChanged(dependency.referenceTypeCode); + })); + this.editorModel.definition.sources.forEach(source => { + if(source.type == ReferenceTypeSourceType.STATIC){ + source.options.forEach(option => { + if(!this.propertyCodes.includes(option.code)){ + this.propertyCodes.push(option.code); + } + }); + }else{ + source.results.fieldsMapping.forEach(fieldMapping => { + if(!this.propertyCodes.includes(fieldMapping.code)){ + this.propertyCodes.push(fieldMapping.code); + } + }); + } + }); + } + this.isDeleted = data ? data.isActive === IsActive.Inactive : false; this.buildForm(); } catch (error) { @@ -167,7 +170,7 @@ export class ReferenceTypeEditorComponent extends BaseEditor void): void { - const formData = this.formService.getValue(this.formGroup.value) as ReferenceTypePersist; + const formData = this.formService.getValue(this.formGroup.getRawValue()) as ReferenceTypePersist; console.log(formData); this.referenceTypeService.persist(formData) .pipe(takeUntil(this._destroyed)).subscribe( @@ -221,36 +224,54 @@ export class ReferenceTypeEditorComponent extends BaseEditor 0){ + if(this.propertyCodes.includes(fieldCode)){ + this.propertyCodes.splice(this.propertyCodes.indexOf(fieldCode),1); + } + } + (this.formGroup.get('definition').get('fields') as FormArray).removeAt(fieldIndex); - } - dropFields(event: CdkDragDrop) { - const fieldssFormArray = (this.formGroup.get('definition').get('fields') as FormArray); + const sourceFormArray = ((this.formGroup.get('definition').get('sources') as FormArray)); + for(let i=0; i 0){ - for(let i =0; i < sourceSize; i++){ - this.addFieldMapping(i, fieldssFormArray.at(i).get('code').value); - this.addOption(i, fieldssFormArray.at(i).get('code').value); + if(fieldsFormArray.length > 0){ + for(let j=0; j< sourcesFormArray.length; j++){ + for(let i =0; i < fieldsFormArray.length; i++){ + this.addFieldMapping(j, fieldsFormArray.at(i).get('code').value); + this.addOption(j, fieldsFormArray.at(i).get('code').value); + + if(!this.propertyCodes.includes(fieldsFormArray.at(i).get('code').value)){ + this.propertyCodes.push(fieldsFormArray.at(i).get('code').value); + } + } } } } @@ -261,16 +282,20 @@ export class ReferenceTypeEditorComponent extends BaseEditor { - this.addFieldMapping(sourceIndex, null); - this.addOption(sourceIndex, null); - }); - const fieldsSize = (this.formGroup.get('definition').get('fields') as FormArray).length; - if(fieldsSize && fieldsSize > 0){ - for(let i =0; i < fieldsSize; i++){ - this.addFieldMapping(sourceIndex, null); - this.addOption(sourceIndex, null); + this.addFieldMapping(sourceIndex, "reference_id"); + this.addFieldMapping(sourceIndex, "label"); + this.addFieldMapping(sourceIndex, "description"); + + this.addOption(sourceIndex, "reference_id"); + this.addOption(sourceIndex, "label"); + this.addOption(sourceIndex, "description"); + + const fieldsFormArray = (this.formGroup.get('definition').get('fields') as FormArray); + if(fieldsFormArray && fieldsFormArray.length > 0){ + for(let i =0; i < fieldsFormArray.length; i++){ + this.addFieldMapping(sourceIndex, fieldsFormArray.at(i).get('code').value); + this.addOption(sourceIndex, fieldsFormArray.at(i).get('code').value); } } } @@ -285,22 +310,19 @@ export class ReferenceTypeEditorComponent extends BaseEditor0){ for(let i=0; i) { - const fieldssFormArray = (this.formGroup.get('definition').get('sources').get('fieldsMapping') as FormArray); - - moveItemInArray(fieldssFormArray.controls, event.previousIndex, event.currentIndex); - fieldssFormArray.updateValueAndValidity(); - } - // // @@ -326,16 +341,9 @@ export class ReferenceTypeEditorComponent extends BaseEditor) { - const fieldssFormArray = (this.formGroup.get('definition').get('sources').get('queries') as FormArray); - - moveItemInArray(fieldssFormArray.controls, event.previousIndex, event.currentIndex); - fieldssFormArray.updateValueAndValidity(); + formArray.removeAt(queryIndex); } // Options @@ -346,15 +354,101 @@ export class ReferenceTypeEditorComponent extends BaseEditor0){ for(let i=0; i { + this.referenceTypes = response.items as ReferenceType[]; + }); + } + + selectedReferenceTypeChanged(code: string): void{ + this.selectedReferenceTypeCode = code; + this.sourceKeys = []; + this.targetPropertyCodes = []; + + const lookup = ReferenceTypeService.DefaultReferenceTypeLookup(); + lookup.codes = [this.selectedReferenceTypeCode]; + + this.referenceTypeService.query(lookup) + .pipe(takeUntil(this._destroyed)) + .subscribe(response => { + if(response.count ==1){ + const referenceType = response.items[0] as ReferenceType; + referenceType.definition.sources.forEach(source => { + if(!this.sourceKeys.includes(source.key)) this.sourceKeys.push(source.key) + if(source.type == ReferenceTypeSourceType.API){ + source.results.fieldsMapping.forEach(target => { + if(!this.targetPropertyCodes.includes(target.code)) this.targetPropertyCodes.push(target.code) + }); + }else{ + source.options.forEach(target => { + if(!this.targetPropertyCodes.includes(target.code)) this.targetPropertyCodes.push(target.code) + }); + } + }); + } + }); + + } + + // Properties + addProperty(sourceIndex: number, dependencyIndex: number): void{ + + const optionFormArray = ((this.formGroup.get('definition').get('sources') as FormArray).at(sourceIndex).get('options') as FormArray); + + for(let i =0; i < optionFormArray.length; i++){ + if(!this.propertyCodes.includes(optionFormArray.at(i).get('code').getRawValue())){ + this.propertyCodes.push(optionFormArray.at(i).get('code').getRawValue()); + } + } + + if (((this.formGroup.get('definition').get('sources') as FormArray).at(sourceIndex).get('dependencies') as FormArray).at(dependencyIndex).get('referenceTypeCode').value == null){ + return ; + } + + const property: DependencyPropertyEditorModel = new DependencyPropertyEditorModel(); + (((this.formGroup.get('definition').get('sources') as FormArray).at(sourceIndex).get('dependencies') as FormArray).at(dependencyIndex).get("properties") as FormArray).push(property.buildForm()); + } + + removeProperty(sourceIndex: number, dependencyIndex: number, propertyIndex: number): void { + const formArray = (((this.formGroup.get('definition').get('sources') as FormArray).at(sourceIndex).get('dependencies') as FormArray).at(dependencyIndex).get("properties") as FormArray); + formArray.removeAt(propertyIndex); } } diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts index e6bbf7176..fb155e84b 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts @@ -2,7 +2,7 @@ import { UntypedFormBuilder, UntypedFormGroup, Validators } from "@angular/forms import { ReferenceFieldDataType } from "@app/core/common/enum/reference-field-data-type"; import { ReferenceTypeExternalApiHTTPMethodType } from "@app/core/common/enum/reference-type-external-api-http-method-type"; import { ReferenceTypeSourceType } from "@app/core/common/enum/reference-type-source-type"; -import { ReferenceType, ReferenceTypeDefinition, ReferenceTypeDefinitionPersist, ReferenceTypePersist, ReferenceTypeFieldPersist,ReferenceTypeField, AuthenticationConfiguration, AuthenticationConfigurationPersist, QueryConfigPersist, QueryConfig, ResultsConfigurationPersist, ResultFieldsMappingConfigurationPersist, ResultsConfiguration, ResultFieldsMappingConfiguration, ReferenceTypeSourceBaseConfigurationPersist, ReferenceTypeSourceBaseConfiguration, ReferenceTypeStaticOptionPersist, ReferenceTypeStaticOption } from "@app/core/model/reference-type/reference-type"; +import { ReferenceType, ReferenceTypeDefinition, ReferenceTypeDefinitionPersist, ReferenceTypePersist, ReferenceTypeFieldPersist,ReferenceTypeField, AuthenticationConfiguration, AuthenticationConfigurationPersist, QueryConfigPersist, QueryConfig, ResultsConfigurationPersist, ResultFieldsMappingConfigurationPersist, ResultsConfiguration, ResultFieldsMappingConfiguration, ReferenceTypeSourceBaseConfigurationPersist, ReferenceTypeSourceBaseConfiguration, ReferenceTypeStaticOptionPersist, ReferenceTypeStaticOption, DependencyPropertyPersist, DependencyProperty, ReferenceTypeSourceBaseDependency, ReferenceTypeSourceBaseDependencyPersist } from "@app/core/model/reference-type/reference-type"; import { BaseEditorModel } from "@common/base/base-form-editor-model"; import { BackendErrorValidator } from "@common/forms/validation/custom-validator"; import { ValidationErrorModel } from "@common/forms/validation/error-model/validation-error-model"; @@ -211,6 +211,8 @@ export class ReferenceTypeSourceBaseConfigurationEditorModel implements Referenc options : ReferenceTypeStaticOptionEditorModel[] = []; + dependencies : ReferenceTypeSourceBaseDependencyEditorModel[] = []; + protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder(); constructor( @@ -235,7 +237,15 @@ export class ReferenceTypeSourceBaseConfigurationEditorModel implements Referenc if (item.auth) this.auth = new AuthenticationConfigurationEditorModel().fromModel(item.auth); if(item.queries) { item.queries.map(x => this.queries.push(new QueryConfigEditorModel().fromModel(x))); } - if(item.options) { item.options.map(x => this.options.push(new ReferenceTypeStaticOptionEditorModel().fromModel(x))); } + if(item.options) { + item.options.map(x => this.options.push(new ReferenceTypeStaticOptionEditorModel().fromModel(x))); + } else { + this.options.push(new ReferenceTypeStaticOptionEditorModel().fromModel({code: 'reference_id', value: undefined})); + this.options.push(new ReferenceTypeStaticOptionEditorModel().fromModel({code: 'label', value: undefined})); + this.options.push(new ReferenceTypeStaticOptionEditorModel().fromModel({code: 'description', value: undefined})); + } + + if(item.dependencies) { item.dependencies.map(x => this.dependencies.push(new ReferenceTypeSourceBaseDependencyEditorModel().fromModel(x))); } } return this; } @@ -282,7 +292,6 @@ export class ReferenceTypeSourceBaseConfigurationEditorModel implements Referenc }), context.getValidation('queries') ) ), - options: this.formBuilder.array( (this.options ?? []).map( (item, index) => new ReferenceTypeStaticOptionEditorModel( @@ -291,6 +300,15 @@ export class ReferenceTypeSourceBaseConfigurationEditorModel implements Referenc rootPath: `options[${index}].` }), context.getValidation('options') ) + ), + dependencies: this.formBuilder.array( + (this.dependencies ?? []).map( + (item, index) => new ReferenceTypeSourceBaseDependencyEditorModel( + this.validationErrorModel + ).fromModel(item).buildForm({ + rootPath: `dependencies[${index}].` + }), context.getValidation('dependencies') + ) ) }); @@ -312,7 +330,7 @@ export class ReferenceTypeSourceBaseConfigurationEditorModel implements Referenc baseValidationArray.push({ key: 'url', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}url`)] }); baseValidationArray.push({ key: 'paginationPath', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}paginationPath`)] }); baseValidationArray.push({ key: 'contentType', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}contentType`)] }); - baseValidationArray.push({ key: 'firstPage', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}firstPage`)] }); + baseValidationArray.push({ key: 'firstPage', validators: [Validators.pattern("^[0-9]*$"), BackendErrorValidator(validationErrorModel, `${rootPath}firstPage`)] }); baseValidationArray.push({ key: 'httpMethod', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}httpMethod`)] }); baseValidationArray.push({ key: 'requestBody', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}requestBody`)] }); baseValidationArray.push({ key: 'filterType', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}filterType`)] }); @@ -321,6 +339,8 @@ export class ReferenceTypeSourceBaseConfigurationEditorModel implements Referenc baseValidationArray.push({ key: 'options', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}options`)] }); + baseValidationArray.push({ key: 'dependencies', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}dependencies`)] }); + baseContext.validation = baseValidationArray; return baseContext; } @@ -339,6 +359,11 @@ export class ResultsConfigurationEditorModel implements ResultsConfigurationPers fromModel(item: ResultsConfiguration): ResultsConfigurationEditorModel { this.resultsArrayPath = item.resultsArrayPath; if(item.fieldsMapping) { item.fieldsMapping.map(x => this.fieldsMapping.push(new ResultFieldsMappingConfigurationEditorModel().fromModel(x))); } + else { + this.fieldsMapping.push(new ResultFieldsMappingConfigurationEditorModel().fromModel({code: 'reference_id', responsePath: undefined})); + this.fieldsMapping.push(new ResultFieldsMappingConfigurationEditorModel().fromModel({code: 'label', responsePath: undefined})); + this.fieldsMapping.push(new ResultFieldsMappingConfigurationEditorModel().fromModel({code: 'description', responsePath: undefined})); + } return this; } @@ -417,7 +442,7 @@ export class ResultFieldsMappingConfigurationEditorModel implements ResultFields } return this.formBuilder.group({ - code: [{ value: "code", disabled: disabled }, context.getValidation('code').validators], + code: [{ value: "code", disabled: true }, context.getValidation('code').validators], responsePath: [{ value: this.responsePath, disabled: disabled }, context.getValidation('responsePath').validators], }); } @@ -594,7 +619,7 @@ export class ReferenceTypeStaticOptionEditorModel implements ReferenceTypeStatic } return this.formBuilder.group({ - code: [{ value: this.code, disabled: disabled }, context.getValidation('code').validators], + code: [{ value: this.code, disabled: true }, context.getValidation('code').validators], value: [{ value: this.value, disabled: disabled }, context.getValidation('value').validators], }); } @@ -610,6 +635,132 @@ export class ReferenceTypeStaticOptionEditorModel implements ReferenceTypeStatic baseValidationArray.push({ key: 'code', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}code`)] }); baseValidationArray.push({ key: 'value', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}value`)] }); + baseContext.validation = baseValidationArray; + return baseContext; + } +} + +export class ReferenceTypeSourceBaseDependencyEditorModel implements ReferenceTypeSourceBaseDependencyPersist { + public referenceTypeCode: string; + public key: string; + public required = true; + public properties: DependencyPropertyEditorModel[] = []; + + + protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder(); + + constructor( + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel() + ) { } + + fromModel(item: ReferenceTypeSourceBaseDependency): ReferenceTypeSourceBaseDependencyEditorModel { + this.referenceTypeCode = item.referenceTypeCode; + this.key = item.key; + this.required = item.required; + if(item.properties) { item.properties.map(x => this.properties.push(new DependencyPropertyEditorModel().fromModel(x))); } + + return this; + } + + buildForm(params?: { + context?: ValidationContext, + disabled?: boolean, + rootPath?: string + }): UntypedFormGroup { + let { context = null, disabled = false, rootPath } = params ?? {} + if (context == null) { + context = ReferenceTypeSourceBaseDependencyEditorModel.createValidationContext({ + validationErrorModel: this.validationErrorModel, + rootPath + }); + } + + return this.formBuilder.group({ + referenceTypeCode: [{ value: this.referenceTypeCode, disabled: disabled }, context.getValidation('referenceTypeCode').validators], + key: [{ value: this.key, disabled: disabled }, context.getValidation('key').validators], + required: [{ value: this.required, disabled: true }, context.getValidation('required').validators], + properties: this.formBuilder.array( + (this.properties ?? []).map( + (item, index) => new DependencyPropertyEditorModel( + this.validationErrorModel + ).fromModel(item).buildForm({ + rootPath: `properties[${index}].` + }), context.getValidation('properties') + ) + ), + }); + } + + static createValidationContext(params: { + rootPath?: string, + validationErrorModel: ValidationErrorModel + }): ValidationContext { + const { rootPath = '', validationErrorModel } = params; + + const baseContext: ValidationContext = new ValidationContext(); + const baseValidationArray: Validation[] = new Array(); + baseValidationArray.push({ key: 'referenceTypeCode', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}referenceTypeCode`)] }); + baseValidationArray.push({ key: 'key', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}key`)] }); + baseValidationArray.push({ key: 'required', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}required`)] }); + baseValidationArray.push({ key: 'properties', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}properties`)] }); + + baseContext.validation = baseValidationArray; + return baseContext; + } +} + +export class DependencyPropertyEditorModel implements DependencyPropertyPersist { + public code: string; + public target: string; + public required = true; + + + protected formBuilder: UntypedFormBuilder = new UntypedFormBuilder(); + + constructor( + public validationErrorModel: ValidationErrorModel = new ValidationErrorModel() + ) { } + + fromModel(item: DependencyProperty): DependencyPropertyEditorModel { + this.code = item.code; + this.target = item.target; + this.required = item.required; + + return this; + } + + buildForm(params?: { + context?: ValidationContext, + disabled?: boolean, + rootPath?: string + }): UntypedFormGroup { + let { context = null, disabled = false, rootPath } = params ?? {} + if (context == null) { + context = DependencyPropertyEditorModel.createValidationContext({ + validationErrorModel: this.validationErrorModel, + rootPath + }); + } + + return this.formBuilder.group({ + code: [{ value: this.code, disabled: disabled }, context.getValidation('code').validators], + target: [{ value: this.target, disabled: disabled }, context.getValidation('target').validators], + required: [{ value: this.required, disabled: true }, context.getValidation('required').validators], + }); + } + + static createValidationContext(params: { + rootPath?: string, + validationErrorModel: ValidationErrorModel + }): ValidationContext { + const { rootPath = '', validationErrorModel } = params; + + const baseContext: ValidationContext = new ValidationContext(); + const baseValidationArray: Validation[] = new Array(); + baseValidationArray.push({ key: 'code', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}code`)] }); + baseValidationArray.push({ key: 'target', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}target`)] }); + baseValidationArray.push({ key: 'required', validators: [Validators.required, BackendErrorValidator(validationErrorModel, `${rootPath}required`)] }); + baseContext.validation = baseValidationArray; return baseContext; } diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts index c8d4a94bb..119c0d0d5 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router'; -import { AuthenticationConfiguration, QueryConfig, ReferenceType, ReferenceTypeDefinition, ReferenceTypeField, ReferenceTypeSourceBaseConfiguration, ResultsConfiguration, ResultFieldsMappingConfiguration, ReferenceTypeStaticOption } from '@app/core/model/reference-type/reference-type'; +import { AuthenticationConfiguration, QueryConfig, ReferenceType, ReferenceTypeDefinition, ReferenceTypeField, ReferenceTypeSourceBaseConfiguration, ResultsConfiguration, ResultFieldsMappingConfiguration, ReferenceTypeStaticOption, ReferenceTypeSourceBaseDependency, DependencyProperty } from '@app/core/model/reference-type/reference-type'; import { ReferenceTypeService } from '@app/core/services/reference-type/reference-type.service'; import { BreadcrumbService } from '@app/ui/misc/breadcrumb/breadcrumb.service'; import { BaseEditorResolver } from '@common/base/base-editor.resolver'; @@ -59,6 +59,14 @@ export class ReferenceTypeEditorResolver extends BaseEditorResolver { [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.options),nameof(x => x.code)].join('.'), [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.options),nameof(x => x.value)].join('.'), + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.dependencies),nameof(x => x.referenceTypeCode)].join('.'), + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.dependencies),nameof(x => x.key)].join('.'), + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.dependencies),nameof(x => x.required)].join('.'), + + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.dependencies),nameof(x => x.properties), nameof(x => x.code)].join('.'), + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.dependencies),nameof(x => x.properties), nameof(x => x.target)].join('.'), + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.dependencies),nameof(x => x.properties), nameof(x => x.required)].join('.'), + nameof(x => x.createdAt), nameof(x => x.updatedAt), nameof(x => x.isActive) diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index d028ec3ab..cafd8167c 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -1125,17 +1125,43 @@ "DATA-TYPE": "Data Type", "KEY": "Key", "LABEL": "Label", + "DESCRIPTION": "Description", "ORDINAL": "Ordinal", "URL": "Url", - "PAGINATION-PATH": "Pagination Path" + "SOURCE-TYPE": "Source Type", + "PAGINATION-PATH": "Pagination Path", + "CONTENT-TYPE": "Content Type", + "HTTP-METHOD": "HTTP Method", + "FIRST-PAGE": "First Page", + "REQUEST-BODY": "Request Body", + "FILTER-TYPE": "Filter Type", + "RESULTS-PATH": "Results Path", + "TOKEN-PATH": "Token Path", + "TYPE": "Type", + "CONDITION": "Condition", + "SEPARATOR": "Separator", + "DEPENDENCIES": "Dependencies", + "DEPENDENCY": "Dependency", + "REQUIRED": "Required", + "PROPERTIES": "Properties", + "PROPERTY": "Property", + "TARGET": "Target" + }, "ACTIONS": { "SAVE": "Save", "CANCEL": "Cancel", "DELETE": "Delete", "ADD-FIELD": "Add Field", - "ADD-CONFIG": "Add Config", - "ADD-QUERY": "Add Query" + "REMOVE-FIELD": "Remove Field", + "ADD-SOURCE": "Add Source", + "REMOVE-SOURCE": "Remove Source", + "ADD-QUERY": "Add Query", + "REMOVE-QUERY": "Remove Query", + "ADD-DEPENDENCY": "Add Dependency", + "REMOVE-DEPENDENCY": "Remove Dependency", + "ADD-PROPERTY": "Add property", + "REMOVE-PROPERTY": "Remove property" } }, "CONFIRM-DELETE-DIALOG": { @@ -1734,6 +1760,18 @@ "NUMBER": "Number", "TEXT": "Text", "EXTERNAL-AUTOCOMPLETE": "External AutoComplete" + }, + "REFERENCE-FIELD-DATA-TYPE":{ + "TEXT": "Text", + "DATE": "Date" + }, + "REFERENCE-TYPE-SOURCE-TYPE":{ + "API": "API", + "STATIC": "Static" + }, + "REFERENCE-TYPE-EXTERNAL-API-HTTP-METHOD-TYPE":{ + "GET": "GET", + "POST": "POST" } }, "ADDRESEARCHERS-EDITOR": { From c0e57b363d5488e70f64708c61bfd2a0bf6ebf31 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 13:15:31 +0200 Subject: [PATCH 05/15] elastic manage service --- .../eu/eudat/authorization/Permission.java | 3 +- .../elastic/AppElasticProperties.java | 9 ++ .../data/DmpDescriptionTemplateEntity.java | 17 +--- .../eudat/service/elastic/ElasticService.java | 8 ++ .../service/elastic/ElasticServiceImpl.java | 97 ++++++++++++++++++- .../ReferenceTypeServiceImpl.java | 4 +- .../dao/entities/DmpDatasetProfileDao.java | 10 -- .../entities/DmpDatasetProfileDaoImpl.java | 53 ---------- .../operations/DatabaseRepository.java | 2 - .../operations/DatabaseRepositoryImpl.java | 12 --- .../eudat/models/rda/mapper/DmpRDAMapper.java | 20 ++-- .../src/main/resources/config/permissions.yml | 10 +- 12 files changed, 129 insertions(+), 116 deletions(-) delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java delete mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java b/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java index f4bbb3950..d5ecf6643 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java +++ b/dmp-backend/core/src/main/java/eu/eudat/authorization/Permission.java @@ -22,7 +22,8 @@ public final class Permission { public static String PublicBrowseReference = "PublicBrowseReference"; public static String PublicBrowseUser = "PublicBrowseUser"; - + //Elastic + public static String ManageElastic = "ManageElastic"; //Language public static String BrowseLanguage = "BrowseLanguage"; diff --git a/dmp-backend/core/src/main/java/eu/eudat/configurations/elastic/AppElasticProperties.java b/dmp-backend/core/src/main/java/eu/eudat/configurations/elastic/AppElasticProperties.java index 3d69932ae..7900411fd 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/configurations/elastic/AppElasticProperties.java +++ b/dmp-backend/core/src/main/java/eu/eudat/configurations/elastic/AppElasticProperties.java @@ -7,6 +7,7 @@ public class AppElasticProperties { private boolean enabled; private String dmpIndexName; private String descriptionIndexName; + private int resetBatchSize; private boolean enableIcuAnalysisPlugin; public String getDmpIndexName() { @@ -40,4 +41,12 @@ public class AppElasticProperties { public void setDescriptionIndexName(String descriptionIndexName) { this.descriptionIndexName = descriptionIndexName; } + + public int getResetBatchSize() { + return resetBatchSize; + } + + public void setResetBatchSize(int resetBatchSize) { + this.resetBatchSize = resetBatchSize; + } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java b/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java index 3fa48aed6..ee532bb7e 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/data/DmpDescriptionTemplateEntity.java @@ -11,7 +11,7 @@ import java.util.UUID; @Entity @Table(name = "\"DmpDescriptionTemplate\"") -public class DmpDescriptionTemplateEntity implements DataEntity { +public class DmpDescriptionTemplateEntity { @Id @Column(name = "id", updatable = false, nullable = false, columnDefinition = "BINARY(16)") @@ -105,19 +105,4 @@ public class DmpDescriptionTemplateEntity implements DataEntity tuple, List fields, String base) { - return null; - } } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticService.java b/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticService.java index fabacb500..092b531e9 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticService.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticService.java @@ -24,4 +24,12 @@ public interface ElasticService { void persistDescription(DescriptionEntity description) throws IOException; void deleteDescription(DescriptionEntity description) throws IOException; + + void deleteDmpIndex() throws IOException; + + void deleteDescriptionIndex() throws IOException; + + void resetDmpIndex() throws IOException; + + void resetDescriptionIndex() throws IOException; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticServiceImpl.java index 85efb414e..1b80f78ed 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/elastic/ElasticServiceImpl.java @@ -4,6 +4,7 @@ import co.elastic.clients.elasticsearch.ElasticsearchClient; import co.elastic.clients.elasticsearch._types.mapping.Property; import co.elastic.clients.elasticsearch._types.mapping.TypeMapping; import co.elastic.clients.elasticsearch.indices.*; +import eu.eudat.authorization.Permission; import eu.eudat.commons.enums.IsActive; import eu.eudat.configurations.elastic.AppElasticProperties; import eu.eudat.data.DescriptionEntity; @@ -17,12 +18,19 @@ import eu.eudat.model.Description; import eu.eudat.model.Dmp; import eu.eudat.query.DescriptionQuery; import eu.eudat.query.DmpQuery; +import eu.eudat.service.dmpblueprint.DmpBlueprintServiceImpl; +import gr.cite.commons.web.authz.service.AuthorizationService; import gr.cite.tools.data.builder.BuilderFactory; +import gr.cite.tools.data.query.Ordering; +import gr.cite.tools.data.query.Paging; import gr.cite.tools.data.query.QueryFactory; import gr.cite.tools.elastic.ElasticConstants; import gr.cite.tools.exception.MyNotFoundException; import gr.cite.tools.fieldset.BaseFieldSet; +import gr.cite.tools.logging.LoggerService; +import gr.cite.tools.logging.MapLogEntry; import jakarta.persistence.EntityManager; +import org.slf4j.LoggerFactory; import org.springframework.context.MessageSource; import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.data.elasticsearch.annotations.FieldType; @@ -33,10 +41,10 @@ import java.util.*; import org.springframework.data.elasticsearch.client.elc.ElasticsearchTemplate; import org.springframework.data.elasticsearch.core.mapping.IndexCoordinates; import org.springframework.stereotype.Service; -import org.springframework.web.context.annotation.RequestScope; @Service public class ElasticServiceImpl implements ElasticService { + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(DmpBlueprintServiceImpl.class)); public final AppElasticProperties appElasticProperties; private final ElasticsearchClient restHighLevelClient; private final ElasticsearchTemplate elasticsearchTemplate; @@ -44,8 +52,9 @@ public class ElasticServiceImpl implements ElasticService { private final BuilderFactory builderFactory; private final EntityManager entityManager; private final MessageSource messageSource; + private final AuthorizationService authorizationService; - public ElasticServiceImpl(AppElasticProperties appElasticProperties, ElasticsearchClient restHighLevelClient, ElasticsearchTemplate elasticsearchTemplate, QueryFactory queryFactory, BuilderFactory builderFactory, EntityManager entityManager, MessageSource messageSource) { + public ElasticServiceImpl(AppElasticProperties appElasticProperties, ElasticsearchClient restHighLevelClient, ElasticsearchTemplate elasticsearchTemplate, QueryFactory queryFactory, BuilderFactory builderFactory, EntityManager entityManager, MessageSource messageSource, AuthorizationService authorizationService) { this.appElasticProperties = appElasticProperties; this.restHighLevelClient = restHighLevelClient; this.elasticsearchTemplate = elasticsearchTemplate; @@ -53,6 +62,7 @@ public class ElasticServiceImpl implements ElasticService { this.builderFactory = builderFactory; this.entityManager = entityManager; this.messageSource = messageSource; + this.authorizationService = authorizationService; } @Override @@ -115,7 +125,7 @@ public class ElasticServiceImpl implements ElasticService { indexSettingsAnalysis.analyzer("icu_analyzer_text", ab -> ab.custom(x-> x.filter("icu_folding", "english_stop", "english_stemmer").tokenizer("standard"))); } indexSettings.analysis(indexSettingsAnalysis.build()); - CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(new CreateIndexRequest.Builder().index(indexName).mappings(typeMapping.build()).settings(indexSettings.build()).build()); + restHighLevelClient.indices().create(new CreateIndexRequest.Builder().index(indexName).mappings(typeMapping.build()).settings(indexSettings.build()).build()); } @@ -251,6 +261,8 @@ public class ElasticServiceImpl implements ElasticService { } //endregion + + //region persist delete @Override public void persistDmp(DmpEntity dmp) throws IOException { @@ -303,4 +315,83 @@ public class ElasticServiceImpl implements ElasticService { this.elasticsearchTemplate.save(dmpElasticEntity, IndexCoordinates.of(this.appElasticProperties.getDmpIndexName())); } } + + //endregion + + //region manage + + @Override + public void deleteDmpIndex() throws IOException { + logger.debug(new MapLogEntry("delete dmp index")); + this.authorizationService.authorizeForce(Permission.ManageElastic); + + if (!this.enabled()) return; + boolean exists = this.existsDmpIndex(); + if (exists) return ; + + this.restHighLevelClient.indices().delete(new DeleteIndexRequest.Builder().index(this.appElasticProperties.getDmpIndexName()).build()); + } + + @Override + public void deleteDescriptionIndex() throws IOException { + logger.debug(new MapLogEntry("delete description index")); + this.authorizationService.authorizeForce(Permission.ManageElastic); + + if (!this.enabled()) return; + boolean exists = this.existsDescriptionIndex(); + if (exists) return ; + this.restHighLevelClient.indices().delete(new DeleteIndexRequest.Builder().index(this.appElasticProperties.getDescriptionIndexName()).build()); + } + + @Override + public void resetDmpIndex() throws IOException { + logger.debug(new MapLogEntry("reset dmp index")); + this.authorizationService.authorizeForce(Permission.ManageElastic); + + if (!this.enabled()) return; + this.deleteDmpIndex(); + + int page = 0; + int pageSize = this.appElasticProperties.getResetBatchSize(); + List items; + do { + DmpQuery query = this.queryFactory.query(DmpQuery.class); + query.setOrder(new Ordering().addAscending(Dmp._createdAt)); + query.setPage(new Paging(page * pageSize, pageSize)); + + items = this.queryFactory.query(DmpQuery.class).collect(); + if (items != null && !items.isEmpty()) { + List elasticEntities = this.builderFactory.builder(DmpElasticBuilder.class).build(items); + elasticsearchTemplate.save(elasticEntities, IndexCoordinates.of(this.appElasticProperties.getDmpIndexName())); + page++; + } + } while (items != null && !items.isEmpty()); + } + + @Override + public void resetDescriptionIndex() throws IOException { + logger.debug(new MapLogEntry("reset description index")); + this.authorizationService.authorizeForce(Permission.ManageElastic); + + if (!this.enabled()) return; + this.deleteDescriptionIndex(); + + int page = 0; + int pageSize = this.appElasticProperties.getResetBatchSize(); + List items; + do { + DescriptionQuery query = this.queryFactory.query(DescriptionQuery.class); + query.setOrder(new Ordering().addAscending(Description._createdAt)); + query.setPage(new Paging(page * pageSize, pageSize)); + + items = this.queryFactory.query(DescriptionQuery.class).collect(); + if (items != null && !items.isEmpty()) { + List elasticEntities = this.builderFactory.builder(DescriptionElasticBuilder.class).build(items); + elasticsearchTemplate.save(elasticEntities, IndexCoordinates.of(this.appElasticProperties.getDescriptionIndexName())); + page++; + } + } while (items != null && !items.isEmpty()); + } + + //endregion } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java index 094612d92..d90da72f7 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java @@ -52,14 +52,13 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService { private final BuilderFactory builderFactory; private final ConventionService conventionService; private final MessageSource messageSource; - private final QueryFactory queryFactory; private final XmlHandlingService xmlHandlingService; private final ErrorThesaurusProperties errors; public ReferenceTypeServiceImpl( EntityManager entityManager, AuthorizationService authorizationService, DeleterFactory deleterFactory, BuilderFactory builderFactory, - ConventionService conventionService, MessageSource messageSource, QueryFactory queryFactory, + ConventionService conventionService, MessageSource messageSource, XmlHandlingService xmlHandlingService, ErrorThesaurusProperties errors) { this.entityManager = entityManager; this.authorizationService = authorizationService; @@ -67,7 +66,6 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService { this.builderFactory = builderFactory; this.conventionService = conventionService; this.messageSource = messageSource; - this.queryFactory = queryFactory; this.xmlHandlingService = xmlHandlingService; this.errors = errors; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java deleted file mode 100644 index 4f23ff7c0..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDao.java +++ /dev/null @@ -1,10 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.DmpDescriptionTemplateEntity; -import eu.eudat.data.dao.DatabaseAccessLayer; -import eu.eudat.model.DmpDescriptionTemplate; - -import java.util.UUID; - -public interface DmpDatasetProfileDao extends DatabaseAccessLayer { -} diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java deleted file mode 100644 index 30336493b..000000000 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DmpDatasetProfileDaoImpl.java +++ /dev/null @@ -1,53 +0,0 @@ -package eu.eudat.data.dao.entities; - -import eu.eudat.data.DmpDescriptionTemplateEntity; -import eu.eudat.data.dao.DatabaseAccess; -import eu.eudat.data.dao.databaselayer.service.DatabaseService; -import eu.eudat.model.DmpDescriptionTemplate; -import eu.eudat.queryable.QueryableList; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.scheduling.annotation.Async; -import org.springframework.stereotype.Service; - -import javax.management.InvalidApplicationException; -import java.util.UUID; -import java.util.concurrent.CompletableFuture; - -@Service("dmpDatasetProfileDao") -public class DmpDatasetProfileDaoImpl extends DatabaseAccess implements DmpDatasetProfileDao { - @Autowired - public DmpDatasetProfileDaoImpl(DatabaseService databaseService) { - super(databaseService); - } - - @Override - public DmpDescriptionTemplateEntity createOrUpdate(DmpDescriptionTemplateEntity item) { - return this.getDatabaseService().createOrUpdate(item, DmpDescriptionTemplateEntity.class); - } - - @Override - @Async - public CompletableFuture createOrUpdateAsync(DmpDescriptionTemplateEntity item) { - return CompletableFuture.supplyAsync(() -> this.createOrUpdate(item)); - } - - @Override - public DmpDescriptionTemplateEntity find(UUID id) throws InvalidApplicationException { - return this.getDatabaseService().getQueryable(DmpDescriptionTemplateEntity.class).where((builder, root) -> builder.equal(root.get("id"), id)).getSingle(); - } - - @Override - public DmpDescriptionTemplateEntity find(UUID id, String hint) { - throw new UnsupportedOperationException(); - } - - @Override - public void delete(DmpDescriptionTemplateEntity item) { - this.getDatabaseService().delete(item); - } - - @Override - public QueryableList asQueryable() { - return this.getDatabaseService().getQueryable(DmpDescriptionTemplateEntity.class); - } -} diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java index d00343413..59cf96c93 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepository.java @@ -12,8 +12,6 @@ public interface DatabaseRepository { DMPDao getDmpDao(); - DmpDatasetProfileDao getDmpDatasetProfileDao(); - OrganisationDao getOrganisationDao(); GrantDao getGrantDao(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java index 476878e5f..d87baff0f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/operations/DatabaseRepositoryImpl.java @@ -16,8 +16,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { private DMPDao dmpDao; - private DmpDatasetProfileDao dmpDatasetProfileDao; - private OrganisationDao organisationDao; private GrantDao GrantDao; @@ -68,11 +66,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { this.dmpDao = dmpDao; } - @Autowired - private void setDmpDatasetProfileDao(DmpDatasetProfileDao dmpDatasetProfileDao) { - this.dmpDatasetProfileDao = dmpDatasetProfileDao; - } - @Autowired private void setOrganisationDao(OrganisationDao organisationDao) { this.organisationDao = organisationDao; @@ -119,11 +112,6 @@ public class DatabaseRepositoryImpl implements DatabaseRepository { return dmpDao; } - @Override - public DmpDatasetProfileDao getDmpDatasetProfileDao() { - return dmpDatasetProfileDao; - } - @Override public OrganisationDao getOrganisationDao() { return organisationDao; diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java index 57105b220..88b19da0e 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/rda/mapper/DmpRDAMapper.java @@ -1,28 +1,21 @@ package eu.eudat.models.rda.mapper; -import eu.eudat.commons.enums.IsActive; -import eu.eudat.data.DescriptionTemplateEntity; import eu.eudat.data.DmpDescriptionTemplateEntity; import eu.eudat.data.DmpEntity; -import eu.eudat.data.EntityDoiEntity; -import eu.eudat.data.old.*; import eu.eudat.logic.services.ApiContext; -import eu.eudat.logic.utilities.helpers.StreamDistinctBy; import eu.eudat.models.rda.Dmp; -import eu.eudat.models.rda.DmpId; -import net.minidev.json.JSONObject; +import eu.eudat.query.DmpDescriptionTemplateQuery; +import gr.cite.tools.data.query.QueryFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import jakarta.persistence.NoResultException; import jakarta.transaction.Transactional; import javax.management.InvalidApplicationException; import java.io.IOException; import java.util.*; -import java.util.stream.Collectors; @Component public class DmpRDAMapper { @@ -31,13 +24,15 @@ public class DmpRDAMapper { private DatasetRDAMapper datasetRDAMapper; private ApiContext apiContext; + private final QueryFactory queryFactory; @Autowired - public DmpRDAMapper(DatasetRDAMapper datasetRDAMapper, ApiContext apiContext) throws IOException { + public DmpRDAMapper(DatasetRDAMapper datasetRDAMapper, ApiContext apiContext, QueryFactory queryFactory) throws IOException { this.datasetRDAMapper = datasetRDAMapper; this.apiContext = apiContext; + this.queryFactory = queryFactory; } @Transactional @@ -190,9 +185,6 @@ public class DmpRDAMapper { } private DmpDescriptionTemplateEntity getProfile(String descriptionTemplateId, UUID dmpId) throws InvalidApplicationException { - return apiContext.getOperationsContext().getDatabaseRepository().getDmpDatasetProfileDao().asQueryable().where(((builder, root) -> builder.and( - builder.equal(root.get("datasetprofile"), UUID.fromString(descriptionTemplateId)), - builder.equal(root.get("dmp"), dmpId)) - )).getSingleOrDefault(); + return this.queryFactory.query(DmpDescriptionTemplateQuery.class).dmpIds(dmpId).descriptionTemplateIds(UUID.fromString(descriptionTemplateId)).first(); } } diff --git a/dmp-backend/web/src/main/resources/config/permissions.yml b/dmp-backend/web/src/main/resources/config/permissions.yml index 742d26662..259aaf5fd 100644 --- a/dmp-backend/web/src/main/resources/config/permissions.yml +++ b/dmp-backend/web/src/main/resources/config/permissions.yml @@ -80,8 +80,14 @@ permissions: clients: [ ] allowAnonymous: true allowAuthenticated: true - - + + # Elastic + ManageElastic: + roles: + - Admin + clients: [ ] + allowAnonymous: false + allowAuthenticated: false # Language BrowseLanguage: From 91af36cdcd67ba5bc5323ad215014743dec7ab30 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 13:16:33 +0200 Subject: [PATCH 06/15] config updates --- dmp-backend/web/src/main/resources/config/elasticsearch.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dmp-backend/web/src/main/resources/config/elasticsearch.yml b/dmp-backend/web/src/main/resources/config/elasticsearch.yml index 3b1f80b9f..47c9499a6 100644 --- a/dmp-backend/web/src/main/resources/config/elasticsearch.yml +++ b/dmp-backend/web/src/main/resources/config/elasticsearch.yml @@ -17,4 +17,5 @@ app-elastic: enabled: ${ELASTIC_ENABLED:} dmpIndexName: ${ELASTIC_DMP_INDEX:} descriptionIndexName: ${ELASTIC_DESCRIPTION_INDEX:} - enableIcuAnalysisPlugin: false \ No newline at end of file + enableIcuAnalysisPlugin: false + resetBatchSize: 1000 From 8536d8d03a1cf411ca0ac778b367498068e427ba Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 14:26:14 +0200 Subject: [PATCH 07/15] dmp changes --- .../types/dmp/DmpBlueprintValueEntity.java | 25 +++++++++ .../types/dmp/DmpContactEntity.java} | 4 +- .../types/dmp/DmpPropertiesEntity.java | 27 ++++++++++ .../dmpproperties/DmpBlueprintValue.java | 25 --------- .../eu/eudat/service/dmp/DmpServiceImpl.java | 52 +++++++++++++++++-- 5 files changed, 103 insertions(+), 30 deletions(-) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpBlueprintValueEntity.java rename dmp-backend/core/src/main/java/eu/eudat/{model/persist/dmpproperties/DmpContact.java => commons/types/dmp/DmpContactEntity.java} (90%) create mode 100644 dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpPropertiesEntity.java delete mode 100644 dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValue.java diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpBlueprintValueEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpBlueprintValueEntity.java new file mode 100644 index 000000000..f0158df3c --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpBlueprintValueEntity.java @@ -0,0 +1,25 @@ +package eu.eudat.commons.types.dmp; + +public class DmpBlueprintValueEntity { + + private String fieldId; + + private String value; + + public String getFieldId() { + return fieldId; + } + + public void setFieldId(String fieldId) { + this.fieldId = fieldId; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpContact.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpContactEntity.java similarity index 90% rename from dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpContact.java rename to dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpContactEntity.java index 99519ee5b..81f24fa0b 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpContact.java +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpContactEntity.java @@ -1,6 +1,6 @@ -package eu.eudat.model.persist.dmpproperties; +package eu.eudat.commons.types.dmp; -public class DmpContact { +public class DmpContactEntity { String userId; diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpPropertiesEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpPropertiesEntity.java new file mode 100644 index 000000000..38a79fe30 --- /dev/null +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/dmp/DmpPropertiesEntity.java @@ -0,0 +1,27 @@ +package eu.eudat.commons.types.dmp; + +import java.util.List; + +public class DmpPropertiesEntity { + + private List dmpBlueprintValues; + + private List contacts; + + public List getDmpBlueprintValues() { + return dmpBlueprintValues; + } + + public void setDmpBlueprintValues(List dmpBlueprintValues) { + this.dmpBlueprintValues = dmpBlueprintValues; + } + + public List getContacts() { + return contacts; + } + + public void setContacts(List contacts) { + this.contacts = contacts; + } + +} diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValue.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValue.java deleted file mode 100644 index e3302e132..000000000 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/dmpproperties/DmpBlueprintValue.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.eudat.model.persist.dmpproperties; - -public class DmpBlueprintValue { - - private String fieldId; - - private String fieldValue; - - public String getFieldId() { - return fieldId; - } - - public void setFieldId(String fieldId) { - this.fieldId = fieldId; - } - - public String getFieldValue() { - return fieldValue; - } - - public void setFieldValue(String fieldValue) { - this.fieldValue = fieldValue; - } - -} diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java index 00b55f606..9a15ebe9f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/dmp/DmpServiceImpl.java @@ -7,6 +7,9 @@ import eu.eudat.commons.JsonHandlingService; import eu.eudat.commons.XmlHandlingService; import eu.eudat.commons.enums.*; import eu.eudat.commons.scope.user.UserScope; +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.reference.DefinitionEntity; import eu.eudat.commons.types.reference.FieldEntity; import eu.eudat.convention.ConventionService; @@ -22,6 +25,9 @@ import eu.eudat.model.deleter.DmpDescriptionTemplateDeleter; import eu.eudat.model.deleter.DmpReferenceDeleter; import eu.eudat.model.deleter.DmpUserDeleter; import eu.eudat.model.persist.*; +import eu.eudat.model.persist.dmpproperties.DmpBlueprintValuePersist; +import eu.eudat.model.persist.dmpproperties.DmpContactPersist; +import eu.eudat.model.persist.dmpproperties.DmpPropertiesPersist; import eu.eudat.model.persist.referencedefinition.DefinitionPersist; import eu.eudat.model.persist.referencedefinition.FieldPersist; import eu.eudat.query.*; @@ -408,7 +414,7 @@ public class DmpServiceImpl implements DmpService { } data.setLabel(model.getLabel()); - data.setProperties(this.jsonHandlingService.toJson(model.getProperties())); + data.setProperties(this.jsonHandlingService.toJson(this.buildDmpPropertiesEntity(model.getProperties()))); data.setDescription(model.getDescription()); data.setAccessType(model.getAccessType()); data.setUpdatedAt(Instant.now()); @@ -424,6 +430,46 @@ public class DmpServiceImpl implements DmpService { return data; } + private @NotNull DmpPropertiesEntity buildDmpPropertiesEntity(DmpPropertiesPersist persist){ + DmpPropertiesEntity data = new DmpPropertiesEntity(); + if (persist == null) return data; + if (!this.conventionService.isListNullOrEmpty(persist.getContacts())){ + data.setContacts(new ArrayList<>()); + for (DmpContactPersist contactPersist: persist.getContacts()) { + data.getContacts().add(this.buildDmpContactEntity(contactPersist)); + } + } + if (!this.conventionService.isListNullOrEmpty(persist.getDmpBlueprintValues())){ + data.setDmpBlueprintValues(new ArrayList<>()); + for (DmpBlueprintValuePersist fieldValuePersist: persist.getDmpBlueprintValues()) { + data.getDmpBlueprintValues().add(this.buildDmpBlueprintValueEntity(fieldValuePersist)); + } + } + return data; + } + + private @NotNull DmpContactEntity buildDmpContactEntity(DmpContactPersist persist){ + DmpContactEntity data = new DmpContactEntity(); + if (persist == null) return data; + + data.setEmail(persist.getEmail()); + data.setLastName(persist.getLastName()); + data.setFirstName(persist.getFirstName()); + data.setUserId(persist.getUserId()); + return data; + } + + + + private @NotNull DmpBlueprintValueEntity buildDmpBlueprintValueEntity(DmpBlueprintValuePersist persist){ + DmpBlueprintValueEntity data = new DmpBlueprintValueEntity(); + if (persist == null) return data; + + data.setValue(persist.getFieldValue()); + data.setFieldId(persist.getFieldId()); + return data; + } + private void patchAndSaveReferences(List models, UUID dmpId) throws InvalidApplicationException { if (models == null || models.isEmpty()) return; @@ -532,14 +578,14 @@ public class DmpServiceImpl implements DmpService { if (!this.conventionService.isListNullOrEmpty(persist.getFields())){ data.setFields(new ArrayList<>()); for (FieldPersist fieldPersist: persist.getFields()) { - data.getFields().add(this.buildFieldEntity(fieldPersist)); + data.getFields().add(this.buildDmpContactEntity(fieldPersist)); } } return data; } - private @NotNull FieldEntity buildFieldEntity(FieldPersist persist){ + private @NotNull FieldEntity buildDmpContactEntity(FieldPersist persist){ FieldEntity data = new FieldEntity(); if (persist == null) return data; From 08ea46f79bfc6022b07e165806c717ccfa9a10c0 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 17:16:32 +0200 Subject: [PATCH 08/15] migration changes --- dmp-migration-tool/core/pom.xml | 31 ---- .../enums/DescriptionTemplateTypeStatus.java | 43 ----- .../typedefinition/DataType.java | 13 -- .../typedefinition/DatabaseColumnType.java | 5 - .../PostgreSQLDatabaseColumnType.java | 25 --- .../typedefinition/PostgreSQLEnumType.java | 26 --- .../typedefinition/UUIDType.java | 113 ------------- .../typedefinition/XMLType.java | 93 ----------- .../eudat/convention/ConventionService.java | 40 ----- .../convention/ConventionServiceImpl.java | 150 ------------------ .../java/eu/old/eudat/data/BaseEntity.java | 5 - .../data/DescriptionTemplateTypeEntity.java | 54 ------- .../old/eudat/errorcode/ErrorDescription.java | 25 --- .../ErrorThesaurusConfiguration.java | 12 -- .../errorcode/ErrorThesaurusProperties.java | 48 ------ .../eudat/model/DescriptionTemplateType.java | 37 ----- .../old/eudat/model/builder/BaseBuilder.java | 96 ----------- .../DescriptionTemplateTypeBuilder.java | 56 ------- .../old/eudat/model/result/QueryResult.java | 71 --------- .../query/DescriptionTemplateTypeQuery.java | 132 --------------- .../lookup/DescriptionTemplateTypeLookup.java | 25 --- .../old/eudat/query/lookup/LookupAware.java | 12 -- .../DescriptionTemplateTypeService.java | 101 ------------ .../old/eudat/query/DatasetProfileQuery.java | 9 +- dmp-migration-tool/pom.xml | 3 +- dmp-migration-tool/web/pom.xml | 8 +- 26 files changed, 8 insertions(+), 1225 deletions(-) delete mode 100644 dmp-migration-tool/core/pom.xml delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/commons/enums/DescriptionTemplateTypeStatus.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DataType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DatabaseColumnType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLDatabaseColumnType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLEnumType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/UUIDType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/XMLType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionService.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionServiceImpl.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/data/BaseEntity.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/data/DescriptionTemplateTypeEntity.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorDescription.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusConfiguration.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusProperties.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/model/DescriptionTemplateType.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/BaseBuilder.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/DescriptionTemplateTypeBuilder.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/model/result/QueryResult.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/query/DescriptionTemplateTypeQuery.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/DescriptionTemplateTypeLookup.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/LookupAware.java delete mode 100644 dmp-migration-tool/core/src/main/java/eu/old/eudat/service/DescriptionTemplateTypeService.java diff --git a/dmp-migration-tool/core/pom.xml b/dmp-migration-tool/core/pom.xml deleted file mode 100644 index 6b4369902..000000000 --- a/dmp-migration-tool/core/pom.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - 4.0.0 - - eu.eudat - dmp-backend - 1.0.0-SNAPSHOT - - - core - - - UTF-8 - - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 17 - 17 - - - - - - \ No newline at end of file diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/commons/enums/DescriptionTemplateTypeStatus.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/commons/enums/DescriptionTemplateTypeStatus.java deleted file mode 100644 index 8fb4aa30c..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/commons/enums/DescriptionTemplateTypeStatus.java +++ /dev/null @@ -1,43 +0,0 @@ -package eu.old.eudat.commons.enums; - -public enum DescriptionTemplateTypeStatus { - - SAVED((short) 0), FINALIZED((short) 1), DELETED((short) 99); - - private final short value; - - DescriptionTemplateTypeStatus(short value) { - this.value = value; - } - - public short getValue() { - return value; - } - - public static DescriptionTemplateTypeStatus fromInteger(int value) { - switch (value) { - case 0: - return SAVED; - case 1: - return FINALIZED; - case 99: - return DELETED; - default: - throw new RuntimeException("Unsupported Description Template Type Status"); - } - } - - public static DescriptionTemplateTypeStatus fromLabel(String value) { - switch (value) { - case "SAVED": - return SAVED; - case "FINALISED": - return FINALIZED; - case "DELETED": - return DELETED; - default: - throw new RuntimeException("Unsupported Description Template Type Status"); - } - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DataType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DataType.java deleted file mode 100644 index 85124ae0b..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DataType.java +++ /dev/null @@ -1,13 +0,0 @@ -package eu.old.eudat.configurations.typedefinition; - -public enum DataType { - TINY, - SHORT, - INTEGER, - LONG, - DOUBLE, - FLOAT, - DATE, - STRING, - TEXT -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DatabaseColumnType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DatabaseColumnType.java deleted file mode 100644 index 49c93f38c..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/DatabaseColumnType.java +++ /dev/null @@ -1,5 +0,0 @@ -package eu.old.eudat.configurations.typedefinition; - -public interface DatabaseColumnType { - public String getType(DataType dt); -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLDatabaseColumnType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLDatabaseColumnType.java deleted file mode 100644 index 77f54478b..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLDatabaseColumnType.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.old.eudat.configurations.typedefinition; - -public class PostgreSQLDatabaseColumnType implements DatabaseColumnType { - - public String getType(DataType dt) { - switch (dt) { - case TINY: - case SHORT: - case INTEGER: - return "integer"; - case LONG: - return "bigint"; - case FLOAT: - case DOUBLE: - return "numeric"; - case DATE: - return "timestamp"; - case STRING: - return "character varying(250)"; - case TEXT: - return "text"; - } - return "character varying(250)"; - } -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLEnumType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLEnumType.java deleted file mode 100644 index 54c7e6583..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/PostgreSQLEnumType.java +++ /dev/null @@ -1,26 +0,0 @@ -package eu.old.eudat.configurations.typedefinition; - -import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; - -import java.sql.PreparedStatement; -import java.sql.SQLException; -import java.sql.Types; - -public class PostgreSQLEnumType extends org.hibernate.type.EnumType { - - public void nullSafeSet( - PreparedStatement st, - Object value, - int index, - SharedSessionContractImplementor session) - throws HibernateException, SQLException { - st.setObject( - index, - value != null ? - ((Enum) value).name() : - null, - Types.OTHER - ); - } -} \ No newline at end of file diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/UUIDType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/UUIDType.java deleted file mode 100644 index 4a933331b..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/UUIDType.java +++ /dev/null @@ -1,113 +0,0 @@ -package eu.old.eudat.configurations.typedefinition; - -import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.usertype.UserType; - -import java.io.Serializable; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; -import java.util.UUID; - -/** - * Currently not used - */ -public class UUIDType implements UserType { - private final int[] sqlTypesSupported = new int[]{Types.NUMERIC}; - private final String CAST_EXCEPTION_TEXT = " cannot be cast to a java.util.UUID"; - - public int[] sqlTypes() { - return sqlTypesSupported; - } - - @Override - public int getSqlType() { - return sqlTypesSupported[0]; - } - - public Class returnedClass() { - return UUID.class; - } - - public boolean equals(UUID x, UUID y) throws HibernateException { - if (x == null) return y == null; - else return x.equals(y); - } - - public int hashCode(UUID x) throws HibernateException { - return x == null ? -1 : x.hashCode(); - } - - @Override - public UUID nullSafeGet(ResultSet rs, int position, SharedSessionContractImplementor session, Object owner) throws SQLException { - return null; - } - - public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException { - assert (names.length == 1); - Object value = rs.getObject(names[0]); - if (value == null) return null; - - UUID uuid = UUID.fromString(rs.getString(names[0])); - return rs.wasNull() ? null : uuid; - } - - public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { - if (value == null) { - st.setNull(index, Types.NULL); - return; - } - - if (!UUID.class.isAssignableFrom(value.getClass())) - throw new HibernateException(value.getClass().toString() + CAST_EXCEPTION_TEXT); - - UUID uuid = (UUID) value; - st.setObject(index, uuid, Types.OTHER); - } - - public UUID deepCopy(UUID value) throws HibernateException { - if (value == null) return null; - return new UUID(value.getMostSignificantBits(), value.getLeastSignificantBits()); - } - - public boolean isMutable() { - return false; - } - - public Serializable disassemble(UUID value) throws HibernateException { - return value; - } - - public UUID assemble(Serializable cached, Object owner) throws HibernateException { - return (UUID) cached; - } - - public UUID replace(UUID original, Object target, Object owner) throws HibernateException { - return original; - } - -// public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) -// throws HibernateException, SQLException -// { -// return nullSafeGet(rs, names, owner); -// } -// -// public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) -// throws HibernateException, SQLException -// { -// nullSafeSet(st, value, index); -// -// } - - public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) - throws HibernateException, SQLException { - return nullSafeGet(rs, names, owner); - } - - public void nullSafeSet(PreparedStatement st, UUID value, int index, SharedSessionContractImplementor session) - throws HibernateException, SQLException { - nullSafeSet(st, value, index); - } -} \ No newline at end of file diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/XMLType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/XMLType.java deleted file mode 100644 index a79775da1..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/configurations/typedefinition/XMLType.java +++ /dev/null @@ -1,93 +0,0 @@ -package eu.old.eudat.configurations.typedefinition; - -import org.hibernate.HibernateException; -import org.hibernate.engine.spi.SharedSessionContractImplementor; -import org.hibernate.usertype.UserType; - -import java.io.Serializable; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.sql.Types; - -/** - * Store and retrieve a PostgreSQL "xml" column as a Java string. - */ -public class XMLType implements UserType { - - private final int[] sqlTypesSupported = new int[]{Types.VARCHAR}; - - public int[] sqlTypes() { - return sqlTypesSupported; - } - - @Override - public int getSqlType() { - return sqlTypesSupported[0]; - } - - public Class returnedClass() { - return String.class; - } - - public boolean equals(String x, String y) throws HibernateException { - if (x == null) { - return y == null; - } else { - return x.equals(y); - } - } - - public int hashCode(String x) throws HibernateException { - return x == null ? -1 : x.hashCode(); - } - - @Override - public String nullSafeGet(ResultSet resultSet, int i, SharedSessionContractImplementor sharedSessionContractImplementor, Object o) throws SQLException { - return null; - } - - public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException { - assert (names.length == 1); - String xmldoc = rs.getString(names[0]); - return rs.wasNull() ? null : xmldoc; - } - - public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException { - if (value == null) { - st.setNull(index, Types.OTHER); - } else { - st.setObject(index, value, Types.OTHER); - } - } - - public String deepCopy(String value) throws HibernateException { - return value; - } - - public boolean isMutable() { - return false; - } - - public Serializable disassemble(String value) throws HibernateException { - return value; - } - - public String assemble(Serializable cached, Object owner) throws HibernateException { - return (String) cached; - } - - public String replace(String original, String target, Object owner) throws HibernateException { - return original; - } - - public Object nullSafeGet(ResultSet rs, String[] names, SharedSessionContractImplementor session, Object owner) - throws HibernateException, SQLException { - return nullSafeGet(rs, names, owner); - } - - public void nullSafeSet(PreparedStatement st, String value, int index, SharedSessionContractImplementor session) throws HibernateException, SQLException { - nullSafeSet(st, value, index); - } - -} \ No newline at end of file diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionService.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionService.java deleted file mode 100644 index 5d59cea87..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionService.java +++ /dev/null @@ -1,40 +0,0 @@ -package eu.old.eudat.convention; - -import java.util.List; -import java.util.Map; -import java.util.UUID; -import java.util.function.Function; - -public interface ConventionService { - - Boolean isValidId(Integer id); - - Boolean isValidGuid(UUID guid); - - Boolean isValidUUID(String str); - UUID parseUUIDSafe(String str); - - Boolean isValidHash(String hash); - - String hashValue(Object value); - - String limit(String text, int maxLength); - - String truncate(String text, int maxLength); - - UUID getEmptyUUID(); - - boolean isNullOrEmpty(String value); - - boolean isListNullOrEmpty(List value); - - String stringEmpty(); - - String asPrefix(String name); - - String asIndexerPrefix(String part); - - String asIndexer(String... names); - - Map> toDictionaryOfList(List items, Function keySelector); -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionServiceImpl.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionServiceImpl.java deleted file mode 100644 index 635b09722..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/convention/ConventionServiceImpl.java +++ /dev/null @@ -1,150 +0,0 @@ -package eu.old.eudat.convention; - -import eu.old.eudat.errorcode.ErrorThesaurusProperties; -import gr.cite.tools.exception.MyApplicationException; -import gr.cite.tools.logging.LoggerService; -import org.slf4j.LoggerFactory; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.time.Instant; -import java.util.*; -import java.util.function.Function; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON) -public class ConventionServiceImpl implements ConventionService { - private final static Pattern UUID_REGEX_PATTERN = Pattern.compile("^[{]?[0-9a-fA-F]{8}-([0-9a-fA-F]{4}-){3}[0-9a-fA-F]{12}[}]?$"); - - private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(ConventionServiceImpl.class)); - private final ErrorThesaurusProperties errors; - - @Autowired - public ConventionServiceImpl(ErrorThesaurusProperties errors) { - this.errors = errors; - } - - @Override - public Boolean isValidId(Integer id) { - return id != null && id > 0; - } - - @Override - public Boolean isValidGuid(UUID guid) { - return guid != null && !guid.equals(this.getEmptyUUID()); - } - - @Override - public Boolean isValidUUID(String str) { - if (this.isNullOrEmpty(str)) { - return false; - } - return UUID_REGEX_PATTERN.matcher(str).matches(); - } - - @Override - public UUID parseUUIDSafe(String str) { - if (!this.isValidUUID(str)) { - return null; - } - try { - return UUID.fromString(str); - } catch (Exception ex){ - logger.warn("invalid uuid" + str, ex); - return null; - } - } - - @Override - public Boolean isValidHash(String hash) { - return !this.isNullOrEmpty(hash); - } - - @Override - public String hashValue(Object value) throws MyApplicationException { - if (value == null) return this.stringEmpty(); - if (value instanceof Instant) return String.format("%ts", (Instant) value); - throw new MyApplicationException(this.errors.getSystemError().getCode(), this.errors.getSystemError().getMessage()); - } - - @Override - public String limit(String text, int maxLength) { - if (this.isNullOrEmpty(text)) return text; - if (text.length() > maxLength) return String.format("%s...", text.substring(0, maxLength)); - else return text; - } - - @Override - public String truncate(String text, int maxLength) { - String truncated = text; - if (text.length() < maxLength) return text; - - truncated = truncated.trim(); - truncated = truncated.replaceAll("\\s+", " ");//remove multiple spaces - if (truncated.length() < maxLength) return truncated; - truncated = truncated.replaceAll("([.!@#$%^&-=':;,<>?*\"/|])+", "");//remove multiple spaces - if (truncated.length() < maxLength) return truncated; - truncated = truncated.replaceAll("([aeiou])+", "");//remove multiple spaces - if (truncated.length() < maxLength) return truncated; - truncated = truncated.replaceAll("([AEIOU])+", "");//remove multiple spaces - if (truncated.length() < maxLength) return truncated; - - if (text.length() > maxLength) return String.format("%s...", text.substring(0, maxLength)); - return text; - - } - - @Override - public UUID getEmptyUUID() { - return new UUID(0L, 0L); - } - - @Override - public boolean isNullOrEmpty(String value) { - return value == null || value.isEmpty(); - } - - @Override - public boolean isListNullOrEmpty(List value) { - if(value == null) return true; - return value.isEmpty(); - } - - @Override - public String stringEmpty() { - return ""; - } - - @Override - public String asPrefix(String name) { - if (name == null) return null; - return name + "."; - } - - @Override - public String asIndexer(String... names) { - if (names == null) return null; - return String.join(".", Arrays.stream(names).filter(x -> !this.isNullOrEmpty(x)).collect(Collectors.toList())); - } - - @Override - public String asIndexerPrefix(String part) { - if (part == null) return null; - return part + "."; - } - - @Override - public Map> toDictionaryOfList(List items, Function keySelector) { - Map> map = new HashMap<>(); - for (V model : items) { - K key = keySelector.apply(model); - if (!map.containsKey(key)) map.put(key, new ArrayList()); - map.get(key).add(model); - } - return map; - } -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/data/BaseEntity.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/data/BaseEntity.java deleted file mode 100644 index 0ab78b405..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/data/BaseEntity.java +++ /dev/null @@ -1,5 +0,0 @@ -package eu.old.eudat.data; - -public interface BaseEntity { - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/data/DescriptionTemplateTypeEntity.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/data/DescriptionTemplateTypeEntity.java deleted file mode 100644 index c855b8e43..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/data/DescriptionTemplateTypeEntity.java +++ /dev/null @@ -1,54 +0,0 @@ -package eu.old.eudat.data; - -import org.hibernate.annotations.GenericGenerator; - -import jakarta.persistence.*; -import java.util.UUID; - -@Entity -@Table(name = "DescriptionTemplateType") -public class DescriptionTemplateTypeEntity implements BaseEntity { - - @Id - @GeneratedValue - @GenericGenerator(name = "uuid2", strategy = "uuid2") - @Column(name = "ID", updatable = false, nullable = false, columnDefinition = "BINARY(16)") - private UUID id; - - public static final String _id = "ID"; - - @Column(name = "Name", nullable = false) - private String name; - - public static final String _name = "Name"; - - @Column(name = "Status", nullable = false) - private Short status; - - public static final String _status = "Status"; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public Short getStatus() { - return status; - } - - public void setStatus(Short status) { - this.status = status; - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorDescription.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorDescription.java deleted file mode 100644 index 272eb0745..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorDescription.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.old.eudat.errorcode; - -public class ErrorDescription { - - private int code; - - private String message; - - public int getCode() { - return code; - } - - public void setCode(int code) { - this.code = code; - } - - public String getMessage() { - return message; - } - - public void setMessage(String message) { - this.message = message; - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusConfiguration.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusConfiguration.java deleted file mode 100644 index d51da6408..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusConfiguration.java +++ /dev/null @@ -1,12 +0,0 @@ -package eu.old.eudat.errorcode; - -import org.springframework.boot.context.properties.EnableConfigurationProperties; -import org.springframework.context.annotation.Configuration; - -@Configuration -@EnableConfigurationProperties(ErrorThesaurusProperties.class) -public class ErrorThesaurusConfiguration { - - - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusProperties.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusProperties.java deleted file mode 100644 index 66ef92303..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/errorcode/ErrorThesaurusProperties.java +++ /dev/null @@ -1,48 +0,0 @@ -package eu.old.eudat.errorcode; - -import org.springframework.boot.context.properties.ConfigurationProperties; - -@ConfigurationProperties(prefix = "error-thesaurus") -public class ErrorThesaurusProperties { - - private ErrorDescription systemError; - - public ErrorDescription getSystemError() { - return systemError; - } - - public void setSystemError(ErrorDescription systemError) { - this.systemError = systemError; - } - - private ErrorDescription forbidden; - - public ErrorDescription getForbidden() { - return forbidden; - } - - public void setForbidden(ErrorDescription forbidden) { - this.forbidden = forbidden; - } - - private ErrorDescription hashConflict; - - public ErrorDescription getHashConflict() { - return hashConflict; - } - - public void setHashConflict(ErrorDescription hashConflict) { - this.hashConflict = hashConflict; - } - - private ErrorDescription modelValidation; - - public ErrorDescription getModelValidation() { - return modelValidation; - } - - public void setModelValidation(ErrorDescription modelValidation) { - this.modelValidation = modelValidation; - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/DescriptionTemplateType.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/DescriptionTemplateType.java deleted file mode 100644 index 395eb1917..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/DescriptionTemplateType.java +++ /dev/null @@ -1,37 +0,0 @@ -package eu.old.eudat.model; - -import java.util.UUID; - -public class DescriptionTemplateType { - - private UUID id; - - private String name; - - private short status; - - public UUID getId() { - return id; - } - - public void setId(UUID id) { - this.id = id; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public short getStatus() { - return status; - } - - public void setStatus(short status) { - this.status = status; - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/BaseBuilder.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/BaseBuilder.java deleted file mode 100644 index c794d155d..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/BaseBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -package eu.old.eudat.model.builder; - -import eu.old.eudat.convention.ConventionService; -import gr.cite.tools.data.builder.Builder; -import gr.cite.tools.data.query.QueryBase; -import gr.cite.tools.fieldset.FieldSet; -import gr.cite.tools.logging.LoggerService; - -import java.time.Instant; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -public abstract class BaseBuilder implements Builder { - - protected final LoggerService logger; - - protected final ConventionService conventionService; - - public BaseBuilder( - ConventionService conventionService, - LoggerService logger - ) { - this.conventionService = conventionService; - this.logger = logger; - } - - public M build(FieldSet directives, D data) { - if (data == null) { - return null; - } - List models = this.build(directives == null ? getFullFieldSet() : directives, List.of(data)); - return models.stream().findFirst().orElse(null); - } - - public abstract List build(FieldSet directives, List data); - - public abstract FieldSet getFullFieldSet(); - - public Map asForeignKey(QueryBase query, FieldSet directives, Function keySelector) { - this.logger.trace("Building references from query"); - List data = query.collectAs(directives); - this.logger.trace("collected {} items to build", Optional.ofNullable(data).map(List::size).orElse(0)); - return this.asForeignKey(data, directives, keySelector); - } - - public Map asForeignKey(List data, FieldSet directives, Function keySelector) { - this.logger.trace("building references"); - List models = this.build(directives, data); - this.logger.trace("mapping {} build items from {} requested", Optional.ofNullable(models).map(List::size).orElse(0), Optional.ofNullable(data).map(List::size).orElse(0)); - assert models != null; - return models.stream().collect(Collectors.toMap(keySelector, o -> o)); - } - - public Map> asMasterKey(QueryBase query, FieldSet directives, Function keySelector) { - this.logger.trace("Building details from query"); - List data = query.collectAs(directives); - this.logger.trace("collected {} items to build", Optional.ofNullable(data).map(List::size).orElse(0)); - return this.asMasterKey(data, directives, keySelector); - } - - public Map> asMasterKey(List data, FieldSet directives, Function keySelector) { - this.logger.trace("building details"); - List models = this.build(directives, data); - this.logger.trace("mapping {} build items from {} requested", Optional.ofNullable(models).map(List::size).orElse(0), Optional.ofNullable(data).map(List::size).orElse(0)); - Map> map = new HashMap<>(); - assert models != null; - for (M model : models) { - K key = keySelector.apply(model); - if (!map.containsKey(key)) - map.put(key, new ArrayList()); - map.get(key).add(model); - } - return map; - } - - public Map asEmpty(List keys, Function mapper, Function keySelector) { - this.logger.trace("building static references"); - List models = keys.stream().map(mapper).collect(Collectors.toList()); - this.logger.trace("mapping {} build items from {} requested", Optional.of(models).map(List::size).orElse(0), Optional.of(keys).map(List::size)); - return models.stream().collect(Collectors.toMap(keySelector, o -> o)); - } - - protected String hashValue(Instant value) { - return this.conventionService.hashValue(value); - } - - protected String asPrefix(String name) { - return this.conventionService.asPrefix(name); - } - - protected String asIndexer(String... names) { - return this.conventionService.asIndexer(names); - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/DescriptionTemplateTypeBuilder.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/DescriptionTemplateTypeBuilder.java deleted file mode 100644 index 435f4cda9..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/builder/DescriptionTemplateTypeBuilder.java +++ /dev/null @@ -1,56 +0,0 @@ -package eu.old.eudat.model.builder; - -import eu.old.eudat.convention.ConventionService; -import eu.old.eudat.data.DescriptionTemplateTypeEntity; -import eu.old.eudat.model.DescriptionTemplateType; -import gr.cite.tools.fieldset.BaseFieldSet; -import gr.cite.tools.fieldset.FieldSet; -import gr.cite.tools.logging.LoggerService; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Component; - -import java.util.ArrayList; -import java.util.List; -import java.util.Set; - -@Component -public class DescriptionTemplateTypeBuilder extends BaseBuilder { - - public DescriptionTemplateTypeBuilder(ConventionService conventionService) { - super(conventionService, new LoggerService(LoggerFactory.getLogger(DescriptionTemplateTypeBuilder.class))); - } - - @Override - public List build(FieldSet directives, List data) { - if (directives == null || directives.isEmpty()) - return new ArrayList<>(); - - List models = new ArrayList<>(100); - - if (data == null) - return models; - for (DescriptionTemplateTypeEntity d : data) { - DescriptionTemplateType m = new DescriptionTemplateType(); - if (directives.hasField(this.asIndexer(DescriptionTemplateTypeEntity._id))) - m.setId(d.getId()); - if (directives.hasField(this.asIndexer(DescriptionTemplateTypeEntity._name))) - m.setName(d.getName()); - if (directives.hasField(this.asIndexer(DescriptionTemplateTypeEntity._status))) - m.setStatus(d.getStatus()); - models.add(m); - } - - return models; - } - - @Override - public FieldSet getFullFieldSet() { - BaseFieldSet fieldSet = new BaseFieldSet(); - fieldSet.setFields(Set.of( - DescriptionTemplateTypeEntity._id, - DescriptionTemplateTypeEntity._name, - DescriptionTemplateTypeEntity._status - )); - return fieldSet; - } -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/result/QueryResult.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/result/QueryResult.java deleted file mode 100644 index c025361c8..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/model/result/QueryResult.java +++ /dev/null @@ -1,71 +0,0 @@ -package eu.old.eudat.model.result; - -import java.util.ArrayList; -import java.util.List; - -public class QueryResult { - - public QueryResult() { - } - - public QueryResult(List items, long count, long countOverride) { - this.items = items; - this.count = count; - this.countOverride = countOverride; - } - - public QueryResult(List items, long count) { - this.items = items; - this.count = count; - this.countOverride = 0; - } - - public QueryResult(M item) { - this.items = List.of(item); - this.count = 1; - this.countOverride = 0; - } - - public QueryResult(List items) { - this.items = items; - if (items != null) - this.count = items.size(); - else - this.count = 0; - } - - private List items; - - private long count; - - private long countOverride; - - public List getItems() { - return items; - } - - public void setItems(List items) { - this.items = items; - } - - public long getCount() { - return count; - } - - public void setCount(long count) { - this.count = count; - } - - public long getCountOverride() { - return countOverride; - } - - public void setCountOverride(long countOverride) { - this.countOverride = countOverride; - } - - public static QueryResult empty() { - return new QueryResult<>(new ArrayList<>(), 0L); - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/DescriptionTemplateTypeQuery.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/DescriptionTemplateTypeQuery.java deleted file mode 100644 index 75c84453f..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/DescriptionTemplateTypeQuery.java +++ /dev/null @@ -1,132 +0,0 @@ -package eu.old.eudat.query; - -import eu.old.eudat.commons.enums.DescriptionTemplateTypeStatus; -import eu.old.eudat.data.DescriptionTemplateTypeEntity; -import eu.old.eudat.query.lookup.DescriptionTemplateTypeLookup; -import eu.old.eudat.query.lookup.LookupAware; -import gr.cite.tools.data.query.FieldResolver; -import gr.cite.tools.data.query.QueryBase; -import gr.cite.tools.data.query.QueryContext; -import jakarta.persistence.Tuple; -import jakarta.persistence.criteria.CriteriaBuilder; -import jakarta.persistence.criteria.Predicate; -import org.springframework.beans.factory.config.ConfigurableBeanFactory; -import org.springframework.context.annotation.Scope; -import org.springframework.stereotype.Component; - -import java.util.*; - -@Component -@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE) -public class DescriptionTemplateTypeQuery extends QueryBase implements LookupAware { - - private Collection ids; - - private Collection names; - - private Collection statuses; - - public DescriptionTemplateTypeQuery ids(UUID value) { - this.ids = List.of(value); - return this; - } - - public DescriptionTemplateTypeQuery ids(UUID... value) { - this.ids = Arrays.asList(value); - return this; - } - - public DescriptionTemplateTypeQuery ids(List value) { - this.ids = value; - return this; - } - - public DescriptionTemplateTypeQuery names(String value) { - this.names = List.of(value); - return this; - } - - public DescriptionTemplateTypeQuery names(String... value) { - this.names = Arrays.asList(value); - return this; - } - - public DescriptionTemplateTypeQuery names(List value) { - this.names = value; - return this; - } - - public DescriptionTemplateTypeQuery statuses(Short value) { - this.statuses = List.of(value); - return this; - } - - public DescriptionTemplateTypeQuery statuses(Short... value) { - this.statuses = Arrays.asList(value); - return this; - } - - public DescriptionTemplateTypeQuery statuses(List value) { - this.statuses = value; - return this; - } - - @Override - public DescriptionTemplateTypeQuery fromLookup(DescriptionTemplateTypeLookup lookup) { - if (lookup == null) return this; - if (lookup.getName() != null) names(lookup.getName()); - if (lookup.getStatus() != null) statuses(DescriptionTemplateTypeStatus.fromLabel(lookup.getStatus()).getValue()); - return this; - } - - @Override - protected Boolean isFalseQuery() { - return Boolean.FALSE; - } - - @Override - protected Class entityClass() { - return DescriptionTemplateTypeEntity.class; - } - - @Override - protected Predicate applyFilters(QueryContext queryContext) { - List predicates = new ArrayList<>(); - - if (this.ids != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionTemplateTypeEntity._id)); - for (UUID item : this.ids) inClause.value(item); - predicates.add(inClause); - } - - if (this.names != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionTemplateTypeEntity._name)); - for (String item : this.names) inClause.value(item); - predicates.add(inClause); - } - - if (this.statuses != null) { - CriteriaBuilder.In inClause = queryContext.CriteriaBuilder.in(queryContext.Root.get(DescriptionTemplateTypeEntity._status)); - for (Short item : this.statuses) inClause.value(item); - predicates.add(inClause); - } - - if (!predicates.isEmpty()) { - Predicate[] predicatesArray = predicates.toArray(new Predicate[0]); - return queryContext.CriteriaBuilder.and(predicatesArray); - } else { - return queryContext.CriteriaBuilder.and(); - } - } - - @Override - protected String fieldNameOf(FieldResolver item) { - return null; - } - - @Override - protected DescriptionTemplateTypeEntity convert(Tuple tuple, Set columns) { - return null; - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/DescriptionTemplateTypeLookup.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/DescriptionTemplateTypeLookup.java deleted file mode 100644 index 03818a346..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/DescriptionTemplateTypeLookup.java +++ /dev/null @@ -1,25 +0,0 @@ -package eu.old.eudat.query.lookup; - -import gr.cite.tools.data.query.Lookup; - -public class DescriptionTemplateTypeLookup extends Lookup { - - private String name, status; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public String getStatus() { - return status; - } - - public void setStatus(String status) { - this.status = status; - } - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/LookupAware.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/LookupAware.java deleted file mode 100644 index a0b4ce6bd..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/query/lookup/LookupAware.java +++ /dev/null @@ -1,12 +0,0 @@ -package eu.old.eudat.query.lookup; - -public interface LookupAware { - - /** - * Every query that supports building from a lookup object should implement this interface - * @param lookup The object containing all the lookup options - * @return The query built from all the set options - */ - Q fromLookup(L lookup); - -} diff --git a/dmp-migration-tool/core/src/main/java/eu/old/eudat/service/DescriptionTemplateTypeService.java b/dmp-migration-tool/core/src/main/java/eu/old/eudat/service/DescriptionTemplateTypeService.java deleted file mode 100644 index d1e80e662..000000000 --- a/dmp-migration-tool/core/src/main/java/eu/old/eudat/service/DescriptionTemplateTypeService.java +++ /dev/null @@ -1,101 +0,0 @@ -package eu.old.eudat.service; - -import eu.old.eudat.commons.enums.DescriptionTemplateTypeStatus; -import eu.old.eudat.data.DescriptionTemplateTypeEntity; -import eu.old.eudat.model.DescriptionTemplateType; -import eu.old.eudat.model.builder.DescriptionTemplateTypeBuilder; -import eu.old.eudat.query.DescriptionTemplateTypeQuery; -import eu.old.eudat.query.lookup.DescriptionTemplateTypeLookup; -import gr.cite.tools.data.builder.BuilderFactory; -import org.springframework.context.ApplicationContext; -import org.springframework.stereotype.Service; -import org.springframework.transaction.PlatformTransactionManager; -import org.springframework.transaction.TransactionDefinition; -import org.springframework.transaction.TransactionStatus; -import org.springframework.transaction.support.DefaultTransactionDefinition; - -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; -import java.util.List; -import java.util.UUID; - -@Service -public class DescriptionTemplateTypeService { - - private final ApplicationContext applicationContext; - - private final BuilderFactory builderFactory; - - private final PlatformTransactionManager transactionManager; - - @PersistenceContext - private EntityManager entityManager; - - public DescriptionTemplateTypeService(ApplicationContext applicationContext, BuilderFactory builderFactory, PlatformTransactionManager platformTransactionManager) { - this.applicationContext = applicationContext; - this.builderFactory = builderFactory; - this.transactionManager = platformTransactionManager; - } - - public List getAll(DescriptionTemplateTypeLookup lookup) { - DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class); - return builderFactory - .builder(DescriptionTemplateTypeBuilder.class) - .build(lookup.getProject(), query.fromLookup(lookup).collect()); - } - - public DescriptionTemplateType getById(UUID id) { - DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class); - return builderFactory - .builder(DescriptionTemplateTypeBuilder.class) - .build(null, query.ids(id).first()); - } - - public DescriptionTemplateType create(DescriptionTemplateType payload) { - DescriptionTemplateTypeEntity created = new DescriptionTemplateTypeEntity(); - created.setId(UUID.randomUUID()); - created.setName(payload.getName()); - created.setStatus(DescriptionTemplateTypeStatus.SAVED.getValue()); - - DefaultTransactionDefinition definition = new DefaultTransactionDefinition(); - definition.setName(UUID.randomUUID().toString()); - definition.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED); - definition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); - TransactionStatus status = null; - try { - status = transactionManager.getTransaction(definition); - entityManager.persist(created); - - entityManager.flush(); - transactionManager.commit(status); - } catch (Exception ex) { - if (status != null) - transactionManager.rollback(status); - throw ex; - } - - DescriptionTemplateTypeQuery query = applicationContext.getBean(DescriptionTemplateTypeQuery.class); - return builderFactory - .builder(DescriptionTemplateTypeBuilder.class) - .build(null, query.ids(created.getId()).first()); - } - - public DescriptionTemplateType update(DescriptionTemplateType payload) { - DescriptionTemplateTypeEntity entity = entityManager.find(DescriptionTemplateTypeEntity.class, payload.getId()); - entity.setName(payload.getName()); - entity.setStatus(payload.getStatus()); - entityManager.merge(entity); - entityManager.flush(); - return builderFactory.builder(DescriptionTemplateTypeBuilder.class).build(null, entity); - } - - public boolean delete (UUID id) { - DescriptionTemplateTypeEntity entity = entityManager.find(DescriptionTemplateTypeEntity.class, id); - if (entity == null) return false; - entity.setStatus(DescriptionTemplateTypeStatus.DELETED.getValue()); - entityManager.merge(entity); - entityManager.flush(); - return true; - } - -} diff --git a/dmp-migration-tool/data/src/main/java/eu/old/eudat/query/DatasetProfileQuery.java b/dmp-migration-tool/data/src/main/java/eu/old/eudat/query/DatasetProfileQuery.java index a73a5f97d..0291268bc 100644 --- a/dmp-migration-tool/data/src/main/java/eu/old/eudat/query/DatasetProfileQuery.java +++ b/dmp-migration-tool/data/src/main/java/eu/old/eudat/query/DatasetProfileQuery.java @@ -1,18 +1,15 @@ package eu.old.eudat.query; -import eu.eudat.query.UserQuery; - -import java.util.UUID; public class DatasetProfileQuery { - private UserQuery userQuery; + private OldUserQuery userQuery; - public UserQuery getUserQuery() { + public OldUserQuery getUserQuery() { return userQuery; } - public void setUserQuery(UserQuery userQuery) { + public void setUserQuery(OldUserQuery userQuery) { this.userQuery = userQuery; } } diff --git a/dmp-migration-tool/pom.xml b/dmp-migration-tool/pom.xml index 5d693e51f..cbacdf72c 100644 --- a/dmp-migration-tool/pom.xml +++ b/dmp-migration-tool/pom.xml @@ -18,14 +18,13 @@ web data elastic - core 1.19.0 1.19.0 0.2.0 - 17 + 21 0.0.1-SNAPSHOT diff --git a/dmp-migration-tool/web/pom.xml b/dmp-migration-tool/web/pom.xml index df81b7b06..832bb7400 100644 --- a/dmp-migration-tool/web/pom.xml +++ b/dmp-migration-tool/web/pom.xml @@ -229,8 +229,8 @@ maven-compiler-plugin 3.8.1 - 17 - 17 + 21 + 21 @@ -276,7 +276,7 @@ eu.old.eudat.EuDatApplication 4.0.1 - 17 - 17 + 21 + 21 \ No newline at end of file From dc381c197df5bcd00d2417ed46e4fc1f49ecbb22 Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Tue, 21 Nov 2023 17:33:54 +0200 Subject: [PATCH 09/15] Adding properties to the migrated dmps --- .../migration/MigrationController.java | 50 +++++++++++++++---- 1 file changed, 39 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 2fad20958..2a9697bc1 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 @@ -1,15 +1,20 @@ package eu.old.eudat.publicapi.migration; +import com.fasterxml.jackson.core.JsonProcessingException; +import eu.eudat.commons.JsonHandlingService; import eu.eudat.commons.enums.*; +import eu.eudat.commons.types.dmp.DmpBlueprintValueEntity; +import eu.eudat.commons.types.dmp.DmpContactEntity; +import eu.eudat.commons.types.dmp.DmpPropertiesEntity; import eu.eudat.data.DmpEntity; import eu.eudat.data.ReferenceEntity; -import eu.old.eudat.data.dao.criteria.DataManagementPlanCriteria; -import eu.old.eudat.data.dao.criteria.OrganisationCriteria; -import eu.old.eudat.data.dao.entities.DMPDao; +import eu.eudat.model.persist.dmpproperties.DmpBlueprintValuePersist; +import eu.eudat.model.persist.dmpproperties.DmpPropertiesPersist; import eu.old.eudat.data.entities.DMP; import eu.old.eudat.data.entities.Organisation; import eu.old.eudat.logic.services.operations.DatabaseRepository; import eu.old.eudat.models.data.dmp.DataManagementPlan; +import eu.old.eudat.models.data.dynamicfields.DynamicFieldWithValue; import eu.old.eudat.queryable.QueryableList; import io.swagger.annotations.Api; import jakarta.persistence.EntityManager; @@ -17,6 +22,7 @@ import jakarta.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; +import java.time.Instant; import java.util.ArrayList; import java.util.List; import java.util.UUID; @@ -29,11 +35,14 @@ public class MigrationController { private final DatabaseRepository databaseRepository; + private final JsonHandlingService jsonHandlingService; + @PersistenceContext private final EntityManager entityManager; - public MigrationController(DatabaseRepository databaseRepository, EntityManager entityManager) { + public MigrationController(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager) { this.databaseRepository = databaseRepository; + this.jsonHandlingService = jsonHandlingService; this.entityManager = entityManager; } @@ -66,18 +75,21 @@ public class MigrationController { } @GetMapping("dmps/collectInfo") - public List collectDmpsInfo() { + 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<>()); + //Collect basic dmp information DmpEntity dmpEntity = new DmpEntity(); dmpEntity.setId(UUID.randomUUID()); dmpEntity.setLabel(dataManagementPlan.getLabel()); dmpEntity.setDescription(dataManagementPlan.getDescription()); - dmpEntity.setAccessType(dataManagementPlan.getPublic() ? DmpAccessType.Public : DmpAccessType.Restricted); if (dataManagementPlan.getCreator() != null) dmpEntity.setCreatorId(dataManagementPlan.getCreator().getId()); dmpEntity.setGroupId(dataManagementPlan.getGroupId()); @@ -90,20 +102,36 @@ public class MigrationController { if (dataManagementPlan.getFinalized() != null) dmpEntity.setFinalizedAt(dataManagementPlan.getFinalized().toInstant()); dmpEntity.setBlueprintId(dataManagementPlan.getProfile().getId()); - if (dataManagementPlan.getExtraProperties().containsKey("language") && dataManagementPlan.getExtraProperties().get("language") != null) - dmpEntity.setLanguage((String) dataManagementPlan.getExtraProperties().get("language")); + 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); } 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; @@ -111,7 +139,7 @@ public class MigrationController { @GetMapping("dmps/migrate") @Transactional - public String migrate() { + public String migrate() throws JsonProcessingException { for (DmpMigrationCollectedInfo collectedInfo : collectDmpsInfo()) { this.entityManager.persist(collectedInfo.dmpEntity); } From a7f70568bbf4c3dbf7c5de243e7c7bcd1efcf837 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Tue, 21 Nov 2023 18:33:26 +0200 Subject: [PATCH 10/15] migrate organization reference --- .../OrganizationMigrationService.java | 72 +++++++++++++++++++ .../migration/MigrationController.java | 17 +++-- .../main/resources/logging/logback-devel.xml | 6 +- 3 files changed, 89 insertions(+), 6 deletions(-) create mode 100644 dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/OrganizationMigrationService.java 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 new file mode 100644 index 000000000..d4191503b --- /dev/null +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/OrganizationMigrationService.java @@ -0,0 +1,72 @@ +package eu.old.eudat.migration; + +import eu.eudat.commons.enums.IsActive; +import eu.eudat.commons.enums.ReferenceSourceType; +import eu.eudat.commons.enums.ReferenceType; +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; +import jakarta.persistence.EntityManager; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class OrganizationMigrationService { + private static final LoggerService logger = new LoggerService(LoggerFactory.getLogger(OrganizationMigrationService.class)); + + private static final int PageSize = 100; + private static final String InternalReferenceSource = "Internal"; + private final DatabaseRepository databaseRepository; + private final EntityManager entityManager; + public OrganizationMigrationService(DatabaseRepository databaseRepository, EntityManager entityManager) { + this.databaseRepository = databaseRepository; + this.entityManager = entityManager; + } + + public void migrate(){ + OrganisationDao organisationDao = databaseRepository.getOrganisationDao(); + long total = organisationDao.asQueryable().count(); + logger.debug("Migrate Organisation Total : " + total); + int page = 0; + + List items; + do { + items = organisationDao.asQueryable().orderBy((builder, root) -> builder.desc(root.get("created"))).skip(page * PageSize).take(PageSize).toList(); + if (items != null && !items.isEmpty()) { + logger.debug("Migrate Organisation " + page * PageSize + " of " + total); + for (Organisation item : items) { + eu.old.eudat.models.data.dmp.Organisation model = new eu.old.eudat.models.data.dmp.Organisation().fromDataModel(item); + + if (item.getReference() == null || !item.getReference().contains(":")){ + logger.debug("Can not migrate Organisation " + item.getId()); + continue; + } + String[] referenceParts = item.getReference().split(":", 2); + boolean isInternal = referenceParts[0].equals(InternalReferenceSource); + + 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.setType(ReferenceType.Organizations); + data.setCreatedAt(item.getCreated().toInstant()); + data.setUpdatedAt(item.getModified().toInstant()); + data.setReference(referenceParts[1]); + data.setAbbreviation(item.getAbbreviation()); + data.setSource(referenceParts[0]); + data.setSourceType(isInternal? ReferenceSourceType.Internal : ReferenceSourceType.External); + this.entityManager.persist(data); + } + this.entityManager.flush(); + + page++; + } + } while (items != null && !items.isEmpty()); + } +} 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 2fad20958..b5f97e34e 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,13 +2,10 @@ package eu.old.eudat.publicapi.migration; import eu.eudat.commons.enums.*; import eu.eudat.data.DmpEntity; -import eu.eudat.data.ReferenceEntity; -import eu.old.eudat.data.dao.criteria.DataManagementPlanCriteria; -import eu.old.eudat.data.dao.criteria.OrganisationCriteria; -import eu.old.eudat.data.dao.entities.DMPDao; import eu.old.eudat.data.entities.DMP; import eu.old.eudat.data.entities.Organisation; import eu.old.eudat.logic.services.operations.DatabaseRepository; +import eu.old.eudat.migration.OrganizationMigrationService; import eu.old.eudat.models.data.dmp.DataManagementPlan; import eu.old.eudat.queryable.QueryableList; import io.swagger.annotations.Api; @@ -32,9 +29,12 @@ public class MigrationController { @PersistenceContext private final EntityManager entityManager; - public MigrationController(DatabaseRepository databaseRepository, EntityManager entityManager) { + private final OrganizationMigrationService organizationMigrationService; + + public MigrationController(DatabaseRepository databaseRepository, EntityManager entityManager, OrganizationMigrationService organizationMigrationService) { this.databaseRepository = databaseRepository; this.entityManager = entityManager; + this.organizationMigrationService = organizationMigrationService; } public QueryableList dmpQueryableList() { @@ -119,6 +119,13 @@ public class MigrationController { return "Migrated dmps"; } + @GetMapping("organizations/migrate") + @Transactional + public boolean migrateOrganizations() { + this.organizationMigrationService.migrate(); + return true; + } + public static class DmpMigrationCollectedInfo { public DmpEntity dmpEntity; diff --git a/dmp-migration-tool/web/src/main/resources/logging/logback-devel.xml b/dmp-migration-tool/web/src/main/resources/logging/logback-devel.xml index ddf6798c2..df18ee6fc 100644 --- a/dmp-migration-tool/web/src/main/resources/logging/logback-devel.xml +++ b/dmp-migration-tool/web/src/main/resources/logging/logback-devel.xml @@ -25,7 +25,11 @@ - + + + + + From 17b0f9bc06ef7204fa86923541365eaca5f0532d Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Wed, 22 Nov 2023 10:24:30 +0200 Subject: [PATCH 11/15] Dmp migration refactored on DmpMigrationService --- .../eudat/migration/DmpMigrationService.java | 138 ++++++++++++++++++ .../models/data/dmp/DataManagementPlan.java | 18 ++- .../migration/MigrationController.java | 129 +--------------- 3 files changed, 156 insertions(+), 129 deletions(-) create mode 100644 dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java 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 new file mode 100644 index 000000000..5a176a6a2 --- /dev/null +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/migration/DmpMigrationService.java @@ -0,0 +1,138 @@ +package eu.old.eudat.migration; + +import com.fasterxml.jackson.core.JsonProcessingException; +import eu.eudat.commons.JsonHandlingService; +import eu.eudat.commons.enums.DmpAccessType; +import eu.eudat.commons.enums.DmpStatus; +import eu.eudat.commons.enums.DmpVersionStatus; +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.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; +import java.util.List; +import java.util.UUID; + +@Service +public class DmpMigrationService { + + private final DatabaseRepository databaseRepository; + + private final JsonHandlingService jsonHandlingService; + + private final EntityManager entityManager; + + public DmpMigrationService(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager) { + this.databaseRepository = databaseRepository; + this.jsonHandlingService = jsonHandlingService; + this.entityManager = entityManager; + } + + public QueryableList dmpQueryableList() { + return databaseRepository.getDmpDao().asQueryable(); + } + + public List getDmps(@PathVariable("skip") Integer skip, @PathVariable("take") 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 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<>()); + + //Collect basic dmp information + DmpEntity dmpEntity = new DmpEntity(); + dmpEntity.setId(UUID.randomUUID()); + 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); + } 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; + } + + @Transactional + 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/models/data/dmp/DataManagementPlan.java b/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/dmp/DataManagementPlan.java index fa779017c..1c9a7f2e7 100644 --- a/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/dmp/DataManagementPlan.java +++ b/dmp-migration-tool/web/src/main/java/eu/old/eudat/models/data/dmp/DataManagementPlan.java @@ -14,7 +14,7 @@ import eu.old.eudat.models.data.grant.Grant; import eu.old.eudat.models.data.project.Project; import eu.old.eudat.models.data.userinfo.UserListingModel; import eu.old.eudat.models.data.userinfo.UserInfo; -import net.minidev.json.JSONObject; +import org.json.JSONObject; import java.util.*; import java.util.stream.Collectors; @@ -257,7 +257,15 @@ public class DataManagementPlan implements DataModel { this.version = entity.getVersion(); this.groupId = this.groupId == null ? null : entity.getGroupId(); this.label = entity.getLabel(); - this.properties = entity.getProperties() != null ? new org.json.JSONObject(entity.getProperties()).toMap() : null; + if (entity.getProperties() != null) { + JSONObject propertiesJson = new JSONObject(entity.getProperties()); + if (propertiesJson.has("fields")) { + //Ignore, the format won't be on the real database, only on our dev database + this.properties = new HashMap<>(); + } else { + this.properties = propertiesJson.toMap(); + } + } if(entity.getGrant() != null) { this.grant = new eu.old.eudat.models.data.grant.Grant(); this.grant.fromDataModel(entity.getGrant()); @@ -368,18 +376,18 @@ public class DataManagementPlan implements DataModel { if(this.extraFields != null) { this.properties = this.extraFields.stream().collect(Collectors.toMap(ExtraFieldModel::getId, ExtraFieldModel::getValue)); } - dataManagementPlanEntity.setProperties(this.properties != null ? JSONObject.toJSONString(this.properties) : null); + dataManagementPlanEntity.setProperties(this.properties != null ? JSONObject.valueToString(this.properties) : null); dataManagementPlanEntity.setGroupId(this.groupId != null ? this.groupId : UUID.randomUUID()); dataManagementPlanEntity.setModified(this.modified != null ? this.modified : new Date()); dataManagementPlanEntity.setCreated(this.created != null ? this.created : new Date()); if (this.dynamicFields != null) - dataManagementPlanEntity.setDmpProperties(JSONObject.toJSONString(this.dynamicFields.stream().filter(item -> item.getValue() != null).collect(Collectors.toMap(DynamicFieldWithValue::getId, DynamicFieldWithValue::getValue)))); + dataManagementPlanEntity.setDmpProperties(JSONObject.valueToString(this.dynamicFields.stream().filter(item -> item.getValue() != null).collect(Collectors.toMap(DynamicFieldWithValue::getId, DynamicFieldWithValue::getValue)))); if (this.isPublic != null) { dataManagementPlanEntity.setPublic(this.isPublic); } - dataManagementPlanEntity.setExtraProperties(this.extraProperties != null ? JSONObject.toJSONString(this.extraProperties) : null); + dataManagementPlanEntity.setExtraProperties(this.extraProperties != null ? JSONObject.valueToString(this.extraProperties) : null); return dataManagementPlanEntity; } 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 d08300853..053efd6af 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,148 +2,35 @@ package eu.old.eudat.publicapi.migration; import com.fasterxml.jackson.core.JsonProcessingException; import eu.eudat.commons.JsonHandlingService; -import eu.eudat.commons.enums.*; -import eu.eudat.commons.types.dmp.DmpBlueprintValueEntity; -import eu.eudat.commons.types.dmp.DmpContactEntity; -import eu.eudat.commons.types.dmp.DmpPropertiesEntity; import eu.eudat.data.DmpEntity; -import eu.old.eudat.data.entities.DMP; -import eu.old.eudat.data.entities.Organisation; import eu.old.eudat.logic.services.operations.DatabaseRepository; +import eu.old.eudat.migration.DmpMigrationService; import eu.old.eudat.migration.OrganizationMigrationService; -import eu.old.eudat.models.data.dmp.DataManagementPlan; -import eu.old.eudat.queryable.QueryableList; import io.swagger.annotations.Api; import jakarta.persistence.EntityManager; import jakarta.persistence.PersistenceContext; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.bind.annotation.*; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; - @Api(tags = "Migration") @RestController @CrossOrigin @RequestMapping(value = {"/api/public/migration"}) public class MigrationController { - private final DatabaseRepository databaseRepository; - - private final JsonHandlingService jsonHandlingService; - - @PersistenceContext - private final EntityManager entityManager; + private final DmpMigrationService dmpMigrationService; private final OrganizationMigrationService organizationMigrationService; - public MigrationController(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager, OrganizationMigrationService organizationMigrationService) { - this.databaseRepository = databaseRepository; - this.jsonHandlingService = jsonHandlingService; - this.entityManager = entityManager; + public MigrationController(DatabaseRepository databaseRepository, JsonHandlingService jsonHandlingService, EntityManager entityManager, DmpMigrationService dmpMigrationService, OrganizationMigrationService organizationMigrationService) { + this.dmpMigrationService = dmpMigrationService; this.organizationMigrationService = organizationMigrationService; } - public QueryableList dmpQueryableList() { - return databaseRepository.getDmpDao().asQueryable(); - } - - public QueryableList organizationQueryableList() { - return databaseRepository.getOrganisationDao().asQueryable(); - } - - @GetMapping("dmps/all/count") - public Long count() { - return dmpQueryableList().count(); - } - - @GetMapping("dmps/all/{skip}/{take}") - public List getDmps(@PathVariable("skip") Integer skip, @PathVariable("take") 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(); - } - - @GetMapping("dmps/collectInfo") - 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<>()); - - //Collect basic dmp information - DmpEntity dmpEntity = new DmpEntity(); - dmpEntity.setId(UUID.randomUUID()); - 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); - } 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; - } - @GetMapping("dmps/migrate") @Transactional public String migrate() throws JsonProcessingException { - for (DmpMigrationCollectedInfo collectedInfo : collectDmpsInfo()) { - this.entityManager.persist(collectedInfo.dmpEntity); - } - this.entityManager.flush(); - return "Migrated dmps"; + return this.dmpMigrationService.migrate(); } @GetMapping("organizations/migrate") @@ -153,10 +40,4 @@ public class MigrationController { return true; } - public static class DmpMigrationCollectedInfo { - - public DmpEntity dmpEntity; - - } - } From ad75ee1238ad44582e9bc4efdb56d6dd6b706d4a Mon Sep 17 00:00:00 2001 From: Thomas Georgios Giannos Date: Wed, 22 Nov 2023 10:25:05 +0200 Subject: [PATCH 12/15] Small fix --- .../eu/old/eudat/publicapi/migration/MigrationController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 053efd6af..e892b23d1 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 @@ -29,7 +29,7 @@ public class MigrationController { @GetMapping("dmps/migrate") @Transactional - public String migrate() throws JsonProcessingException { + public String migrateDmps() throws JsonProcessingException { return this.dmpMigrationService.migrate(); } From c19920afb2528c3bb29ae5fe3b9b8453799c6009 Mon Sep 17 00:00:00 2001 From: amentis Date: Wed, 22 Nov 2023 10:29:29 +0200 Subject: [PATCH 13/15] add reference, referenceType, SupportiveMaterial --- ...rence_ReferenceType_SupportiveMaterial.sql | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 dmp-db-scema/updates/00.01.000_Add_Reference_ReferenceType_SupportiveMaterial.sql diff --git a/dmp-db-scema/updates/00.01.000_Add_Reference_ReferenceType_SupportiveMaterial.sql b/dmp-db-scema/updates/00.01.000_Add_Reference_ReferenceType_SupportiveMaterial.sql new file mode 100644 index 000000000..6657f1f06 --- /dev/null +++ b/dmp-db-scema/updates/00.01.000_Add_Reference_ReferenceType_SupportiveMaterial.sql @@ -0,0 +1,66 @@ +DO $$DECLARE + this_version CONSTANT varchar := '00.01.000'; +BEGIN + PERFORM * FROM "DBVersion" WHERE version = this_version; + IF FOUND THEN RETURN; END IF; + + CREATE TABLE public."Reference" + ( + id uuid NOT NULL, + label character varying(250) COLLATE pg_catalog."default" NOT NULL, + description text COLLATE pg_catalog."default", + abbreviation character varying(50) COLLATE pg_catalog."default", + source character varying(1024) COLLATE pg_catalog."default", + is_active smallint NOT NULL, + created_by uuid, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + type smallint NOT NULL, + definition character varying COLLATE pg_catalog."default", + reference character varying(1024) COLLATE pg_catalog."default" NOT NULL, + source_type smallint NOT NULL, + CONSTRAINT "Reference_pkey" PRIMARY KEY (id), + CONSTRAINT "Reference_created_by_fkey" FOREIGN KEY (created_by) + REFERENCES public."UserInfo" (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION + NOT VALID + ) + WITH ( + OIDS = FALSE + ); + + CREATE TABLE public."ReferenceType" + ( + id uuid NOT NULL, + name character varying(250) COLLATE pg_catalog."default" NOT NULL, + code character varying(100) COLLATE pg_catalog."default" NOT NULL, + definition character varying COLLATE pg_catalog."default" NOT NULL, + is_active smallint NOT NULL, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + CONSTRAINT "ReferenceType_pkey" PRIMARY KEY (id) + ) + WITH ( + OIDS = FALSE + ); + + CREATE TABLE public."SupportiveMaterial" + ( + id uuid NOT NULL, + type smallint NOT NULL, + language_code character varying(20) COLLATE pg_catalog."default" NOT NULL, + payload character varying COLLATE pg_catalog."default" NOT NULL, + created_at timestamp without time zone NOT NULL, + updated_at timestamp without time zone NOT NULL, + is_active smallint NOT NULL, + CONSTRAINT "SupportiveMaterial_pkey" PRIMARY KEY (id) + ) + WITH ( + OIDS = FALSE + ); + + +INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.000', '2023-11-22 12:00:00.000000+02', now(), 'Add Reference, ReferenceType, SupportiveMaterial'); + +END$$; \ No newline at end of file From 4187943654516e27ad936b16f1149667f21dd287 Mon Sep 17 00:00:00 2001 From: amentis Date: Wed, 22 Nov 2023 12:56:17 +0200 Subject: [PATCH 14/15] add reference type auth enabled --- .../AuthenticationConfigurationEntity.java | 10 ++ .../AuthenticationConfigurationBuilder.java | 1 + .../AuthenticationConfigurationPersist.java | 10 ++ .../AuthenticationConfiguration.java | 11 ++ .../ReferenceTypeServiceImpl.java | 1 + .../v2/ReferenceTypeController.java | 19 +++ .../model/reference-type/reference-type.ts | 2 + .../reference-type/reference-type.service.ts | 18 +++ .../reference-type-editor.component.html | 142 +++++++----------- .../editor/reference-type-editor.component.ts | 81 +++++----- .../editor/reference-type-editor.model.ts | 6 +- .../editor/reference-type-editor.resolver.ts | 1 + dmp-frontend/src/assets/i18n/en.json | 10 +- 13 files changed, 175 insertions(+), 137 deletions(-) diff --git a/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/AuthenticationConfigurationEntity.java b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/AuthenticationConfigurationEntity.java index 4ac464433..3990b2c1f 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/AuthenticationConfigurationEntity.java +++ b/dmp-backend/core/src/main/java/eu/eudat/commons/types/referencetype/AuthenticationConfigurationEntity.java @@ -5,6 +5,7 @@ import jakarta.xml.bind.annotation.XmlElement; public class AuthenticationConfigurationEntity { + private Boolean enabled; private String authUrl; private ReferenceTypeExternalApiHTTPMethodType authMethod; private String authTokenPath; @@ -15,6 +16,15 @@ public class AuthenticationConfigurationEntity { return authUrl; } + public Boolean getEnabled() { + return enabled; + } + + @XmlElement(name = "enabled") + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + @XmlElement(name = "authUrl") public void setAuthUrl(String authUrl) { this.authUrl = authUrl; diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/AuthenticationConfigurationBuilder.java b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/AuthenticationConfigurationBuilder.java index beadcd9f4..77b04d493 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/AuthenticationConfigurationBuilder.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/builder/referencetypedefinition/AuthenticationConfigurationBuilder.java @@ -49,6 +49,7 @@ public class AuthenticationConfigurationBuilder extends BaseBuilder models = new ArrayList<>(); for (AuthenticationConfigurationEntity d : data) { AuthenticationConfiguration m = new AuthenticationConfiguration(); + if (fields.hasField(this.asIndexer(AuthenticationConfiguration._enabled))) m.setEnabled(d.getEnabled()); if (fields.hasField(this.asIndexer(AuthenticationConfiguration._authUrl))) m.setAuthUrl(d.getAuthUrl()); if (fields.hasField(this.asIndexer(AuthenticationConfiguration._authMethod))) m.setAuthMethod(d.getAuthMethod()); if (fields.hasField(this.asIndexer(AuthenticationConfiguration._authTokenPath))) m.setAuthTokenPath(d.getAuthTokenPath()); diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/AuthenticationConfigurationPersist.java b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/AuthenticationConfigurationPersist.java index b687eb3ea..f3045b42d 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/AuthenticationConfigurationPersist.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/persist/referencetypedefinition/AuthenticationConfigurationPersist.java @@ -6,6 +6,8 @@ import jakarta.validation.constraints.NotNull; public class AuthenticationConfigurationPersist { + @NotNull(message = "{validation.empty}") + private Boolean enabled; @NotNull(message = "{validation.empty}") private String authUrl; @@ -19,6 +21,14 @@ public class AuthenticationConfigurationPersist { @NotNull(message = "{validation.empty}") private String type; + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + public String getAuthUrl() { return authUrl; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/AuthenticationConfiguration.java b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/AuthenticationConfiguration.java index be7385415..adef7b334 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/AuthenticationConfiguration.java +++ b/dmp-backend/core/src/main/java/eu/eudat/model/referencetypedefinition/AuthenticationConfiguration.java @@ -4,6 +4,9 @@ import eu.eudat.commons.enums.ReferenceTypeExternalApiHTTPMethodType; public class AuthenticationConfiguration { + public final static String _enabled = "enabled"; + private Boolean enabled; + public final static String _authUrl = "authUrl"; private String authUrl; @@ -19,6 +22,14 @@ public class AuthenticationConfiguration { public final static String _type = "type"; private String type; + public Boolean getEnabled() { + return enabled; + } + + public void setEnabled(Boolean enabled) { + this.enabled = enabled; + } + public String getAuthUrl() { return authUrl; } diff --git a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java index 3b09d5ca9..adcdbefa0 100644 --- a/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java +++ b/dmp-backend/core/src/main/java/eu/eudat/service/referencetype/ReferenceTypeServiceImpl.java @@ -223,6 +223,7 @@ public class ReferenceTypeServiceImpl implements ReferenceTypeService { AuthenticationConfigurationEntity data = new AuthenticationConfigurationEntity(); if (persist == null) return data; + data.setEnabled(persist.getEnabled()); data.setAuthUrl(persist.getAuthUrl()); data.setAuthMethod(persist.getAuthMethod()); data.setAuthRequestBody(persist.getAuthRequestBody()); diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java index 41eafff10..bd9107bac 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/v2/ReferenceTypeController.java @@ -107,6 +107,25 @@ public class ReferenceTypeController extends BaseController { return model; } + @GetMapping("code/{code}") + public ReferenceType get(@PathVariable("code") String code, FieldSet fieldSet) throws MyApplicationException, MyForbiddenException, MyNotFoundException { + logger.debug(new MapLogEntry("retrieving" + ReferenceType.class.getSimpleName()).And("code", code).And("fields", fieldSet)); + + this.censorFactory.censor(ReferenceTypeCensor.class).censor(fieldSet, null); + + ReferenceTypeQuery query = this.queryFactory.query(ReferenceTypeQuery.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).codes(code); + ReferenceType model = this.builderFactory.builder(ReferenceTypeBuilder.class).authorize(AuthorizationFlags.OwnerOrDmpAssociatedOrPermissionOrPublic).build(fieldSet, query.firstAs(fieldSet)); + if (model == null) + throw new MyNotFoundException(messageSource.getMessage("General_ItemNotFound", new Object[]{code, Reference.class.getSimpleName()}, LocaleContextHolder.getLocale())); + + this.auditService.track(AuditableAction.ReferenceType_Lookup, Map.ofEntries( + new AbstractMap.SimpleEntry("code", code), + new AbstractMap.SimpleEntry("fields", fieldSet) + )); + + return model; + } + @PostMapping("persist") @Transactional public ReferenceType persist(@MyValidate @RequestBody ReferenceTypePersist model, FieldSet fieldSet) throws MyApplicationException, MyForbiddenException, MyNotFoundException, InvalidApplicationException, JAXBException, JsonProcessingException, InvalidApplicationException { diff --git a/dmp-frontend/src/app/core/model/reference-type/reference-type.ts b/dmp-frontend/src/app/core/model/reference-type/reference-type.ts index 3feaad017..fb4804d96 100644 --- a/dmp-frontend/src/app/core/model/reference-type/reference-type.ts +++ b/dmp-frontend/src/app/core/model/reference-type/reference-type.ts @@ -55,6 +55,7 @@ export interface ResultFieldsMappingConfiguration{ } export interface AuthenticationConfiguration{ + enabled: boolean; authUrl: string; authMethod: ReferenceTypeExternalApiHTTPMethodType; authTokenPath: string; @@ -148,6 +149,7 @@ export interface ResultFieldsMappingConfigurationPersist{ } export interface AuthenticationConfigurationPersist{ + enabled: boolean; authUrl: string; authMethod: ReferenceTypeExternalApiHTTPMethodType; authTokenPath: string; diff --git a/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts b/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts index 8aebac210..831e7bf1a 100644 --- a/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts +++ b/dmp-frontend/src/app/core/services/reference-type/reference-type.service.ts @@ -40,6 +40,15 @@ export class ReferenceTypeService { catchError((error: any) => throwError(error))); } + getSingleWithCode(code: string, reqFields: string[] = []): Observable { + const url = `${this.apiBase}/code/${code}`; + const options = { params: { f: reqFields } }; + + return this.http + .get(url, options).pipe( + catchError((error: any) => throwError(error))); + } + persist(item: ReferenceTypePersist): Observable { const url = `${this.apiBase}/persist`; @@ -111,4 +120,13 @@ export class ReferenceTypeService { return lookup; } + + ///system fields + getSystemFields(fields: string[]): string[]{ + fields.push('reference_id'); + fields.push('label'); + fields.push('description'); + + return fields; + } } \ No newline at end of file diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html index 90eec2012..29c1fdd99 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.html @@ -240,8 +240,8 @@ {{'GENERAL.VALIDATION.REQUIRED' | translate}}
-
- +
+ {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUEST-BODY' | translate}} @@ -278,30 +278,10 @@
- -
{{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -321,50 +301,54 @@
-

{{'REFERENCE-TYPE-EDITOR.FIELDS.AUTHENTICATION' | translate}}

-
- - {{'REFERENCE-TYPE-EDITOR.FIELDS.URL' | translate}} - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - {{'REFERENCE-TYPE-EDITOR.FIELDS.HTTP-METHOD' | translate}} - - - {{enumUtils.toReferenceTypeExternalApiHTTPMethodTypeString(httpMethod)}} - - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - {{'REFERENCE-TYPE-EDITOR.FIELDS.TOKEN-PATH' | translate}} - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUEST-BODY' | translate}} - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - -
-
- - {{'REFERENCE-TYPE-EDITOR.FIELDS.TYPE' | translate}} - - - {{'GENERAL.VALIDATION.REQUIRED' | translate}} - +

{{'REFERENCE-TYPE-EDITOR.FIELDS.AUTHENTICATION' | translate}} + +

+
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.URL' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.HTTP-METHOD' | translate}} + + + {{enumUtils.toReferenceTypeExternalApiHTTPMethodTypeString(httpMethod)}} + + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.TOKEN-PATH' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.REQUEST-BODY' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +
+
+ + {{'REFERENCE-TYPE-EDITOR.FIELDS.TYPE' | translate}} + + + {{'GENERAL.VALIDATION.REQUIRED' | translate}} + +

{{'REFERENCE-TYPE-EDITOR.FIELDS.QUERIES' | translate}} @@ -439,30 +423,10 @@

-
{{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} - {{'GENERAL.VALIDATION.REQUIRED' | translate}} @@ -506,7 +470,7 @@
{{'REFERENCE-TYPE-EDITOR.FIELDS.CODE' | translate}} - + {{referenceType.code}} @@ -519,7 +483,7 @@ {{'REFERENCE-TYPE-EDITOR.FIELDS.KEY' | translate}} - + {{key}} @@ -570,7 +534,7 @@ {{'REFERENCE-TYPE-EDITOR.FIELDS.TARGET' | translate}} - + {{targetCode}} diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts index cce9f394f..be05146a4 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.component.ts @@ -29,7 +29,6 @@ import { DependencyPropertyEditorModel, QueryConfigEditorModel, ReferenceTypeEdi import { ReferenceFieldDataType } from '@app/core/common/enum/reference-field-data-type'; import { ReferenceTypeSourceType } from '@app/core/common/enum/reference-type-source-type'; import { ReferenceTypeExternalApiHTTPMethodType } from '@app/core/common/enum/reference-type-external-api-http-method-type'; -import { ReferenceTypeLookup } from '@app/core/query/reference-type.lookup'; @Component({ @@ -50,10 +49,11 @@ export class ReferenceTypeEditorComponent extends BaseEditor = new Map(); propertyCodes: string[] = []; targetPropertyCodes: string[] = []; + targetPropertyCodesMap: Map = new Map(); protected get canDelete(): boolean { return !this.isDeleted && !this.isNew && this.hasPermission(this.authService.permissionEnum.DeleteReferenceType); @@ -115,24 +115,16 @@ export class ReferenceTypeEditorComponent extends BaseEditor source.dependencies.forEach(dependency => { this.selectedReferenceTypeChanged(dependency.referenceTypeCode); })); - this.editorModel.definition.sources.forEach(source => { - if(source.type == ReferenceTypeSourceType.STATIC){ - source.options.forEach(option => { - if(!this.propertyCodes.includes(option.code)){ - this.propertyCodes.push(option.code); - } - }); - }else{ - source.results.fieldsMapping.forEach(fieldMapping => { - if(!this.propertyCodes.includes(fieldMapping.code)){ - this.propertyCodes.push(fieldMapping.code); - } - }); + + this.editorModel.definition.fields.forEach(field => { + if(!this.propertyCodes.includes(field.code)){ + this.propertyCodes.push(field.code); } }); } @@ -394,50 +386,55 @@ export class ReferenceTypeEditorComponent extends BaseEditor { this.referenceTypes = response.items as ReferenceType[]; + this.referenceTypes.forEach(referenceType =>{ + this.sourceKeysMap.set(referenceType.code, []); + this.targetPropertyCodesMap.set(referenceType.code, []); + }) }); } selectedReferenceTypeChanged(code: string): void{ - this.selectedReferenceTypeCode = code; this.sourceKeys = []; this.targetPropertyCodes = []; - const lookup = ReferenceTypeService.DefaultReferenceTypeLookup(); - lookup.codes = [this.selectedReferenceTypeCode]; - - this.referenceTypeService.query(lookup) + this.referenceTypeService.getSingleWithCode(code, ReferenceTypeEditorResolver.lookupFields()) .pipe(takeUntil(this._destroyed)) - .subscribe(response => { - if(response.count ==1){ - const referenceType = response.items[0] as ReferenceType; + .subscribe(data => { + const referenceType = data as ReferenceType; + + // source keys referenceType.definition.sources.forEach(source => { if(!this.sourceKeys.includes(source.key)) this.sourceKeys.push(source.key) - if(source.type == ReferenceTypeSourceType.API){ - source.results.fieldsMapping.forEach(target => { - if(!this.targetPropertyCodes.includes(target.code)) this.targetPropertyCodes.push(target.code) - }); - }else{ - source.options.forEach(target => { - if(!this.targetPropertyCodes.includes(target.code)) this.targetPropertyCodes.push(target.code) - }); - } }); - } - }); + + if(this.sourceKeysMap.has(code) && this.sourceKeysMap.get(code).length == 0){ + this.sourceKeysMap.set(code, this.sourceKeys); + } + + // targetPropertyCodes + + let fields = []; + if(referenceType.definition.fields) { + fields = this.referenceTypeService.getSystemFields(referenceType.definition.fields.map(x => x.code)); + }else{ + fields = this.referenceTypeService.getSystemFields(fields); + } + + fields.forEach(field => { + if(!this.targetPropertyCodes.includes(field)) this.targetPropertyCodes.push(field) + }) + + if(this.targetPropertyCodesMap.has(code) && this.targetPropertyCodesMap.get(code).length == 0){ + this.targetPropertyCodesMap.set(code, this.targetPropertyCodes); + } + + }); } // Properties addProperty(sourceIndex: number, dependencyIndex: number): void{ - const optionFormArray = ((this.formGroup.get('definition').get('sources') as FormArray).at(sourceIndex).get('options') as FormArray); - - for(let i =0; i < optionFormArray.length; i++){ - if(!this.propertyCodes.includes(optionFormArray.at(i).get('code').getRawValue())){ - this.propertyCodes.push(optionFormArray.at(i).get('code').getRawValue()); - } - } - if (((this.formGroup.get('definition').get('sources') as FormArray).at(sourceIndex).get('dependencies') as FormArray).at(dependencyIndex).get('referenceTypeCode').value == null){ return ; } diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts index fb155e84b..34fe57252 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.model.ts @@ -442,7 +442,7 @@ export class ResultFieldsMappingConfigurationEditorModel implements ResultFields } return this.formBuilder.group({ - code: [{ value: "code", disabled: true }, context.getValidation('code').validators], + code: [{ value: this.code, disabled: true }, context.getValidation('code').validators], responsePath: [{ value: this.responsePath, disabled: disabled }, context.getValidation('responsePath').validators], }); } @@ -464,6 +464,7 @@ export class ResultFieldsMappingConfigurationEditorModel implements ResultFields } export class AuthenticationConfigurationEditorModel implements AuthenticationConfigurationPersist { + public enabled: boolean; public authUrl: string; public authMethod: ReferenceTypeExternalApiHTTPMethodType; public authTokenPath: string; @@ -477,6 +478,7 @@ export class AuthenticationConfigurationEditorModel implements AuthenticationCon ) { } fromModel(item: AuthenticationConfiguration): AuthenticationConfigurationEditorModel { + this.enabled = item.enabled; this.authUrl = item.authUrl; this.authMethod = item.authMethod; this.authTokenPath = item.authTokenPath; @@ -500,6 +502,7 @@ export class AuthenticationConfigurationEditorModel implements AuthenticationCon } return this.formBuilder.group({ + enabled: [{ value: this.enabled, disabled: disabled }, context.getValidation('enabled').validators], authUrl: [{ value: this.authUrl, disabled: disabled }, context.getValidation('authUrl').validators], authMethod: [{ value: this.authMethod, disabled: disabled }, context.getValidation('authMethod').validators], authTokenPath: [{ value: this.authTokenPath, disabled: disabled }, context.getValidation('authTokenPath').validators], @@ -516,6 +519,7 @@ export class AuthenticationConfigurationEditorModel implements AuthenticationCon const baseContext: ValidationContext = new ValidationContext(); const baseValidationArray: Validation[] = new Array(); + baseValidationArray.push({ key: 'enabled', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}enabled`)] }); baseValidationArray.push({ key: 'authUrl', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}authUrl`)] }); baseValidationArray.push({ key: 'authMethod', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}authMethod`)] }); baseValidationArray.push({ key: 'authTokenPath', validators: [BackendErrorValidator(validationErrorModel, `${rootPath}authTokenPath`)] }); diff --git a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts index 119c0d0d5..eb5f16855 100644 --- a/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts +++ b/dmp-frontend/src/app/ui/admin/reference-type/editor/reference-type-editor.resolver.ts @@ -45,6 +45,7 @@ export class ReferenceTypeEditorResolver extends BaseEditorResolver { [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.requestBody)].join('.'), [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.filterType)].join('.'), + [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.auth),nameof(x => x.enabled)].join('.'), [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.auth),nameof(x => x.authUrl)].join('.'), [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.auth),nameof(x => x.authMethod)].join('.'), [nameof(x => x.definition), nameof(x => x.sources), nameof(x => x.auth),nameof(x => x.authTokenPath)].join('.'), diff --git a/dmp-frontend/src/assets/i18n/en.json b/dmp-frontend/src/assets/i18n/en.json index cafd8167c..ee4b62614 100644 --- a/dmp-frontend/src/assets/i18n/en.json +++ b/dmp-frontend/src/assets/i18n/en.json @@ -1162,13 +1162,13 @@ "REMOVE-DEPENDENCY": "Remove Dependency", "ADD-PROPERTY": "Add property", "REMOVE-PROPERTY": "Remove property" + }, + "CONFIRM-DELETE-DIALOG": { + "MESSAGE": "Would you like to delete this Reference type?", + "CONFIRM-BUTTON": "Yes, delete", + "CANCEL-BUTTON": "No" } }, - "CONFIRM-DELETE-DIALOG": { - "MESSAGE": "Would you like to delete this Reference type?", - "CONFIRM-BUTTON": "Yes, delete", - "CANCEL-BUTTON": "No" - }, "DMP-BLUEPRINT-EDITOR": { "TITLE": { "NEW": "New DMP Blueprint", From 6f2d4f016d26adca87b192fd7c0e1b0391fc84f7 Mon Sep 17 00:00:00 2001 From: sgiannopoulos Date: Wed, 22 Nov 2023 13:31:00 +0200 Subject: [PATCH 15/15] fix sql scripts --- .../00.01.002_Align_Entity_Doi_table.sql | 2 +- .../00.01.003_Add_UserSettings_table.sql | 2 +- .../updates/00.01.005_Add_Dmp_table.sql | 50 ++++++++++++------- .../00.01.006_Add_Dmp_reference_table.sql | 2 +- ...7_Add_Description_table_former_Dataset.sql | 2 +- ....01.008_Add_DescriptionReference_table.sql | 2 +- ...01.010_Align_DescriptionTemplate_table.sql | 2 + ...11_Align_UserDescriptionTemplate_table.sql | 42 ++++++++++------ ...012_Add_Dmp_description_template_table.sql | 2 +- .../updates/00.01.013_Add_Dmp_User_table.sql | 2 +- dmp-db-scema/updates/00.01.015_addTag.sql | 2 +- .../updates/00.01.022_updateUserFKs.sql | 14 +++--- 12 files changed, 75 insertions(+), 49 deletions(-) diff --git a/dmp-db-scema/updates/00.01.002_Align_Entity_Doi_table.sql b/dmp-db-scema/updates/00.01.002_Align_Entity_Doi_table.sql index b591c6648..dddc01fa7 100644 --- a/dmp-db-scema/updates/00.01.002_Align_Entity_Doi_table.sql +++ b/dmp-db-scema/updates/00.01.002_Align_Entity_Doi_table.sql @@ -26,7 +26,7 @@ ALTER TABLE public."EntityDoi" RENAME "EntityId" TO entity_id; ALTER TABLE public."EntityDoi" - ADD COLUMN is_active smallint NOT NULL DEFAULT 1 + ADD COLUMN is_active smallint NOT NULL DEFAULT 1; INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.002', '2023-10-19 12:00:00.000000+02', now(), 'Align Entity Doi table.'); diff --git a/dmp-db-scema/updates/00.01.003_Add_UserSettings_table.sql b/dmp-db-scema/updates/00.01.003_Add_UserSettings_table.sql index 055ee67a3..e6a6fe054 100644 --- a/dmp-db-scema/updates/00.01.003_Add_UserSettings_table.sql +++ b/dmp-db-scema/updates/00.01.003_Add_UserSettings_table.sql @@ -15,7 +15,7 @@ CREATE TABLE IF NOT EXISTS public.UserSettings value text COLLATE pg_catalog."default" NOT NULL, name character varying(500) COLLATE pg_catalog."default" NOT NULL, CONSTRAINT user_settings_pkey PRIMARY KEY (id) -) +); INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.003', '2023-10-19 12:00:00.000000+02', now(), 'Add UserSettings table.'); diff --git a/dmp-db-scema/updates/00.01.005_Add_Dmp_table.sql b/dmp-db-scema/updates/00.01.005_Add_Dmp_table.sql index 3ce623126..04e2e7c1a 100644 --- a/dmp-db-scema/updates/00.01.005_Add_Dmp_table.sql +++ b/dmp-db-scema/updates/00.01.005_Add_Dmp_table.sql @@ -4,27 +4,41 @@ BEGIN PERFORM * FROM "DBVersion" WHERE version = this_version; IF FOUND THEN RETURN; END IF; -CREATE TABLE IF NOT EXISTS public."Dmp" +CREATE TABLE public."Dmp" ( - "id" uuid NOT NULL, - "label" character varying(250) COLLATE pg_catalog."default" NOT NULL, - "version" integer NOT NULL, - "status" smallint NOT NULL DEFAULT 0, - "properties" text COLLATE pg_catalog."default", - "dmp_properties" text COLLATE pg_catalog."default", - "group_id" uuid, - "description" text COLLATE pg_catalog."default", - "is_public" boolean NOT NULL DEFAULT false, - "extra_properties" text COLLATE pg_catalog."default", - "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, - "version_status" smallint NOT NULL DEFAULT 1, - "finalized_at" timestamp without time zone, - "published_at" timestamp without time zone, + id uuid NOT NULL, + label character varying(250) COLLATE pg_catalog."default" NOT NULL, + version integer NOT NULL, + status smallint NOT NULL DEFAULT 0, + properties text COLLATE pg_catalog."default", + group_id uuid NOT NULL, + description text COLLATE pg_catalog."default", + 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, + finalized_at timestamp without time zone, + creator uuid NOT NULL, + blueprint uuid NOT NULL, + language character varying(100) COLLATE pg_catalog."default" NOT NULL, + access_type smallint NOT NULL, + public_after timestamp without time zone, + version_status smallint NOT NULL DEFAULT 1, CONSTRAINT "Dmp_pkey" PRIMARY KEY (id), - CONSTRAINT "Dmp_creator_fkey" FOREIGN KEY (creator) REFERENCES public."UserInfo" (id) + CONSTRAINT "Dmp_blueprint_fkey" FOREIGN KEY (blueprint) + REFERENCES public."DmpBlueprint" (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION + NOT VALID, + CONSTRAINT "Dmp_creator_fkey" FOREIGN KEY (creator) + REFERENCES public."UserInfo" (id) MATCH SIMPLE + ON UPDATE NO ACTION + ON DELETE NO ACTION + NOT VALID ) +WITH ( + OIDS = FALSE +) +TABLESPACE pg_default; INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.005', '2023-10-27 12:00:00.000000+02', now(), 'Add Dmp table.'); diff --git a/dmp-db-scema/updates/00.01.006_Add_Dmp_reference_table.sql b/dmp-db-scema/updates/00.01.006_Add_Dmp_reference_table.sql index 81b9dd635..232672afd 100644 --- a/dmp-db-scema/updates/00.01.006_Add_Dmp_reference_table.sql +++ b/dmp-db-scema/updates/00.01.006_Add_Dmp_reference_table.sql @@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS public."DmpReference" CONSTRAINT "DmpReference_pkey" PRIMARY KEY (id), CONSTRAINT "DmpReference_dmp_id_fkey" FOREIGN KEY ("dmp_id") REFERENCES public."Dmp"("id"), CONSTRAINT "DmpReference_reference_id_fkey" FOREIGN KEY ("reference_id") REFERENCES public."Reference"("id") -) +); INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.006', '2023-10-27 12:00:00.000000+02', now(), 'Add DescriptionReference table.'); diff --git a/dmp-db-scema/updates/00.01.007_Add_Description_table_former_Dataset.sql b/dmp-db-scema/updates/00.01.007_Add_Description_table_former_Dataset.sql index efd2ef90d..324730c60 100644 --- a/dmp-db-scema/updates/00.01.007_Add_Description_table_former_Dataset.sql +++ b/dmp-db-scema/updates/00.01.007_Add_Description_table_former_Dataset.sql @@ -23,7 +23,7 @@ CREATE TABLE IF NOT EXISTS public."Description" CONSTRAINT "Description_pkey" PRIMARY KEY (id), CONSTRAINT "Description_dmp_fkey" FOREIGN KEY ("dmp") REFERENCES public."Dmp"("id"), CONSTRAINT "Description_profile_fkey" FOREIGN KEY ("profile") REFERENCES public."DescriptionTemplate"("ID") -) +); INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.007', '2023-10-27 12:00:00.000000+02', now(), 'Add Description table (former Dataset).'); diff --git a/dmp-db-scema/updates/00.01.008_Add_DescriptionReference_table.sql b/dmp-db-scema/updates/00.01.008_Add_DescriptionReference_table.sql index e9c9aaa5d..0fd7b879f 100644 --- a/dmp-db-scema/updates/00.01.008_Add_DescriptionReference_table.sql +++ b/dmp-db-scema/updates/00.01.008_Add_DescriptionReference_table.sql @@ -16,7 +16,7 @@ CREATE TABLE IF NOT EXISTS public."DescriptionReference" CONSTRAINT "DescriptionReference_pkey" PRIMARY KEY (id), CONSTRAINT "DescriptionReference_description_fkey" FOREIGN KEY ("description_id") REFERENCES public."Description"("id"), CONSTRAINT "DescriptionReference_reference_fkey" FOREIGN KEY ("reference_id") REFERENCES public."Reference"("id") -) +); INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.008', '2023-10-27 12:00:00.000000+02', now(), 'Add DescriptionReference table.'); 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 fa45e8cac..c90c23c39 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 @@ -24,6 +24,8 @@ ALTER TABLE public."DescriptionTemplate" ALTER COLUMN created_at TYPE timestamp 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" ADD COLUMN is_active smallint; UPDATE public."DescriptionTemplate" SET is_active = 1; diff --git a/dmp-db-scema/updates/00.01.011_Align_UserDescriptionTemplate_table.sql b/dmp-db-scema/updates/00.01.011_Align_UserDescriptionTemplate_table.sql index 7735e159c..5506d56d2 100644 --- a/dmp-db-scema/updates/00.01.011_Align_UserDescriptionTemplate_table.sql +++ b/dmp-db-scema/updates/00.01.011_Align_UserDescriptionTemplate_table.sql @@ -1,29 +1,39 @@ -ALTER TABLE public."UserDatasetProfile" RENAME TO "UserDescriptionTemplate"; +DO $$DECLARE + this_version CONSTANT varchar := '00.01.011'; +BEGIN + PERFORM * FROM "DBVersion" WHERE version = this_version; + IF FOUND THEN RETURN; END IF; + + ALTER TABLE public."UserDatasetProfile" RENAME TO "UserDescriptionTemplate"; -ALTER TABLE public."UserDescriptionTemplate" RENAME usr TO "user"; + ALTER TABLE public."UserDescriptionTemplate" RENAME usr TO "user"; -ALTER TABLE public."UserDescriptionTemplate" RENAME "descriptionTemplate" TO description_template; + ALTER TABLE public."UserDescriptionTemplate" RENAME "descriptionTemplate" TO description_template; -ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN "role" TYPE smallint; -ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN "role" SET NOT NULL; + ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN "role" TYPE smallint; + ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN "role" SET NOT NULL; -ALTER TABLE public."UserDescriptionTemplate" ADD COLUMN updated_at timestamp without time zone; + ALTER TABLE public."UserDescriptionTemplate" ADD COLUMN updated_at timestamp without time zone; -ALTER TABLE public."UserDescriptionTemplate" ADD COLUMN created_at timestamp without time zone; + ALTER TABLE public."UserDescriptionTemplate" ADD COLUMN created_at timestamp without time zone; -ALTER TABLE public."UserDescriptionTemplate" ADD COLUMN is_active smallint; + ALTER TABLE public."UserDescriptionTemplate" ADD COLUMN is_active smallint; -UPDATE public."UserDescriptionTemplate" SET is_active = 1; + UPDATE public."UserDescriptionTemplate" SET is_active = 1; -UPDATE public."UserDescriptionTemplate" SET is_active = 0 where role = 2; -UPDATE public."UserDescriptionTemplate" SET role = 1 where is_active = 0; + UPDATE public."UserDescriptionTemplate" SET is_active = 0 where role = 2; + UPDATE public."UserDescriptionTemplate" SET role = 1 where is_active = 0; -ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN is_active SET NOT NULL; + ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN is_active SET NOT NULL; -UPDATE public."UserDescriptionTemplate" SET updated_at = now() at time zone 'utc'; + UPDATE public."UserDescriptionTemplate" SET updated_at = now() at time zone 'utc'; -ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN updated_at SET NOT NULL; + ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN updated_at SET NOT NULL; -UPDATE public."UserDescriptionTemplate" SET created_at = now() at time zone 'utc'; + UPDATE public."UserDescriptionTemplate" SET created_at = now() at time zone 'utc'; -ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN created_at SET NOT NULL; \ No newline at end of file + ALTER TABLE public."UserDescriptionTemplate" ALTER COLUMN created_at SET NOT NULL; + + INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.011', '2023-11-02 12:00:00.000000+02', now(), 'Aling UserDescriptionTemplate table (former UserDatasetProfile).'); + +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 21ff5a190..0bb8f804b 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 @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS public."DmpDescriptionTemplate" REFERENCES public."Dmp" (id), CONSTRAINT "DmpDescriptionTemplate_description_template_fkey" FOREIGN KEY (description_template) REFERENCES public."DescriptionTemplate" (id) -) +); INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.012', '2023-11-02 12:00:00.000000+02', now(), 'Add Dmp Description Template table (former DMPDatasetProfile).'); diff --git a/dmp-db-scema/updates/00.01.013_Add_Dmp_User_table.sql b/dmp-db-scema/updates/00.01.013_Add_Dmp_User_table.sql index be1f00b64..fc1fe0004 100644 --- a/dmp-db-scema/updates/00.01.013_Add_Dmp_User_table.sql +++ b/dmp-db-scema/updates/00.01.013_Add_Dmp_User_table.sql @@ -18,7 +18,7 @@ CREATE TABLE IF NOT EXISTS public."DmpUser" REFERENCES public."Dmp" (id), CONSTRAINT "DmpUser_user_fkey" FOREIGN KEY ("user") REFERENCES public."UserInfo" (id) -) +); INSERT INTO public."DBVersion" VALUES ('DMPDB', '00.01.013', '2023-11-07 12:00:00.000000+02', now(), 'Add Dmp User table (former UserDMP).'); diff --git a/dmp-db-scema/updates/00.01.015_addTag.sql b/dmp-db-scema/updates/00.01.015_addTag.sql index 59aeeaa3f..b6d43c70c 100644 --- a/dmp-db-scema/updates/00.01.015_addTag.sql +++ b/dmp-db-scema/updates/00.01.015_addTag.sql @@ -14,7 +14,7 @@ BEGIN updated_at timestamp without time zone NOT NULL, CONSTRAINT "Tag_pkey" PRIMARY KEY (id), CONSTRAINT "Tag_created_by_fkey" FOREIGN KEY (created_by) - REFERENCES public."User" (id) MATCH SIMPLE + REFERENCES public."UserInfo" (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION NOT VALID diff --git a/dmp-db-scema/updates/00.01.022_updateUserFKs.sql b/dmp-db-scema/updates/00.01.022_updateUserFKs.sql index fc5626644..f463e80e9 100644 --- a/dmp-db-scema/updates/00.01.022_updateUserFKs.sql +++ b/dmp-db-scema/updates/00.01.022_updateUserFKs.sql @@ -148,14 +148,14 @@ BEGIN ON DELETE NO ACTION NOT VALID; - ALTER TABLE public."UserPreference" DROP CONSTRAINT userpreference_user_fk; +-- ALTER TABLE public."UserPreference" DROP CONSTRAINT userpreference_user_fk; - ALTER TABLE public."UserPreference" - ADD FOREIGN KEY ("UserId") - REFERENCES public."User" (id) MATCH SIMPLE - ON UPDATE NO ACTION - ON DELETE NO ACTION - NOT VALID; +-- ALTER TABLE public."UserPreference" +-- ADD FOREIGN KEY ("UserId") +-- REFERENCES public."User" (id) MATCH SIMPLE +-- ON UPDATE NO ACTION +-- ON DELETE NO ACTION +-- NOT VALID; ALTER TABLE public."UserToken" DROP CONSTRAINT fkey_usetoken_user;