<?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="addiks_rdm.doctrine.orm.configuration" class="Doctrine\ORM\Configuration">
            <factory service="doctrine.orm.entity_manager" method="getConfiguration" />
        </service>
-->

        <service
            id="addiks_rdm.mapping.driver"
            class="Addiks\RDMBundle\Mapping\Drivers\MappingDriverInterface"
            public="true"
        >
            <factory service="addiks_rdm.mapping.driver_factory" method="createRDMMappingDriver" />
            <argument type="service">
                <service class="Doctrine\Persistence\Mapping\Driver\MappingDriver">
                    <factory service="addiks_rdm.doctrine.orm.configuration" method="getMetadataDriverImpl" />
                </service>
            </argument>
        </service>

        <service id="addiks_rdm.mapping.driver_factory" alias="addiks_rdm.mapping.driver_factory.cached" />

        <service
            id="addiks_rdm.mapping.driver_factory.cached"
            class="Addiks\RDMBundle\Mapping\DriverFactories\CachedMappingDriverFactory"
        >
            <argument type="service" id="service_container" />
            <argument type="service">
                <service class="Addiks\RDMBundle\Mapping\DriverFactories\MappingDriverFactoryLazyLoadProxy">
                    <argument type="service" id="service_container" />
                    <argument>addiks_rdm.mapping.driver_factory.aggregate</argument>
                </service>
            </argument>
            <argument type="service" id="cache.app" />
        </service>

        <service
            id="addiks_rdm.mapping.driver_factory.aggregate"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingDriverFactoryAggregate"
            public="true"
        >
            <argument type="collection">
                <argument type="service" id="addiks_rdm.mapping.driver_factory.chain" />
                <argument type="service" id="addiks_rdm.mapping.driver_factory.annotation" />
                <argument type="service" id="addiks_rdm.mapping.driver_factory.xml" />
                <argument type="service" id="addiks_rdm.mapping.driver_factory.yaml" />
                <argument type="service" id="addiks_rdm.mapping.driver_factory.php" />
                <argument type="service" id="addiks_rdm.mapping.driver_factory.static_php" />
            </argument>
        </service>

        <service
            id="addiks_rdm.mapping.driver_factory.chain"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingDriverChainFactory"
        >
            <argument type="service">
                <service class="Addiks\RDMBundle\Mapping\DriverFactories\MappingDriverFactoryLazyLoadProxy">
                    <argument type="service" id="service_container" />
                    <argument>addiks_rdm.mapping.driver_factory.aggregate</argument>
                </service>
            </argument>
        </service>

        <service
            id="addiks_rdm.mapping.driver_factory.annotation"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingAnnotationDriverFactory"
        >
            <argument type="service" id="service_container" />
            <argument type="service" id="annotation_reader" />
        </service>

        <service
            id="addiks_rdm.mapping.driver_factory.xml"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingXMLDriverFactory"
        >
            <argument type="service" id="kernel" />
            <argument>@=service('kernel').locateResource('@AddiksRDMBundle/Resources/mapping-schema.v1.xsd')</argument>
        </service>

        <service
            id="addiks_rdm.mapping.driver_factory.yaml"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingYamlDriverFactory"
        >
            <argument type="service" id="service_container" />
        </service>

        <service
            id="addiks_rdm.mapping.driver_factory.php"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingPHPDriverFactory"
        />

        <service
            id="addiks_rdm.mapping.driver_factory.static_php"
            class="Addiks\RDMBundle\Mapping\DriverFactories\MappingStaticPHPDriverFactory"
        />

    </services>
</container>
