/** * 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.server.core.infrastructure.storage; import java.util.List; import javax.persistence.EntityManager; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import com.abiquo.server.core.appslibrary.VirtualMachineTemplate; import com.abiquo.server.core.cloud.NodeVirtualImage; import com.abiquo.server.core.cloud.NodeVirtualImageDAO; import com.abiquo.server.core.cloud.VirtualAppliance; import com.abiquo.server.core.cloud.VirtualDatacenter; import com.abiquo.server.core.cloud.VirtualMachine; import com.abiquo.server.core.cloud.stateful.DiskStatefulConversion; import com.abiquo.server.core.cloud.stateful.DiskStatefulConversionDAO; import com.abiquo.server.core.common.DefaultRepBase; import com.abiquo.server.core.infrastructure.management.Rasd; import com.abiquo.server.core.infrastructure.management.RasdDAO; import com.abiquo.server.core.infrastructure.management.RasdManagement; import com.abiquo.server.core.infrastructure.management.RasdManagementDAO; import com.abiquo.server.core.util.FilterOptions; /** * @author jdevesa */ @Repository public class StorageRep extends DefaultRepBase { @Autowired private StorageDeviceDAO deviceDAO; @Autowired private DiskManagementDAO diskManagementDAO; @Autowired private DiskStatefulConversionDAO diskStatefulConversionDAO; @Autowired private InitiatorMappingDAO initiatorMappingDAO; @Autowired private NodeVirtualImageDAO nodeVirtualImageDAO; @Autowired private StoragePoolDAO poolDAO; @Autowired private RasdDAO rasdDAO; @Autowired private RasdManagementDAO rasdManagementDAO; @Autowired private TierDAO tierDAO; @Autowired private VolumeManagementDAO volumeDAO; public StorageRep() { } public StorageRep(final EntityManager entityManager) { this.deviceDAO = new StorageDeviceDAO(entityManager); this.diskManagementDAO = new DiskManagementDAO(entityManager); this.diskStatefulConversionDAO = new DiskStatefulConversionDAO(entityManager); this.initiatorMappingDAO = new InitiatorMappingDAO(entityManager); this.nodeVirtualImageDAO = new NodeVirtualImageDAO(entityManager); this.poolDAO = new StoragePoolDAO(entityManager); this.rasdDAO = new RasdDAO(entityManager); this.rasdManagementDAO = new RasdManagementDAO(entityManager); this.tierDAO = new TierDAO(entityManager); this.volumeDAO = new VolumeManagementDAO(entityManager); } public InitiatorMapping findByVolumeAndInitiator(final Integer idVolumeManagement, final String initiatorIqn) { return initiatorMappingDAO.findByVolumeAndInitiator(idVolumeManagement, initiatorIqn); } public StorageDevice findDeviceById(final Integer datacenterId, final Integer deviceId) { return deviceDAO.getDeviceById(datacenterId, deviceId); } public StorageDevice findDeviceByManagementIP(final Integer datacenterId, final String managementIp) { return deviceDAO.findDeviceByManagementIP(datacenterId, managementIp); } public DiskManagement findHardDiskByVirtualMachine(final VirtualMachine vm, final Integer diskId) { return diskManagementDAO.findHardDiskByVirtualMachine(vm, diskId); } public List<DiskManagement> findHardDisksByVirtualMachine(final VirtualMachine vm) { return diskManagementDAO.findHardDisksByVirtualMachine(vm); } public List<NodeVirtualImage> findNodeVirtualImageByVirtualImage( final VirtualMachineTemplate virtualImage) { return nodeVirtualImageDAO.findByVirtualImage(virtualImage); } public StoragePool findPoolById(final Integer deviceId, final String poolId) { return poolDAO.findPoolById(deviceId, poolId); } public List<InitiatorMapping> getInitiatorMappings(final Integer idVolume) { return initiatorMappingDAO.findByVolumeId(idVolume); } public InitiatorMapping getInitiatorMapping(final Integer mappingId) { return initiatorMappingDAO.findById(mappingId); } public StoragePool findPoolByName(final Integer deviceId, final String name) { return poolDAO.findPoolByName(deviceId, name); } public List<StoragePool> findPoolsByTier(final Tier tier) { return poolDAO.findPoolsByTier(tier); } public List<StoragePool> findAllPools() { return poolDAO.findAll(); } public Tier findTierById(final Integer tierId) { return tierDAO.findById(tierId); } public Tier findTierById(final Integer datacenterId, final Integer tierId) { return tierDAO.getTierById(datacenterId, tierId); } public VolumeManagement findVolumeById(final Integer volumeId) { return volumeDAO.findById(volumeId); } public List<VolumeManagement> findVolumesByEnterprise(final Integer id, final FilterOptions filters) { return volumeDAO.getVolumesByEnterprise(id, filters); } public List<VolumeManagement> findVolumesByPool(final StoragePool pool, final FilterOptions filters) { return volumeDAO.getVolumesByPool(pool, filters); } public List< ? extends RasdManagement> findDisksAndVolumesByVirtualMachine( final VirtualMachine vm) { return rasdManagementDAO.findDisksAndVolumesByVirtualMachine(vm); } public List<StorageDevice> getDevicesByDatacenter(final Integer datacenterId) { return deviceDAO.getDevicesByDatacenter(datacenterId); } public DiskStatefulConversion getDiskStatefulConversionByVolume(final VolumeManagement volume) { return diskStatefulConversionDAO.getByVolume(volume.getId()); } public List<StoragePool> getPoolsByDevice(final Integer deviceId) { return poolDAO.getPoolsByStorageDevice(deviceId); } public List<VolumeManagement> getStatefulCandidates(final VirtualDatacenter vdc) { return volumeDAO.getStatefulCandidates(vdc); } public List<VolumeManagement> getAttachedVolumes(final VirtualDatacenter vdc) { return volumeDAO.getAttachedVolumes(vdc); } public List<VolumeManagement> getDetachedVolumes(final VirtualDatacenter vdc) { return volumeDAO.getDetachedVolumes(vdc); } public List<VolumeManagement> getAvailableVolumes(final VirtualDatacenter vdc, final FilterOptions filterOptions) { return volumeDAO.getAvailableVolumes(vdc, filterOptions); } public List<Tier> getAllTiers() { return tierDAO.findAll(); } public List<Tier> getTiersByDatacenter(final Integer datacenterId) { return tierDAO.getTiersByDatacenter(datacenterId); } public VolumeManagement getVolumeByVirtualDatacenter(final VirtualDatacenter vdc, final Integer volumeId) { return volumeDAO.getVolumeByVirtualDatacenter(vdc, volumeId); } public VolumeManagement getVolumeFromImage(final Integer idImage) { return volumeDAO.getVolumeFromImage(idImage); } public List<VolumeManagement> getVolumesByEnterprise(final int idEnterprise) { return volumeDAO.getVolumesFromEnterprise(idEnterprise); } public List<VolumeManagement> getVolumesByPool(final StoragePool pool) { return volumeDAO.getVolumesByPool(pool); } public List<Tier> getEnableTiersByDatacenter(final Integer datacenterId) { return tierDAO.getEnableTiersByDatacenter(datacenterId); } public List<VolumeManagement> getVolumesByVirtualDatacenter(final VirtualDatacenter vdc) { return volumeDAO.getVolumesByVirtualDatacenter(vdc); } public List<VolumeManagement> getVolumesByVirtualDatacenter(final VirtualDatacenter vdc, final FilterOptions filterOptions) { return volumeDAO.getVolumesByVirtualDatacenter(vdc, filterOptions); } @Deprecated // use vm.getVolumes public List<VolumeManagement> getVolumesByVirtualMachine(final VirtualMachine vm) { return volumeDAO.getVolumesByVirtualMachine(vm); } public List<VolumeManagement> getVolumesByVirtualMachine(final VirtualMachine vm, final FilterOptions filters) { return volumeDAO.getVolumesByVirtualMachine(vm, filters); } public StorageDevice insertDevice(final StorageDevice sd) { deviceDAO.persist(sd); deviceDAO.flush(); return sd; } /** Temporal backup rasd_management uses the same rasd */ public void insertTemporalHardDisk(final DiskManagement createdDisk) { diskManagementDAO.persist(createdDisk); } public void insertHardDisk(final DiskManagement createdDisk) { if (createdDisk.getRasd() != null) { rasdDAO.persist(createdDisk.getRasd()); } diskManagementDAO.persist(createdDisk); } public void insertInitiatorMapping(final InitiatorMapping imapping) { initiatorMappingDAO.persist(imapping); } public StoragePool insertPool(final StoragePool sp) { poolDAO.persist(sp); poolDAO.flush(); return sp; } public Tier insertTier(final Tier tier) { tierDAO.persist(tier); tierDAO.flush(); return tier; } /** Temporal backup rasd_management uses the same rasd */ public VolumeManagement insertTemporalVolume(final VolumeManagement volume) { volumeDAO.persist(volume); return volume; } public VolumeManagement insertVolume(final VolumeManagement volume) { rasdDAO.persist(volume.getRasd()); volumeDAO.persist(volume); volumeDAO.flush(); return volume; } public void removeDevice(final StorageDevice sd) { deviceDAO.remove(sd); deviceDAO.flush(); } public void removeHardDisk(final DiskManagement diskToDelete) { Rasd rasd = diskToDelete.getRasd(); diskManagementDAO.remove(diskToDelete); rasdDAO.remove(rasd); diskManagementDAO.flush(); } public void removePool(final StoragePool sp) { poolDAO.remove(sp); poolDAO.flush(); } public void removeVolume(final VolumeManagement volume) { Rasd rasd = volume.getRasd(); volumeDAO.remove(volume); rasdDAO.remove(rasd); volumeDAO.flush(); } public void updateDevice(final StorageDevice sd) { deviceDAO.flush(); } public void updatePool(final StoragePool pool) { poolDAO.flush(); } public void updateTier(final Tier tier) { tierDAO.flush(); } public void updateVolume(final VolumeManagement volume) { volumeDAO.flush(); } public List<VolumeManagement> getVolumesByVirtualAppliance(final VirtualAppliance vapp) { return volumeDAO.getVolumesByVirtualAppliance(vapp); } }