blob: 624f9dc2372fe64da0214562aa45db42c2a582df [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.usergrid.corepersistence.pipeline.builder;
import org.apache.usergrid.corepersistence.pipeline.read.FilterFactory;
import org.apache.usergrid.corepersistence.pipeline.Pipeline;
import org.apache.usergrid.corepersistence.pipeline.read.FilterResult;
import org.apache.usergrid.persistence.core.scope.ApplicationScope;
import org.apache.usergrid.persistence.model.entity.Id;
import com.google.common.base.Optional;
import com.google.common.base.Preconditions;
import com.google.inject.Inject;
import com.google.inject.assistedinject.Assisted;
/**
* This is our root builder to build filter pipelines. All operations should start with an instance of this class, and compose
* graph operations by traversing various builders to create our filter pipeline
*/
public class PipelineBuilder {
private final ApplicationScope applicationScope;
private Optional<String> cursor = Optional.absent();
private int limit = 10;
private final FilterFactory filterFactory;
private boolean keepStaleEntries = false;
private String query = "";
/**
* Create an instance of our I/O operations
* @param filterFactory
*/
@Inject
public PipelineBuilder( final FilterFactory filterFactory, @Assisted final ApplicationScope applicationScope ) {
this.filterFactory = filterFactory;
this.applicationScope = applicationScope;
}
/**
* Set the cursor to use in our filter pipline
* @param cursor
* @return
*/
public PipelineBuilder withCursor(final Optional<String> cursor){
Preconditions.checkNotNull(cursor, "cursor must not be null");
this.cursor = cursor;
return this;
}
/**
* Set our limit
* @param limit
* @return
*/
public PipelineBuilder withLimit(final int limit){
this.limit = limit;
return this;
}
/**
*/
public PipelineBuilder keepStaleEntries(final boolean keepStaleEntries){
this.keepStaleEntries = keepStaleEntries;
return this;
}
/**
*/
public PipelineBuilder query(final Optional<String> query){
if (query.isPresent()) {
this.query = query.get();
}
return this;
}
/**
* Set our start point in our graph traversal to the specified entity id. A 1.0 compatibility API. eventually this should be replaced with
* a call that will allow us to start traversing at the application node to any other node in the graph
*
* @param entityId
* @return
*/
@Deprecated
public IdBuilder fromId(final Id entityId){
Pipeline<FilterResult<Id>> pipeline = new Pipeline( applicationScope, this.cursor,limit,keepStaleEntries,query ).withFilter( filterFactory.getEntityIdFilter( entityId ) );
return new IdBuilder( pipeline, filterFactory );
}
}