<?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.
-->

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:util="http://www.springframework.org/schema/util"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
				http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd">

    <bean id="environmentProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:environment.properties"/>
    </bean>

	<context:component-scan base-package="org.apache.cloud.rdf.web.sail" />

	<import resource="spring-security.xml"/>	
	<import resource="spring-accumulo.xml"/>

	<bean id="inferenceEngine" class="org.apache.rya.rdftriplestore.inference.InferenceEngine" init-method="init" destroy-method="destroy">
        <property name="ryaDAO" ref="ryaDAO"/>
        <property name="conf" ref="conf"/>
	</bean>
    
    <bean id="prospectTableName" class="org.apache.rya.prospector.service.ProspectorServiceEvalStatsDAO" factory-method="getProspectTableName">
        <constructor-arg ref="conf"/>
    </bean>
    
    <bean id="prospectorService" class="org.apache.rya.prospector.service.ProspectorService">
        <constructor-arg ref="connector"/>
        <constructor-arg ref="prospectTableName"/>
    </bean>
    
    <bean id="rdfEvalStatsDAO" class="org.apache.rya.prospector.service.ProspectorServiceEvalStatsDAO">
        <property name="prospectorService" ref="prospectorService"/>
        <property name="conf" ref="conf"/>
    </bean>

	<bean id="rts" class="org.apache.rya.rdftriplestore.RdfCloudTripleStore">
        <property name="ryaDAO" ref="ryaDAO"/>
        <property name="rdfEvalStatsDAO" ref="rdfEvalStatsDAO"/>
        <property name="inferenceEngine" ref="inferenceEngine"/>
        <property name="conf" ref="conf"/>
	</bean>

	<bean id="sailRepo" class="org.apache.rya.rdftriplestore.RyaSailRepository" init-method="initialize" destroy-method="shutDown">
        <constructor-arg ref="rts"/>
	</bean>
</beans>
