Package com.abiquo.server.core.infrastructure.storage

Source Code of com.abiquo.server.core.infrastructure.storage.InitiatorMappingDAO

/**
* 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.storage;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import org.hibernate.Criteria;
import org.hibernate.NonUniqueResultException;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import org.springframework.stereotype.Repository;

import com.abiquo.server.core.common.persistence.DefaultDAOBase;

@Repository("jpaInitiatorMappingDAO")
public class InitiatorMappingDAO extends DefaultDAOBase<Integer, InitiatorMapping>
{
    public InitiatorMappingDAO()
    {
        super(InitiatorMapping.class);
    }

    public InitiatorMappingDAO(final EntityManager entityManager)
    {
        super(InitiatorMapping.class, entityManager);
    }

    public InitiatorMapping findByVolumeAndInitiator(final Integer idVolumeManagement,
        final String initiatorIqn)
    {
        Criteria criteria =
            createCriteria(sameVolume(idVolumeManagement)).add(sameInitiator(initiatorIqn));
        // Return null if none found, but do not fail
        return (InitiatorMapping) criteria.uniqueResult();
    }

    @SuppressWarnings("unchecked")
    public List<InitiatorMapping> findByVolumeId(final Integer idVolume)
    {
        Criteria criteria = createCriteria(sameVolume(idVolume));
        return criteria.list();
    }

    public InitiatorMapping findBPMMappingForVolume(final Integer idVolume, final String bpmAddress)
    {
        // IMPORTANT! This method assumes that a volume can not be moved between physical
        // Datacenters. Otherwise this must be refactored.

        Query query = getEntityManager().createNamedQuery(InitiatorMapping.INITIATOR_MAPPING_BPM);
        query.setParameter("idVolume", idVolume);
        query.setParameter("bpmAddress", bpmAddress);

        List< ? > results = query.getResultList();
        if (results.size() > 1)
        {
            throw new NonUniqueResultException(results.size());
        }

        return results.isEmpty() ? null : (InitiatorMapping) results.get(0);
    }

    @SuppressWarnings("unchecked")
    public List<InitiatorMapping> findByInitiatorIqn(final String initiatorIqn)
    {
        Criteria criteria = createCriteria(sameInitiator(initiatorIqn));
        return criteria.list();
    }

    public void deleteMappingsForInitiator(final String initiatorIqn)
    {
        Query query =
            getEntityManager().createQuery(
                "DELETE FROM " + getPersistentClass().getSimpleName()
                    + " WHERE initiatorIqn = :initiatorIqn");
        query.setParameter("initiatorIqn", initiatorIqn);

        query.executeUpdate();
    }

    private static Criterion sameVolume(final Integer idVolume)
    {
        return Restrictions.eq("volume.id", idVolume);
    }

    private static Criterion sameInitiator(final String initiator)
    {
        return Restrictions.eq("initiatorIqn", initiator);
    }
}
TOP

Related Classes of com.abiquo.server.core.infrastructure.storage.InitiatorMappingDAO

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.