<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
	xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0"
	xsi:schemaLocation="
		http://www.osgi.org/xmlns/blueprint/v1.0.0 
		http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd

		http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0
		http://aries.apache.org/schemas/blueprint-cm/blueprint-cm-1.1.0.xsd

		http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.1.0
		http://aries.apache.org/schemas/blueprint-ext/blueprint-ext-1.1.xsd
">

	<cm:property-placeholder id="syslogHandlerKafkaProperties" persistent-id="org.opennms.netmgt.syslog.handler.kafka" placeholder-prefix="$[" placeholder-suffix="]" update-strategy="none">
		<cm:default-properties>
			<cm:property name="kafkaAddress" value="127.0.0.1:9092" />
			<cm:property name="kafkatopic" value="syslog" />
			<cm:property name="includeRawMessage" value="true" />
		</cm:default-properties>
	</cm:property-placeholder>

	<bean id="partitionKeyGenerator" class="org.opennms.core.camel.RandomPartitionKeyGenerator"/>

	<bean id="syslogConnectionHandlerCamel" class="org.opennms.netmgt.syslogd.SyslogConnectionHandlerCamelImpl">
		<argument value="seda:handleMessage"/>
	</bean>

	<service interface="org.opennms.netmgt.syslogd.SyslogConnectionHandler" ref="syslogConnectionHandlerCamel"/>

	<!-- Camel Event marshalling processor -->
	<bean id="marshaller" class="org.opennms.core.camel.JaxbUtilsMarshalProcessor">
		<argument value="org.opennms.netmgt.syslogd.SyslogDTO" />
	</bean>

	<bean id="mapper" class="org.opennms.netmgt.syslogd.SyslogObjectToDTOProcessor"/>

	<!-- @see http://www.davsclaus.com/2012/06/locking-down-jmx-naming-now-easier-with.html -->
	<camelContext id="syslogdHandlerKafkaContext" managementNamePattern="#name#" xmlns="http://camel.apache.org/schema/blueprint">
		<propertyPlaceholder id="properties" location="blueprint:syslogHandlerKafkaProperties" />

		<route id="syslogMarshal">
			<from uri="seda:handleMessage?concurrentConsumers=4" />

			<setHeader headerName="includeRawMessage">
				<simple resultType="java.lang.Boolean">properties:includeRawMessage</simple>
			</setHeader>

			<!-- Marshal the message to XML -->
			<process ref="mapper"/>
			<process ref="marshaller"/>

			<to uri="seda:sendMessage"/>
		</route>

		<route id="syslogSendKafka">
			<from uri="seda:sendMessage?concurrentConsumers=4" />

			<!-- HZN-862: Use ByteArrayPartitioner instead of this key generator -->
			<setHeader headerName="kafka.PARTITION_KEY">
				<simple>${bean:partitionKeyGenerator.getPartitionKey()}</simple>
			</setHeader>

			<!-- Have to use StringEncoder because of camel bug CAMEL-8790 -->
			<to uri="kafka:{{kafkaAddress}}?topic={{kafkatopic}}&amp;serializerClass=kafka.serializer.StringEncoder"/>
		</route>
	</camelContext>

</blueprint>
