<?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:util="http://www.springframework.org/schema/util"
       xmlns:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-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/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <bean id="properties"
          class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="singleton" value="true" />
        <property name="ignoreResourceNotFound" value="true" />
        <property name="locations">
            <list>
                <value>classpath:/usergrid-default.properties</value>
                <value>classpath:/usergrid-test.properties</value>
                <value>classpath:/usergrid-custom-test.properties</value>
            </list>
        </property>
    </bean>

    <import resource="usergrid-rest-context.xml"/>

    <bean id="traceTagManager" class="org.apache.usergrid.persistence.cassandra.util.TraceTagManager">
        <property name="reportUnattached" value="false"/>
        <property name="traceEnabled" value="false"/>
    </bean>


    <bean id="binaryStoreFactory" class="org.apache.usergrid.services.assets.BinaryStoreFactory">
        <constructor-arg name="properties" ref="properties"/>
        <constructor-arg name="entityManagerFactory" ref="entityManagerFactory"/>
        <constructor-arg name="reposLocation" value="${usergrid.temp.files}"/>
    </bean>

    <bean id="setup" class="org.apache.usergrid.corepersistence.CpSetup">
        <constructor-arg ref="entityManagerFactory"/>
        <constructor-arg ref="cassandraService"/>
        <constructor-arg ref="injector"/>
    </bean>

    <!-- refer to a named schemaManager from the DataControl annotation thusly -->
    <bean id="coreManager" class="org.apache.usergrid.persistence.CoreSchemaManager">
        <constructor-arg ref="setup"/>
        <constructor-arg ref="injector"/>
    </bean>

    <import resource="usergrid-query-validator-context.xml"/>

</beans>
