package com.tinkerpop.blueprints.util.wrappers.partition;
import com.tinkerpop.blueprints.CloseableIterable;
import com.tinkerpop.blueprints.Edge;
import com.tinkerpop.blueprints.Element;
import com.tinkerpop.blueprints.Index;
import com.tinkerpop.blueprints.Vertex;
import com.tinkerpop.blueprints.util.StringFactory;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
class PartitionIndex<T extends Element> implements Index<T> {
protected Index<T> rawIndex;
protected PartitionGraph graph;
public PartitionIndex(final Index<T> rawIndex, final PartitionGraph graph) {
this.rawIndex = rawIndex;
this.graph = graph;
}
public String getIndexName() {
return this.rawIndex.getIndexName();
}
public Class<T> getIndexClass() {
return this.rawIndex.getIndexClass();
}
public long count(final String key, final Object value) {
long counter = 0;
for (Element element : this.get(key, value)) {
counter++;
}
return counter;
}
public void remove(final String key, final Object value, final T element) {
this.rawIndex.remove(key, value, (T) ((PartitionElement) element).getBaseElement());
}
public void put(final String key, final Object value, final T element) {
this.rawIndex.put(key, value, (T) ((PartitionElement) element).getBaseElement());
}
public CloseableIterable<T> get(final String key, final Object value) {
if (Vertex.class.isAssignableFrom(this.getIndexClass()))
return (CloseableIterable<T>) new PartitionVertexIterable((Iterable<Vertex>) this.rawIndex.get(key, value), this.graph);
else
return (CloseableIterable<T>) new PartitionEdgeIterable((Iterable<Edge>) this.rawIndex.get(key, value), this.graph);
}
public CloseableIterable<T> query(final String key, final Object query) {
if (Vertex.class.isAssignableFrom(this.getIndexClass())) {
return (CloseableIterable<T>) new PartitionVertexIterable((Iterable<Vertex>) this.rawIndex.query(key, query), this.graph);
} else {
return (CloseableIterable<T>) new PartitionEdgeIterable((Iterable<Edge>) this.rawIndex.query(key, query), this.graph);
}
}
public String toString() {
return StringFactory.indexString(this);
}
}