public static Group mockGroup(String groupName, User creator) { Group group = mock(Group.class); when(group.getCreator()).thenReturn(creator); when(group.getCreationTimestamp()).thenReturn(TIMESTAMP_OLD); when(group.getEditor()).thenReturn(creator); when(group.getLastEditedTimestamp()).thenReturn(TIMESTAMP_NEW); when(group.getName()).thenReturn(groupName); when(group.getUuid()).thenReturn(GROUP_CLIENT_UUID); when(group.getRolesWithPerm(GraphPermission.READ_PERM)).thenReturn(createEmptyTraversal()); when(group.getElementVersion()).thenReturn(UUID_5); return group; }
@Override protected String composeIndexNameFromEntry(UpdateDocumentEntry entry) { return Group.composeIndexName(); }
/** * Add the given group uuid and names to the map. * * @param document * @param groups */ private void addGroups(JsonObject document, TraversalResult<? extends Group> groups) { List<String> groupUuids = new ArrayList<>(); List<String> groupNames = new ArrayList<>(); for (Group group : groups) { groupUuids.add(group.getUuid()); groupNames.add(group.getName()); } Map<String, List<String>> groupFields = new HashMap<>(); groupFields.put(UUID_KEY, groupUuids); groupFields.put(NAME_KEY, groupNames); document.put(GROUPS_KEY, groupFields); } }
public String generateVersion(Group group) { // No need to add users since the creator/editor edge affects the group version return ETag.hash(group.getElementVersion()); }
private JsonObject toDocument(Group group, boolean withVersion) { JsonObject document = new JsonObject(); document.put(NAME_KEY, group.getName()); addBasicReferences(document, group); addPermissionInfo(document, group); if (withVersion) { document.put(MappingHelper.VERSION_KEY, generateVersion(group)); } return document; }
public GraphQLObjectType createType() { Builder groupType = newObject(); groupType.name(GROUP_TYPE_NAME); groupType.description("A group is a collection of users. Groups can't be nested."); interfaceTypeProvider.addCommonFields(groupType); // .name groupType.field(newFieldDefinition().name("name").description("The name of the group.").type(GraphQLString)); // .roles groupType.field(newPagingFieldWithFetcher("roles", "Roles assigned to the group.", (env) -> { GraphQLContext gc = env.getContext(); Group group = env.getSource(); return group.getRoles(gc.getUser(), getPagingInfo(env)); }, ROLE_PAGE_TYPE_NAME)); // .users groupType.field(newPagingFieldWithFetcher("users", "Users assigned to the group.", (env) -> { GraphQLContext gc = env.getContext(); Group group = env.getSource(); return group.getVisibleUsers(gc.getUser(), getPagingInfo(env)); }, USER_PAGE_TYPE_NAME)); return groupType.build(); }
group.removeUser(user); batch.store(group, false); group.addUser(user); batch.store(group, false);
public GroupResponseAssert matches(Group group) { assertEquals("The uuid of the rest model does not match the given group node", group.getUuid(), actual.getUuid()); assertEquals("The name of the rest model group does not match the given group node", group.getName(), actual.getName()); // for (User user : group.getUsers()) { // assertTrue(restGroup.getUsers().contains(user.getUsername())); // } // TODO roles // group.getRoles() // TODO perms return this; }
@Override public String generateVersion(User user) { StringBuilder builder = new StringBuilder(); builder.append(user.getElementVersion()); builder.append("|"); for (Group group : user.getGroups()) { builder.append(group.getElementVersion()); builder.append("|"); } Node referencedNode = user.getReferencedNode(); if (referencedNode != null) { builder.append(referencedNode.getElementVersion()); builder.append("|"); } // No need to add users since the creator/editor edge affects the user version return ETag.hash(builder.toString()); }
@Override public Set<String> getSelectedIndices(InternalActionContext ac) { return Collections.singleton(Group.composeIndexName()); }
@Override public Set<String> filterUnknownIndices(Set<String> indices) { return filterIndicesByType(indices, Group.composeIndexName()); }
@Override public Map<String, IndexInfo> getIndices() { String indexName = Group.composeIndexName(); IndexInfo info = new IndexInfo(indexName, null, getMappingProvider().getMapping(), "group"); return Collections.singletonMap(indexName, info); }
@Override public Completable syncIndices() { return Completable.defer(() -> { return diffAndSync(Group.composeIndexName(), null, new SyncMetric(getType())); }); }