<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"

       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd">
   
 	<!-- Database Configuration -->
	<import resource="hibernate-cfg.xml"/>
	<import resource="dataSource.xml"/>
	
	<aop:aspectj-autoproxy proxy-target-class="true" />
	<tx:annotation-driven transaction-manager="txManager"/>
    
    <bean id="txManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>

	<bean id="executorService" class="java.util.concurrent.Executors" factory-method="newCachedThreadPool" destroy-method="shutdown" />

	<bean id="projectEligibilityManager" class="eu.dnetlib.goldoa.service.eligibility.ProjectEligibiliyManager">
		<property name="expirationOk" value="${goldoa.eligibility.project.expiration.limit}"/>
		<property name="expirationThreshold" value="${goldoa.eligibility.project.expiration.threshold}"/>
		<property name="expirationIffy" value="${goldoa.eligibility.project.expiration.iffy.message}"/>
		<property name="expirationNono" value="${goldoa.eligibility.project.expiration.nono.message}"/>
		<property name="stillRunningNono" value="${goldoa.eligibility.project.stillRunning.nono.message}"/>
		<property name="maxRequests" value="${goldoa.eligibility.project.request.count}"/>
		<property name="maxRequestsNono" value="${goldoa.eligibility.project.request.nono.message}"/>
	</bean>

	<bean id="accountingEligibilityManager" class="eu.dnetlib.goldoa.service.eligibility.AccountingEligibilityManager">
		<property name="participationNoNoMessage" value="${goldoa.eligibility.accounting.participation.nono.message}"/>
		<property name="fundingRequestedNoNoMessage" value="${goldoa.eligibility.accounting.funding.nono.message}"/>
		<property name="maxArticleAPC" value="${goldoa.eligibility.accounting.apc.article.max}"/>
		<property name="maxArticleAPCNoNoMessage" value="${goldoa.eligibility.accounting.apc.article.nono.message}"/>
		<property name="maxMonographAPC" value="${goldoa.eligibility.accounting.apc.monograph.max}"/>
		<property name="maxMonographAPCNoNoMessage" value="${goldoa.eligibility.accounting.apc.monograph.nono.message}"/>
	</bean>
	<bean id="organizationEligibilityManager" class="eu.dnetlib.goldoa.service.eligibility.OrganizationEligibilityManager">
		<property name="budgetAvailableNONOMessage" value="${goldoa.eligibility.organization.budgetAvailableNONOMessage}"/>
	</bean>

	<bean id="projectDAO" class="eu.dnetlib.goldoa.service.dao.ProjectDAO">
		<property name="expirationOk" value="${goldoa.eligibility.project.expiration.limit}"/>
	</bean>

	<bean id="projectManager" class="eu.dnetlib.goldoa.service.ProjectManagerImpl">
		<property name="maxRequests" value="${goldoa.eligibility.project.request.count}"/>
	</bean>

	<bean id="eligibilityManager" class="eu.dnetlib.goldoa.service.eligibility.ChainEligibilityManager">
		<property name="managers">
			<list>
				<ref bean="projectEligibilityManager"/>
				<ref bean="accountingEligibilityManager"/>
				<ref bean="organizationEligibilityManager"/>
			</list>
		</property>
	</bean>



	<context:annotation-config/>

	<context:property-placeholder location="classpath:applicationContext-goldoa-service.properties" />

	<context:component-scan base-package="eu.dnetlib.goldoa.service" />
	<context:component-scan base-package="eu.dnetlib.goldoa.service.utils" />
	<context:component-scan base-package="eu.dnetlib.goldoa.service.dao" />

	<context:component-scan base-package="eu.dnetlib.goldoa.domain" />

</beans>
