package org.ovirt.engine.core.bll.provider; import org.ovirt.engine.core.bll.host.provider.foreman.ForemanHostProviderProxy; import org.ovirt.engine.core.bll.provider.network.openstack.ExternalNetworkProviderProxy; import org.ovirt.engine.core.bll.provider.network.openstack.OpenstackNetworkProviderProxy; import org.ovirt.engine.core.bll.provider.storage.OpenStackImageProviderProxy; import org.ovirt.engine.core.bll.provider.storage.OpenStackVolumeProviderProxy; import org.ovirt.engine.core.bll.provider.vms.KVMVmProviderProxy; import org.ovirt.engine.core.bll.provider.vms.VmwareVmProviderProxy; import org.ovirt.engine.core.bll.provider.vms.XENVmProviderProxy; import org.ovirt.engine.core.common.businessentities.KVMVmProviderProperties; import org.ovirt.engine.core.common.businessentities.OpenStackImageProviderProperties; import org.ovirt.engine.core.common.businessentities.OpenstackNetworkProviderProperties; import org.ovirt.engine.core.common.businessentities.Provider; import org.ovirt.engine.core.common.businessentities.VmwareVmProviderProperties; import org.ovirt.engine.core.common.businessentities.XENVmProviderProperties; import org.ovirt.engine.core.common.businessentities.storage.OpenStackVolumeProviderProperties; import org.ovirt.engine.core.di.Injector; /** * The provider proxy factory can create a provider proxy according to the provider definition. */ public class ProviderProxyFactory { private static final ProviderProxyFactory INSTANCE = new ProviderProxyFactory(); private ProviderProxyFactory() { // Singleton private c'tor } /** * Create the proxy used to communicate with the given provider. * * @param provider * The provider to create the proxy for. * @return The proxy for communicating with the provider */ @SuppressWarnings("unchecked") public <P extends ProviderProxy<?>> P create(Provider<?> provider) { switch (provider.getType()) { case EXTERNAL_NETWORK: return (P) new ExternalNetworkProviderProxy((Provider<OpenstackNetworkProviderProperties>) provider); case FOREMAN: return (P) new ForemanHostProviderProxy(provider); case OPENSTACK_NETWORK: return (P) new OpenstackNetworkProviderProxy((Provider<OpenstackNetworkProviderProperties>) provider); case OPENSTACK_IMAGE: return (P) new OpenStackImageProviderProxy((Provider<OpenStackImageProviderProperties>) provider); case OPENSTACK_VOLUME: return (P) new OpenStackVolumeProviderProxy((Provider<OpenStackVolumeProviderProperties>) provider); case VMWARE: return (P) Injector.injectMembers(new VmwareVmProviderProxy((Provider<VmwareVmProviderProperties>) provider)); case KVM: return (P) Injector.injectMembers(new KVMVmProviderProxy((Provider<KVMVmProviderProperties>) provider)); case XEN: return (P) Injector.injectMembers(new XENVmProviderProxy((Provider<XENVmProviderProperties>) provider)); default: return null; } } /** * Return the {@link ProviderProxyFactory} for using as a dependency. * * @return The {@link ProviderProxyFactory} */ public static ProviderProxyFactory getInstance() { return INSTANCE; } }