From d96964aa48ba530225e847a958e3cfe7a5d54138 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20M=C3=BCller?= Date: Thu, 1 Aug 2019 11:50:53 +0200 Subject: [PATCH] MGR-77 allow filters of suers by group (#15) --- .../conf/datasources/ds-subjects.xml | 10 +- application-home/conf/events/ev-subjects.xml | 10 +- application-home/conf/pages/pg-subjects.xml | 8 +- .../manager/business/Subjects.java | 3 +- .../manager/service/ManagerService.java | 34 +++++- .../application/manager/service/Service.java | 2 +- .../manager/business/SubjectsTest.java | 15 ++- .../xml/SubjectsTest-testShowAll.xml | 11 +- .../SubjectsTest-testShowAllFilterGroup.xml | 113 ++++++++++++++++++ .../xml/SubjectsTest-testShowOne.xml | 2 +- .../xml/SubjectsTest-testUpdate-action.xml | 4 +- 11 files changed, 184 insertions(+), 28 deletions(-) create mode 100644 src/test/resources/xml/SubjectsTest-testShowAllFilterGroup.xml diff --git a/application-home/conf/datasources/ds-subjects.xml b/application-home/conf/datasources/ds-subjects.xml index b3fe70e..14e23df 100644 --- a/application-home/conf/datasources/ds-subjects.xml +++ b/application-home/conf/datasources/ds-subjects.xml @@ -9,9 +9,10 @@ - + + - + @@ -61,6 +62,7 @@ + @@ -68,7 +70,7 @@ subject - + @@ -106,7 +108,7 @@ - diff --git a/application-home/conf/events/ev-subjects.xml b/application-home/conf/events/ev-subjects.xml index 9006b71..ce3ec73 100644 --- a/application-home/conf/events/ev-subjects.xml +++ b/application-home/conf/events/ev-subjects.xml @@ -29,17 +29,17 @@ - + - ${userid} + ${userId} - @@ -52,12 +52,12 @@ - + - diff --git a/application-home/conf/pages/pg-subjects.xml b/application-home/conf/pages/pg-subjects.xml index 3e86099..1205fb4 100644 --- a/application-home/conf/pages/pg-subjects.xml +++ b/application-home/conf/pages/pg-subjects.xml @@ -21,6 +21,7 @@ + @@ -42,7 +43,7 @@ - ${id} + ${id} ${form_action} @@ -52,7 +53,8 @@ - ${id} + ${id} + ${f_gid} @@ -95,7 +97,7 @@ - ${userid} + ${userid} ${form_action} diff --git a/src/main/java/org/appng/application/manager/business/Subjects.java b/src/main/java/org/appng/application/manager/business/Subjects.java index 6161625..0c5fd20 100644 --- a/src/main/java/org/appng/application/manager/business/Subjects.java +++ b/src/main/java/org/appng/application/manager/business/Subjects.java @@ -107,7 +107,8 @@ public DataContainer getData(Site site, Application application, Environment env data = service.getNewSubject(request, fp, defaultTimezone, languages); } else { try { - data = service.searchSubjects(request, fp, subjectId, defaultTimezone, languages); + Integer groupId = options.getInteger(SUBJECT, "groupId"); + data = service.searchSubjects(request, fp, subjectId, defaultTimezone, languages, groupId); } catch (BusinessException ex) { String message = request.getMessage(ex.getMessageKey(), ex.getMessageArgs()); log.error(message, ex); diff --git a/src/main/java/org/appng/application/manager/service/ManagerService.java b/src/main/java/org/appng/application/manager/service/ManagerService.java index fb56656..a27d711 100644 --- a/src/main/java/org/appng/application/manager/service/ManagerService.java +++ b/src/main/java/org/appng/application/manager/service/ManagerService.java @@ -37,6 +37,7 @@ import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; +import java.util.stream.StreamSupport; import org.apache.commons.collections.comparators.ComparatorChain; import org.apache.commons.io.FileUtils; @@ -129,6 +130,7 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; +import org.springframework.data.domain.Sort.Order; import org.springframework.transaction.annotation.Transactional; /** @@ -1050,7 +1052,7 @@ private void checkSite(Request request, Site site, FieldProcessor fp, Site curre } public DataContainer searchSubjects(Request request, FieldProcessor fp, Integer subjectId, String defaultTimezone, - List languages) throws BusinessException { + List languages, Integer groupId) throws BusinessException { DataContainer data = new DataContainer(fp); if (subjectId != null) { SubjectImpl subject = subjectRepository.findOne(subjectId); @@ -1065,23 +1067,33 @@ public DataContainer searchSubjects(Request request, FieldProcessor fp, Integer } else { String filterParamType = "f_type"; String filterParamName = "f_name"; + String filterParamGroup = "f_gid"; String typeFormRequest = request.getParameter(filterParamType); UserType userType = null != typeFormRequest && UserType.names().contains(typeFormRequest) ? UserType.valueOf(typeFormRequest) : null; String name = request.getParameter(filterParamName); + Pageable pageable = fp.getPageable(); SearchQuery searchQuery = subjectRepository.createSearchQuery(); + searchQuery.setAppendEntityAlias(false); if (StringUtils.isNotBlank(name)) { - searchQuery.like("name", "%" + name + "%"); + searchQuery.contains("e.name", name); } else { - name = ""; + name = StringUtils.EMPTY; } if (null != userType) { - searchQuery.equals("userType", userType); + searchQuery.equals("e.userType", userType); + } + if (null != groupId) { + searchQuery.join("join e.groups g"); + searchQuery.equals("g.id", groupId); + List orders = StreamSupport.stream(pageable.getSort().spliterator(), false) + .map(o -> new Order(o.getDirection(), "e." + o.getProperty())).collect(Collectors.toList()); + pageable = new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), new Sort(orders)); } - Page subjects = subjectRepository.search(searchQuery, fp.getPageable()); + Page subjects = subjectRepository.search(searchQuery, pageable); for (SubjectImpl subject : subjects) { subject.setTypeName(getUserTypeNameProvider(request).getName(subject.getUserType())); } @@ -1093,9 +1105,21 @@ public DataContainer searchSubjects(Request request, FieldProcessor fp, Integer Selection userName = selectionFactory.fromObjects(filterParamName, MessageConstants.NAME, new String[] { name }, new String[] { name }); userName.setType(SelectionType.TEXT); + + List groups = groupRepository.findAll(new Sort(Direction.ASC, "name")); + Selector groupSelector = o -> { + if (null != groupId && groupId.toString().equals(o.getValue())) { + o.setSelected(true); + } + }; + Selection groupSelection = new SelectionBuilder(filterParamGroup).title(MessageConstants.GROUP) + .options(groups).defaultOption(StringUtils.EMPTY, StringUtils.EMPTY).selector(groupSelector) + .type(SelectionType.SELECT).build(); + SelectionGroup filterGroup = new SelectionGroup(); filterGroup.getSelections().add(userName); filterGroup.getSelections().add(userTypes); + filterGroup.getSelections().add(groupSelection); data.getSelectionGroups().add(filterGroup); data.setPage(subjects); } diff --git a/src/main/java/org/appng/application/manager/service/Service.java b/src/main/java/org/appng/application/manager/service/Service.java index df2dbc9..b563087 100644 --- a/src/main/java/org/appng/application/manager/service/Service.java +++ b/src/main/java/org/appng/application/manager/service/Service.java @@ -112,7 +112,7 @@ DataContainer searchResources(Request request, Site site, FieldProcessor fp, Res DataContainer searchSites(Environment environment, FieldProcessor fp, Integer siteId, String name, String domain) throws BusinessException; DataContainer searchSubjects(Request request, FieldProcessor fp, Integer subjectId, String defaultTimezone, - List languages) throws BusinessException; + List languages, Integer groupId) throws BusinessException; DataContainer searchPermissions(FieldProcessor fp, Integer permissionId, Integer appId) throws BusinessException; diff --git a/src/test/java/org/appng/application/manager/business/SubjectsTest.java b/src/test/java/org/appng/application/manager/business/SubjectsTest.java index fc3be7c..3bd164e 100644 --- a/src/test/java/org/appng/application/manager/business/SubjectsTest.java +++ b/src/test/java/org/appng/application/manager/business/SubjectsTest.java @@ -119,8 +119,8 @@ public void testCreateNameExists() throws Exception { @Test public void testDelete() throws ProcessingException, IOException { - CallableAction callableAction = getAction(SUBJECT_EVENT, "delete").withParam("userid", "2") - .withParam("form_action", "delete").getCallableAction(null); + CallableAction callableAction = getAction(SUBJECT_EVENT, "delete").withParam("userId", "2") + .withParam(FORM_ACTION, "delete").getCallableAction(null); FieldProcessor fieldProcessor = callableAction.perform(); validate(fieldProcessor.getMessages(), differenceListener); @@ -128,7 +128,7 @@ public void testDelete() throws ProcessingException, IOException { @Test public void testShowOne() throws Exception { - CallableDataSource siteDatasource = getDataSource("user").withParam("userid", "1").getCallableDataSource(); + CallableDataSource siteDatasource = getDataSource("user").withParam("userId", "1").getCallableDataSource(); siteDatasource.perform("test"); validate(siteDatasource.getDatasource(), differenceListener); @@ -146,6 +146,13 @@ public void testShowAll() throws Exception { validate(siteDatasource.getDatasource()); } + @Test + public void testShowAllFilterGroup() throws Exception { + CallableDataSource siteDatasource = getDataSource("users").withParam("groupId", "1").getCallableDataSource(); + siteDatasource.perform("test"); + validate(siteDatasource.getDatasource()); + } + @Test public void testUpdate() throws Exception { SubjectImpl s = getSubject(); @@ -154,7 +161,7 @@ public void testUpdate() throws Exception { SubjectForm form = new SubjectForm(s); form.setPassword("newpassword"); form.setPasswordConfirmation("newpassword"); - CallableAction callableAction = getAction(SUBJECT_EVENT, "update").withParam("userid", "1") + CallableAction callableAction = getAction(SUBJECT_EVENT, "update").withParam("userId", "1") .withParam(FORM_ACTION, "update").getCallableAction(form); FieldProcessor fieldProcessor = callableAction.perform(); diff --git a/src/test/resources/xml/SubjectsTest-testShowAll.xml b/src/test/resources/xml/SubjectsTest-testShowAll.xml index dd1c8d8..7f1d66a 100644 --- a/src/test/resources/xml/SubjectsTest-testShowAll.xml +++ b/src/test/resources/xml/SubjectsTest-testShowAll.xml @@ -6,9 +6,10 @@ - + + - + @@ -70,6 +71,12 @@