package org.argeo.app.ui.people; import java.util.ArrayList; import java.util.List; import org.argeo.api.acr.Content; import org.argeo.api.acr.ContentSession; import org.argeo.api.acr.ldap.LdapAttrs; import org.argeo.api.acr.ldap.LdapObjs; import org.argeo.api.cms.directory.CmsUserManager; import org.argeo.api.cms.directory.HierarchyUnit; import org.argeo.api.cms.directory.UserDirectory; import org.argeo.api.cms.ux.CmsIcon; import org.argeo.app.ui.SuiteIcon; import org.argeo.cms.acr.ContentUtils; import org.argeo.cms.auth.UserAdminUtils; import org.argeo.cms.ux.widgets.Column; import org.argeo.cms.ux.widgets.DefaultTabularPart; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.User; public class UsersPart extends DefaultTabularPart { private ContentSession contentSession; private CmsUserManager cmsUserManager; public UsersPart(ContentSession contentSession, CmsUserManager cmsUserManager) { this.contentSession = contentSession; this.cmsUserManager = cmsUserManager; addColumn(new Column() { @Override public String getText(Content role) { if (role.hasContentClass(LdapObjs.inetOrgPerson)) return UserAdminUtils.getUserDisplayName(role.adapt(User.class)); else if (role.hasContentClass(LdapObjs.organization)) return role.attr(LdapAttrs.o); else if (role.hasContentClass(LdapObjs.groupOfNames)) return role.attr(LdapAttrs.cn); else return null; } @Override public CmsIcon getIcon(Content role) { if (role.hasContentClass(LdapObjs.posixAccount)) return SuiteIcon.user; else if (role.hasContentClass(LdapObjs.inetOrgPerson)) return SuiteIcon.person; else if (role.hasContentClass(LdapObjs.organization)) return SuiteIcon.organisationContact; else if (role.hasContentClass(LdapObjs.groupOfNames)) return SuiteIcon.group; else return null; } @Override public int getWidth() { return 300; } }); } @Override protected List asList(HierarchyUnit hu) { List roles = new ArrayList<>(); UserDirectory ud = (UserDirectory) hu.getDirectory(); if (ud.getRealm().isPresent()) { for (Role r : ud.getHierarchyUnitRoles(ud, null, true)) { Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r); if (content.hasContentClass(LdapObjs.inetOrgPerson, LdapObjs.organization)) roles.add(content); } } else { for (HierarchyUnit directChild : hu.getDirectHierarchyUnits(false)) { if (!(directChild.isType(HierarchyUnit.Type.FUNCTIONAL) || directChild.isType(HierarchyUnit.Type.ROLES))) { for (Role r : ud.getHierarchyUnitRoles(directChild, null, false)) { Content content = ContentUtils.roleToContent(cmsUserManager, contentSession, r); if (content.hasContentClass(LdapObjs.inetOrgPerson, LdapObjs.organization, LdapObjs.groupOfNames)) roles.add(content); } } } } return roles; } }