/**
* Abiquo community edition
* cloud management application for hybrid clouds
* Copyright (C) 2008-2010 - Abiquo Holdings S.L.
*
* This application is free software; you can redistribute it and/or
* modify it under the terms of the GNU LESSER GENERAL PUBLIC
* LICENSE as published by the Free Software Foundation under
* version 3 of the License
*
* This software 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
* LESSER GENERAL PUBLIC LICENSE v.3 for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
/**
*
*/
package com.abiquo.abiserver.persistence;
import com.abiquo.abiserver.exception.PersistenceException;
import com.abiquo.abiserver.persistence.dao.authorization.OneTimeTokenSessionDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.DataCenterDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.DatastoreDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.HyperVisorDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.PhysicalMachineDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.RackDAO;
import com.abiquo.abiserver.persistence.dao.infrastructure.RemoteServiceDAO;
import com.abiquo.abiserver.persistence.dao.metering.MeterDAO;
import com.abiquo.abiserver.persistence.dao.networking.IpPoolManagementDAO;
import com.abiquo.abiserver.persistence.dao.networking.NetworkAssigmntDAO;
import com.abiquo.abiserver.persistence.dao.networking.NetworkConfigurationDAO;
import com.abiquo.abiserver.persistence.dao.networking.NetworkDAO;
import com.abiquo.abiserver.persistence.dao.networking.VlanNetworkDAO;
import com.abiquo.abiserver.persistence.dao.user.EnterpriseDAO;
import com.abiquo.abiserver.persistence.dao.user.RoleDAO;
import com.abiquo.abiserver.persistence.dao.user.UserDAO;
import com.abiquo.abiserver.persistence.dao.user.UserSessionDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.NodeVirtualImageDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualApplianceConversionsDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualApplianceDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualDataCenterDAO;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualMachineDAO;
import com.abiquo.abiserver.persistence.dao.virtualhardware.ResourceAllocationSettingDataDAO;
import com.abiquo.abiserver.persistence.dao.virtualhardware.ResourceManagementDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.CategoryDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.RepositoryDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.VirtualImageConversionsDAO;
import com.abiquo.abiserver.persistence.dao.virtualimage.VirtualImageDAO;
import com.abiquo.abiserver.persistence.dao.workload.EnterpriseExclusionRuleDAO;
import com.abiquo.abiserver.persistence.dao.workload.FitPolicyRuleDAO;
import com.abiquo.abiserver.persistence.dao.workload.MachineLoadRuleDAO;
/**
* The factoryDAO maintains the methods to create new DAO instances and provides abstract methods to
* manage sessions and transactions
*
* @author jdevesa
*/
public interface DAOFactory
{
/**
* Beggining a connection to create a serial of BusinessLayer to PersistenceLayer operation
*/
public abstract void beginConnection() throws PersistenceException;
/**
* Beggining a connection to create a serial of BusinessLayer to PersistenceLayer operation
*/
public abstract void beginConnection(boolean readOnly) throws PersistenceException;
/**
* Finish the connection and persist the changes
*/
public abstract void endConnection() throws PersistenceException;
/**
* Execute rollback function to the current connection
*/
public abstract void rollbackConnection();
/**
* @return a Boolean value checking if connection is active
*/
public abstract boolean isTransactionActive();
/**
* Check database connectivity.
*
* @return Boolean indicating if there is connectivity to the database.
*/
public boolean pingDB();
// LIST OF ALL DAO INTERFACES THAT WE WILL NEED //
// Network interfaces
public abstract IpPoolManagementDAO getIpPoolManagementDAO();
public abstract NetworkConfigurationDAO getNetworkConfigurationDAO();
public abstract VlanNetworkDAO getVlanNetworkDAO();
public abstract NetworkDAO getNetworkDAO();
public abstract ResourceManagementDAO getResourceManagementDAO();
public abstract ResourceAllocationSettingDataDAO getResourceAllocationSettingDataDAO();
public abstract VirtualApplianceDAO getVirtualApplianceDAO();
public abstract VirtualDataCenterDAO getVirtualDataCenterDAO();
public abstract MeterDAO getMeterDAO();
public abstract UserDAO getUserDAO();
public abstract DataCenterDAO getDataCenterDAO();
public abstract HyperVisorDAO getHyperVisorDAO();
public abstract PhysicalMachineDAO getPhysicalMachineDAO();
public abstract RackDAO getRackDAO();
public abstract EnterpriseDAO getEnterpriseDAO();
// public abstract ResourceAllocationLimitDAO getResourceAllocationLimitDAO();
public abstract VirtualMachineDAO getVirtualMachineDAO();
public abstract VirtualImageDAO getVirtualImageDAO();
public abstract CategoryDAO getCategoryDAO();
public abstract RepositoryDAO getRepositoryDAO();
public abstract NodeVirtualImageDAO getNodeVirtualImageDAO();
public abstract RoleDAO getRoleDAO();
public abstract VirtualImageConversionsDAO getVirtualImageConversionsDAO();
public abstract VirtualApplianceConversionsDAO getVirtualApplianceConversionsDAO();
public abstract RemoteServiceDAO getRemoteServiceDAO();
public abstract DatastoreDAO getDatastoreDAO();
public abstract EnterpriseExclusionRuleDAO getEnterpriseExclusionRuleDAO();
public abstract MachineLoadRuleDAO getMachineLoadRuleDAO();
public abstract FitPolicyRuleDAO getFitPolicyRuleDAO();
public abstract UserSessionDAO getUserSessionDAO();
public abstract NetworkAssigmntDAO getNetworkAssigmentDAO();
public abstract OneTimeTokenSessionDAO getOneTimeTokenSessionDAO();
}