package org.vertexium.accumulo; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Value; import org.vertexium.*; import java.util.*; public class AccumuloExtendedDataRow extends ExtendedDataRowBase { private final ExtendedDataRowId rowId; private final Map<String, Property> properties; public AccumuloExtendedDataRow(ExtendedDataRowId rowId, SortedMap<Key, Value> row, VertexiumSerializer vertexiumSerializer) { this.rowId = rowId; this.properties = rowToProperties(rowId, row, vertexiumSerializer); } private Map<String, Property> rowToProperties( ExtendedDataRowId rowId, SortedMap<Key, Value> row, VertexiumSerializer vertexiumSerializer ) { Map<String, Property> results = new HashMap<>(); for (Map.Entry<Key, Value> rowEntry : row.entrySet()) { String propertyName = rowEntry.getKey().getColumnQualifier().toString(); Object propertyValue = vertexiumSerializer.bytesToObject(rowEntry.getValue().get()); long timestamp = rowEntry.getKey().getTimestamp(); Visibility visibility = AccumuloGraph.accumuloVisibilityToVisibility(rowEntry.getKey().getColumnVisibility()); AccumuloExtendedDataRowProperty prop = new AccumuloExtendedDataRowProperty( rowId.getTableName(), propertyName, propertyValue, timestamp, visibility ); results.put(propertyName, prop); } return results; } @Override public ExtendedDataRowId getId() { return rowId; } @Override public Iterable<Property> getProperties() { return properties.values(); } @Override public Property getProperty(String name) { return properties.get(name); } @Override public Iterable<String> getPropertyNames() { return properties.keySet(); } @Override public Object getPropertyValue(String name) { Property property = getProperty(name); if (property == null) { return null; } return property.getValue(); } private static class AccumuloExtendedDataRowProperty extends Property { private final String tableName; private final String propertyName; private final Object propertyValue; private final long timestamp; private final Visibility visibility; public AccumuloExtendedDataRowProperty( String tableName, String propertyName, Object propertyValue, long timestamp, Visibility visibility ) { this.tableName = tableName; this.propertyName = propertyName; this.propertyValue = propertyValue; this.timestamp = timestamp; this.visibility = visibility; } @Override public String getKey() { return tableName; } @Override public String getName() { return propertyName; } @Override public Object getValue() { return propertyValue; } @Override public long getTimestamp() { return timestamp; } @Override public Visibility getVisibility() { return visibility; } @Override public Metadata getMetadata() { return new Metadata(); } @Override public Iterable<Visibility> getHiddenVisibilities() { return new ArrayList<>(); } @Override public boolean isHidden(Authorizations authorizations) { return false; } } }