package org.vertexium.accumulo.iterator; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Value; import org.apache.accumulo.core.iterators.IteratorEnvironment; import org.apache.accumulo.core.iterators.SortedKeyValueIterator; import org.apache.hadoop.io.Text; import org.vertexium.accumulo.iterator.model.EdgeElementData; import org.vertexium.accumulo.iterator.model.IteratorFetchHint; import java.util.EnumSet; public class EdgeIterator extends ElementIterator<EdgeElementData> { public static final String CF_SIGNAL_STRING = "E"; public static final Text CF_SIGNAL = new Text(CF_SIGNAL_STRING); public static final String CF_OUT_VERTEX_STRING = "EOUT"; public static final Text CF_OUT_VERTEX = new Text(CF_OUT_VERTEX_STRING); public static final String CF_IN_VERTEX_STRING = "EIN"; public static final Text CF_IN_VERTEX = new Text(CF_IN_VERTEX_STRING); public EdgeIterator() { this(IteratorFetchHint.ALL); } public EdgeIterator(EnumSet<IteratorFetchHint> fetchHints) { super(null, fetchHints); } public EdgeIterator(SortedKeyValueIterator<Key, Value> source, EnumSet<IteratorFetchHint> fetchHints) { super(source, fetchHints); } @Override protected boolean processColumn(Key key, Value value, Text columnFamily, Text columnQualifier) { if (CF_IN_VERTEX.compareTo(columnFamily) == 0) { getElementData().inVertexId = key.getColumnQualifier(); return true; } if (CF_OUT_VERTEX.compareTo(columnFamily) == 0) { getElementData().outVertexId = key.getColumnQualifier(); return true; } return false; } @Override protected void processSignalColumn(Text columnQualifier) { super.processSignalColumn(columnQualifier); getElementData().label = columnQualifier; } @Override protected Text getVisibilitySignal() { return CF_SIGNAL; } @Override public SortedKeyValueIterator<Key, Value> deepCopy(IteratorEnvironment env) { if (sourceIter != null) { return new EdgeIterator(sourceIter.deepCopy(env), getFetchHints()); } return new EdgeIterator(getFetchHints()); } @Override protected EdgeElementData createElementData() { return new EdgeElementData(); } }