/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package com.emc.storageos.db.client.util;
import com.emc.storageos.db.client.DbAggregatorItf;
import com.emc.storageos.db.client.impl.*;
import com.emc.storageos.db.client.model.DataObject;
import com.netflix.astyanax.model.Column;
import com.netflix.astyanax.model.Row;
import java.net.URISyntaxException;
import java.util.*;
import java.net.URI;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FieldInSetAggregator implements DbAggregatorItf {
private static final Logger log = LoggerFactory.getLogger(FieldInSetAggregator.class);
private ColumnField _columnField;
private String _field;
private List<URI> _list;
private Set<String> _set;
private DataObjectType _doType;
/**
* @return the aggregated value.
*/
public List<URI> getAggregate() {
return _list;
}
public String[] getAggregatedFields() {
return new String[] { _field };
}
public FieldInSetAggregator(Class<? extends DataObject> clazz, Set<String> allowedValues, String field) {
_list = new ArrayList<URI>();
_set = allowedValues;
_doType = TypeMap.getDoType(clazz);
_columnField = _doType.getColumnField(field);
_field = field;
}
@Override
public void aggregate(Row<String, CompositeColumnName> row) {
if (row.getColumns().size() == 0) {
return;
}
Column<CompositeColumnName> column = row.getColumns().iterator().next();
if (column.getName().getOne().equals(_field)) {
String value = ColumnValue.getPrimitiveColumnValue(column,
_columnField.getPropertyDescriptor()).toString();
if (_set.contains(value)) {
try {
_list.add(new URI(row.getKey()));
} catch (URISyntaxException ex) {
log.warn("URI syntax error:{}", ex);
}
}
}
}
}