<!-- 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:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:aop="http://www.springframework.org/schema/aop"
  xsi:schemaLocation="http://www.springframework.org/schema/beans
                      http://www.springframework.org/schema/beans/spring-beans.xsd
                      http://www.springframework.org/schema/tx 
                      http://www.springframework.org/schema/tx/spring-tx.xsd
                      http://www.springframework.org/schema/aop
                      http://www.springframework.org/schema/aop/spring-aop.xsd
                      http://www.springframework.org/schema/context
                      http://www.springframework.org/schema/context/spring-context.xsd">

  <context:annotation-config />
  <!-- <context:component-scan base-package="org.apache.cloudstack, com.cloud" /> -->
  <!-- @DB support -->

  <bean id="componentContext" class="com.cloud.utils.component.ComponentContext"/>
  <bean id="transactionContextBuilder" class="com.cloud.utils.db.TransactionContextBuilder" />
  <bean id="actionEventInterceptor" class="com.cloud.event.ActionEventInterceptor" />
  <bean id="contrailEventInterceptor"
    class="org.apache.cloudstack.network.contrail.management.EventUtils.EventInterceptor" />

  <bean id="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
    <property name="Interceptors">
      <list>
        <ref bean="transactionContextBuilder" />
        <ref bean="actionEventInterceptor" />
        <ref bean="contrailEventInterceptor" />
      </list>
    </property>
  </bean>

  <bean id="eventBus" class="org.apache.cloudstack.framework.messagebus.MessageBusBase" />


  <!-- registry definition -->
  <bean id="networkGurusRegistry"
        class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
  </bean>
  <bean id="networkElementsRegistry"
        class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
  </bean>

  <bean id="ipDeployersRegistry"
        class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
  </bean>

  <bean id="dhcpProvidersRegistry"
        class="org.apache.cloudstack.spring.lifecycle.registry.ExtensionRegistry">
  </bean>

  <!-- registry -->
  <bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
    <property name="registry" ref="networkElementsRegistry" />
    <property name="typeClass" value="com.cloud.network.element.NetworkElement" />
  </bean>

  <bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
    <property name="registry" ref="networkGurusRegistry" />
    <property name="typeClass" value="com.cloud.network.guru.NetworkGuru" />
   </bean>
 
  <!-- registry users -->
  <bean id="NetworkModel" class="com.cloud.network.NetworkModelImpl">
    <property name="networkElements" value="#{networkElementsRegistry.registered}" />
  </bean>

  <bean id="networkServiceImpl" class="com.cloud.network.NetworkServiceImpl">
    <property name="networkGurus" value="#{networkGurusRegistry.registered}" />
  </bean>

  <bean id="networkOrchestrator"
        class="org.apache.cloudstack.engine.orchestration.NetworkOrchestrator">
    <property name="networkGurus" value="#{networkGurusRegistry.registered}" />
    <property name="networkElements" value="#{networkElementsRegistry.registered}" />
    <property name="ipDeployers" value="#{ipDeployersRegistry.registered}" />
    <property name="dhcpProviders" value="#{dhcpProvidersRegistry.registered}" />
   </bean>

  <bean id="IntegrationTestConfiguration"
	class="org.apache.cloudstack.network.contrail.management.IntegrationTestConfiguration"/>

  </beans>
