package org.cloudgraph.web.model.demo; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.xml.namespace.QName; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hbase.KeyValue; import org.apache.hadoop.hbase.client.HTableInterface; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.client.ResultScanner; import org.apache.hadoop.hbase.client.Scan; import org.apache.hadoop.hbase.filter.CompareFilter; import org.apache.hadoop.hbase.filter.FilterList; import org.apache.hadoop.hbase.filter.QualifierFilter; import org.apache.hadoop.hbase.filter.SubstringComparator; import org.apache.hadoop.hbase.util.Bytes; import org.cloudgraph.config.CloudGraphConfig; import org.cloudgraph.config.TableConfig; import org.cloudgraph.hbase.connect.HBaseConnectionManager; import org.cloudgraph.state.GraphState; public class HBaseClient { private static final Log log = LogFactory.getLog(HBaseClient.class); public Map<String, Map<String, String>> get(String modelRootType, String modelRootURI) throws IOException { QName name = new QName(modelRootURI, modelRootType); TableConfig tableConfig = CloudGraphConfig.getInstance().getTable(name); return get(tableConfig); } public Map<String, Map<String, String>> get(String tableName) throws IOException { TableConfig tableConfig = CloudGraphConfig.getInstance().getTable(tableName); return get(tableConfig); } public Map<String, Map<String, String>> get(TableConfig tableConfig) throws IOException { Map<String, Map<String, String>> result = new HashMap<String, Map<String, String>>(); HTableInterface table = HBaseConnectionManager.instance().getConnection( tableConfig.getTable().getName()); Scan scan = new Scan(); FilterList rootFilter = new FilterList( FilterList.Operator.MUST_PASS_ALL); scan.setFilter(rootFilter); QualifierFilter rootUUIDFilter = new QualifierFilter( CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator(GraphState.ROOT_UUID_COLUMN_NAME)); rootFilter.addFilter(rootUUIDFilter); QualifierFilter stateFilter = new QualifierFilter( CompareFilter.CompareOp.NOT_EQUAL, new SubstringComparator(GraphState.STATE_COLUMN_NAME)); rootFilter.addFilter(stateFilter); long before = System.currentTimeMillis(); if (log.isDebugEnabled() ) log.debug("executing scan..."); ResultScanner scanner = table.getScanner(scan); int count = 0; for (Result resultRow : scanner) { Map<String, String> row = new HashMap<String, String>(); result.put(Bytes.toString(resultRow.getRow()), row); for (KeyValue keyValue : resultRow.list()) { row.put(Bytes.toString(keyValue.getQualifier()), Bytes.toString(keyValue.getValue())); } count++; } long after = System.currentTimeMillis(); log.info("assembled " + String.valueOf(count) + " results (" + String.valueOf(after - before) + ")"); return result; } }