package main.java.parser.model; import java.util.ArrayList; import java.util.List; import main.java.bolts.WorkberchNameMaperBolt; import main.java.bolts.WorkberchNameMaperOrderedBolt; import main.java.utils.constants.WorkberchConstants; import backtype.storm.topology.BoltDeclarer; import backtype.storm.topology.TopologyBuilder; public class WorkberchIterStgyLink implements WorkberchIterStgy { private static final long serialVersionUID = 2052236882194623699L; private WorkberchLink link; private static String MAPPER_PREFIX = "NAME_MAPPER_"; private String processorName; public WorkberchLink getLink() { return link; } public void setLink(final WorkberchLink link) { this.link = link; } @Override public void setProcessorName(final String processorName) { this.processorName = processorName; } @Override public String getProcessorName() { return processorName; } @Override public String getBoltName() { final String mapperName = MAPPER_PREFIX + processorName + WorkberchConstants.NAME_DELIMITER + link.getStormSourceField(); return mapperName; } @Override public BoltDeclarer addStrategy2Topology(final String guid, final TopologyBuilder tBuilder, final int parallelism) { BoltDeclarer ret = null; final List<String> inputs = new ArrayList<String>(); inputs.add(link.getStormDestField()); if (link.getSourceDepth() > link.getDestDepth()) { final WorkberchNameMaperOrderedBolt mapper = new WorkberchNameMaperOrderedBolt(guid, inputs); mapper.addLink(link.getStormSourceField(), link.getStormDestField()); ret = tBuilder.setBolt(getBoltName(), mapper, 1).shuffleGrouping(link.getSourceNode()); } else { final WorkberchNameMaperBolt mapper = new WorkberchNameMaperBolt(guid, inputs); mapper.addLink(link.getStormSourceField(), link.getStormDestField()); ret = tBuilder.setBolt(getBoltName(), mapper, parallelism).shuffleGrouping(link.getSourceNode()); } return ret; } @Override public List<String> getOutputFields() { final List<String> ret = new ArrayList<String>(); ret.add(link.getStormDestField()); return ret; } }