Skip to content

Commit

Permalink
MGR-67 filter groups, display users (#10)
Browse files Browse the repository at this point in the history
  • Loading branch information
madness-inc committed Jul 3, 2019
1 parent e46e978 commit 7bfb565
Show file tree
Hide file tree
Showing 8 changed files with 158 additions and 38 deletions.
24 changes: 14 additions & 10 deletions application-home/conf/datasources/ds-groups.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<datasources xmlns="http://www.appng.org/schema/platform" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
<datasources xmlns="http://www.appng.org/schema/platform"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.appng.org/schema/platform http://www.appng.org/schema/platform/appng-platform.xsd ">

<datasource id="groups">
Expand All @@ -10,13 +11,11 @@
</permissions>
<params>
<param name="groupid" />
<param name="groupName" />
</params>
<meta-data bindClass="org.appng.api.model.Group" result-selector="${current.id eq groupid}">
<field name="id" type="int">
<label>id</label>
</field>
<field name="name" type="text">
<sort />
<sort prio="0" order="asc" />
<label>name</label>
</field>
<field name="description" type="text">
Expand All @@ -36,25 +35,27 @@
</link>
</linkpanel>
<linkpanel id="actions" location="inline">
<link mode="intern" target="/users/group/update/#{id}#tab_groups" default="true">
<link mode="intern" target="/users/group/update/${current.id}#tab_groups" default="true">
<label>edit</label>
<icon>edit</icon>
<permissions>
<permission ref="group.edit" mode="set" />
</permissions>
</link>
<link mode="intern" target="/users&#63;form_action=deleteGroup&#38;groupid=#{id}">
<link mode="intern" target="/users&#63;form_action=deleteGroup&#38;groupid=${current.id}">
<label>delete</label>
<icon>delete</icon>
<condition expression="${not current.defaultAdmin}"/>
<confirmation id="group.delete.confirm" params="#{name}" />
<condition expression="${not current.defaultAdmin}" />
<confirmation id="group.delete.confirm" params="${current.name}" />
<permissions>
<permission ref="group.delete" mode="set" />
</permissions>
</link>
</linkpanel>
</config>
<bean id="groups" />
<bean id="groups">
<option name="group" groupName="${groupName}" />
</bean>
</datasource>

<datasource id="group">
Expand All @@ -73,6 +74,9 @@
<field name="roles" type="list:select" binding="roleIds">
<label>roles</label>
</field>
<field name="subjects" type="list:checkbox" readonly="true">
<label>subjects</label>
</field>
</meta-data>
</config>
<bean id="groups">
Expand Down
2 changes: 2 additions & 0 deletions application-home/conf/pages/pg-subjects.xml
Expand Up @@ -20,6 +20,7 @@
<get-param name="groupid" />
<get-param name="f_type" />
<get-param name="f_name" />
<get-param name="f_gn" />
</get-params>
<post-params>
<post-param name="form_action" />
Expand Down Expand Up @@ -82,6 +83,7 @@
<datasource id="groups">
<params>
<param name="groupid">${id}</param>
<param name="groupName">${f_gn}</param>
</params>
</datasource>
</element>
Expand Down
Expand Up @@ -85,13 +85,14 @@ public void perform(Site site, Application application, Environment environment,
public DataContainer getData(Site site, Application application, Environment environment, Options options,
Request request, FieldProcessor fp) {
Service service = getService();
Integer groupId = request.convert(options.getOptionValue(GROUP, ID), Integer.class);
Integer groupId = options.getInteger(GROUP, ID);
DataContainer data = null;
if (null == groupId && ACTION_CREATE.equals(getAction(options))) {
data = service.getNewGroup(site, fp);
} else {
try {
data = service.searchGroups(fp, site, null, groupId);
String groupName = options.getString(GROUP, "groupName");
data = service.searchGroups(fp, site, null, groupId, groupName);
} catch (BusinessException ex) {
String message = request.getMessage(ex.getMessageKey(), ex.getMessageArgs());
log.error(message, ex);
Expand Down
Expand Up @@ -35,6 +35,7 @@
import java.util.TimeZone;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

import org.apache.commons.collections.comparators.ComparatorChain;
import org.apache.commons.io.FileUtils;
Expand Down Expand Up @@ -65,6 +66,7 @@
import org.appng.api.model.Subject;
import org.appng.api.model.UserType;
import org.appng.api.support.OptionGroupFactory;
import org.appng.api.support.SelectionBuilder;
import org.appng.api.support.OptionGroupFactory.OptionGroup;
import org.appng.api.support.OptionOwner.Selector;
import org.appng.api.support.SelectionFactory;
Expand Down Expand Up @@ -138,6 +140,7 @@
public class ManagerService extends CoreService implements Service {

private Logger logger = LoggerFactory.getLogger(ManagerService.class);
private static final String FILTER_GROUP_NAME = "f_gn";

private SelectionFactory selectionFactory;
private OptionGroupFactory optionGroupFactory;
Expand Down Expand Up @@ -297,7 +300,7 @@ private void checkUniqueGroupName(Request request, Group group, FieldProcessor f
}
}

public DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId, Integer groupId)
public DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId, Integer groupId, String groupName)
throws BusinessException {
DataContainer data = new DataContainer(fp);
if (groupId != null) {
Expand All @@ -307,10 +310,27 @@ public DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId,
}
Selection selection = getRoleSelection(group, site.getId());

List<String> users = group.getSubjects().stream()
.map(s -> String.format("%s (%s)", s.getAuthName(), s.getRealname())).sorted()
.collect(Collectors.toList());
if (!users.isEmpty()) {
Selection subjects = new SelectionBuilder<String>("subjects").title(MessageConstants.SUBJECTS)
.type(SelectionType.CHECKBOX).options(users).select(users).build();
data.getSelections().add(subjects);
} else {
fp.getMetaData().getFields().remove(fp.getField("group.subjects"));
}
data.getSelections().add(selection);
data.setItem(new GroupForm(group));
} else {
Page<GroupImpl> groups = groupRepository.search(fp.getPageable());
Selection nameFilter = new SelectionBuilder<String>(FILTER_GROUP_NAME)
.defaultOption(FILTER_GROUP_NAME, groupName).title(MessageConstants.NAME).type(SelectionType.TEXT)
.select(groupName).build();
SelectionGroup filter = new SelectionGroup();
filter.getSelections().add(nameFilter);
data.getSelectionGroups().add(filter);
SearchQuery<GroupImpl> groupQuery = groupRepository.createSearchQuery().contains("name", groupName);
Page<GroupImpl> groups = groupRepository.search(groupQuery, fp.getPageable());
data.setPage(groups);
}
return data;
Expand Down
Expand Up @@ -82,7 +82,7 @@ void createProperty(Request request, PropertyForm propertyForm, Integer siteId,
void createPermission(Request request, PermissionImpl permission, Integer appId, FieldProcessor fp)
throws BusinessException;

DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId, Integer groupId) throws BusinessException;
DataContainer searchGroups(FieldProcessor fp, Site site, Integer siteId, Integer groupId, String groupName) throws BusinessException;

DataContainer searchApplications(FieldProcessor fp, Integer siteId, Integer appId, boolean assignedOnly)
throws BusinessException;
Expand Down
Expand Up @@ -27,6 +27,7 @@
import org.appng.core.domain.RoleImpl;
import org.appng.core.domain.SiteApplication;
import org.appng.core.domain.SiteImpl;
import org.appng.testsupport.validation.WritingXmlValidator;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runners.MethodSorters;
Expand All @@ -36,6 +37,10 @@ public class GroupsTest extends AbstractTest {

private static final String GROUP_EVENT = "groupEvent";

static {
WritingXmlValidator.writeXml = false;
}

@Test
public void testCreateGroup() throws Exception {

Expand Down Expand Up @@ -96,10 +101,10 @@ public void testDeleteGroup() throws ProcessingException, IOException {

@Test
public void testShowGroup() throws Exception {
CallableDataSource siteDatasource = getDataSource("group").withParam("groupid", "1").getCallableDataSource();
siteDatasource.perform("test");
CallableDataSource groupDatasource = getDataSource("group").withParam("groupid", "1").getCallableDataSource();
groupDatasource.perform("test");

validate(siteDatasource.getDatasource());
validate(groupDatasource.getDatasource());
}

@Test
Expand All @@ -111,10 +116,19 @@ public void testShowGroups() throws Exception {
addParameter("sortGroups", "name:desc");
initParameters();

CallableDataSource siteDatasource = getDataSource("groups").getCallableDataSource();
siteDatasource.perform("test");
CallableDataSource groupDatasource = getDataSource("groups").getCallableDataSource();
groupDatasource.perform("test");

validate(groupDatasource.getDatasource());
}

@Test
public void testShowGroupsFilterName() throws Exception {
CallableDataSource groupDatasource = getDataSource("groups").withParam("groupName", "admin")
.getCallableDataSource();
groupDatasource.perform("test");

validate(siteDatasource.getDatasource());
validate(groupDatasource.getDatasource());
}

@Test
Expand Down
32 changes: 15 additions & 17 deletions src/test/resources/xml/GroupsTest-testShowGroups.xml
Expand Up @@ -7,11 +7,9 @@
</permissions>
<params>
<param name="groupid" />
<param name="groupName" />
</params>
<meta-data bindClass="org.appng.api.model.Group" result-selector="${current.id eq groupid}">
<field name="id" type="int" format="#" binding="id">
<label id="id">ID</label>
</field>
<field name="name" type="text" binding="name">
<sort order="desc" prio="0" />
<label id="name">Name</label>
Expand All @@ -33,31 +31,35 @@
</link>
</linkpanel>
<linkpanel id="actions" location="inline">
<link id="actions[1]" mode="intern" target="/users/group/update/#{id}#tab_groups" default="true">
<link id="actions[1]" mode="intern" target="/users/group/update/${current.id}#tab_groups" default="true">
<permissions>
<permission ref="group.edit" mode="set"></permission>
</permissions>
<label id="edit">Edit</label>
<icon>edit</icon>
</link>
<link id="actions[2]" mode="intern" target="/users?form_action=deleteGroup&amp;groupid=#{id}">
<link id="actions[2]" mode="intern" target="/users?form_action=deleteGroup&amp;groupid=${current.id}">
<condition expression="${not current.defaultAdmin}" />
<permissions>
<permission ref="group.delete" mode="set"></permission>
</permissions>
<label id="delete">Delete</label>
<icon>delete</icon>
<confirmation id="group.delete.confirm" params="#{name}">Do you really want to delete the group "#{name}"?</confirmation>
<confirmation id="group.delete.confirm" params="${current.name}">Do you really want to delete the group
"${current.name}"?</confirmation>
</link>
</linkpanel>
</config>
<data>
<selectionGroup>
<selection id="f_gn" type="text">
<title id="name">Name</title>
<option value="" name="f_gn" />
</selection>
</selectionGroup>
<resultset chunk="0" chunkname="groups" chunksize="10" nextchunk="0" previouschunk="0" firstchunk="0"
lastchunk="0" hits="3">
<result>
<field name="id" type="int">
<value>3</value>
</field>
<field name="name" type="text">
<value>users</value>
</field>
Expand All @@ -72,14 +74,12 @@
<link id="actions[2]" mode="intern" target="/users?form_action=deleteGroup&amp;groupid=3">
<label id="delete">Delete</label>
<icon>delete</icon>
<confirmation id="group.delete.confirm" params="#{name}">Do you really want to delete the group "users"?</confirmation>
<confirmation id="group.delete.confirm" params="${current.name}">Do you really want to delete the group "users"?
</confirmation>
</link>
</linkpanel>
</result>
<result>
<field name="id" type="int">
<value>1</value>
</field>
<field name="name" type="text">
<value>admin</value>
</field>
Expand All @@ -94,14 +94,12 @@
<link id="actions[2]" mode="intern" target="/users?form_action=deleteGroup&amp;groupid=1">
<label id="delete">Delete</label>
<icon>delete</icon>
<confirmation id="group.delete.confirm" params="#{name}">Do you really want to delete the group "admin"?</confirmation>
<confirmation id="group.delete.confirm" params="${current.name}">Do you really want to delete the group "admin"?
</confirmation>
</link>
</linkpanel>
</result>
<result>
<field name="id" type="int">
<value>4</value>
</field>
<field name="name" type="text">
<value>Administrators</value>
</field>
Expand Down
81 changes: 81 additions & 0 deletions src/test/resources/xml/GroupsTest-testShowGroupsFilterName.xml
@@ -0,0 +1,81 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<datasource xmlns="http://www.appng.org/schema/platform" id="groups">
<config>
<title id="groups">Groups</title>
<permissions>
<permission ref="group.list" mode="set"></permission>
</permissions>
<params>
<param name="groupid"/>
<param name="groupName">admin</param>
</params>
<meta-data bindClass="org.appng.api.model.Group" result-selector="${current.id eq groupid}">
<field name="name" type="text" binding="name">
<sort order="desc" prio="0"/>
<label id="name">Name</label>
</field>
<field name="description" type="text" binding="description">
<label id="description">Description</label>
</field>
<field name="actions" type="linkpanel" binding="actions">
<label id="actions">Actions</label>
</field>
</meta-data>
<linkpanel id="other" location="both">
<link id="other[1]" mode="intern" target="/users/group/create#tab_groups">
<permissions>
<permission ref="group.create" mode="set"></permission>
</permissions>
<label id="group.create">Create group</label>
<icon>new</icon>
</link>
</linkpanel>
<linkpanel id="actions" location="inline">
<link id="actions[1]" mode="intern" target="/users/group/update/${current.id}#tab_groups" default="true">
<permissions>
<permission ref="group.edit" mode="set"></permission>
</permissions>
<label id="edit">Edit</label>
<icon>edit</icon>
</link>
<link id="actions[2]" mode="intern" target="/users?form_action=deleteGroup&amp;groupid=${current.id}">
<condition expression="${not current.defaultAdmin}"/>
<permissions>
<permission ref="group.delete" mode="set"></permission>
</permissions>
<label id="delete">Delete</label>
<icon>delete</icon>
<confirmation id="group.delete.confirm" params="${current.name}">Do you really want to delete the group "${current.name}"?</confirmation>
</link>
</linkpanel>
</config>
<data>
<selectionGroup>
<selection id="f_gn" type="text">
<title id="name">Name</title>
<option value="admin" name="f_gn"/>
</selection>
</selectionGroup>
<resultset chunk="0" chunkname="groups" chunksize="10" nextchunk="0" previouschunk="0" firstchunk="0" lastchunk="0" hits="1">
<result>
<field name="name" type="text">
<value>admin</value>
</field>
<field name="description" type="text">
<value>admins</value>
</field>
<linkpanel id="actions" location="inline">
<link id="actions[1]" mode="intern" target="/users/group/update/1#tab_groups" default="true">
<label id="edit">Edit</label>
<icon>edit</icon>
</link>
<link id="actions[2]" mode="intern" target="/users?form_action=deleteGroup&amp;groupid=1">
<label id="delete">Delete</label>
<icon>delete</icon>
<confirmation id="group.delete.confirm" params="${current.name}">Do you really want to delete the group "admin"?</confirmation>
</link>
</linkpanel>
</result>
</resultset>
</data>
</datasource>

0 comments on commit 7bfb565

Please sign in to comment.