package mil.nga.giat.geowave.datastore.accumulo.util; import org.apache.accumulo.core.data.Key; import org.apache.accumulo.core.data.Value; import org.apache.commons.lang3.tuple.Pair; import org.apache.hadoop.io.Text; import mil.nga.giat.geowave.core.index.StringUtils; public class VisibilityTransformer implements Transformer { private String transformingRegex; private String replacement; public VisibilityTransformer( final String transformingRegex, final String replacement ) { super(); this.transformingRegex = transformingRegex; this.replacement = replacement; } @Override public Pair<Key, Value> transform( Pair<Key, Value> entry ) { Key originalKey = entry.getKey(); Text visibiltity = originalKey.getColumnVisibility(); String newVisibility = visibiltity.toString().replaceFirst( transformingRegex, replacement); if (newVisibility.length() > 0) { char one = newVisibility.charAt(0); // strip off any ending options if (one == '&' || one == '|') newVisibility = newVisibility.substring(1); } byte[] row = originalKey.getRowData().toArray(); byte[] cf = originalKey.getColumnFamilyData().toArray(); byte[] cq = originalKey.getColumnQualifierData().toArray(); long timestamp = originalKey.getTimestamp(); byte[] cv = newVisibility.getBytes(StringUtils.GEOWAVE_CHAR_SET); Key newKey = new Key( row, 0, row.length, cf, 0, cf.length, cq, 0, cq.length, cv, 0, cv.length, timestamp + 1); return Pair.of( newKey, entry.getValue()); } }