/**
* 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.appslibrary;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.EntityManager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import com.abiquo.model.enumerator.DiskFormatType;
import com.abiquo.model.enumerator.HypervisorType;
import com.abiquo.model.enumerator.StatefulInclusion;
import com.abiquo.server.core.cloud.VirtualDatacenter;
import com.abiquo.server.core.common.DefaultRepBase;
import com.abiquo.server.core.enterprise.Enterprise;
import com.abiquo.server.core.infrastructure.Datacenter;
@Repository
public class AppsLibraryRep extends DefaultRepBase
{
@Autowired
private VirtualMachineTemplateDAO virtualMachineTemplateDAO;
@Autowired
private VirtualImageConversionDAO conversionDAO;
@Autowired
private CategoryDAO categoryDAO;
public AppsLibraryRep()
{
}
public AppsLibraryRep(final EntityManager em)
{
this.entityManager = em;
this.virtualMachineTemplateDAO = new VirtualMachineTemplateDAO(em);
this.categoryDAO = new CategoryDAO(em);
this.conversionDAO = new VirtualImageConversionDAO(em);
}
// Category
public void insertCategory(final Category category)
{
categoryDAO.persist(category);
}
public void updateCategory(final Category category)
{
categoryDAO.flush();
}
/**
* If if being used by any {@link VirtualMachineTemplate} its changed to the DEFAULT category;
*/
public void deleteCategory(final Category category)
{
for (VirtualMachineTemplate templ : virtualMachineTemplateDAO.findBy(category))
{
templ.setCategory(categoryDAO.findDefault());
}
categoryDAO.remove(category);
}
public Category getDefaultCategory()
{
return categoryDAO.findDefault();
}
public List<Category> findAllCategories(final Integer idEnterprise, final boolean onlyLocal)
{
List<Category> result = new ArrayList<Category>();
if (idEnterprise != 0)
{
if (onlyLocal)
{
return categoryDAO.findLocalCategories(idEnterprise);
}
result.addAll(categoryDAO.findLocalCategories(idEnterprise));
}
result.addAll(categoryDAO.findGlobalCategories());
return result;
}
public Category findCategoryById(final Integer idCategory)
{
return categoryDAO.findById(idCategory);
}
public Category findCategoryByName(final String name, final Enterprise enterprise)
{
return categoryDAO.findByNameAndEnterprise(name, enterprise);
}
public Category findByCategoryNameOrCreateNew(final String categoryName)
{
if (categoryName == null || categoryName.isEmpty())
{
return getDefaultCategory();
}
Category cat = findCategoryByName(categoryName, null);
if (cat == null)
{
cat = new Category(categoryName);
insertCategory(cat);
}
return cat;
}
public boolean existAnyWithName(final String name)
{
return categoryDAO.existsAnyWithName(name);
}
public boolean existAnyOtherWithName(final Category category, final String name)
{
return categoryDAO.existsAnyOtherWithName(category, name);
}
// Virtual Machine Template
public void insertVirtualMachineTemplate(final VirtualMachineTemplate virtualMachineTemplate)
{
virtualMachineTemplateDAO.persist(virtualMachineTemplate);
}
public void updateVirtualMachineTemplate(final VirtualMachineTemplate virtualMachineTemplate)
{
virtualMachineTemplateDAO.flush();
}
public void deleteVirtualMachineTemplate(final VirtualMachineTemplate virtualMachineTemplate)
{
virtualMachineTemplateDAO.remove(virtualMachineTemplate);
}
public List<VirtualMachineTemplate> findAllVirtualMachineTemplates()
{
return virtualMachineTemplateDAO.findAll();
}
public VirtualMachineTemplate findVirtualMachineTemplateById(
final Integer virtualMachineTemplate)
{
return virtualMachineTemplateDAO.findById(virtualMachineTemplate);
}
public VirtualMachineTemplate findVirtualMachineTemplateByName(final String name)
{
return virtualMachineTemplateDAO.findByName(name);
}
public List<VirtualMachineTemplate> findVirtualMachineTemplatesByEnterprise(
final Enterprise enterprise)
{
return virtualMachineTemplateDAO.findByEnterprise(enterprise);
}
public List<VirtualMachineTemplate> findVirtualMachineTemplatesByEnterpriseAndRepository(
final Enterprise enterprise,
final com.abiquo.server.core.infrastructure.Repository repository)
{
return virtualMachineTemplateDAO.findByEnterpriseAndRepository(enterprise, repository);
}
public List<VirtualMachineTemplate> findImportedVirtualMachineTemplatesByEnterprise(
final Enterprise enterprise)
{
return virtualMachineTemplateDAO.findImportedByEnterprise(enterprise);
}
/**
* Gets the list of compatible(*) virtual machine templates available in the provided enterprise
* and repository.
*
* @param category null indicate all categories (no filter)
* @param hypervisor (*) null indicate no filter compatibles, else return templates compatibles
* or with compatible conversions. @see {@link VirtualImageConversionDAO}
*/
public List<VirtualMachineTemplate> findVirtualMachineTemplates(final Enterprise enterprise,
final com.abiquo.server.core.infrastructure.Repository repository, final Category category,
final HypervisorType hypervisor)
{
if (category == null && hypervisor == null)
{
return findVirtualMachineTemplatesByEnterpriseAndRepository(enterprise, repository);
}
return virtualMachineTemplateDAO.findBy(enterprise, repository, category, hypervisor);
}
public List<VirtualMachineTemplate> findImportedVirtualMachineTemplates(
final Enterprise enterprise, final Integer datacenterId, final Category category,
final HypervisorType hypervisor)
{
if (category == null && hypervisor == null)
{
return virtualMachineTemplateDAO.findImportedByEnterprise(enterprise);
}
return virtualMachineTemplateDAO.findImportedBy(enterprise, category, hypervisor);
}
public boolean existVirtualMachineTemplateWithSamePath(final Enterprise enterprise,
final com.abiquo.server.core.infrastructure.Repository repository, final String path)
{
return virtualMachineTemplateDAO.existWithSamePath(enterprise, repository, path);
}
public VirtualMachineTemplate findVirtualMachineTemplateByPath(final Enterprise enterprise,
final com.abiquo.server.core.infrastructure.Repository repository, final String path)
{
return virtualMachineTemplateDAO.findByPath(enterprise, repository, path);
}
public List<VirtualMachineTemplate> findAllStatefulVirtualMachineTemplates()
{
return virtualMachineTemplateDAO.findStatefuls();
}
public List<VirtualMachineTemplate> findStatefulVirtualMachineTemplatesByDatacenter(
final Datacenter datacenter, final StatefulInclusion stateful)
{
return virtualMachineTemplateDAO.findStatefulsByDatacenter(datacenter, stateful);
}
public List<VirtualMachineTemplate> findStatefulVirtualMachineTemplatesByDatacenterAndVirtualDatacenter(
final Datacenter datacenter, final VirtualDatacenter virtualDatacenter,
final StatefulInclusion stateful)
{
return virtualMachineTemplateDAO.findStatefulsByDatacenter(datacenter, virtualDatacenter,
stateful);
}
public List<VirtualMachineTemplate> findStatefulVirtualMachineTemplatesByCategoryAndDatacenter(
final Category category, final Datacenter datacenter, final StatefulInclusion stateful)
{
return virtualMachineTemplateDAO.findStatefulsByCategoryAndDatacenter(category, datacenter,
stateful);
}
public List<VirtualMachineTemplate> findStatefulVirtualMachineTemplatesByCategoryAndDatacenterandVirutalDatacenter(
final Category category, final Datacenter datacenter,
final VirtualDatacenter virtualdatacenter, final StatefulInclusion stateful)
{
return virtualMachineTemplateDAO.findStatefulsByCategoryAndDatacenter(category, datacenter,
virtualdatacenter, stateful);
}
public boolean isMaster(final VirtualMachineTemplate vmtemplae)
{
return virtualMachineTemplateDAO.isMaster(vmtemplae);
}
public List<VirtualMachineTemplate> findVirtualMachineTemplatesByMaster(
final VirtualMachineTemplate master)
{
return virtualMachineTemplateDAO.findByMaster(master);
}
/**
* @see com.abiquo.server.core.appslibrary.VirtualImageConversionDAO#compatilbeConversions(com.abiquo.server.core.cloud.VirtualMachineTemplate,
* com.abiquo.model.enumerator.HypervisorType)
*/
public List<VirtualImageConversion> compatilbeConversions(
final VirtualMachineTemplate vmtemplate, final HypervisorType hypervisorType)
{
return conversionDAO.compatilbeConversions(vmtemplate, hypervisorType);
}
public boolean isVirtualMachineTemplateConverted(final VirtualMachineTemplate vmtemplate,
final DiskFormatType targetType)
{
return conversionDAO.isConverted(vmtemplate, targetType);
}
public void addConversion(final VirtualImageConversion conversion)
{
conversionDAO.persist(conversion);
}
public boolean existDuplicatedConversion(final VirtualImageConversion conversion)
{
return conversionDAO.existDuplicatedConversion(conversion);
}
public List<String> findIconsByEnterprise(final Integer enterpriseId)
{
return virtualMachineTemplateDAO.findIconsByEnterprise(enterpriseId);
}
}