package accumulo;

import java.util.Map.Entry;

import org.apache.accumulo.core.client.BatchWriter;
import org.apache.accumulo.core.client.Connector;
import org.apache.accumulo.core.client.Scanner;
import org.apache.accumulo.core.client.ZooKeeperInstance;
import org.apache.accumulo.core.client.Instance;
import org.apache.accumulo.core.client.AccumuloException;
import org.apache.accumulo.core.data.Key;
import org.apache.accumulo.core.data.Mutation;
import org.apache.accumulo.core.data.Value;
import org.apache.accumulo.core.security.Authorizations;
import org.apache.accumulo.core.security.ColumnVisibility;
import org.apache.hadoop.io.Text;


/** Demo class for getting started with Accumulo in healthcare domain.
 * @author edmon
 */

public class ClaimsBroker {
	
	  private static final String DEFAULT_INSTANCE_NAME = "eb-das";
	  private static final String DEFAULT_ZOOKEEPERS = "localhost";
	  private static final String DEFAULT_AUTHS = "LEVEL1,GROUP1";
	  private static final String DEFAULT_TABLE_NAME = "test_claim";

	public static void main(String[] args) throws Exception {

	    String instanceName = "<...>";
	    String zooServers = "localhost";
	    Instance inst = new ZooKeeperInstance(instanceName, zooServers);
	    Connector conn = inst.getConnector("root", "<...>");
	    
	    if ( !conn.tableOperations().exists( "test_claim" ) ){
	      conn.tableOperations().create("test_claim");
	    }//end if
	    
	    
	    BatchWriter writer = conn.createBatchWriter("test_claim", 10000, Long.MAX_VALUE, 1);
	    ColumnVisibility cv = new ColumnVisibility(DEFAULT_AUTHS.replace(',', '|'));
	    
	    Text cf = new Text("datatypes");
	    Text cq = new Text("xml");
	    byte[] row = {'t', 'e', 's', 't', ' ','c','l','a','i','m', '\0'};
	    byte[] value = {'1', '0', '0', '0', '1', '\0'};
	    
	    for (int i = 0; i < 10; i++) {
	      row[row.length - 1] = (byte) i;
	      Mutation m = new Mutation(new Text(row));
	        value[value.length - 1] = (byte) i;
	        m.put(cf, cq, cv, new Value(value));
	      writer.addMutation(m);
	    }
	    writer.close();
	    
	    Authorizations scanauths = new Authorizations( (DEFAULT_AUTHS).split(","));
	    Scanner scanner = conn.createScanner("test_claim", scanauths);

	    for (Entry<Key,Value> entry : scanner)
	        System.out.println(entry.getKey().toString() + " -> " + entry.getValue().toString());    	    
	    
	    System.out.println( "done!" );
	    
	}//end main
	
}//end class
