[ 
https://issues.apache.org/jira/browse/RYA-119?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16031242#comment-16031242
 ] 

ASF GitHub Bot commented on RYA-119:
------------------------------------

Github user meiercaleb commented on a diff in the pull request:

    https://github.com/apache/incubator-rya/pull/124#discussion_r119368692
  
    --- Diff: 
dao/mongodb.rya/src/main/java/org/apache/rya/mongodb/iter/RyaStatementCursorIterator.java
 ---
    @@ -22,83 +40,83 @@
     
     import info.aduna.iteration.CloseableIteration;
     
    -import java.util.Iterator;
    -import java.util.Map.Entry;
    -import java.util.Set;
    -
    -import org.apache.rya.api.RdfCloudTripleStoreUtils;
    -import org.apache.rya.api.domain.RyaStatement;
    -import org.apache.rya.api.persist.RyaDAOException;
    -import org.apache.rya.mongodb.dao.MongoDBStorageStrategy;
    -
    -import org.calrissian.mango.collect.CloseableIterable;
    -import org.openrdf.query.BindingSet;
    -
    -import com.mongodb.DBCollection;
    -import com.mongodb.DBCursor;
    -import com.mongodb.DBObject;
    -
     public class RyaStatementCursorIterator implements 
CloseableIteration<RyaStatement, RyaDAOException> {
    -
    -   private DBCollection coll;
    -   private Iterator<DBObject> queryIterator;
    -   private DBCursor currentCursor;
    -   private MongoDBStorageStrategy strategy;
    -   private Long maxResults;
    -
    -   public RyaStatementCursorIterator(DBCollection coll, Set<DBObject> 
queries, MongoDBStorageStrategy strategy) {
    -           this.coll = coll;
    -           this.queryIterator = queries.iterator();
    -           this.strategy = strategy;
    -   }
    -
    -   @Override
    -   public boolean hasNext() {
    -           if (!currentCursorIsValid()) {
    -                   findNextValidCursor();
    -           }
    -           return currentCursorIsValid();
    -   }
    -
    -   @Override
    -   public RyaStatement next() {
    -           if (!currentCursorIsValid()) {
    -                   findNextValidCursor();
    -           }
    -           if (currentCursorIsValid()) {
    -                   // convert to Rya Statement
    -                   DBObject queryResult = currentCursor.next();
    -                   RyaStatement statement = 
strategy.deserializeDBObject(queryResult);
    -                   return statement;
    -           }
    -           return null;
    -   }
    -   
    -   private void findNextValidCursor() {
    -           while (queryIterator.hasNext()){
    -                   DBObject currentQuery = queryIterator.next();
    -                   currentCursor = coll.find(currentQuery);
    -                   if (currentCursor.hasNext()) break;
    -           }
    -   }
    -   
    -   private boolean currentCursorIsValid() {
    -           return (currentCursor != null) && currentCursor.hasNext();
    -   }
    -
    -
    -   public void setMaxResults(Long maxResults) {
    -           this.maxResults = maxResults;
    -   }
    -
    -   @Override
    -   public void close() throws RyaDAOException {
    -           // TODO don't know what to do here
    -   }
    -
    -   @Override
    -   public void remove() throws RyaDAOException {
    -           next();
    -   }
    -
    +    private static final Logger log = 
Logger.getLogger(RyaStatementCursorIterator.class);
    +
    +    private final DBCollection coll;
    +    private final Iterator<DBObject> queryIterator;
    +    private Iterator<DBObject> resultsIterator;
    +    private final MongoDBStorageStrategy<RyaStatement> strategy;
    +    private Long maxResults;
    +    private final Authorizations auths;
    +
    +    public RyaStatementCursorIterator(final DBCollection coll, final 
Set<DBObject> queries, final MongoDBStorageStrategy<RyaStatement> strategy, 
final MongoDBRdfConfiguration conf) {
    +        this.coll = coll;
    +        this.queryIterator = queries.iterator();
    +        this.strategy = strategy;
    +        if (conf != null) {
    +            this.auths = conf.getAuthorizations();
    +        } else {
    +            auths = MongoDbRdfConstants.ALL_AUTHORIZATIONS;
    +        }
    +    }
    +
    +    @Override
    +    public boolean hasNext() {
    +        if (!currentCursorIsValid()) {
    +            findNextValidCursor();
    +        }
    +        return currentCursorIsValid();
    +    }
    +
    +    @Override
    +    public RyaStatement next() {
    +        if (!currentCursorIsValid()) {
    +            findNextValidCursor();
    +        }
    +        if (currentCursorIsValid()) {
    +            // convert to Rya Statement
    +            final DBObject queryResult = resultsIterator.next();
    +            final RyaStatement statement = 
strategy.deserializeDBObject(queryResult);
    +            return statement;
    +        }
    +        return null;
    +    }
    +
    +    private void findNextValidCursor() {
    +        while (queryIterator.hasNext()){
    +            final DBObject currentQuery = queryIterator.next();
    +
    +            // Executing redact aggregation to only return documents the 
user
    +            // has access to.
    +            final List<DBObject> pipeline = new ArrayList<>();
    +            pipeline.add(new BasicDBObject("$match", currentQuery));
    +            pipeline.addAll(AggregationUtil.createRedactPipeline(auths));
    +            log.debug(pipeline);
    +            final AggregationOutput output = coll.aggregate(pipeline);
    +            resultsIterator = output.results().iterator();
    +            if (resultsIterator.hasNext()) {
    +                break;
    +            }
    +        }
    +    }
    +
    +    private boolean currentCursorIsValid() {
    +        return (resultsIterator != null) && resultsIterator.hasNext();
    +    }
    +
    +
    +    public void setMaxResults(final Long maxResults) {
    +        this.maxResults = maxResults;
    +    }
    +
    +    @Override
    +    public void close() throws RyaDAOException {
    +        // TODO don't know what to do here
    --- End diff --
    
    This PR was prematurely closed.


> Add visibility support to MongoDB
> ---------------------------------
>
>                 Key: RYA-119
>                 URL: https://issues.apache.org/jira/browse/RYA-119
>             Project: Rya
>          Issue Type: Improvement
>          Components: dao
>    Affects Versions: 3.2.10
>            Reporter: Andrew Smith
>            Assignee: Eric White
>
> Currently, when querying mongo, visibility is ignored.  Need to add support 
> for visibility when querying mongo.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)

Reply via email to