<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
    http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd
  http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <!-- Stores beans that are used in bandwidth-datadelivery.xml, but that 
        have different implementations between production code and test code -->
    <bean
        class="com.raytheon.uf.edex.datadelivery.bandwidth.EdexBandwidthContextFactory">
        <!-- This bean version is used to set the EDEX instance of BandwidthManager -->
        <constructor-arg ref="bandwidthManager" />
    </bean>

    <bean id="hibernateBandwidthDbInit"
        class="com.raytheon.uf.edex.datadelivery.bandwidth.hibernate.HibernateBandwidthDbInit">
        <property name="dao" ref="bandwidthAllocationDao" />
    </bean>

    <!-- Used as the context for creating the BandwidthManager -->
    <bean id="bandwidthContextFactory"
        class="com.raytheon.uf.edex.datadelivery.bandwidth.EdexBandwidthContextFactory">
        <!-- The bandwidth dao implementation -->
        <constructor-arg ref="hibernateBandwidthDao" />
        <!-- The bandwidth manager initializer -->
        <constructor-arg>
            <bean
                class="com.raytheon.uf.edex.datadelivery.bandwidth.hibernate.HibernateBandwidthInitializer">
                <constructor-arg>
                    <bean
                        class="com.raytheon.uf.edex.datadelivery.bandwidth.util.FindActiveSubscriptionsForRoute">
                        <constructor-arg ref="subscriptionRoutesToSchedule" />
                    </bean>
                </constructor-arg>
            </bean>
        </constructor-arg>
        <!-- The strategy for how to create the bandwidth manager -->
        <constructor-arg ref="bandwidthManagerCreator" />
        <!-- The db initializer -->
        <constructor-arg ref="hibernateBandwidthDbInit" />
    </bean>

    <camelContext id="BandwidthManager-context"
        xmlns="http://camel.apache.org/schema/spring" errorHandlerRef="errorHandler">

        <route id="bandwidthManagerProcessWork">
            <from
                uri="jms-generic:queue:matureSubscriptions?destinationResolver=#qpidDurableResolver" />
            <doTry>
                <pipeline>
                    <bean ref="serializationUtil" method="transformFromThrift" />
                    <bean ref="BandwidthManagerProcessor" method="process" />
                    <bean ref="BandwidthManagerRetrieval" method="generateRetrieval" />

                    <!-- notify retrieval threads, if data delivery made 
                        into cluster this should move to topic post -->
                    <to uri="directvm:notifyRetrieval" />
                </pipeline>
                <doCatch>
                    <exception>java.lang.Throwable</exception>
                    <to
                        uri="log:BandwidthManagerProcess?level=ERROR&amp;showBody=false&amp;showCaughtException=true&amp;showStackTrace=true" />
                </doCatch>
            </doTry>
        </route>
    </camelContext>

</beans>