<?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:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
			http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
			http://www.springframework.org/schema/tx
			http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
      
    <!--
        // Replaces ${...} with corresponding values found in 'location' property. A value
        // can be overridden by setting a corresponding system property.
    -->
    <bean id="propertyConfigurer"
        class="ch.systemsx.cisd.common.spring.ExposablePropertyPaceholderConfigurer">
        <property name="location" value="file:etc/service.properties" />
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreUnresolvablePlaceholders" value="true" />
    </bean>
    
    <bean id="plugin-tasks" class="ch.systemsx.cisd.openbis.dss.generic.server.plugins.tasks.PluginTaskProviders" factory-method="create" >
      <constructor-arg value="${storeroot-dir}" />
    </bean>

    <bean id="openBIS-service" class="ch.systemsx.cisd.openbis.dss.generic.server.EncapsulatedOpenBISService">
        <constructor-arg ref="session-token-manager"/>
        <constructor-arg value="${server-url}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <property name="port" value="${port}"/>
        <property name="useSSL" value="${use-ssl}"/>
        <property name="downloadUrl" value="${download-url}"/>
        <property name="dataStoreCode" value="${data-store-server-code}"/>
        <constructor-arg ref="plugin-tasks" />
    </bean>    
    
    <bean id="data-store-server"
        class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service">
            <bean class="ch.systemsx.cisd.openbis.dss.generic.server.DataStoreService">
                <constructor-arg ref="session-token-manager" />
                <constructor-arg>
                    <bean class="ch.systemsx.cisd.common.mail.MailClientParameters">
                        <property name="from" value="${mail.from}"/>
                        <property name="smtpHost" value="${mail.smtp.host}"/>
                        <property name="smtpUser" value="${mail.smtp.user}"/>
                        <property name="smtpPassword" value="${mail.smtp.password}"/>
                    </bean>
                </constructor-arg>
                <constructor-arg ref="plugin-tasks" />
                <property name="cifexAdminUserOrNull" value="${cifex-admin-username}" />
                <property name="cifexAdminPasswordOrNull" value="${cifex-admin-password}" />
                <property name="storeRoot" value="${storeroot-dir}"/>
                <property name="commandQueueDir" value="${commandqueue-dir}"/>
            </bean>
        </property>
        <property name="serviceInterface" value="ch.systemsx.cisd.openbis.generic.shared.IDataStoreService" />
    </bean>
    
     <bean id="data-store-rpc-service-generic"
        class="com.marathon.util.spring.StreamSupportingHttpInvokerServiceExporter">
        <property name="service">
            <bean class="ch.systemsx.cisd.openbis.dss.generic.server.DssServiceRpcGeneric">
                <constructor-arg ref="openBIS-service" />
            </bean>
        </property>
        <property name="serviceInterface" value="ch.systemsx.cisd.openbis.dss.rpc.shared.IDssServiceRpcGeneric" />
    </bean>
    
    <bean id="data-store-rpc-name-server"
        class="com.marathon.util.spring.StreamSupportingHttpInvokerServiceExporter">
        <property name="service">
            <bean class="ch.systemsx.cisd.openbis.dss.generic.server.DssServiceRpcNameServer">
            </bean>
        </property>
        <property name="serviceInterface" value="ch.systemsx.cisd.openbis.dss.rpc.shared.IRpcServiceNameServer" />
    </bean>
    
    <bean id="session-token-manager" class="ch.systemsx.cisd.openbis.dss.generic.server.SessionTokenManager"/>
    
    <bean id="data-source-provider" class="ch.systemsx.cisd.openbis.dss.generic.shared.DataSourceProvider" />
    
    <!-- 
        // This discovers on-the-fly all <code>org.springframework.aop.Advisor</code> implementations.
    -->
    <bean id="bean-post-processor"
        class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" />

    <!-- 
        // Logging
    -->

    <bean class="ch.systemsx.cisd.common.spring.LogAdvisor" />
    
</beans>