package net.hbase.secondaryindex.coprocessor;

import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import org.apache.hadoop.hbase.HBaseConfiguration;
//import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.coprocessor.BaseRegionObserver;
import org.apache.hadoop.hbase.coprocessor.ObserverContext;
import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
//import org.apache.hadoop.hbase.coprocessor.RegionCoprocessorEnvironment;
import org.apache.hadoop.hbase.regionserver.wal.WALEdit;
import org.apache.hadoop.hbase.util.Bytes;

public class IndexerDemo extends BaseRegionObserver {

	public static final String INDEX_TABLE_SUFFIX = "_index";
	public String tableName = "demo_table";
	public String inputColumn = "cf1:c1";
	public String indexColumn = "cf1:c1";
	public HTable table;

	@Override
	public void preOpen(ObserverContext<RegionCoprocessorEnvironment> e) {
		try {
			table = new HTable(HBaseConfiguration.create(), tableName
					+ INDEX_TABLE_SUFFIX);
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}

	@Override
	@SuppressWarnings("rawtypes")
	public void postPut(final ObserverContext e, final Put put,
			final WALEdit edit, final boolean writeToWAL) throws IOException {

		byte[][] colkey = KeyValue.parseColumn(Bytes.toBytes(inputColumn));
		if (colkey.length > 1) {
			List kvList = put.get(colkey[0], colkey[1]);
			Iterator kvl = kvList.iterator();

			while (kvl.hasNext()) {
				KeyValue kv = (KeyValue) kvl.next();
				Put indexPut = new Put(kv.getValue());
				colkey = KeyValue.parseColumn(Bytes.toBytes(indexColumn));
				indexPut.add(colkey[0], colkey[1], kv.getRow());
				table.put(indexPut);
			}
		}
	}

	@Override
	public void postClose(ObserverContext<RegionCoprocessorEnvironment> e,
			boolean abortRequested) {
		try {
			table.close();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
	}
}