package com.alibaba.jstorm.transactional;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import backtype.storm.generated.StreamInfo;
import backtype.storm.topology.OutputFieldsDeclarer;
import backtype.storm.tuple.Fields;
import backtype.storm.utils.Utils;
public class TransactionOutputFieldsDeclarer implements OutputFieldsDeclarer {
private Map<String, StreamInfo> _fields = new HashMap<String, StreamInfo>();
public void declare(Fields fields) {
declare(false, fields);
}
public void declare(boolean direct, Fields fields) {
declareStream(Utils.DEFAULT_STREAM_ID, direct, fields);
}
public void declareStream(String streamId, Fields fields) {
declareStream(streamId, false, fields);
}
public void declareStream(String streamId, boolean direct, Fields fields) {
if (_fields.containsKey(streamId)) {
throw new IllegalArgumentException("Fields for " + streamId
+ " already set");
}
List<String> fieldList = new ArrayList<String>();
fieldList.add(TransactionCommon.BATCH_GROUP_ID_FIELD);
fieldList.addAll(fields.toList());
_fields.put(streamId, new StreamInfo(fieldList, direct));
}
public Map<String, StreamInfo> getFieldsDeclaration() {
return _fields;
}
}