diff --git a/src/main/java/org/olat/basesecurity/OrganisationService.java b/src/main/java/org/olat/basesecurity/OrganisationService.java index 84835f78233dfe07af6ef9e07bc479156b43757e..539de4b661af20fcf4e45b0bfbfbf5b073c3bbb8 100644 --- a/src/main/java/org/olat/basesecurity/OrganisationService.java +++ b/src/main/java/org/olat/basesecurity/OrganisationService.java @@ -22,6 +22,7 @@ package org.olat.basesecurity; import java.util.List; import org.olat.basesecurity.model.OrganisationMember; +import org.olat.basesecurity.model.SearchMemberParameters; import org.olat.core.id.Identity; import org.olat.core.id.Organisation; import org.olat.core.id.OrganisationRef; @@ -181,7 +182,7 @@ public interface OrganisationService { public void setAsGuest(Identity identity); - public List<OrganisationMember> getMembers(Organisation organisation); + public List<OrganisationMember> getMembers(Organisation organisation, SearchMemberParameters params); public List<Identity> getMembersIdentity(Organisation organisation, OrganisationRoles role); diff --git a/src/main/java/org/olat/basesecurity/SearchIdentityParams.java b/src/main/java/org/olat/basesecurity/SearchIdentityParams.java index 2ef9791b747bd78c1abc57c5111bf3840c893511..fd0c6d6415841362c3ed6fce0e3d1c0e5073650d 100644 --- a/src/main/java/org/olat/basesecurity/SearchIdentityParams.java +++ b/src/main/java/org/olat/basesecurity/SearchIdentityParams.java @@ -169,7 +169,7 @@ public class SearchIdentityParams { public boolean hasUserProperties() { return userProperties != null && !userProperties.isEmpty(); } - + public Map<String, String> getUserProperties() { return userProperties; } diff --git a/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java b/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java index e8126fcf7dd0f0b31e460f85d83309d186c3f3c5..edf42771974740233faba7c73ad994774bc8823f 100644 --- a/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java +++ b/src/main/java/org/olat/basesecurity/manager/IdentityPowerSearchQueriesImpl.java @@ -297,7 +297,7 @@ public class IdentityPowerSearchQueriesImpl implements IdentityPowerSearchQuerie return needsAnd; } - private boolean createUserPropertiesQueryPart(SearchIdentityParams params, StringBuilder sb) { + public boolean createUserPropertiesQueryPart(SearchIdentityParams params, StringBuilder sb) { boolean needsAnd = false; boolean needsUserPropertiesJoin = false; diff --git a/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java b/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java index 9c96fa35123a8b299309871d02c3ab87eb4479b3..fcea4991fbc7164bc72291eab3ca327fe6350d0f 100644 --- a/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java +++ b/src/main/java/org/olat/basesecurity/manager/OrganisationDAO.java @@ -38,12 +38,14 @@ import org.olat.basesecurity.OrganisationType; import org.olat.basesecurity.model.OrganisationImpl; import org.olat.basesecurity.model.OrganisationMember; import org.olat.basesecurity.model.OrganisationNode; +import org.olat.basesecurity.model.SearchMemberParameters; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.PersistenceHelper; import org.olat.core.id.Identity; import org.olat.core.id.Organisation; import org.olat.core.id.OrganisationRef; import org.olat.core.util.StringHelper; +import org.olat.user.propertyhandlers.UserPropertyHandler; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -172,17 +174,22 @@ public class OrganisationDAO { .getResultList(); } - public List<OrganisationMember> getMembers(OrganisationRef organisation) { + public List<OrganisationMember> getMembers(OrganisationRef organisation, SearchMemberParameters params) { StringBuilder sb = new StringBuilder(256); sb.append("select ident, membership.role, membership.inheritanceModeString from organisation org") .append(" inner join org.group baseGroup") .append(" inner join baseGroup.members membership") .append(" inner join membership.identity ident") + .append(" inner join fetch ident.user user") .append(" where org.key=:organisationKey"); - List<Object[]> objects = dbInstance.getCurrentEntityManager() + createUserPropertiesQueryPart(sb, params.getSearchString(), params.getUserProperties()); + + TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager() .createQuery(sb.toString(), Object[].class) - .setParameter("organisationKey", organisation.getKey()) - .getResultList(); + .setParameter("organisationKey", organisation.getKey()); + createUserPropertiesQueryParameters(query, params.getSearchString()); + + List<Object[]> objects = query.getResultList(); List<OrganisationMember> members = new ArrayList<>(objects.size()); for(Object[] object:objects) { Identity identity = (Identity)object[0]; @@ -197,6 +204,29 @@ public class OrganisationDAO { return members; } + private void createUserPropertiesQueryPart(StringBuilder sb, String searchString, List<UserPropertyHandler> handlers) { + if(!StringHelper.containsNonWhitespace(searchString)) return; + + // treat login and userProperties as one element in this query + sb.append(" and ( "); + PersistenceHelper.appendFuzzyLike(sb, "ident.name", "searchString", dbInstance.getDbVendor()); + + for(UserPropertyHandler handler:handlers) { + if(handler.getDatabaseColumnName() != null) { + sb.append(" or "); + PersistenceHelper.appendFuzzyLike(sb, "user.".concat(handler.getName()), "searchString", dbInstance.getDbVendor()); + } + } + sb.append(")"); + } + + private void createUserPropertiesQueryParameters(TypedQuery<?> query, String searchString) { + if(!StringHelper.containsNonWhitespace(searchString)) return; + + String fuzzySearch = PersistenceHelper.makeFuzzyQueryString(searchString); + query.setParameter("searchString", fuzzySearch); + } + public List<Identity> getMembersIdentity(OrganisationRef organisation, String role) { StringBuilder sb = new StringBuilder(256); sb.append("select ident from organisation org") diff --git a/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java b/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java index 7dab218cab152b73d36f999b3c8b95bb56597e75..e0c928a6a9309704be9a7c09b709ab6e01d4797f 100644 --- a/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java +++ b/src/main/java/org/olat/basesecurity/manager/OrganisationServiceImpl.java @@ -40,6 +40,7 @@ import org.olat.basesecurity.OrganisationTypeRef; import org.olat.basesecurity.model.OrganisationImpl; import org.olat.basesecurity.model.OrganisationMember; import org.olat.basesecurity.model.OrganisationNode; +import org.olat.basesecurity.model.SearchMemberParameters; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; import org.olat.core.id.Organisation; @@ -332,8 +333,8 @@ public class OrganisationServiceImpl implements OrganisationService, Initializin } @Override - public List<OrganisationMember> getMembers(Organisation organisation) { - return organisationDao.getMembers(organisation); + public List<OrganisationMember> getMembers(Organisation organisation, SearchMemberParameters params) { + return organisationDao.getMembers(organisation, params); } @Override diff --git a/src/main/java/org/olat/basesecurity/model/SearchMemberParameters.java b/src/main/java/org/olat/basesecurity/model/SearchMemberParameters.java new file mode 100644 index 0000000000000000000000000000000000000000..2bf30b56beef63e4c5e45817837554c7d9253b81 --- /dev/null +++ b/src/main/java/org/olat/basesecurity/model/SearchMemberParameters.java @@ -0,0 +1,52 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.basesecurity.model; + +import java.util.List; + +import org.olat.user.propertyhandlers.UserPropertyHandler; + +/** + * + * Initial date: 17 juil. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class SearchMemberParameters { + + private String searchString; + private List<UserPropertyHandler> userProperties; + + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public List<UserPropertyHandler> getUserProperties() { + return userProperties; + } + + public void setUserProperties(List<UserPropertyHandler> userProperties) { + this.userProperties = userProperties; + } +} diff --git a/src/main/java/org/olat/modules/curriculum/CurriculumService.java b/src/main/java/org/olat/modules/curriculum/CurriculumService.java index 3989456b645e7d23649337ed3628d8bf9e30004e..d68466e0dbc58f8db09bbff5cf13b3e9ab1bdc4e 100644 --- a/src/main/java/org/olat/modules/curriculum/CurriculumService.java +++ b/src/main/java/org/olat/modules/curriculum/CurriculumService.java @@ -34,6 +34,7 @@ import org.olat.modules.curriculum.model.CurriculumElementRepositoryEntryViews; import org.olat.modules.curriculum.model.CurriculumInfos; import org.olat.modules.curriculum.model.CurriculumMember; import org.olat.modules.curriculum.model.CurriculumSearchParameters; +import org.olat.modules.curriculum.model.SearchMemberParameters; import org.olat.modules.taxonomy.TaxonomyLevel; import org.olat.modules.taxonomy.TaxonomyLevelRef; import org.olat.repository.RepositoryEntry; @@ -80,7 +81,7 @@ public interface CurriculumService { * @param curriculum The curriculum * @return A list of memberships */ - public List<CurriculumMember> getMembers(CurriculumRef curriculum); + public List<CurriculumMember> getMembers(CurriculumRef curriculum, SearchMemberParameters params); /** * Get the list of members of the specified curriculum with the specified @@ -268,7 +269,7 @@ public interface CurriculumService { * @param element The curriculum element * @return The list of memberships */ - public List<CurriculumMember> getMembers(CurriculumElement element); + public List<CurriculumMember> getMembers(CurriculumElement element, SearchMemberParameters params); /** * The list of members of the specified curriculum element with the specified role. diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java index e9fe1dc6abb7b46d97f1bb05abc034204da331ac..1ec02a3dfde3d4956710a495a877e1c7072baab6 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumDAO.java @@ -41,7 +41,6 @@ import org.olat.modules.curriculum.CurriculumRef; import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.model.CurriculumImpl; import org.olat.modules.curriculum.model.CurriculumInfos; -import org.olat.modules.curriculum.model.CurriculumMember; import org.olat.modules.curriculum.model.CurriculumSearchParameters; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -245,27 +244,6 @@ public class CurriculumDAO { return dbInstance.getCurrentEntityManager().merge(curriculum); } - public List<CurriculumMember> getMembers(CurriculumRef curriculum) { - StringBuilder sb = new StringBuilder(256); - sb.append("select ident, membership.role from curriculum cur") - .append(" inner join cur.group baseGroup") - .append(" inner join baseGroup.members membership") - .append(" inner join membership.identity ident") - .append(" inner join fetch ident.user identUser") - .append(" where cur.key=:curriculumKey"); - List<Object[]> rawObjects = dbInstance.getCurrentEntityManager() - .createQuery(sb.toString(), Object[].class) - .setParameter("curriculumKey", curriculum.getKey()) - .getResultList(); - List<CurriculumMember> members = new ArrayList<>(rawObjects.size()); - for(Object[] object:rawObjects) { - Identity identity = (Identity)object[0]; - String role = (String)object[1]; - members.add(new CurriculumMember(identity, role)); - } - return members; - } - public List<Identity> getMembersIdentity(CurriculumRef curriculum, String role) { StringBuilder sb = new StringBuilder(256); sb.append("select ident from curriculum cur") diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java index 06b96bbe2d30645c716f856b56fa7d431dd04035..fd045b92ccfa24550b1919f7c95f64908ddb25b9 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumElementDAO.java @@ -32,7 +32,6 @@ import java.util.stream.Collectors; import javax.persistence.TypedQuery; import org.olat.basesecurity.GroupMembership; -import org.olat.basesecurity.GroupMembershipInheritance; import org.olat.basesecurity.manager.GroupDAO; import org.olat.core.commons.persistence.DB; import org.olat.core.commons.persistence.PersistenceHelper; @@ -48,7 +47,6 @@ import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.model.CurriculumElementImpl; import org.olat.modules.curriculum.model.CurriculumElementInfos; import org.olat.modules.curriculum.model.CurriculumElementMembershipImpl; -import org.olat.modules.curriculum.model.CurriculumMember; import org.olat.repository.RepositoryEntryRef; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -291,32 +289,6 @@ public class CurriculumElementDAO { .getResultList(); } - public List<CurriculumMember> getMembers(CurriculumElementRef element) { - StringBuilder sb = new StringBuilder(256); - sb.append("select ident, membership.role, membership.inheritanceModeString from curriculumelement el") - .append(" inner join el.group baseGroup") - .append(" inner join baseGroup.members membership") - .append(" inner join membership.identity ident") - .append(" inner join fetch ident.user identUser") - .append(" where el.key=:elementKey"); - List<Object[]> objects = dbInstance.getCurrentEntityManager() - .createQuery(sb.toString(), Object[].class) - .setParameter("elementKey", element.getKey()) - .getResultList(); - List<CurriculumMember> members = new ArrayList<>(objects.size()); - for(Object[] object:objects) { - Identity identity = (Identity)object[0]; - String role = (String)object[1]; - String inheritanceModeString = (String)object[2]; - GroupMembershipInheritance inheritanceMode = GroupMembershipInheritance.none; - if(StringHelper.containsNonWhitespace(inheritanceModeString)) { - inheritanceMode = GroupMembershipInheritance.valueOf(inheritanceModeString); - } - members.add(new CurriculumMember(identity, role, inheritanceMode)); - } - return members; - } - public List<Identity> getMembersIdentity(CurriculumElementRef element, String role) { StringBuilder sb = new StringBuilder(256); sb.append("select ident from curriculumelement el") diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumMemberQueries.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumMemberQueries.java new file mode 100644 index 0000000000000000000000000000000000000000..949600910af388a9d46634e2ca46e3fd3b0fc842 --- /dev/null +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumMemberQueries.java @@ -0,0 +1,131 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.curriculum.manager; + +import java.util.ArrayList; +import java.util.List; + +import javax.persistence.TypedQuery; + +import org.olat.basesecurity.GroupMembershipInheritance; +import org.olat.core.commons.persistence.DB; +import org.olat.core.commons.persistence.PersistenceHelper; +import org.olat.core.id.Identity; +import org.olat.core.util.StringHelper; +import org.olat.modules.curriculum.CurriculumElementRef; +import org.olat.modules.curriculum.CurriculumRef; +import org.olat.modules.curriculum.model.CurriculumMember; +import org.olat.modules.curriculum.model.SearchMemberParameters; +import org.olat.user.propertyhandlers.UserPropertyHandler; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +/** + * A service to query the members of curriculums and curriculum elements. + * + * Initial date: 17 juil. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +@Service +public class CurriculumMemberQueries { + + @Autowired + private DB dbInstance; + + public List<CurriculumMember> getMembers(CurriculumRef curriculum, SearchMemberParameters params) { + StringBuilder sb = new StringBuilder(256); + sb.append("select ident, membership.role from curriculum cur") + .append(" inner join cur.group baseGroup") + .append(" inner join baseGroup.members membership") + .append(" inner join membership.identity ident") + .append(" inner join fetch ident.user user") + .append(" where cur.key=:curriculumKey"); + createUserPropertiesQueryPart(sb, params.getSearchString(), params.getUserProperties()); + + TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Object[].class) + .setParameter("curriculumKey", curriculum.getKey()); + createUserPropertiesQueryParameters(query, params.getSearchString()); + + List<Object[]> rawObjects = query.getResultList(); + List<CurriculumMember> members = new ArrayList<>(rawObjects.size()); + for(Object[] object:rawObjects) { + Identity identity = (Identity)object[0]; + String role = (String)object[1]; + members.add(new CurriculumMember(identity, role)); + } + return members; + } + + public List<CurriculumMember> getMembers(CurriculumElementRef element, SearchMemberParameters params) { + StringBuilder sb = new StringBuilder(256); + sb.append("select ident, membership.role, membership.inheritanceModeString from curriculumelement el") + .append(" inner join el.group baseGroup") + .append(" inner join baseGroup.members membership") + .append(" inner join membership.identity ident") + .append(" inner join fetch ident.user user") + .append(" where el.key=:elementKey"); + createUserPropertiesQueryPart(sb, params.getSearchString(), params.getUserProperties()); + + TypedQuery<Object[]> query = dbInstance.getCurrentEntityManager() + .createQuery(sb.toString(), Object[].class) + .setParameter("elementKey", element.getKey()); + createUserPropertiesQueryParameters(query, params.getSearchString()); + + List<Object[]> objects = query.getResultList(); + List<CurriculumMember> members = new ArrayList<>(objects.size()); + for(Object[] object:objects) { + Identity identity = (Identity)object[0]; + String role = (String)object[1]; + String inheritanceModeString = (String)object[2]; + GroupMembershipInheritance inheritanceMode = GroupMembershipInheritance.none; + if(StringHelper.containsNonWhitespace(inheritanceModeString)) { + inheritanceMode = GroupMembershipInheritance.valueOf(inheritanceModeString); + } + members.add(new CurriculumMember(identity, role, inheritanceMode)); + } + return members; + } + + private void createUserPropertiesQueryPart(StringBuilder sb, String searchString, List<UserPropertyHandler> handlers) { + if(!StringHelper.containsNonWhitespace(searchString)) return; + + // treat login and userProperties as one element in this query + sb.append(" and ( "); + PersistenceHelper.appendFuzzyLike(sb, "ident.name", "searchString", dbInstance.getDbVendor()); + + for(UserPropertyHandler handler:handlers) { + if(handler.getDatabaseColumnName() != null) { + sb.append(" or "); + PersistenceHelper.appendFuzzyLike(sb, "user.".concat(handler.getName()), "searchString", dbInstance.getDbVendor()); + } + } + sb.append(")"); + } + + private void createUserPropertiesQueryParameters(TypedQuery<?> query, String searchString) { + if(!StringHelper.containsNonWhitespace(searchString)) return; + + String fuzzySearch = PersistenceHelper.makeFuzzyQueryString(searchString); + query.setParameter("searchString", fuzzySearch); + } + +} diff --git a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java index 38064a758b98c4d37c59a8dbace6229f387dbb92..1175dfe8d376011881a48bb16b9ded632b044b9b 100644 --- a/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java +++ b/src/main/java/org/olat/modules/curriculum/manager/CurriculumServiceImpl.java @@ -55,6 +55,7 @@ import org.olat.modules.curriculum.model.CurriculumElementRepositoryEntryViews; import org.olat.modules.curriculum.model.CurriculumInfos; import org.olat.modules.curriculum.model.CurriculumMember; import org.olat.modules.curriculum.model.CurriculumSearchParameters; +import org.olat.modules.curriculum.model.SearchMemberParameters; import org.olat.modules.taxonomy.TaxonomyLevel; import org.olat.modules.taxonomy.TaxonomyLevelRef; import org.olat.repository.RepositoryEntry; @@ -83,6 +84,8 @@ public class CurriculumServiceImpl implements CurriculumService { @Autowired private CurriculumDAO curriculumDao; @Autowired + private CurriculumMemberQueries memberQueries; + @Autowired private RepositoryEntryMyCourseQueries myCourseQueries; @Autowired private RepositoryEntryDAO repositoryEntryDao; @@ -115,8 +118,8 @@ public class CurriculumServiceImpl implements CurriculumService { } @Override - public List<CurriculumMember> getMembers(CurriculumRef curriculum) { - return curriculumDao.getMembers(curriculum); + public List<CurriculumMember> getMembers(CurriculumRef curriculum, SearchMemberParameters params) { + return memberQueries.getMembers(curriculum, params); } @Override @@ -187,7 +190,7 @@ public class CurriculumServiceImpl implements CurriculumService { public CurriculumElementType cloneCurriculumElementType(CurriculumElementTypeRef elementType) { CurriculumElementType clonedType = curriculumElementTypeDao.cloneCurriculumElementType(elementType); List<CurriculumElementTypeToType> allowSubTypesToTypes = curriculumElementTypeToTypeDao.getAllowedSubTypes(elementType); - if(allowSubTypesToTypes.size() > 0) { + if(!allowSubTypesToTypes.isEmpty()) { for(CurriculumElementTypeToType allowSubTypeToType:allowSubTypesToTypes) { curriculumElementTypeToTypeDao.addAllowedSubType(clonedType, allowSubTypeToType.getAllowedSubType()); } @@ -278,8 +281,8 @@ public class CurriculumServiceImpl implements CurriculumService { } @Override - public List<CurriculumMember> getMembers(CurriculumElement element) { - return curriculumElementDao.getMembers(element); + public List<CurriculumMember> getMembers(CurriculumElement element, SearchMemberParameters params) { + return memberQueries.getMembers(element, params); } @Override diff --git a/src/main/java/org/olat/modules/curriculum/model/SearchMemberParameters.java b/src/main/java/org/olat/modules/curriculum/model/SearchMemberParameters.java new file mode 100644 index 0000000000000000000000000000000000000000..bbfb0a0c4d63725f5a805de28a924e002c236c2b --- /dev/null +++ b/src/main/java/org/olat/modules/curriculum/model/SearchMemberParameters.java @@ -0,0 +1,54 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.curriculum.model; + +import java.util.List; + +import org.olat.user.propertyhandlers.UserPropertyHandler; + +/** + * + * Initial date: 17 juil. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class SearchMemberParameters { + + private String searchString; + private List<UserPropertyHandler> userProperties; + + public String getSearchString() { + return searchString; + } + + public void setSearchString(String searchString) { + this.searchString = searchString; + } + + public List<UserPropertyHandler> getUserProperties() { + return userProperties; + } + + public void setUserProperties(List<UserPropertyHandler> userProperties) { + this.userProperties = userProperties; + } + + +} diff --git a/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java b/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java index 490fce5263e6599ab1ab071505f3aeaf7d4443fe..888f69eaf211c62485a22dc44eb374391a3ec9e2 100644 --- a/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java +++ b/src/main/java/org/olat/modules/curriculum/restapi/CurriculumElementsWebService.java @@ -55,6 +55,7 @@ import org.olat.modules.curriculum.manager.CurriculumElementToTaxonomyLevelDAO; import org.olat.modules.curriculum.model.CurriculumElementRefImpl; import org.olat.modules.curriculum.model.CurriculumElementTypeRefImpl; import org.olat.modules.curriculum.model.CurriculumMember; +import org.olat.modules.curriculum.model.SearchMemberParameters; import org.olat.modules.taxonomy.TaxonomyLevel; import org.olat.modules.taxonomy.TaxonomyService; import org.olat.modules.taxonomy.model.TaxonomyLevelRefImpl; @@ -505,7 +506,8 @@ public class CurriculumElementsWebService { return Response.serverError().status(Status.UNAUTHORIZED).build(); } - List<CurriculumMember> members = curriculumService.getMembers(curriculumElement); + SearchMemberParameters params = new SearchMemberParameters(); + List<CurriculumMember> members = curriculumService.getMembers(curriculumElement, params); List<CurriculumElementMemberVO> voList = new ArrayList<>(members.size()); for(CurriculumMember member:members) { voList.add(CurriculumElementMemberVO.valueOf(member)); diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java index 7454020299cc681dcd4dec6979d15fd4d0a484ee..1f7c09d0b77c8d7a16837120545c8ee7d0bf4278 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumElementUserManagementController.java @@ -40,6 +40,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; @@ -55,6 +56,7 @@ import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.CurriculumSecurityCallback; import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.model.CurriculumMember; +import org.olat.modules.curriculum.model.SearchMemberParameters; import org.olat.modules.curriculum.ui.CurriculumUserManagementTableModel.CurriculumMemberCols; import org.olat.modules.curriculum.ui.event.RoleEvent; import org.olat.user.UserManager; @@ -141,15 +143,19 @@ public class CurriculumElementUserManagementController extends FormBasicControll columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumMemberCols.role, new RoleFlexiCellRenderer(getTranslator()))); - tableModel = new CurriculumUserManagementTableModel(columnsModel); + tableModel = new CurriculumUserManagementTableModel(columnsModel, getLocale()); tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, 20, false, getTranslator(), formLayout); tableEl.setExportEnabled(true); tableEl.setSelectAllEnable(true); tableEl.setMultiSelect(true); + tableEl.setSearchEnabled(true); } private void loadModel(boolean reset) { - List<CurriculumMember> members = curriculumService.getMembers(curriculumElement); + SearchMemberParameters params = new SearchMemberParameters(); + params.setSearchString(tableEl.getQuickSearchString()); + params.setUserProperties(userPropertyHandlers); + List<CurriculumMember> members = curriculumService.getMembers(curriculumElement, params); List<CurriculumMemberRow> rows = new ArrayList<>(members.size()); for(CurriculumMember member:members) { rows.add(new CurriculumMemberRow(member, userPropertyHandlers, getLocale())); @@ -222,6 +228,10 @@ public class CurriculumElementUserManagementController extends FormBasicControll doRolleCallout(ureq); } else if(removeMembershipButton == source) { doConfirmRemoveAllMemberships(ureq); + } else if(tableEl == source) { + if(event instanceof FlexiTableSearchEvent) { + loadModel(true); + } } super.formInnerEvent(ureq, source, event); } diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java index e67876398473787e48a37201ecd42a806736390f..b8048898829696c13ce6c97f3cb75b2a4dec3500 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementController.java @@ -40,6 +40,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; @@ -55,6 +56,7 @@ import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.CurriculumSecurityCallback; import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.model.CurriculumMember; +import org.olat.modules.curriculum.model.SearchMemberParameters; import org.olat.modules.curriculum.ui.CurriculumUserManagementTableModel.CurriculumMemberCols; import org.olat.modules.curriculum.ui.event.RoleEvent; import org.olat.user.UserManager; @@ -140,15 +142,19 @@ public class CurriculumUserManagementController extends FormBasicController { columnsModel.addFlexiColumnModel(new DefaultFlexiColumnModel(CurriculumMemberCols.role, new RoleFlexiCellRenderer(getTranslator()))); - tableModel = new CurriculumUserManagementTableModel(columnsModel); + tableModel = new CurriculumUserManagementTableModel(columnsModel, getLocale()); tableEl = uifactory.addTableElement(getWindowControl(), "table", tableModel, 20, false, getTranslator(), formLayout); tableEl.setExportEnabled(true); tableEl.setSelectAllEnable(true); tableEl.setMultiSelect(true); + tableEl.setSearchEnabled(true); } private void loadModel(boolean reset) { - List<CurriculumMember> members = curriculumService.getMembers(curriculum); + SearchMemberParameters params = new SearchMemberParameters(); + params.setSearchString(tableEl.getQuickSearchString()); + params.setUserProperties(userPropertyHandlers); + List<CurriculumMember> members = curriculumService.getMembers(curriculum, params); List<CurriculumMemberRow> rows = new ArrayList<>(members.size()); for(CurriculumMember member:members) { rows.add(new CurriculumMemberRow(member, userPropertyHandlers, getLocale())); @@ -221,6 +227,10 @@ public class CurriculumUserManagementController extends FormBasicController { doRolleCallout(ureq); } else if(removeMembershipButton == source) { doConfirmRemoveAllMemberships(ureq); + } else if(tableEl == source) { + if(event instanceof FlexiTableSearchEvent) { + loadModel(true); + } } super.formInnerEvent(ureq, source, event); } diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableModel.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableModel.java index ab56a59a36880e1cfb4b83b250a368d7885bf3f1..5a1d73db8f017ecd0b285cc85c274f0072519ddf 100644 --- a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableModel.java +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableModel.java @@ -19,6 +19,8 @@ */ package org.olat.modules.curriculum.ui; +import java.util.Locale; + import org.olat.core.commons.persistence.SortKey; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiTableDataModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiSortableColumnDef; @@ -34,13 +36,19 @@ import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFl public class CurriculumUserManagementTableModel extends DefaultFlexiTableDataModel<CurriculumMemberRow> implements SortableFlexiTableDataModel<CurriculumMemberRow> { - public CurriculumUserManagementTableModel(FlexiTableColumnModel columnModel) { + private final Locale locale; + + public CurriculumUserManagementTableModel(FlexiTableColumnModel columnModel, Locale locale) { super(columnModel); + this.locale = locale; } @Override - public void sort(SortKey sortKey) { - // + public void sort(SortKey orderBy) { + if(orderBy != null) { + CurriculumUserManagementTableSortDelegate sort = new CurriculumUserManagementTableSortDelegate(orderBy, this, locale); + super.setObjects(sort.sort()); + } } @Override @@ -65,7 +73,7 @@ implements SortableFlexiTableDataModel<CurriculumMemberRow> { @Override public DefaultFlexiTableDataModel<CurriculumMemberRow> createCopyWithEmptyList() { - return new CurriculumUserManagementTableModel(getTableColumnModel()); + return new CurriculumUserManagementTableModel(getTableColumnModel(), locale); } public enum CurriculumMemberCols implements FlexiSortableColumnDef { diff --git a/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableSortDelegate.java b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableSortDelegate.java new file mode 100644 index 0000000000000000000000000000000000000000..b5b4c5859d82ceeb4d539ca53b24f7d48ff3c36b --- /dev/null +++ b/src/main/java/org/olat/modules/curriculum/ui/CurriculumUserManagementTableSortDelegate.java @@ -0,0 +1,38 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.curriculum.ui; + +import java.util.Locale; + +import org.olat.core.commons.persistence.SortKey; +import org.olat.core.gui.components.form.flexible.impl.elements.table.SortableFlexiTableModelDelegate; + +/** + * + * Initial date: 17 juil. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class CurriculumUserManagementTableSortDelegate extends SortableFlexiTableModelDelegate<CurriculumMemberRow> { + + public CurriculumUserManagementTableSortDelegate(SortKey orderBy, CurriculumUserManagementTableModel model, Locale locale) { + super(orderBy, model, locale); + } +} diff --git a/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java b/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java index b7a2ee02416c68a945fc421ce5c7c40290581876..11cbaff05bda2cba39177d82c0ac975faba5f930 100644 --- a/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java +++ b/src/main/java/org/olat/user/ui/organisation/OrganisationUserManagementController.java @@ -34,6 +34,7 @@ import org.olat.basesecurity.events.MultiIdentityChosenEvent; import org.olat.basesecurity.events.SingleIdentityChosenEvent; import org.olat.basesecurity.model.IdentityRefImpl; import org.olat.basesecurity.model.OrganisationMember; +import org.olat.basesecurity.model.SearchMemberParameters; import org.olat.core.gui.UserRequest; import org.olat.core.gui.components.form.flexible.FormItem; import org.olat.core.gui.components.form.flexible.FormItemContainer; @@ -44,6 +45,7 @@ import org.olat.core.gui.components.form.flexible.impl.FormEvent; import org.olat.core.gui.components.form.flexible.impl.elements.table.DefaultFlexiColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableColumnModel; import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableDataModelFactory; +import org.olat.core.gui.components.form.flexible.impl.elements.table.FlexiTableSearchEvent; import org.olat.core.gui.components.link.Link; import org.olat.core.gui.control.Controller; import org.olat.core.gui.control.Event; @@ -143,11 +145,15 @@ public class OrganisationUserManagementController extends FormBasicController { tableEl.setExportEnabled(true); tableEl.setSelectAllEnable(true); tableEl.setMultiSelect(true); + tableEl.setSearchEnabled(true); tableEl.setAndLoadPersistedPreferences(ureq, "organisation-user-list"); } private void loadModel(boolean reset) { - List<OrganisationMember> members = organisationService.getMembers(organisation); + SearchMemberParameters params = new SearchMemberParameters(); + params.setSearchString(tableEl.getQuickSearchString()); + params.setUserProperties(userPropertyHandlers); + List<OrganisationMember> members = organisationService.getMembers(organisation, params); List<OrganisationUserRow> rows = new ArrayList<>(members.size()); for(OrganisationMember member:members) { rows.add(new OrganisationUserRow(member, userPropertyHandlers, getLocale())); @@ -220,6 +226,10 @@ public class OrganisationUserManagementController extends FormBasicController { doRolleCallout(ureq); } else if(removeMembershipButton == source) { doConfirmRemoveAllMemberships(ureq); + } else if(tableEl == source) { + if(event instanceof FlexiTableSearchEvent) { + loadModel(true); + } } super.formInnerEvent(ureq, source, event); } diff --git a/src/main/java/org/olat/user/ui/organisation/_i18n/LocalStrings_de.properties b/src/main/java/org/olat/user/ui/organisation/_i18n/LocalStrings_de.properties index 3dc42ef57f3355b7ef1e94b04ded374ac5d2125b..168f4cd95dde1328cc07704934f7bac7ae0773bc 100644 --- a/src/main/java/org/olat/user/ui/organisation/_i18n/LocalStrings_de.properties +++ b/src/main/java/org/olat/user/ui/organisation/_i18n/LocalStrings_de.properties @@ -13,7 +13,6 @@ edit.type=Organisationtyp editieren institution.to.org=Ressourceverwaltung mit Institutionname zu Organisationen migrieren institution.to.org.explain=Erkl\u00E4rung institution.to.org.label=Migration -role.learnresourcemanager=Lernressourcenverwalter migrate=Migrieren move.organisation=Organisation schieben organisation.admin.enabled=Organisationen einschalten @@ -34,7 +33,6 @@ role.author=$org.olat.admin.user\:role.author role.coach=$org.olat.admin.user\:role.coach role.curriculummanager=$org.olat.admin.user\:role.curriculummanager role.rolesmanager=$org.olat.admin.user\:role.rolesmanager -role.curriculummanager=$org.olat.admin.user\:role.curriculummanager role.groupmanager=$org.olat.admin.user\:role.groupmanager role.guest=$org.olat.admin.user\:role.guest role.principal=$org.olat.admin.user\:role.principal @@ -43,6 +41,7 @@ role.owner=$org.olat.admin.user\:role.owner role.coach=$org.olat.admin.user\:role.coach role.participant=$org.olat.admin.user\:role.participant role.poolmanager=$org.olat.admin.user\:role.poolmanager +role.learnresourcemanager=$org.olat.admin.user\:role.learnresourcemanager role.user=$org.olat.admin.user\:role.user role.usermanager=$org.olat.admin.user\:role.usermanager table.header.displayName=Name diff --git a/src/test/java/org/olat/basesecurity/manager/OrganisationDAOTest.java b/src/test/java/org/olat/basesecurity/manager/OrganisationDAOTest.java index 3a3ca2739d531a8483d0701d259890b884d30335..9536fdda3a7db42b00911bdcb0b936c52cae24de 100644 --- a/src/test/java/org/olat/basesecurity/manager/OrganisationDAOTest.java +++ b/src/test/java/org/olat/basesecurity/manager/OrganisationDAOTest.java @@ -34,6 +34,7 @@ import org.olat.basesecurity.model.OrganisationImpl; import org.olat.basesecurity.model.OrganisationMember; import org.olat.basesecurity.model.OrganisationNode; import org.olat.basesecurity.model.OrganisationRefImpl; +import org.olat.basesecurity.model.SearchMemberParameters; import org.olat.core.commons.persistence.DB; import org.olat.core.id.Identity; import org.olat.core.id.Organisation; @@ -144,7 +145,8 @@ public class OrganisationDAOTest extends OlatTestCase { organisationService.addMember(organisation, member, OrganisationRoles.user); dbInstance.commitAndCloseSession(); - List<OrganisationMember> members = organisationDao.getMembers(organisation); + SearchMemberParameters params = new SearchMemberParameters(); + List<OrganisationMember> members = organisationDao.getMembers(organisation, params); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); OrganisationMember organisationMember = members.get(0); diff --git a/src/test/java/org/olat/core/commons/services/text/TextServiceTest.java b/src/test/java/org/olat/core/commons/services/text/TextServiceTest.java index 5817480152c415d5af0e4a71aafba8f3ab154f59..7913b67c1b0c632340ee6ef9876ccc5df3e29991 100644 --- a/src/test/java/org/olat/core/commons/services/text/TextServiceTest.java +++ b/src/test/java/org/olat/core/commons/services/text/TextServiceTest.java @@ -1,3 +1,22 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ package org.olat.core.commons.services.text; import java.util.Locale; diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java index 877bc364ec16bbdcf2ad8b02801c318734053bc1..4ef4029a296bf8a285e897688f8e97cf3f6355b0 100644 --- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java +++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumDAOTest.java @@ -36,7 +36,6 @@ import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.model.CurriculumImpl; import org.olat.modules.curriculum.model.CurriculumInfos; -import org.olat.modules.curriculum.model.CurriculumMember; import org.olat.modules.curriculum.model.CurriculumSearchParameters; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; @@ -202,23 +201,6 @@ public class CurriculumDAOTest extends OlatTestCase { Assert.assertTrue(userCurriculums.isEmpty()); } - @Test - public void getMembers() { - // add a curriculum manager - Identity manager = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-manager-1"); - Curriculum curriculum = curriculumService.createCurriculum("CUR-1", "Curriculum 1", "Short desc.", null); - dbInstance.commitAndCloseSession(); - curriculumService.addMember(curriculum, manager, CurriculumRoles.curriculummanager); - dbInstance.commitAndCloseSession(); - - // get memberships - List<CurriculumMember> members = curriculumDao.getMembers(curriculum); - Assert.assertNotNull(members); - Assert.assertEquals(1, members.size()); - Assert.assertEquals(CurriculumRoles.curriculummanager.name(), members.get(0).getRole()); - Assert.assertEquals(manager, members.get(0).getIdentity()); - } - @Test public void getMembersIdentity() { // add a curriculum manager diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java index 45e6cb2dc150b15e52e4704297a80354f07a5fa4..53682d642268fcf9153eb9999c681423cab328ff 100644 --- a/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java +++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumElementDAOTest.java @@ -36,7 +36,6 @@ import org.olat.modules.curriculum.CurriculumRoles; import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.model.CurriculumElementImpl; import org.olat.modules.curriculum.model.CurriculumElementInfos; -import org.olat.modules.curriculum.model.CurriculumMember; import org.olat.repository.RepositoryEntry; import org.olat.test.JunitTestHelper; import org.olat.test.OlatTestCase; @@ -316,22 +315,6 @@ public class CurriculumElementDAOTest extends OlatTestCase { Assert.assertTrue(descendants1_1.contains(element1_1_2)); } - @Test - public void getMembers() { - Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1"); - Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-4", "Curriculum for element", "Curriculum", null); - CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null, curriculum); - curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager); - dbInstance.commitAndCloseSession(); - - List<CurriculumMember> members = curriculumElementDao.getMembers(element); - Assert.assertNotNull(members); - Assert.assertEquals(1, members.size()); - CurriculumMember member = members.get(0); - Assert.assertEquals(supervisor, member.getIdentity()); - Assert.assertEquals(CurriculumRoles.curriculummanager.name(), member.getRole()); - } - @Test public void getMembersIdentity() { Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1"); diff --git a/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java b/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java new file mode 100644 index 0000000000000000000000000000000000000000..380cae7fcf103c05d1152ceaf1a8cb06189f44ba --- /dev/null +++ b/src/test/java/org/olat/modules/curriculum/manager/CurriculumMemberQueriesTest.java @@ -0,0 +1,87 @@ +/** + * <a href="http://www.openolat.org"> + * OpenOLAT - Online Learning and Training</a><br> + * <p> + * Licensed under the Apache License, Version 2.0 (the "License"); <br> + * you may not use this file except in compliance with the License.<br> + * You may obtain a copy of the License at the + * <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache homepage</a> + * <p> + * Unless required by applicable law or agreed to in writing,<br> + * software distributed under the License is distributed on an "AS IS" BASIS, <br> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. <br> + * See the License for the specific language governing permissions and <br> + * limitations under the License. + * <p> + * Initial code contributed and copyrighted by<br> + * frentix GmbH, http://www.frentix.com + * <p> + */ +package org.olat.modules.curriculum.manager; + +import java.util.List; + +import org.junit.Assert; +import org.junit.Test; +import org.olat.core.commons.persistence.DB; +import org.olat.core.id.Identity; +import org.olat.modules.curriculum.Curriculum; +import org.olat.modules.curriculum.CurriculumElement; +import org.olat.modules.curriculum.CurriculumRoles; +import org.olat.modules.curriculum.CurriculumService; +import org.olat.modules.curriculum.model.CurriculumMember; +import org.olat.modules.curriculum.model.SearchMemberParameters; +import org.olat.test.JunitTestHelper; +import org.springframework.beans.factory.annotation.Autowired; + +/** + * + * Initial date: 17 juil. 2018<br> + * @author srosse, stephane.rosse@frentix.com, http://www.frentix.com + * + */ +public class CurriculumMemberQueriesTest { + + @Autowired + private DB dbInstance; + @Autowired + private CurriculumService curriculumService; + @Autowired + private CurriculumMemberQueries memberQueries; + + @Test + public void getCurriculumMembers() { + // add a curriculum manager + Identity manager = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-manager-1"); + Curriculum curriculum = curriculumService.createCurriculum("CUR-1", "Curriculum 1", "Short desc.", null); + dbInstance.commitAndCloseSession(); + curriculumService.addMember(curriculum, manager, CurriculumRoles.curriculummanager); + dbInstance.commitAndCloseSession(); + + // get memberships + SearchMemberParameters params = new SearchMemberParameters(); + List<CurriculumMember> members = memberQueries.getMembers(curriculum, params); + Assert.assertNotNull(members); + Assert.assertEquals(1, members.size()); + Assert.assertEquals(CurriculumRoles.curriculummanager.name(), members.get(0).getRole()); + Assert.assertEquals(manager, members.get(0).getIdentity()); + } + + @Test + public void getCurriculumElementMembers() { + Identity supervisor = JunitTestHelper.createAndPersistIdentityAsRndUser("cur-supervisor-1"); + Curriculum curriculum = curriculumService.createCurriculum("cur-for-el-4", "Curriculum for element", "Curriculum", null); + CurriculumElement element = curriculumService.createCurriculumElement("Element-4", "4. Element", null, null, null, null, curriculum); + curriculumService.addMember(element, supervisor, CurriculumRoles.curriculummanager); + dbInstance.commitAndCloseSession(); + + SearchMemberParameters params = new SearchMemberParameters(); + List<CurriculumMember> members = memberQueries.getMembers(element, params); + Assert.assertNotNull(members); + Assert.assertEquals(1, members.size()); + CurriculumMember member = members.get(0); + Assert.assertEquals(supervisor, member.getIdentity()); + Assert.assertEquals(CurriculumRoles.curriculummanager.name(), member.getRole()); + } + +} diff --git a/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java b/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java index c3ee603a2db129b78938d63f1c6d91fec044d679..ea536289bcc169194a5aa02f1c4f0dc417308022 100644 --- a/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java +++ b/src/test/java/org/olat/restapi/CurriculumElementsWebServiceTest.java @@ -57,6 +57,7 @@ import org.olat.modules.curriculum.CurriculumService; import org.olat.modules.curriculum.manager.CurriculumElementToTaxonomyLevelDAO; import org.olat.modules.curriculum.model.CurriculumElementRefImpl; import org.olat.modules.curriculum.model.CurriculumMember; +import org.olat.modules.curriculum.model.SearchMemberParameters; import org.olat.modules.curriculum.restapi.CurriculumElementMemberVO; import org.olat.modules.curriculum.restapi.CurriculumElementVO; import org.olat.modules.taxonomy.Taxonomy; @@ -831,8 +832,9 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase { HttpResponse response = conn.execute(method); Assert.assertEquals(200, response.getStatusLine().getStatusCode()); EntityUtils.consume(response.getEntity()); - - List<CurriculumMember> members = curriculumService.getMembers(element); + + SearchMemberParameters params = new SearchMemberParameters(); + List<CurriculumMember> members = curriculumService.getMembers(element, params); Assert.assertNotNull(members); Assert.assertEquals(1, members.size()); Assert.assertEquals(member, members.get(0).getIdentity()); @@ -980,8 +982,9 @@ public class CurriculumElementsWebServiceTest extends OlatJerseyTestCase { HttpResponse response = conn.execute(method); Assert.assertEquals(200, response.getStatusLine().getStatusCode()); EntityUtils.consume(response.getEntity()); - - List<CurriculumMember> members = curriculumService.getMembers(element); + + SearchMemberParameters params = new SearchMemberParameters(); + List<CurriculumMember> members = curriculumService.getMembers(element, params); Assert.assertNotNull(members); Assert.assertTrue(members.isEmpty()); } diff --git a/src/test/java/org/olat/test/AllTestsJunit4.java b/src/test/java/org/olat/test/AllTestsJunit4.java index 55e2f400f941a4b5527074b7efc2215751a2c9f7..f8ca81a48d59df946f1ba77fd02ddd8402f2b76c 100644 --- a/src/test/java/org/olat/test/AllTestsJunit4.java +++ b/src/test/java/org/olat/test/AllTestsJunit4.java @@ -183,6 +183,7 @@ import org.junit.runners.Suite; org.olat.modules.coach.manager.CoachingDAOTest.class, org.olat.modules.coach.CoachingLargeTest.class, org.olat.modules.curriculum.manager.CurriculumDAOTest.class, + org.olat.modules.curriculum.manager.CurriculumMemberQueriesTest.class, org.olat.modules.curriculum.manager.CurriculumElementDAOTest.class, org.olat.modules.curriculum.manager.CurriculumElementTypeDAOTest.class, org.olat.modules.curriculum.manager.CurriculumRepositoryEntryRelationDAOTest.class,