package main.java.bolts; import static main.java.utils.constants.WorkberchConstants.XML_EXT; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import main.java.utils.WorkberchTuple; import main.java.utils.redis.RedisHandeler; import org.apache.commons.io.FileUtils; import backtype.storm.topology.BasicOutputCollector; import com.google.common.base.Throwables; public class OutputBolt extends WorkberchOrderBolt { private static final long serialVersionUID = 1L; private final List<WorkberchTuple> tuplesToWrite = new ArrayList<WorkberchTuple>(); private final String outputPath; public OutputBolt(final String guid, final Boolean ordered, final String outputPath) { super(guid, new ArrayList<String>(), ordered); this.outputPath = outputPath; try { FileUtils.deleteDirectory(new File(this.outputPath)); FileUtils.forceMkdir(new File(this.outputPath)); } catch (final IOException e) { Throwables.propagate(e); } RedisHandeler.addOutput(guid, getBoltId()); } @Override public void executeOrdered(final WorkberchTuple input, final BasicOutputCollector collector, final boolean lastValues, final String uuid) { tuplesToWrite.add(input); if (lastValues) { final File file = new File(outputPath + getBoltId() + XML_EXT); try { if (!file.exists()) { file.createNewFile(); } final PrintWriter bufferWritter = new PrintWriter(new BufferedWriter(new FileWriter(file, true))); for (final WorkberchTuple inputToWrite : tuplesToWrite) { for (final String field : inputToWrite.getFields()) { bufferWritter.println("Valor " + field + " - " + inputToWrite.getValues().get(field)); } } bufferWritter.close(); RedisHandeler.setStateFinished(getBoltId()); RedisHandeler.addOutputFinished(getGuid(), getBoltId()); } catch (final IOException e) { Throwables.propagate(e); } } } }