/*
* Copyright (c) 2016 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.impl;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.netflix.astyanax.ColumnListMutation;
import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.ColumnFamily;
import com.emc.storageos.db.client.model.DataObject;
import com.emc.storageos.db.client.model.uimodels.Order;
public class TimeSeriesDbIndex extends DbIndex<TimeSeriesIndexColumnName> {
private static final Logger _log = LoggerFactory.getLogger(TimeSeriesDbIndex.class);
TimeSeriesDbIndex(ColumnFamily<String, TimeSeriesIndexColumnName> indexCF) {
super(indexCF);
}
@Override
boolean addColumn(String recordKey, CompositeColumnName column, Object value,
String className, RowMutator mutator, Integer ttl, DataObject obj) {
if (value.toString().isEmpty()) {
_log.warn("Empty string in {} id field: {}", this.getClass().getSimpleName(), fieldName);
return false;
}
if (!(obj instanceof Order)) {
throw new RuntimeException("Can not create TimeSeriesIndex on non Order object");
}
Order order = (Order)obj;
String indexKey = order.getTenant();
ColumnListMutation<TimeSeriesIndexColumnName> indexColList = mutator.getIndexColumnList(indexCF, indexKey);
TimeSeriesIndexColumnName indexEntry = new TimeSeriesIndexColumnName(className, recordKey, column.getTimeUUID());
ColumnValue.setColumn(indexColList, indexEntry, null, ttl);
return true;
}
@Override
boolean removeColumn(String recordKey, Column<CompositeColumnName> column,
String className, RowMutator mutator,
Map<String, List<Column<CompositeColumnName>>> fieldColumnMap) {
UUID uuid = column.getName().getTimeUUID();
if (!className.equals(Order.class.getSimpleName())) {
throw new RuntimeException("Can not remove TimeSeriesIndex on non Order object");
}
List<Column<CompositeColumnName>> value = fieldColumnMap.get("tenant");
Column<CompositeColumnName> tenantCol = value.get(0);
String tid = tenantCol.getStringValue();
ColumnListMutation<TimeSeriesIndexColumnName> indexColList = mutator.getIndexColumnList(indexCF, tid);
TimeSeriesIndexColumnName col = new TimeSeriesIndexColumnName(className, recordKey, uuid);
indexColList.deleteColumn(col);
return true;
}
@Override
public String toString() {
StringBuilder builder = new StringBuilder(this.getClass().getCanonicalName());
builder.append("\t");
builder.append(super.toString());
builder.append("\n");
return builder.toString();
}
}