com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.VirtualDataCenterDAOHibernate.java Source code

Java tutorial

Introduction

Here is the source code for com.abiquo.abiserver.persistence.dao.virtualappliance.hibernate.VirtualDataCenterDAOHibernate.java

Source

/**
 * 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.dao.virtualappliance.hibernate;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Collection;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import com.abiquo.abiserver.business.hibernate.pojohb.virtualappliance.VirtualDataCenterHB;
import com.abiquo.abiserver.exception.PersistenceException;
import com.abiquo.abiserver.persistence.DAOFactory;
import com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualDataCenterDAO;
import com.abiquo.abiserver.persistence.hibernate.HibernateDAO;
import com.abiquo.abiserver.persistence.hibernate.HibernateDAOFactory;

/**
 * Class that implements the extra DAO functions for the
 * {@link com.abiquo.abiserver.persistence.dao.virtualappliance.VirtualDataCenterDAO} interface
 * 
 * @author jdevesa@abiquo.com
 */
@SuppressWarnings("unchecked")
public class VirtualDataCenterDAOHibernate extends HibernateDAO<VirtualDataCenterHB, Integer>
        implements VirtualDataCenterDAO {

    private static final String VIRTUAL_DATACENTER_GET_BY_NETWORK = "VIRTUAL_DATACENTER.GET_BY_NETWORK";

    private static final String VIRTUAL_DATACENTER_GET_BY_VAPP = "VIRTUAL_DATACENTER_GET_BY_VAPP";

    private static final String VIRTUAL_DATACENTERS_BY_ENTERPRISE = "VIRTUAL_DATACENTER_BY_ENTERPRISE";

    private static final String VIRTUAL_DATACENTERS_BY_ENTERPRISE_AND_DATACENTER = "VIRTUAL_DATACENTER_BY_ENTERPRISE_AND_DATACENTER";

    private static final String SUM_VOLUMES_RESOURCES = "select sum(r.limitResource) from rasd r, rasd_management rm where r.instanceID = rm.idResource and rm.idResourceType = '8' and rm.idVirtualDatacenter = :virtualDatacenterId";

    private static final String COUNT_PUBLIC_IP_RESOURCES = "select count(*) from ip_pool_management ipm, network_configuration nc, vlan_network vn, datacenter dc, rasd_management rm "
            + " where ipm.dhcp_service_id=nc.dhcp_service_id and vn.network_configuration_id = nc.network_configuration_id and vn.network_id = dc.network_id and rm.idManagement = ipm.idManagement "
            + " and ipm.mac is not null " //
            + " and rm.idVirtualDataCenter = :virtualDatacenterId";

    @Override
    public VirtualDataCenterHB findByIdNamed(Integer id) {
        return (VirtualDataCenterHB) getSession().get("VirtualDataCenterHB", id);
    }

    @Override
    public VirtualDataCenterHB getVirtualDatacenterFromNetworkId(Integer idNetwork) throws PersistenceException {
        VirtualDataCenterHB vdcHB;

        try {
            Session session = HibernateDAOFactory.getSessionFactory().getCurrentSession();
            Query query = session.getNamedQuery(VIRTUAL_DATACENTER_GET_BY_NETWORK);
            query.setInteger("network_id", idNetwork);
            vdcHB = (VirtualDataCenterHB) query.uniqueResult();
        } catch (HibernateException he) {
            throw new PersistenceException(he.getMessage(), he);
        }

        return vdcHB;
    }

    @Override
    public VirtualDataCenterHB getVirtualDatacenterFromVirtualAppliance(Integer vappId)
            throws PersistenceException {
        try {
            Session session = HibernateDAOFactory.getSessionFactory().getCurrentSession();
            Query query = session.getNamedQuery(VIRTUAL_DATACENTER_GET_BY_VAPP);
            query.setInteger("vappId", vappId);
            return (VirtualDataCenterHB) query.uniqueResult();
        } catch (HibernateException he) {
            throw new PersistenceException(he.getMessage(), he);
        }

    }

    @Override
    public Collection<VirtualDataCenterHB> getVirtualDatacentersFromEnterprise(Integer enterpriseId) {
        Session session = HibernateDAOFactory.getSessionFactory().getCurrentSession();
        return session.getNamedQuery(VIRTUAL_DATACENTERS_BY_ENTERPRISE).setParameter("enterpriseId", enterpriseId)
                .list();
    }

    @Override
    public Collection<VirtualDataCenterHB> getVirtualDatacentersFromEnterpriseAndDatacenter(Integer enterpriseId,
            Integer datacenterId) {
        Session session = HibernateDAOFactory.getSessionFactory().getCurrentSession();
        return session.getNamedQuery(VIRTUAL_DATACENTERS_BY_ENTERPRISE_AND_DATACENTER)
                .setParameter("enterpriseId", enterpriseId).setParameter("datacenterId", datacenterId).list();
    }

    private final static Long MB_TO_BYTES = 1024l * 1024l;

    public long getCurrentStorageAllocated(int virtualDatacenterId) {
        Session session = HibernateDAOFactory.getSessionFactory().getCurrentSession();

        BigDecimal storage = (BigDecimal) session.createSQLQuery(SUM_VOLUMES_RESOURCES)
                .setParameter("virtualDatacenterId", virtualDatacenterId).uniqueResult();

        return storage == null ? 0 : storage.longValue() * MB_TO_BYTES;
    }

    public long getCurrentPublicIpAllocated(int virtualDatacenterId) {
        Session session = HibernateDAOFactory.getSessionFactory().getCurrentSession();

        BigInteger publicIps = (BigInteger) session.createSQLQuery(COUNT_PUBLIC_IP_RESOURCES)
                .setParameter("virtualDatacenterId", virtualDatacenterId).uniqueResult();

        return publicIps == null ? 0 : publicIps.longValue();

    }

    public long getCurrentVlanAllocated(int virtualDatacenterId) {
        final DAOFactory daoF = HibernateDAOFactory.instance();

        Integer vlanCount = daoF.getVlanNetworkDAO().findByVirtualDatacenter(virtualDatacenterId).size();

        return vlanCount == null ? 0 : vlanCount;
    }
}