<?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="easyadmin.form.type" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminFormType">
            <argument type="service" id="easyadmin.config.manager" />
            <argument type="collection" /> <!-- type configurators -->
            <argument type="service" id="easyadmin.security.authorization_checker" />
            <tag name="form.type" alias="easyadmin" />
        </service>

        <service id="easyadmin.form.type.fileupload" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\FileUploadType">
            <argument>%kernel.project_dir%</argument>
            <tag name="form.type" />
        </service>

        <service id="easyadmin.form.type.filters" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminFiltersFormType">
            <argument type="service" id="easyadmin.config.manager"/>
            <argument type="collection" /> <!-- type configurators -->
            <tag name="form.type" alias="easyadmin_filters" />
        </service>

        <service id="easyadmin.form.type.autocomplete" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminAutocompleteType">
            <argument type="service" id="easyadmin.config.manager"/>
            <tag name="form.type" alias="easyadmin_autocomplete" />
        </service>

        <service id="easyadmin.form.type.batch" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminBatchFormType">
            <argument type="service" id="easyadmin.config.manager"/>
            <tag name="form.type" alias="easyadmin_batch" />
        </service>

        <service id="easyadmin.form.type.divider" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminDividerType">
            <tag name="form.type" alias="easyadmin_divider" />
        </service>

        <service id="easyadmin.form.type.section" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminSectionType">
            <tag name="form.type" alias="easyadmin_section" />
        </service>

        <service id="easyadmin.form.type.group" class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\EasyAdminGroupType">
            <tag name="form.type" alias="easyadmin_group" />
        </service>

        <service id="easyadmin.form.type.extension" class="EasyCorp\Bundle\EasyAdminBundle\Form\Extension\EasyAdminExtension">
            <argument type="service" id="request_stack" on-invalid="null" />
            <tag name="form.type_extension" alias="form" extended-type="Symfony\Component\Form\Extension\Core\Type\FormType" />
        </service>

        <!-- Type Configurators -->

        <service id="easyadmin.form.type.configurator.code_editor" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\CodeEditorTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="50" />
        </service>

        <service id="easyadmin.filter.type.configurator.choice"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\Configurator\ChoiceFilterTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="0" />
        </service>

        <service id="easyadmin.form.type.configurator.textarea" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\TextareaTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="40" />
        </service>

        <service id="easyadmin.form.type.configurator.autocomplete" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\AutocompleteTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="30" />
        </service>

        <service id="easyadmin.form.type.configurator.collection" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\CollectionTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="20" />
        </service>

        <service id="easyadmin.form.type.configurator.checkbox" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\CheckboxTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="10" />
        </service>

        <service id="easyadmin.form.type.configurator.type" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\TypeConfigurator">
            <argument type="service" id="easyadmin.config.manager" />
            <tag name="easyadmin.form.type.configurator" priority="0" />
        </service>

        <service id="easyadmin.form.type.configurator.entity" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\EntityTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="-20" />
        </service>

        <service id="easyadmin.form.type.configurator.ivory_ckeditor" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\IvoryCKEditorTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="-130" />
        </service>

        <service id="easyadmin.form.type.configurator.fos_ckeditor" public="false"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Type\Configurator\FOSCKEditorTypeConfigurator">
            <tag name="easyadmin.form.type.configurator" priority="-130" />
        </service>

        <!-- Type Configurators -->

        <service id="easyadmin.filter.registry" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\FilterRegistry" public="true">
            <argument type="collection" /> <!-- filter types map -->
            <argument type="iterator" /> <!-- filter types guessers -->
        </service>
        <service id="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\FilterRegistry" alias="easyadmin.filter.registry" public="true" />

        <service id="easyadmin.filter.extension" class="Symfony\Component\Form\Extension\DependencyInjection\DependencyInjectionExtension">
            <argument /><!-- All services with tag "easyadmin.filter.type" are stored in a service locator -->
            <argument type="collection" />
            <argument type="iterator" />
        </service>

        <service id="easyadmin.filter.type_guesser.doctrine" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Guesser\DoctrineOrmFilterTypeGuesser">
            <argument type="service" id="doctrine" />
            <tag name="easyadmin.filter.type_guesser" />
        </service>

        <service id="easyadmin.form.guesser.missing_doctrine_orm_type_guesser" public="true"
                 class="EasyCorp\Bundle\EasyAdminBundle\Form\Guesser\MissingDoctrineOrmTypeGuesser">
            <argument type="service" id="doctrine" />
            <tag name="form.type_guesser" />
        </service>

        <service id="easyadmin.filter.type.array" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\ArrayFilterType">
            <tag name="easyadmin.filter.type" alias="array" />
        </service>

        <service id="easyadmin.filter.type.boolean" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\BooleanFilterType">
            <tag name="easyadmin.filter.type" alias="boolean" />
        </service>

        <service id="easyadmin.filter.type.comparison" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\ComparisonFilterType">
            <tag name="easyadmin.filter.type" alias="comparison" />
        </service>

        <service id="easyadmin.filter.type.date" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\DateTimeFilterType">
            <argument type="string">Symfony\Component\Form\Extension\Core\Type\DateType</argument>
            <tag name="easyadmin.filter.type" alias="date" />
        </service>

        <service id="easyadmin.filter.type.dateinterval" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\ComparisonFilterType">
            <argument type="string">Symfony\Component\Form\Extension\Core\Type\DateIntervalType</argument>
            <argument type="collection" />
            <argument type="string" />
            <argument type="collection">
                <argument key="type">datetime</argument>
            </argument>
            <tag name="easyadmin.filter.type" alias="dateinterval" />
        </service>

        <service id="easyadmin.filter.type.datetime" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\DateTimeFilterType">
            <tag name="easyadmin.filter.type" alias="datetime" />
        </service>

        <service id="easyadmin.filter.type.decimal" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\NumericFilterType">
            <argument type="string">Symfony\Component\Form\Extension\Core\Type\NumberType</argument>
            <argument type="collection">
                <argument key="input">string</argument>
            </argument>
            <tag name="easyadmin.filter.type" alias="decimal" />
        </service>

        <service id="easyadmin.filter.type.choice" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\ChoiceFilterType">
            <tag name="easyadmin.filter.type" alias="choice" />
        </service>

        <service id="easyadmin.filter.type.entity" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\EntityFilterType">
            <tag name="easyadmin.filter.type" alias="entity" />
        </service>

        <service id="easyadmin.filter.type.float" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\NumericFilterType">
            <tag name="easyadmin.filter.type" alias="float" />
        </service>

        <service id="easyadmin.filter.type.integer" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\NumericFilterType">
            <argument type="string">Symfony\Component\Form\Extension\Core\Type\IntegerType</argument>
            <tag name="easyadmin.filter.type" alias="integer" />
        </service>

        <service id="easyadmin.filter.type.text" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\TextFilterType">
            <tag name="easyadmin.filter.type" alias="text" />
        </service>

        <service id="easyadmin.filter.type.textarea" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\TextFilterType">
            <argument type="string">Symfony\Component\Form\Extension\Core\Type\TextareaType</argument>
            <tag name="easyadmin.filter.type" alias="textarea" />
        </service>

        <service id="easyadmin.filter.type.time" class="EasyCorp\Bundle\EasyAdminBundle\Form\Filter\Type\DateTimeFilterType">
            <argument type="string">Symfony\Component\Form\Extension\Core\Type\TimeType</argument>
            <tag name="easyadmin.filter.type" alias="time" />
        </service>
    </services>
</container>
