package edu.isi.karma.storm.function; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.json.simple.parser.ParseException; import backtype.storm.tuple.Tuple; import edu.isi.karma.util.JSONLDUtilSimple; public class JSONToMerge { protected long lastUpdateTimestamp; protected Map<String, String> jsonBySource; protected int expectedSourcesToMerge; protected List<Tuple> tuplesToAck; public JSONToMerge(int expectedSourcesToMerge) { this.tuplesToAck = new LinkedList<>(); this.expectedSourcesToMerge = expectedSourcesToMerge; this.jsonBySource = new HashMap<>(expectedSourcesToMerge); this.lastUpdateTimestamp = System.currentTimeMillis(); } public void setLastUpdateTimestamp(long lastUpdateTimestamp) { this.lastUpdateTimestamp = lastUpdateTimestamp; } public boolean isReadyToMerge() { return expectedSourcesToMerge == jsonBySource.size(); } public void addJSON(Tuple tuple, String source, String data) { tuplesToAck.add(tuple); jsonBySource.put(source, data); } public String merge() throws ParseException { return JSONLDUtilSimple.mergeJSONObjects(jsonBySource.values().iterator()).toString(); } public List<Tuple> getTuplesToAck() { return tuplesToAck; } }