package org.myeslib.cmdproducer.routes; import java.lang.reflect.Type; import lombok.AllArgsConstructor; import org.apache.camel.Exchange; import org.apache.camel.Processor; import org.apache.camel.builder.RouteBuilder; import org.apache.camel.util.toolbox.AggregationStrategies; import org.myeslib.core.Command; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @AllArgsConstructor public class CommandsDataSetsRoute extends RouteBuilder { final Gson gson; final String targetEndpoint; final Type commandType = new TypeToken<Command>() {}.getType(); final int datasetSize; final int delayBetweenDatasets; final int initialDelay; public void configure() throws Exception { fromF("dataset:createCommandDataset?initialDelay=%d", initialDelay) .routeId("dataset:createCommandsDataset") .startupOrder(1).autoStartup(true) .process(new MarshalProcessor()).to(targetEndpoint) .aggregate(constant(0), AggregationStrategies.useLatest()).completionSize(datasetSize) .log("finished") .log("will start next dataset") .to("controlbus:route?routeId=dataset:increaseCommandsDataset&action=start") .end() ; fromF("dataset:increaseCommandDataset?initialDelay=%d", delayBetweenDatasets) .routeId("dataset:increaseCommandsDataset") .startupOrder(2).autoStartup(false) .process(new MarshalProcessor()).to(targetEndpoint) .aggregate(constant(0), AggregationStrategies.useLatest()).completionSize(datasetSize) .log("finished") .log("will start next dataset") .to("controlbus:route?routeId=dataset:decreaseCommandsDataset&action=start") .end(); ; fromF("dataset:decreaseCommandDataset?initialDelay=%d", delayBetweenDatasets) .routeId("dataset:decreaseCommandsDataset") .startupOrder(3).autoStartup(false) .process(new MarshalProcessor()).to(targetEndpoint) .aggregate(constant(0), AggregationStrategies.useLatest()).completionSize(datasetSize) .log("finished") .end(); ; } class MarshalProcessor implements Processor { @Override public void process(Exchange e) throws Exception { Command c = e.getIn().getBody(Command.class); String asJson = gson.toJson(c, commandType); e.getOut().setBody(asJson); e.getOut().setHeader(Exchange.CONTENT_TYPE, "application/json"); e.getOut().setHeader(Exchange.HTTP_METHOD, constant("POST")); } } }