<?xml version="1.0" ?>

<container xmlns="http://symfony.com/schema/dic/services"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">

    <services>
        <service id="api.doctrine.metadata_factory" class="Doctrine\Common\Persistence\Mapping\ClassMetadataFactory" public="false">
            <factory service="doctrine.orm.default_entity_manager" method="getMetadataFactory" />
        </service>

        <service id="api.doctrine.orm.data_provider" public="false" abstract="true">
            <argument type="service" id="doctrine" />
        </service>

        <service id="api.doctrine.orm.default_data_provider" parent="api.doctrine.orm.data_provider" class="Dunglas\ApiBundle\Doctrine\Orm\DataProvider">
            <tag name="api.data_provider" />
        </service>

        <!-- Filter -->

        <service id="api.doctrine.orm.search_filter" class="Dunglas\ApiBundle\Doctrine\Orm\Filter\SearchFilter" public="false" abstract="true">
            <argument type="service" id="doctrine" />
            <argument type="service" id="request_stack" />
            <argument type="service" id="api.iri_converter" />
            <argument type="service" id="api.property_accessor" />
        </service>

        <service id="api.doctrine.orm.order_filter" class="Dunglas\ApiBundle\Doctrine\Orm\Filter\OrderFilter" public="false" abstract="true">
            <argument type="service" id="doctrine" />
            <argument type="service" id="request_stack" />
            <argument>%api.collection.filter_name.order%</argument>
        </service>

        <service id="api.doctrine.orm.date_filter" class="Dunglas\ApiBundle\Doctrine\Orm\Filter\DateFilter" public="false" abstract="true">
            <argument type="service" id="doctrine" />
            <argument type="service" id="request_stack" />
        </service>

        <!-- Metadata loader -->

        <service id="api.doctrine.mapping.loaders.identifier" class="Dunglas\ApiBundle\Mapping\Loader\DoctrineIdentifierLoader" public="false">
            <argument type="service" id="api.mapping.attribute_metadata_factory" />
            <argument type="service" id="doctrine" />
        </service>

        <!-- Event listener -->

        <service id="api.doctrine.listener.view.manager" class="Dunglas\ApiBundle\Doctrine\EventListener\ManagerViewListener">
            <argument type="service" id="doctrine" />

            <tag name="kernel.event_listener" event="kernel.view" method="onKernelView" priority="10" />
        </service>

        <!-- Doctrine Query extensions -->

        <service id="api.doctrine.orm.query_extension.eager_loading" class="Dunglas\ApiBundle\Doctrine\Orm\Extension\EagerLoadingExtension">
            <tag name="api.doctrine.orm.query_extension.item" />
            <tag name="api.doctrine.orm.query_extension.collection" />
        </service>

        <service id="api.doctrine.orm.query_extension.filter" class="Dunglas\ApiBundle\Doctrine\Orm\Extension\FilterExtension">
            <tag name="api.doctrine.orm.query_extension.collection" />
        </service>

        <service id="api.doctrine.orm.query_extension.pagination" class="Dunglas\ApiBundle\Doctrine\Orm\Extension\PaginationExtension">
            <argument type="service" id="request_stack" />
            <tag name="api.doctrine.orm.query_extension.collection" />
        </service>

        <service id="api.doctrine.orm.query_extension.order" class="Dunglas\ApiBundle\Doctrine\Orm\Extension\OrderExtension">
            <argument>%api.collection.order%</argument>
            <tag name="api.doctrine.orm.query_extension.collection" />
        </service>
    </services>

</container>
