package com.github.bjuvensjo.rsimulator.jms;
import com.google.inject.Guice;
import com.google.inject.Inject;
import com.google.inject.Injector;
import org.apache.camel.builder.RouteBuilder;
import org.apache.camel.model.RouteDefinition;
import com.github.bjuvensjo.rsimulator.core.Simulator;
import com.github.bjuvensjo.rsimulator.core.SimulatorResponse;
import com.github.bjuvensjo.rsimulator.core.config.CoreModule;
import com.github.bjuvensjo.rsimulator.jms.config.GlobalConfig;
import com.github.bjuvensjo.rsimulator.jms.config.JmsModule;
import java.util.Optional;
/**
* JmsSimulator.
*
* @author Magnus Bjuvensjö
*/
public class JmsSimulator extends RouteBuilder {
private static final String className = JmsSimulator.class.getName();
private String jms;
private String queue;
private String replyTo;
private String simulatorContentType;
private Decoder decoder;
private Encoder encoder;
private int concurrentConsumers;
private int maxConcurrentConsumers;
private int receiveTimeout;
@Inject
private Simulator simulator;
public JmsSimulator() {
Injector injector = Guice.createInjector(new CoreModule(), new JmsModule());
injector.injectMembers(this);
}
@Override
public void configure() throws Exception {
RouteDefinition definition = from(new StringBuilder()
.append(jms)
.append(":queue:").append(queue)
.append("?replyTo=").append(replyTo)
.append("&useMessageIDAsCorrelationID=true")
.append("&concurrentConsumers=").append(concurrentConsumers)
.append("&maxConcurrentConsumers=").append(maxConcurrentConsumers)
.append("&receiveTimeout=").append(receiveTimeout)
.toString());
definition.to("log:" + className + "?showAll=true&multiline=true");
if (decoder != null) {
definition.bean(decoder);
}
definition.process(exchange -> {
String request = exchange.getIn().getBody(String.class);
Optional<SimulatorResponse> simulatorResponseOptional = simulator.service(GlobalConfig.rootPath, "", request, simulatorContentType);
String responseBody = simulatorResponseOptional.map(SimulatorResponse::getResponse).orElse("No simulatorResponse found!");
exchange.getIn().setBody(responseBody);
});
if (encoder != null) {
definition.bean(encoder);
}
definition.to("log:" + className + "?showAll=true&multiline=true");
}
public void setJms(String jms) {
this.jms = jms;
}
public void setQueue(String queue) {
this.queue = queue;
}
public void setReplyTo(String replyTo) {
this.replyTo = replyTo;
}
public void setSimulatorContentType(String simulatorContentType) {
this.simulatorContentType = simulatorContentType;
}
public void setDecoder(Decoder decoder) {
this.decoder = decoder;
}
public void setEncoder(Encoder encoder) {
this.encoder = encoder;
}
public void setConcurrentConsumers(int concurrentConsumers) {
this.concurrentConsumers = concurrentConsumers;
}
public void setMaxConcurrentConsumers(int maxConcurrentConsumers) {
this.maxConcurrentConsumers = maxConcurrentConsumers;
}
public void setReceiveTimeout(int receiveTimeout) {
this.receiveTimeout = receiveTimeout;
}
}