<?xml version="1.0" encoding="UTF-8"?>
<beans
        xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:util="http://www.springframework.org/schema/util"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
                           http://www.springframework.org/schema/beans/spring-beans.xsd
                           http://www.springframework.org/schema/util
                           http://www.springframework.org/schema/util/spring-util.xsd">

   <bean id="placeholderConfig"
         class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
      <property name="location" value="file:${PROPERTY_FILE_PATH}" />
   </bean>

   <bean id="cache-template" class="org.apache.ignite.configuration.CacheConfiguration" abstract="true">
      <property name="name" value="EVENT*" />
      <property name="rebalanceBatchSize" value="${rebalanceBatchSize}" />
      <property name="rebalanceThrottle" value="${rebalanceThrottle}" />
      <property name="writeSynchronizationMode" value="PRIMARY_SYNC" />
      <property name="affinity">
         <bean class="org.apache.ignite.cache.affinity.rendezvous.RendezvousAffinityFunction">
            <property name="partitions" value="128" />
            <property name="excludeNeighbors" value="true" />
         </bean>
      </property>
   </bean>
   <bean class="org.apache.ignite.configuration.IgniteConfiguration">
      <property name="clientMode" value="true" />
      <property name="igniteInstanceName" value="EVENT_PROCESSING_DATAGRID" />
      <property name="metricsLogFrequency" value="0" />
      <property name="peerClassLoadingEnabled" value="true" />
      <property name="failureDetectionTimeout" value="120000" />
      <property name="clientFailureDetectionTimeout" value="120000" />
      <property name="networkTimeout" value="120000" />
      <property name="transactionConfiguration">
         <bean class="org.apache.ignite.configuration.TransactionConfiguration">
            <property name="TxTimeoutOnPartitionMapExchange" value="60000"/>
         </bean>
      </property>
      <property name="discoverySpi">
         <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
            <property name="ipFinder">
               <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
                  <property name="socketTimeout" value="30000"/>
                  <property name="addresses">
                     <bean class="org.springframework.util.StringUtils" factory-method="commaDelimitedListToSet">
                        <constructor-arg type="java.lang.String" value="${nodeIpAddresses}" />
                     </bean>
                  </property>
               </bean>
            </property>
         </bean>
      </property>
      <property name="cacheConfiguration">
         <list>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventCustomerFacingServiceCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.CustomerFacingServiceEntity" />
                        <property name="tableName" value="EVENT_CUSTOMER_FACING_SERVICE_CACHE" />
                        <property name="keyFieldName" value="entityId" />
                        <property name="keyFields">
                           <list>
                              <value>entityId</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="entityId" value="java.lang.String" />
                              <entry key="serviceId" value="java.lang.String" />
                              <entry key="chargingId" value="java.lang.String" />
                              <entry key="serviceType" value="java.lang.String" />
                              <entry key="timeCreated" value="java.lang.String" />
                              <entry key="timeLastModifed" value="java.lang.String" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="entityId" value="ENTITY_ID" />
                              <entry key="serviceId" value="SERVICE_ID" />
                              <entry key="chargingId" value="CHARGING_ID" />
                              <entry key="serviceType" value="SERVICE_TYPE" />
                              <entry key="timeCreated" value="TIME_CREATED" />
                              <entry key="timeLastModifed" value="TIME_LAST_MODIFIED" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventServicePlanCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.ServicePlanEntity" />
                        <property name="tableName" value="EVENT_SERVICE_PLAN_ENTITY_CACHE" />
                        <property name="keyFieldName" value="entityId" />
                        <property name="keyFields">
                           <list>
                              <value>entityId</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="entityId" value="java.lang.String" />
                              <entry key="customerId" value="java.lang.String" />
                              <entry key="planId" value="java.lang.String" />
                              <entry key="planType" value="java.lang.String" />
                              <entry key="planState" value="java.lang.String" />
                              <entry key="planStatus" value="java.lang.String" />
                              <entry key="planExpiryDate" value="java.lang.String" />
                              <entry key="timeCreated" value="java.lang.String" />
                              <entry key="timeLastModifed" value="java.lang.String" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="entityId" value="ENTITY_ID" />
                              <entry key="customerId" value="CUSTOMER_ID" />
                              <entry key="planId" value="PLAN_ID" />
                              <entry key="planType" value="PLAN_TYPE" />
                              <entry key="planState" value="PLAN_STATE" />
                              <entry key="planStatus" value="PLAN_STATUS" />
                              <entry key="planExpiryDate" value="PLAN_EXPIRY_DATE" />
                              <entry key="timeCreated" value="TIME_CREATED" />
                              <entry key="timeLastModifed" value="TIME_LAST_MODIFIED" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventServiceCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.ServiceEntity" />
                        <property name="tableName" value="EVENT_SERVICE_CACHE" />
                        <property name="keyFieldName" value="entityId" />
                        <property name="keyFields">
                           <list>
                              <value>entityId</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="entityId" value="java.lang.String" />
                              <entry key="serviceId" value="java.lang.String" />
                              <entry key="customerId" value="java.lang.String" />
                              <entry key="accountId" value="java.lang.String" />
                              <entry key="serviceState" value="java.lang.String" />
                              <entry key="productType" value="java.lang.String" />
                              <entry key="serviceCharingIds" value="java.lang.String" />
                              <entry key="timeCreated" value="java.lang.String" />
                              <entry key="timeLastModifed" value="java.lang.String" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="entityId" value="ENTITY_ID" />
                              <entry key="serviceId" value="SERVICE_ID" />
                              <entry key="customerId" value="CUSTOMER_ID" />
                              <entry key="accountId" value="ACCOUNT_ID" />
                              <entry key="serviceState" value="SERVICE_STATE" />
                              <entry key="productType" value="PRODUCT_TYPE" />
                              <entry key="serviceCharingIds" value="SERVICE_CHARGING_ID" />
                              <entry key="timeCreated" value="TIME_CREATED" />
                              <entry key="timeLastModifed" value="TIME_LAST_MODIFIED" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventCustomerCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.CustomerEntity" />
                        <property name="tableName" value="EVENT_CUSTOMER_CACHE" />
                        <property name="keyFieldName" value="entityId" />
                        <property name="keyFields">
                           <list>
                              <value>entityId</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="entityId" value="java.lang.String" />
                              <entry key="jioRoute" value="java.lang.String" />
                              <entry key="circleId" value="java.lang.String" />
                              <entry key="customerId" value="java.lang.String" />
                              <entry key="customerState" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.CustomerState" />
                              <entry key="accountId" value="java.lang.String" />
                              <entry key="parentServiceId" value="java.lang.String" />
                              <entry key="subscriptionType" value="java.lang.String" />
                              <entry key="productOfferingId" value="java.lang.String" />
                              <entry key="rechargePlanId" value="java.lang.String" />
                              <entry key="rechargePlanState" value="java.lang.String" />
                              <entry key="rechargePlanExpiryDate" value="java.lang.String" />
                              <entry key="primePlanExpiryDate" value="java.lang.String" />
                              <entry key="autoRechargeMandate" value="java.lang.Boolean" />
                              <entry key="plansInQueue" value="java.lang.Integer" />
                              <entry key="linkedCustomer" value="java.lang.Boolean" />
                              <entry key="listOfServiceIds" value="java.lang.String" />
                              <entry key="timeCreated" value="java.lang.String" />
                              <entry key="timeLastModifed" value="java.lang.String" />
                              <entry key="customerName" value="java.lang.String" />
                              <entry key="lastRechargeDate" value="java.lang.String" />
                              <entry key="serviceType" value="java.lang.String" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="entityId" value="ENTITY_ID" />
                              <entry key="jioRoute" value="JIO_ROUTE" />
                              <entry key="circleId" value="CIRCLE_ID" />
                              <entry key="customerId" value="CUSTOMER_ID" />
                              <entry key="customerState" value="CUSTOMER_STATE" />
                              <entry key="accountId" value="ACCOUNT_ID" />
                              <entry key="parentServiceId" value="PARENT_SERVICE_ID" />
                              <entry key="subscriptionType" value="SUBSCRIPTION_TYPE" />
                              <entry key="productOfferingId" value="PRODUCT_OFFERING_ID" />
                              <entry key="rechargePlanId" value="PLAN_ID" />
                              <entry key="rechargePlanState" value="PLAN_STATE" />
                              <entry key="rechargePlanExpiryDate" value="PLAN_EXPIRY_DATE" />
                              <entry key="primePlanExpiryDate" value="PRIME_MEMBER_EXPIRY_DATE" />
                              <entry key="autoRechargeMandate" value="AUTO_RECHARGE_MANDATE" />
                              <entry key="plansInQueue" value="PLAN_IN_QUEUE" />
                              <entry key="linkedCustomer" value="HAS_CUSTOMER_ASSOCIATION" />
                              <entry key="listOfServiceIds" value="SERVICE_ID" />
                              <entry key="timeCreated" value="TIME_CREATED" />
                              <entry key="timeLastModifed" value="TIME_LAST_MODIFIED" />
                              <entry key="customerName" value="CUSTOMER_NAME" />
                              <entry key="lastRechargeDate" value="LAST_RECHARGE_DATE" />
                              <entry key="serviceType" value="SERVICE_TYPE" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventCustomerAssociationCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.CustomerAssociationEntity" />
                        <property name="tableName" value="EVENT_CUSTOMER_ASSOCIATION_ENTITY" />
                        <property name="keyFieldName" value="entityId" />
                        <property name="keyFields">
                           <list>
                              <value>entityId</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="entityId" value="java.lang.String" />
                              <entry key="primaryCustomerId" value="java.lang.String" />
                              <entry key="linkedCustomerId" value="java.lang.String" />
                              <entry key="timeCreated" value="java.lang.String" />
                              <entry key="timeLastModifed" value="java.lang.String" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="entityId" value="ENTITY_ID" />
                              <entry key="primaryCustomerId" value="CUSTOMER_ID" />
                              <entry key="linkedCustomerId" value="LINKED_CUSTOMER_ID" />
                              <entry key="timeCreated" value="TIME_CREATED" />
                              <entry key="timeLastModifed" value="TIME_LAST_MODIFIED" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventProductCatalogCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.product.catalog.persistent.datamodel.PlanOfferingEntity" />
                        <property name="tableName" value="EVENT_PRODUCT_CATALOG_CACHE" />
                        <property name="keyFieldName" value="id" />
                        <property name="keyFields">
                           <list>
                              <value>id</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="id" value="java.lang.String" />
                              <entry key="name" value="java.lang.String" />
                              <entry key="description" value="java.lang.String" />
                              <entry key="startDate" value="java.lang.String" />
                              <entry key="endDate" value="java.lang.String" />
                              <entry key="type" value="java.lang.String" />
                              <entry key="subType" value="java.lang.String" />
                              <entry key="subSubType" value="java.lang.String" />
                              <entry key="billingType" value="java.lang.String" />
                              <entry key="timeId" value="java.lang.String" />
                              <entry key="stackedQueued" value="java.lang.String" />
                              <entry key="unitOfMeasure" value="java.lang.String" />
                              <entry key="validity" value="java.lang.String" />
                              <entry key="childPlanOfferings" value="java.util.HashSet" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="id" value="ID" />
                              <entry key="name" value="NAME" />
                              <entry key="description" value="DESCRIPTION" />
                              <entry key="startDate" value="START_DATE" />
                              <entry key="endDate" value="END_DATE" />
                              <entry key="type" value="TYPE" />
                              <entry key="subType" value="SUB_TYPE" />
                              <entry key="subSubType" value="SUB_SUB_TYPE" />
                              <entry key="billingType" value="BILLING_TYPE" />
                              <entry key="timeId" value="TIME_ID" />
                              <entry key="stackedQueued" value="STACKED_QUEUED" />
                              <entry key="unitOfMeasure" value="UNIT_OF_MEASURE" />
                              <entry key="validity" value="VALIDITY" />
                              <entry key="childPlanOfferings" value="CHILD_PLAN_OFFERINGS" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventProductValidityCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true" />
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.product.catalog.persistent.datamodel.PlanValidityEntity" />
                        <property name="tableName" value="EVENT_PRODUCT_CATALOG_VALIDITY_CACHE" />
                        <property name="keyFieldName" value="id" />
                        <property name="keyFields">
                           <list>
                              <value>id</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="id" value="java.lang.String" />
                              <entry key="name" value="java.lang.String" />
                              <entry key="description" value="java.lang.String" />
                              <entry key="startDate" value="java.lang.String" />
                              <entry key="endDate" value="java.lang.String" />
                              <entry key="timeId" value="java.lang.String" />
                              <entry key="unitOfMeasure" value="java.lang.String" />
                              <entry key="validity" value="java.lang.String" />
                              <entry key="valueType" value="java.lang.String" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="id" value="ID" />
                              <entry key="name" value="NAME" />
                              <entry key="description" value="DESCRIPTION" />
                              <entry key="startDate" value="START_DATE" />
                              <entry key="endDate" value="END_DATE" />
                              <entry key="timeId" value="TIME_ID" />
                              <entry key="unitOfMeasure" value="UNIT_OF_MEASURE" />
                              <entry key="validity" value="VALIDITY" />
                              <entry key="valueType" value="VALUE_TYPE" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
            <bean class="org.apache.ignite.configuration.CacheConfiguration" parent="cache-template">
               <property name="name" value="EventReverseAssociationCache" />
               <property name="cacheMode" value="PARTITIONED" />
               <property name="atomicityMode" value="TRANSACTIONAL" />
               <property name="backups" value="1" />
               <property name="statisticsEnabled" value="true"/>
               <property name="queryEntities">
                  <list>
                     <bean class="org.apache.ignite.cache.QueryEntity">
                        <property name="keyType" value="java.lang.String" />
                        <property name="valueType" value="com.jio.digitalapi.eventprocessing.persistent.datamodel.ReverseAssociationEntity" />
                        <property name="tableName" value="REVERSE_ASSOCIATION_CACHE" />
                        <property name="keyFieldName" value="customerId" />
                        <property name="keyFields">
                           <list>
                              <value>customerId</value>
                           </list>
                        </property>
                        <property name="fields">
                           <map>
                              <entry key="customerId" value="java.lang.String" />
                              <entry key="associatedWith" value="java.util.HashSet" />
                           </map>
                        </property>
                        <property name="aliases">
                           <map>
                              <entry key="customerId" value="CUSTOMER_ID" />
                              <entry key="associatedWith" value="ASSOCIATED_WITH" />
                           </map>
                        </property>
                     </bean>
                  </list>
               </property>
            </bean>
         </list>
      </property>
   </bean>
</beans>
