<!--

    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: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/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"
                      >

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

    <bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
        <property name="registry" ref="dhcpProvidersRegistry" />
        <property name="typeClass"
            value="com.cloud.network.element.DhcpServiceProvider" />
    </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>

    <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="vpcProvidersRegistry" />
        <property name="typeClass"
            value="com.cloud.network.element.VpcProvider" />
    </bean>

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

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

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

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

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

    <bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
        <property name="registry" ref="site2SiteVpnServiceProvidersRegistry" />
        <property name="typeClass"
            value="com.cloud.network.element.Site2SiteVpnServiceProvider" />
    </bean>
    
    <bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
        <property name="registry" ref="remoteAccessVPNServiceProviderRegistry" />
        <property name="typeClass"
            value="com.cloud.network.element.RemoteAccessVPNServiceProvider" />
    </bean>
    <bean class="org.apache.cloudstack.spring.lifecycle.registry.RegistryLifecycle">
        <property name="registry" ref="gslbServiceProvidersRegistry" />
        <property name="typeClass"
            value="org.apache.cloudstack.region.gslb.GslbServiceProvider" />
    </bean>
</beans>
