Package mil.nga.giat.geowave.accumulo.query

Source Code of mil.nga.giat.geowave.accumulo.query.AbstractAccumuloRowQuery

package mil.nga.giat.geowave.accumulo.query;

import mil.nga.giat.geowave.accumulo.AccumuloOperations;
import mil.nga.giat.geowave.accumulo.util.CloseableIteratorWrapper;
import mil.nga.giat.geowave.accumulo.util.EntryIteratorWrapper;
import mil.nga.giat.geowave.accumulo.util.CloseableIteratorWrapper.ScannerClosableWrapper;
import mil.nga.giat.geowave.index.ByteArrayId;
import mil.nga.giat.geowave.store.adapter.AdapterStore;
import mil.nga.giat.geowave.store.index.Index;

import org.apache.accumulo.core.client.IteratorSetting;
import org.apache.accumulo.core.client.ScannerBase;
import org.apache.accumulo.core.iterators.user.WholeRowIterator;

/**
* Represents a query operation by an Accumulo row. This abstraction is
* re-usable for both exact row ID queries and row prefix queries.
*
*/
abstract public class AbstractAccumuloRowQuery<T> extends
    AccumuloQuery
{
  protected final ByteArrayId row;

  public AbstractAccumuloRowQuery(
      final Index index,
      final ByteArrayId row,
      final String[] authorizations) {
    super(
        index);
    this.row = row;
  }

  public T query(
      final AccumuloOperations accumuloOperations,
      final AdapterStore adapterStore ) {
    final ScannerBase scanner = getScanner(
        accumuloOperations,
        getScannerLimit());
    addScanIteratorSettings(scanner);
    final CloseableIteratorWrapper<Object> it = new CloseableIteratorWrapper<Object>(
        new ScannerClosableWrapper(
            scanner),
        new EntryIteratorWrapper(
            adapterStore,
            index,
            scanner.iterator(),
            null));
    return queryResultFromIterator(it);
  }

  protected void addScanIteratorSettings(
      final ScannerBase scanner ) {
    // we have to at least use a whole row iterator
    final IteratorSetting iteratorSettings = new IteratorSetting(
        QueryFilterIterator.WHOLE_ROW_ITERATOR_PRIORITY,
        QueryFilterIterator.WHOLE_ROW_ITERATOR_NAME,
        WholeRowIterator.class);
    scanner.addScanIterator(iteratorSettings);
  }

  abstract protected T queryResultFromIterator(
      final CloseableIteratorWrapper<?> it );

  abstract protected Integer getScannerLimit();
}
TOP

Related Classes of mil.nga.giat.geowave.accumulo.query.AbstractAccumuloRowQuery

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.