package mil.nga.giat.geowave.core.store.index;
import com.google.common.base.Preconditions;
import mil.nga.giat.geowave.core.index.ByteArrayId;
import mil.nga.giat.geowave.core.index.ByteArrayUtils;
public class SecondaryIndexUtils
{
/**
* constructs a composite column family consisting of the adapter prepended
* to the field id of the indexed attribute
*
* @param adapterId
* @param indexedAttributeFieldId
* @return byte array for use as a column family
*/
public static byte[] constructColumnFamily(
final ByteArrayId adapterId,
final ByteArrayId indexedAttributeFieldId ) {
Preconditions.checkNotNull(
adapterId,
"adapterId cannot be null");
Preconditions.checkNotNull(
indexedAttributeFieldId,
"indexedAttributeFieldId cannot be null");
return constructColumnFamily(
adapterId.getBytes(),
indexedAttributeFieldId.getBytes());
}
/**
* constructs a composite column family consisting of the adapter prepended
* to the field id of the indexed attribute
*
* @param adapterId
* @param indexedAttributeFieldId
* @return byte array for use as a column family
*/
public static byte[] constructColumnFamily(
final byte[] adapterId,
final byte[] indexedAttributeFieldId ) {
return ByteArrayUtils.combineArrays(
adapterId,
indexedAttributeFieldId);
}
/**
* constructs a composite column qualifier consisting of partTwo appended to
* partOne
*
* @param partOne
* @param partTwo
* @return byte array for use as a column qualifier
*/
public static byte[] constructColumnQualifier(
final ByteArrayId partOne,
final ByteArrayId partTwo ) {
Preconditions.checkNotNull(
partOne,
"partOne cannot be null");
Preconditions.checkNotNull(
partTwo,
"partTwo cannot be null");
return constructColumnQualifier(
partOne.getBytes(),
partTwo.getBytes());
}
/**
* constructs a composite column qualifier consisting of partTwo appended to
* partOne
*
* @param partOne
* @param partTwo
* @return byte array for use as a column qualifier
*/
public static byte[] constructColumnQualifier(
final byte[] partOne,
final byte[] partTwo ) {
return ByteArrayUtils.combineVariableLengthArrays(
partOne,
partTwo);
}
/**
* Parses and returns the primary index row id from a composite column
* qualifier. Useful when dealing with a secondary index of type JOIN
*
* @param cq
* a composite column qualifier
* @return primary index row id
*/
public static ByteArrayId getPrimaryRowId(
final byte[] cq ) {
return new ByteArrayId(
ByteArrayUtils.splitVariableLengthArrays(
cq).getRight());
}
/**
* parses and returns the data id from a composite column qualifier. Useful
* when dealing with a secondary index of type PARTIAL or FULL
*
* @param cq
* a composite column qualifier
* @return the data id
*/
public static String getDataId(
final byte[] cq ) {
return new ByteArrayId(
ByteArrayUtils.splitVariableLengthArrays(
cq).getRight()).getString();
}
/**
* parses and returns the field id from a composite column qualiifier.
* Useful when dealing with a secondary index of type PARTIAL or FULL
*
* @param cq
* a composite column qualifier
* @return the field id
*/
public static ByteArrayId getFieldId(
final byte[] cq ) {
return new ByteArrayId(
ByteArrayUtils.splitVariableLengthArrays(
cq).getLeft());
}
/**
* parses and returns the primary index id from a composite column
* qualifier. Useful when dealing with a secondary index of type JOIN
*
* @param cq
* a composite column qualifier
* @return the primary index id
*/
public static ByteArrayId getPrimaryIndexId(
final byte[] cq ) {
return new ByteArrayId(
ByteArrayUtils.splitVariableLengthArrays(
cq).getLeft());
}
}