public PopulateUsers(ArrayList<UserInfo> list, UserAdapter adapter, RecyclerView recyclerView) { this.list = new ArrayList<UserInfo>(); this.adapter = new UserAdapter(); this.list = list; this.recyclerView = recyclerView; }
@Override public void addRequiredAction(RequiredAction action) { String actionName = action.name(); addRequiredAction(actionName); }
@Override public long getGroupsCount() { return createCountGroupsQuery(null).getSingleResult(); }
@Override public Set<GroupModel> getGroups() { return getGroupModels(createGetGroupsQuery(null, null, null).getResultList()); }
@Override public boolean hasRole(RoleModel role) { Set<RoleModel> roles = getRoleMappings(); return RoleUtils.hasRole(roles, role) || RoleUtils.hasRoleFromGroup(getGroups(), role, true); }
@Override public UserModel addUser(RealmModel realm, String id, String username, boolean addDefaultRoles, boolean addDefaultRequiredActions) { if (id == null) { id = KeycloakModelUtils.generateId(); } UserEntity entity = new UserEntity(); entity.setId(id); entity.setCreatedTimestamp(System.currentTimeMillis()); entity.setUsername(username.toLowerCase()); entity.setRealmId(realm.getId()); em.persist(entity); em.flush(); UserAdapter userModel = new UserAdapter(session, realm, em, entity); if (addDefaultRoles) { DefaultRoles.addDefaultRoles(realm, userModel); for (GroupModel g : realm.getDefaultGroups()) { userModel.joinGroupImpl(g); // No need to check if user has group as it's new user } } if (addDefaultRequiredActions){ for (RequiredActionProviderModel r : realm.getRequiredActionProviders()) { if (r.isEnabled() && r.isDefaultAction()) { userModel.addRequiredAction(r.getAlias()); } } } return userModel; }
protected TypedQuery<UserGroupMembershipEntity> getUserGroupMappingQuery(GroupModel group) { TypedQuery<UserGroupMembershipEntity> query = em.createNamedQuery("userMemberOf", UserGroupMembershipEntity.class); query.setParameter("user", getEntity()); query.setParameter("groupId", group.getId()); return query; }
@Override public int hashCode() { return getId().hashCode(); }
@Override public Set<RoleModel> getRealmRoleMappings() { Set<RoleModel> roleMappings = getRoleMappings(); Set<RoleModel> realmRoles = new HashSet<RoleModel>(); for (RoleModel role : roleMappings) { RoleContainerModel container = role.getContainer(); if (container instanceof RealmModel) { realmRoles.add(role); } } return realmRoles; }
@Override public void leaveGroup(GroupModel group) { if (user == null || group == null) return; TypedQuery<UserGroupMembershipEntity> query = getUserGroupMappingQuery(group); List<UserGroupMembershipEntity> results = query.getResultList(); if (results.size() == 0) return; for (UserGroupMembershipEntity entity : results) { em.remove(entity); } em.flush(); }
@Override public boolean isMemberOf(GroupModel group) { Set<GroupModel> roles = getGroups(); return RoleUtils.isMember(roles, group); }
@Override public Set<GroupModel> getGroups(String search, int first, int max) { return getGroupModels(createGetGroupsQuery(search, first, max).getResultList()); }
protected TypedQuery<UserRoleMappingEntity> getUserRoleMappingEntityTypedQuery(RoleModel role) { TypedQuery<UserRoleMappingEntity> query = em.createNamedQuery("userHasRole", UserRoleMappingEntity.class); query.setParameter("user", getEntity()); query.setParameter("roleId", role.getId()); return query; }
@Override public boolean equals(Object o) { if (this == o) return true; if (o == null || !(o instanceof UserModel)) return false; UserModel that = (UserModel) o; return that.getId().equals(getId()); }
@Override public Set<RoleModel> getClientRoleMappings(ClientModel app) { Set<RoleModel> roleMappings = getRoleMappings(); Set<RoleModel> roles = new HashSet<RoleModel>(); for (RoleModel role : roleMappings) { RoleContainerModel container = role.getContainer(); if (container instanceof ClientModel) { ClientModel appModel = (ClientModel) container; if (appModel.getId().equals(app.getId())) { roles.add(role); } } } return roles; }
@Override public UserModel getUserById(String id, RealmModel realm) { UserEntity userEntity = em.find(UserEntity.class, id); if (userEntity == null) return null; return new UserAdapter(session, realm, em, userEntity); }
@Override public Set<RoleModel> getRoleMappings() { // we query ids only as the role might be cached and following the @ManyToOne will result in a load // even if we're getting just the id. TypedQuery<String> query = em.createNamedQuery("userRoleMappingIds", String.class); query.setParameter("user", getEntity()); List<String> ids = query.getResultList(); Set<RoleModel> roles = new HashSet<RoleModel>(); for (String roleId : ids) { RoleModel roleById = realm.getRoleById(roleId); if (roleById == null) continue; roles.add(roleById); } return roles; }
@Override public long getGroupsCountByNameContaining(String search) { return createCountGroupsQuery(search).getSingleResult(); }
mRecyclerView = (RecyclerView) findViewById(R.id.recycleView); mRecyclerView.setLayoutManager(new LinearLayoutManager(getApplicationContext())); mUserAdapter = new UserAdapter(); mRecyclerView.setAdapter(mUserAdapter);
private TypedQuery<Long> createCountGroupsQuery(String search) { // we query ids only as the group might be cached and following the @ManyToOne will result in a load // even if we're getting just the id. CriteriaBuilder builder = em.getCriteriaBuilder(); CriteriaQuery<Long> queryBuilder = builder.createQuery(Long.class); Root<UserGroupMembershipEntity> root = queryBuilder.from(UserGroupMembershipEntity.class); List<Predicate> predicates = new ArrayList<>(); predicates.add(builder.equal(root.get("user"), getEntity())); if (Objects.nonNull(search) && !search.isEmpty()) { Join<UserGroupMembershipEntity, GroupEntity> join = root.join("group"); predicates.add(builder.like(join.get("name"), builder.literal("%" + search + "%"))); } queryBuilder.select(builder.count(root)); queryBuilder.where(predicates.toArray(new Predicate[0])); return em.createQuery(queryBuilder); }