java_import 'backtype.storm.testing.TestWordSpout'

require 'red_storm'

module RedStorm
  module Examples
    class ExclamationBolt2
      def prepare(conf, context, collector)
        @collector = collector
      end

      def execute(tuple)
        @collector.emit(tuple, Values.new("!#{tuple.getString(0)}!"))
        @collector.ack(tuple)
      end

      def get_component_configuration
      end

      def declare_output_fields(declarer)
        declarer.declare(Fields.new("word"))
      end
    end

    # this example topology uses the Storm TestWordSpout and our own JRuby ExclamationBolt

    class LocalExclamationTopology2
      RedStorm::Configuration.topology_class = self

      def start(base_class_path, env)
        builder = TopologyBuilder.new

        builder.setSpout('TestWordSpout', TestWordSpout.new, 2)
        builder.setBolt('ExclamationBolt21', JRubyBolt.new(base_class_path, "RedStorm::Examples::ExclamationBolt2", []), 2).shuffleGrouping('TestWordSpout')
        builder.setBolt('ExclamationBolt22', JRubyBolt.new(base_class_path, "RedStorm::Examples::ExclamationBolt2", []), 2).shuffleGrouping('ExclamationBolt21')

        conf = Backtype::Config.new
        conf.setDebug(true)

        cluster = LocalCluster.new
        cluster.submitTopology("exclamation", conf, builder.createTopology)
        sleep(5)
        cluster.killTopology("exclamation")
        cluster.shutdown
      end
    end
  end
end
