Package com.abiquo.server.core.infrastructure.network

Source Code of com.abiquo.server.core.infrastructure.network.VLANNetworkDAO

/**
* Copyright (C) 2008 - Abiquo Holdings S.L. All rights reserved.
*
* Please see /opt/abiquo/tomcat/webapps/legal/ on Abiquo server
* or contact contact@abiquo.com for licensing information.
*/
package com.abiquo.server.core.infrastructure.network;

import java.util.List;

import javax.persistence.EntityManager;

import org.apache.commons.lang.StringUtils;
import org.hibernate.Criteria;
import org.hibernate.Query;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.abiquo.model.enumerator.NetworkType;
import com.abiquo.server.core.cloud.VirtualDatacenter;
import com.abiquo.server.core.common.persistence.DefaultDAOBase;
import com.abiquo.server.core.enterprise.Enterprise;
import com.abiquo.server.core.infrastructure.Datacenter;
import com.abiquo.server.core.infrastructure.Rack;
import com.softwarementors.bzngine.entities.PersistentEntity;

@Repository
public class VLANNetworkDAO extends DefaultDAOBase<Integer, VLANNetwork>
{
    private static Criterion sameNetwork(final Network network)
    {
        return Restrictions.eq(VLANNetwork.NETWORK_PROPERTY, network);
    }

    private static Criterion sameID(final Integer vlanId)
    {
        return Restrictions.eq(PersistentEntity.ID_PROPERTY, vlanId);
    }

    private static Criterion sameNetwork(final VirtualDatacenter virtualDatacenter)
    {
        return sameNetwork(virtualDatacenter.getNetwork());
    }

    private final String FIND_BY_DATACENTER =
        " Select vlan "
            + "FROM com.abiquo.server.core.infrastructure.network.VLANNetwork vlan, "
            + "com.abiquo.server.core.cloud.VirtualDatacenter vdc "
            + "INNER JOIN vdc.network net WHERE vdc.datacenter.id = :datacenterId and vlan.network.id = net.id";

    private final String FIND_BY_ENTERPRISE = " SELECT vlan "//
        + "FROM com.abiquo.server.core.infrastructure.network.VLANNetwork vlan, "//
        + "com.abiquo.server.core.cloud.VirtualDatacenter vdc "//
        + "WHERE vlan.network.id = vdc.network.id "//
        + "and vdc.enterprise.id = :enterpriseId";

    private final String GET_VLAN_DATACENTER =
        "SELECT dc " //
            + "FROM com.abiquo.server.core.infrastructure.Datacenter dc " //
            + "inner join dc.network net, com.abiquo.server.core.infrastructure.network.VLANNetwork vlan " //
            + "WHERE net.id = vlan.network.id AND vlan.id = :id";

    private final String GET_PUBLIC_VLANS_VIRTUALDATACENTER = "SELECT vlan "
        + "FROM com.abiquo.server.core.infrastructure.network.VLANNetwork vlan, "
        + "     com.abiquo.server.core.cloud.VirtualDatacenter vdc,  "
        + "     com.abiquo.server.core.infrastructure.Datacenter dc "
        + "WHERE vlan.type = 'PUBLIC' and vlan.network.id = dc.network.id "
        + "AND vdc.datacenter.id = dc.id " + "AND vdc.id = :vdcId ";

    private final String GET_PUBLIC_VLAN_VIRTUALDATACENTER = "SELECT vlan "
        + "FROM com.abiquo.server.core.infrastructure.network.VLANNetwork vlan, "
        + "     com.abiquo.server.core.cloud.VirtualDatacenter vdc,  "
        + "     com.abiquo.server.core.infrastructure.Datacenter dc "
        + "WHERE vlan.type = 'PUBLIC' and vlan.network.id = dc.network.id "
        + "AND vdc.datacenter.id = dc.id AND vdc.id = :vdcId AND vlan.id = :vlanId";

    public VLANNetworkDAO()
    {
        super(VLANNetwork.class);
    }

    public VLANNetworkDAO(final EntityManager em)
    {
        super(VLANNetwork.class, em);
    }

    public boolean existsAnyWithName(final Network network, final String name)
    {
        assert !StringUtils.isEmpty(name);

        return existsAnyByCriterions(sameNetwork(network), nameEqual(name));
    }

    public List<VLANNetwork> findByEnterprise(final int enterpriseId)
    {
        Query query = getSession().createQuery(FIND_BY_ENTERPRISE);
        query.setParameter("enterpriseId", enterpriseId);

        return query.list();
    }

    public VLANNetwork findExternalVlanByEnterprise(final Enterprise ent, final Integer vlanId)
    {
        return findUniqueByCriterions(Restrictions.eq(VLANNetwork.ENTERPRISE_PROPERTY, ent),
            Restrictions.eq(PersistentEntity.ID_PROPERTY, vlanId));
    }

    public VLANNetwork findExternalVlanByEnterpriseInDatacenter(final Enterprise ent,
        final Datacenter datacenter, final Integer vlanId)
    {
        Criteria criteria = getSession().createCriteria(VLANNetwork.class);
        criteria.add(Restrictions.eq(VLANNetwork.ENTERPRISE_PROPERTY, ent));
        criteria.add(sameNetwork(datacenter.getNetwork()));
        criteria.add(Restrictions.eq(PersistentEntity.ID_PROPERTY, vlanId));
        return (VLANNetwork) criteria.uniqueResult();
    }

    public List<VLANNetwork> findExternalVlansByEnterprise(final Enterprise ent)
    {
        return findByCriterions(Restrictions.eq(VLANNetwork.ENTERPRISE_PROPERTY, ent));
    }

    public List<VLANNetwork> findExternalVlansByEnterpriseInDatacenter(final Enterprise ent,
        final Datacenter datacenter)
    {
        return findByCriterions(Restrictions.eq(VLANNetwork.ENTERPRISE_PROPERTY, ent),
            sameNetwork(datacenter.getNetwork()));
    }

    public List<VLANNetwork> findPrivateVLANNetworksByDatacenter(final Datacenter datacenter)
    {
        Query query = getSession().createQuery(FIND_BY_DATACENTER);
        query.setParameter("datacenterId", datacenter.getId());

        return query.list();
    }

    public VLANNetwork findPublicVlanByDatacenter(final Datacenter dc, final Integer vlanId)
    {
        return findUniqueByCriterions(sameNetwork(dc.getNetwork()),
            Restrictions.eq(PersistentEntity.ID_PROPERTY, vlanId));
    }

    public VLANNetwork findVlanById(final Integer vlanId)
    {

        Criteria criteria = createCriteria(sameID(vlanId));
        return (VLANNetwork) criteria.uniqueResult();
    }

    public List<VLANNetwork> findPublicVLANNetworksByDatacenter(final Datacenter datacenter,
        final NetworkType netType)
    {

        Criterion inNetwork =
            Restrictions.eq(VLANNetwork.NETWORK_PROPERTY, datacenter.getNetwork());
        Criteria criteria = getSession().createCriteria(VLANNetwork.class).add(inNetwork);
        if (netType != null)
        {
            if (netType.equals(NetworkType.PUBLIC))
            {

                criteria.add(Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.PUBLIC));
                // criteria.add(Restrictions.isNull(VLANNetwork.ENTERPRISE_PROPERTY));
            }
            else if (netType.equals(NetworkType.EXTERNAL_UNMANAGED))
            {
                criteria.add(Restrictions.or(
                    Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.EXTERNAL),
                    Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.UNMANAGED)));
                // criteria.add(Restrictions.isNotNull(VLANNetwork.ENTERPRISE_PROPERTY));
            }
            else if (netType.equals(NetworkType.EXTERNAL))
            {
                criteria.add(Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.EXTERNAL));
                // criteria.add(Restrictions.isNotNull(VLANNetwork.ENTERPRISE_PROPERTY));
            }
            else if (netType.equals(NetworkType.UNMANAGED))
            {
                criteria.add(Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.UNMANAGED));
            }
            else if (netType.equals(NetworkType.INTERNAL))
            {
                criteria.add(Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.INTERNAL));
                // criteria.add(Restrictions.isNotNull(VLANNetwork.ENTERPRISE_PROPERTY));
            }
        }

        return criteria.list();
    }

    public List<VLANNetwork> findVLANNetworksByDatacenterAndEnterprise(final Datacenter datacenter,
        final Enterprise enterprise)
    {

        Criterion inNetwork =
            Restrictions.eq(VLANNetwork.NETWORK_PROPERTY, datacenter.getNetwork());
        Criteria criteria = getSession().createCriteria(VLANNetwork.class).add(inNetwork);

        criteria.add(Restrictions.or(
            Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.EXTERNAL),
            Restrictions.eq(VLANNetwork.TYPE_PROPERTY, NetworkType.UNMANAGED)));

        criteria.add(Restrictions.eq(VLANNetwork.ENTERPRISE_PROPERTY, enterprise));

        return criteria.list();
    }

    public VLANNetwork findVlanByNameInNetwork(final Network network, final String name)
    {
        return findUniqueByCriterions(sameNetwork(network),
            Restrictions.eq(VLANNetwork.NAME_PROPERTY, name));

    }

    public VLANNetwork findVlanByVirtualDatacenterId(final VirtualDatacenter virtualDatacenter,
        final Integer vlanId)
    {
        Criteria criteria = getSession().createCriteria(VLANNetwork.class);
        criteria.add(Restrictions.eq(VLANNetwork.NETWORK_PROPERTY, virtualDatacenter.getNetwork()));
        criteria.add(Restrictions.eq(PersistentEntity.ID_PROPERTY, vlanId));
        return (VLANNetwork) criteria.uniqueResult();
    }

    public List<VLANNetwork> findVlanNetworks(final VirtualDatacenter virtualDatacenter)
    {
        assert virtualDatacenter != null;

        Criteria criteria = createCriteria(sameNetwork(virtualDatacenter));
        criteria.addOrder(Order.asc(VLANNetwork.NAME_PROPERTY));
        List<VLANNetwork> result = getResultList(criteria);

        return result;
    }

    public List<VLANNetwork> findVlanNetworksByNetworkServiceTypes(final NetworkServiceType nst)
    {
        Criteria criteria = getSession().createCriteria(VLANNetwork.class);
        criteria.add(Restrictions.eq(VLANNetwork.NETWORK_SERVICE_TYPE_PROPERTY, nst));

        return criteria.list();
    }

    public List<Integer> getVLANTagsUsedInRack(final Rack rack)
    {
        String idRack = String.valueOf(rack.getId());

        Query query = getSession().createQuery("SELECT vn.tag FROM " //
            + "com.abiquo.server.core.infrastructure.network.VLANNetwork vn, " //
            + "com.abiquo.server.core.infrastructure.network.NetworkAssignment vna " //
            + "WHERE vn.id = vna.vlanNetwork.id " + //
            "AND vna.rack.id = " + idRack + " AND vn.tag IS NOT NULL");

        // FIXME
        // Query query = getSession().createQuery(VLAN_ID_TAG_USED);
        // query.setInteger("idRack", rack.getId());

        return query.list();
    }

    public boolean isPublic(final VLANNetwork vlan)
    {
        Query query = getSession().createQuery(GET_VLAN_DATACENTER);
        query.setParameter("id", vlan.getId());

        return query.uniqueResult() != null;
    }

    private Criterion nameEqual(final String name)
    {
        assert name != null;

        return Restrictions.eq(VLANNetwork.NAME_PROPERTY, name);
    }

    public List<VLANNetwork> getPublicVLANsByVirtualDatacenter(final Integer vdcId)
    {
        Query query = getSession().createQuery(GET_PUBLIC_VLANS_VIRTUALDATACENTER);
        query.setParameter("vdcId", vdcId);

        return query.list();
    }

    public VLANNetwork getPublicVLANByVirtualDatacenter(final VirtualDatacenter vdc,
        final Integer vlanId)
    {
        Query query = getSession().createQuery(GET_PUBLIC_VLAN_VIRTUALDATACENTER);
        query.setParameter("vdcId", vdc.getId());
        query.setParameter("vlanId", vlanId);

        return (VLANNetwork) query.uniqueResult();
    }

}
TOP

Related Classes of com.abiquo.server.core.infrastructure.network.VLANNetworkDAO

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.