Skip to content

Commit

Permalink
Refactor: Extract interface from HColumn and move it to the api.beans…
Browse files Browse the repository at this point in the history
… package
  • Loading branch information
rantav committed Sep 19, 2010
1 parent f8ad7a5 commit cc5b5a9
Show file tree
Hide file tree
Showing 16 changed files with 79 additions and 37 deletions.
Expand Up @@ -8,12 +8,12 @@
import java.util.HashMap;
import java.util.Map;

import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.cassandra.model.KeyspaceOperator;
import me.prettyprint.cassandra.model.Mutator;
import me.prettyprint.cassandra.model.Result;
import me.prettyprint.cassandra.model.Rows;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.query.ColumnQuery;
import me.prettyprint.hector.api.query.MultigetSliceQuery;
Expand Down Expand Up @@ -65,7 +65,7 @@ public Map<String, String> getMulti(String columnName, String... keys) {
Rows<String,String> rows = r.get();
Map<String, String> ret = new HashMap<String, String>(keys.length);
for (String k: keys) {
HColumn<String,String> c = rows.getByKey(k).getColumnSlice().getColumnByName(columnName);
HColumn<String, String> c = rows.getByKey(k).getColumnSlice().getColumnByName(columnName);
if (c != null && c.getValue() != null) {
ret.put(k, c.getValue());
}
Expand Down
Expand Up @@ -10,13 +10,13 @@
import java.util.HashMap;
import java.util.Map;

import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.cassandra.model.KeyspaceOperator;
import me.prettyprint.cassandra.model.Mutator;
import me.prettyprint.cassandra.model.Result;
import me.prettyprint.cassandra.model.Rows;
import me.prettyprint.cassandra.serializers.StringSerializer;
import me.prettyprint.cassandra.service.Cluster;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.query.ColumnQuery;
import me.prettyprint.hector.api.query.MultigetSliceQuery;
Expand Down Expand Up @@ -89,7 +89,7 @@ public Map<String, String> getMulti(String... keys) {
Rows<String,String> rows = r.get();
Map<String, String> ret = new HashMap<String, String>(keys.length);
for (String k: keys) {
HColumn<String,String> c = rows.getByKey(k).getColumnSlice().getColumnByName(COLUMN_NAME);
HColumn<String, String> c = rows.getByKey(k).getColumnSlice().getColumnByName(COLUMN_NAME);
if (c != null && c.getValue() != null) {
ret.put(k, c.getValue());
}
Expand Down
@@ -1,5 +1,6 @@
package me.prettyprint.cassandra.model;

import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.query.ColumnQuery;

/**
Expand Down
Expand Up @@ -3,6 +3,7 @@
import java.util.List;

import me.prettyprint.cassandra.utils.Assert;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.factory.HFactory;
import me.prettyprint.hector.api.query.SubColumnQuery;
import me.prettyprint.hector.api.query.SubSliceQuery;
Expand Down
5 changes: 3 additions & 2 deletions src/main/java/me/prettyprint/cassandra/model/ColumnSlice.java
Expand Up @@ -7,6 +7,7 @@
import java.util.Map;

import me.prettyprint.cassandra.utils.Assert;
import me.prettyprint.hector.api.beans.HColumn;

import org.apache.cassandra.thrift.Column;

Expand All @@ -24,7 +25,7 @@ public ColumnSlice(List<Column> tColumns, Serializer<N> nameSerializer,
columnsMap = new HashMap<N,HColumn<N,V>>(tColumns.size());
List<HColumn<N,V>> list = new ArrayList<HColumn<N,V>>(tColumns.size());
for (Column c: tColumns) {
HColumn<N, V> column = new HColumn<N,V>(c, nameSerializer, valueSerializer);
HColumn<N, V> column = new HColumnImpl<N,V>(c, nameSerializer, valueSerializer);
columnsMap.put(column.getName(), column);
list.add(column);
}
Expand All @@ -39,7 +40,7 @@ public List<HColumn<N,V>> getColumns() {
return columnsList;
}

public HColumn<N,V> getColumnByName(N columnName) {
public HColumn<N, V> getColumnByName(N columnName) {
return columnsMap.get(columnName);
}

Expand Down
Expand Up @@ -2,6 +2,8 @@

import static me.prettyprint.cassandra.utils.Assert.notNull;

import me.prettyprint.hector.api.beans.HColumn;

import org.apache.cassandra.thrift.Column;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
Expand All @@ -15,15 +17,15 @@
* @author Ran Tavory (rantav@gmail.com)
*
*/
public final class HColumn<N,V> {
public final class HColumnImpl<N,V> implements HColumn<N, V> {

private N name;
private V value;
private long timestamp;
private final Serializer<N> nameSerializer;
private final Serializer<V> valueSerializer;

public HColumn(N name, V value, long timestamp, Serializer<N> nameSerializer,
public HColumnImpl(N name, V value, long timestamp, Serializer<N> nameSerializer,
Serializer<V> valueSerializer) {
this(nameSerializer, valueSerializer);
notNull(name, "name is null");
Expand All @@ -34,7 +36,7 @@ public HColumn(N name, V value, long timestamp, Serializer<N> nameSerializer,
this.timestamp = timestamp;
}

public HColumn(Column thriftColumn, Serializer<N> nameSerializer,
public HColumnImpl(Column thriftColumn, Serializer<N> nameSerializer,
Serializer<V> valueSerializer) {
this(nameSerializer, valueSerializer);
notNull(thriftColumn, "thriftColumn is null");
Expand All @@ -43,38 +45,43 @@ public HColumn(Column thriftColumn, Serializer<N> nameSerializer,
timestamp = thriftColumn.timestamp;
}

/*package*/ HColumn(Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
/*package*/ HColumnImpl(Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
notNull(nameSerializer, "nameSerializer is null");
notNull(valueSerializer, "valueSerializer is null");
this.nameSerializer = nameSerializer;
this.valueSerializer = valueSerializer;
}

public HColumn<N,V> setName(N name) {
@Override
public HColumn<N, V> setName(N name) {
notNull(name, "name is null");
this.name = name;
return this;
}

public HColumn<N,V> setValue(V value) {
@Override
public HColumn<N, V> setValue(V value) {
notNull(value, "value is null");
this.value = value;
return this;
}

HColumn<N,V> setTimestamp(long timestamp) {
HColumn<N, V> setTimestamp(long timestamp) {
this.timestamp = timestamp;
return this;
}

@Override
public N getName() {
return name;
}

@Override
public V getValue() {
return value;
}

@Override
public long getTimestamp() {
return timestamp;
}
Expand All @@ -90,21 +97,16 @@ public HColumn<N, V> fromThrift(Column c) {
return this;
}

@Override
public Serializer<N> getNameSerializer() {
return nameSerializer;
}

@Override
public Serializer<V> getValueSerializer() {
return valueSerializer;
}

public byte[] getValueBytes() {
return valueSerializer.toBytes(getValue());
}

public byte[] getNameBytes() {
return nameSerializer.toBytes(getName());
}

@Override
public String toString() {
Expand All @@ -128,7 +130,7 @@ public boolean equals(Object obj) {
return false;
}
@SuppressWarnings("unchecked")
HColumn<N,V> other = (HColumn<N,V>) obj;
HColumnImpl<N,V> other = (HColumnImpl<N,V>) obj;
return new EqualsBuilder().appendSuper(super.equals(obj)).append(name, other.name).
append(value, other.value).append(timestamp, other.timestamp).isEquals();
}
Expand Down
10 changes: 6 additions & 4 deletions src/main/java/me/prettyprint/cassandra/model/HSuperColumn.java
Expand Up @@ -7,6 +7,8 @@
import java.util.Collections;
import java.util.List;

import me.prettyprint.hector.api.beans.HColumn;

import org.apache.cassandra.thrift.Column;
import org.apache.cassandra.thrift.SuperColumn;

Expand All @@ -25,7 +27,7 @@
public final class HSuperColumn<SN,N,V> {

private SN superName;
private List<HColumn<N,V>> columns;
private List<? extends HColumn<N,V>> columns;
private long timestamp;
private final Serializer<SN> superNameSerializer;
private final Serializer<N> nameSerializer;
Expand Down Expand Up @@ -100,7 +102,7 @@ public List<HColumn<N,V>> getColumns() {
return Collections.unmodifiableList(columns);
}

public HColumn<N,V> get(int i) {
public HColumn<N, V> get(int i) {
return columns.get(i);
}

Expand All @@ -122,15 +124,15 @@ public SuperColumn toThrift() {
private List<Column> toThriftColumn() {
List<Column> ret = new ArrayList<Column>(columns.size());
for (HColumn<N, V> c: columns) {
ret.add(c.toThrift());
ret.add(((HColumnImpl<N, V>) c).toThrift());
}
return ret;
}

private List<HColumn<N, V>> fromThriftColumns(List<Column> tcolumns) {
List<HColumn<N, V>> cs = new ArrayList<HColumn<N,V>>(tcolumns.size());
for (Column c: tcolumns) {
cs.add(new HColumn<N, V>(c, nameSerializer, valueSerializer));
cs.add(new HColumnImpl<N, V>(c, nameSerializer, valueSerializer));
}
return cs;
}
Expand Down
3 changes: 2 additions & 1 deletion src/main/java/me/prettyprint/cassandra/model/Mutator.java
Expand Up @@ -5,6 +5,7 @@
import me.prettyprint.cassandra.model.thrift.ThriftFactory;
import me.prettyprint.cassandra.service.BatchMutation;
import me.prettyprint.cassandra.service.Keyspace;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.exceptions.HectorException;

import org.apache.cassandra.thrift.Deletion;
Expand Down Expand Up @@ -75,7 +76,7 @@ public Void doInKeyspace(Keyspace ks) throws HectorException {
// keyspaces and CFs on each add/delete call
// also, should throw a typed StatementValidationException or similar perhaps?
public <N,V> Mutator addInsertion(String key, String cf, HColumn<N,V> c) {
getPendingMutations().addInsertion(key, Arrays.asList(cf), c.toThrift());
getPendingMutations().addInsertion(key, Arrays.asList(cf), ((HColumnImpl<N, V>) c).toThrift());
return this;
}

Expand Down
@@ -1,12 +1,12 @@
package me.prettyprint.cassandra.model.avro;

import me.prettyprint.cassandra.model.AbstractColumnQuery;
import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.cassandra.model.KeyspaceOperationCallback;
import me.prettyprint.cassandra.model.KeyspaceOperator;
import me.prettyprint.cassandra.model.Result;
import me.prettyprint.cassandra.model.Serializer;
import me.prettyprint.cassandra.service.Keyspace;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.query.ColumnQuery;

Expand Down
@@ -1,12 +1,13 @@
package me.prettyprint.cassandra.model.thrift;

import me.prettyprint.cassandra.model.AbstractColumnQuery;
import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.cassandra.model.HColumnImpl;
import me.prettyprint.cassandra.model.KeyspaceOperationCallback;
import me.prettyprint.cassandra.model.KeyspaceOperator;
import me.prettyprint.cassandra.model.Result;
import me.prettyprint.cassandra.model.Serializer;
import me.prettyprint.cassandra.service.Keyspace;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.exceptions.HNotFoundException;
import me.prettyprint.hector.api.exceptions.HectorException;
import me.prettyprint.hector.api.query.ColumnQuery;
Expand Down Expand Up @@ -36,7 +37,7 @@ public HColumn<N, V> doInKeyspace(Keyspace ks) throws HectorException {
try {
org.apache.cassandra.thrift.Column thriftColumn =
ks.getColumn(key, ThriftFactory.createColumnPath(columnFamilyName, name, columnNameSerializer));
return new HColumn<N, V>(thriftColumn, columnNameSerializer, valueSerializer);
return new HColumnImpl<N, V>(thriftColumn, columnNameSerializer, valueSerializer);
} catch (HNotFoundException e) {
return null;
}
Expand Down
30 changes: 30 additions & 0 deletions src/main/java/me/prettyprint/hector/api/beans/HColumn.java
@@ -0,0 +1,30 @@
package me.prettyprint.hector.api.beans;

import me.prettyprint.cassandra.model.Serializer;

/**
* Hector Column definition.
*
* @param <N> The type of the column name
* @param <V> The type of the column value
*
* @author Ran Tavory (rantav@gmail.com)
*
*/
public interface HColumn<N, V> {

HColumn<N, V> setName(N name);

HColumn<N, V> setValue(V value);

N getName();

V getValue();

long getTimestamp();

Serializer<N> getNameSerializer();

Serializer<V> getValueSerializer();

}
13 changes: 7 additions & 6 deletions src/main/java/me/prettyprint/hector/api/factory/HFactory.java
Expand Up @@ -4,7 +4,7 @@
import java.util.List;
import java.util.Map;

import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.cassandra.model.HColumnImpl;
import me.prettyprint.cassandra.model.HSuperColumn;
import me.prettyprint.cassandra.model.KeyspaceOperator;
import me.prettyprint.cassandra.model.Mutator;
Expand All @@ -30,6 +30,7 @@
import me.prettyprint.cassandra.service.CassandraHostConfigurator;
import me.prettyprint.cassandra.service.Cluster;
import me.prettyprint.hector.api.ConsistencyLevelPolicy;
import me.prettyprint.hector.api.beans.HColumn;
import me.prettyprint.hector.api.query.ColumnQuery;
import me.prettyprint.hector.api.query.MultigetSliceQuery;
import me.prettyprint.hector.api.query.MultigetSubSliceQuery;
Expand Down Expand Up @@ -217,23 +218,23 @@ public static <SN,N,V> HSuperColumn<SN,N,V> createSuperColumn(SN name, List<HCol
valueSerializer);
}

public static <N,V> HColumn<N,V> createColumn(N name, V value, long timestamp,
public static <N,V> HColumn<N, V> createColumn(N name, V value, long timestamp,
Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
return new HColumn<N, V>(name, value, timestamp, nameSerializer, valueSerializer);
return new HColumnImpl<N, V>(name, value, timestamp, nameSerializer, valueSerializer);
}

/**
* Creates a column with the timestamp of now.
*/
public static <N,V> HColumn<N,V> createColumn(N name, V value,
public static <N,V> HColumn<N, V> createColumn(N name, V value,
Serializer<N> nameSerializer, Serializer<V> valueSerializer) {
return new HColumn<N, V>(name, value, createTimestamp(), nameSerializer, valueSerializer);
return new HColumnImpl<N, V>(name, value, createTimestamp(), nameSerializer, valueSerializer);
}

/**
* Convienience method for creating a column with a String name and String value
*/
public static HColumn<String,String> createStringColumn(String name, String value) {
public static HColumn<String, String> createStringColumn(String name, String value) {
StringSerializer se = StringSerializer.get();
return createColumn(name, value, se, se);
}
Expand Down
@@ -1,6 +1,6 @@
package me.prettyprint.hector.api.query;

import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.hector.api.beans.HColumn;

/**
* A ColumnQuery is used for querying the value of a single and standard column.
Expand Down
@@ -1,6 +1,6 @@
package me.prettyprint.hector.api.query;

import me.prettyprint.cassandra.model.HColumn;
import me.prettyprint.hector.api.beans.HColumn;

/**
* Used to get the value of a subcolumn within a super column
Expand Down

0 comments on commit cc5b5a9

Please sign in to comment.