public DescriptorStore(MongoDatabase database, IPermissionStore permissionStore, IUserStore userStore, IGroupStore groupStore, IDocumentBuilder documentBuilder, Class<T> documentType) { RuntimeUtilities.checkNotNull(database, "database"); RuntimeUtilities.checkNotNull(permissionStore, "permissionStore"); MongoCollection<Document> descriptorCollection = database.getCollection(COLLECTION_DESCRIPTORS); MongoResourceStorage<T> resourceStorage = new MongoResourceStorage<>(database, collectionName, documentBuilder, documentType); this.descriptorResourceStore = new ModifiableHistorizedResourceStore<>(resourceStorage); this.resourceFilter = new ResourceFilter<>(descriptorCollection, descriptorResourceStore, permissionStore, userStore, groupStore, documentBuilder, documentType); }
Document query = createQuery(queryFilters); FindIterable<Document> results = collection.find(query); Document sort = createSortQuery(sortTypes); results = results.sort(sort); T model = buildDocument(result); Permissions permissions = null; try { permissions = getPermissions(id); } catch (IResourceStore.ResourceNotFoundException e) { log.warn("Missing Permission with Resource id: %s , access has been granted."); if (versionField != null && permissions != null) { Integer currentVersion = Integer.parseInt(versionField.toString()); Integer highestPermittedVersion = getHighestPermittedVersion(currentVersion, permissions.getPermissions()); if (highestPermittedVersion < currentVersion) { model = resourceStore.read(id, highestPermittedVersion);
private Document createQuery(QueryFilters[] allQueryFilters) { QueryBuilder retQuery = new QueryBuilder(); for (QueryFilters queryFilters : allQueryFilters) { List<DBObject> dbObjects = new LinkedList<>(); for (QueryFilter queryFilter : queryFilters.getQueryFilters()) { if (queryFilter.getFilter() instanceof String) { Pattern resourcePattern = getPatternForRegex((String) queryFilter.getFilter()); dbObjects.add(new QueryBuilder().put(queryFilter.getField()).regex(resourcePattern).get()); } else { dbObjects.add(new QueryBuilder().put(queryFilter.getField()).is(queryFilter.getFilter()).get()); } } DBObject[] dbObjectArray = dbObjects.toArray(new DBObject[dbObjects.size()]); DBObject filterQuery; if (dbObjectArray.length > 0) { if (queryFilters.getConnectingType() == QueryFilters.ConnectingType.AND) { filterQuery = new QueryBuilder().and(dbObjectArray).get(); } else { filterQuery = new QueryBuilder().or(dbObjectArray).get(); } retQuery.and(filterQuery); } } return new Document(retQuery.get().toMap()); }