package mil.nga.giat.geowave.datastore.bigtable.operations;
import java.io.IOException;
import java.util.Collections;
import java.util.Iterator;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import com.google.cloud.bigtable.hbase.BigtableConfiguration;
import mil.nga.giat.geowave.datastore.bigtable.operations.config.BigTableOptions;
import mil.nga.giat.geowave.datastore.hbase.operations.BasicHBaseOperations;
public class BigTableOperations extends
BasicHBaseOperations
{
public BigTableOperations()
throws IOException {
this(
DEFAULT_TABLE_NAMESPACE);
}
public BigTableOperations(
final String geowaveNamespace )
throws IOException {
this(
BigTableOptions.DEFAULT_PROJECT_ID,
BigTableOptions.DEFAULT_INSTANCE_ID,
geowaveNamespace);
}
public BigTableOperations(
final String projectId,
final String instanceId,
final String geowaveNamespace )
throws IOException {
super(
getConnection(
projectId,
instanceId),
geowaveNamespace);
}
private static Connection getConnection(
final String projectId,
final String instanceId ) {
final Configuration config = BigtableConfiguration.configure(
projectId,
instanceId);
// TODO: Bigtable configgy things? What about connection pooling?
config.setBoolean(
"hbase.online.schema.update.enable",
true);
return BigtableConfiguration.connect(config);
}
@Override
public ResultScanner getScannedResults(
Scan scanner,
String tableName,
String... authorizations )
throws IOException {
if (tableExists(tableName)) {
// TODO Cache locally b/c numerous checks can be expensive
return super.getScannedResults(
scanner,
tableName,
authorizations);
}
return new ResultScanner() {
@Override
public Iterator<Result> iterator() {
return Collections.emptyIterator();
}
@Override
public Result[] next(
int nbRows )
throws IOException {
return null;
}
@Override
public Result next()
throws IOException {
return null;
}
@Override
public void close() {}
};
}
public static BigTableOperations createOperations(
final BigTableOptions options )
throws IOException {
return new BigTableOperations(
options.getProjectId(),
options.getInstanceId(),
options.getGeowaveNamespace());
}
}