/**
* 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.common.persistence;
import java.util.List;
import com.abiquo.server.core.appslibrary.AppsLibrary;
import com.abiquo.server.core.appslibrary.Category;
import com.abiquo.server.core.appslibrary.TemplateDefinition;
import com.abiquo.server.core.appslibrary.TemplateDefinitionList;
import com.abiquo.server.core.appslibrary.VirtualMachineTemplate;
import com.abiquo.server.core.appslibrary.VirtualImageConversion;
import com.abiquo.server.core.cloud.Hypervisor;
import com.abiquo.server.core.cloud.NodeVirtualImage;
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.chef.RunlistElement;
import com.abiquo.server.core.cloud.stateful.DiskStatefulConversion;
import com.abiquo.server.core.cloud.stateful.NodeVirtualImageStatefulConversion;
import com.abiquo.server.core.cloud.stateful.VirtualApplianceStatefulConversion;
import com.abiquo.server.core.config.License;
import com.abiquo.server.core.config.SystemProperty;
import com.abiquo.server.core.enterprise.DatacenterLimits;
import com.abiquo.server.core.enterprise.Enterprise;
import com.abiquo.server.core.enterprise.OneTimeTokenSession;
import com.abiquo.server.core.enterprise.Privilege;
import com.abiquo.server.core.enterprise.Role;
import com.abiquo.server.core.enterprise.RoleLdap;
import com.abiquo.server.core.enterprise.Session;
import com.abiquo.server.core.enterprise.User;
import com.abiquo.server.core.infrastructure.Datacenter;
import com.abiquo.server.core.infrastructure.Datastore;
import com.abiquo.server.core.infrastructure.Machine;
import com.abiquo.server.core.infrastructure.Rack;
import com.abiquo.server.core.infrastructure.RemoteService;
import com.abiquo.server.core.infrastructure.Repository;
import com.abiquo.server.core.infrastructure.management.Rasd;
import com.abiquo.server.core.infrastructure.management.RasdManagement;
import com.abiquo.server.core.infrastructure.network.IpPoolManagement;
import com.abiquo.server.core.infrastructure.network.Network;
import com.abiquo.server.core.infrastructure.network.NetworkAssignment;
import com.abiquo.server.core.infrastructure.network.NetworkConfiguration;
import com.abiquo.server.core.infrastructure.network.VLANNetwork;
import com.abiquo.server.core.infrastructure.storage.StorageDevice;
import com.abiquo.server.core.infrastructure.storage.StoragePool;
import com.abiquo.server.core.infrastructure.storage.Tier;
import com.abiquo.server.core.infrastructure.storage.VolumeManagement;
import com.abiquo.server.core.pricing.CostCode;
import com.abiquo.server.core.pricing.CostCodeCurrency;
import com.abiquo.server.core.pricing.Currency;
import com.abiquo.server.core.pricing.PricingCostCode;
import com.abiquo.server.core.pricing.PricingTemplate;
import com.abiquo.server.core.pricing.PricingTier;
import com.abiquo.server.core.scheduler.EnterpriseExclusionRule;
import com.abiquo.server.core.scheduler.FitPolicyRule;
import com.abiquo.server.core.scheduler.MachineLoadRule;
import com.abiquo.server.core.statistics.CloudUsage;
import com.abiquo.server.core.statistics.DatacenterResources;
import com.abiquo.server.core.statistics.EnterpriseResources;
import com.abiquo.server.core.statistics.VirtualAppResources;
import com.abiquo.server.core.statistics.VirtualDatacenterResources;
import com.softwarementors.bzngine.engines.jpa.test.configuration.EntityManagerFactoryForTesting;
import com.softwarementors.bzngine.engines.jpa.test.configuration.JpaEntityManagerFactoryForTesting;
import com.softwarementors.bzngine.engines.jpa.test.configuration.PersistentClassRemovalInformation;
import com.softwarementors.bzngine.entities.PersistentEntity;
import com.softwarementors.commons.collections.ListUtils;
public class TestDataAccessManager
{
private static JpaEntityManagerFactoryForTesting factory;
private static List<String> associationTablesInAssociationDeletionOrder =
ListUtils.createList();
private static List<PersistentClassRemovalInformation<PersistentEntity< ? >, ? >> persistentClassesInEntityDeletionOrder =
ListUtils.createList();
static
{
initializePersistentInstanceRemovalSupport();
}
@SuppressWarnings("unchecked")
private static <T extends PersistentEntity< ? >> void addPersistentClassesToCleanInRemovalOrder(
final Class< ? >... classes)
{
for (Class< ? > cls : classes)
{
persistentClassesInEntityDeletionOrder.add(new PersistentClassRemovalInformation(cls));
}
}
private static void addIntermediateTablesToCleanInRemovalOrder(final String... tables)
{
for (String table : tables)
{
associationTablesInAssociationDeletionOrder.add(table);
}
}
public static EntityManagerFactoryForTesting getFactory()
{
if (factory == null)
{
factory =
new JpaEntityManagerFactoryWithFilters("abiquoPersistence",
persistentClassesInEntityDeletionOrder,
associationTablesInAssociationDeletionOrder);
}
return factory;
}
/*
* public static void closeFactory() { if( factory != null ) { factory.close(); factory = null;
* } }
*/
private static void initializePersistentInstanceRemovalSupport()
{
/**
* Please Notice that arguments ORDER in this method is important to avoid persistence
* problems.
*/
addPersistentClassesToCleanInRemovalOrder(NetworkAssignment.class, NodeVirtualImage.class,
EnterpriseExclusionRule.class, FitPolicyRule.class, MachineLoadRule.class,
VirtualAppResources.class, VirtualAppliance.class, RunlistElement.class,
VirtualMachine.class, TemplateDefinitionList.class, TemplateDefinition.class,
AppsLibrary.class, VolumeManagement.class, VirtualImageConversion.class,
VirtualMachineTemplate.class, Category.class, IpPoolManagement.class,
RasdManagement.class, VLANNetwork.class, NetworkConfiguration.class,
VirtualDatacenterResources.class, VirtualDatacenter.class, DatacenterResources.class,
DatacenterLimits.class, Session.class, User.class, RoleLdap.class, Role.class,
Privilege.class, EnterpriseResources.class, Enterprise.class, Hypervisor.class,
Datastore.class, Machine.class, Rack.class, StoragePool.class, Tier.class,
StorageDevice.class, RemoteService.class, Repository.class, CloudUsage.class,
Datacenter.class, Network.class, SystemProperty.class, Rasd.class, License.class,
NodeVirtualImageStatefulConversion.class, DiskStatefulConversion.class,
VirtualApplianceStatefulConversion.class, CostCodeCurrency.class,
PricingCostCode.class, PricingTier.class, PricingTemplate.class, CostCode.class,
Currency.class, OneTimeTokenSession.class);
addIntermediateTablesToCleanInRemovalOrder(Machine.DATASTORES_ASSOCIATION_TABLE,
DatacenterLimits.TABLE_NAME, EnterpriseResources.TABLE_NAME, Role.ASSOCIATION_TABLE,
TemplateDefinitionList.TEMPLATE_DEFINITION_TABLE);
}
}