protected Group cloneGroup(Group group, Group parent, Set<String> groupNames, EntityManager em) { Group groupClone = metadata.create(Group.class); String newGroupName = generateName(group.getName(), groupNames); groupClone.setName(newGroupName); groupNames.add(newGroupName); groupClone.setParent(parent); if (group.getConstraints() != null) { for (Constraint constraint : group.getConstraints()) { Constraint constraintClone = cloneConstraint(constraint, groupClone); em.persist(constraintClone); if (group.getSessionAttributes() != null) { for (SessionAttribute attribute : group.getSessionAttributes()) { SessionAttribute attributeClone = cloneSessionAttribute(attribute, groupClone); em.persist(attributeClone); query.setParameter("groupId", group.getId());
@Override public void onBeforeInsert(Group entity, EntityManager entityManager) { createNewHierarchy(entity, entity.getParent()); }
protected boolean checkAllChildrenRecursively(Collection<Group> children, Group dropOver, CubaTree<Group> vTree) { for (Group group : children) { if (group.equals(dropOver)) { return true; } else if (vTree.hasChildren(group)) { if (checkAllChildrenRecursively(vTree.getChildren(group), dropOver, vTree)) { return true; } } } return false; }
protected void compileConstraints(UserSession session, Group group) { EntityManager em = persistence.getEntityManager(); TypedQuery<Constraint> q = em.createQuery("select c from sec$GroupHierarchy h join h.parent.constraints c " + "where h.group.id = ?1", Constraint.class); q.setParameter(1, group.getId()); List<Constraint> constraints = q.getResultList(); List<Constraint> list = new ArrayList<>(constraints); list.addAll(group.getConstraints()); for (Constraint constraint : list) { if (Boolean.TRUE.equals(constraint.getIsActive())) { session.addConstraint(constraint); } } }
protected void createNewHierarchy(Group entity, Group parent) { if (parent == null) { entity.setHierarchyList(new ArrayList<>()); if (entity.getHierarchyList() == null) { entity.setHierarchyList(new ArrayList<>()); } else { entity.getHierarchyList().clear(); parent = em.find(Group.class, parent.getId()); // refresh parent in case of detached if (parent.getHierarchyList() != null) { for (GroupHierarchy hierarchy : parent.getHierarchyList()) { GroupHierarchy h = metadata.create(GroupHierarchy.class); h.setGroup(entity); h.setLevel(level++); em.persist(h); entity.getHierarchyList().add(h); h.setLevel(level); em.persist(h); entity.getHierarchyList().add(h);
protected void moveUsersToGroup(Set<User> selected) { Map<String, Object> lookupParams = ParamsMap.of( "exclude", groupsTree.getSelected().iterator().next(), "excludeChildren", false); AbstractLookup lookupWindow = openLookup(Group.class, items -> { if (items.size() == 1) { Group group = (Group) items.iterator().next(); List<UUID> usersForModify = new ArrayList<>(); for (User user : selected) { usersForModify.add(user.getId()); } userManagementService.moveUsersToGroup(usersForModify, group.getId()); if (selected.size() == 1) { User user = selected.iterator().next(); showNotification(formatMessage("userMovedToGroup", user.getLogin(), group.getName())); } else { showNotification(formatMessage("usersMovedToGroup", group.getName())); } usersTable.getDatasource().refresh(); } }, OpenType.DIALOG, lookupParams); lookupWindow.addCloseListener(actionId -> usersTable.requestFocus() ); }
@Override public void onBeforeUpdate(Group entity, EntityManager entityManager) { if (!persistence.getTools().getDirtyFields(entity).contains("parent")) return; EntityManager em = persistence.getEntityManager(); for (GroupHierarchy oldHierarchy : entity.getHierarchyList()) { em.remove(oldHierarchy); } createNewHierarchy(entity, entity.getParent()); TypedQuery<GroupHierarchy> q = em.createQuery( "select h from sec$GroupHierarchy h join fetch h.group " + "where h.parent.id = ?1", GroupHierarchy.class); q.setParameter(1, entity.getId()); List<GroupHierarchy> list = q.getResultList(); for (GroupHierarchy hierarchy : list) { Group dependentGroup = hierarchy.getGroup(); for (GroupHierarchy depHierarchy : dependentGroup.getHierarchyList()) { em.remove(depHierarchy); } em.remove(hierarchy); createNewHierarchy(dependentGroup, dependentGroup.getParent()); } } }
protected boolean moveSelectedUsersToGroup(UserGroupChangedEvent event) { List<UUID> userIds = event.getUsers().stream() .map(BaseUuidEntity::getId) .collect(Collectors.toList()); if (userManagementService.moveUsersToGroup(userIds, event.getGroup().getId()) != 0) { usersTable.getDatasource().refresh(); return true; } return false; }
treeGridDragSource.setDragDataGenerator(TRANSFER_DATA_TYPE, group -> group.getId().toString()); if (targetGroup.getId().equals(draggedGroup.getId())) { return; if (draggedGroup.getParent() != null && (draggedGroup.getParent().getId().equals(targetGroup.getId()))) { return; groupChangeEventHandler.accept(new GroupChangeEvent(groupsTree, draggedGroup.getId(), targetGroup.getId())); groupChangeEventHandler.accept(new GroupChangeEvent(groupsTree, draggedGroup.getId(), null));
public String generateMatchingRuleRolesAccessGroupColumn(AbstractCommonMatchingRule entity) { if (CUSTOM == entity.getRuleType()) return StringUtils.EMPTY; AbstractDbStoredMatchingRule dbStoredMatchingRule = ((AbstractDbStoredMatchingRule) entity); StringBuilder sb = new StringBuilder("Roles: "); for (Role role : ((AbstractDbStoredMatchingRule) entity).getRoles()) { sb.append(role.getName()); sb.append(";"); } sb.append("\n"); sb.append("Access group: "); sb.append(dbStoredMatchingRule.getAccessGroup() == null ? StringUtils.EMPTY : dbStoredMatchingRule.getAccessGroup().getName()); return sb.toString(); }
protected void compileSessionAttributes(UserSession session, Group group) { List<SessionAttribute> list = new ArrayList<>(group.getSessionAttributes()); EntityManager em = persistence.getEntityManager(); TypedQuery<SessionAttribute> q = em.createQuery("select a from sec$GroupHierarchy h join h.parent.sessionAttributes a " + "where h.group.id = ?1 order by h.level desc", SessionAttribute.class); q.setParameter(1, group.getId()); List<SessionAttribute> attributes = q.getResultList(); list.addAll(attributes); for (SessionAttribute attribute : list) { Datatype datatype = Datatypes.get(attribute.getDatatype()); try { if (session.getAttributeNames().contains(attribute.getName())) { log.warn("Duplicate definition of '{}' session attribute in the group hierarchy", attribute.getName()); } Serializable value = (Serializable) datatype.parse(attribute.getStringValue()); if (value != null) session.setAttribute(attribute.getName(), value); else session.removeAttribute(attribute.getName()); } catch (ParseException e) { throw new RuntimeException("Unable to set session attribute " + attribute.getName(), e); } } }
public void copyGroup() { Group group = groupsDs.getItem(); if (group != null) { userManagementService.copyAccessGroup(group.getId()); groupsDs.refresh(); } }
protected void moveConstraintToGroup(Constraint constraint) { Map<String, Object> lookupParams = ParamsMap.of( "exclude", groupsTree.getSelected().iterator().next(), "excludeChildren", false); AbstractLookup lookupWindow = openLookup(Group.class, items -> { if (items.isEmpty()) { return; } Group group = (Group) items.iterator().next(); constraint.setGroup(group); dataManager.commit(constraint); constraintsDs.refresh(); showNotification(formatMessage("notification.constraintMovedToGroup", group.getName())); }, OpenType.DIALOG, lookupParams); lookupWindow.addCloseListener(actionId -> getComponentNN("constraintsTable").requestFocus() ); }
protected void addSpecificSuggestions(SourceCodeEditor sender, String text, int cursorPosition, List<Suggestion> suggestions) { if (cursorPosition <= 0) return; int colonIdx = text.substring(0, cursorPosition).lastIndexOf(":"); if (colonIdx < 0) return; List<String> strings = new ArrayList<>(); strings.add(SESSION_PREFIX + "userGroupId"); strings.add(SESSION_PREFIX + "userId"); strings.add(SESSION_PREFIX + "userLogin"); if (PersistenceHelper.isLoaded(getItem(), "group") && getItem().getGroup() != null) { List<String> attributeNames = userManagementService.getSessionAttributeNames(getItem().getGroup().getId()); for (String name : attributeNames) { strings.add(SESSION_PREFIX + name); } } Collections.sort(strings); String entered = text.substring(colonIdx + 1, cursorPosition); for (String string : strings) { if (string.startsWith(entered)) { suggestions.add(new Suggestion(sender.getAutoCompleteSupport(), string, string.substring(entered.length()), "", cursorPosition, cursorPosition)); } } }
protected void initDragAndDrop() { Companion companion = getCompanion(); if (companion != null) { companion.initDragAndDrop(usersTable, groupsTree, (event) -> { if (event.getUsers().size() == 1) { if (moveSelectedUsersToGroup(event)) { showNotification(formatMessage("userMovedToGroup", event.getUsers().get(0).getLogin(), event.getGroup().getName())); } } else { showOptionDialog( messages.getMainMessage("dialogs.Confirmation"), formatMessage("dialogs.moveToGroup.message", event.getGroup().getName(), event.getUsers().size()), MessageType.CONFIRMATION, new Action[]{ new DialogAction(Type.OK).withHandler(dialogEvent -> { if (moveSelectedUsersToGroup(event)) { showNotification(formatMessage("usersMovedToGroup", event.getGroup().getName())); } }), new DialogAction(Type.CANCEL, Action.Status.PRIMARY) } ); } }, (groupEvent) -> { userManagementService.changeGroupParent(groupEvent.getGroupId(), groupEvent.getNewParentId()); groupsDs.refresh(); }); } }
@Override public Group copyAccessGroup(UUID accessGroupId) { checkNotNullArgument(accessGroupId, "Null access group id"); checkUpdatePermission(Group.class); Group clone; Transaction tx = persistence.getTransaction(); try { EntityManager em = persistence.getEntityManager(); Query groupNamesQuery = em.createQuery("select g.name from sec$Group g"); @SuppressWarnings("unchecked") Set<String> groupNames = new HashSet<>(groupNamesQuery.getResultList()); Group accessGroup = em.find(Group.class, accessGroupId, GROUP_COPY_VIEW); if (accessGroup == null) throw new IllegalStateException("Unable to find specified access group with id: " + accessGroupId); clone = cloneGroup(accessGroup, accessGroup.getParent(), groupNames, em); tx.commit(); } finally { tx.end(); } return clone; }
protected void excludeItem(Group group, boolean excludeChildren) { if (excludeChildren) { for (UUID childId : groupsDs.getChildren(group.getId())) { excludeItem(groupsDs.getItem(childId), true); } } groupsDs.excludeItem(group); } }
@Override public void setQueryParam(Query query, String paramName) { if (paramName.startsWith(CONSTRAINT_PARAM_SESSION_ATTR)) { UserSession userSession = userSessionSource.getUserSession(); String attrName = paramName.substring(CONSTRAINT_PARAM_SESSION_ATTR.length()); if (CONSTRAINT_PARAM_USER_LOGIN.equals(attrName)) { String userLogin = userSession.getSubstitutedUser() != null ? userSession.getSubstitutedUser().getLogin() : userSession.getUser().getLogin(); query.setParameter(paramName, userLogin); } else if (CONSTRAINT_PARAM_USER_ID.equals(attrName)) { UUID userId = userSession.getSubstitutedUser() != null ? userSession.getSubstitutedUser().getId() : userSession.getUser().getId(); query.setParameter(paramName, userId); } else if (CONSTRAINT_PARAM_USER_GROUP_ID.equals(attrName)) { Object groupId = userSession.getSubstitutedUser() == null ? userSession.getUser().getGroup().getId() : userSession.getSubstitutedUser().getGroup().getId(); query.setParameter(paramName, groupId); } else { Serializable value = userSession.getAttribute(attrName); query.setParameter(paramName, value); } } }