From 25410110e0b12f9ca099d11b104dbfff71f24f09 Mon Sep 17 00:00:00 2001 From: "Gravitee.io Bot" Date: Mon, 17 Jul 2017 21:29:56 +0000 Subject: [PATCH] feat(groups): move api/app groups to user groups fix gravitee-io/issues#727 --- pom.xml | 4 +-- .../management/MongoApiRepository.java | 2 +- .../MongoApplicationRepository.java | 2 +- .../management/MongoGroupRepository.java | 16 ++++----- .../management/MongoMembershipRepository.java | 36 ++++++++++++++----- .../internal/api/ApiMongoRepository.java | 2 +- .../ApplicationMongoRepository.java | 4 +-- .../internal/group/GroupMongoRepository.java | 5 +-- .../membership/MembershipMongoRepository.java | 9 +++-- .../management/internal/model/ApiMongo.java | 11 +++--- .../internal/model/ApplicationMongo.java | 12 ++++--- .../management/internal/model/GroupMongo.java | 9 ----- .../internal/model/MembershipMongo.java | 17 ++++----- 13 files changed, 74 insertions(+), 55 deletions(-) diff --git a/pom.xml b/pom.xml index 17eaa3a6..0b0b9fdf 100644 --- a/pom.xml +++ b/pom.xml @@ -32,12 +32,12 @@ Gravitee.io APIM - Repository - MongoDB - 1.8.1 + 1.9.0-SNAPSHOT + 1.9.0-SNAPSHOT 1.50.5 3.4.2 1.7.2.RELEASE 5.4.0 - 1.8.1 2.10 diff --git a/src/main/java/io/gravitee/repository/mongodb/management/MongoApiRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/MongoApiRepository.java index c896cda9..4ac0a1be 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/MongoApiRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/MongoApiRepository.java @@ -93,7 +93,7 @@ public Api update(Api api) throws TechnicalException { apiMongo.setVersion(api.getVersion()); apiMongo.setDeployedAt(api.getDeployedAt()); apiMongo.setPicture(api.getPicture()); - apiMongo.setGroup(api.getGroup()); + apiMongo.setGroups(api.getGroups()); apiMongo.setViews(api.getViews()); apiMongo.setLabels(api.getLabels()); diff --git a/src/main/java/io/gravitee/repository/mongodb/management/MongoApplicationRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/MongoApplicationRepository.java index 0dcd326f..9f12e327 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/MongoApplicationRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/MongoApplicationRepository.java @@ -70,7 +70,7 @@ public Application update(Application application) throws TechnicalException { applicationMongo.setDescription(application.getDescription()); applicationMongo.setUpdatedAt(application.getUpdatedAt()); applicationMongo.setType(application.getType()); - applicationMongo.setGroup(application.getGroup()); + applicationMongo.setGroups(application.getGroups()); applicationMongo.setStatus(application.getStatus().toString()); ApplicationMongo applicationMongoUpdated = internalApplicationRepo.save(applicationMongo); diff --git a/src/main/java/io/gravitee/repository/mongodb/management/MongoGroupRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/MongoGroupRepository.java index 458315ea..de0603e0 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/MongoGroupRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/MongoGroupRepository.java @@ -51,6 +51,14 @@ public Optional findById(String s) throws TechnicalException { return Optional.ofNullable(group); } + @Override + public Set findByIds(Set ids) throws TechnicalException { + logger.debug("Find groups by ids"); + Set groups = collection2set(internalRepository.findByIds(ids)); + logger.debug("Find groups by ids - Found {}", groups); + return groups; + } + @Override public Group create(Group group) throws TechnicalException { logger.debug("Create group [{}]", group.getName()); @@ -88,14 +96,6 @@ public Set findAll() throws TechnicalException { return all; } - @Override - public Set findByType(Group.Type type) throws TechnicalException { - logger.debug("Find group by type [{}]", type); - Set groups = collection2set(internalRepository.findByType(type.name())); - logger.debug("Find group by type [{}] - Found {}.", type, groups.size()); - return groups; - } - private GroupMongo map(Group group) { return mapper.map(group, GroupMongo.class); } diff --git a/src/main/java/io/gravitee/repository/mongodb/management/MongoMembershipRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/MongoMembershipRepository.java index 6b577a64..22bac800 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/MongoMembershipRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/MongoMembershipRepository.java @@ -30,9 +30,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; -import java.util.List; -import java.util.Optional; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; @@ -85,6 +83,19 @@ public Optional findById(String userId, MembershipReferenceType refe return Optional.ofNullable(map(membershipMongo)); } + @Override + public Set findByIds(String userId, MembershipReferenceType referenceType, Set referenceIds) throws TechnicalException { + logger.debug("Find membership by IDs [{}, {}, {}]", userId, referenceType, referenceIds); + + Set memberships = internalMembershipRepo.findByIds(userId, referenceType.name(), referenceIds). + stream(). + map(this::map). + collect(Collectors.toSet()); + + logger.debug("Find membership by IDs [{}, {}, {}]", userId, referenceType, referenceIds); + return memberships; + } + @Override public Set findByReferenceAndRole(MembershipReferenceType referenceType, String referenceId, RoleScope roleScope, String roleName) throws TechnicalException { logger.debug("Find membership by reference [{}, {}]", referenceType, referenceId); @@ -146,10 +157,13 @@ private Membership map(MembershipMongo membershipMongo) { membership.setUserId(membershipMongo.getId().getUserId()); membership.setReferenceType(MembershipReferenceType.valueOf(membershipMongo.getId().getReferenceType())); membership.setReferenceId(membershipMongo.getId().getReferenceId()); - String[] role = convertTypeToRole(membershipMongo.getType()); - if (role != null) { - membership.setRoleScope(Integer.valueOf(role[0])); - membership.setRoleName(role[1]); + if (membershipMongo.getRoles() != null) { + Map roles = new HashMap<>(membershipMongo.getRoles().size()); + for (String roleAsString : membershipMongo.getRoles()) { + String[] role = convertTypeToRole(roleAsString); + roles.put(Integer.valueOf(role[0]), role[1]); + } + membership.setRoles(roles); } membership.setCreatedAt(membershipMongo.getCreatedAt()); membership.setUpdatedAt(membershipMongo.getUpdatedAt()); @@ -162,7 +176,13 @@ private MembershipMongo map(Membership membership) { } MembershipMongo membershipMongo = new MembershipMongo(); membershipMongo.setId(mapPk(membership)); - membershipMongo.setType(convertRoleToType(membership.getRoleScope(), membership.getRoleName())); + if (membership.getRoles() != null) { + List roles = new ArrayList<>(membership.getRoles().size()); + for (Map.Entry roleEntry : membership.getRoles().entrySet()) { + roles.add(convertRoleToType(roleEntry.getKey(), roleEntry.getValue())); + } + membershipMongo.setRoles(roles); + } membershipMongo.setCreatedAt(membership.getCreatedAt()); membershipMongo.setUpdatedAt(membership.getUpdatedAt()); return membershipMongo; diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/api/ApiMongoRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/api/ApiMongoRepository.java index c09a5856..447a85b6 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/api/ApiMongoRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/api/ApiMongoRepository.java @@ -36,7 +36,7 @@ public interface ApiMongoRepository extends MongoRepository { @Query("{ _id: {$in: ?0} }") Set findByIds(List ids); - @Query("{ group: {$in: ?0} }") + @Query("{ groups: {$in: ?0} }") Set findByGroups(List groupIds); } diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/application/ApplicationMongoRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/application/ApplicationMongoRepository.java index 3d2202e3..f60c9a2c 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/application/ApplicationMongoRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/application/ApplicationMongoRepository.java @@ -35,10 +35,10 @@ public interface ApplicationMongoRepository extends MongoRepository findByIds(List ids); - @Query("{ group: {$in: ?0} }") + @Query("{ groups: {$in: ?0} }") Set findByGroups(List ids); - @Query("{ group: {$in: ?0}, status: {$in: ?1} }") + @Query("{ groups: {$in: ?0}, status: {$in: ?1} }") Set findByGroups(List ids, List statuses); @Query("{ name: { $regex: ?0, $options: 'i'}}") diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/group/GroupMongoRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/group/GroupMongoRepository.java index fb02ada3..fbe2a815 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/group/GroupMongoRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/group/GroupMongoRepository.java @@ -21,6 +21,7 @@ import org.springframework.stereotype.Repository; import java.util.Collection; +import java.util.Set; /** * @author Nicolas GERAUD (nicolas.geraud at graviteesource.com) @@ -29,7 +30,7 @@ @Repository public interface GroupMongoRepository extends MongoRepository { - @Query("{ 'type' : ?0}") - Collection findByType(String type); + @Query("{ _id: {$in: ?0} }") + Collection findByIds(Set ids); } diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/membership/MembershipMongoRepository.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/membership/MembershipMongoRepository.java index ce7020ef..cc02eead 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/membership/MembershipMongoRepository.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/membership/MembershipMongoRepository.java @@ -31,21 +31,24 @@ @Repository public interface MembershipMongoRepository extends MongoRepository { + @Query("{ 'id.userId': ?0, 'id.referenceType': ?1, 'id.referenceId': {$in: ?2} }") + Set findByIds(String userId, String referenceType, Set referenceIds); + @Query("{ 'id.referenceType' : ?0, 'id.referenceId' : ?1 }") Set findByReference(String referenceType, String referenceId); - @Query("{ 'id.referenceType' : ?0, 'id.referenceId' : ?1, 'type' : ?2 }") + @Query("{ 'id.referenceType' : ?0, 'id.referenceId' : ?1, 'roles' : ?2 }") Set findByReferenceAndMembershipType(String referenceType, String referenceId, String membershipType); @Query("{ 'id.referenceType' : ?0, 'id.referenceId' : { $in : ?1 } }") Set findByReferences(String referenceType, List referenceId); - @Query("{ 'id.referenceType' : ?0, 'id.referenceId' : { $in : ?1 }, 'type' : ?2 }") + @Query("{ 'id.referenceType' : ?0, 'id.referenceId' : { $in : ?1 }, 'roles' : ?2 }") Set findByReferencesAndMembershipType(String referenceType, List referenceId, String membershipType); @Query("{ 'id.userId' : ?0, 'id.referenceType' : ?1 }") Set findByUserAndReferenceType(String userId, String referenceType); - @Query("{ 'id.userId' : ?0, 'id.referenceType' : ?1, 'type' : ?2 }") + @Query("{ 'id.userId' : ?0, 'id.referenceType' : ?1, 'roles' : ?2 }") Set findByUserAndReferenceTypeAndMembershipType(String userId, String referenceType, String membershipType); } diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApiMongo.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApiMongo.java index bf99b74f..0a4faf5b 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApiMongo.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApiMongo.java @@ -54,7 +54,7 @@ public class ApiMongo extends Auditable { private String picture; - private String group; + private Set groups; private Set views; @@ -134,12 +134,12 @@ public void setPicture(String picture) { this.picture = picture; } - public String getGroup() { - return group; + public Set getGroups() { + return groups; } - public void setGroup(String group) { - this.group = group; + public void setGroups(Set groups) { + this.groups = groups; } public Set getViews() { @@ -187,6 +187,7 @@ public String toString() { sb.append(", version='").append(version).append('\''); sb.append(", state='").append(lifecycleState).append('\''); sb.append(", visibility='").append(visibility).append('\''); + sb.append(", groups='").append(groups).append('\''); sb.append(", metadatas='").append(metadatas).append('\''); sb.append('}'); return sb.toString(); diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApplicationMongo.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApplicationMongo.java index 5688e089..7cd74781 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApplicationMongo.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/ApplicationMongo.java @@ -22,6 +22,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Objects; +import java.util.Set; /** * Mongo object model for application. @@ -43,7 +44,7 @@ public class ApplicationMongo extends Auditable { private String type; - private String group; + private Set groups; private String status; @@ -79,12 +80,12 @@ public void setType(String type) { this.type = type; } - public String getGroup() { - return group; + public Set getGroups() { + return groups; } - public void setGroup(String group) { - this.group = group; + public void setGroups(Set groups) { + this.groups = groups; } public String getStatus() { @@ -115,6 +116,7 @@ public String toString() { sb.append(", name='").append(name).append('\''); sb.append(", type='").append(type).append('\''); sb.append(", status='").append(status).append('\''); + sb.append(", groups='").append(groups).append('\''); sb.append('}'); return sb.toString(); } diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/GroupMongo.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/GroupMongo.java index c56e2cf8..f041a503 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/GroupMongo.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/GroupMongo.java @@ -28,7 +28,6 @@ public class GroupMongo extends Auditable { @Id private String id; - private String type; private String name; private List administrators; @@ -40,14 +39,6 @@ public void setId(String id) { this.id = id; } - public String getType() { - return type; - } - - public void setType(String type) { - this.type = type; - } - public String getName() { return name; } diff --git a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/MembershipMongo.java b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/MembershipMongo.java index 71b3761f..755b5254 100644 --- a/src/main/java/io/gravitee/repository/mongodb/management/internal/model/MembershipMongo.java +++ b/src/main/java/io/gravitee/repository/mongodb/management/internal/model/MembershipMongo.java @@ -18,6 +18,7 @@ import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; +import java.util.List; import java.util.Objects; /** @@ -29,7 +30,7 @@ public class MembershipMongo extends Auditable { @Id MembershipPkMongo id; - private String type; + private List roles; public MembershipPkMongo getId() { return id; @@ -39,12 +40,12 @@ public void setId(MembershipPkMongo id) { this.id = id; } - public String getType() { - return type; + public List getRoles() { + return roles; } - public void setType(String type) { - this.type = type; + public void setRoles(List roles) { + this.roles = roles; } @Override @@ -53,19 +54,19 @@ public boolean equals(Object o) { if (!(o instanceof MembershipMongo)) return false; MembershipMongo membershipMongo = (MembershipMongo) o; return Objects.equals(id, membershipMongo.id) && - Objects.equals(type, membershipMongo.type); + Objects.equals(roles, membershipMongo.roles); } @Override public int hashCode() { - return Objects.hash(id, type); + return Objects.hash(id, roles); } @Override public String toString() { return "MembershipMongo{" + "id='" + id + '\'' + - ", type ='" + type + '\'' + + ", roles ='" + roles + '\'' + '}'; } }