package storm.kafka.trident.state;
import org.apache.commons.collections.MapUtils;
import storm.trident.state.TransactionalValue;
import storm.trident.state.map.IBackingMap;
import storm.trident.tuple.TridentTuple;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class HazelCastState<T> implements IBackingMap<TransactionalValue<Long>> {
private HazelCastHandler handler;
public HazelCastState(HazelCastHandler handler) {
this.handler = handler;
}
public void addKeyValue(String key, Long value) {
Map<String, Long> state = handler.getState();
state.put(key, value);
}
@Override
public String toString() {
return handler.getState().toString();
}
@Override
public void multiPut(List<List<Object>> keys, List<TransactionalValue<Long>> vals) {
for (int i = 0; i < keys.size(); i++) {
TridentTuple key = (TridentTuple) keys.get(i);
Long value = vals.get(i).getVal();
addKeyValue(key.getString(0), value);
//System.out.println("[" + key.getString(0) + " - " + value + "]");
}
}
public List multiGet(List<List<Object>> keys) {
List<TransactionalValue<Long>> result = new ArrayList<TransactionalValue<Long>>(keys.size());
for (int i = 0; i < keys.size(); i++) {
TridentTuple key = (TridentTuple) keys.get(i);
result.add(new TransactionalValue<Long>(0L, MapUtils.getLong(handler.getState(), key.getString(0), 0L)));
}
return result;
}
}