/**
 * *  Copyright (C) 2011 Citrix Systems, Inc.  All rights reserved
*
 *
 * This software is licensed under the GNU General Public License v3 or later.
 *
 * It is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */
package com.cloud.configuration;

import java.util.ArrayList;
import java.util.List;

import com.cloud.baremetal.BareMetalPingServiceImpl;
import com.cloud.baremetal.BareMetalTemplateAdapter;
import com.cloud.baremetal.BareMetalVmManagerImpl;
import com.cloud.baremetal.ExternalDhcpManagerImpl;
import com.cloud.baremetal.PxeServerManager.PxeServerType;
import com.cloud.baremetal.PxeServerManagerImpl;
import com.cloud.baremetal.PxeServerService;
import com.cloud.ha.HighAvailabilityManagerExtImpl;
import com.cloud.hypervisor.vmware.VmwareManagerImpl;
import com.cloud.netapp.NetappManagerImpl;
import com.cloud.netapp.dao.LunDaoImpl;
import com.cloud.netapp.dao.PoolDaoImpl;
import com.cloud.netapp.dao.VolumeDaoImpl;
import com.cloud.network.ExternalNetworkDeviceManagerImpl;
import com.cloud.network.NetworkUsageManagerImpl;
import com.cloud.secstorage.CommandExecLogDaoImpl;
import com.cloud.secstorage.PremiumSecondaryStorageManagerImpl;
import com.cloud.template.TemplateAdapter;
import com.cloud.template.TemplateAdapter.TemplateAdapterType;
import com.cloud.upgrade.PremiumDatabaseUpgradeChecker;
import com.cloud.usage.dao.UsageDaoImpl;
import com.cloud.usage.dao.UsageIPAddressDaoImpl;
import com.cloud.usage.dao.UsageJobDaoImpl;
import com.cloud.utils.component.SystemIntegrityChecker;

public class PremiumComponentLibrary extends DefaultComponentLibrary {
    @Override
    protected void populateDaos() {
    	super.populateDaos();
        addDao("UsageJobDao", UsageJobDaoImpl.class);
        addDao("UsageDao", UsageDaoImpl.class);
        addDao("UsageIpAddressDao", UsageIPAddressDaoImpl.class);
        addDao("CommandExecLogDao", CommandExecLogDaoImpl.class);
        addDao("NetappPool", PoolDaoImpl.class);
        addDao("NetappVolume", VolumeDaoImpl.class);
        addDao("NetappLun", LunDaoImpl.class);
    }

    @Override
    protected void populateManagers() {
    	// override FOSS SSVM manager
    	super.populateManagers();
        addManager("secondary storage vm manager", PremiumSecondaryStorageManagerImpl.class);
	
        addManager("HA Manager", HighAvailabilityManagerExtImpl.class);
        addManager("VMWareManager", VmwareManagerImpl.class);
        addManager("ExternalNetworkManager", ExternalNetworkDeviceManagerImpl.class);
        addManager("BareMetalVmManager", BareMetalVmManagerImpl.class);
        addManager("ExternalDhcpManager", ExternalDhcpManagerImpl.class);
        addManager("PxeServerManager", PxeServerManagerImpl.class);
        addManager("NetworkUsageManager", NetworkUsageManagerImpl.class);
        addManager("NetappManager", NetappManagerImpl.class);
    }

    @Override
    protected void populateAdapters() {
    	super.populateAdapters();
    	addAdapter(PxeServerService.class, PxeServerType.PING.getName(), BareMetalPingServiceImpl.class);
    	addAdapter(TemplateAdapter.class, TemplateAdapterType.BareMetal.getName(), BareMetalTemplateAdapter.class);
    }
}
