package com.zillabyte.motherbrain.flow.operations.decorators;
import java.util.Collection;
import java.util.Set;
import net.sf.json.JSONObject;
import com.google.monitoring.runtime.instrumentation.common.com.google.common.collect.Sets;
import com.zillabyte.motherbrain.flow.Fields;
import com.zillabyte.motherbrain.flow.MapTuple;
import com.zillabyte.motherbrain.flow.operations.Operation;
public class RetainFields implements EmitDecorator {
private static final long serialVersionUID = 8968580455032090047L;
private Fields _retainFields;
private Operation _operation;
public RetainFields(Collection<String> fields) {
this(new Fields(fields));
}
public RetainFields(Fields fields) {
_retainFields = fields;
}
public RetainFields(JSONObject node) {
this(node.getJSONArray("retain"));
}
@Override
public MapTuple execute(MapTuple t) {
Set<String> keys = t.values().keySet();
for(String field : Sets.newHashSet(keys)) {
if (_retainFields.contains(field) == false) {
keys.remove(field);
}
}
return t;
}
@Override
public Operation getOperation() {
return _operation;
}
@Override
public void setOperation(Operation o) {
_operation = o;
}
}