<?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:context="http://www.springframework.org/schema/context"
	   xmlns:cxf="http://cxf.apache.org/core"
	   xmlns:jaxws="http://cxf.apache.org/jaxws"
	   xmlns:p="http://http://www.springframework.org/schema/p"
	   xmlns:template="http://dnetlib.eu/springbeans/template"
	   xmlns:t="http://dnetlib.eu/springbeans/t"
	   xmlns:util="http://www.springframework.org/schema/util"

	   xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd
        http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
		http://dnetlib.eu/springbeans/template http://dnetlib.eu/springbeans/template.xsd
		http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util-4.0.xsd"
	   	default-autowire="byName">

	<alias name="indexServiceLocator" alias="service.indexServiceLocator" />
	<alias name="resultSetFactory" alias="service.resultSetFactory" />

	<alias name="${services.search.indexMode}.indexServiceLocator"  alias="search.indexServiceLocator" />
	<alias name="${services.search.indexMode}.resultSetFactory"  alias="search.resultSetFactory" />

	<!-- query rewrite rules
	<bean id="prefixRule" class="eu.dnetlib.data.search.app.plan.PrefixRule">
		<property name="name" value="query prefix rule" />
		<property name="prefix" value="(deletedbyinference=false)" />
	</bean>-->

	<!-- field rewrite rules -->
	<bean id="collectionRule" class="eu.dnetlib.data.search.app.plan.CollectionRewriteRule">
		<property name="name" value="collection expand rule" />
		<property name="fieldName" value="collection" />
		<property name="collectionLookUp" ref="collectionLookUp" />
	</bean>

	<util:list id="fieldQueryRules" value-type="java.lang.String">
		<value>deletedbyinference=false</value>
	</util:list>


    <!--bean id="blackboardHandler" class="eu.dnetlib.enabling.tools.blackboard.BlackboardHandlerImpl">
		<property name="serviceLocator" ref="cnr.uniqueServiceLocator" />
        <property name="messageFactory">
            <bean class="eu.dnetlib.miscutils.jaxb.JaxbFactory">
                <constructor-arg value="eu.dnetlib.enabling.tools.blackboard.BlackboardMessageImpl" />
            </bean>
        </property>
    </bean>
	<bean id="searchServiceBlackboardHandler" class="eu.dnetlib.data.search.app.SearchServiceBlackboardHandler" lazy-init="true">
		<property name="searchService" ref="searchService" />
		<property name="lookUpServiceServiceLocator" ref="lookupServiceLocator" />
		<property name="blackboardHandler" ref="blackboardHandler" />
		<property name="registryServiceServiceLocator" ref="registryServiceLocator"/>
	</bean-->

	<!--  the service bean -->
	<bean id="searchService"
		  class="eu.dnetlib.data.search.app.SearchServiceImpl"
		  autowire="no">
		<property name="serviceIdentity">
			<bean class="eu.dnetlib.utils.ServiceIdentityFactory"
				  factory-method="createIdentity" >
				<constructor-arg value="${services.search.serviceName}" />
			</bean>
		</property>
		<property name="mdFormat" value="${services.search.mdFormat}" />
		<property name="indexLocator" ref="search.indexServiceLocator" />
		<property name="lookUpServiceServiceLocator" ref="lookupServiceLocator" />
		<property name="rsFactory" ref="search.resultSetFactory" />
		<property name="transformerFactory" ref="transformerFactory"/>
		<!--property name="blackboardNotificationHandler" ref="searchServiceBlackboardHandler" /-->
		<!--
		<property name="queryRules">
			<list>
					<ref bean="prefixRule"/>
			</list>
		</property>
		-->
		<property name="fieldRules">
			<list>
				<ref bean="collectionRule" />
			</list>
		</property>
		<property name="fieldQueryRules" ref="fieldQueryRules"/>
	</bean>

	<!-- The web service bean -->
	<bean id="searchWebServiceImpl"
		  class="eu.dnetlib.clients.data.search.ws.SearchWebServiceImpl">
		<property name="service" ref="searchService" />
	</bean>

	<!-- Service endpoint -->
	<jaxws:endpoint
			id="searchWebService"
			implementor="#searchWebServiceImpl"
			implementorClass="eu.dnetlib.clients.data.search.ws.SearchWebService"
			address="/searchWebService"/>

	<template:instance name="nkua.serviceRegistrationManager"
					   t:name="searchServiceRegistrationManager"
					   t:service="searchService"
					   t:endpoint="searchWebService"
					   t:serviceRegistrator="searchServiceRegistrator"/>

	<bean id="searchServiceRegistrator" parent="serviceRegistrator">
		<property name="serviceProperties">
			<map>
				<entry key="infrastructure" value="${services.search.infrastructure}" />
				<entry key="mdformat" value="${services.search.mdFormat}" />
			</map>
		</property>
	</bean>

	<bean id="searchServiceLocator"
		  class="gr.uoa.di.driver.util.StaticServiceLocator">
		<property name="service" ref="searchService" />
	</bean>

	<bean id="maxResults" class="java.lang.String">
		<constructor-arg value="${services.search.maxResults}"/>
	</bean>

	<bean id="maxSize" class="java.lang.String">
		<constructor-arg value="${services.search.maxSize}"/>
	</bean>

	<bean id="timeout" class="java.lang.String">
		<constructor-arg value="${services.search.portal.timeout}"/>
	</bean>

	<bean id="socketTimeout" class="java.lang.String">
		<constructor-arg value="${services.search.socket.timeout}"/>
	</bean>

</beans>
