package com.levelup.java.guava;

import java.util.Map.Entry;
import java.util.Random;

import org.apache.log4j.Logger;
import org.junit.Test;

import com.google.common.collect.HashBasedTable;
import com.google.common.collect.Table;

/**
 * This java example demonstrate how to use 
 * Google Guava Tables.  Tables can be thought a <table>
 * on a web page (columns, rows, and values).  
 * 
 * @author Justin Musgrove
 * @see <a href='http://www.leveluplunch.com/java/examples/guava-table-example/'>Table example</a>
 * 
 */
public class TableExample {
	
	private static final Logger logger = Logger.getLogger(TableExample.class);

	class Workout {
		private long elapsedTime;

		public Workout(long elapsedTime) {
			super();
			this.elapsedTime = elapsedTime;
		}
		
		public long getElapsedTime() {
			return elapsedTime;
		}
	}

	@Test
	public void guava_table_example () {
		
		Random r = new Random(3000);
		
		Table<Integer, String, Workout> table = HashBasedTable.create();
		table.put(1, "Filthy 50", new Workout(r.nextLong()));
		table.put(1, "Fran", new Workout(r.nextLong()));
		table.put(1, "The Seven", new Workout(r.nextLong()));
		table.put(1, "Murph", new Workout(r.nextLong()));
		table.put(1, "The Ryan", new Workout(r.nextLong()));
		table.put(1, "King Kong", new Workout(r.nextLong()));
		
		table.put(2, "Filthy 50", new Workout(r.nextLong()));
		table.put(2, "Fran", new Workout(r.nextLong()));
		table.put(2, "The Seven", new Workout(r.nextLong()));
		table.put(2, "Murph", new Workout(r.nextLong()));
		table.put(2, "The Ryan", new Workout(r.nextLong()));
		table.put(2, "King Kong", new Workout(r.nextLong()));
		
		// for each row key
		for (Integer key : table.rowKeySet()) {
			
			logger.info("Person: " + key);

			for (Entry<String, Workout> row : table.row(key).entrySet()) {
				logger.info("Workout name: " + row.getKey() + " for elapsed time of " + row.getValue().getElapsedTime());
			}
		}
	}
	
}