package org.deeplearning4j.streaming.routes;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.camel.CamelContext;
import org.apache.camel.Processor;
import org.apache.camel.builder.RouteBuilder;
/**
* A Camel Java DSL Router
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CamelKafkaRouteBuilder extends RouteBuilder {
private String topicName;
private String kafkaBrokerList;
private String writableConverter = "org.datavec.api.io.converters.SelfWritableConverter";
private String datavecMarshaller = "org.datavec.camel.component.csv.marshaller.ListStringInputMarshaller";
private String inputUri;
private String inputFormat;
private Processor processor;
private String dataTypeUnMarshal;
private String zooKeeperHost = "localhost";
private int zooKeeperPort = 2181;
/**
* Let's configure the Camel routing rules using Java code...
*/
@Override
public void configure() {
from(inputUri).unmarshal(dataTypeUnMarshal)
.to(String.format("datavec://%s?inputMarshaller=%s&writableConverter=%s", inputFormat,
datavecMarshaller, writableConverter))
.process(processor).to(String.format("kafka:%s?topic=%s", kafkaBrokerList, topicName,
zooKeeperHost, zooKeeperPort));
}
public void setContext(CamelContext camelContext) {
super.setContext(camelContext);
}
public static class Builder {
private String writableConverter = "org.datavec.api.io.converters.SelfWritableConverter";
private String datavecMarshaller = "org.datavec.camel.component.csv.marshaller.ListStringInputMarshaller";
private String inputUri;
private String topicName;
private String kafkaBrokerList = "localhost:9092";
private CamelContext camelContext;
private String inputFormat;
private Processor processor;
private String dataTypeUnMarshal;
private String zooKeeperHost = "localhost";
private int zooKeeperPort = 2181;
public Builder zooKeeperHost(String zooKeeperHost) {
this.zooKeeperHost = zooKeeperHost;
return this;
}
public Builder zooKeeperPort(int zooKeeperPort) {
this.zooKeeperPort = zooKeeperPort;
return this;
}
public Builder processor(Processor processor) {
this.processor = processor;
return this;
}
public Builder kafkaBrokerList(String kafkaBrokerList) {
this.kafkaBrokerList = kafkaBrokerList;
return this;
}
public Builder inputFormat(String inputFormat) {
this.inputFormat = inputFormat;
return this;
}
public Builder camelContext(CamelContext camelContext) {
this.camelContext = camelContext;
return this;
}
public Builder inputUri(String inputUri) {
this.inputUri = inputUri;
return this;
}
public Builder writableConverter(String writableConverter) {
this.writableConverter = writableConverter;
return this;
}
public Builder datavecMarshaller(String datavecMarshaller) {
this.datavecMarshaller = datavecMarshaller;
return this;
}
public Builder dataTypeUnMarshal(String dataTypeUnMarshal) {
this.dataTypeUnMarshal = dataTypeUnMarshal;
return this;
}
public Builder topicName(String topicName) {
this.topicName = topicName;
return this;
}
private void assertStringNotNUllOrEmpty(String value, String name) {
if (value == null || value.isEmpty())
throw new IllegalStateException(String.format("Please define a %s", name));
}
public CamelKafkaRouteBuilder build() {
CamelKafkaRouteBuilder routeBuilder;
assertStringNotNUllOrEmpty(inputUri, "input uri");
assertStringNotNUllOrEmpty(topicName, "topic name");
assertStringNotNUllOrEmpty(kafkaBrokerList, "kafka broker");
assertStringNotNUllOrEmpty(inputFormat, "input format");
routeBuilder = new CamelKafkaRouteBuilder(topicName, kafkaBrokerList, writableConverter, datavecMarshaller,
inputUri, inputFormat, processor, dataTypeUnMarshal, zooKeeperHost, zooKeeperPort);
if (camelContext != null)
routeBuilder.setContext(camelContext);
return routeBuilder;
}
}
}