<!-- 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 />

      <!-- @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="instantiatePostProcessor" class="com.cloud.utils.component.ComponentInstantiationPostProcessor">
    <property name="Interceptors">
        <list>
            <ref bean="transactionContextBuilder" />
            <ref bean="actionEventInterceptor" />
        </list>
    </property>
  </bean>

  <!--
      Network Elements
  -->
  <bean id="SecurityGroupProvider" class="com.cloud.network.element.SecurityGroupElement">
    <property name="name" value="SecurityGroupProvider"/>
  </bean>
  <bean id="VirtualRouter" class="com.cloud.network.element.VirtualRouterElement">
    <property name="name" value="VirtualRouter"/>
  </bean>
  <bean id="VpcVirtualRouter" class="com.cloud.vpc.dao.MockVpcVirtualRouterElement">
    <property name="name" value="VpcVirtualRouter"/>
  </bean>

  <!--
    Network Gurus
  -->
  <bean id="PublicNetworkGuru" class="com.cloud.network.guru.PublicNetworkGuru">
    <property name="name" value="PublicNetworkGuru"/>
  </bean>
  <bean id="PodBasedNetworkGuru" class="com.cloud.network.guru.PodBasedNetworkGuru">
    <property name="name" value="PodBasedNetworkGuru"/>
  </bean>
  <bean id="ControlNetworkGuru" class="com.cloud.network.guru.ControlNetworkGuru">
    <property name="name" value="ControlNetworkGuru"/>
  </bean>
  <bean id="DirectNetworkGuru" class="com.cloud.network.guru.DirectNetworkGuru">
    <property name="name" value="DirectNetworkGuru"/>
  </bean>
  <bean id="DirectPodBasedNetworkGuru" class="com.cloud.network.guru.DirectPodBasedNetworkGuru">
    <property name="name" value="DirectPodBasedNetworkGuru"/>
  </bean>
  <bean id="PrivateNetworkGuru" class="com.cloud.network.guru.PrivateNetworkGuru">
    <property name="name" value="PrivateNetworkGuru"/>
  </bean>

  <bean id="TestConfiguration"
    class="com.cloud.vpc.VpcTestConfiguration" />
  <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor">
    <property name="requiredParameterValue" value="false" />
  </bean>
</beans>
