From 11c1ac33cf5bf6dbc6cf05c78e4a77d947fc1d97 Mon Sep 17 00:00:00 2001 From: gkolokythas Date: Fri, 10 May 2019 11:33:48 +0300 Subject: [PATCH] Adds the criteria on DMP listing and refactors the backend userInfo. --- .../criteria/DataManagementPlanCriteria.java | 18 +++++++- .../dao/criteria/OrganisationCriteria.java | 8 ++++ .../eu/eudat/data/dao/entities/DMPDao.java | 3 +- .../eudat/data/dao/entities/DMPDaoImpl.java | 21 ++++++--- .../data/dao/entities/DatasetDaoImpl.java | 3 +- .../dao/entities/OrganisationDaoImpl.java | 3 ++ .../data/dao/entities/ProjectDaoImpl.java | 3 +- .../main/java/eu/eudat/data/entities/DMP.java | 45 +++++-------------- .../OrganisationsTableRequest.java | 25 +++++++++++ .../eu/eudat/controllers/Organisations.java | 16 ++++++- .../logic/managers/DashBoardManager.java | 6 +-- .../managers/DataManagementPlanManager.java | 19 ++++---- .../logic/managers/InvitationsManager.java | 14 +++++- .../logic/managers/OrganisationsManager.java | 45 +++++++++++++++++++ .../eudat/logic/managers/ProjectManager.java | 2 +- .../eu/eudat/logic/managers/UserManager.java | 2 +- .../services/utilities/InvitationService.java | 4 +- .../utilities/InvitationServiceImpl.java | 6 +-- .../models/data/dmp/DataManagementPlan.java | 20 ++++++--- .../DataManagementPlanNewVersionModel.java | 9 ++-- .../eudat/models/data/dmp/Organisation.java | 4 -- .../DataManagementPlanListingModel.java | 12 ++--- .../listingmodels/UserInfoListingModel.java | 20 ++++++--- .../data/quickwizard/DmpQuickWizardModel.java | 4 +- .../src/app/core/core-service.module.ts | 2 + .../src/app/core/query/base-criteria.ts | 2 +- .../src/app/core/query/dmp/dmp-criteria.ts | 9 ++-- .../organisation/organisation-criteria.ts | 5 +++ .../organisation/organisation.service.ts | 29 ++++++++++++ .../app/ui/dashboard/dashboard.component.ts | 20 ++++----- .../criteria/dmp-criteria.component.html | 8 ++-- .../criteria/dmp-criteria.component.ts | 26 ++++++++--- .../ui/dmp/listing/dmp-listing.component.html | 2 +- .../ui/dmp/listing/dmp-listing.component.ts | 12 +++-- 34 files changed, 306 insertions(+), 121 deletions(-) create mode 100644 dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/organisations/OrganisationsTableRequest.java create mode 100644 dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java create mode 100644 dmp-frontend/src/app/core/query/organisation/organisation-criteria.ts create mode 100644 dmp-frontend/src/app/core/services/organisation/organisation.service.ts diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java index 370fabae8..c5bd7c8fe 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/DataManagementPlanCriteria.java @@ -1,7 +1,7 @@ package eu.eudat.data.dao.criteria; import eu.eudat.data.entities.DMP; -import eu.eudat.data.entities.Organisation; + import eu.eudat.data.entities.Project; import java.util.Date; @@ -15,6 +15,8 @@ public class DataManagementPlanCriteria extends Criteria { private boolean allVersions; private List groupIds; private Integer status; + private List organisations; + private Integer role; public Date getPeriodStart() { return periodStart; @@ -57,4 +59,18 @@ public class DataManagementPlanCriteria extends Criteria { public void setStatus(Integer status) { this.status = status; } + + public List getOrganisations() { + return organisations; + } + public void setOrganisations(List organisations) { + this.organisations = organisations; + } + + public Integer getRole() { + return role; + } + public void setRole(Integer role) { + this.role = role; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java index ab1890db4..5c2922b52 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/criteria/OrganisationCriteria.java @@ -3,4 +3,12 @@ package eu.eudat.data.dao.criteria; import eu.eudat.data.entities.Organisation; public class OrganisationCriteria extends Criteria { + private String labelLike; + + public String getLabelLike() { + return labelLike; + } + public void setLabelLike(String labelLike) { + this.labelLike = labelLike; + } } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java index ff29a6b79..03cf68d74 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDao.java @@ -4,6 +4,7 @@ import eu.eudat.data.dao.DatabaseAccessLayer; import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; import eu.eudat.data.dao.criteria.DatasetWizardUserDmpCriteria; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; import eu.eudat.queryable.QueryableList; @@ -15,6 +16,6 @@ public interface DMPDao extends DatabaseAccessLayer { QueryableList getUserDmps(DatasetWizardUserDmpCriteria datasetWizardAutocompleteRequest, UserInfo userInfo); - QueryableList getAuthenticated(QueryableList query, UserInfo principal); + QueryableList getAuthenticated(QueryableList query, UUID principalId); } \ No newline at end of file diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java index 63161e406..bff7a0d3b 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DMPDaoImpl.java @@ -5,6 +5,7 @@ import eu.eudat.data.dao.criteria.DataManagementPlanCriteria; import eu.eudat.data.dao.criteria.DatasetWizardUserDmpCriteria; import eu.eudat.data.dao.databaselayer.service.DatabaseService; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; import eu.eudat.queryable.QueryableList; import eu.eudat.queryable.types.FieldSelectionType; @@ -13,6 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import javax.persistence.criteria.JoinType; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -46,19 +48,28 @@ public class DMPDaoImpl extends DatabaseAccess implements DMPDao { if (criteria.getGroupIds() != null && !criteria.getGroupIds().isEmpty()) query.where((builder, root) -> root.get("groupId").in(criteria.getGroupIds())); if (criteria.getStatus() != null) { - if (criteria.getStatus() == DMP.DMPStatus.FINALISED.getValue()){ + if (criteria.getStatus() == DMP.DMPStatus.FINALISED.getValue()) { query.where((builder, root) -> builder.equal(root.get("status"), DMP.DMPStatus.FINALISED.getValue())); - } - else if (criteria.getStatus() == DMP.DMPStatus.ACTIVE.getValue()){ + } else if (criteria.getStatus() == DMP.DMPStatus.ACTIVE.getValue()) { query.where((builder, root) -> builder.equal(root.get("status"), DMP.DMPStatus.ACTIVE.getValue())); } } + if (criteria.getRole() != null) { + if (criteria.getRole().equals(UserDMP.UserDMPRoles.OWNER.getValue())){ + query.where((builder, root) -> builder.equal(root.join("users").get("role"), UserDMP.UserDMPRoles.OWNER.getValue())); + } else if (criteria.getRole().equals(UserDMP.UserDMPRoles.USER.getValue())){ + query.where((builder, root) -> builder.equal(root.join("users").get("role"), UserDMP.UserDMPRoles.USER.getValue())); + } + } + if (criteria.getOrganisations() != null && !criteria.getOrganisations().isEmpty()) { + query.where((builder, root) -> root.join("organisations").get("reference").in(criteria.getOrganisations())); + } query.where((builder, root) -> builder.notEqual(root.get("status"), DMP.DMPStatus.DELETED.getValue())); return query; } - public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { - query.where((builder, root) -> builder.or(builder.equal(root.get("creator"), principal), builder.isMember(principal, root.get("users")))); + public QueryableList getAuthenticated(QueryableList query, UUID principal) { + query.where((builder, root) -> builder.or(builder.equal(root.get("creator").get("id"), principal), builder.equal(root.join("users", JoinType.LEFT).get("id"), principal))); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java index 92f91c201..40b728a82 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/DatasetDaoImpl.java @@ -13,6 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import javax.persistence.criteria.JoinType; import java.util.Arrays; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -73,7 +74,7 @@ public class DatasetDaoImpl extends DatabaseAccess implements DatasetDa public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { if (principal.getId() == null) query.where((builder, root) -> builder.equal(root.get("isPublic"), true)); else { - query.where((builder, root) -> builder.or(builder.equal(root.get("dmp").get("creator"), principal), builder.isMember(principal, root.get("dmp").get("users")))); + query.where((builder, root) -> builder.or(builder.equal(root.get("dmp").get("creator"), principal), builder.equal(root.join("dmp").join("users", JoinType.LEFT).get("id"), principal.getId()))); } return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java index 3ffa1f110..d75f2ff8f 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/OrganisationDaoImpl.java @@ -26,6 +26,9 @@ public class OrganisationDaoImpl extends DatabaseAccess implements QueryableList query = this.getDatabaseService().getQueryable(Organisation.class); if (criteria.getLike() != null) query.where((builder, root) -> builder.equal(root.get("reference"), criteria.getLike())); + if (criteria.getLabelLike() != null) { + query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + criteria.getLabelLike().toUpperCase() + "%")); + } return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java index 5a7b18b62..2a401bcff 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/dao/entities/ProjectDaoImpl.java @@ -70,7 +70,8 @@ public class ProjectDaoImpl extends DatabaseAccess implements ProjectDa } public QueryableList getAuthenticated(QueryableList query, UserInfo principal) { - query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.isMember(principal, root.join("dmps", JoinType.LEFT).get("users")))).distinct(); + //query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.isMember(principal, root.join("dmps", JoinType.LEFT).get("users")))).distinct(); + query.where((builder, root) -> builder.or(builder.equal(root.get("creationUser"), principal), builder.equal(root.join("dmps").join("users", JoinType.LEFT).get("id"), principal.getId()))).distinct(); return query; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java index a91f944dd..1e80bf94d 100644 --- a/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java +++ b/dmp-backend/data/src/main/java/eu/eudat/data/entities/DMP.java @@ -17,7 +17,10 @@ import java.util.stream.Collectors; @NamedEntityGraph( name = "dataManagementPlanListingModel", attributeNodes = {@NamedAttributeNode("organisations"), @NamedAttributeNode("researchers"), - @NamedAttributeNode("project"), @NamedAttributeNode("users"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")} + @NamedAttributeNode("project"), @NamedAttributeNode(value = "users", subgraph = "users"), @NamedAttributeNode("creator"), @NamedAttributeNode("profile"), @NamedAttributeNode("dataset")}, + subgraphs = { + @NamedSubgraph(name = "users", attributeNodes = {@NamedAttributeNode("user")}), + } ), @NamedEntityGraph( name = "fullyDetailed", @@ -118,12 +121,13 @@ public class DMP implements DataEntity { private Set researchers; - @OneToMany(fetch = FetchType.LAZY) + @OneToMany(mappedBy = "dmp", fetch = FetchType.LAZY) + /*@OneToMany(fetch = FetchType.LAZY) @JoinTable(name = "\"UserDMP\"", joinColumns = {@JoinColumn(name = "dmp", referencedColumnName = "\"ID\"")}, inverseJoinColumns = {@JoinColumn(name = "usr", referencedColumnName = "id")} - ) - private Set users; + )*/ + private Set users; @Column(name = "\"Status\"", nullable = false) @@ -151,66 +155,48 @@ public class DMP implements DataEntity { public String getDescription() { return description; } - - public void setDescription(String description) { this.description = description; } - public UserInfo getCreator() { return creator; } - - public void setCreator(UserInfo creator) { this.creator = creator; } - public Short getStatus() { return status; } - - public void setStatus(Short status) { this.status = status; } - public Date getCreated() { return created; } - - public void setCreated(Date created) { this.created = created; } - public Date getModified() { return modified; } - - public void setModified(Date modified) { this.modified = modified; } - - public Set getUsers() { + public Set getUsers() { return users; } - - public void setUsers(Set users) { + public void setUsers(Set users) { this.users = users; } - public UUID getId() { return id; } - public void setId(UUID id) { this.id = id; } @@ -218,7 +204,6 @@ public class DMP implements DataEntity { public UUID getGroupId() { return groupId; } - public void setGroupId(UUID groupId) { this.groupId = groupId; } @@ -226,7 +211,6 @@ public class DMP implements DataEntity { public String getLabel() { return label; } - public void setLabel(String label) { this.label = label; } @@ -234,7 +218,6 @@ public class DMP implements DataEntity { public Integer getVersion() { return version; } - public void setVersion(Integer version) { this.version = version; } @@ -242,7 +225,6 @@ public class DMP implements DataEntity { public Project getProject() { return project; } - public void setProject(Project project) { this.project = project; } @@ -250,7 +232,6 @@ public class DMP implements DataEntity { public String getAssociatedDmps() { return associatedDmps; } - public void setAssociatedDmps(String associatedDmps) { this.associatedDmps = associatedDmps; } @@ -258,7 +239,6 @@ public class DMP implements DataEntity { public DMPProfile getProfile() { return profile; } - public void setProfile(DMPProfile profile) { this.profile = profile; } @@ -266,7 +246,6 @@ public class DMP implements DataEntity { public Set getDataset() { return dataset; } - public void setDataset(Set dataset) { this.dataset = dataset; } @@ -274,7 +253,6 @@ public class DMP implements DataEntity { public Set getOrganisations() { return organisations; } - public void setOrganisations(Set organisations) { this.organisations = organisations; } @@ -282,7 +260,6 @@ public class DMP implements DataEntity { public Set getResearchers() { return researchers; } - public void setResearchers(Set researchers) { this.researchers = researchers; } @@ -290,7 +267,6 @@ public class DMP implements DataEntity { public String getProperties() { return properties; } - public void setProperties(String properties) { this.properties = properties; } @@ -298,7 +274,6 @@ public class DMP implements DataEntity { public String getDmpProperties() { return dmpProperties; } - public void setDmpProperties(String dmpProperties) { this.dmpProperties = dmpProperties; } diff --git a/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/organisations/OrganisationsTableRequest.java b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/organisations/OrganisationsTableRequest.java new file mode 100644 index 000000000..360d1683b --- /dev/null +++ b/dmp-backend/data/src/main/java/eu/eudat/data/query/items/table/organisations/OrganisationsTableRequest.java @@ -0,0 +1,25 @@ +package eu.eudat.data.query.items.table.organisations; + +import eu.eudat.data.dao.criteria.OrganisationCriteria; +import eu.eudat.data.entities.Organisation; +import eu.eudat.data.query.PaginationService; +import eu.eudat.data.query.definition.TableQuery; +import eu.eudat.queryable.QueryableList; + +import java.util.UUID; + +public class OrganisationsTableRequest extends TableQuery { + @Override + public QueryableList applyCriteria() { + QueryableList query = this.getQuery(); + if (this.getCriteria().getLike() != null && !this.getCriteria().getLike().isEmpty()) { + query.where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + this.getCriteria().getLike().toUpperCase() + "%")); + } + return query; + } + + @Override + public QueryableList applyPaging(QueryableList items) { + return PaginationService.applyPaging(items, this); + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java b/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java index fa6230cf6..5b9ffd6a0 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java +++ b/dmp-backend/web/src/main/java/eu/eudat/controllers/Organisations.java @@ -1,16 +1,22 @@ package eu.eudat.controllers; +import eu.eudat.data.query.items.table.organisations.OrganisationsTableRequest; +import eu.eudat.logic.managers.OrganisationsManager; import eu.eudat.logic.proxy.config.exceptions.HugeResultSet; import eu.eudat.logic.proxy.config.exceptions.NoURLFound; import eu.eudat.logic.services.ApiContext; +import eu.eudat.models.data.dmp.Organisation; import eu.eudat.models.data.external.OrganisationsExternalSourcesModel; +import eu.eudat.models.data.helpers.common.DataTableData; import eu.eudat.models.data.helpers.responses.ResponseItem; +import eu.eudat.models.data.security.Principal; import eu.eudat.types.ApiMessageCode; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import javax.validation.Valid; import java.util.List; import java.util.Map; @@ -21,10 +27,12 @@ import java.util.Map; public class Organisations extends BaseController { private OrganisationsExternalSourcesModel organisationsExternalSourcesModel; + private OrganisationsManager organisationsManager; @Autowired - public Organisations(ApiContext apiContext, OrganisationsExternalSourcesModel organisationsExternalSourcesModel) { + public Organisations(ApiContext apiContext, OrganisationsExternalSourcesModel organisationsExternalSourcesModel, OrganisationsManager organisationsManager) { super(apiContext); this.organisationsExternalSourcesModel = organisationsExternalSourcesModel; + this.organisationsManager = organisationsManager; } @RequestMapping(method = RequestMethod.GET, value = {"/external/organisations"}, produces = "application/json") @@ -37,5 +45,11 @@ public class Organisations extends BaseController { return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem().payload(projectsExternalSourcesModel).status(ApiMessageCode.NO_MESSAGE)); } + @RequestMapping(method = RequestMethod.POST, value = {"/internal/organisations"}, produces = "application/json") + public @ResponseBody + ResponseEntity>> getPaged(@Valid @RequestBody OrganisationsTableRequest organisationsTableRequest, Principal principal) throws Exception{ + DataTableData organisationDataTableData = this.organisationsManager.getPagedOrganisations(organisationsTableRequest, principal); + return ResponseEntity.status(HttpStatus.OK).body(new ResponseItem>().payload(organisationDataTableData).status(ApiMessageCode.NO_MESSAGE)); + } } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java index aa7c1a685..bbb65e9d7 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/DashBoardManager.java @@ -70,7 +70,7 @@ public class DashBoardManager { ProjectCriteria projectCriteria = new ProjectCriteria(); OrganisationCriteria organisationCriteria = new OrganisationCriteria(); - CompletableFuture dmpFuture = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), user).countAsync() + CompletableFuture dmpFuture = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId()).countAsync() .whenComplete((dmpsStats, throwable) -> statistics.setTotalDataManagementPlanCount(dmpsStats)); CompletableFuture datasetFuture = datasetRepository.getAuthenticated(datasetRepository.getWithCriteria(datasetCriteria), user).countAsync() .whenComplete((datasetsStats, throwable) -> statistics.setTotalDataSetCount(datasetsStats)); @@ -97,7 +97,7 @@ public class DashBoardManager { ProjectCriteria projectCriteria = new ProjectCriteria(); RecentActivityDataBuilder recentActivityDataBuilder = apiContext.getOperationsContext().getBuilderFactory().getBuilder(RecentActivityDataBuilder.class); - CompletableFuture> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), user) + CompletableFuture> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.getWithCriteria(dataManagementPlanCriteria), principal.getId()) .withHint("dmpRecentActivity") .orderBy((builder, root) -> builder.desc(root.get("modified"))) .take(numberofactivities) @@ -131,7 +131,7 @@ public class DashBoardManager { ProjectDao projectRepository = databaseRepository.getProjectDao(); List searchBarItems = new LinkedList<>(); - CompletableFuture> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.asQueryable(), user) + CompletableFuture> dmps = dataManagementPlanRepository.getAuthenticated(dataManagementPlanRepository.asQueryable(), principal.getId()) .withHint("dmpRecentActivity") .where((builder, root) -> builder.like(builder.upper(root.get("label")), "%" + like.toUpperCase() + "%")) .orderBy((builder, root) -> builder.desc(root.get("modified"))) 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 89e3aec14..1bb6677fc 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.models.data.listingmodels.DataManagementPlanListingModel; import eu.eudat.models.data.listingmodels.DatasetListingModel; import eu.eudat.models.data.security.Principal; import eu.eudat.models.data.user.composite.PagedDatasetProfile; +import eu.eudat.models.data.userinfo.UserListingModel; import eu.eudat.queryable.QueryableList; import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.json.JSONObject; @@ -81,10 +82,9 @@ public class DataManagementPlanManager { } public DataTableData getPaged(DataManagementPlanTableRequest dataManagementPlanTableRequest, Principal principal, String fieldsGroup) throws Exception { - UserInfo userInfo = new UserInfo(); - userInfo.setId(principal.getId()); + UUID principalID = principal.getId(); QueryableList items = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getWithCriteria(dataManagementPlanTableRequest.getCriteria()).withHint(HintedModelFactory.getHint(DataManagementPlanListingModel.class)); - QueryableList authItems = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, userInfo); + QueryableList authItems = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(items, principalID); QueryableList pagedItems = PaginationManager.applyPaging(authItems, dataManagementPlanTableRequest); DataTableData dataTable = new DataTableData<>(); @@ -96,17 +96,17 @@ public class DataManagementPlanManager { .selectAsync(item -> { item.setDataset( item.getDataset().stream() - .filter(dataset -> dataset.getDmp().getCreator().getId().equals(userInfo.getId()) + .filter(dataset -> dataset.getDmp().getCreator().getId().equals(principalID) || dataset.isPublic() || dataset.getDmp().getUsers().stream() - .filter(x -> x.getId().equals(userInfo.getId())).collect(Collectors.toList()).size() > 0).collect(Collectors.toSet())); + .filter(x -> x.getUser().getId().equals(principalID)).collect(Collectors.toList()).size() > 0).collect(Collectors.toSet())); return new DataManagementPlanListingModel().fromDataModelDatasets(item); }) .whenComplete((resultList, throwable) -> dataTable.setData(resultList)); } else{ itemsFuture = pagedItems - .selectAsync(item -> new DataManagementPlanListingModel().fromDataModel(item) ) + .selectAsync(item -> new DataManagementPlanListingModel().fromDataModel(item)) .whenComplete((resultList, throwable) -> dataTable.setData(resultList)); } @@ -281,10 +281,9 @@ public class DataManagementPlanManager { } public List getWithCriteria(DMPDao dmpsRepository, DataManagementPlanCriteriaRequest dataManagementPlanCriteria, Principal principal) throws IllegalAccessException, InstantiationException { - UserInfo userInfo = new UserInfo(); - userInfo.setId(principal.getId()); + UUID principalID = principal.getId(); QueryableList items = dmpsRepository.getWithCriteria(dataManagementPlanCriteria.getCriteria()).withHint(HintedModelFactory.getHint(DataManagementPlan.class)); - QueryableList authenticatedItems = dmpsRepository.getAuthenticated(items, userInfo); + QueryableList authenticatedItems = dmpsRepository.getAuthenticated(items, principalID); List datamanagementPlans = authenticatedItems.select(item -> new DataManagementPlan().fromDataModel(item)); return datamanagementPlans; } @@ -723,7 +722,7 @@ public class DataManagementPlanManager { researchers.add(researcher); } - List associatedUsers = new LinkedList<>(); + List associatedUsers = new LinkedList<>(); List dynamicFields = new LinkedList<>(); // Sets properties. 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 2072bdae4..18e1acbe8 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 @@ -1,6 +1,7 @@ package eu.eudat.logic.managers; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; import eu.eudat.exceptions.security.UnauthorisedException; import eu.eudat.models.data.invitation.Invitation; @@ -12,6 +13,7 @@ import eu.eudat.logic.services.ApiContext; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import java.util.LinkedList; import java.util.List; import java.util.UUID; import java.util.stream.Collectors; @@ -31,9 +33,15 @@ public class InvitationsManager { principalUser.setId(principal.getId()); List alreadySignedInUsers = invitation.getUsers().stream().filter(item -> item.getId() != null).collect(Collectors.toList()); List alreadySignedInUsersEntities = alreadySignedInUsers.stream().map(item -> item.toDataModel()).collect(Collectors.toList()); + List userInfoToUserDmp = new LinkedList<>(); + for (UserInfo userInfo : alreadySignedInUsersEntities) { + UserDMP userDMP = new UserDMP(); + userDMP.setUser(userInfo); + userInfoToUserDmp.add(userDMP); + } DMP dataManagementPlan = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().find(invitation.getDataManagementPlan()); apiContext.getUtilitiesService().getInvitationService().createInvitations(apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao(), apiContext.getUtilitiesService().getMailService(), invitation.getUsers().stream().map(item -> item.toDataModel()).collect(Collectors.toList()), dataManagementPlan, principalUser); - apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), alreadySignedInUsersEntities, dataManagementPlan); + apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userInfoToUserDmp, dataManagementPlan); } public List getUsers(UserInfoRequestItem userInfoRequestItem) throws InstantiationException, IllegalAccessException { @@ -48,8 +56,10 @@ public class InvitationsManager { throw new UnauthorisedException("There is no Data Management Plan assigned to this Link"); if (invitation.getAcceptedInvitation()) throw new UnauthorisedException("This Url Has Expired"); UserInfo invitedUser = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(principal.getId()); + UserDMP userDMP = new UserDMP(); + userDMP.setUser(invitedUser); DMP datamanagementPlan = invitation.getDmp(); - apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), invitedUser, datamanagementPlan); + apiContext.getUtilitiesService().getInvitationService().assignToDmp(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao(), userDMP, datamanagementPlan); invitation.setAcceptedInvitation(true); apiContext.getOperationsContext().getDatabaseRepository().getInvitationDao().createOrUpdate(invitation); return datamanagementPlan.getId(); diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java new file mode 100644 index 000000000..e19c6cd76 --- /dev/null +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/OrganisationsManager.java @@ -0,0 +1,45 @@ +package eu.eudat.logic.managers; + +import eu.eudat.data.dao.criteria.OrganisationCriteria; +import eu.eudat.data.dao.entities.OrganisationDao; +import eu.eudat.data.query.items.table.organisations.OrganisationsTableRequest; +import eu.eudat.logic.services.ApiContext; +import eu.eudat.logic.services.operations.DatabaseRepository; +import eu.eudat.models.data.dmp.Organisation; +import eu.eudat.models.data.helpers.common.DataTableData; +import eu.eudat.models.data.security.Principal; +import eu.eudat.queryable.QueryableList; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.stream.Collectors; + +@Component +public class OrganisationsManager { + + private ApiContext apiContext; + private DatabaseRepository databaseRepository; + + @Autowired + public OrganisationsManager(ApiContext apiContext) { + this.apiContext = apiContext; + this.databaseRepository = apiContext.getOperationsContext().getDatabaseRepository(); + } + + public DataTableData getPagedOrganisations(OrganisationsTableRequest organisationsTableRequest, Principal principal) throws Exception { + eu.eudat.data.entities.UserInfo userInfo = new eu.eudat.data.entities.UserInfo(); + userInfo.setId(principal.getId()); + OrganisationDao organisationDao = databaseRepository.getOrganisationDao(); + + QueryableList items = organisationDao.getWithCriteria(organisationsTableRequest.getCriteria()); + QueryableList authItems = organisationDao.getAuthenticated(items, userInfo); + QueryableList pagedItems = PaginationManager.applyPaging(authItems, organisationsTableRequest); + + List org = pagedItems.toList().stream().distinct().map(item -> new Organisation().fromDataModel(item)).collect(Collectors.toList()); + DataTableData organisationDataTableData = new DataTableData<>(); + organisationDataTableData.setData(org); + organisationDataTableData.setTotalCount(pagedItems.count()); + return organisationDataTableData; + } +} diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java index 5db1b6c6c..e950e744a 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/managers/ProjectManager.java @@ -64,7 +64,7 @@ public class ProjectManager { if (fieldsGroup.equals("listing")) { projectsFuture = pagedItems.withHint(HintedModelFactory.getHint(ProjectListingModel.class)).selectAsync(item -> { item.setDmps(item.getDmps().stream().filter( - dmp -> dmp.getCreator().getId().equals(principal.getId()) || dmp.getUsers().stream().filter(user -> user.getId().equals(principal.getId())).collect(Collectors.toList()).size() > 0) + dmp -> dmp.getCreator().getId().equals(principal.getId()) || dmp.getUsers().stream().filter(user -> user.getUser().getId().equals(principal.getId())).collect(Collectors.toList()).size() > 0) .collect(Collectors.groupingBy(DMP::getGroupId)) .values().stream() .map(dmps -> dmps.stream().reduce((first, second) -> { 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 98bbf8a9f..4df08f2d3 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 @@ -63,7 +63,7 @@ public class UserManager { public UserProfile getSingle(UUID userId) throws Exception { eu.eudat.data.entities.UserInfo user = apiContext.getOperationsContext().getDatabaseRepository().getUserInfoDao().find(userId); UserProfile profile = new UserProfile().fromDataModel(user); - List dmps = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable(), user).take(5).toList(); + List dmps = apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().getAuthenticated(apiContext.getOperationsContext().getDatabaseRepository().getDmpDao().asQueryable(), userId).take(5).toList(); profile.setAssociatedDmps(dmps.stream().map(x -> new DataManagementPlan().fromDataModel(x)).collect(Collectors.toList())); return profile; } diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java index b44bf9154..a580afc0f 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationService.java @@ -12,9 +12,9 @@ import java.util.concurrent.CompletableFuture; public interface InvitationService { - void assignToDmp(DMPDao dmpDao, List users, DMP dmp); + void assignToDmp(DMPDao dmpDao, List users, DMP dmp); - void assignToDmp(DMPDao dmpDao, eu.eudat.data.entities.UserInfo user, DMP dmp); + void assignToDmp(DMPDao dmpDao, eu.eudat.data.entities.UserDMP user, DMP dmp); void createInvitations(InvitationDao invitationDao, MailService mailService, List users, DMP dmp, eu.eudat.data.entities.UserInfo creator) throws MessagingException; diff --git a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java index 9edb04eda..72bf72fea 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java +++ b/dmp-backend/web/src/main/java/eu/eudat/logic/services/utilities/InvitationServiceImpl.java @@ -36,15 +36,15 @@ public class InvitationServiceImpl implements InvitationService { } @Override - public void assignToDmp(DMPDao dmpDao, List users, DMP dmp) { - for (eu.eudat.data.entities.UserInfo user : users) { + public void assignToDmp(DMPDao dmpDao, List users, DMP dmp) { + for (eu.eudat.data.entities.UserDMP user : users) { dmp.getUsers().add(user); } dmpDao.createOrUpdate(dmp); } @Override - public void assignToDmp(DMPDao dmpDao, eu.eudat.data.entities.UserInfo user, DMP dmp) { + public void assignToDmp(DMPDao dmpDao, eu.eudat.data.entities.UserDMP user, DMP dmp) { if (!dmp.getUsers().stream().map(x -> x.getId()).collect(Collectors.toList()).contains(user.getId())) { dmp.getUsers().add(user); dmpDao.createOrUpdate(dmp); 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 b4afc8806..fce6b2968 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 @@ -3,6 +3,7 @@ package eu.eudat.models.data.dmp; import eu.eudat.data.entities.DMP; import eu.eudat.data.entities.DMPProfile; import eu.eudat.data.entities.Dataset; +import eu.eudat.data.entities.UserDMP; import eu.eudat.logic.utilities.builders.XmlBuilder; import eu.eudat.models.DataModel; import eu.eudat.models.data.dynamicfields.DynamicFieldWithValue; @@ -11,6 +12,7 @@ import eu.eudat.models.data.helpermodels.Tuple; import eu.eudat.models.data.listingmodels.DatasetListingModel; import eu.eudat.models.data.project.Project; import eu.eudat.models.data.userinfo.UserInfo; +import eu.eudat.models.data.userinfo.UserListingModel; import net.minidev.json.JSONObject; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -34,7 +36,7 @@ public class DataManagementPlan implements DataModel { private eu.eudat.models.data.project.Project project; private List organisations; private List researchers; - private List associatedUsers; + private List associatedUsers; private DataManagementPlanProfile definition; private eu.eudat.models.data.userinfo.UserInfo creator; private Date created; @@ -73,11 +75,11 @@ public class DataManagementPlan implements DataModel { this.groupId = groupId; } - public List getAssociatedUsers() { + public List getAssociatedUsers() { return associatedUsers; } - public void setAssociatedUsers(List associatedUsers) { + public void setAssociatedUsers(List associatedUsers) { this.associatedUsers = associatedUsers; } @@ -234,7 +236,7 @@ public class DataManagementPlan implements DataModel { this.created = entity.getCreated(); this.description = entity.getDescription(); this.status = entity.getStatus(); - this.associatedUsers = entity.getUsers().stream().map(item -> new UserInfo().fromDataModel(item)).collect(Collectors.toList()); + this.associatedUsers = entity.getUsers().stream().map(item -> new UserListingModel().fromDataModel(item.getUser())).collect(Collectors.toList()); return this; } @@ -271,7 +273,15 @@ public class DataManagementPlan implements DataModel { 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.setUsers(new HashSet<>(this.associatedUsers.stream().map(item -> item.toDataModel()).collect(Collectors.toList()))); + + List userDMPList = new LinkedList<>(); + for(UserListingModel userListingModel: this.associatedUsers) { + UserDMP userDMP = new UserDMP(); + userDMP.setUser(userListingModel.toDataModel()); + userDMPList.add(userDMP); + } + + dataManagementPlanEntity.setUsers((Set) userDMPList); return dataManagementPlanEntity; } 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 0fd4c04ad..0a5119092 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 @@ -1,6 +1,7 @@ package eu.eudat.models.data.dmp; import eu.eudat.data.entities.DMP; +import eu.eudat.data.entities.UserDMP; import eu.eudat.models.DataModel; import eu.eudat.models.data.dataset.Dataset; import eu.eudat.models.data.project.Project; @@ -26,7 +27,7 @@ public class DataManagementPlanNewVersionModel implements DataModel organisations; private List researchers; - private List associatedUsers; + private List associatedUsers; private eu.eudat.models.data.userinfo.UserInfo creator; private Date created; private List datasets; @@ -111,11 +112,11 @@ public class DataManagementPlanNewVersionModel implements DataModel getAssociatedUsers() { + public List getAssociatedUsers() { return associatedUsers; } - public void setAssociatedUsers(List associatedUsers) { + public void setAssociatedUsers(List associatedUsers) { this.associatedUsers = associatedUsers; } @@ -152,7 +153,7 @@ public class DataManagementPlanNewVersionModel implements DataModel(this.associatedUsers.stream().map(item -> item.toDataModel()).collect(Collectors.toList()))); + entity.setUsers(new HashSet<>(new ArrayList<>(this.associatedUsers))); entity.setDescription(this.description); entity.setStatus((short) this.status); entity.setGroupId(this.groupId == null ? UUID.randomUUID() : this.groupId); diff --git a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java index 3873243ca..734954831 100644 --- a/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java +++ b/dmp-backend/web/src/main/java/eu/eudat/models/data/dmp/Organisation.java @@ -14,7 +14,6 @@ public class Organisation implements DataModel associatedProfiles; private List users; private String description; - private String projectabbreviation; + private String projectAbbreviation; public String getId() { @@ -135,11 +135,11 @@ public class DataManagementPlanListingModel implements DataModel new DatasetUrlListing().fromDataModel(x)).collect(Collectors.toList()); this.users = entity.getUsers().stream().map(x -> new UserInfoListingModel().fromDataModel(x)).collect(Collectors.toList()); this.description = entity.getDescription(); - this.projectabbreviation = entity.getProject().getAbbreviation(); + this.projectAbbreviation = entity.getProject().getAbbreviation(); if (entity.getAssociatedDmps() != null && !entity.getAssociatedDmps().isEmpty()) { Document viewStyleDoc = XmlBuilder.fromXml(entity.getAssociatedDmps()); 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 index f7c71558c..2435365fa 100644 --- 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 @@ -1,14 +1,16 @@ package eu.eudat.models.data.listingmodels; +import eu.eudat.data.entities.UserDMP; import eu.eudat.data.entities.UserInfo; import eu.eudat.models.DataModel; import java.util.UUID; -public class UserInfoListingModel implements DataModel { +public class UserInfoListingModel implements DataModel { private UUID id; private String name; + private Integer role; public UUID getId() { return id; @@ -24,15 +26,23 @@ public class UserInfoListingModel implements DataModel user = new LinkedList(); + List user = new LinkedList<>(); eu.eudat.models.data.userinfo.UserInfo userInfo = new eu.eudat.models.data.userinfo.UserInfo(); userInfo.setId(principal.getId()); dataManagementPlanEntity.setAssociatedUsers(user); diff --git a/dmp-frontend/src/app/core/core-service.module.ts b/dmp-frontend/src/app/core/core-service.module.ts index 93ec38742..62222b8c7 100644 --- a/dmp-frontend/src/app/core/core-service.module.ts +++ b/dmp-frontend/src/app/core/core-service.module.ts @@ -32,6 +32,7 @@ import { UserService } from './services/user/user.service'; import { CollectionUtils } from './services/utilities/collection-utils.service'; import { TypeUtils } from './services/utilities/type-utils.service'; import { QuickWizardService } from './services/quick-wizard/quick-wizard.service'; +import { OrganisationService } from './services/organisation/organisation.service'; // // // This is shared module that provides all the services. Its imported only once on the AppModule. @@ -84,6 +85,7 @@ export class CoreServiceModule { DmpInvitationService, DatasetExternalAutocompleteService, QuickWizardService, + OrganisationService ], }; } diff --git a/dmp-frontend/src/app/core/query/base-criteria.ts b/dmp-frontend/src/app/core/query/base-criteria.ts index 29d339a13..5222f6f03 100644 --- a/dmp-frontend/src/app/core/query/base-criteria.ts +++ b/dmp-frontend/src/app/core/query/base-criteria.ts @@ -1,3 +1,3 @@ export class BaseCriteria { - public like: string; + public like?: string; } diff --git a/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts b/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts index c04a51a8c..8c40643e5 100644 --- a/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts +++ b/dmp-frontend/src/app/core/query/dmp/dmp-criteria.ts @@ -1,9 +1,12 @@ import { ProjectListingModel } from "../../model/project/project-listing"; import { BaseCriteria } from "../base-criteria"; +import { OrganizationModel } from "../../model/organisation/organization"; export class DmpCriteria extends BaseCriteria { - public projects: ProjectListingModel[] = []; - public groupIds: string[]; - public allVersions: boolean; + public organisations?: string[] = []; + public projects?: ProjectListingModel[] = []; + public groupIds?: string[]; + public allVersions?: boolean; public status?: number; + public role?: number; } diff --git a/dmp-frontend/src/app/core/query/organisation/organisation-criteria.ts b/dmp-frontend/src/app/core/query/organisation/organisation-criteria.ts new file mode 100644 index 000000000..66cc6a731 --- /dev/null +++ b/dmp-frontend/src/app/core/query/organisation/organisation-criteria.ts @@ -0,0 +1,5 @@ +import { BaseCriteria } from "../base-criteria"; + +export class OrganisationCriteria extends BaseCriteria { + public labelLike: string; +} diff --git a/dmp-frontend/src/app/core/services/organisation/organisation.service.ts b/dmp-frontend/src/app/core/services/organisation/organisation.service.ts new file mode 100644 index 000000000..a7287b221 --- /dev/null +++ b/dmp-frontend/src/app/core/services/organisation/organisation.service.ts @@ -0,0 +1,29 @@ +import { Injectable } from "@angular/core"; +import { HttpHeaders } from "@angular/common/http"; +import { BaseHttpService } from "../http/base-http.service"; +import { environment } from "../../../../environments/environment"; +import { Observable } from "rxjs/internal/Observable"; +import { DataTableData } from "../../model/data-table/data-table-data"; +import { OrganizationModel } from "../../model/organisation/organization"; +import { OrganisationCriteria } from "../../query/organisation/organisation-criteria"; +import { DataTableRequest } from "../../model/data-table/data-table-request"; + +@Injectable() +export class OrganisationService { + + private actionUrl: string; + private headers: HttpHeaders; + + constructor(private http: BaseHttpService) { + + this.actionUrl = environment.Server; + + this.headers = new HttpHeaders(); + this.headers = this.headers.set('Content-Type', 'application/json'); + this.headers = this.headers.set('Accept', 'application/json'); + } + + public searchInternalOrganisations(dataTableRequest: DataTableRequest): Observable> { + return this.http.post>(this.actionUrl + 'internal/organisations', dataTableRequest , { headers: this.headers }); + } +} diff --git a/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts b/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts index d42ff27ca..e8c419022 100644 --- a/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts +++ b/dmp-frontend/src/app/ui/dashboard/dashboard.component.ts @@ -54,16 +54,16 @@ export class DashboardComponent extends BaseComponent implements OnInit { ngOnInit() { - if (this.isAuthenticated()) { - this.userService.getRecentActivity() - .pipe(takeUntil(this._destroyed)) - .subscribe(response => { - this.datasetActivities = response['recentDatasetActivities']; - this.dmpActivities = response['recentDmpActivities']; - this.projectActivities = response['recentProjectActivities']; - this.organisationActivities = response['totalOrganisationCount']; - }); - } + // if (this.isAuthenticated()) { + // this.userService.getRecentActivity() + // .pipe(takeUntil(this._destroyed)) + // .subscribe(response => { + // this.datasetActivities = response['recentDatasetActivities']; + // this.dmpActivities = response['recentDmpActivities']; + // this.projectActivities = response['recentProjectActivities']; + // this.organisationActivities = response['totalOrganisationCount']; + // }); + // } // this.projectAutoCompleteConfiguration = { // filterFn: this.searchProject.bind(this), diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html index 1ded81b9d..0a4966068 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.html @@ -53,10 +53,10 @@
{{ 'DATASET-PROFILE-LISTING.COLUMNS.ROLE' | translate }}
- - {{ 'TYPES.DATASET-ROLE.ANY' | translate }} - {{ 'TYPES.DATASET-ROLE.OWNER' | translate }} - {{ 'TYPES.DATASET-ROLE.MEMBER' | translate }} + + {{ 'TYPES.DATASET-ROLE.ANY' | translate }} + {{ 'TYPES.DATASET-ROLE.OWNER' | translate }} + {{ 'TYPES.DATASET-ROLE.MEMBER' | translate }}
diff --git a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts index cf4bacda2..0b8d9bd1e 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/criteria/dmp-criteria.component.ts @@ -17,6 +17,10 @@ import { DmpUploadDialogue } from './upload-dialogue/dmp-upload-dialogue.compone import { Observable } from 'rxjs'; import { ExternalSourceItemModel } from '../../../../core/model/external-sources/external-source-item'; import { ExternalSourcesService } from '../../../../core/services/external-sources/external-sources.service'; +import { OrganisationService } from '../../../../core/services/organisation/organisation.service'; +import { OrganisationCriteria } from '../../../../core/query/organisation/organisation-criteria'; +import { OrganizationModel } from '../../../../core/model/organisation/organization'; +import { DataTableData } from '../../../../core/model/data-table/data-table-data'; @Component({ selector: 'app-dmp-criteria-component', @@ -37,7 +41,8 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni like: new FormControl(), projects: new FormControl(), status: new FormControl(), - organisations: new FormControl() + organisations: new FormControl(), + role: new FormControl }); projectAutoCompleteConfiguration: MultipleAutoCompleteConfiguration = { @@ -60,17 +65,19 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni private dmpService: DmpService, public formBuilder: FormBuilder, private dialog: MatDialog, - private externalSourcesService: ExternalSourcesService + private organisationService: OrganisationService ) { super(new ValidationErrorModel()); } ngOnInit() { super.ngOnInit(); - + this.formGroup.get('role').valueChanges + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); this.formGroup.get('organisations').valueChanges - .pipe(takeUntil(this._destroyed)) - .subscribe(x => this.controlModified()); + .pipe(takeUntil(this._destroyed)) + .subscribe(x => this.controlModified()); this.formGroup.get('status').valueChanges .pipe(takeUntil(this._destroyed)) .subscribe(x => this.controlModified()); @@ -111,11 +118,16 @@ export class DmpCriteriaComponent extends BaseCriteriaComponent implements OnIni return this.projectService.getPaged(projectRequestItem, "autocomplete").map(x => x.data); } - filterOrganisations(value: string): Observable { + filterOrganisations(value: string) { this.filteredOrganisations = undefined; this.filteringOrganisationsAsync = true; + const fields: Array = new Array(); + fields.push('asc'); + const dataTableRequest: DataTableRequest = new DataTableRequest(0, null, { fields: fields }); + dataTableRequest.criteria = new OrganisationCriteria(); + dataTableRequest.criteria.labelLike = value; - return this.externalSourcesService.searchDMPOrganizations(value); + return this.organisationService.searchInternalOrganisations(dataTableRequest).map(x => x.data); } fileSave(event) { diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html index 307046026..3a8b19882 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.html @@ -18,7 +18,7 @@
- +
diff --git a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts index e32225c2d..6c0685fdf 100644 --- a/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts +++ b/dmp-frontend/src/app/ui/dmp/listing/dmp-listing.component.ts @@ -85,7 +85,6 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread } } }); - } refresh() { @@ -94,7 +93,15 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread let fields: Array = new Array(); if (this.sort && this.sort.active) { fields = this.sort.direction === 'asc' ? ['+' + this.sort.active] : ['-' + this.sort.active]; } const request = new DataTableRequest(startIndex, this._paginator.pageSize, { fields: fields }); - request.criteria = this.criteria.formGroup.value; + let value = this.criteria.formGroup.value; + request.criteria = { + projects: value.projects, + status: value.status, + role: value.role + } + if (value.organisations) { + request.criteria.organisations = value.organisations.map(x => x.id) + } if (this.itemId) { request.criteria.groupIds = [this.itemId]; request.criteria.allVersions = true; @@ -115,7 +122,6 @@ export class DmpListingComponent extends BaseComponent implements OnInit, IBread } pageThisEvent(event) { - console.log(event); this.refresh(); }