// Path: src/com/reinvent/surus/model/Constants.java
// public interface Constants {
//     // FIELDS
//     public static final String KEY = "key";
//     public static final String DOMAIN_NAME = "domain_name";      //"key"
//     public static final String TIMEPERIOD = "timeperiod";      //"t"
//     public static final String KEYWORD_INDEX = "keyword_index";
// 
//     // FAMILIES
//     public static final String FAMILY_STAT = "stat";
//     public static final String FAMILY_OS = "os";                                //"os"
//     public static final String FAMILY_KEYWORD = "keyword";                      //"kwds"
// 
// 
//     public static final String TABLE_EXAMPLE = "example";
//     public static final String TABLE_BUCKET = "bucket";
// }
// 
// Path: src/com/reinvent/surus/primarykey/IntegerPrimaryKey.java
// public class IntegerPrimaryKey extends AbstractPrimaryKey {
//     private static final HFieldComponent[] KEY_COMPONENTS = {new AnnotationRuntimeInstance() {
//         @Override
//         public String name() {
//             return Constants.KEY;
//         }
// 
//         @Override
//         public int length() {
//             return Bytes.SIZEOF_INT;
//         }
// 
//         @Override
//         public Class type() {
//             return Integer.class;
//         }
//     }};
// 
//     @Override
//     protected int getPrimaryKeyLength() {
//         return KEY_COMPONENTS[0].length();
//     }
// 
//     @Override
//     public HFieldComponent[] getComponents() {
//         return KEY_COMPONENTS;
//     }
// 
//     @Override
//     public ImmutableBytesWritable generateRowKey(Map<String, Object> components) {
//         if (components.size() != KEY_COMPONENTS.length) {
//             throw new IllegalArgumentException(String.format("Number of Key Components is incorrect %d vs %d", components.size(), KEY_COMPONENTS.length));
//         }
// 
//         Integer key = (Integer) components.get(Constants.KEY);
//         return generateKey(key);
//     }
// 
//     /**
//      * @param primaryKey the
//      * @return String presenting PrimaryKey
//      */
//     public String toString(byte[] primaryKey) {
//         return String.valueOf(Bytes.toInt(primaryKey));
//     }
// 
//     /**
//      * Parses integer value of the Primary Key
//      * @param primaryKey the
//      * @return value of the Key
//      */
//     public Integer getValue(byte[] primaryKey) {
//         return Bytes.toInt(primaryKey);
//     }
// 
//     /**
//      * Method generated Primary Key base on Integer parameter
//      * @param keyrow the
//      * @return generated key
//      */
//     public ImmutableBytesWritable generateKey(Integer keyrow) {
//         return new ImmutableBytesWritable(Bytes.toBytes(keyrow));
//     }
// }
// 
// Path: src/com/reinvent/surus/primarykey/StringPrimaryKey.java
// public class StringPrimaryKey extends AbstractPrimaryKey {
//     private static final HFieldComponent[] KEY_COMPONENTS = {new AnnotationRuntimeInstance() {
//         private static final int KEY_LENGTH = 64;
// 
//         @Override
//         public String name() {
//             return Constants.KEY;
//         }
// 
//         @Override
//         public int length() {
//             return KEY_LENGTH;
//         }
// 
//         @Override
//         public Class type() {
//             return String.class;
//         }
//     }};
// 
//     @Override
//     protected int getPrimaryKeyLength() {
//         return KEY_COMPONENTS[0].length();
//     }
// 
//     @Override
//     public HFieldComponent[] getComponents() {
//         return KEY_COMPONENTS;
//     }
// 
//     @Override
//     public ImmutableBytesWritable generateRowKey(Map<String, Object> components) {
//         if (components.size() != KEY_COMPONENTS.length) {
//             throw new IllegalArgumentException(String.format("Number of Key Components is incorrect %d vs %d", components.size(), KEY_COMPONENTS.length));
//         }
// 
//         String key = (String) components.get(Constants.KEY);
//         return generateKey(key);
//     }
// 
//     /**
//      * Converts byte[] to String representation and trim extra space
//      * @param primaryKey the
//      * @return String presentation
//      */
//     public String toString(byte[] primaryKey) {
//         return Bytes.toString(primaryKey).trim();
//     }
// 
//     /**
//      * Converts byte[] to String representation. No extra space is trimmed
//      * @param primaryKey the
//      * @return String presentation
//      */
//     public String getValue(byte[] primaryKey) {
//         return Bytes.toString(primaryKey);
//     }
// 
//     /**
//      * Method generated Primary Key base on String parameter
//      * @param keyrow the
//      * @return generated key
//      */
//     public ImmutableBytesWritable generateKey(String keyrow) {
//         if (keyrow.length() > getPrimaryKeyLength()) {
//             keyrow = keyrow.substring(0, getPrimaryKeyLength());
//         }
// 
//         byte[] primaryKey = new byte[getPrimaryKeyLength()];
//         Bytes.putBytes(primaryKey, 0, Bytes.toBytes(keyrow), 0, keyrow.length());
//         return new ImmutableBytesWritable(primaryKey);
//     }
// }


import com.reinvent.surus.model.Constants;
import com.reinvent.surus.primarykey.IntegerPrimaryKey;
import com.reinvent.surus.primarykey.StringPrimaryKey;
import junit.framework.TestCase;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import java.util.HashMap;
import java.util.Map;
package com.reinvent.surus;



/**
 * @author Bohdan Mushkevych
 * Description: UT for integer and string primary keys
 */
public class PrimaryKeyTest extends TestCase {
    IntegerPrimaryKey pkInteger = new IntegerPrimaryKey();
// Path: src/com/reinvent/surus/model/Constants.java
// public interface Constants {
//     // FIELDS
//     public static final String KEY = "key";
//     public static final String DOMAIN_NAME = "domain_name";      //"key"
//     public static final String TIMEPERIOD = "timeperiod";      //"t"
//     public static final String KEYWORD_INDEX = "keyword_index";
// 
//     // FAMILIES
//     public static final String FAMILY_STAT = "stat";
//     public static final String FAMILY_OS = "os";                                //"os"
//     public static final String FAMILY_KEYWORD = "keyword";                      //"kwds"
// 
// 
//     public static final String TABLE_EXAMPLE = "example";
//     public static final String TABLE_BUCKET = "bucket";
// }
// 
// Path: src/com/reinvent/surus/primarykey/IntegerPrimaryKey.java
// public class IntegerPrimaryKey extends AbstractPrimaryKey {
//     private static final HFieldComponent[] KEY_COMPONENTS = {new AnnotationRuntimeInstance() {
//         @Override
//         public String name() {
//             return Constants.KEY;
//         }
// 
//         @Override
//         public int length() {
//             return Bytes.SIZEOF_INT;
//         }
// 
//         @Override
//         public Class type() {
//             return Integer.class;
//         }
//     }};
// 
//     @Override
//     protected int getPrimaryKeyLength() {
//         return KEY_COMPONENTS[0].length();
//     }
// 
//     @Override
//     public HFieldComponent[] getComponents() {
//         return KEY_COMPONENTS;
//     }
// 
//     @Override
//     public ImmutableBytesWritable generateRowKey(Map<String, Object> components) {
//         if (components.size() != KEY_COMPONENTS.length) {
//             throw new IllegalArgumentException(String.format("Number of Key Components is incorrect %d vs %d", components.size(), KEY_COMPONENTS.length));
//         }
// 
//         Integer key = (Integer) components.get(Constants.KEY);
//         return generateKey(key);
//     }
// 
//     /**
//      * @param primaryKey the
//      * @return String presenting PrimaryKey
//      */
//     public String toString(byte[] primaryKey) {
//         return String.valueOf(Bytes.toInt(primaryKey));
//     }
// 
//     /**
//      * Parses integer value of the Primary Key
//      * @param primaryKey the
//      * @return value of the Key
//      */
//     public Integer getValue(byte[] primaryKey) {
//         return Bytes.toInt(primaryKey);
//     }
// 
//     /**
//      * Method generated Primary Key base on Integer parameter
//      * @param keyrow the
//      * @return generated key
//      */
//     public ImmutableBytesWritable generateKey(Integer keyrow) {
//         return new ImmutableBytesWritable(Bytes.toBytes(keyrow));
//     }
// }
// 
// Path: src/com/reinvent/surus/primarykey/StringPrimaryKey.java
// public class StringPrimaryKey extends AbstractPrimaryKey {
//     private static final HFieldComponent[] KEY_COMPONENTS = {new AnnotationRuntimeInstance() {
//         private static final int KEY_LENGTH = 64;
// 
//         @Override
//         public String name() {
//             return Constants.KEY;
//         }
// 
//         @Override
//         public int length() {
//             return KEY_LENGTH;
//         }
// 
//         @Override
//         public Class type() {
//             return String.class;
//         }
//     }};
// 
//     @Override
//     protected int getPrimaryKeyLength() {
//         return KEY_COMPONENTS[0].length();
//     }
// 
//     @Override
//     public HFieldComponent[] getComponents() {
//         return KEY_COMPONENTS;
//     }
// 
//     @Override
//     public ImmutableBytesWritable generateRowKey(Map<String, Object> components) {
//         if (components.size() != KEY_COMPONENTS.length) {
//             throw new IllegalArgumentException(String.format("Number of Key Components is incorrect %d vs %d", components.size(), KEY_COMPONENTS.length));
//         }
// 
//         String key = (String) components.get(Constants.KEY);
//         return generateKey(key);
//     }
// 
//     /**
//      * Converts byte[] to String representation and trim extra space
//      * @param primaryKey the
//      * @return String presentation
//      */
//     public String toString(byte[] primaryKey) {
//         return Bytes.toString(primaryKey).trim();
//     }
// 
//     /**
//      * Converts byte[] to String representation. No extra space is trimmed
//      * @param primaryKey the
//      * @return String presentation
//      */
//     public String getValue(byte[] primaryKey) {
//         return Bytes.toString(primaryKey);
//     }
// 
//     /**
//      * Method generated Primary Key base on String parameter
//      * @param keyrow the
//      * @return generated key
//      */
//     public ImmutableBytesWritable generateKey(String keyrow) {
//         if (keyrow.length() > getPrimaryKeyLength()) {
//             keyrow = keyrow.substring(0, getPrimaryKeyLength());
//         }
// 
//         byte[] primaryKey = new byte[getPrimaryKeyLength()];
//         Bytes.putBytes(primaryKey, 0, Bytes.toBytes(keyrow), 0, keyrow.length());
//         return new ImmutableBytesWritable(primaryKey);
//     }
// }


// Path: test/com/reinvent/surus/PrimaryKeyTest.java
import com.reinvent.surus.model.Constants;
import com.reinvent.surus.primarykey.IntegerPrimaryKey;
import com.reinvent.surus.primarykey.StringPrimaryKey;
import junit.framework.TestCase;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import java.util.HashMap;
import java.util.Map;

package com.reinvent.surus;



/**
 * @author Bohdan Mushkevych
 * Description: UT for integer and string primary keys
 */
public class PrimaryKeyTest extends TestCase {
    IntegerPrimaryKey pkInteger = new IntegerPrimaryKey();
    StringPrimaryKey pkString = new StringPrimaryKey();