<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one or more
  ~ contributor license agreements.  See the NOTICE file distributed with
  ~ this work for additional information regarding copyright ownership.
  ~ The ASF licenses this file to You under the Apache License, Version 2.0
  ~ (the "License"); you may not use this file except in compliance with
  ~ the License.  You may obtain a copy of the License at
  ~
  ~      http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an "AS IS" BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<blueprint xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
           xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.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">

    <cm:property-placeholder persistent-id="org.apache.unomi.persistence.elasticsearch"
                             update-strategy="reload" placeholder-prefix="${es.">
        <cm:default-properties>
            <cm:property name="cluster.name" value="contextElasticSearch"/>
            <cm:property name="elasticSearchAddresses" value="localhost:9300"/>
            <cm:property name="index.name" value="context"/>
            <cm:property name="numberOfShards" value="5"/>
            <cm:property name="numberOfReplicas" value="0"/>
            <cm:property name="monthlyIndex.numberOfShards" value="3"/>
            <cm:property name="monthlyIndex.numberOfReplicas" value="0"/>
            <cm:property name="defaultQueryLimit" value="10"/>

            <cm:property name="bulkProcessor.concurrentRequests" value="1" />
            <cm:property name="bulkProcessor.bulkActions" value="1000" />
            <cm:property name="bulkProcessor.bulkSize" value="5MB" />
            <cm:property name="bulkProcessor.flushInterval" value="5s" />
            <cm:property name="bulkProcessor.backoffPolicy" value="exponential" />

            <cm:property name="minimalElasticSearchVersion" value="5.0.0" />
            <cm:property name="maximalElasticSearchVersion" value="5.7.0" />

            <cm:property name="aggregateQueryBucketSize" value="5000" />

            <cm:property name="transportClientClassName" value="" />
            <cm:property name="transportClientJarDirectory" value="" />
            <cm:property name="transportClientProperties" value="" />

            <cm:property name="itemClassesToCache" value="" />
            <cm:property name="useBatchingForSave" value="false" />

        </cm:default-properties>
    </cm:property-placeholder>

    <reference id="metricsService" interface="org.apache.unomi.metrics.MetricsService" />
    <reference id="hazelcastInstance" interface="com.hazelcast.core.HazelcastInstance" />

    <service id="elasticSearchPersistenceService" ref="elasticSearchPersistenceServiceImpl">
        <interfaces>
            <value>org.apache.unomi.persistence.spi.PersistenceService</value>
            <value>org.osgi.framework.SynchronousBundleListener</value>
        </interfaces>
    </service>

    <bean id="conditionESQueryBuilderDispatcher"
          class="org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilderDispatcher">
    </bean>

    <bean id="conditionEvaluatorDispatcherImpl"
          class="org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluatorDispatcher">
        <property name="metricsService" ref="metricsService" />
    </bean>

    <bean id="elasticSearchPersistenceServiceImpl"
          class="org.apache.unomi.persistence.elasticsearch.ElasticSearchPersistenceServiceImpl"
          init-method="start"
          destroy-method="stop">
        <property name="bundleContext" ref="blueprintBundleContext"/>
        <property name="conditionEvaluatorDispatcher" ref="conditionEvaluatorDispatcherImpl"/>
        <property name="conditionESQueryBuilderDispatcher" ref="conditionESQueryBuilderDispatcher"/>
        <property name="clusterName" value="${es.cluster.name}"/>
        <property name="indexName" value="${es.index.name}"/>
        <property name="monthlyIndexNumberOfShards" value="${es.monthlyIndex.numberOfShards}"/>
        <property name="monthlyIndexNumberOfReplicas" value="${es.monthlyIndex.numberOfReplicas}"/>
        <property name="numberOfShards" value="${es.numberOfShards}"/>
        <property name="numberOfReplicas" value="${es.numberOfReplicas}"/>
        <property name="elasticSearchAddresses" value="${es.elasticSearchAddresses}"/>
        <property name="defaultQueryLimit" value="${es.defaultQueryLimit}"/>
        <property name="itemsMonthlyIndexed">
            <list>
                <value>event</value>
                <value>session</value>
            </list>
        </property>
        <property name="routingByType">
            <map>
            </map>
        </property>
        <property name="indexNames">
            <map>
                <entry key="geonameEntry" value="geonames"/>
            </map>
        </property>
        <property name="bulkProcessorConcurrentRequests" value="${es.bulkProcessor.concurrentRequests}" />
        <property name="bulkProcessorBulkActions" value="${es.bulkProcessor.bulkActions}" />
        <property name="bulkProcessorBulkSize" value="${es.bulkProcessor.bulkSize}" />
        <property name="bulkProcessorFlushInterval" value="${es.bulkProcessor.flushInterval}" />
        <property name="bulkProcessorBackoffPolicy" value="${es.bulkProcessor.backoffPolicy}" />

        <property name="minimalElasticSearchVersion" value="${es.minimalElasticSearchVersion}" />
        <property name="maximalElasticSearchVersion" value="${es.maximalElasticSearchVersion}" />

        <property name="aggregateQueryBucketSize" value="${es.aggregateQueryBucketSize}" />
        <property name="transportClientClassName" value="${es.transportClientClassName}" />
        <property name="transportClientJarDirectory" value="${es.transportClientJarDirectory}" />
        <property name="transportClientProperties" value="${es.transportClientProperties}" />

        <property name="metricsService" ref="metricsService" />
        <property name="hazelcastInstance" ref="hazelcastInstance" />
        <property name="itemClassesToCache" value="${es.itemClassesToCache}" />
        <property name="useBatchingForSave" value="${es.useBatchingForSave}" />
    </bean>

    <!-- We use a listener here because using the list directly for listening to proxies coming from the same bundle didn't seem to work -->
    <reference-list id="conditionEvaluators"
                    interface="org.apache.unomi.persistence.elasticsearch.conditions.ConditionEvaluator"
                    availability="optional">
        <reference-listener
                bind-method="bindConditionEvaluator" unbind-method="unbindConditionEvaluator" ref="elasticSearchPersistenceServiceImpl"/>
    </reference-list>

    <reference-list id="conditionESQueryBuilders"
                    interface="org.apache.unomi.persistence.elasticsearch.conditions.ConditionESQueryBuilder"
        availability="optional">
        <reference-listener
                bind-method="bindConditionESQueryBuilder" unbind-method="unbindConditionESQueryBuilder" ref="elasticSearchPersistenceServiceImpl"/>
    </reference-list>

</blueprint>
