// Path: api/src/main/java/com/ebuddy/cassandra/BatchContext.java
// public interface BatchContext { }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/ColumnMapper.java
// public interface ColumnMapper<T,N,V> {
// 
//     T mapColumn(N columnName, V columnValue);
// 
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/ColumnMapperWithTimestamps.java
// public interface ColumnMapperWithTimestamps<T,N,V> {
// 
//     T mapColumn(N columnName, V columnValue, long timestamp);
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/SuperColumnFamilyRowMapper.java
// public interface SuperColumnFamilyRowMapper<T,K,SN,N,V> {
//     T mapRow(K rowKey, List<HSuperColumn<SN,N,V>> superColumns);
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/SuperColumnMapper.java
// public interface SuperColumnMapper<T,K,SN,N,V> {
// 
//     T mapSuperColumn(K rowKey, SN superColumnName, List<HColumn<N,V>> columns);
// 
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/visitor/ColumnVisitor.java
// public interface ColumnVisitor<N, V> {
// 
//     /**
//      * Visit easy column and evaluates a logic. 
//      * @param columnName the name of the column
//      * @param columnValue the value of the column
//      * @param timestamp the cassandra timestamp when the column was written
//      * @param ttl the time to live for that column value
//      */
//     void visit(N columnName, V columnValue, long timestamp, int ttl);
// 
// }


import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.commons.lang3.Validate;
import com.ebuddy.cassandra.BatchContext;
import com.ebuddy.cassandra.dao.mapper.ColumnMapper;
import com.ebuddy.cassandra.dao.mapper.ColumnMapperWithTimestamps;
import com.ebuddy.cassandra.dao.mapper.SuperColumnFamilyRowMapper;
import com.ebuddy.cassandra.dao.mapper.SuperColumnMapper;
import com.ebuddy.cassandra.dao.visitor.ColumnVisitor;
import com.google.common.collect.Lists;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.ColumnSlice;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.beans.HSuperColumn;
import me.prettyprint.hector.api.beans.Row;
import me.prettyprint.hector.api.beans.Rows;
import me.prettyprint.hector.api.beans.SuperRow;
import me.prettyprint.hector.api.beans.SuperRows;
import me.prettyprint.hector.api.beans.SuperSlice;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.mutation.Mutator;
import me.prettyprint.hector.api.query.MultigetSubSliceQuery;
import me.prettyprint.hector.api.query.MultigetSuperSliceQuery;
import me.prettyprint.hector.api.query.QueryResult;
import me.prettyprint.hector.api.query.SubColumnQuery;
import me.prettyprint.hector.api.query.SubSliceQuery;
import me.prettyprint.hector.api.query.SuperSliceQuery;
    }

    /**
     * Set a subcolumn value for a specified super column.
     *
     * @param rowKey          the row key of type K
     * @param superColumnName the super column name of type SN
     * @param columnName      the column name
     * @param columnValue     the column value
     */
    @Override
    public void writeColumn(K rowKey, SN superColumnName, N columnName, V columnValue) {
        basicWriteColumn(rowKey, superColumnName, columnName, columnValue, null);

    }


    /**
     * Write a subcolumn value for a specified super column as a batch operation.
     *
     * @param rowKey          the row key of type K
     * @param superColumnName the super column name of type SN
     * @param columnName      the column name
     * @param columnValue     the column value
     * @param txnContext      BatchContext for batch operations
     */
    @Override
    public void writeColumn(K rowKey,
                                  SN superColumnName,
                                  N columnName,
// Path: api/src/main/java/com/ebuddy/cassandra/BatchContext.java
// public interface BatchContext { }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/ColumnMapper.java
// public interface ColumnMapper<T,N,V> {
// 
//     T mapColumn(N columnName, V columnValue);
// 
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/ColumnMapperWithTimestamps.java
// public interface ColumnMapperWithTimestamps<T,N,V> {
// 
//     T mapColumn(N columnName, V columnValue, long timestamp);
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/SuperColumnFamilyRowMapper.java
// public interface SuperColumnFamilyRowMapper<T,K,SN,N,V> {
//     T mapRow(K rowKey, List<HSuperColumn<SN,N,V>> superColumns);
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/mapper/SuperColumnMapper.java
// public interface SuperColumnMapper<T,K,SN,N,V> {
// 
//     T mapSuperColumn(K rowKey, SN superColumnName, List<HColumn<N,V>> columns);
// 
// }
// 
// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/visitor/ColumnVisitor.java
// public interface ColumnVisitor<N, V> {
// 
//     /**
//      * Visit easy column and evaluates a logic. 
//      * @param columnName the name of the column
//      * @param columnValue the value of the column
//      * @param timestamp the cassandra timestamp when the column was written
//      * @param ttl the time to live for that column value
//      */
//     void visit(N columnName, V columnValue, long timestamp, int ttl);
// 
// }


// Path: thrift/src/main/java/com/ebuddy/cassandra/dao/SuperColumnFamilyTemplate.java
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import org.apache.commons.lang3.Validate;
import com.ebuddy.cassandra.BatchContext;
import com.ebuddy.cassandra.dao.mapper.ColumnMapper;
import com.ebuddy.cassandra.dao.mapper.ColumnMapperWithTimestamps;
import com.ebuddy.cassandra.dao.mapper.SuperColumnFamilyRowMapper;
import com.ebuddy.cassandra.dao.mapper.SuperColumnMapper;
import com.ebuddy.cassandra.dao.visitor.ColumnVisitor;
import com.google.common.collect.Lists;
import me.prettyprint.hector.api.Keyspace;
import me.prettyprint.hector.api.Serializer;
import me.prettyprint.hector.api.beans.ColumnSlice;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.beans.HSuperColumn;
import me.prettyprint.hector.api.beans.Row;
import me.prettyprint.hector.api.beans.Rows;
import me.prettyprint.hector.api.beans.SuperRow;
import me.prettyprint.hector.api.beans.SuperRows;
import me.prettyprint.hector.api.beans.SuperSlice;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.mutation.Mutator;
import me.prettyprint.hector.api.query.MultigetSubSliceQuery;
import me.prettyprint.hector.api.query.MultigetSuperSliceQuery;
import me.prettyprint.hector.api.query.QueryResult;
import me.prettyprint.hector.api.query.SubColumnQuery;
import me.prettyprint.hector.api.query.SubSliceQuery;
import me.prettyprint.hector.api.query.SuperSliceQuery;

    }

    /**
     * Set a subcolumn value for a specified super column.
     *
     * @param rowKey          the row key of type K
     * @param superColumnName the super column name of type SN
     * @param columnName      the column name
     * @param columnValue     the column value
     */
    @Override
    public void writeColumn(K rowKey, SN superColumnName, N columnName, V columnValue) {
        basicWriteColumn(rowKey, superColumnName, columnName, columnValue, null);

    }


    /**
     * Write a subcolumn value for a specified super column as a batch operation.
     *
     * @param rowKey          the row key of type K
     * @param superColumnName the super column name of type SN
     * @param columnName      the column name
     * @param columnValue     the column value
     * @param txnContext      BatchContext for batch operations
     */
    @Override
    public void writeColumn(K rowKey,
                                  SN superColumnName,
                                  N columnName,
                                  V columnValue,