package com.thinkaurelius.faunus.formats.titan.cassandra;
import com.google.common.base.Preconditions;
import com.thinkaurelius.faunus.FaunusVertex;
import com.thinkaurelius.faunus.formats.titan.FaunusTitanGraph;
import com.thinkaurelius.titan.diskstorage.keycolumnvalue.Entry;
import com.thinkaurelius.titan.diskstorage.keycolumnvalue.StaticBufferEntry;
import com.thinkaurelius.titan.diskstorage.util.StaticByteBuffer;
import org.apache.cassandra.db.IColumn;
import org.apache.commons.configuration.Configuration;
import java.nio.ByteBuffer;
import java.util.Iterator;
import java.util.Map;
import java.util.SortedMap;
/**
* (c) Matthias Broecheler (me@matthiasb.com)
*/
public class FaunusTitanCassandraGraph extends FaunusTitanGraph {
public FaunusTitanCassandraGraph(final Configuration configuration) {
super(configuration);
}
public FaunusTitanCassandraGraph(final Configuration configuration, boolean autoTx) {
super(configuration, autoTx);
}
public FaunusVertex readFaunusVertex(final ByteBuffer key, final SortedMap<ByteBuffer, IColumn> value) {
return super.readFaunusVertex(key, new CassandraMapIterable(value));
}
private static class CassandraMapIterable implements Iterable<Entry> {
private final SortedMap<ByteBuffer, IColumn> columnValues;
public CassandraMapIterable(final SortedMap<ByteBuffer, IColumn> columnValues) {
Preconditions.checkNotNull(columnValues);
this.columnValues = columnValues;
}
@Override
public Iterator<Entry> iterator() {
return new CassandraMapIterator(columnValues.entrySet().iterator());
}
}
private static class CassandraMapIterator implements Iterator<Entry> {
private final Iterator<Map.Entry<ByteBuffer, IColumn>> iterator;
public CassandraMapIterator(final Iterator<Map.Entry<ByteBuffer, IColumn>> iterator) {
this.iterator = iterator;
}
@Override
public boolean hasNext() {
return iterator.hasNext();
}
@Override
public Entry next() {
final Map.Entry<ByteBuffer, IColumn> entry = iterator.next();
return new StaticBufferEntry(new StaticByteBuffer(entry.getKey()), new StaticByteBuffer(entry.getValue().value()));
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
}
}