package uk.nhs.kch.rassyeyanie.framework.route;
import org.apache.camel.ExchangePattern;
import org.apache.camel.Processor;
import org.apache.camel.component.hl7.HL7Constants;
import org.apache.camel.model.RouteDefinition;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import uk.nhs.kch.rassyeyanie.framework.processor.ZrefDataFormat;
public class GenericSender
extends AbstractConsumer
{
private ZrefDataFormat postFormatter;
private String receiverEndpoint;
private final Logger logger;
private int delay;
private SenderResponseProcessorInterface senderResponseProcessor;
public GenericSender()
{
this.logger = LoggerFactory.getLogger(this.getClass());
}
public String getReceiverEndpoint()
{
return this.receiverEndpoint;
}
public void setReceiverEndpoint(String receiverEndpoint)
{
this.receiverEndpoint = receiverEndpoint;
}
public int getDelay()
{
return this.delay;
}
public void setDelay(int delay)
{
this.delay = delay;
}
@Override
public void configure()
{
final String routeName = this.getRouteName();
String inboundQueue = this.getInboundQueue();
if (StringUtils.isEmpty(routeName)) { throw new IllegalArgumentException(
"routeName"); }
if (StringUtils.isEmpty(inboundQueue)) { throw new IllegalArgumentException(
"inboundQueue"); }
this.logger.info("Attempting to create sender route {}", routeName);
this.defineExceptionHandlers();
RouteDefinition policyDefinition = this.from(inboundQueue)
/* .transacted("PROPAGATION_REQUIRED") */.routeId(routeName);
// log out bound
policyDefinition.log(String.format(
"Processing MsgId: ${header.%s} / ${id}",
HL7Constants.HL7_MESSAGE_CONTROL));
if (!StringUtils.isEmpty(this.receiverEndpoint))
{
if (this.getPostFormatter() != null)
{
policyDefinition.marshal(this.getPostFormatter());
}
policyDefinition.log("body");
policyDefinition.to(ExchangePattern.InOut, this.receiverEndpoint);
Processor responseProcessor = this.getSenderResponseProcessor();
policyDefinition// log acknowledgement
.log("body")
.process(responseProcessor);
if (this.delay > 0)
{
policyDefinition.delay(this.getDelay()).id("delayer");
}
}
}
public ZrefDataFormat getPostFormatter()
{
return this.postFormatter;
}
@Autowired(required = false)
public void setPostFormatter(ZrefDataFormat postFormatter)
{
this.postFormatter = postFormatter;
}
public SenderResponseProcessorInterface getSenderResponseProcessor()
{
return this.senderResponseProcessor;
}
@Autowired
public
void
setSenderResponseProcessor(SenderResponseProcessorInterface senderResponseProcessor)
{
this.senderResponseProcessor = senderResponseProcessor;
}
}