<?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"
    xmlns:hdp="http://www.springframework.org/schema/hadoop"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
				http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
				http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.1.xsd
                http://www.springframework.org/schema/hadoop http://www.springframework.org/schema/hadoop/spring-hadoop.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-accumulo.xml"/>
    <import resource="spring-security.xml"/>    
  
  <hdp:configuration id="hadoopConf">
    sc.cloudbase.instancename=${instance.name}
    sc.cloudbase.zookeepers=${instance.zk}
    sc.cloudbase.username=${instance.username}
    sc.cloudbase.password=${instance.password}

    query.printqueryplan=${rya.displayqueryplan}

    sc.freetext.doctable=${sc.freetext.doctable}
    sc.freetext.termtable=${sc.freetext.termtable}
    sc.geo.table=${sc.geo.table}
    sc.geo.predicates=${sc.geo.predicates}
    sc.geo.numPartitions=${sc.geo.numPartitions}
    sc.temporal.index=${sc.temporal.index}
    
    query.usestats=false
    query.useselectivity=false
    query.usecompositecard=false
  </hdp:configuration>  

<!-- inference Engine is disabled -->  
<!-- 
	<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="ryaSail" 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="indexerSettings" class="org.apache.rya.indexing.accumulo.AccumuloIndexerSettings">
        <constructor-arg ref="hadoopConf"/>
    </bean>

    <bean id="ryaIndexingSail" class="org.apache.rya.indexing.accumulo.RyaIndexingSail">
        <constructor-arg ref="hadoopConf"/>
        <constructor-arg ref="ryaSail"/>
        <constructor-arg ref="indexerSettings"/>
    </bean>

    <bean id="indexingSailRepo" class="org.eclipse.rdf4j.repository.sail.SailRepository" init-method="initialize" destroy-method="shutDown">
        <constructor-arg ref="ryaIndexingSail"/>
    </bean>
</beans>
