Package com.netflix.astyanax.cql.schema

Source Code of com.netflix.astyanax.cql.schema.CqlColumnDefinitionImpl

package com.netflix.astyanax.cql.schema;

import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.cassandra.db.marshal.UTF8Type;

import com.datastax.driver.core.ResultSet;
import com.datastax.driver.core.Row;
import com.netflix.astyanax.cql.util.CqlTypeMapping;
import com.netflix.astyanax.ddl.ColumnDefinition;
import com.netflix.astyanax.ddl.FieldMetadata;

/**
* Impl for {@link ColumnDefinition} interface that constructs the state from a {@link Row} object
* retrieved from the java driver {@link ResultSet}.
*
* @author poberai
*
*/
public class CqlColumnDefinitionImpl implements ColumnDefinition, Comparable<CqlColumnDefinitionImpl> {

  Map<String, Object> options = new HashMap<String, Object>();

  private CqlColumnType colType;
  private Integer componentIndex;
 
  public enum CqlColumnType {
    partition_key, clustering_key, regular, compact_value;
  }
 
  public CqlColumnDefinitionImpl() {
   
  }
 
  public CqlColumnDefinitionImpl(Row row) {
    this.setName(row.getString("column_name"));
   
    String validationClass = row.getString("validator");
    if (validationClass.contains("(")) {
      int start = validationClass.indexOf("(");
      int end = validationClass.indexOf(")");
      validationClass = validationClass.substring(start+1, end);
    }
    this.setValidationClass(validationClass);
   
    colType = CqlColumnType.valueOf(row.getString("type"));
    if (colType == CqlColumnType.clustering_key) {
      componentIndex = row.getInt("component_index");
    }
  }
 
  @Override
  public ColumnDefinition setName(String name) {
    options.put("column_name", name);
    return this;
  }

  @Override
  public ColumnDefinition setName(byte[] name) {
    return setName(ByteBuffer.wrap(name));
  }

  @Override
  public ColumnDefinition setName(ByteBuffer name) {
    return setName(UTF8Type.instance.compose(name));
  }

  @Override
  public ColumnDefinition setValidationClass(String value) {
    options.put("validator", value);
    return this;
  }

  @Override
  public ColumnDefinition setIndex(String name, String type) {
    throw new UnsupportedOperationException("Operation not supported");
  }

  @Override
  public ColumnDefinition setKeysIndex(String name) {
    throw new UnsupportedOperationException("Operation not supported");
  }

  @Override
  public ColumnDefinition setKeysIndex() {
    throw new UnsupportedOperationException("Operation not supported");
  }

  @Override
  public ColumnDefinition setIndexWithType(String type) {
    throw new UnsupportedOperationException("Operation not supported");
  }

  @Override
  public String getName() {
    return (String) options.get("column_name");
  }

  @Override
  public ByteBuffer getRawName() {
    return UTF8Type.instance.decompose(getName());
  }

  @Override
  public String getValidationClass() {
    return (String) options.get("validator");
  }

  @Override
  public String getIndexName() {
    throw new UnsupportedOperationException("Operation not supported");
  }

  @Override
  public String getIndexType() {
    throw new UnsupportedOperationException("Operation not supported");
  }

  @Override
  public boolean hasIndex() {
    return getIndexName() != null;
  }

  @Override
  public Map<String, String> getOptions() {
    Map<String, String> result = new HashMap<String, String>();
    for (String key : options.keySet()) {
      result.put(key, options.get(key).toString());
    }
    return result;
  }

  @Override
  public String getOption(String name, String defaultValue) {
    String value = (String) options.get(name);
    if (value == null) {
      return defaultValue;
    } else {
      return value;
    }
  }

  @Override
  public ColumnDefinition setOptions(Map<String, String> setOptions) {
    this.options.putAll(setOptions);
    return this;
  }

  @Override
  public String setOption(String name, String value) {
    this.options.put(name, value);
    return options.get(name).toString();
  }

  @Override
  public Collection<String> getFieldNames() {
    return options.keySet();
  }

  @Override
  public Collection<FieldMetadata> getFieldsMetadata() {
   
    List<FieldMetadata> list = new ArrayList<FieldMetadata>();
   
    for (String key : options.keySet()) {
      Object value = options.get(key);
      Class<?> clazz = value.getClass();
     
      String name = key.toUpperCase();
      String type = clazz.getSimpleName().toUpperCase();
      boolean isContainer = Collection.class.isAssignableFrom(clazz) || Map.class.isAssignableFrom(clazz);
      list.add(new FieldMetadata(name, type, isContainer));
    }
    return list;
  }

  @Override
  public Object getFieldValue(String name) {
    return options.get(name);
  }

  @Override
  public ColumnDefinition setFieldValue(String name, Object value) {
    options.put(name, String.valueOf(value));
    return this;
  }

  @Override
  public ColumnDefinition setFields(Map<String, Object> fields) {
    options.putAll(fields);
    return this;
  }

  public String getCqlType() {
    return CqlTypeMapping.getCqlTypeFromComparator(getValidationClass());
  }
 
  public CqlColumnType getColumnType() {
    return this.colType;
  }
 
  public int getComponentIndex() {
    return this.componentIndex;
  }

  @Override
  public int compareTo(CqlColumnDefinitionImpl o) {
    return this.componentIndex.compareTo(o.componentIndex);
  }

}
TOP

Related Classes of com.netflix.astyanax.cql.schema.CqlColumnDefinitionImpl

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.