Package com.netflix.astyanax.cql.reads

Source Code of com.netflix.astyanax.cql.reads.CqlRowCopier

package com.netflix.astyanax.cql.reads;

import java.util.Iterator;

import com.google.common.util.concurrent.ListenableFuture;
import com.netflix.astyanax.MutationBatch;
import com.netflix.astyanax.RowCopier;
import com.netflix.astyanax.connectionpool.OperationResult;
import com.netflix.astyanax.connectionpool.exceptions.ConnectionException;
import com.netflix.astyanax.cql.CqlKeyspaceImpl;
import com.netflix.astyanax.cql.CqlKeyspaceImpl.KeyspaceContext;
import com.netflix.astyanax.cql.reads.model.CqlColumnImpl;
import com.netflix.astyanax.cql.writes.CqlColumnListMutationImpl;
import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.ColumnFamily;
import com.netflix.astyanax.model.ColumnList;
import com.netflix.astyanax.query.RowQuery;

/**
* Impl for {@link RowCopier}
*
* @author poberai
*
* @param <K>
* @param <C>
*/
public class CqlRowCopier<K,C> implements RowCopier<K,C> {

  private boolean useOriginalTimestamp = false;
 
  private final RowQuery<K,C> rowQuery;
  private final ColumnFamily<K,C> cf;
  private final K rowKey;
  private final KeyspaceContext ksContext;
 
  public CqlRowCopier(ColumnFamily<K,C> cf, K rowKey, RowQuery<K,C> query, KeyspaceContext ksContext) {
    this.cf = cf;
    this.rowKey = rowKey;
    this.rowQuery = query;
    this.ksContext = ksContext;
  }
 
  @Override
  public OperationResult<Void> execute() throws ConnectionException {
    return getMutationBatch().execute();
  }

  @Override
  public ListenableFuture<OperationResult<Void>> executeAsync() throws ConnectionException {
    return getMutationBatch().executeAsync();
  }

  @Override
  public RowCopier<K, C> withOriginalTimestamp(boolean useTimestamp) {
    this.useOriginalTimestamp = useTimestamp;
    return this;
  }
 
  private MutationBatch getMutationBatch() throws ConnectionException {
   
    ColumnList<C> columnList = rowQuery.execute().getResult();
   
    CqlKeyspaceImpl ksImpl = new CqlKeyspaceImpl(ksContext);
   
    MutationBatch mBatch = ksImpl.prepareMutationBatch();
    CqlColumnListMutationImpl<K,C> colListMutation = (CqlColumnListMutationImpl<K, C>)mBatch.withRow(cf, rowKey);
   
    Iterator<Column<C>> iter = columnList.iterator();

    boolean first = true;
   
    while(iter.hasNext()) {
     
      CqlColumnImpl<C> col = (CqlColumnImpl<C>) iter.next();
     
      if (first && useOriginalTimestamp) {
        colListMutation.setTimestamp(col.getTimestamp());
        first = false;
      }
     
      colListMutation.putColumnWithGenericValue(col.getName(), col.getGenericValue(), null);
    }
   
    return mBatch;
  }
}
TOP

Related Classes of com.netflix.astyanax.cql.reads.CqlRowCopier

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.